C語言鏈表員工信息管理系統(tǒng)實驗報告冊_第1頁
C語言鏈表員工信息管理系統(tǒng)實驗報告冊_第2頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、電子科技大學成都學院筑實驗報告冊課程名稱:c語言課程設(shè)計耀姓名:蔣明軒艾學a,.1530720218祁完系:微電子技術(shù)系藪專業(yè):嵌入式系統(tǒng)工程蔵教師:孫軻羅2016年5月30日第1章設(shè)計目的設(shè)計整體框架.1,1設(shè)計任務腿現(xiàn)對員工信息的管理,包括姓名,工號,性別,測評成績,以及等級,可以實現(xiàn)對于員工信息的 輸 入,插入,刪除,排序,修改,統(tǒng)計,查詢,保存。/2設(shè)計要求襖員工信息的輸入,插入,刪除,排序,修改,統(tǒng)計,查詢,保存等膀13設(shè)計意義袁此程序用于新建及管理員工信息,其包括員工工號,姓名,性別,以及員工的考核成績,在程序中根 據(jù)提示信息輸入相尖內(nèi)容,輸入完成后,可對其輸入的內(nèi)容進行修改,刪除

2、,追加,統(tǒng)計等操作,操作 完成后保存文件,文件在下一次啟動程序時將進行自動讀取信息內(nèi)容。壊第2章設(shè)計方案關(guān)2.1軟件工作嚴主函數(shù)中開始讀取保存的TXT文件, 若不存在則建立該文件,根據(jù)的選項, 循環(huán)調(diào)用各個功能模 塊,直到選擇退出時,將標識符改變,退出循環(huán),退出該程序。芳22模塊流程圖憂第3章實現(xiàn)功能關(guān)3.1實現(xiàn)功能描述韻主函數(shù): 檢測是否有對應的文件, 若存在則打幵該文件, 否則則建立該文件, 設(shè)置標識符循環(huán)功能模 塊,根據(jù)輸入選項選擇需要使用的功能;長增加員工信息:根據(jù)工號判斷是否需要動態(tài)分配存儲空間,而后輸入員工信息;癥查詢員工信息:在鏈表節(jié)點中查找對應信息的節(jié)點,并打印節(jié)點信息;牘刪除

3、員工信息:在鏈表中查找對應信息節(jié)點,查找到后將節(jié)點指向更改后,釋放對應節(jié)點信息;幣修改員工信息:查找對應信息,然后重新輸入該節(jié)點信息;皆插入員工信息:打印員工信息,并選擇需要插入的節(jié)點,鏈表中指向該節(jié)點后的指針,分配一個新的 空間,輸入信息,并更改指針指向;浪統(tǒng)計員工信息:統(tǒng)計員工中各個等級的員工個數(shù),并打??;腹排序:根據(jù)員工分數(shù),降序排列員工信息,并打??; 盾保存:利用指針函數(shù)保存鏈表中的信息;膀3.2模塊功能描述 腺增加員工信息:根據(jù)工號判斷是否需要動態(tài)分配存儲空間,而后輸入員工信息;蕪查詢員工信息:在鏈表節(jié)點中查找對應信息的節(jié)點,并打印節(jié)點信息;儀刪除員工信息:在鏈表中查找對應信息節(jié)點,

4、查找到后將節(jié)點指向更改后,釋放對應節(jié)點信息; 駢修改員工信息:查找對應信息,然后重新輸入該節(jié)點信息;羅插入員工信息:打印員工信息,并選擇需要插入的節(jié)點,鏈表中指向該節(jié)點后的指針,分配一個 新的空間,輸入信息,并更改指針指向;貿(mào)統(tǒng)計員工信息:統(tǒng)計員工中各個等級的員工個數(shù),并打印;兀排序:根據(jù)員工分數(shù),降序排列員工信息,并打印;震保存:利用指針函數(shù)保存鏈表中的信息;羈第4章調(diào)試與實現(xiàn).14.1調(diào)試中遇到的重點和難點螞在使用鏈表時對于鏈表節(jié)點的指向不清,操作地址混淆袈4.2解決辦法鍥利用畫圖的方法,明確對指針指向的問題落4.3實現(xiàn)展示我顯示員工信息,盈主程序顯示婪查詢?yōu)t刪除為統(tǒng)計羈第5章總結(jié)弋通過此

