




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、/C語言課程設(shè)計職工信息管理系統(tǒng)單鏈表實現(xiàn)#include"stdio.h"#include"stdlib.h"#include"string.h"intsaveflag=0;/*是否需要存盤的標志變量*/structemployeecharname15;charnum10;/*工號*/charsex4;charbm15;charzc20;intgz;typedefstructnodestructemployeedata;structnode*next;Node,*Link;/Linkl(注意是:字母l不是數(shù)字1)voidadd(Li
2、nkl);voiddisp(Linkl);/查看職工所有信息查詢功能統(tǒng)計排序修改功能將單鏈表 l 中的數(shù)據(jù)寫入文件voiddel(Linkl);/刪除功能Node*Locate(Linkl,charfindmess,charnameornum);voidQur(Linkl);/voidTongji(Linkl);/voidSort(Linkl);/voidModify(Linkl);/voidsave(Linkl);/voidprinte(Node*p);/本函數(shù)用于打印鏈表中某個節(jié)點的數(shù)據(jù)內(nèi)容*/printf("t*n");printf("t*n");
3、printf("t*職工信息管理系統(tǒng)_結(jié)構(gòu)體數(shù)組實現(xiàn)*n");printf("t*/以下4個函數(shù)用于輸出中文標題voidprintstart();voidWrong();voidNofind();voidprintc();voidmenu()*printf("t*1增加職工信息2*n");printf("t*3查詢職工信息4*n");printf("t*5插入職工記錄6*n");printf("t*7排序8*n");printf("t*9顯示數(shù)據(jù)0*n");*n&q
4、uot;);刪除職工信息修改職工信息統(tǒng)計職工記錄保存職工信息退出系統(tǒng)printf("t*n");printf("t*n");/voidmenu菜單結(jié)束voidDisp(Linkl)/顯示單鏈表l中存儲的職工記錄,內(nèi)容為employee結(jié)構(gòu)中定義的內(nèi)容intcount=0;Node*p;p=l->next;/l存儲的是單鏈表中頭結(jié)點的指針,該頭結(jié)點沒有存儲職工信息,指針域指向的后繼結(jié)點才有職工信息if(!p)/*p=NULL,NUll在stdlib中定義為0*/printf("n=>提示:沒有職工記錄可以顯示!n");ret
5、urn;printf("tttt顯示結(jié)果n");printstart();/打印橫線printc();/打印各學(xué)科標題printf("n");while(p)/逐條輸出鏈表中存儲的職工信息printe(p);p=p->next;printstart();printf("n");/voidDisp結(jié)束voidprintstart()printf("n");voidWrong()printf("n=>提示:輸入錯誤!n");voidNofind()printf("n=>提
6、示:沒有找到該職工!n");voidprintc()/*本函數(shù)用于輸出中文*/printf("工號t姓名性別部門職稱工資總工資平均工資n");voidprinte(Node*p)/*本函數(shù)用于打印鏈表中某個節(jié)點的數(shù)據(jù)內(nèi)容*/printf("%-12s%st%st%dt%dt%dt%dt%dn",p->data.num,p->,p->data.sex,p->data.bm,p->data.zc,p->data.gz);/Locate(l,findmess,"num");*/
7、*該函數(shù)用于定位連表中符合要求的結(jié)點,并返回該指針Node*Locate(Linkl,charfindmess,charzcornum)Node*r;if(strcmp(zcornum,"num")=0)/*按工號查詢*/r=l->next;while(r!=NULL)if(strcmp(r->data.num,findmess)=0)/*若找到findmess值的工號*/returnr;r=r->next;elseif(strcmp(zcornum,"zc")=0)/*按職稱查詢*/r=l->next;while(r!=NULL
8、)if(strcmp(r->data.zc,findmess)=0)/*若找到findmess值的職工職稱*/returnr;r=r->next;return0;/*若未找到,返回一個空指針*/add()函數(shù)中,無節(jié)點時,r指向list頭,有節(jié)點時,r指向末尾節(jié)點voidAdd(Linkl)/*增加職工*/Node*p,*r,*s;/*實現(xiàn)添加操作的臨時的結(jié)構(gòu)體指針變量*/charnum10;intflag=0;r=l;s=l->next;/鏈表沒有節(jié)點時,s=null;/鏈表有節(jié)點時,指向第一個職工節(jié)點while(r->next!=NULL)/如果存在后繼結(jié)點時,r指
9、針后移一個r=r->next;/*將指針移至于鏈表最末尾,準備添加記錄*/while(1)printf("請你輸入工號(以'0'返回上一級菜單:)");scanf("%s",num);if(strcmp(num,"0")=0)/輸入'0',跳出while(1),即跳出add()函數(shù)break;s=l->next;作用?每次從第一個節(jié)點開始找,看num是否重復(fù)。while(s)/工號重復(fù)時,返回主菜單if(strcmp(s->data.num,num)=0)printf("=&
10、gt;提示:工號為'%s'的職工已經(jīng)存在,若要修改請你選擇'4修改'!n",num);flag=1;/break;return;s=s->next;/while(s)p=(Node*)malloc(sizeof(Node);/生成沒賦值的新節(jié)點pstrcpy(p->data.num,num);printf("請你輸入姓名:");scanf("%s",p->);getchar();printf("請你輸入性別:");scanf("%s",p
11、->data.sex);getchar();printf("請你輸入職工所在部門:");scanf("%d",&p->data.bm);getchar();printf("請你輸入職工職稱:");scanf("%d",&p->data.zc);getchar();printf("請你輸入職工工資:");scanf("%d",&p->data.gz);getchar();/*信息輸入已經(jīng)完成*/p->next=NULL;/*
12、表明這是鏈表的尾部結(jié)點*/r->next=p;/*將新建的結(jié)點加入鏈表尾部中*/r=p;saveflag=1;/while(1)/voidAdd增加結(jié)束voidDel(Linkl)/*刪除*/intsel;Node*p,*r;/*實現(xiàn)刪除操作的臨時的結(jié)構(gòu)體指針變量*/charfindmess20;del()if(!l->next)/當list無后繼結(jié)點時,提示和結(jié)束返回printf("n=>提示:沒有記錄可以刪除!n");return;printf("n=>1按工號刪除n=>2按姓名刪除n");scanf("%d&
13、quot;,&sel);if(sel=1)/按工號刪除printf("請你輸入要刪除的工號:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p)r=l;while(r->next!=p)是待刪除r=r->next;/從第一個結(jié)點找起,直到發(fā)現(xiàn)r->next=p,結(jié)點,跳出循環(huán)r->next=p->next;/rr->next(p)p->nextfree(p);printf("n=>提示:該職工已經(jīng)成功刪除!n&
14、quot;);saveflag=1;elseNofind();/顯示一句話/if(sel=1)elseif(sel=2)/按姓名刪除printf("請你輸入要刪除的姓名:");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p)r=l;while(r->next!=p)r=r->next;r->next=p->next;/rr->next(p)p->nextfree(p);printf("n=>提示:該職工已經(jīng)成功刪除!n&qu
15、ot;);saveflag=1;elseNofind();/if(sel=2)elseWrong();/顯示輸入錯誤的話/voidDel刪除結(jié)束void Qur(Link l) /查詢功能intsel;charfindmess20;Node*p;/實現(xiàn)查詢操作的臨時的結(jié)構(gòu)體指針變量if(!l->next)printf("n=>提示:沒有資料可以查詢!n");return;printf("n=>1按工號查找n=>2按職稱查找n");scanf("%d",&sel);if(sel=1)/*工號*/print
16、f("請你輸入要查找的工號:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p)查找結(jié)果 n");打印橫線打印各學(xué)科標題printf("ttttprintstart();/printc();/printe(p);/打印 p 結(jié)點各個數(shù)據(jù)成員的值printstart(); /打印橫線elseNofind();/if(sel=1)elseif(sel=2)/*職稱*/printf("請你輸入要查找的職稱:");scanf("%s&
17、quot;,findmess);p=Locate(l,findmess,"zc");if(p)printf("tttt查找結(jié)果n");printstart();printc();printe(p);printstart();elseNofind();elseWrong();/voidQur查詢結(jié)束voidModify(Linkl)/修改功能Node*p;charfindmess20;if(!l->next)printf("n=>提示:沒有資料可以修改!n");return;printf("請你輸入要修改的職工工號
18、:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p)printf("請你輸入新工號(原來是%s):",p->data.num);scanf("%s",p->data.num);printf("請你輸入新姓名(原來是%s):",p->);scanf("%s",p->);getchar();printf("請你輸入新性別(原來是%s):&q
19、uot;,p->data.sex);scanf("%s",p->data.sex);getchar();printf("請你輸入新的部門(原來是%s):",p->data.bm);scanf("%d",&p->data.bm);printf("請你輸入新的職稱(原來是%s):",p->data.zc);scanf("%d",&p->data.zc);getchar();printf("請你輸入新的工資(原來是%d):",p-
20、>data.gz);scanf("%d",&p->data.gz);printf("n=>提示:資料修改成功!n");/shoudsave=1;elseNofind();/if(p)結(jié)束/voidModify(Linkl)/修改功能結(jié)束/插入記錄:按工號查詢到要插入的節(jié)點的位置,然后在該工號之后插入一個新節(jié)點。voidInsert(Linkl)Node*s,*r,*p;/*p指向插入位置,p指新插入記錄節(jié)點*/charch,new_num10,old_num10;/old_num保存插入點位置之前的工號,new_num保存輸入的
21、新記錄的工intflag=0;s=l->next;system("cls");Disp(l);while(1)/stringinput(s,10,"pleaseinputinsertlocationaftertheNumber:");printf("請你輸入已存在的工號(以'0'返回上一級菜單:)");scanf("%s",old_num);if(strcmp(old_num,"0")=0)/輸入'0',跳出while(1),即跳出Insert()函數(shù)ret
22、urn;s=l->next;/作用?每次從第一個節(jié)點開始找flag=0;while(s)/*查詢該工號是否存在,flag=1表示該工號存在*/if(strcmp(s->data.num,old_num)=0)flag=1;break;s=s->next;if(flag=1)break;/*若工號存在,則進行插入之前的新記錄的輸入操作*/elsegetchar();printf("n=>Thenumber%sisnotexisting,tryagain?(y/n):",old_num);scanf("%c",&ch);if(
23、ch='y'|ch='Y')continue;elsereturn;/回主菜單/while(1)/*以下新記錄的插入新節(jié)點,工號不能跟已存在的工號相同,操作與Add()相同*/printf("請你輸入待插入的工號(以'0'返回上一級菜單:)");scanf("%s",new_num);if(strcmp(new_num,"0")=0) /輸入'0',跳出while(1),即跳出add()函return;s=l->next;作用?每次從第一個節(jié)點開始找,看num是否重
24、復(fù)。while(s)/工號重復(fù)時,返回主菜單if(strcmp(s->data.num,new_num)=0)printf("=>提示:工號為'%s'的職工已經(jīng)存在'!n",new_num);flag=1;return;s=s->next;/while(s)p=(Node*)malloc(sizeof(Node);if(!p)printf("nallocatememoryfailure");/*如沒有申請到,打印提示信息*/return;/*返回主界面*/strcpy(p->data.num,new_num
25、);printf("請你輸入姓名:");scanf("%s",p->);getchar();printf("請你輸入性別:");scanf("%s",p->data.sex);getchar();printf("請你輸入部門:");scanf("%d",&p->data.bm);getchar();printf("請你輸入職稱:");scanf("%d",&p->data.zc)
26、;getchar();printf("請你輸入工資:");scanf("%d",&p->data.gz);getchar();/信息輸入已經(jīng)完成p->next=NULL;/*表明這是鏈表的尾部結(jié)點*/saveflag=1;/*在main()有對該全局變量的判斷,若為1,則進行存盤操作*/*將指針賦值給r,因為l中的頭節(jié)點的下一個節(jié)點才實際保存著學(xué)生的記錄*/r=l->next;while(1)if(strcmp(r->data.num,old_num)=0)/*p->next=r->next;r->nex
27、t=p;break;r=r->next;/while(1),r作為查詢指針,依次從第一個節(jié)點找起,找到后while(1)循環(huán)Disp(l);printf("nn");/getchar();voidTongji(Linkl)/統(tǒng)計Node*max,*min;/*用于指向工資最高的節(jié)點*/Node*t=l->next;if(!t)system("cls");在鏈表中插入一個節(jié)點 */跳出printf("n=>Notemployeerecord!n");getchar();return;system("cls&q
28、uot;);Disp(l);max=min=t;while(t)if(t->data.gz>=max->data.gz)max=t;if(t->data.gz<=min->data.gz)min=t;t=t->next;printf("最高工資為:%dn",max);printf("t%st%st%st%st%st%dnn",t->data.num,t->,t->data.sex,t->data.bm,t->data.zc,t->data.gz);printf
29、("最低工資為:%dn",min);printf("t%st%st%st%st%st%dnn",t->data.num,t->,t->data.sex,t->data.bm,t->data.zc,t->data.gz);void Sort(Link l) /排序Linkll;Node*p,*rr,*s;inti=0;if(l->next=NULL)system("cls");printf("n=>Notemployeerecord!n");getch
30、ar();return;ll=(Node*)malloc(sizeof(Node);/*用于創(chuàng)建新的節(jié)點*/if(!ll)printf("nallocatememoryfailure");/*如沒有申請到,打印提示信息*/return;/*返回主界面*/ll->next=NULL;system("cls");Disp(l);/*顯示排序前的所有職工記錄*/p=l->next;while(p)/*p!=NULL*/s=(Node*)malloc(sizeof(Node);/* 新建節(jié)點用于保存從原鏈表中取出的節(jié)點信息*/if(!s)/*s=NU
31、LL*/printf("nallocatememoryfailure");/*如沒有申請到,打印提示信息*/return;/*返回主界面*/s->data=p->data;/*填數(shù)據(jù)域*/s->next=NULL;/*指針域為空*/rr=ll;/*rr鏈表于存儲插入單個節(jié)點后保持排序的鏈表,ll是這個鏈表的頭指針,每次從頭開始查找插入位置*/while(rr->next!=NULL&&rr->next->data.gz>=p->data.gz)rr=rr->next;/*指針移至總分比p所指的節(jié)點的總分小
32、的節(jié)點位置*/if(rr->next=NULL)/*若新鏈表ll中的所有節(jié)點的總分值都比p->data.gz大時,就將p所指節(jié)點加入鏈表尾部*/rr->next=s;else/*否則將該節(jié)點插入至第一個總分字段比它小的節(jié)點的前面*/s->next=rr->next;rr->next=s;p=p->next;/*原鏈表中的指針下移一個節(jié)點*/*/l->next=ll->next;/*ll中存儲是的已排序的鏈表的頭指針Disp(l);saveflag=1;printf("n=>sortcomplete!n");void
33、Save(Linkl)FILE*fp;Node*p;/實現(xiàn)保存操作的臨時的結(jié)構(gòu)體指針變量intflag=1,count=0;fp=fopen("employee.txt","wb");if(fp=NULL)printf("n=>提示:重新打開文件時發(fā)生錯誤!n");return;p=l->next;/p指向第一個記錄結(jié)點將第一個記錄結(jié)點值寫入文/依次寫入第二個結(jié)點的值,文件的記錄數(shù)+1if(fwrite(p,sizeof(Node),1,fp)=1)/件p=p->next;count+;elseflag=0;brea
34、k;/while(p)if(count>0)printf("n=>提示:文件保存成功.(有%d條記錄已經(jīng)保存.)n",count);saveflag=0;elsesystem("cls");printf("保存文件失敗,'0'條記錄被保存!n");fclose(fp);/voidSave結(jié)束voidmain()Link list; /*定義鏈表*/structnode*list;FILE*fp;/*文件指針*/intchoose;/*保存選擇結(jié)果變量*/charch;/*保存(y,Y,n,N)*/intco
35、unt=0;/*保存文件中的記錄條數(shù)(或結(jié)點個數(shù))*/structnode*p,*r;/*定義記錄指針變量*/printf("tttt職工信息管理系統(tǒng)nttttn");list=(structnode*)malloc(sizeof(structnode);if(!list)printf("nallocatememoryfailure");/*如沒有申請到,打印提示信息*/return;/*返回主界面*/list->next=NULL;r=list;fp=fopen("employee.txt","rb");if(fp=NULL)printf("n=>提示:文件還不存在,是否創(chuàng)建?(y/n)n");scanf("%c",&ch);if(ch='y'|ch='
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化創(chuàng)意產(chǎn)業(yè)園區(qū)場地?zé)o償租賃協(xié)議
- 成都企業(yè)股權(quán)變更盡職調(diào)查與代辦合同
- 財務(wù)部內(nèi)部控制與審計合同范本
- 常規(guī)量具使用培訓(xùn)
- 氣化爐檢修培訓(xùn)主要內(nèi)容
- 中班組常規(guī)情況匯報
- 2025年教育事業(yè)統(tǒng)計培訓(xùn)
- ??谱o士培訓(xùn)計劃
- 2025新高二(復(fù)習(xí)課)必修下冊詩歌知識梳理(教師版)
- 腫瘤患者春節(jié)節(jié)前健康宣教
- 審計 第7版 課件 第10章采購與付款循環(huán)審計
- 概率論與數(shù)理統(tǒng)計(天津理工大學(xué))智慧樹知到期末考試答案2024年
- 八年級親子共評
- 家用冰箱市場調(diào)研報告
- 國際財務(wù)報告準則
- 初中數(shù)學(xué)-專項24 圓內(nèi)最大張角米勒角問題
- 行政單位酒店住宿合同
- 機械設(shè)備安裝程序、安裝分類、固定方式及安裝新技術(shù)應(yīng)用
- 大樓維修改造工程投標方案(完整技術(shù)標)
- 《建筑施工安全檢查標準》JGJ
- 建筑陶瓷磚檢測報告及原始記錄
評論
0/150
提交評論