C语言员工信息管理系统
1.題目及總體設計
題目:員工信息管理系統
總體設計:1.實現添加功能,即添加員工的相關信息。
2.實現查看功能,即顯示系統中所有員工的相關信息。
3.實現查找功能,即可以通過多種條件對員工進行查詢。
4.實現修改功能,即輸入員工的姓名修改其相關信息。
5.實現刪除功能,即輸入員工的姓名刪除其相關信息。
6.退出系統。
2.各個模塊詳細的功能描述
(1).輸入員工信息功能模塊:用struct Employee * Create(),void Add(struct Employee * pHead)函數實現將用戶從鍵盤輸入的數據存儲到對應字段或數據成員中,并檢查輸入的合法性。
(2).顯示員工信息功能模塊:調用void Show(struct Employee * pHead); void ShowLine();void ShowHead(int iType); void ShowMainMenu()函數用戶根據提示操作顯示系統中已有的員工的相關信息,如果系統中海沒有存儲員工信息則給出無法顯示信息的提示。
(3).查詢員工信息功能模塊:調用struct Employee * Search(struct Employee *pHead);函數根據用戶輸入的待查詢記錄的關鍵字,在數據結構中查找該記錄,如找到則輸出該員工的信息,否則給出無法找到的提示信息。
(4).修改員工信息功能模塊:調用void Modify(struct Employee * pHead);函數,根據用戶要求,根據提示操作,找到要修改信息的員工然后修改員工的相關信息,如年齡。工資等。
(5).刪除員工信息功能模塊:調用void Delete(struct Employee * pHead);函數,由用戶輸入選擇刪除相關的員工的信息。
(6).退出系統功能模塊:在用戶執行完相關系統操作之后,退出使用本系統。
3.測試結果分析與說明
(1).正常測試數據和運行結果
??第一組:實現添加員工信息并顯示員工的信息的功能,操作如下圖:
?
??第二組:查詢員工信息功能,操作如下圖:
??第三組:實現修改員工信息的功能,并顯示修改后的員工信息,操作如下圖:
?? (2).異常測試數據及運行結果
???? 第一組:添加員工信息后表格不顯示,操作如下圖:
???? 第二組:緩沖區空格被gets函數讀取,操作如下圖:
4.課程設計小結
(1).改進方案
??? 員工信息管理系統中,其功能包括了存儲和讀寫員工的基本信息,例如姓名、年齡、職位、工資等,都有存儲記錄,和可以再讀取,編程也實現由增、刪、查、改等的功能,且本系統是基于鏈表和文件編程實現的,使用和操作本系統基本沒問題,達到了一個企業員工基本信息管理的要求。
但是也存在很多不足之處,首先,本系統的功能還是比較少的,明顯的一個就是缺少了排序,例如按員工的姓名或工號的信息排序等,所以修改完善本系統時可以添加排序功能,其次操作界面也有不夠完美,所以修改也可以設計更好的界面。
(2).體會
??? 的課程設計中,我選定的是編寫一個員工信息管理系統,要想完成這個管理系統,首先要分析好系統應具備的功能,要根據要求確定管理系統的這的整體布局結構,然后再一一細化系統的各個功能模塊,之后再有思路的編程,通過代碼實現,代碼完成后,進行跟蹤調試程序,將代碼的錯誤的警告都更正,不斷的完善代碼,加強系統的穩定性和操作性。
??? 通過這次的課程設計,讓我更進一步的掌握C語言鏈表和文件的使用,通過對企業管理系統功能的分析和確定系統的整體布局結構,然后在遇到不會問題的就通過翻閱書本或問同學解決,這些提高了我整體分析和解決問題的能力,同時在一系列的代碼編程中,也使我的代碼編程能力有所提高,還有,在完成這次的課程設計也讓我深刻的體會到基礎很重要,企業員工管理系統看似實現復雜,但是都是基于我們所學的基本知識,所以加強基礎是很關鍵的,在今后的學習中就告誡我們要一步一個腳印,踏踏實實的掌握知識,這次的課程設計讓我收獲很多,受益匪淺。
源代碼:
? #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h>//函數聲明 void ShowMainMenu(); int CheckNum(char*pcNotice); int CheckAge(char*pcNotice); struct Employee * Create(); void Add(struct Employee * pHead); struct Employee * Search(struct Employee *pHead); void Modify(struct Employee * pHead); void Delete(struct Employee * pHead); void ShowLine(); void ShowHead(int iType); struct Employee*Read(); void Show(struct Employee * pHead);struct Employee {int iNumber;//工號char acName[999];//姓名int Age;char Sex[999];int fSalary;//薪資struct Employee *pNext; };int CheckNum(char *pcNotice) {int Num;do{printf(pcNotice);scanf("%d",&Num);getchar();}while(Num<0);return Num; } int CheckAge(char *pcNotice) {int iAge;do{printf(pcNotice);scanf("%d",&iAge);}while(iAge<0);return iAge; }void ShowHead(int iType) {printf("\t\t員工信息管理系統\n");if(iType==1){printf("\t|工號\t|姓名\t|性別\t|年齡\t|薪資\t\n");}else if(iType==2){printf("\t|工號\t|姓名\t|性別\t|年齡\t|薪資\t\n");} }void Show(struct Employee * pHead) {struct Employee * pCur = pHead;int i=0;if(pHead==NULL){printf("======沒有員工記錄======\n");}else{ShowHead(1);do{printf("\t|%-6d |%-7s|%-7s|%-7d|%-d\t\n",pCur->iNumber,pCur->acName,pCur->Sex,pCur->Age,pCur->fSalary);ShowLine();pCur=pCur->pNext;}while(pCur!=NULL);}}struct Employee * Create() {struct Employee * pHead = NULL, *pTail = NULL, *pTemp,*pCur;int iNum,iFlag;while(1){while(1){iNum = CheckNum("請輸入員工工號(輸入0退出):");if(iNum==0){printf("添加結束!新表是:\n");Show(pHead);return pHead;}iFlag=0;pCur = pHead;while(pCur!= NULL){if(pCur->iNumber==iNum){iFlag=1;break;}pCur = pCur-> pNext;}if(iFlag == 1){printf("工號重復,請再次輸入:\n");continue;}elsebreak;}pTemp =(struct Employee *)malloc(sizeof(struct Employee));if(pTemp == NULL){printf("\n分配內存失敗\n");return NULL;}pTemp->iNumber = iNum;printf("輸入員工姓名:");gets(pTemp->acName);printf("請輸入性別(男/女):");gets(pTemp->Sex);printf("請輸入薪水:");scanf("%d",&pTemp->fSalary);//getchar();//gets(pTemp->fSalary);pTemp->Age=CheckAge("請輸入年齡:");pTemp->pNext =NULL;if(!pHead){pHead = pTail = pTemp;}else{pTail->pNext = pTemp;pTail = pTemp;}} }struct Employee * Search(struct Employee *pHead){struct Employee *pCur =pHead;int iNum=0,iItem=0;char acName[10];if(pHead==NULL){printf("\n=====沒有員工記錄!======\n");return NULL;}printf("\t1:輸入員工工號\n\t2:輸入員工姓名\n");printf("請輸入你的選項:");scanf("%d",&iItem);getchar();switch(iItem){case 1:printf("請輸入員工工號:");scanf("%d",&iNum);while(pCur!=NULL){if(iNum ==pCur->iNumber){ShowHead(1);printf("\t|%-6d |%-7s|%-7s|%-7d|%-d\t\n",pCur->iNumber,pCur->acName,pCur->Sex,pCur->Age,pCur->fSalary);ShowLine();return pCur;}pCur=pCur->pNext;}if(pCur==NULL){printf("員工數據未找到!\n");}break;case 2:printf("請輸入員工姓名");gets(acName);while(pCur!=NULL);{if(strcmp(acName,pCur->acName)==0){ShowHead(1);printf("\t|%-6d |%-7s|%-7s|%-7d|%-d\t\n",pCur->iNumber,pCur->acName,pCur->Sex,pCur->Age,pCur->fSalary);ShowLine();return pCur;}pCur=pCur->pNext;}if(pCur==NULL){printf("員工數據未找到!\n");}break;default:printf("輸入工號數據錯誤!\n");}return pCur;}void Add(struct Employee * pHead) {struct Employee * pCur,*pTail,*pTemp;int iNum,iFlag;if(pHead==NULL){printf( "\n 沒有員工數據,請首次創建!\n");return;}pCur = pHead;while(pCur->pNext!=NULL)pCur = pCur->pNext;pTail =pCur;while(1){while(1){iNum=CheckNum("請輸入員工工號:");if(iNum==0){printf("添加完成,新的表是:\n");Show(pHead);return;}iFlag=0;pCur = pHead;while(pCur!= NULL){if(pCur->iNumber==iNum){iFlag=1;break;}pCur = pCur-> pNext;}if(iFlag == 1){printf("工號重復,請再次輸入:\n");continue;}elsebreak;}pTemp =(struct Employee *)malloc(sizeof(struct Employee));if(pTemp == NULL){return;}pTemp->iNumber = iNum;printf("輸入員工姓名:");gets(pTemp->acName);printf("請輸入性別(男/女):");gets(pTemp->Sex);printf("請輸入薪水:");scanf("%d",&pTemp->fSalary);//getchar();//gets(pTemp->fSalary);pTemp->Age=CheckAge("請輸入年齡:");pTemp->pNext=NULL;if(!pHead){pHead = pTail = pTemp;}else{pTail->pNext = pTemp;pTail = pTemp;}} }void Modify(struct Employee * pHead){ struct Employee * pCur=pHead;struct Employee * pTemp=NULL;pTemp = Search(pHead);if(pTemp !=NULL){printf("\n\t請輸入新的員工數據!f\t\n");pTemp->iNumber =CheckNum("請輸入工號");printf("輸入員工姓名:");gets(pTemp->acName);printf("請輸入性別(男/女):");gets(pTemp->Sex);pTemp->Age=CheckAge("請輸入年齡:");printf("請輸入薪水:");scanf("%d",&pTemp->fSalary);printf("修改成功!新紀錄是:\n");ShowHead(1);printf("\t|%-6d |%-7s|%-7s|%-7d|%-d\t\n",pCur->iNumber,pCur->acName,pCur->Sex,pCur->Age,pCur->fSalary);ShowLine();}}void Delete(struct Employee * pHead) {struct Employee * pTemp=NULL,*pPre = pHead,*pCur = pHead;pTemp = Search(pHead);if(pTemp!=NULL){if(pHead==pTemp){pHead =pHead->pNext;}else{while(pCur!=pTemp){pPre = pCur;pCur = pCur->pNext;}pPre->pNext = pCur->pNext;}free(pTemp);printf("刪除成功!剩余的員工數據是:\n");Show(pHead);} }void ShowMainMenu() { int i;system("cls");printf("\n\t\t\t員工信息管理系統\n\n");for(i=0;i<80;i++){printf("*");}printf("\n1.輸入員工數據\t\t\t\t\t\t5.更改員工數據\t\t\n");printf("2.添加員工數據\t\t\t\t\t\t6.刪除員工數據\t\t\n");printf("3.顯示員工數據\t\t\t\t\t\t7.讀取員工數據\t\t\n");printf("4.查找員工數據\t\t\t\t\t\t8.保存員工數據\t\t\n");printf("0.退出程序\n");for(i=0;i<80;i++){printf("*");} }void ShowLine() {int i;for(i=0;i<80;i++){printf("-");}printf("\n"); }struct Employee*Read() {FILE*fp;struct Employee*pHead=NULL,*pTemp=NULL,*pCur=NULL;char Empsystem[20];printf("請輸入文件名:");gets(Empsystem);if((fp=fopen(Empsystem,"rb"))==NULL){printf("\n無法打開文件\n");return NULL;}pTemp=(struct Employee*)malloc(sizeof(struct Employee));while(fread(pTemp,sizeof(struct Employee),1,fp)){if(!pHead){pHead=pCur=pTemp;}else{pCur->pNext=pTemp;pCur=pTemp;}pTemp=(struct Employee*)malloc(sizeof(struct Employee));}fclose(fp);Show(pHead);return pHead; }void Save(struct Employee*pHead) {FILE*fp;struct Employee*pCur=pHead;int iCount=0;char Empsystem[20];if(pHead==NULL){printf("查無此人!\n");return;}printf("輸入文件名:");gets(Empsystem);if((fp=fopen(Empsystem,"wb"))==NULL){printf("\n無法打開文件\n");getchar();exit(1);}while(pCur){fwrite(pCur,sizeof(struct Employee),1,fp);pCur=pCur->pNext;iCount++;}printf("\n======保存完成======\n");fclose(fp); }int main() { struct Employee*pHead=NULL; int iItem; while (1) {ShowMainMenu(); printf("\n請輸入(1-8):"); scanf("%d",&iItem); getchar(); while(iItem>10||iItem<0) { scanf("%d",&iItem); getchar(); } switch (iItem) { case 1:pHead=Create(); break; case 2:Add(pHead);break; case 3:Show(pHead);break; case 4:Search(pHead);break; case 5:Modify(pHead);break; case 6:Delete(pHead);break; case 7:pHead = Read();break; case 8:Save(pHead);break; case 0:exit(0); } printf("返回主菜單\n"); getch(); } }?總結
以上是生活随笔為你收集整理的C语言员工信息管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS调用后台方法大全
- 下一篇: java信息管理系统总结_java实现科