員工管理系統(tǒng)C數(shù)據(jù)結(jié)構課程設計_第1頁
員工管理系統(tǒng)C數(shù)據(jù)結(jié)構課程設計_第2頁
員工管理系統(tǒng)C數(shù)據(jù)結(jié)構課程設計_第3頁
員工管理系統(tǒng)C數(shù)據(jù)結(jié)構課程設計_第4頁
員工管理系統(tǒng)C數(shù)據(jù)結(jié)構課程設計_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù) 據(jù) 結(jié) 構 課程 設 計 報 告圧級14計科1班姓名陳乾學號果題名稱員工管理系統(tǒng)完成日期一、目的(本次 課程設計 所涉及并要求掌握的知識點。)1、理解線性表的定義、順序存儲結(jié)構和鏈式存儲結(jié)構。2、理解線性表的邏輯結(jié)構特征。3、掌握線性表的兩種存儲方法(順序表和鏈式表),并體會兩者差異。4、掌握線性表的表示和實現(xiàn)。5、學會使用線性表解決一些相關的實際問題。二、使用環(huán)境Microsoft Visual C+ 6.0三、正文1 需求分析員工信息管理系統(tǒng)是企業(yè)管理中的一個重要內(nèi)容,隨著時代的進步,企業(yè)也逐漸變得龐大起來。如何管理 好企業(yè)內(nèi)部員工的信息,成為企業(yè)管理中的一個大問題。在這種情況下,開發(fā)

2、一個人力資源管理系統(tǒng)就顯得非 常必要?,F(xiàn)在,市場上可以選購的應用開發(fā)產(chǎn)品很多,流行的也有數(shù)十種。在目前市場上這些眾多的程序開發(fā)工具 中,有些強調(diào)程序語言的彈性與執(zhí)行效率,有些則偏重于可視化程序開發(fā)工具所帶來的便利性與效率的得高, 各有各的優(yōu)點和特色,也滿足了不同用戶的需求。然而,語言的彈性和工具的便利性是密不可分的,只強調(diào)程 序語言的彈性,卻沒有便利的工具作配合,會使一些即使非常簡單的界面處理動作,也會嚴重地浪費程序設計 師的寶貴時間;相反,如果只有便利的工具,卻沒有彈性的語言作支持,許多特殊化的處理動作必需要耗費數(shù) 倍的工夫來處理,使得原來所標榜的效率提高的優(yōu)點失去了作用。作為結(jié)合現(xiàn)實生活中

3、企業(yè)的相關情況,經(jīng)過實際的需求分析,采用功能強大的Microsoft Visual C+ 6.0開發(fā)工具而開發(fā)岀本系統(tǒng)。整個系統(tǒng)具有操作簡便、界面友好、靈活、實用、安全等特點,并具有如下功能:1、問題描述:對單位的員工進行管理,包括插入、刪除、查找、排序等功能。2、要求:員工對象包括姓名、性別、年齡、職位、工齡等信息。(1) 新增一名員工:將新增員工對象按姓名以字典方式員工管理文件中,基本信息中的編號是按照添加順 序自動增加的。(2) 刪除一名員工:從員工管理文件中刪除一名員工對象,分為根據(jù)編號刪除、根據(jù)姓名刪除。(3) 查詢:從員工管理文件中查詢符合某些條件(編號、姓名)的員工。(4) 修改

4、:根據(jù)編號檢索出對象,既可以對整個對象修改,也可對某個屬性修改。(5) 排序:按照年齡、工齡對所有的員工排序(降序),也可以回復排序以前的員工現(xiàn)實狀態(tài)。2 概要設計(一)數(shù)據(jù)類型定義:#i nclude #in clude #in clude #in elude #defi ne ALLMAX 100 /總共統(tǒng)計的職工的人數(shù)typedef struct Nodelong int age,work_time, num;char sex, nameALLMAX,jobALLMAX; struct Node *n ext;SLNode;typedef structlong int age,work_

