數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-員工信息管理系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-員工信息管理系統(tǒng)_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-員工信息管理系統(tǒng)_第3頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、成績12信計 2013-2014 (一)數(shù)據(jù)結(jié)構(gòu)課 程設(shè)計設(shè)計題目員工信息管理系統(tǒng)設(shè)計時間2014.1.62014.1.10學生姓名葛考學生學號20120402127所在班級12精算指導教師劉風華徐州工程學院數(shù)學與物理科學學院題目員工信息管理系統(tǒng)一、需求分析員工信息管理系統(tǒng)設(shè)計,具體功能如下:1、系統(tǒng)以菜單方式工作,應(yīng)為用戶提供清晰的使用提示,依據(jù)用戶的選擇來進行 各種處理,并且在此過程中能夠盡可能的兼容用戶使用過程中的輸入異常情 況。2、 員工信息錄入系統(tǒng)(員工信息用文件保存),注意員工按員工編號進行區(qū)分,即每個員工的員工編號都是唯一的,不允許出現(xiàn)兩個員工或員工編號相同的情況。3、可對員工信

2、息進行查詢, 具體分為:按姓名查詢、按員工號查詢、按生日查詢;4、可對員工信息進行刪除;5、可對員工信息進行修改,但應(yīng)注意員工號不能修改,修改應(yīng)逐個進行,一個員 工記錄的更改不應(yīng)影響其他的員工記錄;6、 可對全部的員工信息進行顯示v (員工信息瀏覽),注意員工信息的顯示規(guī)范;員工信息應(yīng)包括姓名、員工編號、性別、年齡、生日、學歷、職務(wù)、聯(lián)系電話、住址。二、概要設(shè)計2.1、抽象數(shù)據(jù)類型ADT List數(shù)據(jù)對象:D=ai|ai ElemSfet,2, n;n>=0,數(shù)據(jù)關(guān)系:R1=<ai-1 ,ai>|ai-1 , ai Dj=1,2, ,基本操作:Init List (&

3、L);操作結(jié)果:構(gòu)造一個空的線性表L 0DestroyList (&L );初始條件:線性表L存在。操作結(jié)果:銷毀線性表LoLocateElem(L, I,& e);初始條件:線性表 L存在,1<i<Listlength(L)。操作結(jié)果:用e返回線性表L中第i個數(shù)據(jù)元素的值ClearList ( &L);初始條件:線性表L存在。操作結(jié)果:將線性表L重置為空表。ADT Graph2.2、程序流程系統(tǒng)的執(zhí)行從菜單的選擇幵始,依據(jù)用戶的選擇進行相應(yīng)的處理,直到用戶 選擇退出系統(tǒng)為止。其間應(yīng)對用戶的選擇做出判斷與異常處理。系統(tǒng)的流程如圖1所示:開制1 1 /11ri

4、StL.XXXXftAQE.i拿atV JX rTTL丄5.X頁工X9i£XX出1di51L1y y y圖i員工信息管理系統(tǒng)流程圖三、詳細設(shè)計3.1函數(shù)構(gòu)成(1 )主函數(shù):void main ();(2 )文件讀入函數(shù): void read data ();(3 )文件寫入函數(shù): void write data ();(4)菜單函數(shù) 函數(shù)原型: void Menu () 功能:此函數(shù)的功能為依據(jù)用戶選擇的功能來進行相應(yīng)的處理,直到用戶選 擇退出系統(tǒng)為止,包括員工信息的查詢、更新、列表與退出管理;(5)信息查詢函數(shù) 函數(shù)原型: void chaxun () 功能:該函數(shù)的功能是按照用戶