5、次實驗,讓我認識到了自身能力的不足,也發(fā)現(xiàn)了平時一些不易發(fā)現(xiàn)的小毛病,讓我意識到了 程序中,任何一個小的細節(jié),將會導致的大問題,比如在此次程序的編寫中,一個微不足道的取地址符 將會導致內(nèi)存的崩潰和輸出內(nèi)容的錯誤,使我養(yǎng)成了檢查代碼的習慣;此次程序中,我使用的是鏈表, 在學習數(shù)據(jù)結(jié)構(gòu)理論知識時, 覺得鏈表使用應該是簡單, 方便, 快捷的, 但通過此次實踐證 明,理論與實際的巨大差距,不但對指針的認識更加具體,也讓我磨煉了意志力,學會了責任與擔 當,挑戰(zhàn)了個人能力,認識自身缺點。螯第6章代碼清單 蟻#i ncludenwi ndows.h蝕#i nclude”stdio.h”羋#i ncluden

6、stdlib.h螃#鬥cludgstri ng.h嫄in tsaveflag=O;,是否需要存盤的標志變量畏structworker煩char name10;charnum10;,工號charsex5;集in tsorce5;schardj1O;煩;m typedefstruct node簿蠅structworkerdata;Kstruct no de* next;姐、Node,*Li nk;M/Linkl(注意是:字母I不是數(shù)字1)袈voidadd(L in kl);汕oiddisp(Linkl);”查看員工所有信息議voiddel(Linkl);刪除功能Node*Locate(Li nkl

7、,chafi ndmess,charnameornum);羈voidserch(L in kl);/查詢功能簣voidT on gji(L in kl);/統(tǒng)計羅voidSort(Li nkl);,排序羈voidCha nge(L inkl);/修改功能加voidsave(L in kl);/將鏈表中的數(shù)據(jù)寫入文件衿voidpri nte(Node*p);.本函數(shù)用于打印鏈表中某個節(jié)點的數(shù)據(jù)內(nèi)容M以下4個函數(shù)用于輸出中文標題 劉voidpri ntstart();voidWro ng();薛voidNofi nd();循voidpri ntc();螃voidShow_Wi ndow()syst

