數(shù)據(jù)結(jié)構(gòu)簡單的職工管理系統(tǒng)完整版_第1頁
數(shù)據(jù)結(jié)構(gòu)簡單的職工管理系統(tǒng)完整版_第2頁
數(shù)據(jù)結(jié)構(gòu)簡單的職工管理系統(tǒng)完整版_第3頁
數(shù)據(jù)結(jié)構(gòu)簡單的職工管理系統(tǒng)完整版_第4頁
數(shù)據(jù)結(jié)構(gòu)簡單的職工管理系統(tǒng)完整版_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、i湖南涉外經(jīng)濟(jì)學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告題目:簡單的職工管理系統(tǒng)院系名稱:計算機(jī)學(xué)院專業(yè)名稱:計算機(jī)科學(xué)與技術(shù)班級:計科201001班學(xué)生姓名:劉興斌學(xué)號:30指導(dǎo)教師:張建明設(shè)計起止時間:2011年11月20日2011年12月30日完成于2011年12月29日星期四目錄TOC o 1-5 h z HYPERLINK l bookmark4 第一章序1 HYPERLINK l bookmark6 第二章系統(tǒng)總體功能的設(shè)計和分析21、問題描述22、詳細(xì)要求23、功能分析31、具體要求錯誤!未定義書簽。2、系統(tǒng)流程分析33、系統(tǒng)功能結(jié)構(gòu)44、模塊函數(shù)構(gòu)造4 HYPERLINK l bookmark8

2、 第三章詳細(xì)設(shè)計分析61、抽象數(shù)據(jù)類型定義62、主函數(shù)設(shè)計63、查找算法設(shè)計74、排序算法設(shè)計8第四章源程序代碼11第五章系統(tǒng)實(shí)現(xiàn)29第六章課程設(shè)計總結(jié)31 第一章序電子信息時代由如洪水一樣的兇猛,能在現(xiàn)實(shí)社會應(yīng)用軟件給我們的生活和工作帶來方便和實(shí)用性就是軟件存在的最大的價值。數(shù)據(jù)結(jié)構(gòu)所能解決的就是這些復(fù)雜的問題簡單化。數(shù)據(jù)結(jié)構(gòu)是計算機(jī)專業(yè)學(xué)生學(xué)習(xí)的一門基礎(chǔ)課程,但十分的重要。本課程系統(tǒng)地介紹了軟件設(shè)計中常用的數(shù)據(jù)結(jié)構(gòu)以及相應(yīng)的存儲結(jié)構(gòu)和實(shí)現(xiàn)算法,介紹了常用的多種查找和排序技術(shù)。本課程將為整個專業(yè)的學(xué)習(xí)以及軟件設(shè)計水平的提高打下良好的基礎(chǔ)。為了學(xué)好數(shù)據(jù)結(jié)構(gòu),必須掌握編寫一些在特定數(shù)據(jù)結(jié)構(gòu)上的算

3、法,并通過上機(jī)調(diào)試,更好地掌握各種數(shù)據(jù)結(jié)構(gòu)及其特點(diǎn)。經(jīng)過本次課程設(shè)計,我們對于數(shù)據(jù)結(jié)構(gòu)基本理論和存儲結(jié)構(gòu)及算法設(shè)計將有更加深入的理解,并提高我們在實(shí)際設(shè)計操作中系統(tǒng)分析、結(jié)構(gòu)確定、算法選擇、數(shù)學(xué)建模和信息加工的能力,提高我們的C/C+語言程序設(shè)計能力,以及培養(yǎng)學(xué)我們編寫程序設(shè)計文檔的能力,為將來在實(shí)戰(zhàn)工作中打下良好的基礎(chǔ)。在經(jīng)濟(jì)發(fā)達(dá)的今天對于職工簡單的管理都是有很大程度上的要求,一個工司能否較好較快的運(yùn)行,與職工管理的好壞分不開關(guān)系,通過該系統(tǒng),將一系列的問題系統(tǒng)化,能夠更好的管理職工。簡化管理,使管理更方便,準(zhǔn)確性、直觀性和實(shí)用性更強(qiáng)。本著以鍛煉自己的能力為目的,通過設(shè)計與制作進(jìn)一步學(xué)習(xí)和掌