5、的選擇進行不同方式的查找,本程序?qū)崿F(xiàn)了 按三種方式進行查找,包括按編號、姓名、生日查找;(6)信息更新函數(shù) 函數(shù)原型: void gengxin () 功能:此函數(shù)的功能為使用戶修改記錄。首先判斷用戶要修改的記錄是否存 在,因為只有員工編號是唯一的,所以根據(jù)員工編號進行查找。若存在則用用戶 輸入的新的信息替換原信息;若不存在則函數(shù)結(jié)束。在此函數(shù)中要注意的是文件的打幵方式應(yīng)為”rb+因為在這個函數(shù)中不僅要讀文件,還要向文件中寫入數(shù)據(jù),所以要用讀寫的方式打開二進制文件;(7)信息一覽函數(shù) 函數(shù)原型: void liebiao () 功能:此函數(shù)的功能為從文件中依次取出每條記錄并將其顯示出來。因為只

6、需讀文件不需要向文件中寫入數(shù)據(jù),所以文件的打開方式是只讀。3.2 模塊程序清單(詳細程序見附錄)1、員工信息的結(jié)構(gòu)體:Typedef struct emp long int num;/ 編號char name20;/ 姓名int age;/ 年齡char sex4;/ 性別char birthday10;/ 生日char tel15; / 電話 char edu8;/ 學歷char pos20;/ 職務(wù)char add30;/ 住址struct emp *next;2、菜單函數(shù):void menu(void) char i,lj100; int flog;time_t T;struct tm

7、* timenow;time ( &T );timenow = localtime ( &T ); flog=0;while(1)system("cls"); printf("nnnnn");printf("iprintf("員工信息管理系統(tǒng) 一n)1|n");printf("|n");printf("|n");printf("|1. 員工信息查詢n");printf("|n");printf("|n");pr