8、em(” colorF4”);printf(nt*nH);prin tf(t*1增加員工信息2刪除員工信息5T);prin tf(Ht*3查詢員工信息4修改員工信息5T);prin tf(nt* 5插入員工記錄6統(tǒng)計員工記錄5T);prin tf(nt*7排序8保存員工信息prin tf(nt*9顯示數(shù)據(jù)0退出系統(tǒng)Bn”);prin tf(nt* rT);prin tf(t* rT);x /voidShoWWindow菜單結(jié)束voidDisp(Linkl).顯示鏈表中存儲的員工記錄,內(nèi)容為worker結(jié)構(gòu)中定義的內(nèi)容頡茹in tco un t=0;肆Node*p;P=l- next;/l存儲的

9、是單鏈表中頭結(jié)點的指針,該頭結(jié)點沒有存儲員工信息,指針域指向的后繼結(jié)點才有員工信息df(!p)廣p=NULL,NUII在stdlib中定義為07豈printf(”nt提示:沒有員工記錄可以顯示!n“);袁return;腿蜻prin tf(tttt顯示結(jié)果nH);襖prin tstart();/打印橫線prin tc();/打印標題薈prin tf(”rT);mwhile(p)/逐條輸出鏈表中存儲的員工信息aprin te(p);蚩p=p-n ext;printf (Ht*nn);前prin tstart();嫌prin tf(nnH);訕/voidDisp結(jié)束猗voidpri ntstart(

10、)膀卄兀printf(”.n菱voidWro ng()腮兀printf(n輸入錯誤!n”);務姬voidNofi nd()鵑就printfCn沒有找到該員工!E);:d腮voidpri ntc()蟻蠱printf(nt工號t姓名t性別t成績t等緲n”);蠅裊voidpri nte(Node*p) /用于打印鏈表中某個節(jié)點的數(shù)據(jù)內(nèi)容臨Mprin tf(,t%st%st%st%dt%stnH,奴p-data .nu m,p-data .n ame,p-data.sex,*p-data.sorce,p-data.dj);J屛/用于定位連表中符合要求的結(jié)點,并返回該指針 莆Node*Locate(L

11、in kl,chafi ndmess,chargh)Node*r;if(strcmp(gh,” num)=O) /按工號查詢r=l-n ext;while(r!=NULL)if(strcmp(r-data. nu m,fi ndmess)=O) 若找到findmess值的工號returnr;r=r-n ext;return。;/若未找到,返回一個空指針粉add()函數(shù)中,無節(jié)點時,r指向list頭,有節(jié)點時,r指向末尾節(jié)點嫗voidAdd(Li nkl) 增加員工荊榜Node*p,*r,*s;/實現(xiàn)添加操作的臨時的結(jié)構(gòu)體指針變量藥char nu m10;祁in tflag=O;螃r=l;.s=

12、l- next;/鏈表沒有節(jié)點時,s=null;/鏈表有節(jié)點時,指向第一個員工節(jié)點狂while(r-next!=NULL)如果存在后繼結(jié)點時,r指針后移一個r=r-n ext;/將指針移至于鏈表最末尾,準備添加記錄腰while腿printfC*請輸入工號(以O(shè)返回上一級菜單)門;羅sea nf(n%s, nu m);縛if(stremp(num;,O,)=O) /輸入O;跳出while(1),即跳出add()函數(shù)貓break;羈s=l- next;/每次從第一個節(jié)點開始找,看num是否重復肅while(s)/工號重復時,返回主菜單螞總if(strcmp(s-data. nu m, num)=O

13、)娛printf(An提示:工號為的員工已經(jīng)存在,若要修改請你選擇4修改1nn, num);mflag=1;嫌蠻return;送蔓s=s-n ext;冢/薈p=(Node*)malloc(sizeof(Node); /生成沒賦值的新節(jié)點p荷strcpy(p-data. nu m, nu m);襖printf(H請輸入姓名:”);嘔sea nf(%sn,p-data. name);芾getchar();花printf(”請輸入性別:n);弋sea nf(”s”,pdata.sex);甥getchar();Mprint請輸入員工成績門;築sea nf(”d”,&pdata.sorce);蒂

14、getchar();魏if(*p-data.sorcedata.sorce=90)聿strcpy(pdata.dj,”優(yōu)秀”);薄elseif(*p-data.sorcedata.sorce=80)瑕strcpy(p-data.dj,n良好”);Kelseif(*p-data.sorcedata.sorce=70)薄strcpy(p-data.dj;中等”);Melseif(*p-data.sorcedata.sorce=60)鬧strcpy(p-data.dj;合格”);蔵elseif(*p-data.sorcedata.sorce=NULL)藩strcpy(p-data.dj;不合格”);

15、蠱信息輸入已經(jīng)完成毬p-next=NULL;表明這是鏈表的尾部結(jié)點腿r-n ext=p;將新建的結(jié)點加入鏈表尾部中婪r=p;湛saveflag=1;售prin tc();憂prin te(p);股Sleep(IOO);/while(l)袈/voidAdd增加結(jié)束半voidDel(Li nkl) /刪除in tsel;Node*p,*r;實現(xiàn)刪除操作的臨時的結(jié)構(gòu)體指針變量嫗charfi ndmess20;廉if(!lnext)當list無后繼結(jié)點時,提示和結(jié)束返回del()W 賁printf(Ant提示:沒有記錄可以刪除!n”);筲return;媳gprintf(Mnt1按工號刪除nt2按姓名刪

16、除rf);蔬sea nf(”d”,&sel);df(sel=1)/按工號刪除苴printfC*請輸入要刪除的工號:-);羋sea nf(%s,fi ndmess);妍p=Locate(l,fi ndmess, nu m);Xif(p)常蛋r=l;肆while(r- n ext!=p)r=r-next;/從第一個結(jié)點找起,直到發(fā)現(xiàn)r-next=p,待刪除結(jié)點,跳出循環(huán)蔓r-n ext=p-n ext;/rrn ext(p)p-n ext申free(p);袈printf(Ant提示:該員工已經(jīng)成功刪除!F);肅saveflag=1;遞else弋Nofin d();/顯示一句話/if(sel

17、=1)elseif(sel=2)/按姓名刪除printf(”請輸入要刪除的姓名:”);sea nf(”s”,fi ndmess);p=Locate(l,fi ndmess; namen);if(P)r=l;while(r- n ext!=p)r=r-n ext;rn ext=p-next(p)p-n extext;/r rnfree(p);printf (”nt提示:該員工已經(jīng)成功刪除!rf);saveflag=1;elseNofi nd();/if(sel=2)m else綢Wrong();顯示輸入錯誤的話/voidDel刪除結(jié)束肄voidserch(L in kl)/查詢功能姐趨in ts

18、el;袈charfi ndmess20;築Nodep;/實現(xiàn)查詢操作的臨時的結(jié)構(gòu)體指針變量if(!l- next)printf (”nt提示:沒有數(shù)據(jù)可以查詢!n”);return;printf(”請輸入要查找的工號:“);sea nf(n%s,fi ndmess);p=Locate(l,fi ndmess, nu mf);if(P)查找結(jié)果F);prin tstart();/打印橫線printc();prin打印p結(jié)點各個數(shù)據(jù)成員的值te(p);/prin tstart();/打印橫線浚else縛Nofi nd();肅羈voidCha nge(Li nkl)修改功能妍Node*p;m cha

