人事管理系統 c語言版
阿新 • • 發佈:2019-02-09
int menu(){
printf("請按提示輸入完成操作!\n");
printf("1.查詢員工資訊\n");
printf("2.統計員工數量\n");
printf("3.錄入員工資訊\n");
printf("4.刪除員工資訊\n");
printf("5.按id排序所有員工\n");
printf("6.列印所有員工資訊\n");
printf("7.退出系統\n");
return 0;
printf("請按提示輸入完成操作!\n");
printf("1.查詢員工資訊\n");
printf("2.統計員工數量\n");
printf("3.錄入員工資訊\n");
printf("4.刪除員工資訊\n");
printf("5.按id排序所有員工\n");
printf("6.列印所有員工資訊\n");
printf("7.退出系統\n");
return 0;
}
如menu()函式所示,該系統一共有7個功能
#include <stdio.h> #include <stdlib.h> #include <string.h> struct emp{ int id; char name[50]; struct emp * next; // struct emp * prev; }; struct emp * initList(); struct emp * addListTailNode(struct emp * head); struct emp * deleteListNode(struct emp * head,int id); struct emp * searchEmp(struct emp * head,int id); int printList(struct emp * l); int printNode(struct emp * p); struct emp * sortList(struct emp * head); int getListLen(struct emp * head); int writeToDisk(struct emp * head); struct emp * readFromDisk(); int menu(); int usage(struct emp * head);
#include "emp.h" int main(){ struct emp * head; head=readFromDisk(); usage(head); return 0; } struct emp * initList(){ struct emp * head; head=(struct emp *)malloc(sizeof(struct emp)); head->next=NULL; return head; } struct emp * addListTailNode(struct emp * head){ int id; char name[50]; struct emp * p, * last , * check; last = head; while(last->next!=NULL){ last=last->next; } printf("依次輸入:員工id號,姓名!\n"); scanf("%d%s",&id,&name); check = head; while(check!=last){ //遍歷 check=check->next; if(id==check->id){ printf("新增失敗!員工id號重複!\n"); return head; } } p=(struct emp *)malloc(sizeof(struct emp)); p->id=id; strcpy(p->name,name); // last->next=p; last=p; p->next=NULL; printf("%s員工資訊已新增!\n",p->name); return head; } struct emp * deleteListNode(struct emp * head,int id){ struct emp * p,* q; p = head->next; while(p!=NULL){ if(p->next->id==id){ break; } p=p->next; } if(head->next==NULL){ printf("書籍資訊為空!刪除失敗!\n"); } else{ q = p->next; p->next = q->next; printf("%s書籍資訊被刪除!\n",q->name); free(q); } return head; } struct emp * searchEmp(struct emp * head,int id){//查詢,返回節點資訊 struct emp * p; p = head->next; while(p!=NULL){ if(p->id==id){ break; } p=p->next; } return p; } int printNode(struct emp * p){//列印節點資訊 if(p!=NULL){ printf("員工id: %d 員工姓名:%s\n",p->id,p->name); } else{ printf("系統內無該員工資訊!\n"); } return 0; } int printList(struct emp * head){ //列印整條連結串列 struct emp * p; p = head->next; while(p!=NULL){ printNode(p); p=p->next; } return 0; } struct emp * sortList(struct emp * head){//排序 struct emp * p,* q; int temp_id; char temp_name[50]; for(p=head->next;p!=NULL;p=p->next){ for(q=p->next;q!=NULL;q=q->next){ if(p->id>q->id){ temp_id = q->id; q->id = p->id; p->id = temp_id; // strcpy(temp_name,q->name); strcpy(q->name,p->name); strcpy(p->name,temp_name); } } } return head; } int getListLen(struct emp * head){ int len=0; struct emp * p; p=head->next; while(p!=NULL){ len++; p=p->next; } return len; } int writeToDisk(struct emp * head){ FILE * fp; struct emp * p; if((fp = fopen("D:\\emp.hhtx", "w")) == 0){ printf("寫入失敗……!\n"); return 0; } // p=head->next; while(p!=NULL){ fwrite(p,sizeof(struct emp),1,fp); printf("%d %s\n",p->id,p->name); p=p->next; } fclose(fp); return 0; } struct emp * readFromDisk(){ FILE * fp; struct emp * head,* last,* p,* temp; head = initList(); if((fp = fopen("D:\\emp.hhtx", "r")) == 0){ printf("載入失敗……未找到存檔資料!\n\n"); return head; } // last = head; p=(struct emp *)malloc(sizeof(struct emp)); while(p!=NULL){ p=(struct emp *)malloc(sizeof(struct emp)); fread(p,sizeof(struct emp),1,fp); printf("讀取資料: %d %s\n",p->id,p->name); // last->next=p; last=p; p=p->next; } fclose(fp); printf("系統資料初始化完成!"); return head; } int menu(){ printf("請按提示輸入完成操作!\n"); printf("1.查詢員工資訊\n"); printf("2.統計員工數量\n"); printf("3.錄入員工資訊\n"); printf("4.刪除員工資訊\n"); printf("5.按id排序所有員工\n"); printf("6.列印所有員工資訊\n"); printf("7.退出系統\n"); return 0; } int usage(struct emp * head){ int x,id; struct emp * p; menu(); while(1){ printf("請輸入序列號:"); scanf("%d",&x); switch(x){ case 1: printf("輸入所要查詢的員工的id號:"); scanf("%d",&id); p = searchEmp(head,id); printNode(p); printf("---------------------------------\n"); break; case 2: printf("系統中一共存在%d個員工\n",getListLen(head)); break; case 3: head=addListTailNode(head); printf("---------------------------------\n"); break; case 4: printf("輸入所要刪除的員工的id號:"); scanf("%d",&id); head=deleteListNode(head,id); printf("---------------------------------\n"); break; case 5: printf("排序開始……\n"); head=sortList(head); printf("排序已完成!\n"); printf("---------------------------------\n"); break; case 6: printList(head); printf("---------------------------------\n"); break; case 7: writeToDisk(head); printf("儲存完成……\n"); printf("已退出系統!\n"); printf("---------------------------------\n"); return 0; default: return 0; } } return 0; }