8、intf("|n");printf(" 丨2.員工信息更新n");printf("|n");printf("|n");printf("|n");printf(" |3. 員工信息列表n");printf("|n");printf("|n");printf("|n");printf(" |0. 退出管理系統(tǒng)n");printf("|n");printf("|n"

9、;);printf("|n");printf("1n);1printf("%s", asctime (timenow) );printf(" 請輸入您的選擇(數(shù)字 0-3 ):n");scanf("%c",&i);gets(lj); if(lj0)i='a'switch(i) case '1':chaxun();break;case '2':gengxin();break;case '3':liebiao();break;case &

10、#39;0':flog=1;break; default:printf(" 輸入有誤,請按回車鍵重新輸入 n");gets(lj);break;if(flog)break;3、信息查詢函數(shù):void chaxun()char i,lj100; int flog; time_t T; struct tm * timenow;time ( &T );timenow = localtime ( &T ); flog=0;while(1)system("cls"); printf("nnnnn");printf(&qu

11、ot;|員工信息查詢系統(tǒng)1printf("|In");printf("|n");printf("|n");printf("|1. 按照編號查詢|n");printf("|n");printf("|n");printf("|n");printf("|2. 按照姓名查詢|n");printf("|In");printf("|In");printf("|n");printf(&quo

12、t;|3. 按照生日查詢|n");printf("|n");printf("|n");printf("|0. 退出管理系統(tǒng)|n");printf("|n");printf("|n");printf("|n");printf("1ni1printf("%s", asctime (timenow) );printf(" 請輸入您的選擇(數(shù)字 0-3 ):n");scanf("%c",&i);g

13、ets(lj); if(lj0)i='a'switch(i)case '1':bianhao();break; case '2':xingming();break;case '3':shengri();break; case '0':flog=1;break; default:printf(" 輸入有誤,請重新輸入 n");gets(lj);break;if(flog)break;4、信息更新函數(shù):void gengxin()char i,lj100;time_t T;int flog;stru

14、ct tm * timenow;time ( &T );timenow = localtime ( &T ); flog=0;while(1)system("cls");printf("nnnnn");printf("i員工信息更新系統(tǒng)一-n)i1printf("|n");printf("|n");printf("|n");printf("|1.員工信息添加|n");printf("|n");printf("|n&quo

15、t;);printf("|n");printf("|2.員工信息刪除|n");printf("|n");printf("|n");printf("|n");printf("|3.員工信息修改|n");printf("|n");printf("|n");printf("|n");printf("|0.退出管理系統(tǒng)|n");printf("|n");printf("|n&

16、quot;);n");prin tf("|printf("1昨printf(" %s",asctime (timenow) );printf(" 請輸入您的選擇(數(shù)字 0-3 ):n"); scanf("%c",&i);gets(lj);if(lj0)i='a'switch(i) case '1':tianjia();break;case '2':shanchu();break;case '3':xiugai();break;case

17、 '0':flog=1;break;default:printf(" 輸入有誤,請重新輸入 n");gets(lj);break;if(flog)break;5、信息一覽函數(shù):void liebiao()char lj100; struct emp *p; p=head; system("cls");if(head=NULL)printf(" 查找不到信息 n");menu();printf("員工信息列表n"tprintf("編號tt姓名tt年齡tt性別tt出生年月tt電話tt學歷tt

18、職務(wù)tt住址 :n");if(head!=NULL) while(p!=NULL) display(p);p=p->next; printf("n 按回車鍵返回主菜單 n");gets(lj);四、調(diào)試分析4.1 、時間復(fù)雜度分析在源程序的各個模塊,時間復(fù)雜讀為 O(n) ,并且隨著輸入信息量的增加,從 而時間復(fù)雜度也逐漸增加。4.2 、問題解決在程序設(shè)計過程中,本程序采用兩種方式進行數(shù)據(jù)輸入,一種是由用戶手動 輸入數(shù)據(jù), 另一種是由文本文件數(shù)據(jù)導入 1的方式。但在文本導入過程中, 導入的 是二進制文件,但由于復(fù)雜程度較高,從而根據(jù)所查資料進行修改,采用導入

19、文 本文件。在結(jié)果輸出上,由于輸出的是黑屏,所以經(jīng)過查閱資料,運用system函數(shù)對輸出結(jié)果的頁面進行修飾。4.3、設(shè)計收獲在做實驗前,一定要將課本上的知識吃透,因為這是做實驗的基礎(chǔ),否則, 在做設(shè)計程序?qū)嶒灂r,這將使你做的難度加大,浪費寶貴的時間,使你事倍功半。 做實驗時,一定要親力親為,務(wù)必要將每個步驟,每個細節(jié)弄清楚,弄明白。實 驗后,還要復(fù)習,思考,這樣,你的印象才深刻,記得才牢固,否則,過后不久 你就會忘得一干二凈,這還不如不做。通過這次程序設(shè)計的實驗,使我們學到了 不少實用的知識,更重要的是,做實驗的過程,思考問題的方法,這與做其他的 實驗是通用的,真正使我們們受益匪淺。五、測試結(jié)

20、果1、菜單函數(shù)的測試結(jié)果如圖 2I曲zjnlx員工倍息詡里累現(xiàn)皿5工館*查詢也員工信息更新氛員工信啟j蟻氛迪出管理系統(tǒng)請舸人您的魚擇數(shù)扣-叮lliu bvc 上夕 15: 12; 14 20131圖22、信息查詢函數(shù)的測試結(jié)果如圖3圖33、信息更新函數(shù)測試結(jié)果如圖4圖4六、用戶使用說明本程序?qū)嵲诃h(huán)境下通過編譯并執(zhí)行。用戶根據(jù)提示信息進行選擇并操作。七、附錄源程序:#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <windows.h>/ 清屏函數(shù)頭文件#include

21、 <string.h>#include <time.h>#include <io.h>#define LEN sizeof(struct emp)#define DATA "employee.txt" struct emplong int num;/ 編號char name20;/ 姓名int age;/ 年齡char sex4;/ 性別char birthday10;/ 生日char tel15; /電話char edu8;/ 學歷char pos20;/ 職務(wù)char add30;/ 住址struct emp *next;struct

22、 emp *head=NULL; int t=0;void menu();void gengxin();void tianjia();void insert(struct emp *em);void display(struct emp *p);void liebiao();void chaxun();void bianhao();void shengri();void xingming();void readDate();void writeDate();void freeAll();void shanchu();void change();void devise(struct emp *p

23、);void main()struct emp *head=NULL; head=(struct emp *)malloc(LEN); head->next=NULL;system("color F1");system("mode con: cols=500 lines=1000"); readDate();menu(); system("cls"); printf("nnnnnnnnnnnnnnnnnnn");printf(" 謝謝使用,再見 n"); void menu(void)ch

24、ar i,lj100; int flog;time_t T;struct tm * timenow;time ( &T );timenow = localtime ( &T ); flog=0;while(1) system("cls"); printf("nnnnn");printf("|員工信息管理系統(tǒng)n")1printf("|n");printf("|n");printf("|n");printf(" |1. 員工信息查詢n");pr

25、intf("|n");printf("|n");printf("|n");printf(" |2. 員工信息更新n");printf("|n");printf("|n");printf("|n");printf(" |3. 員工信息列表n");printf("|n");printf("|n");printf("|n");printf("|0. 退出管理系統(tǒng)n"

26、;);printf("|n");printf("|n");printf("|n");1|. 1printf("n );printf("%s", asctime (timenow) );printf("請輸入您的選擇(數(shù)字 0-3 ):n");scanf("%c",&i);gets(lj);if(lj0)i='a'switch(i)case '1':chaxun();break;case '2':gengxin(

27、);break;case '3':liebiao();break;case '0':flog=1;break;default:printf(" 輸入有誤,請按回車鍵重新輸入 n");gets(lj);break; if(flog)break;void tianjia()struct emp *p,*p1;char lj100;p=NULL;p1=head;printf(" 請輸入第 %d 個員工的信息 .n",t+1); p=(struct emp *)malloc(LEN);if(p=NULL)printf("

28、 分配空間失敗 "); exit(0); printf(" 請輸入員工的編號 :n"); scanf("%ld",&p->num);while(p1!=NULL)&&(p->num!=p1->num)p1=p1->next;if(p1!=NULL)if(p->num=p1->num)printf(" 編號已經(jīng)存在 ,請重新輸入 ,按回車鍵繼續(xù) :n"); free(p);gets(lj);getchar(); printf("請輸入員工的姓名:n"

29、;);scanf("%s",p->name);printf("請輸入員工的年齡:n");scanf("%d",&p->age);printf("請輸入員工的性別:n");scanf("%s",p->sex);printf(" 請輸入員工的出生年月 :n"); scanf("%s",p->birthday);printf("請輸入員工的電話:n");scanf("%s",p->te

30、l);printf("請輸入員工的學歷:n");scanf("%s",p->edu);printf("請輸入員工的職務(wù):n");scanf("%s",p->pos);printf("請輸入員工的住址:n");scanf("%s",p->add);insert(p); printf(" 輸入的員工信息為 :n");printf(":n");printf("編號tt姓名tt年齡tt性別tt出生年月tt電話tt學歷

31、tt 職務(wù)tt 住址:n");display(p);printf("按回車 鍵繼續(xù) n");writeDate();gets(lj);getchar(); void insert(struct emp *em)struct emp *p0,*p1,*p2; p1=head; p0=em;if(head=NULL)head=p0;p0->next=NULL;elsewhile(p0->num > p1->num)&&(p1->next!=NULL) p2=p1;p1=p1->next; if(p0->num&

32、lt;=p1->num)if(head=p1)head=p0;else p2->next=p0;p0->next=p1; else p1->next=p0; p0->next=NULL; t+; void display(struct emp *p) printf("%ldtt%stt%dtt%stt%stt%stt%stt%stt%sn",p->n um,p->name,p->age,p->sex,p->birthday,p->tel,p->edu,p->pos,p->add); void

33、 liebiao() char lj100; struct emp *p; p=head; system("cls"); if(head=NULL)printf(" 查找不到信息 n");menu(); printf("員工信息列表n");printf("編號tt姓名tt年齡tt性別tt出生年月tt電話tt學歷tt 職務(wù)tt住址 :n");if(head!=NULL)while(p!=NULL) display(p);p=p->next; printf("n 按回車鍵返回主菜單 n");g

34、ets(lj);void chaxun()char i,lj100;int flog;time_t T;struct tm * timenow;time ( &T );timenow = localtime ( &T );flog=0;while(1)system("cls"); printf("nnnnn");printf("|員工信息查詢系統(tǒng)An)i1printf("|n");printf("n");printf("n");printf("n")

35、;printf("n");printf("n");printf("n");printf("n");printf("n");printf("n");printf("n");printf("n");printf("n");printf("n");printf("n");printf("1. 按照編號查詢2. 按照姓名查詢3. 按照生日查詢0. 退出管理系統(tǒng)n")

36、;prin tf(" |In");printf("|In");printf("1ni1printf("%s", asctime (timenow) );printf(" 請輸入您的選擇(數(shù)字0-3 ):n");scanf("%c",&i);gets(lj); if(lj0)i='a'switch(i)case '1':bianhao();break; case '2':xingming();break;case '3

37、9;:shengri();break; case '0':flog=1;break; default:printf(" 輸入有誤,請重新輸入 n");gets(lj);break;if(flog)break;void bianhao()int number;char lj100;struct emp *p1;p1=head;printf(" 請輸入要查詢員工的編號 :n");scanf("%d",&number); while(number!=p1->num)&&(p1->next!

38、=NULL) p1=p1->next;if(number=p1->num)printf("員工信息查詢nprintf(" 要查詢的員工信息 :n");printf("編號tt姓名tt年齡tt性別tt出生年月tt電話tt學歷tt 職務(wù)tt住址:n");printf("%ldtt%stt%dtt%stt%stt%stt%stt%stt%sn",p1->n um,p1->name,p1->age,p1->sex,p1->birthday,p1->tel,p1->edu,p1-&

39、gt;pos, p1->add);printf(" 按回車鍵繼續(xù) n");gets(lj); getchar(); else if(p1->next=NULL) printf(" 要查詢的員工信息不存在,按回車鍵返回 :n"); gets(lj);getchar();void xingming()char ch10;struct emp *p;char lj100;p=head;printf(" 請輸入要查詢的員工的名字 :n"); scanf("%s",ch);if(p=NULL)printf(&qu

40、ot; 不存在員工記錄,按回車鍵返回 .n");gets(lj); getchar(); return ; while(strcmp(ch,p->name)&&p->next!=NULL) p=p->next; if(!strcmp(ch,p->name)prin tf("員工信息查詢n"printf("編號tt姓名tt年齡tt性別tt出生年月tt電話tt學歷tt 職務(wù)tt 住址:n"); d isplay(p);printf(”按回車鍵繼續(xù) n");gets(lj);getchar();els

41、e if(p->next=NULL)printf(" 不存在員工記錄 .n");gets(lj); getchar(); return; void shengri()char bir20,lj100; struct emp *p;p=head; printf(" 請輸入要查詢的員工的出生日期 :n"); scanf("%s",bir);if(p=NULL)printf(" 不存在員工記錄 .按回車鍵返回 n");gets(lj);getchar(); return ;while(strcmp(bir,p-&g

42、t;birthday)&&p->next!=NULL)p=p->next;if(!strcmp(bir,p->name)printf("員工信息查詢n");printf("編號tt姓名tt年齡tt性別tt出生年月tt電話tt學歷tt 職務(wù)tt 住址:n"); display(p);printf("按回車鍵繼續(xù) n");gets(lj);getchar(); else if(p->next=NULL)printf(" 不存在員工記錄 .按回車鍵返回 n");gets(lj);g

43、etchar(); return;void readDate()FILE * fp;struct emp *p1,*p2;fp=fopen(DATA, "r");if(!fp)printf(" 打開文件失敗 !按回車鍵繼續(xù) n");getchar();else fscanf(fp,"%dn",&t);head=p1=p2=(struct emp *)malloc(LEN);fscanf(fp,"%ldtt%stt%dtt%stt%stt%stt%stt%stt%sn",&p1->num,p1-

44、>name,&p1->age,p1->sex,p1->birthday,p1->tel,p1->edu, p1->pos,p1->add);while(!feof(fp)p1=(struct emp *)malloc(LEN); fscanf(fp,"%ldtt%stt%dtt%stt%stt%stt%stt%stt%sn",&p1->num,p1->name,&p1->age,p1->sex,p1->birthday,p1->tel,p1->edu,p1 -&

45、gt;pos,p1->add);p2->next=p1; p2=p1;p2->next=NULL;fclose(fp);void writeDate()FILE* fp; struct emp *p1;fp=fopen(DATA, "w");if(!fp) printf(" 打開文件失敗 !n");getchar(); else fprintf(fp,"%dn",t);for(p1=head;p1!=NULL;p1=p1->next) fprintf(fp,"%ldtt%stt%dtt%stt%stt

46、%stt%stt%stt%sn",p1 ->num,p1->name,p1->age,p1->sex,p1->birthday,p1->tel,p1->edu,p1-> pos,p1->add); fclose(fp);void freeAll()struct emp *p1,*p2; p1=p2=head;while(p1) p2=p1->next;free(p1);p1=p2; void shanchu()struct emp *p1,*p2; long int number;char lj100;if(head=NUL

47、L)printf(" 無員工紀錄 ! 按回車鍵返回 n"); gets(lj);getchar();return; printf(" 請輸入你要刪除的員工的編號 :n"); scanf("%ld",&number); p1=head;while(number!=p1->num&&p1->next!=NULL)p2=p1;p1=p1->next;if(number=p1->num) if(p1=head)head=p1->next; else p2->next=p1->n

48、ext;free(p1);t-;writeDate();printf(" 刪除成功,按回車鍵繼續(xù) n"); else printf(" 沒 有 該 員 工 的 紀 錄 , 請 核 對 . 按 回 車 鍵 返 回 n");gets(lj);getchar();void xiugai()struct emp *p1,*p2;long int number;char lj100; if(head=NULL) printf(" 無員工紀錄 ! 按回車鍵返回 n");gets(lj);getchar();return;printf("

49、 請輸入你要修改的員工的編號 :n"); scanf("%ld",&number);gets(lj); p1=head; while(number!=p1->num&&p1->next!=NULL) p2=p1; p1=p1->next; if(number=p1->num) devise(p1);writeDate();printf(" 修改成功,按回車鍵繼續(xù) n"); elseprintf(" 沒有該員工的紀錄 ,請核對 .按回車鍵返回 n"); gets(lj);getc

50、har();void devise(struct emp *p)char i,lj100;int flog;time_t T;struct tm * timenow;time ( &T );timenow = localtime ( &T ); flog=0;while(1)system("cls"); printf("nnnnn");printf("i員工信息修改一n±1printf("|n");printf("|n");printf("|n");print

51、f("|1. 修改員工姓名|n");printf("|n");printf("|n");printf("|n");printf("|2. 修改員工年齡|n");printf("|n");printf("|n");printf("|n");printf("|3. 修改員工性別|n");printf("|n");printf("|n");printf("|n")

52、;printf("|4. 修改員工生日|n");printf("|n");printf("|n");printf("|n");printf("|5. 修改員工電話|n");printf("|n");printf("|n");printf("|n");printf("|0. 退出管理系統(tǒng)|n");printf("|n");printf("|n");printf("|n");printf("1n")iiprintf("%s", asctime (timenow)

溫馨提示

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

評論

0/150

提交評論