19、rfi ndmess20;荊if(!l next)printf(-nt提示:沒有資料可以修改!E);腮return;螃膀printf(“請輸入要修改的員工工號:”);脇sea nf(”s”,fi ndmess);苴p=Locate(l,fi ndmess,” nu m);杓if(P)w printf(”請輸入新工號:”);sea nf(%s,p-data .nu m);printf(H請輸入新姓名:”);sea nf(%s,p-data. name);getchar();聶print請輸入新性別);蟻sea nf(”s”,pdata.sex);祈getchar();娓print請輸入新的員工分

20、數(shù):”);蒲sea nf(”d”,&pdata.sorce);庫if(*p-data.sorcedata.sorce=90)弋strcpy(p-data.dj,n優(yōu)秀”);nelseif(*p-data.sorcedata.sorce=80)浚strcpy(p-data.dj,H良好”);茁elseif(*p-data.sorcedata.sorce=70)螃strcpy(pdata.dj,”中等”);蘢elseif(*p-data.sorcedata.sorce=60)皆strcpy(p-data.dj;合格”);莆elseif(*p-data.sorcedata.sorce=NUL

21、L)蕖strcpy(p-data.dj;不合格”);需printf(Ant提示:數(shù)據(jù)修改成功!n”);薈,shoudsave=1;腿else袂Nofi nd();/if(p)結(jié)束薈”/voidCha nge(Li nkl),修改功能結(jié)束膈插入記錄:按工號查詢到要插入的節(jié)點的位置,然后在該工號之后插入一個新節(jié)點妨voidIn sert(L in kl)馥charch ,new_nu m10,old_ nu m10;莆”old_num保存插入點位置之前的工號,new_num保存輸入的新記錄的工號簧in tflag=O;嫄s=l-n ext;媳system(” cis”);蜀Disp(l);whil