5、time, num;char nameALLMAX,sex,jobALLMAX;DataType;(二)主程序流程圖(三)各程序模塊之間的層次(調(diào)用)圖3 詳細設計1、主菜單模塊:顯示員工管理系統(tǒng)的主菜單,供用戶選擇所需的功能,通過自己定義的 來實現(xiàn)。2、添加員工模塊:輸入員工的編號、姓名、年齡、職位、工齡以,通過自己定義的 函數(shù)來實現(xiàn)。void put() 函數(shù)void addMessage()3、查詢員工信息模塊:瀏覽所有員工的相關信息,通過自己定義的4、刪除員工模塊:刪除需要刪除的員工的所有信息,通過自己定義的void Listfi nd ()函數(shù)來實現(xiàn)。void ListDelete

6、()函數(shù)來實現(xiàn)。5、修改模塊:可以修改需要修改的員工的相關信息,通過自己定義的void ListModify() 函數(shù)來實現(xiàn)。6、員工信息排序模塊:可以按照規(guī)定要求對員工信息排序,通過自己定義的void sort()函數(shù)來實現(xiàn)。7、退出系統(tǒng)模塊。四、測試過程1、進入系統(tǒng)如圖所示:2、根據(jù)提示信息輸入 1、增加員工信息:3、根據(jù)提示信息輸入 3查詢員工信息,選擇第一種對姓名進行查詢做演示:4、根據(jù)提示信息修改員工信息:5、根據(jù)提示信息輸入 5,選擇按編號進行排序:6、根據(jù)提示信息,輸入 2刪除員工信息五、用戶使用說明進入員工管理系統(tǒng),首先看到的就是主菜單界面選擇1 :進入添加員工信息模塊,按照提

7、示語依次錄入員工對象信息。選擇2 :進入刪除員工信息模塊。選擇3:進入員工查詢模塊,在此模塊下,系統(tǒng)提示:按姓名查詢、按編號查詢,系統(tǒng)根據(jù)用戶選擇進行 相應的處理,退出查詢模塊時,系統(tǒng)進入主菜單模塊。選擇4:進入修改員工信息模塊,在該模塊下,系統(tǒng)提示:修改整條信息,修改部分信息,系統(tǒng)根據(jù)用戶 選擇,進行相應的功能處理。當用戶選擇退出修改模塊時,系統(tǒng)進入主菜單模塊。選擇5:進入排序模塊,在該模塊下,系統(tǒng)提示:按年齡排序、按工齡排序、回復原排序,系統(tǒng)根據(jù)用戶 的選擇,進行相應的處理。選擇0 :退出系統(tǒng)。六、總結(jié)本次課程設計是圍繞數(shù)據(jù)結(jié)構進行。根據(jù)問題描述可知,需要解決問題并不復雜,整個問題只需要實

8、現(xiàn)一 個員工管理系統(tǒng)功能,那就是在這個系統(tǒng)中實現(xiàn)對員工信息的插入、刪除、查詢、排序、修改。但是,為了實 現(xiàn)該功能,去嚅要優(yōu)秀的算法和數(shù)據(jù)結(jié)構以保證實現(xiàn)的時間和空間效率。把員工信息存儲在一個單鏈表中,利 用指針實現(xiàn)對員工信息的各項基本操作。雖然設計的程序完成了題目描述所需要實現(xiàn)的功能,但是仍然存在不如人意的地方,比如可以排序上面多 設計幾個算法,實現(xiàn)多角度排序等。經(jīng)過這次數(shù)據(jù)結(jié)構課程設計,我們不僅及時鞏固的了數(shù)據(jù)結(jié)構、算法、以及軟件工程的知識,并明白數(shù)據(jù) 結(jié)構和算法對于程序時間和空間性能的影響軟件開發(fā)流程和工具對于實現(xiàn)特定功能程序的重要意義。當我們面對一個實際問題,應該迅速根據(jù)問題性質(zhì)和特點抽象

