

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)大作業(yè)報(bào)告</p><p> 專 業(yè): 信息管理與信息系統(tǒng) </p><p> 班 級(jí): 信 息 1 0 0 1 </p><p> 學(xué) 號(hào): </p><p> 姓 名: xxx
2、 </p><p> 指導(dǎo)教師: </p><p> 2011 年 12 月</p><p><b> 目錄</b></p><p> 需求分析.............................................2&l
3、t;/p><p> 概要設(shè)計(jì).............................................3</p><p> 1、輸入功能的實(shí)現(xiàn).......................................3</p><p> 2、系統(tǒng)處理功能的實(shí)現(xiàn)...................................3</p&
4、gt;<p> 3、輸出的實(shí)現(xiàn)...........................................3</p><p> 4、系統(tǒng)功能結(jié)構(gòu).........................................3</p><p> 5、模塊函數(shù)構(gòu)造.........................................4</p&
5、gt;<p> 三、詳細(xì)設(shè)計(jì)..............................................4</p><p> 1、抽象數(shù)據(jù)類型定義.....................................4</p><p> 2、主函數(shù)設(shè)計(jì)...........................................5</p
6、><p> 3、查找算法設(shè)計(jì).........................................6</p><p> 4、排序算法設(shè)計(jì).........................................6</p><p> 四、調(diào)試分析..............................................9<
7、/p><p> 五、 用戶使用說明..........................................9</p><p> 六、測(cè)試結(jié)果..............................................10</p><p> 七、 附錄............................................
8、.....14</p><p> 1、參考文獻(xiàn)............................................14</p><p> 2、實(shí)驗(yàn)程序............................................14</p><p><b> 一、需求分析</b></p><
9、;p> 職工管理系統(tǒng)是一個(gè)工作單位不可缺少的管理工具,它管理的數(shù)據(jù)對(duì)于公司的決策者和管理者來說都至關(guān)重要,所以職工管理系統(tǒng)應(yīng)該能夠?yàn)橛脩籼峁┏渥愕男畔⒑涂旖莸牟樵兪侄巍5恢币詠砀鱾€(gè)公司基本上都是靠傳統(tǒng)的人工方式來管理職工信息,這種管理方式存在著許多缺點(diǎn),如:效率低、保密性差,另外時(shí)間一長(zhǎng),將產(chǎn)生大量的文件和數(shù)據(jù),這對(duì)于信息的查找、更新和維護(hù)都帶來了不少的困難。</p><p> 當(dāng)今社會(huì),信息迅速膨脹
10、,隨著各個(gè)公司的規(guī)模增大,有關(guān)信息管理工作所涉及的數(shù)據(jù)量越來越大,職工信息量也大大增加,利用傳統(tǒng)的手工查詢、登記、修改等方法的處理速度遠(yuǎn)遠(yuǎn)跟不上公司的需求,有的公司不得不靠增加人力、物力來進(jìn)行信息管理。 </p><p> 隨著計(jì)算機(jī)技術(shù)的不斷提高,計(jì)算機(jī)作為知識(shí)經(jīng)濟(jì)時(shí)代的產(chǎn)物,其強(qiáng)大的功能已為人們深刻認(rèn)識(shí),它已進(jìn)入人類社會(huì)的各個(gè)行業(yè)和領(lǐng)域并發(fā)揮著越來越重要的作用,成為人們工作和生活中不可缺少的一部分。<
11、/p><p> 而作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)職工進(jìn)行管理,具有手工管理所無法比擬的優(yōu)點(diǎn)。例如:檢索迅速、查找方便、可靠性高、存儲(chǔ)量大、保密性好、壽命長(zhǎng)、成本低等。這些優(yōu)點(diǎn)能夠極大地提高職工管理的效率,也是公司的科學(xué)化、正規(guī)化管理和與世界接軌的重要條件。</p><p> 職工管理系統(tǒng)作為一種管理軟件正在各公司中得到越來越廣泛的應(yīng)用,且已達(dá)到了良好效果。</p>&l
12、t;p> 簡(jiǎn)單的職工管理系統(tǒng):</p><p><b> 1、問題描述</b></p><p> 對(duì)單位的職工進(jìn)行管理,包括插入、刪除、查找、排序等功能。</p><p><b> 2、要求</b></p><p> 職工對(duì)象包括姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址、電話
13、等信息。</p><p> ?。?)新增一名職工:將新增職工對(duì)象按姓名以字典方式職工管理文件中。</p><p> ?。?)刪除一名職工:從職工管理文件中刪除一名職工對(duì)象。</p><p> ?。?)查詢:從職工管理文件中查詢符合某些條件的職工。</p><p> ?。?)修改:檢索某個(gè)職工對(duì)象,對(duì)其某些屬性進(jìn)行修改。</p>
14、<p> ?。?)排序:按某種需要對(duì)職工對(duì)象文件進(jìn)行排序。</p><p><b> 3、實(shí)現(xiàn)提示</b></p><p> 職工對(duì)象數(shù)不必很多,便于一次讀入內(nèi)存,所有操作不經(jīng)過內(nèi)外存交換。</p><p> ?。?)由鍵盤輸入職工對(duì)象,以文件方式保存。程序執(zhí)行時(shí)先將文件讀入內(nèi)存。</p><p> ?。?
15、)對(duì)職工對(duì)象中的"姓名"按字典順序進(jìn)行排序。</p><p> ?。?)對(duì)排序后的職工對(duì)象進(jìn)行增、刪、查詢、修改、排序等操作。</p><p><b> 二、概要設(shè)計(jì) </b></p><p> 1、輸入功能的實(shí)現(xiàn):要想實(shí)現(xiàn)職工管理系統(tǒng)的輸入,必須要建立一個(gè)職工信息系統(tǒng)的抽象數(shù)據(jù)類型,其中職工信息以鏈表的存儲(chǔ)方式實(shí)現(xiàn)。由
16、鍵盤輸入職工對(duì)象,以文件方式保存。程序執(zhí)行時(shí)先將文件讀入內(nèi)存。</p><p> 2、系統(tǒng)處理功能的實(shí)現(xiàn):系統(tǒng)管理員根據(jù)公司的人員流動(dòng)情況,在提示信息的提示下,選擇相應(yīng)的服務(wù)進(jìn)行操作。如對(duì)職工對(duì)象中的"姓名"按字典順序進(jìn)行排序;對(duì)排序后的職工對(duì)象進(jìn)行增、刪、查詢、修改、排序等操作。</p><p> 3、輸出的實(shí)現(xiàn):根據(jù)選擇的操作,輸出與之對(duì)應(yīng)的信息。</p&
17、gt;<p> 綜上可以繪制出職工管理功能的系統(tǒng)流程圖,如圖1所示</p><p><b> 圖1 系統(tǒng)流程圖</b></p><p><b> 4、系統(tǒng)功能結(jié)構(gòu)</b></p><p> 根據(jù)職工管理系統(tǒng)問題的分析和設(shè)計(jì)要求,可以得到該職工管理系統(tǒng)可以分為五個(gè)模塊:職工信息添加模塊、職工信息修改模
18、塊、職工信息刪除模塊、職工信息查詢模塊、職工信息排序模塊。其系統(tǒng)功能結(jié)構(gòu)如圖2所示。</p><p> 圖2 系統(tǒng)功能結(jié)構(gòu)圖</p><p><b> 5、模塊函數(shù)構(gòu)造</b></p><p> 根據(jù)系統(tǒng)功能結(jié)構(gòu)圖的描述,可以構(gòu)造出該系統(tǒng)的抽象數(shù)據(jù)類型和相對(duì)應(yīng)的函數(shù),其方法名和功能如表1所示。</p><p>&
19、lt;b> 表1 函數(shù)功能表</b></p><p><b> 三、詳細(xì)設(shè)計(jì)</b></p><p> 1、抽象數(shù)據(jù)類型定義</p><p> (1)定義表結(jié)點(diǎn)(typedef struct Node)</p><p> typedef struct Node{</p><
20、;p> long int born_time,work_time,tele_num;</p><p> char sex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX];</p><p> struct Node *next;</p><p><b> }SLNode;</
21、b></p><p> ?。?)定義職工信息(typedef struct Datatype)</p><p> typedef struct{</p><p> long int born_time,work_time,tele_num;</p><p> char name[ALLMAX],sex,degree[ALLMAX]
22、,job[ALLMAX],address[ALLMAX];</p><p> }DataType;</p><p> ?。?)初始化鏈表(ListInitiate(SLNode **head))</p><p> void ListInitiate(SLNode **head)//---------------------------------鏈表初始化<
23、;/p><p><b> {</b></p><p> if((*head=(SLNode *)malloc(sizeof(SLNode)))==NULL) exit(1);//動(dòng)態(tài)分配存儲(chǔ)空間</p><p> (*head)->next=NULL;</p><p><b> }</b>
24、</p><p><b> 2、主函數(shù)設(shè)計(jì)</b></p><p> (1)根據(jù)詳細(xì)設(shè)計(jì)要求,可以得到主函數(shù)代碼及其對(duì)應(yīng)的程序流程圖:在主函數(shù)中,實(shí)現(xiàn)了友好的界面設(shè)計(jì)。系統(tǒng)需要輸入職工的基本信息:姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址、電話等。這個(gè)系統(tǒng)還利用鍵盤輸入提供的主菜單服務(wù),在主菜單中,有七種操作的調(diào)用:</p><p>
25、 新增職工信息:SLNode *ListInsert(SLNode *head,DataType x)</p><p> 查詢職工信息:Listfind(SLNode head)</p><p> 刪除職工信息:ListDelete(SLNode *head)</p><p> 修改職工信息:ListModify(SLNode *head)</p>
26、;<p> 職工信息排序:Listpaixu(SLNode *head)</p><p> 保存職工信息:put(SLNode *head,FILE *fp)</p><p> 顯示職工信息:print(SLNode *head)</p><p> (2)主函數(shù)程序流程圖如圖3所示:</p><p> 圖 3 主函數(shù)
27、程序流程圖</p><p><b> 3、查找算法設(shè)計(jì)</b></p><p> 在查詢算法中,職工管理系統(tǒng)提供了七種查詢操作,實(shí)現(xiàn)了系統(tǒng)的人性化查詢操作。這些查詢操作分別為:</p><p> 對(duì)姓名進(jìn)行查詢,對(duì)性別進(jìn)行查詢,對(duì)出生年月進(jìn)行查詢,對(duì)工作年月進(jìn)行查詢,對(duì)學(xué)歷進(jìn)行查詢,對(duì)職位進(jìn)行查詢,對(duì)住址進(jìn)行查詢,對(duì)電話進(jìn)行查詢等一些列操
28、作。查找算法中,利用鏈表的指針的移動(dòng)掃描整個(gè)職工信息表,利用strcmp()函數(shù)判斷字符串是否匹配。</p><p> 查詢算法程序流程圖如圖4所示:</p><p> 圖 4 查詢算法程序流程圖</p><p><b> 4、排序算法設(shè)計(jì)</b></p><p> 在排序算法中,職工管理系統(tǒng)提供了四種查詢操作
29、,實(shí)現(xiàn)了系統(tǒng)的基本排序操作。這些排序操作分別為:</p><p> 對(duì)姓名進(jìn)行排序,對(duì)性別進(jìn)行排序,對(duì)出生年月進(jìn)行排序,對(duì)工作年月進(jìn)行排序。排序算法中,利用鏈表的指針的移動(dòng)掃描整個(gè)職工信息表,利用strcmp()函數(shù)判斷字符串是否匹配。</p><p><b> 排序的核心代碼:</b></p><p> for(q=head->n
30、ext,p=head,s=p;q;s=p,p=q,q=q->next)</p><p><b> {</b></p><p> if(p->born_time>q->born_time)//對(duì)出生年月進(jìn)行排序</p><p><b> {</b></p><p> i
31、f(head==p)</p><p><b> { </b></p><p> head->next=q->next; </p><p><b> head=q; </b></p><p> q->next=p;</p><p> q=head
32、->next;</p><p><b> p=head;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> p->
33、next=q->next; </p><p> q->next=p; </p><p> s->next=q; </p><p><b> p=q; </b></p><p> q=p->next; </p><p><b> }&l
34、t;/b></p><p><b> flag=1;</b></p><p><b> }</b></p><p><b> }</b></p><p> 排序算法流程圖如圖5所示:</p><p> 圖5 排序算法程序流程</p
35、><p><b> 四、調(diào)試分析</b></p><p> 測(cè)試是使用人工或者自動(dòng)手段來運(yùn)行或測(cè)試某個(gè)系統(tǒng)的過程,其目的在于檢驗(yàn)是否滿足規(guī)定的需求或弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別。</p><p> 在調(diào)試查詢修改功能過程中,查詢的結(jié)果顯示,沒有找到職工信息,最后發(fā)現(xiàn)查找的結(jié)點(diǎn)不正確,查詢應(yīng)該與輸入的值和頭結(jié)點(diǎn)next比較。此外查詢結(jié)點(diǎn)不知
36、道如何循環(huán),反復(fù)修改程序才知道如何繼續(xù)查找而不出錯(cuò)誤。</p><p><b> 經(jīng)驗(yàn)與體會(huì):</b></p><p> 本次課程設(shè)計(jì)是圍繞數(shù)據(jù)結(jié)構(gòu)進(jìn)行。根據(jù)問題描述可知,需要解決問題并不復(fù)雜,整個(gè)問題只需要實(shí)現(xiàn)一個(gè)職工管理系統(tǒng)功能,那就是在這個(gè)系統(tǒng)中實(shí)現(xiàn)對(duì)職工信息的插入、刪除、查詢、排序、修改以及保存。但是,為了實(shí)現(xiàn)該功能,卻需要優(yōu)秀的算法和數(shù)據(jù)結(jié)構(gòu)以保證實(shí)現(xiàn)的
37、時(shí)間和空間效率。把職工信息存儲(chǔ)在一個(gè)單鏈表中,利用指針實(shí)現(xiàn)對(duì)職工信息的各項(xiàng)基本操作。</p><p> 雖然設(shè)計(jì)的程序完成了題目描述所需要實(shí)現(xiàn)的功能,但是仍然存在不如人意的地方。可以排序上面多設(shè)計(jì)幾個(gè)算法,實(shí)現(xiàn)多角度排序。在這個(gè)系統(tǒng)中沒有職工序號(hào)的信息,所以允許職工姓名相同,在一定程度上可能存在職工信息重復(fù)。</p><p> 經(jīng)過這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),我們不僅及時(shí)鞏固的了數(shù)據(jù)結(jié)構(gòu)、算
38、法、以及軟件工程的知識(shí),并明白數(shù)據(jù)結(jié)構(gòu)和算法對(duì)于程序時(shí)間和空間性能的影響,及軟件工程提供的開發(fā)流程和工具對(duì)于實(shí)現(xiàn)特定功能程序的重要意義。</p><p> 當(dāng)我們面對(duì)一個(gè)實(shí)際問題,應(yīng)該迅速根據(jù)問題性質(zhì)和特點(diǎn)抽象成特定的數(shù)據(jù)結(jié)構(gòu),當(dāng)然每個(gè)問題都有可能能夠抽象成多種數(shù)據(jù)結(jié)構(gòu),每種數(shù)據(jù)結(jié)構(gòu)適應(yīng)于不同的算法。因此應(yīng)該綜合考慮這樣的數(shù)據(jù)結(jié)構(gòu)、算法以及它們的空間和時(shí)間效率,然后從中選擇一個(gè)作為實(shí)現(xiàn)程序的基礎(chǔ)。</p&
39、gt;<p> 此外,對(duì)程序的測(cè)試應(yīng)該要仔細(xì),根據(jù)模塊的特點(diǎn)和測(cè)試階段,采用各種軟件測(cè)試方法對(duì)程序進(jìn)行測(cè)試,確保各個(gè)模塊的正確性和完整性,最后集成起來測(cè)試其是否正確和完整地實(shí)現(xiàn)了問題描述中要求的功能。</p><p><b> 五、用戶使用說明</b></p><p> 進(jìn)入職工管理系統(tǒng),首先看到的就是歡迎界面,然后提示:請(qǐng)輸入要錄入的職工數(shù),輸入
40、完數(shù)字后,就提示:按次序依次輸入職工的姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、電話的信息,輸完信息后自動(dòng)回到主界面,根據(jù)提示輸入相應(yīng)操作的數(shù)字,</p><p> 如0,退出簡(jiǎn)單職工管理系統(tǒng);</p><p> 如1,提示依次輸入職工信息,錄入完畢自動(dòng)返回主界面;</p><p> 如2,提示輸入刪除的姓名,成功正確返回,錯(cuò)誤有提示無此員工信息;</
41、p><p> 如3,會(huì)提示查詢方式:0.退出查詢系統(tǒng),回到主菜單1.對(duì)姓名進(jìn)行查詢2.對(duì)出生年月進(jìn)行查詢3.對(duì)學(xué)歷進(jìn)行查詢4.對(duì)工作年月進(jìn)行查詢,輸入相應(yīng)編號(hào)進(jìn)行查詢;</p><p> 如4,提示輸入修改職工姓名,然后進(jìn)行依次修改職工所有信息;</p><p> 如5,提示:0.退出排序系統(tǒng),回到主菜單1.對(duì)性別進(jìn)行排序2.對(duì)出生年月進(jìn)行排序3.對(duì)工作年月進(jìn)行排
42、序4.對(duì)姓名進(jìn)行排序,輸入號(hào)碼進(jìn)行查詢。</p><p><b> 六、測(cè)試結(jié)果</b></p><p> ?。?)進(jìn)入職工管理系統(tǒng),如圖6所示:</p><p> 圖 6 主菜單選擇界面</p><p> ?。?)退出職工管理系統(tǒng),如圖7所示:</p><p> 圖7 退出簡(jiǎn)單職工管理系統(tǒng)
43、界面</p><p> ?。?)新增一名職工信息并查詢?nèi)柯毠ば畔?,如圖8所示:</p><p> 圖 8 新增并查詢職工信息界面</p><p> ?。?)刪除職工信息,如圖9所示:</p><p> 圖9 刪除職工信息界面</p><p> ?。?)對(duì)職工姓名進(jìn)行查詢并顯示,如圖10 所示:</p&g
44、t;<p> 圖10 職工信息查詢界面</p><p> ?。?)修改職工信息,如圖11所示:</p><p> 圖11 職工信息修改界面</p><p> ?。?)按姓名排序職工信息并顯示,如圖12所示:</p><p> 圖12 按姓名排序職工信息并顯示</p><p><b>
45、七、附錄</b></p><p><b> 1、參考文獻(xiàn):</b></p><p> [1]李云清,楊慶紅,揭安全.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:人民郵電大學(xué)出版社,2004.6</p><p> [2]潘彥.算法設(shè)計(jì)與分析基礎(chǔ)[M].北京:清華大學(xué)出版社,2007.1</p><p> [3]肖
46、夢(mèng)強(qiáng),曲秀清.軟件工程——原理、方法與應(yīng)用 [M].北京:中國(guó)水利水電出版社,2005.10</p><p> [4] 呂鳳翥.C++語言程序設(shè)計(jì)(第2版)[M].北京:電子工業(yè)出版社,2007.2</p><p> [5] 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,2002.9</p><p><b> 2、實(shí)驗(yàn)程序:<
47、;/b></p><p> #include <stdio.h></p><p> #include <string.h></p><p> #include <stdlib.h></p><p> #define ALLMAX 100 //總共統(tǒng)計(jì)的職工的人數(shù)</p><
48、p> typedef struct Node</p><p><b> {</b></p><p> long int born_date,work_date,tele_num;</p><p> char sex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX];&l
49、t;/p><p> struct Node *next;</p><p><b> }SLNode;</b></p><p> typedef struct</p><p><b> {</b></p><p> long int born_date,work_date
50、,tele_num;</p><p> char name[ALLMAX],sex,degree[ALLMAX],job[ALLMAX],address[ALLMAX];</p><p> }DataType;</p><p> void ListInitiate(SLNode **head)//鏈表初始化</p><p><b&
51、gt; {</b></p><p> if((*head=(SLNode *)malloc(sizeof(SLNode)))==NULL) </p><p> exit(1);//動(dòng)態(tài)分配存儲(chǔ)空間</p><p> (*head)->next=NULL;</p><p><b> }</b>&
52、lt;/p><p> SLNode *ListInsert(SLNode *head,DataType x)//職工信息的插入姓名并按照升序排列</p><p><b> {</b></p><p> SLNode *p,*q,*s;</p><p> p=head->next;</p><
53、p> if((q=(SLNode *)malloc(sizeof(SLNode)))==NULL) </p><p> exit(1);//動(dòng)態(tài)分配存儲(chǔ)空間</p><p> q->born_date=x.born_date; </p><p> q->work_date=x.work_date;</p><p>
54、 q->tele_num=x.tele_num; </p><p> strcpy(q->name,x.name);</p><p> q->sex=x.sex; </p><p> strcpy(q->degree,x.degree);</p><p> strcpy(q->job,x.job); &l
55、t;/p><p> strcpy(q->address,x.address);</p><p> if(head->next==NULL)</p><p> {//如果只有鏈表的頭結(jié)點(diǎn),沒有其他的結(jié)點(diǎn),直接插入在頭結(jié)點(diǎn)后面</p><p> head->next=q;</p><p> head
56、->next->next=NULL;</p><p><b> }</b></p><p><b> else</b></p><p><b> {//鏈表非空</b></p><p> for(;p;p=p->next)</p><
57、;p><b> {</b></p><p> if(p->next!=NULL)</p><p><b> {</b></p><p> if(strcmp(p->name,x.name)<0&&strcmp(p->next->name,x.name)>0)
58、</p><p> {//位于兩個(gè)結(jié)點(diǎn)之間</p><p> s=p->next;</p><p> p->next=q;</p><p> q->next=s;</p><p><b> break;</b></p><p><b>
59、 }</b></p><p> //else if(strcmp(p->name,x.name)==0)break; //如果姓名相同則不插入信息</p><p><b> }</b></p><p> else if(strcmp(p->name,x.name)<0&&p->ne
60、xt==NULL)</p><p> {//鏈表非空,并且在排序中是最后一個(gè)</p><p> p->next=q;</p><p> q->next=NULL;</p><p><b> break;</b></p><p><b> }</b><
61、;/p><p> if(strcmp(p->name,x.name)>0)</p><p> {//位于鏈表頭結(jié)點(diǎn)之后的位置</p><p> s=head->next;</p><p> head->next=q;</p><p> q->next=s;</p>&l
62、t;p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> return head;</p><p>&
63、lt;b> }</b></p><p> void print(SLNode *head)//職工信息的顯示</p><p><b> {</b></p><p> for(SLNode *p=head->next;p;p=p->next)//輸出所有職工的信息</p><p>
64、printf("%s %c %ld %ld %s %s %s %ld\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);</p><p><b> }</b></p><p>
65、void printLink(SLNode *head)//職工信息的顯示</p><p><b> {</b></p><p> printf("職工名單:\n姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址、電話\n");</p><p> print(head);</p><p><
66、b> }</b></p><p> void put(SLNode *head,FILE *fp)//職工信息的保存</p><p><b> {</b></p><p> SLNode *p;</p><p> if((fp=fopen("Employee.txt",&q
67、uot;w"))==NULL)</p><p><b> {</b></p><p> printf("無法打開'Employee.txt'!\n");</p><p><b> exit(0);</b></p><p><b> }&
68、lt;/b></p><p> for(p=head->next;p;p=p->next)</p><p><b> {</b></p><p> fprintf(fp,"%s %c %ld %ld %s %s %s %ld\n",p->name,p->sex,p->born_dat
69、e,p->work_date,p->degree,p->job,p->address,p->tele_num);</p><p><b> }</b></p><p> if(fclose(fp))</p><p> printf("無法關(guān)閉'Employee.txt'!\n&quo
70、t;); exit(0);</p><p><b> }</b></p><p> void ListDelete(SLNode *head)//職工信息的刪除</p><p><b> {</b></p><p> SLNode *p,*s;</p><p> c
71、har x[20];</p><p><b> s=head;</b></p><p> p=head->next;</p><p> if(head->next==NULL)</p><p> {//鏈表為空,輸出:名單中無職工信息,無須刪除!</p><p> print
72、f("名單中無此職工信息,無須刪除!\n");</p><p><b> return;</b></p><p><b> }</b></p><p> printf("請(qǐng)輸入要?jiǎng)h除職工的姓名:\n"); //輸入要?jiǎng)h除的人的姓名</p><p> s
73、canf("%s",x);</p><p> for(p;p;p=p->next)</p><p> {//在鏈表中從頭到尾查找輸入的人的姓名</p><p> if(strcmp(p->name,x)==0)</p><p> {//如果存在,則刪除,否則輸出:名單中無職工信息,無須刪除!</
74、p><p> s->next=p->next;</p><p><b> free(p);</b></p><p> printf("刪除成功!請(qǐng)繼續(xù)操作!\n");</p><p> printLink(head);</p><p><b> br
75、eak;</b></p><p><b> }</b></p><p><b> s=p;</b></p><p><b> }</b></p><p> if(p==NULL)</p><p> printf("名單中無
76、此職工信息,無須刪除!\n");</p><p><b> }</b></p><p> void ListModify(SLNode *head)//職工信息的修改</p><p><b> {</b></p><p> DataType x;</p><p&
77、gt; SLNode *p;</p><p> p=head->next;</p><p> if(p==NULL)</p><p><b> {</b></p><p> printf("職工名單無職工信息,無須修改!\n");</p><p><b&g
78、t; return;</b></p><p><b> }</b></p><p> printf("請(qǐng)輸入要修改的職工姓名:\n");</p><p> scanf("%s",x.name);</p><p> for(;p;p=p->next)<
79、;/p><p><b> {</b></p><p> if(strcmp(x.name,p->name)==0)//查找到了該職工的信息</p><p><b> {</b></p><p> printf("依次寫入該職工的新信息:\n");</p>
80、<p> printf("請(qǐng)輸入職工信息:\n姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址、電話\n");</p><p> scanf("%s %c %ld %ld %s %s %s %ld",p->name,&p->sex,&p->born_date,&p->work_date,p->degree,
81、p->job,p->address,&p->tele_num);</p><p> printf("修改成功!請(qǐng)繼續(xù)操作!\n");</p><p><b> break;</b></p><p><b> }</b></p><p><b&
82、gt; }</b></p><p> if(p==NULL)</p><p> printf("此職工不存在,無法修改其信息!\n");</p><p><b> }</b></p><p> void Listfind(SLNode head)//職工信息的查找</p&g
83、t;<p><b> {</b></p><p><b> int i,j;</b></p><p> SLNode *p;</p><p> DataType x;</p><p> if(head.next==NULL)//鏈表為空</p><p>
84、;<b> {</b></p><p> printf("名單中無職工信息,查詢失??!\n");</p><p><b> return;</b></p><p><b> }</b></p><p><b> //返回主菜單</b
85、></p><p> printf("\n");</p><p> printf("\t******************************************************************\n");</p><p> printf("\t*
86、 職工信息查詢操作 *\n");</p><p> printf("\t* *\n");</p><p> printf("\t* 0.退出查詢系統(tǒng),回到主菜單\
87、t\t 1.對(duì)姓名進(jìn)行查詢\t*\n\t* 2.對(duì)出生年月進(jìn)行查詢 \t\t 3.對(duì)學(xué)歷進(jìn)行查詢\t*\n\t* 4.對(duì)工作年月進(jìn)行查詢 \t\t 5.對(duì)職務(wù)進(jìn)行查詢\t*\n\t* 6.對(duì)住址進(jìn)行查詢 \t\t 7.對(duì)電話進(jìn)行查詢\t*\n");</p><p> printf("\t*******************
88、***********************************************\n");</p><p><b> while(1)</b></p><p><b> {</b></p><p> printf("請(qǐng)輸入您要選擇的操作:");</p><
89、;p> scanf("%d",&i);</p><p> if(i==0)//輸入0,退出查詢系統(tǒng),回到主菜單</p><p><b> break;</b></p><p> else if(i==1){//輸入1,對(duì)姓名進(jìn)行查詢</p><p> p=head.next;&
90、lt;/p><p> printf("請(qǐng)輸入姓名:");</p><p> scanf("%s",x.name);</p><p><b> j=0;</b></p><p> for(p;p;p=p->next){</p><p> if(st
91、rcmp(p->name,x.name)==0){//如果存在這個(gè)人,那么j自加</p><p><b> ++j;</b></p><p> printf("\n姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址、電話\n");</p><p> printf("%s %c %ld %ld %s %s
92、%s %ld\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);</p><p><b> }</b></p><p><b> }</b></p>&
93、lt;p> if(j==0)//表示沒有找到輸入的信息</p><p> printf("職工名單中不存在此人!\n");</p><p> else printf("查詢成功!繼續(xù)操作!\n");</p><p><b> }</b></p><p> else
94、if(i==2){//輸入2,對(duì)出生年月進(jìn)行查詢</p><p> p=head.next;</p><p> printf("請(qǐng)輸入出生年月:");</p><p> scanf("%ld",&x.born_date);</p><p><b> j=0;</b>
95、</p><p> for(p;p;p=p->next){</p><p> if(p->born_date==x.born_date){//輸入的出生年月在鏈表中存在</p><p> ++j;//如果存在這個(gè)人,那么j自加</p><p> printf("\n姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址
96、、電話\n");</p><p> printf("%s %c %ld %ld %s %s %s %ld\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);</p><p><b>
97、 }</b></p><p><b> }</b></p><p> if(j==0)//表示沒有找到輸入的信息</p><p> printf("職工名單中沒有這個(gè)時(shí)間出生的!\n");</p><p> else printf("查詢成功!請(qǐng)繼續(xù)操作!\n"
98、;);</p><p><b> }</b></p><p> else if(i==4){//輸入4,對(duì)工作年月進(jìn)行查詢</p><p> p=head.next;</p><p> printf("請(qǐng)輸入工作年月:");</p><p> scanf("
99、%ld",&x.work_date);</p><p><b> j=0;</b></p><p> for(p;p;p=p->next){</p><p> if(p->work_date==x.work_date){</p><p> ++j;//如果存在這個(gè)人,那么j自加<
100、;/p><p> printf("\n姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址、電話\n");</p><p> printf("%s %c %ld %ld %s %s %s %ld\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p
101、->address,p->tele_num);</p><p><b> }</b></p><p><b> }</b></p><p> if(j==0)//表示沒有找到輸入的信息</p><p> printf("職工名單中沒有這個(gè)時(shí)間工作的!\n");
102、</p><p> else printf("查詢成功!請(qǐng)繼續(xù)操作!\n");</p><p><b> }</b></p><p> else if(i==3){//輸入3,對(duì)學(xué)歷進(jìn)行查詢</p><p> p=head.next;</p><p> printf(
103、"請(qǐng)輸入學(xué)歷:");</p><p> scanf("%s",x.degree);</p><p><b> j=0;</b></p><p> for(p;p;p=p->next){</p><p> if(strcmp(p->degree,x.degree)
104、==0){</p><p> ++j;//如果存在這個(gè)人,那么j自加</p><p> printf("\n姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址、電話\n");</p><p> printf("%s %c %ld %ld %s %s %s %ld\n",p->name,p->sex,p->
105、born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);</p><p><b> }</b></p><p><b> }</b></p><p> if(j==0)//表示沒有找到輸入的信息</p>
106、<p> printf("職工名單中沒有這種學(xué)歷的!\n");</p><p> else printf("查詢成功!請(qǐng)繼續(xù)操作!\n");</p><p><b> }</b></p><p> else if(i==5){//輸入5,對(duì)職務(wù)進(jìn)行查詢</p><p
107、> p=head.next;</p><p> printf("請(qǐng)輸入職務(wù):");</p><p> scanf("%s",x.job);</p><p><b> j=0;</b></p><p> for(p;p;p=p->next){</p>
108、<p> if(strcmp(p->job,x.job)==0){</p><p> ++j;//如果存在這個(gè)人,那么j自加</p><p> printf("\n姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址、電話\n");</p><p> printf("%s %c %ld %ld %s %s %s
109、%ld\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);</p><p><b> }</b></p><p><b> }</b></p><
110、p> if(j==0)//表示沒有找到輸入的信息</p><p> printf("職工名單中沒有這種職務(wù)的!\n");</p><p> else printf("查詢成功!請(qǐng)繼續(xù)操作!\n");</p><p><b> }</b></p><p> else
111、if(i==6){//輸入6,對(duì)住址進(jìn)行查詢</p><p> p=head.next;</p><p> printf("請(qǐng)輸入住址:");</p><p> scanf("%s",x.address);</p><p><b> j=0;</b></p>
112、<p> for(p;p;p=p->next){</p><p> if(strcmp(p->address,x.address)==0){</p><p> ++j;//如果存在這個(gè)人,那么j自加</p><p> printf("\n姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址、電話\n");</p&g
113、t;<p> printf("%s %c %ld %ld %s %s %s %ld\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);</p><p><b> }</b></p&g
114、t;<p><b> }</b></p><p> if(j==0)//表示沒有找到輸入的信息</p><p> printf("職工名單中沒有住這的!\n");</p><p> else printf("查詢成功!請(qǐng)繼續(xù)操作!\n");</p><p>&
115、lt;b> }</b></p><p> else if(i==7){//輸入7,對(duì)電話號(hào)碼進(jìn)行查詢</p><p> p=head.next;</p><p> printf("請(qǐng)輸入電話:");</p><p> scanf("%ld",&x.tele_num);
116、</p><p><b> j=0;</b></p><p> for(p;p;p=p->next){</p><p> if(p->tele_num==x.tele_num){</p><p> ++j;//如果存在這個(gè)人,那么j自加</p><p> printf(&qu
117、ot;\n姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址、電話\n");</p><p> printf("%s %c %ld %ld %s %s %s %ld\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);&
118、lt;/p><p><b> }</b></p><p><b> }</b></p><p> if(j==0)//表示沒有找到輸入的信息</p><p> printf("職工名單中沒人用這個(gè)號(hào)碼!\n");</p><p> else prin
119、tf("查詢成功!請(qǐng)繼續(xù)操作!\n");</p><p><b> }</b></p><p> else if(i!=0 && i!=1 && i!=2 && i!=3 && i!=4 && i!=5 && i!=6 && i!=7
120、)//輸入任意不是上述數(shù)字的,那么久顯示輸入錯(cuò)誤</p><p> printf("輸入出錯(cuò)!請(qǐng)?jiān)俅屋斎?!\n");</p><p> printf("\n");</p><p> printf("\t*****************************************************
121、*************\n");</p><p> printf("\t* 職工信息查詢系統(tǒng) *\n");</p><p> printf("\t*
122、 *\n");</p><p> printf("\t* 0.退出查詢系統(tǒng),回到主菜單\t\t 1.對(duì)姓名進(jìn)行查詢\t*\n\t* 2.對(duì)出生年月進(jìn)行查詢 \t\t 3.對(duì)學(xué)歷進(jìn)行查詢\t*\n\t* 4.對(duì)工作年月進(jìn)行查詢 \t\t 5.對(duì)職務(wù)進(jìn)行查詢\t*\n\t* 6.對(duì)住址進(jìn)行查詢 \t\t
123、7.對(duì)電話進(jìn)行查詢\t*\n");</p><p> printf("\t******************************************************************\n");</p><p> //printf("0.退出查詢系統(tǒng),回到主菜單\n1.對(duì)姓名進(jìn)行查詢\n2.對(duì)出生年月進(jìn)行查詢\n3.對(duì)工作年
124、月進(jìn)行查詢\n4.對(duì)學(xué)歷進(jìn)行查詢\n5.對(duì)職務(wù)進(jìn)行查詢\n6.對(duì)住址進(jìn)行查詢\n7.對(duì)電話號(hào)碼進(jìn)行查詢\n");</p><p><b> }</b></p><p><b> }</b></p><p> void Listpaixu(SLNode *head)//職工信息的排序</p>&
125、lt;p><b> {</b></p><p> int i,n=0,m,flag=1;</p><p> SLNode *p,*q,*s;</p><p> if(head->next==NULL){//職工鏈表為空</p><p> printf("名單中無職工信息,無法排序!\n\n
126、");</p><p><b> return;</b></p><p><b> }</b></p><p> //printf("輸入出錯(cuò)!請(qǐng)?jiān)俅屋斎?!\n\n");</p><p> printf("\t\t~.~.~.~.~.~.~.~.~.
127、~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n");</p><p> printf("\t\t~.~ 職工信息排序操作 ~.~\n");</p><p> printf("\t\t~.~ ~.~\n&qu
128、ot;); </p><p> printf("\t\t~.~\t0.退出排序系統(tǒng),回到主菜單 ~.~\n\t\t~.~\t1.對(duì)性別進(jìn)行排序 ~.~\n\t\t~.~\t2.對(duì)出生年月進(jìn)行排序 ~.~\n\t
129、\t~.~\t3.對(duì)工作年月進(jìn)行排序 ~.~\n\t\t~.~\t4.對(duì)姓名進(jìn)行排序 ~.~\n");</p><p> printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n");</p><p><b> w
130、hile(1)</b></p><p><b> {</b></p><p> printf("請(qǐng)輸入您要選擇的操作:");</p><p> scanf("%d",&i);</p><p> if(i==0)//輸入0,退出排序系統(tǒng),回到主菜單<
131、/p><p><b> break;</b></p><p> else if(i==1){//輸入1,對(duì)性別進(jìn)行排序</p><p> n=0,m,flag=1;</p><p> for(p=head;NULL!=p;p=p->next)//統(tǒng)計(jì)職工人數(shù)</p><p><b&
132、gt; n++; </b></p><p> for(m=1;flag&&m<=n;m++)</p><p><b> { </b></p><p> flag=0; </p><p> for(q=head->next,p=head,s=p;q;s=p,p=
133、q,q=q->next)</p><p><b> {</b></p><p> if(p->sex>q->sex)//p為當(dāng)前節(jié)點(diǎn),p的性別>p的后繼節(jié)點(diǎn)的性別</p><p><b> {</b></p><p> if(head==p)//p為頭結(jié)點(diǎn)<
134、;/p><p><b> { </b></p><p> head->next=q->next; </p><p><b> head=q; </b></p><p> q->next=p;//交換節(jié)點(diǎn)信息</p><p> q=head->
135、next;</p><p><b> p=head;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> p->next=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---簡(jiǎn)單的職工管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——公司職工管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--車庫管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告——圖書管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)-家電庫存管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告圖書管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)-家電庫存管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告--商品貨架管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---學(xué)生學(xué)籍管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)-家電庫存管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計(jì)--學(xué)生管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--成績(jī)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論