22、e(1)騰prints請你輸入已存在的工號(以O(shè)返回上一級菜單:門;憂sea nf(%s,old _nu m);嫌if(strcmp(old_num,n0,)=0).輸入O,跳出while(1),即跳出lnsert()節(jié)return;薇s=l- next;/作用?每次從第一個節(jié)點開始找黑flag=0;腰while(s)/查詢該工號是否存在,flag=1表示該工號存在if(strcmp(s-data. num ,old _num )=0)flag=1;break;函數(shù)s=s-n ext;腿if(flag=1)臂break;/若工號存在,則進行插入之前的新記錄的輸入操作皴else市芾getchar

23、();蒲prin tf(”n該工號不存在,時候再次嘗試?(y/n):”,old_num);聿scan f(”c”,&ch);芳if(ch=y|ch=,Y,)葫con ti nu e;爲else蟻return;/回主菜單鐵裁/while(1)逍以下新記錄的插入新節(jié)點,工號不能跟已存在的工號相同,操作與Add()相同BprintfC請你輸入待插入的工號(以O(shè)返回上一級菜單:門;蛭sea nf(”s”,new_nu m);筱if(strcmp(new_num;,O,)=O) /輸入O,跳出while(1),即跳出add()函數(shù)漠return;s=l- next;/作用?每次從第一個節(jié)點開始找

24、,看num是否重復遜while(s)/工號重復時,返回主菜單把if(strcmp(s-data. nu m, new_num )=0)printf(H提示:工號為s的員工已經(jīng)存在,!n”,new_num); flag=1;藩return;a裁s=s-n ext;/while(s) p=(Node*)malloc(sizeof(Node);/f(!p)腿餌printf(“nt錯誤!不能申請所需的內(nèi)存門;如沒有申請到,打印提示信息袁return;/返回主界面髒髒strcpy(p-data. nu m, new_nu m);螞printf(”請輸入姓名:”);務sea nf(n%s,p-data.

25、name);getchar();叩rintf(”請輸入性別:”);螂sea nf(n%sH,p-data.sex);getchar();腌printf(”請輸入分數(shù):”);g sea nf(%dH,&pdata.sorce);袂信息輸入已經(jīng)完成衿if(*p-data.sorcedata.sorce=90)elseif(*p-data.sorcedata.sorce=80) strcpy(p-data.dj,良好”);elseif(*p-data.sorcedata.sorce=70)strcpy(p-data.dj,H中等”);elseif(*p-data.sorcedata.sorc

26、e=60)strcpy(p-data.dj,n合格”);elseif(*p-data.sorcedata.sorce=NULL)strcpy(p-data.dj,H不合格”);p-next=NULL;表明這是鏈表的尾部結(jié)點saveflag=1;在main()有對該全局變量的判斷,若為1,則進行存盤操作將指針賦值給r,因為I中的頭節(jié)點的下一個節(jié)點才實際保存著學生的記錄r=l-n ext;while(1)if(strcmp(r-data .num ,old_ num)=O)在鏈表中插入一個節(jié)點p- next=r-next;ext=p;break;r=r-n ext; while,r作為查詢指針,依

27、次從第一個節(jié)點找起,找到后跳出while循環(huán)Disp(l);prin tf(,nnH);/ getchar();爰voidTo ngji(Li nkl) 統(tǒng)計Node*max,*m in;苗Node*t=l-n ext;(f(!t)藩袞system(” cis”);prin tf(nnt無員工記錄!nn);getchar();return;蝕婪system (“cis”);肆Sleep(100);聶Disp(l);max=mi n=t;awhile(t)蔵羈if(*t-data.sorce*max-data.sorce)蒂max=t;薄if(*t-data.sorcedata.sorce)mi

28、 n=t;t=t- n ext;printf (”最高分數(shù)為:”);蝕prin te(max);Fprintf C最低分數(shù)為:”);姐prin te(mi n);賺voidSort(L in kl) /排序薄Lin kll; 鏈Node*p,*r,*s; /節(jié)點藪in ti=O;#f(l next=NULL)薇趨system(” cis”);銀prin tf(n無員工記錄!nH);igetchar();mreturn;豐else矗ll=(Node*)malloc(sizeof(Node);用于創(chuàng)建新的節(jié)點肅if(川)聃苑printf(”nt錯誤!不能申請所需的內(nèi)存!”);如沒有申請到打印提示信

29、息return;/返回主界面ll-n ext=NULL;袂system(” cis”);蝕Disp(l);/顯示排序前的所有員工記錄桁p=l-n ext;ffiwhile(p)/p!=NULL 螃s=(Node*)malloc(sizeof(Node);/新建節(jié)點用于保存從原鏈表中取出的節(jié)點信息筮if(!s)/=NULL賺腑printf(Ant錯誤!不能申請所需的內(nèi)存!”);如沒有申請到,打印提示信息殊return;/返回主界面膀n s-data=p-data;/填數(shù)據(jù)域愛s-next=NULL;指針域為空珈r=ll;腸r鏈表于存儲插入單個節(jié)點后保持排序的鏈表,II是這個鏈表的頭指針,每次從頭

30、開始查找插入位置畝while(r- n ext!=NULL&r-next-data.sorce=p-data.sorce)舲r=r-next;/指針移至分數(shù)比p所指的節(jié)點的分數(shù)小的節(jié)點位置飽if(r-next=NULL) /若新鏈表II中的所有節(jié)點的分數(shù)都比p-data.sorce大時,就將p所指節(jié)點加入鏈表尾部第r-n ext=s;窩else/否則將該節(jié)點插入至第一個分數(shù)字段比它小的節(jié)點的前面廈s-n ext=r- n ext;P=p- next;/原鏈表中的指針下移一個節(jié)點裊d-n ext=ll- next;/ll中存儲是的已排序的鏈表的頭指針aDisp(l);saveflag=1

31、;蒲printf(”nt排序完成!nH);甫瑕voidSave(Li nkl)ffiFILE*fp;愛Nodep;/實現(xiàn)保存操作的臨時的結(jié)構(gòu)體指針變量茶in tflag=1 ,co un t=0;羋fp=fope n(”worker.txt”,”w+”);祎if(fp=NULL)憂mprintf(”nt提示:重新打開文件時發(fā)生錯誤!n“);翎return; p=ln ext;/p指向第一個記錄結(jié)點羈while(p)螞if(fwrite(p,sizeof(Node),1,fp)=1)將第一個記錄結(jié)點值寫入文件IS荊fprin tf(fp;,nn);膀P=p- next;/依次寫入第二個結(jié)點的值,

32、前count+;文件的記錄數(shù)+1袋螃else快膝flag=O;裊break;腰Twhile(p)羅if(co un t0)蛍printf(Hn提示:文件保存成功侑條記錄已經(jīng)保存.)nH,count);期saveflag=O;趨else 腳systemCcls);蒂printf(H保存文件失敗,O條記錄被保存!nH);袈fclose(fp);時/voidSave結(jié)束 第in tmai n()蒞FILE*fp;/文件指針xin tchoose;/保存選擇結(jié)果變量 charch;/保存(y,Y,n,N)蝕in tcou nt=O; 保存文件中的記錄條數(shù)(或結(jié)點個數(shù))滋struct no de*p,*r;/定義記錄指針變量肅system(”color7d”);膀printf(”tttt員工信息管理系統(tǒng)nttttn”);SIeep(IOOO);縛list=(struct no de*)malloc(sizeof(struct no de);df(!list)廉printf(Ant錯誤!不能申請所需的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論