版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、信息與電子工程學(xué)院C 語(yǔ)言課程設(shè)計(jì)語(yǔ)言課程設(shè)計(jì)職工信息管理系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)日期和時(shí)間: 2011 年 06 月 27 日06 月 29 日實(shí)驗(yàn)類別:課程設(shè)計(jì)實(shí)驗(yàn)類型:設(shè)計(jì)性一、一、實(shí)驗(yàn)環(huán)境實(shí)驗(yàn)環(huán)境操作系統(tǒng):windows xp編程工具:Microsoft Visual C+ 6.0開(kāi)發(fā)環(huán)境:CPU(Inter(R)Core(TM)2 Quad cpu QB200 2.33GHz)內(nèi)存:2.76GB硬盤(pán):228.3GB開(kāi)發(fā)地點(diǎn):現(xiàn)代教育中心 201 機(jī)房 A17 座二、二、實(shí)驗(yàn)?zāi)康暮鸵髮?shí)驗(yàn)?zāi)康暮鸵髮?shí)驗(yàn)?zāi)康模海?)使學(xué)生進(jìn)一步理解和掌握課堂上所學(xué)各種基本抽象數(shù)據(jù)類型的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和操作算法。
2、(2)使學(xué)生進(jìn)一步掌握程序設(shè)計(jì)、編寫(xiě)、調(diào)試能力。(3)使學(xué)生了解軟件開(kāi)發(fā)的基本步驟和內(nèi)容。實(shí)驗(yàn)要求:完成一個(gè)職工信息管理系統(tǒng)程序,具體內(nèi)容如下:(1)在內(nèi)存中用鏈表記錄,在硬盤(pán)上用二進(jìn)制文件保存。(2)設(shè)計(jì)完的程序能夠以命令行或者菜單形式增加、刪除、更新和查詢數(shù)據(jù)的內(nèi)容。數(shù)據(jù)內(nèi)容能夠排序以方便查詢。(3)數(shù)據(jù)庫(kù)中應(yīng)該有至少 20 條記錄。三、實(shí)驗(yàn)內(nèi)容和結(jié)果三、實(shí)驗(yàn)內(nèi)容和結(jié)果(1)程序程序整體功能;整體功能;1 1、系統(tǒng)總體框、系統(tǒng)總體框菜單開(kāi)始根 據(jù) 菜 單 輸 入 n 的 值 選擇程序結(jié)束是否繼續(xù)進(jìn)行NY2修改職工信息3瀏覽職工信息4分類查找職工信息5刪除職工信息6從文件讀取信息0退出1錄入
3、職工信息按職工號(hào)查找按姓名查找2、模塊設(shè)計(jì)、模塊設(shè)計(jì)該程序主要分為 7 個(gè)模塊,分別是創(chuàng)建與添加模塊、顯示模塊、查找模塊、修改模塊、刪除模塊、存檔模塊、文件統(tǒng)計(jì)模塊、退出模塊(2)程序組成及各模塊程序組成及各模塊/函數(shù)功能;函數(shù)功能;創(chuàng)建與添加模塊創(chuàng)建與添加模塊:該模塊的功能是輸入職工信息。函數(shù)為 void Add(Node*woker)原理: 采用尾插法, 先建立鏈表與頭結(jié)點(diǎn), 新增一個(gè)結(jié)點(diǎn), 鍵盤(pán)輸入職工號(hào)、職工姓名、職工性別、職工出生年月、職工學(xué)歷、職工職位、職工工資,將這些信息存儲(chǔ)到新增結(jié)點(diǎn)中,將新增加的節(jié)點(diǎn)連到鏈表的尾端,如此以往,將尾結(jié)點(diǎn)的指針域置空,這樣就得到了一條存儲(chǔ)職工信息的
4、鏈表,這樣就完成了職工信息的創(chuàng)建與增加。顯示模塊顯示模塊:該模塊功能是顯示職工信息。函數(shù)為 void Disp(Node *woker)原理:先新建一個(gè)指針 P 指向頭結(jié)點(diǎn),判斷它的指針域是否為空,若為空,則輸出“沒(méi)有記錄可以顯示” ;若不為空,則輸出它的指針域所指向節(jié)點(diǎn)所儲(chǔ)存的職工信息,并將該指針向后移一個(gè)結(jié)點(diǎn),直到 P 指向空,即輸出了所有職工的信息,這樣就完成了所有職工信息的顯示。查找模塊查找模塊:該模塊功能是查找職工信息。函數(shù)為 void Tongji(Node *woker)原理:該模塊分為兩種查找方法,分別是按職工號(hào)查找和按職工姓名查找,因?yàn)檫@兩種查找方法雷同,所以這里將只解釋按職
5、工號(hào)查找的原理。先鍵盤(pán)輸入一個(gè)要查找的職工號(hào)并新建一個(gè)指針 P 指向頭結(jié)點(diǎn),判斷它的指針域是否為空,若為空,則輸出“沒(méi)有資料可以統(tǒng)計(jì)分類” ,若不為空,則判斷它的指針域所指向節(jié)點(diǎn)所儲(chǔ)存的職工信息中的職工號(hào), 若相等, 則輸出這個(gè)職工的其他所有信息,并將 P 指向下一個(gè)結(jié)點(diǎn),再次進(jìn)行判斷,直到 P 指向空,即輸出了所有查找到的信息。若不相等,則 P 指向下一個(gè)結(jié)點(diǎn),再次進(jìn)行判斷,直到 P 指向空,即輸出了所有查找到的信息,這樣就完成了職工信息的查找。修改模塊修改模塊 : 該模塊功能是修改職工信息。 函數(shù)為 void change(Node *woker)原理:根據(jù)查找原理,查找到要修改信息的職工
6、,刪除這一節(jié)點(diǎn),并新建一個(gè)節(jié)點(diǎn),鍵盤(pán)輸入想要修改的內(nèi)容,并儲(chǔ)存到新的結(jié)點(diǎn)中,將新的節(jié)點(diǎn)連接到鏈表中原先刪除結(jié)點(diǎn)的位子,這樣就完成了職工信息的修改。刪除模塊刪除模塊:該模塊功能是刪除管理職工信息。函數(shù)為 void dismiss(Node*woker)根據(jù)查找的原理,查找到要修改信息的職工,刪除這一節(jié)點(diǎn),并將其前驅(qū)結(jié)點(diǎn)的指針域指向其后繼結(jié)點(diǎn),這樣就完成了職工信息的刪除。存檔存檔模塊模塊:將內(nèi)存中的信息存儲(chǔ)到文件中。函數(shù)為 void save(Node *woker)原理:打開(kāi)文件,新建一個(gè)指針 P 指向頭結(jié)點(diǎn),判斷它的指針域是否為空,若為空,則輸出“無(wú)記錄” ,若不為空,則將這個(gè)職工的所有信息輸
7、入到文件中,并將 P 指向下一個(gè)結(jié)點(diǎn),直到 P 指向空,即輸入了的信息,文件統(tǒng)計(jì)模塊文件統(tǒng)計(jì)模塊:打開(kāi)文件,統(tǒng)計(jì)職工數(shù)目,并輸出。函數(shù)為 void load(Node*woker)退出退出模塊:模塊:該模塊功能是退出管理檔案。(3)重要數(shù)據(jù)結(jié)構(gòu),重要模塊)重要數(shù)據(jù)結(jié)構(gòu),重要模塊/函數(shù)算法;函數(shù)算法;1:創(chuàng)建與添加模塊:void Add(Node *woker)/添加記錄Node *p,*r,*s;char n10;/先用于輸入職工號(hào),也用于判斷是否跳出循環(huán)r=woker;s=woker-next;/使 s 為第一個(gè)有用的結(jié)點(diǎn)while(r-next!=NULL)/這個(gè)循環(huán)的作用是使 r 為最后
8、一個(gè)有用的結(jié)點(diǎn)r=r-next;/將指針置于最末尾while(1)printf(提示:輸入 0 則返回主菜單!n);printf(n 請(qǐng)你輸入職工號(hào):);scanf(%s,n);if(strcmp(n,0)=0)break;p=(Node *)malloc(sizeof(Node);/申請(qǐng)空間strcpy(p-data.num,n);printf(n 請(qǐng)輸入姓名:);scanf(%s,);printf(n 請(qǐng)輸入性別:);scanf(%s,p-data.sex);printf(n 請(qǐng)輸入出生年月:);scanf(%s,&p-data.birthday);print
9、f(n 請(qǐng)輸入學(xué)歷:);scanf(%s,&p-data.degree);printf(n 請(qǐng)輸入職位:);scanf(%s,&p-data.position);printf(n 請(qǐng)輸入工資:);scanf(%s,&p-data.salary);printf(提示:已經(jīng)完成一條記錄的添加。n);p-next=NULL;r-next=p;/這一步是必需的,將 p 與先前的鏈表連起來(lái)構(gòu)成一條新鏈表r=p;/也是必需的.將 r 又重設(shè)為新鏈的最后一個(gè)有用結(jié)點(diǎn)2:顯示模塊void Disp(Node *woker)/輸出職工信息Node *p;p=woker-next;if(!
10、p)printf(n提示:沒(méi)有記錄可以顯示!n);return;printf(tttt 顯示結(jié)果n);printf(職工號(hào)職工姓名職工性別職工生日職工學(xué)歷職工職位職工工資n);while(p)printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary);p=p-next;3:查找模塊void Tongji(Node *woker)/查找統(tǒng)計(jì)函數(shù)Node *p;int sel;int
11、flag2=0,ha=0;p=woker-next;char find20;if(!woker-next)/若鏈表為空printf(n提示:沒(méi)有資料可以統(tǒng)計(jì)分類!n);return;printf(提示:n=0 退出n=1 按職工號(hào)統(tǒng)計(jì)n=2 按職工姓名名稱統(tǒng)計(jì)n);scanf(%d,&sel);if(sel=1)printf(n 輸入你要統(tǒng)計(jì)分類的職工號(hào):);scanf(%s,find);while(p)if(strcmp(p-data.num,find)=0)flag2+;if(flag2=1&ha!=flag2) printf(職工號(hào)職工姓名職工性別職工生日職工學(xué)歷職工職位
12、職工工資n);printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary);ha=flag2;elseif(flag2ha)printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.s
13、alary);ha=flag2;p=p-next;if(flag2)printf(n* 按 設(shè) 備 號(hào) %s 統(tǒng) 計(jì) 分 類 的 有 %d 條 記錄:*nn,find,flag2);else printf(n 按職工號(hào)%s 統(tǒng)計(jì)的結(jié)果為 0 個(gè)nn,find);else if(sel=2)printf(n 輸入你要統(tǒng)計(jì)分類的職工姓名:);scanf(%s,find);while(p)if(strcmp(,find)=0)flag2+;if(flag2=1&ha!=flag2) printf(職工號(hào)職工姓名職工性別職工生日職工學(xué)歷職工職位職工工資n);printf(
14、n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary);ha=flag2;elseif(flag2ha)printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary);ha=flag
15、2;p=p-next;if(flag2)printf(n*按設(shè)備 名稱%s統(tǒng)計(jì)的 有%d條記錄:*nn,find,flag2);else printf(n 按職工姓名%s 統(tǒng)計(jì)分類的結(jié)果為 0 個(gè)nn,find);else if(sel=0) return;4:修改模塊void change(Node *woker)/修改職工信息函數(shù)Node *p;char find20;if(!woker-next)printf(n提示:沒(méi)有資料可以修改!n);return;printf(請(qǐng)輸入要修改的職工號(hào):);scanf(%s,find);p=woker-next;while(p!=NULL)if(st
16、rcmp(p-data.num,find)=0)/如果找到的話返回的是符合要求break;p=p-next;if(p)int x;while(1)printf(完成修改請(qǐng)輸入 0 否則輸入任意數(shù)再進(jìn)行修改:);scanf(%d,&x);if(x=0)break;printf(請(qǐng)輸入新職工號(hào)(原來(lái)是 %s ):,p-data.num);scanf(%s,p-data.num);printf(請(qǐng)輸入新職工姓名(原來(lái)是 %s ):,);scanf(%s,);printf(請(qǐng)輸入新職工性別(原來(lái)是 %s ):,p-data.sex);scanf(%s
17、,p-data.sex);printf(請(qǐng)輸入新出生年月(原來(lái)是 %s ):,p-data.birthday);scanf(%s,p-data.birthday);printf(請(qǐng)輸入新職工學(xué)歷(原來(lái)是 %s ):,p-data.degree);scanf(%s,p-data.degree);printf(請(qǐng)輸入新職工職位(原來(lái)是 %s ):,p-data.position);scanf(%s,p-data.position);printf(請(qǐng)輸入新職工工資(原來(lái)是 %s ):,p-data.salary);scanf(%s,p-data.salary);printf(n提示:該項(xiàng)記錄資料已經(jīng)
18、成功修改!n);elseprintf(n提示:你要修改的信息不存在!n);5:刪除模塊void dismiss(Node *woker)/刪除職工信息函數(shù)Node *p,*r,*s;char find10;if(!woker-next)printf(n提示:沒(méi)有資料可以顯示!n);return;printf(n提示:請(qǐng)輸入您要?jiǎng)h除的職工號(hào)!n);scanf(%s,find);p=woker-next;while(p!=NULL)if(strcmp(p-data.num,find)=0)/如果找到的話返回的是符合要求break;p=p-next;if(!p)printf(n提示:找不到您想刪除的
19、職工號(hào)!n);elser=woker;while(r-next!=p)r=r-next;s=r-next;r-next=r-next-next;6:存檔模塊void save(Node *woker)/將職工信息保存到文件int n;Node *p;FILE *fp;/指向文件的指針printf(需要保存嗎?(1-保存0-不保存));scanf(%d,&n);if(n)if(woker-next=NULL)printf(無(wú)記錄);else p=woker-next;if(fp = fopen(職工管理系統(tǒng).dat, wb) = NULL) /打開(kāi)文件,并判斷打開(kāi)是否正常printf(c
20、an not open filen);/ 打開(kāi)文件出錯(cuò)while(p!=NULL)fprintf(fp,%s%s%s%s%s%s%s,&p-data.num,&,&p-data.sex,&p-data.birthday,&p-data.degree,&p-data.position,&p-data.salary);p=p-next;fclose(fp);/關(guān)閉文件7:文件統(tǒng)計(jì)模塊void load(Node *woker)Node *p,*q;FILE *fp;/指向文件的指針int recordNum;/ 統(tǒng)計(jì)記錄
21、數(shù)if(fp = fopen(職工管理系統(tǒng).dat, rb) = NULL)/打開(kāi)文件printf(can not open filen);/不能打開(kāi)p=woker;recordNum = 0;while(!feof(fp)q=(Node*)malloc(sizeof(Node);fscanf(fp,%s%s%s%s%s%s%s,p-data.num,,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary);/*從文件讀入記錄*/p-next=q;q-next=NULL;p=q;rec
22、ordNum+;fclose(fp);printf(文件里共有%d 條記錄:n,recordNum);8:主函數(shù)模塊void main()Node *woker;FILE *fp;int flag;Node *p,*q;printf(tttt 職工信息管理系統(tǒng)n);woker=(Node*)malloc(sizeof(Node);woker-next=NULL;p=woker;while(1)printf(*目錄*);printf(n1 添加記錄n);printf(n2 修改記錄n);printf(n3 瀏覽記錄n);printf(n4 分類查找記錄n);printf(n5 刪除記錄n);pr
23、intf(n6 從文件讀取記錄n);printf(n0*-EXIT-*n);printf(請(qǐng)輸入你要操作的序號(hào):);scanf(%d,&flag);switch(flag)case 0:printf(n提示:已經(jīng)退出系統(tǒng),ByeBye!n);break;case 1:Add(woker);save(woker);break;/增加記錄case 2:change(woker);break;/修改記錄case 3:Disp(woker);break;/顯示記錄信息case 4:Tongji(woker);break;/查找記錄case 5:dismiss(woker);break;/刪除記
24、錄case 6:load(woker);break;/讀取記錄default:printf(n提示:輸入錯(cuò)誤!n); break;(4)程序的運(yùn)行和測(cè)試結(jié)果)程序的運(yùn)行和測(cè)試結(jié)果主界面:主界面:創(chuàng)建與增加模塊:創(chuàng)建與增加模塊:輸入職工信息為:職工號(hào)職工姓名職工性別職工出生年月職工學(xué)歷職工職位職工工資1Af11aaa10002Bm22bbb20003Cf33ccc30004Dm44ddd4000輸入第一次時(shí):輸入第二次時(shí):輸入第三次時(shí):輸入第四次時(shí):顯示模塊:顯示模塊:輸入四次后顯示的結(jié)果為:存檔模塊:存檔模塊:文件統(tǒng)計(jì)模塊:文件統(tǒng)計(jì)模塊:查找模塊:查找模塊:輸入查找職工號(hào)為 3 的職工信息:輸
25、入查找職工姓名為 c 的職工信息:修改模塊:修改模塊:修改職工號(hào)為 3 的職工信息為:職工號(hào)職工姓名職工性別職工出生年月職工學(xué)歷職工職位職工工資5Ef55eee5000職工信息變成:刪除模塊:刪除模塊:刪除職工號(hào)為 5 的職工信息:刪除后的結(jié)果為:退出模塊:退出模塊:四、四、實(shí)驗(yàn)中的問(wèn)題及心得實(shí)驗(yàn)中的問(wèn)題及心得此次實(shí)踐課編寫(xiě)的是一個(gè)應(yīng)用程序,相對(duì)于以前我們見(jiàn)到的程序,它要大得多,運(yùn)行的結(jié)果也沒(méi)有預(yù)想中的好,數(shù)據(jù)的輸出格式不太規(guī)范,而且各模塊也出現(xiàn)了一些小問(wèn)題,在老師和同學(xué)的幫助下,我很有耐心的一次又一次的進(jìn)行修改,最后運(yùn)行的結(jié)果基本上達(dá)到了預(yù)期的目的。本次 C 語(yǔ)言的實(shí)習(xí)課讓我對(duì) C 語(yǔ)言的學(xué)
26、習(xí)又有了更深入的了解, 也讓我更深刻地領(lǐng)悟到了“實(shí)踐出真理”這個(gè)道理,在上機(jī)實(shí)踐過(guò)程中學(xué)到的知識(shí)遠(yuǎn)遠(yuǎn)超過(guò)了在課堂上十幾周學(xué)到的, 這次程序設(shè)計(jì)課讓我增添了許多程序設(shè)計(jì)經(jīng)驗(yàn),為我們將來(lái)走上工作崗位其了不小的鋪墊作用。本次實(shí)習(xí)中遇到了很多以前沒(méi)有遇到過(guò)的問(wèn)題,也曾想過(guò)要放棄,但看到那些同學(xué)都在那認(rèn)真的寫(xiě)程序,給了我繼續(xù)的信心。在同學(xué)和老師的幫助下,我順利的結(jié)束了本次實(shí)習(xí),讓我知道原來(lái)憑借自己努力取得的成功會(huì)讓自己這么欣慰,也讓我知道了友誼和團(tuán)結(jié)的重要性。(4)程序清單#include stdio.h#include stdlib.h#include string.hstruct wokers/定義
27、一個(gè) woker 的結(jié)構(gòu)體char num10;/職工號(hào)char name15;/職工姓名char sex15;/職工性別char birthday15;/職工出生年月chardegree10;/職工學(xué)歷char position10;/職工職位char salary10;/職工工資;typedef struct nodestruct wokers data;struct node *next;/建立一個(gè)鏈表。Node;void Add(Node *woker)/添加記錄Node *p,*r,*s;char n10;/先用于輸入職工號(hào),也用于判斷是否跳出循環(huán)r=woker;s=woker-ne
28、xt;/使 s 為第一個(gè)有用的結(jié)點(diǎn)while(r-next!=NULL)/這個(gè)循環(huán)的作用是使 r 為最后一個(gè)有用的結(jié)點(diǎn)r=r-next;/將指針置于最末尾while(1)printf(提示:輸入 0 則返回主菜單!n);printf(n 請(qǐng)你輸入職工號(hào):);scanf(%s,n);if(strcmp(n,0)=0)break;p=(Node *)malloc(sizeof(Node);/申請(qǐng)空間strcpy(p-data.num,n);printf(n 請(qǐng)輸入姓名:);scanf(%s,);printf(n 請(qǐng)輸入性別:);scanf(%s,p-data.sex);pri
29、ntf(n 請(qǐng)輸入出生年月:);scanf(%s,&p-data.birthday);printf(n 請(qǐng)輸入學(xué)歷:);scanf(%s,&p-data.degree);printf(n 請(qǐng)輸入職位:);scanf(%s,&p-data.position);printf(n 請(qǐng)輸入工資:);scanf(%s,&p-data.salary);printf(提示:已經(jīng)完成一條記錄的添加。n);p-next=NULL;r-next=p;/這一步是必需的,將 p 與先前的鏈表連起來(lái)構(gòu)成一條新鏈表r=p;/也是必需的.將 r 又重設(shè)為新鏈的最后一個(gè)有用結(jié)點(diǎn)void cha
30、nge(Node *woker)/修改職工信息函數(shù)Node *p;char find20;if(!woker-next)printf(n提示:沒(méi)有資料可以修改!n);return;printf(請(qǐng)輸入要修改的職工號(hào):);scanf(%s,find);p=woker-next;while(p!=NULL)if(strcmp(p-data.num,find)=0)/如果找到的話返回的是符合要求break;p=p-next;if(p)int x;while(1)printf(完成修改請(qǐng)輸入 0 否則輸入任意數(shù)再進(jìn)行修改:);scanf(%d,&x);if(x=0)break;printf(請(qǐng)
31、輸入新職工號(hào)(原來(lái)是 %s ):,p-data.num);scanf(%s,p-data.num);printf(請(qǐng)輸入新職工姓名(原來(lái)是 %s ):,);scanf(%s,);printf(請(qǐng)輸入新職工性別(原來(lái)是 %s ):,p-data.sex);scanf(%s,p-data.sex);printf(請(qǐng)輸入新出生年月(原來(lái)是 %s ):,p-data.birthday);scanf(%s,p-data.birthday);printf(請(qǐng)輸入新職工學(xué)歷(原來(lái)是 %s ):,p-data.degree);scanf(%s,p-data.degr
32、ee);printf(請(qǐng)輸入新職工職位(原來(lái)是 %s ):,p-data.position);scanf(%s,p-data.position);printf(請(qǐng)輸入新職工工資(原來(lái)是 %s ):,p-data.salary);scanf(%s,p-data.salary);printf(n提示:該項(xiàng)記錄資料已經(jīng)成功修改!n);elseprintf(n提示:你要修改的信息不存在!n);void Disp(Node *woker)/輸出職工信息Node *p;p=woker-next;if(!p)printf(n提示:沒(méi)有記錄可以顯示!n);return;printf(tttt 顯示結(jié)果n);p
33、rintf(職工號(hào)職工姓名職工性別職工生日職工學(xué)歷職工職位職工工資n);while(p)printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary);p=p-next;void Tongji(Node *woker)/查找統(tǒng)計(jì)函數(shù)Node *p;int sel;int flag2=0,ha=0;p=woker-next;char find20;if(!woker-next)/若鏈表為
34、空printf(n提示:沒(méi)有資料可以統(tǒng)計(jì)分類!n);return;printf(提示:n=0退出n=1按職工號(hào)統(tǒng)計(jì)n=2按職工姓名名稱統(tǒng)計(jì)n);scanf(%d,&sel);if(sel=1)printf(n 輸入你要統(tǒng)計(jì)分類的職工號(hào):);scanf(%s,find);while(p)if(strcmp(p-data.num,find)=0)flag2+;if(flag2=1&ha!=flag2) printf(職工號(hào)職工姓名職工性別職工生日職工學(xué)歷職工職位職工工資n);printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,
35、,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary);ha=flag2;elseif(flag2ha)printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary);ha=flag2;p=p-next;if(flag2)printf(n*按設(shè)備號(hào)%s 統(tǒng)計(jì)分類的有%d 條記
36、錄:*nn,find,flag2);else printf(n 按職工號(hào)%s 統(tǒng)計(jì)的結(jié)果為 0 個(gè)nn,find);else if(sel=2)printf(n 輸入你要統(tǒng)計(jì)分類的職工姓名:);scanf(%s,find);while(p)if(strcmp(,find)=0)flag2+;if(flag2=1&ha!=flag2) printf(職工號(hào)職工姓名職工性別職工生日職工學(xué)歷職工職位職工工資n);printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,,p-data.sex,p-d
37、ata.birthday,p-data.degree,p-data.position,p-data.salary);ha=flag2;elseif(flag2ha)printf(n%-13s%-11s%-7s%-10s%-13s%-10s%-5sn,p-data.num,,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary);ha=flag2;p=p-next;if(flag2)printf(n*按設(shè)備名稱%s 統(tǒng)計(jì)的有%d 條記錄:*nn,find,flag2);else prin
38、tf(n 按職工姓名%s 統(tǒng)計(jì)分類的結(jié)果為 0 個(gè)nn,find);else if(sel=0) return;void load(Node *woker)Node *p,*q;FILE *fp;/指向文件的指針int recordNum;/ 統(tǒng)計(jì)記錄數(shù)if(fp = fopen(職工管理系統(tǒng).dat, rb) = NULL)/打開(kāi)文件printf(can not open filen);/不能打開(kāi)p=woker;recordNum = 0;while(!feof(fp)q=(Node*)malloc(sizeof(Node);fscanf(fp, %s %s %s %s %s %s%s,p-
39、data.num,,p-data.sex,p-data.birthday,p-data.degree,p-data.position,p-data.salary);/*從文件讀入記錄*/p-next=q;q-next=NULL;p=q;recordNum+;fclose(fp);printf(文件里共有%d 條記錄:n,recordNum);void save(Node *woker)/將職工信息保存到文件int n;Node *p;FILE *fp;/指向文件的指針printf(需要保存嗎?(1-保存0-不保存));scanf(%d,&n);if(n)if(wo
40、ker-next=NULL)printf(無(wú)記錄);else p=woker-next;if(fp = fopen(職工管理系統(tǒng).dat, wb) = NULL) /打開(kāi)文件,并判斷打開(kāi)是否正常printf(can not open filen);/ 打開(kāi)文件出錯(cuò)while(p!=NULL)fprintf(fp,%s %s %s %s %s %s%s,&p-data.num,&,&p-data.sex,&p-data.birthday,&p-data.degree,&p-data.position,&p-data.salary);p=p-next;fclose(fp);/關(guān)閉文件void dismiss(Node *woker)/刪除職工信息函數(shù)Node *p,*r,*s;char find10;if(!woker-next)printf(n提示:沒(méi)有資料可以顯示!n);return;printf(n提示:請(qǐng)輸入您要?jiǎng)h除的職工號(hào)!n);scanf(%s,find);p=woker-next;while(p!=NULL)if(strcmp(p-data.num,find)=0)/如果找到的話返回的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四年級(jí)上冊(cè)語(yǔ)文教學(xué)計(jì)劃集合7篇
- 我的大學(xué)讀后感-15篇
- 《貓城記》讀書(shū)筆記個(gè)人書(shū)評(píng)
- 醫(yī)學(xué)生自我介紹范文集合四篇
- 冠心病二級(jí)預(yù)防他汀治療的理想與現(xiàn)實(shí)-血脂回顧和展望
- 淺析建筑物區(qū)分所有權(quán)制度
- 教師年度總結(jié)范文5篇
- 健身徒步旅行合同
- 2025年放射性核素遠(yuǎn)距離治療機(jī)合作協(xié)議書(shū)
- 餐館租賃合同范本
- 護(hù)理查對(duì)制度課件
- 移動(dòng)發(fā)布推介會(huì)服務(wù)方案
- 供應(yīng)商產(chǎn)品質(zhì)量監(jiān)督管理制度
- 單位工程、分部工程、分項(xiàng)工程及檢驗(yàn)批劃分方案
- 器樂(lè)Ⅰ小提琴課程教學(xué)大綱
- 主債權(quán)合同及不動(dòng)產(chǎn)抵押合同(簡(jiǎn)化版本)
- 服裝廠安全生產(chǎn)責(zé)任書(shū)
- JGJ202-2010建筑施工工具式腳手架安全技術(shù)規(guī)范
- 液壓爬模系統(tǒng)作業(yè)指導(dǎo)書(shū)
- 2018-2019學(xué)年北京市西城區(qū)人教版六年級(jí)上冊(cè)期末測(cè)試數(shù)學(xué)試卷
- SFC15(發(fā)送)和SFC14(接收)組態(tài)步驟
評(píng)論
0/150
提交評(píng)論