4、握簡單的職工管理系統(tǒng)的原理和使用方法。雖然在一定程度上較為簡單,但也能體現(xiàn)在出在人員管理上的方便快捷,也體現(xiàn)一個領(lǐng)導(dǎo)的管理水平是不是充滿藝術(shù)。第二章系統(tǒng)總體功能的設(shè)計和分析、問題描述根據(jù)課程設(shè)計題目的要求,由于職工信息是一定要存放在指定的文件中,所以應(yīng)提供文件的輸入、輸出等操作;在程序中需要瀏覽職工的信息,應(yīng)提供顯示、查找、刪除、插入、排序等一系列的操作;另外還應(yīng)提供鍵盤式選擇菜單實(shí)現(xiàn)功能選擇對功能要求的實(shí)現(xiàn)是解決管理系統(tǒng)的關(guān)鍵問題。一個管理系統(tǒng)能將其劃分為插入、刪除、查找、排序等功能。對不同的功能模塊進(jìn)行代碼的編寫實(shí)現(xiàn),最后通過一定的方式的進(jìn)行連接測試和最終的調(diào)用,從而完成對各部分的操作。、

5、詳細(xì)要求要求職工對象包括姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址、電話等信息。(1)新增一名職工:將新增職工對象按姓名以字典方式職工管理文件中。(2)刪除一名職工:從職工管理文件中刪除一名職工對象。(3)查詢:從職工管理文件中查詢符合某些條件的職工。(4)修改:檢索某個職工對象,對其某些屬性進(jìn)行修改。(5)排序:按某種需要對職工對象文件進(jìn)行排序。功能分析1、實(shí)現(xiàn)提示職工對象數(shù)不必很多,便于一次讀入內(nèi)存,所有操作不經(jīng)過內(nèi)外存交換。(1)由鍵盤輸入職工對象,以文件方式保存。程序執(zhí)行時先將文件讀入內(nèi)存(2)對職工對象中的姓名按字典順序進(jìn)行排序。(3)對排序后的職工對象進(jìn)行增、刪、查詢、修改、

6、排序等操作。2、系統(tǒng)流程分析(1)輸入功能的實(shí)現(xiàn):要想實(shí)現(xiàn)職工管理系統(tǒng)的輸入,必須要建立一個職工信息系統(tǒng)的抽象數(shù)據(jù)類型,其中職工信息以鏈表的存儲方式實(shí)現(xiàn)。由鍵盤輸入職工對象,以文件方式保存。程序執(zhí)行時先將文件讀入內(nèi)存。(2)系統(tǒng)處理功能的實(shí)現(xiàn):系統(tǒng)管理員根據(jù)公司的人員流動情況,在提示信息的提示下,選擇相應(yīng)的服務(wù)進(jìn)行操作。如對職工對象中的姓名按字典順序進(jìn)行排序;對排序后的職工對象進(jìn)行增、刪、查詢、修改、排序等操作。(3)輸出的實(shí)現(xiàn):根據(jù)選擇的操作,輸出與之對應(yīng)的信息。綜上可以繪制出職工管理功能的系統(tǒng)流程圖,如圖1所示總控模塊測試模塊輸出模塊圖1系統(tǒng)流程圖3、系統(tǒng)功能結(jié)構(gòu)根據(jù)職工管理系統(tǒng)問題的分析

7、和設(shè)計要求,可以得到該職工管理系統(tǒng)可以分為五個模塊:職工信息添加模塊、職工信息修改模塊、職工信息刪除模塊、職工信息查詢模塊、職工信息排序模塊。其系統(tǒng)功能結(jié)構(gòu)如圖2所示。對姓名進(jìn)行查詢對出生年月進(jìn)行查誨對學(xué)歷進(jìn)行查詢職工管理系統(tǒng)對工作年月進(jìn)行查a-對職務(wù)進(jìn)行查詢對住址進(jìn)行查詢對電話進(jìn)行查詢對性別進(jìn)行排序*對工作年月進(jìn)行排星對出生年月進(jìn)行排崖對姓名進(jìn)行排序圖2系統(tǒng)功能結(jié)構(gòu)圖4、模塊函數(shù)構(gòu)造根據(jù)系統(tǒng)功能結(jié)構(gòu)圖的描述,可以構(gòu)造出該系統(tǒng)的抽象數(shù)據(jù)類型和相對應(yīng)的函數(shù),其方法名和功能如表1所示。表1函數(shù)功能表模塊函數(shù)或數(shù)據(jù)結(jié)構(gòu)功能typedefstructNode定義鏈表結(jié)點(diǎn)鏈表數(shù)據(jù)類型typedefstr