9、成特定的數(shù)據(jù)結(jié)構,當然每個問題都有可能 能夠抽象成多種數(shù)據(jù)結(jié)構,每種數(shù)據(jù)結(jié)構適應于不同的算法。因此應該綜合考慮這樣的數(shù)據(jù)結(jié)構、算法以及它 們的空間和時間效率,然后從中選擇一個作為實現(xiàn)程序的基礎。七、附錄 程序源代碼#i nclude #in elude #in elude #i nclude #defi ne ALLMAX 100 /總共統(tǒng)計的職工的人數(shù)typedef struct Nodelong int age,work_time, num;char sex, nameALLMAX,jobALLMAX;struct Node *n ext;SLNode;typedef struct lon

10、g int age,work_time, num;char nameALLMAX,sex,jobALLMAX;DataType; void ListI ni tiate(SLNode *head)鏈表初始化if(*head=(SLNode *)malloc(sizeof(SLNode)=NULL) exit(1);動態(tài)分配存儲空間(*head)- next=NULL; SLNode *List In sert(SLNode *head,DataType x)職工信息的插入姓名并按照升序排列SLNode *p,*q,*s;p=head-n ext;if(q=(SLNode *)malloc(si

11、zeof(SLNode)=NULL) exit(1);動態(tài)分配存儲空間q-age=x.age; q-work_time=x.work_time;q-n um=x .n um; strcpy(q-n ame,x .n ame);q-sex=x.sex;strcpy(q_job,x.job);if(head- next=NULL)/如果只有鏈表的頭結(jié)點,沒有其他的結(jié)點,直接插入在頭結(jié)點后面head-n ext=q;head-n ext-n ext=NULL;else/ 鏈表非空for(;p;p=p-n ext)if(p- next匸NULL)if(strcmp(p-n ame,x. name) n

12、ext-name,x. name)0)/位于兩個結(jié)點之間s=p-n ext;p-n ext=q;q-n ext=s;break;else if(strcmp(p-n ame,x. name)=O)break; /如果姓名相同則不插入信息else if(strcmp(p-n ame,x. name)n ext=NULL)/鏈表非空,并且在排序中是最后一個p-n ext=q;q- next=NULL;break;if(strcmp(p- name,x. name)0)/位于鏈表頭結(jié)點之后的位置s=head-n ext;head-n ext=q;q-n ext=s;break;retur n hea

13、d;void ListDelete(SLNode *head)/職工信息的刪除SLNode *p,*s;char x20;s=head;p=head-n ext;if(head- next=NULL)鏈表為空,輸岀:名單中無職工信息,無須刪除!printf(無職工信息,無須刪除!n);return;pri ntf(“請輸入要刪除職工的姓名:n “);/輸入要刪除的人的姓名sea nf(%s,x);for(p;p;p=p- next)在鏈表中從頭到尾查找輸入的人的姓名if(strcmp(p- name,x)=O) /如果存在,則刪除,否則輸岀:名單中無職工信息,無須刪除! s-n ext=p-n

14、 ext;free(p);pri ntf(“刪除成功!請繼續(xù)操作! n);break;s=p;if(p=NULL)/鏈表本身為空printf(無職工信息,無須刪除!n);void ListModify(SLNode *head)職工信息的修改DataType x;SLNode *p;p=head-n ext;if(p=NULL)/鏈表本身為空printf(無職工信息,無須修改!n);return;pri ntf(“請輸入要修改的職工姓名:n);sca nf(%s,x. name);pri ntf(“依次寫入該職工的新信息:n);for(;p;p=p-n ext)if(strcmp(x. nam

15、e,p-n ame)=0)查找到了該職工的信息printf(姓名 n);sca nf(%s,x. name);getchar();prin tf(性別 n “);sca nf(%c, &x.sex);pri ntf(年齡 n);sca nf(%d,& x.age);prin tf(工齡 n);sca nf(%d,& x.work_time);prin tf(職務 n);sca nf(%s,x.job);prin tf(編號 n);sca nf(%d, &x.n um);prin tf(%s %c %d %d %s %dn,x. name,x.sex,x.age,x.work_time,x.jo

16、b,x. num); pri ntf(”修改成功!請繼續(xù)操作!n);break;if(p=NULL)如果鏈表為空prin tf(此職工不存在!n);void put(SLNode *head,FILE *fp)職工信息的保存SLNode *p;if(fp=fopen( 職工名單.txt,w)=NULL)printf(無法打開職工名單.txt!n);exit(0);for(p=head-n ext;p;p=p-n ext)fpri ntf(fp,%s %c %d %d %s %dn,p-n ame,p_sex,p_age,p_work_time,p_job,p-n um);if(fclose(f

17、p)printf(無法關閉職工名單.txt!n); exit(0);void Listfi nd(SLNode head)/職工信息的查找int i,j;SLNode *p;DataType x;if(head. next=NULL)鏈表為空printf(無職工信息,無法查詢!n);return;/返回主菜單prin tf(n);prin tf(t*n);prin tf(t*職工信息查詢操作*n);prin tf(t*n);prin tf(t*0.退出查詢系統(tǒng),回到主菜單*n);prin tf(t*1.對姓名進行查詢*n);prin tf(t*2.對編號進行查詢*n);prin tf(t*3.

18、對職務進行查詢*n);printf(t*n);while(1)prin tf(請輸入您要選擇的操作:);sca nf(%d,&i);if(i=O)輸入0,退岀查詢系統(tǒng),回到主菜單break;else if(i=1)輸入1,對姓名進行查詢p=head .n ext;pri ntf(“請輸入姓名:);sca nf(%s,x. name);j=0;for(p;p;p=p-n ext)if(strcmp(p-name,)=0)如果存在這個人,那么j自加+j;pri ntf(%s %c %d %d %s %dn,p-n ame,p-sex,p-age,p-work_time,p-job,p-

19、n um);if(j=0)/表示沒有找到輸入的信息printf(職工名單中不存在此人!n);else printf(”查詢成功!請繼續(xù)操作! n);else if(i=2)輸入2,對編號進行查詢p=head .n ext;prin tf(請輸入編號:“);sca nf(%d, &x. num);j=0;for(p;p;p=p-n ext)if(p- num=x. num)輸入的編號在鏈表中存在+j; 如果存在這個人,那么j自加pri ntf(%s %c %d %d %s %dn,p-n ame,p-sex,p-age,p-work_time,p-job,p-n um);if(j=0)/表示沒有

20、找到輸入的信息printf(職工名單中沒有這個編號的!n);else printf(”查詢成功!請繼續(xù)操作! n);else if(i=3)輸入3,對職務進行查詢p=head .n ext;pri ntf(“請輸入職務:);sca nf(%s,x.job);j=0;for(p;p;p=p-n ext)if(strcmp(p_job,x.job)=0)+j; 如果存在這個人,那么j自加pri ntf(%s %c %d %d %s %dn,p-n ame,p-sex,p-age,p-work_time,p-job,p-n um);if(j=O)表示沒有找到輸入的信息printf(“職工名單中沒有這

21、種職務的!n);else printf(”查詢成功!請繼續(xù)操作! n);輸入任意不是上述else if(i!=0 & i!=1 & i!=2 & i!=3 & i!=4 & i!=5 & i!=6 & i!=7) 數(shù)字的,那么久顯示輸入錯誤pri ntf(“輸入岀錯!請再次輸入! n);pri ntf(n);prin tf(t*職工信息查詢操作*n);prin tf(t*n);prin tf(t*0.退出查詢系統(tǒng),回到主菜單*n);prin tf(t*1.對姓名進行查詢*n);prin tf(t*2.對編號進行查詢*n);prin tf(t*3.對職務進行查詢*n);prin tf(t*n);

22、pri ntf(t*n);/pri ntf(0.退出查詢系統(tǒng),回到主菜單n1.對姓名進行查詢n 2.對編號進行查詢查詢n3.對對職務進行查詢n);職工信息的顯示void prin t(SLNode *head)輸出所有職工的信息for(SLNode *p=head-n ext;p;p=p-n ext)/prin tf(%s %c %d %d %s %dn,p-n ame,p-sex,p-age,p-work_time,p-job,p-n um);void Listpaixu(SLNode *head)職工信息的排序int i,n=0 ,m,flag=1;SLNode *p,*q,*s;if(h

23、ead- next=NULL)職工鏈表為空printf(名單中無職工信息,無法排序!nn);return;prin tf(tt*職工信息排序操作* n);prin tf(tt*n);prin tf(tt*0.退出排序系統(tǒng),回到主菜單*n)prin tf(tt*1.對編號進行排序*n);prin tf(tt*2.對年齡進行排序*n);prin tf(tt*3.顯示全部職工信息*n);prin tf(tt*n);prin tf(tt*n);while(1)printf(”請輸入您要選擇的操作:);sca nf(%d,&i);if(i=0) 輸入0,退岀排序系統(tǒng),回到主菜單break;else if

24、(i=1)輸入1,對編號進行排序n=0 ,m,flag=1;for(p=head;NULL!=p;p=p- next)/統(tǒng)計職工人數(shù)n+;for(m=1;flag&mn ext,p=head,s=p;q;s=p,p=q,q=q_n ext)if(p-numq-num)/p為當前節(jié)點,p的編號p的后繼節(jié)點的編號if(head=p)/p 為頭結(jié)點head-n ext=q-n ext;head=q;q- next=p;交換節(jié)點信息q=head-n ext;p=head;elsep_n ext=q _n ext;q_n ext=p;s_n ext=q;p=q;q=p-n ext;flag=1;prin

25、tf(”排好序的信息如下:n);prin t(head);/輸岀所有節(jié)點的信息return;else if(i=2)/ 輸入2,對年齡進行排序n=0 ,m,flag=1;for(p=head;NULL!=p;p=p- next)/統(tǒng)計職工人數(shù)n+;for(m=1;flag&mn ext,p=head,s=p;q;s=p,p=q,q=q_n ext)if(p-ageq-age)/對年齡進行排序if(head=p)head-n ext=q-n ext; head=q;q_n ext=p; q=head-n ext; p=head;elsep_n ext=q _n ext;q_n ext=p;s_n

26、 ext=q;p=q;q=p-n ext; flag=1;pri ntf(”排好序的信息如下:n);pri nt(head);return;else if(i=3) prin t(head);else if(i!=0&i!=1 &i 匸2&i !=3)printf(輸入岀錯!請再次輸入!nn);*n);職工信息排序操作prin tf(tt * n);prin tf(tt*prin tf(tt*prin tf(tt*0.prin tf(tt*prin tf(tt*prin tf(tt*1.2.3.*n);退出排序系統(tǒng),回到主菜單 對編號進行排序 對年齡進行排序顯示全部職工信息*n);*n);*n

27、);*n);prin tf(tt*n);/pri ntf(0.退岀排序系統(tǒng),回到主菜單n1.對編號進行排序n2.對年齡進行排序n3.顯示n);void main()DataType x;SLNode *head;int i,n;FILE *fp;List In itiate(&head);初始化鏈表pri ntf(n);pri ntf(“*n);pri ntf(“歡迎進入南京曉莊學院員工管理系統(tǒng)n);pri ntf(n);prin tf(n)prin tf(* 1、增加員工信息2、刪除員工信息*n);prin tf(* 3、查詢員工信息4、修改員工信息*n);printf(“* 5、員工信息排序0、退岀系統(tǒng)*n);pri ntf(“*n);printf(“ n);while sca nf(%d,&i);printf(請輸入您要選擇的操作:);if(i=O)輸入o,結(jié)束系統(tǒng)pri ntf(tt您已經(jīng)選擇退岀職工管理系統(tǒng)n);break;else if(i=1)輸入1,新增一名職工printf(姓名 n);sca nf(%s,x. name);getchar();prin tf(性別 n);sca nf(%c, &x.sex); prin tf(年齡 n);sca nf(%d,

溫馨提示

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

評論

0/150

提交評論