8、uctDatatype定義職工信息ListInitiate(SLNode*head)初始化鏈表SLNode*ListInsert(SLNode*head,DataTypex)插入職工信息系統(tǒng)處理模塊ListDelete(SLNode*head)刪除職工信息ListModify(SLNode*head)修改職工信息保存職工信息put(SLNode*head,FILE*fp)Listfind(SLNodehead)查詢職工信息Listpaixu(SLNode*head)職工信息排序輸出模塊print(SLNode*head)顯示職工信息第三章詳細(xì)設(shè)計分析1、抽象數(shù)據(jù)類型定義1)定義表結(jié)點(diǎn)(type

9、defstructNode)typedefstructNodelongintborn_time,work_time,tele_num;charsex,nameALLMAX,degreeALLMAX,jobALLMAX,addressALLMAX;structNode*next;SLNode;(2)定義職工信息(typedefstructDatatype)typedefstructlongintborn_time,work_time,tele_num;charnameALLMAX,sex,degreeALLMAX,jobALLMAX,addressALLMAX;DataType;(3)初始化鏈表

10、(ListInitiate(SLNode*head)voidListInitiate(SLNode*head)鏈表初始化if(*head=(SLNode*)malloc(sizeof(SLNode)=NULL)exit(l);/動態(tài)分配存儲空間(*head)-next=NULL;2、主函數(shù)設(shè)計(1)根據(jù)詳細(xì)設(shè)計要求,可以得到主函數(shù)代碼及其對應(yīng)的程序流程圖:在主函數(shù)中,實(shí)現(xiàn)了友好的界面設(shè)計。系統(tǒng)需要輸入職工的基本信息:姓名、性別、出生年月、工作年月、學(xué)歷、職務(wù)、住址、電話等。這個系統(tǒng)還利用鍵盤輸入提供的主菜單服務(wù),在主菜單中,有七種操作的調(diào)用:新增職工信息:SLNode*ListInsert(S

11、LNode*head,DataTypex)查詢職工信息:Listfind(SLNodehead)刪除職工信息:ListDelete(SLNode*head)修改職工信息:ListModify(SLNode*head)職工信息排序:Listpaixu(SLNode*head)保存職工信息:put(SLNode*head,FILE*fp)顯示職工信息:print(SLNode*head)2)主函數(shù)程序流程圖如圖3所示:3、查找算法設(shè)計在查詢算法中,職工管理系統(tǒng)提供了七種查詢操作,實(shí)現(xiàn)了系統(tǒng)的人性化查詢操作。這些查詢操作分別為:對姓名進(jìn)行查詢,對性別進(jìn)行查詢,對出生年月進(jìn)行查詢,對工作年月進(jìn)行查詢,

12、對學(xué)歷進(jìn)行查詢,對職位進(jìn)行查詢,對住址進(jìn)行查詢,對電話進(jìn)行查詢等一些列操作。查找算法中,利用鏈表的指針的移動掃描整個職工信息表,利用strcmp()函數(shù)判斷字符串是否匹配。查詢算法程序流程圖如圖4所示:4、排序算法設(shè)計在排序算法中,職工管理系統(tǒng)提供了四種查詢操作,實(shí)現(xiàn)了系統(tǒng)的基本排序操作。這些排序操作分別為:對姓名進(jìn)行排序,對性別進(jìn)行排序,對出生年月進(jìn)行排序,對工作年月進(jìn)行排序,等一些列操作。排序算法中,利用鏈表的指針的移動掃描整個職工信息表,利用strcmp()函數(shù)判斷字符串是否匹配。排序的核心代碼:for(q=head-next,p=head,s=p;q;s=p,p=q,q=q-next)

13、if(p-born_timeq-born_time)對出生年月進(jìn)行排序if(head=p)head-next=q-next;head=q;q-next=p;q=head-next;p=head;elsep-next=q-next;q-next=p;s-next=q;p=q;q=p-next;flag=1;排序算法流程圖如圖5所示:第四章源程序代碼#include#include#include#include#include#include#include#includeusingnamespacestd;structEmployee/聲明職工的結(jié)構(gòu)作為鏈表節(jié)點(diǎn)/數(shù)據(jù)域stringm_Code

14、;stringm_Name;unsignedshortintm_Year;stringm_Sex;stringm_Post;stringm_Department;unsignedintm_Wage;/鏈表節(jié)點(diǎn)的指針域structEmployee*Next;/個人習(xí)慣:取別名typedefstructEmployeeNode;typedefNode*Link;/函數(shù)聲明LinkCreate(LinkHead);voidRelease(LinkHead);LinkAdd(LinkHead);boolSearch(LinkHead);LinkSearch_Unique(LinkHead);voidD

15、isplay_List(LinkHead);voidDisplay_Node(LinkpNode);LinkModify(LinkHead);LinkDel(LinkHead);voidSave_ByFile(LinkHead,fstream&ofile);LinkSort(LinkHead);/函數(shù)實(shí)現(xiàn)LinkCreate(LinkHead)/創(chuàng)建一個帶頭節(jié)點(diǎn)的空鏈表。Head=(Link)newNode;if(!Head)coutvv分配內(nèi)存失敗!vvendl;returnNULL;Head-m_Code=;Head-m_Name=;Head-m_Year=0;Head-m_Sex=;He

16、ad-m_Post=;Head-m_Department=;Head-m_Wage=0;Head-Next=NULL;returnHead;voidRelease(LinkHead)/釋放鏈表。Linkptr;聲明一個操作用的指針。while(Head!=NULL)ptr=Head;Head=Head-Next;deleteptr;釋放節(jié)點(diǎn)資源。LinkAdd(LinkHead)/前插法添加數(shù)據(jù)。LinkpNew;/聲明一個新節(jié)點(diǎn)。charagain;stringcode,name,sex,post,department;unsignedshortintyear;unsignedintwage

17、;dopNew=(Link)newNode;/數(shù)據(jù)域。coutvv請輸入職工代碼:;cincode;coutvvendlvv請輸入職工姓名:;cinname;coutvvendlvv請輸入職工出生年份:;cinyear;while(cin.fail()coutvv請輸入正確的年份格式。vvendl;cin.clear();fflush(stdin);cinyear;coutvvendlvv請輸入職工性別:;cinsex;coutvvendlvv請輸入職工職稱:;cinpost;coutvvendlvv請輸入職工部門:;cindepartment;coutvvendlvv請輸入職工工資:;cin

18、wage;while(cin.fail()coutvv請輸入正確的工資數(shù)據(jù)。vvendl;cin.clear();fflush(stdin);cinwage;coutm_Code=code;pNew-m_Name=name;pNew-m_Year=year;pNew-m_Sex=sex;pNew-m_Post=post;pNew-m_Department=department;pNew-m_Wage=wage;/指針域。pNew-Next=Head-Next;Head-Next=pNew;coutvv數(shù)據(jù)添加成功!是否繼續(xù)添加?(Y/N)vvendl;cinagain;while(again=

19、Y|again=y);returnHead;boolSearch(LinkHead)/查詢同時滿足“姓名”和“部門”的職工信息。Linkptr;stringdepartment;stringname;ptr=Head-Next;coutvv請輸入部門:;cindepartment;coutendlname;coutendl查詢結(jié)果endl;coutendl職工代碼、姓名、出生年份、性別、職稱、部門、工資m_Name=name)&(ptr-m_Department=department)Display_Node(ptr);/打印滿足條件的節(jié)點(diǎn)。returntrue;ptr=ptr-Next;查詢

20、下一節(jié)點(diǎn)。coutvv無此職工的信息。vvendl;returnfalse;LinkSearch_Unique_Front(LinkHead)/查詢滿足“職工代碼“的職工信息(職工代碼必需唯一)。Linkptr;stringcode;ptr=Head;coutvv請輸入職工代碼:;cincode;coutvvendlvv查詢結(jié)果vvendl;coutvvendlvv職工代碼、姓名、出生年份、性別、職稱、部門、工資vvendl;while(ptr-Next)if(ptr-Next-m_Code=code)Display_Node(ptr);打印滿足條件的節(jié)點(diǎn)。returnptr;注意,是返回的查

21、詢到的節(jié)點(diǎn)的直接前趨節(jié)點(diǎn)。ptr-Next=ptr-Next-Next;查詢下一節(jié)點(diǎn)。returnptr;voidDisplay_List(LinkHead)Linkptr;ptr=Head-Next;cout=所有職工信息=Next;voidDisplay_Node(LinkpNode)/在標(biāo)準(zhǔn)輸出設(shè)備上輸出。coutsetw(10)leftm_Codesetw(10)leftm_Namesetw(10)leftm_Yearsetw(10)leftm_Sexsetw(10)leftm_Postsetw(10)leftm_Departmentvvsetw(10)vvleftvvpNode-m_

22、Wagevvendl;/setw(10)表示占10個字符位置。LinkModify(LinkHead)/修改單一個節(jié)點(diǎn)。Linkptr;ptr=Search_Unique_Front(Head);stringcode,name,sex,post,department;unsignedshortintyear;unsignedintwage;if(ptr-Next)cout你現(xiàn)在可以修改此職工的信息了code;coutvvendlvv請輸入職工姓名:;cinname;coutvvendlvv請輸入職工出生年份:;cinyear;while(cin.fail()coutvv請輸入正確的年份格式。v

23、vendl;cin.clear();fflush(stdin);cinyear;coutvvendlvv請輸入職工性別:;cinsex;coutvvendlvv請輸入職工職稱:;cinpost;coutvvendlvv請輸入職工部門:;cindepartment;coutvvendlvv請輸入職工工資:;cinwage;while(cin.fail()coutvv請輸入正確的工資數(shù)據(jù)。vvendl;cin.clear();fflush(stdin);cinwage;coutvvendl;ptr-Next-m_Code=code;因ptr是前趨節(jié)點(diǎn),所以要用ptr-Next;ptr-Next-m

24、_Name=name;ptr-Next-m_Year=year;ptr-Next-m_Sex=sex;ptr-Next-m_Post=post;ptr-Next-m_Department=department;ptr-Next-m_Wage=wage;coutvv沒找到此職工的記錄,無法修改。vvendl;returnHead;LinkDel(LinkHead)Linkptr;Linkptr_front;ptr_front=Search_Unique_Front(Head);ptr=ptr_front-Next;if(ptr)ptr_front-Next=ptr-Next;deleteptr;

25、刪除此節(jié)點(diǎn)。coutvv沒找到此職工的記錄,無法刪除。vvendl;returnHead;voidSave_ByFile(LinkHead,fstream&ofile)LinkpNode;pNode=Head-Next;ofileclear();清除文件結(jié)束狀態(tài)。while(pNode)ofilesetw(10)leftm_Codesetw(10)leftm_Namesetw(10)leftm_Yearsetw(10)leftm_Sexsetw(10)leftm_Postsetw(10)leftm_Departmentvvsetw(10)vvleftvvpNode-m_Wagevvendl;/

26、setw(10)表示占10個字符位置。pNode=pNode-Next;coutvv數(shù)據(jù)文件保存成功!vvendl;LinkSort(LinkHead)/我創(chuàng)建的是帶頭節(jié)點(diǎn)的鏈表。用直接插入法。if(Head-Next=NULL)|(Head-Next-Next=NULL)/此步條件判斷非常有價值。coutvv數(shù)據(jù)節(jié)點(diǎn)數(shù)少于2個,不用排序!vvendl;returnHead;/第二步;Linkptr;Linkptr_F;Linkptr_N;ptr=Head-Next-Next;ptr_F=Head;Head-Next-Next=NULL;到此,分成了兩個鏈表。/第三步。while(ptr)pt

27、r_N=ptr-Next;ptr_F=Head;/ptr_F的歸位。while(ptr_F-Next)if(ptr-m_Wageptr_F-Next-m_Wage)ptr-Next=ptr_F-Next;ptr_F-Next=ptr;break;/ifelseptr_F=ptr_F-Next;/while(ptr_F-Next)if(ptr_F-Next=NULL)ptr-Next=ptr_F-Next;ptr_F-Next=ptr;表示插到有序鏈表的最后面了。ptr=ptr_N;歸位,準(zhǔn)備下一次排序。/while(ptr)coutvv從高到低,排序成功!vvendl;returnHead;i

28、ntmain()LinkHead=0;Head=Create(Head);fstreamiofile;iofile.open(d:iofile.txt,ios_base:in|ios_base:out|ios_base:app);文件以三種方式打開。if(!iofile)coutvv打開文件失敗!vvendl;return-1;intmenu;while(1)1.11vtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvttf.11/11p*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j

29、*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*CW/1I.coutvv*歡迎進(jìn)入職工管理系統(tǒng)*vtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvttf.11/11p*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*j*CW/1I.coutvvendl;coutvvvvendl;coutvvf主菜單Jvvendl;coutvvvvendl;coutvvvvendl;coutvvendl;coutvv1.注冊職工2.修改信息vvendl;coutvv3.刪除信息4.信息查詢vvendl;coutvv5.保存文件6.工資排行vvendl;coutvv7.信息顯示0.退出系統(tǒng)vvendl;coutvvvvendl;coutvvvvendl;coutvvendl;coutmenu;while(cin.fail()coutv

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論