373湖北汽車工業(yè)學院電氣與信息工程學院_第1頁
373湖北汽車工業(yè)學院電氣與信息工程學院_第2頁
373湖北汽車工業(yè)學院電氣與信息工程學院_第3頁
373湖北汽車工業(yè)學院電氣與信息工程學院_第4頁
373湖北汽車工業(yè)學院電氣與信息工程學院_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、湖北汽車工業(yè)學院電氣與信息工程學院c 語言程序設計實訓報告 實訓題目: 職工信息管理系統(tǒng) 專 業(yè): 計算機專業(yè) 班 級: t1123-1 姓 名: 張立 成 績:一、需求分析1、問題問題描述:已知職工信息包括職工號、姓名、性別、出生日期、學歷、工資、住址、電話等。設計一程序,完成以下功能:1) 能從鍵盤輸入職工的信息(增加,輸入時需要能檢查該職工號的職工的記錄是否已經(jīng)存在,出生日期格式是否合法(格式為:yyyy-mm-dd,如 2009-01-02)2) 能從指定的文件中讀入職工的信息3) 能按職工號查詢職工的信息4) 能按學歷統(tǒng)計職工數(shù)5) 能查詢到指定年份需要退休的職工的信息(男:60 歲

2、,女 55 歲)6) 能刪除指定職工號的職工信息7) 能將職工信息保存在指定的文件中2、系統(tǒng)采用c 語言實現(xiàn),開發(fā)環(huán)境為vc,可以運行在操作系統(tǒng)windows98 及以上皆可。3、運行要求能不受限制的錄入職工的信息、界面友好,操作方便,例如刪除前需要提示用戶是否刪除容錯性強,例如數(shù)據(jù)導出時,如果文件不存在需要提示用戶。二、總體設計1、系統(tǒng)流程設計根據(jù)系統(tǒng)要求,設計如下的系統(tǒng)流程2、系統(tǒng)模塊設計根據(jù)系統(tǒng)的功能設計,如下模塊職工信息管理系統(tǒng)職工的信息的錄入查詢職工的信息刪除職工的信息退出修改職工的信息添加職工的信息瀏覽所有職工的信息按職工名字查詢查詢是否到退休年齡主界面模塊:完成系統(tǒng)菜單的顯示功能

3、選擇模塊:根據(jù)用戶的選擇,完成其相應的功能職工信息錄入:完成用戶從界面輸入職工信息,保存入系統(tǒng)的功能職工信息修改:完成用戶從界面輸入職工信息,在系統(tǒng)中查詢定位,并將錄入的數(shù)據(jù)保存入系統(tǒng)的功能職工信息查詢:完成用戶從界面輸入查詢條件,在系統(tǒng)查詢符合條件的職工信息,并在界面上顯示的功能。職工信息導入:在運行程序時會自動讀取指定文件的內(nèi)容,保存入系統(tǒng)。職工信息導出:完成用戶從界面錄入職工信息后,程序會自動把職工信息寫入指定的文件中。職工信息刪除:完成用戶從界面輸入需要刪除的職工的信息,輸入姓名,并將其從系統(tǒng)中刪除。三、詳細設計1、數(shù)據(jù)結(jié)構(gòu)設計根據(jù)系統(tǒng)要求,系統(tǒng)中需要保存的數(shù)據(jù)有通訊錄的信息,其結(jié)構(gòu)如

4、下:數(shù)據(jù)項名稱 數(shù)據(jù)項系統(tǒng)表示 數(shù)據(jù)類型 數(shù)據(jù)長度 備注職工號 no 整型 4姓名 name 字符串 20性別 sex 字符型 1年齡 age 整型 4出生年 int 整型 4 出生月 int 整型 4出生日 int 整型 4學歷 xueli 字符串 30工資 wage 整型 4地址 address 字符串 100電話 tele 字符串 20為了能實現(xiàn)不受限制的增加職工信息,采用結(jié)構(gòu)體的結(jié)構(gòu)保存職工的信息,在增加職工的基本信息時,創(chuàng)建的結(jié)構(gòu)體如下:struct employeeint num;char name10;char sex; int age;int year; int month;

5、int date;char xueli30;int wage;char addr30;long int tel;em1000;2、界面設計主界面:根據(jù)系統(tǒng)要求,設計一個字符界面,顯示系統(tǒng)的菜單,為了體現(xiàn)友性,將在每個菜單前顯示該菜單項對應的數(shù)字用戶輸入菜單項前面的數(shù)字,主菜單消失,進入該模塊的相應界面進行相應的操作,完成后,回到主界面。輸入界面:在光標下輸入通訊錄的信息,用空格將信息隔開,如果出生日期輸入格式不對,就系要重新輸入,創(chuàng)建完后出現(xiàn)是否繼續(xù)的選擇。修改界面:選擇修改信息后首先顯示所有職工的信息,輸入需要修改信息職工的姓名,顯示該職工的詳細信息,選擇需要修改的項目,輸入修改后的信息,將

6、原來信息修改,然后顯示修改后的所有職工的信息。刪除界面:輸入需要刪除的姓名,將其從職工信息中刪除添加信息:輸入需要添加的人數(shù)后,這一步驟基本上和信息錄入是一樣的,添加完成后會顯示所有學生的信息查詢信息:1)按職工號查詢:輸入職工號查詢出該職工的全部信息。2)查詢已到退休年齡職工信息。選擇查詢需退休員工的條件就得到上面的信息。3) 統(tǒng)計某個學歷職工的個數(shù) 輸入統(tǒng)計的學歷就可以統(tǒng)計出個數(shù)。4)按姓名查詢輸入職工的名字就能后,就能夠輸出被查職工的信息瀏覽信息顯示頁面:瀏覽所有職工的信息。選擇添加信息操作后就可以從界面輸入添加者的信息,中間日期輸入格式出現(xiàn)錯誤會有提示的3、模塊實現(xiàn)主界面實現(xiàn):調(diào)用 m

7、enu()函數(shù),在屏幕上打印需要顯示的字符信息,在主函數(shù)中實現(xiàn)功能選擇模塊:接受從鍵盤輸入的菜單選擇,判斷并調(diào)用相應的功能函數(shù),完成其對應的功能。實現(xiàn)功能選擇。對應的函數(shù):menu();職工信息錄入模塊實現(xiàn):模塊說明:從鍵盤接收輸入的職工信息,把信息有順序的村道內(nèi)存中并寫入到指定文件中對應函數(shù):input(),save(int m)。通訊錄信息修改模塊實現(xiàn):模塊說明:從鍵盤接收輸入的需要修改通訊錄的姓名,遍歷結(jié)構(gòu)體,結(jié)構(gòu)體中的姓名是否輸入的姓名相等,如果相等,再輸入需要修改的信息類別,然后從鍵盤輸入修改后的信息。然后輸入的信息替代原有的信息。模塊流程:輸入需要修改職工的姓名與系統(tǒng)中的姓名比較選

8、擇修改的內(nèi)容修改成功退出修改信息對應函數(shù):modify()職工信息刪除模塊實現(xiàn):模塊說明:輸入需要刪除的職工姓名后刪除,把下面的職工信息往前移動。對應函數(shù):void del()職工信息導入模塊實現(xiàn):模塊說明:在運行的時候第一步是自動把指定文件中的信息導入內(nèi)存中,是信息可以在后面的運行過程中使用對應函數(shù):int load()職工信息信息導出模塊實現(xiàn):模塊說明:程序在輸入信息后就會自動將輸入的職工信息導入到指定的文件中使后面可以使用。對應函數(shù):void save(int m)職工信息查詢模塊實現(xiàn):模塊說明:分為兩種查詢方式:1)按職工號查詢;2)按退休年齡查詢。選擇查詢方式模塊流程:輸入職工號輸出

9、需退休的人輸出查詢結(jié)果對應函數(shù):void search(); void search_num(); void search_age();職工信息瀏覽模塊實現(xiàn):模塊說明:輸出所有的職工的信息對應函數(shù):void display()4、 實訓總結(jié) 這個程序難度挺大的,但還是在幾天的努力中誕生出來了?;旧嫌蒙狭宋宜鶎W的全部c語言知識,有一點點的傷腦筋。雖然對于我來說有一定難度但對于當今的科技,這個就不算什么了,科技上的程序和現(xiàn)實生活中應用的程序要比這難的多。對與大學生c語言是每個人都必須掌握的一門學科,我們計算機專業(yè)的學生就更應該熟練的運用c語言編寫程序。通過這幾個月來對計算機的了解,我對計算機這個

10、科學有了更濃的感情,雖然目前學的不是很好。這次程序的一個亮點是能夠正確判斷日期是否合格,運行的時候基本上是沒有問題的。 通過這次課設,我對c語言有了更深的了解。更加熟息課本上的知識點。五、附錄程序源代碼/*職工信息管理系統(tǒng)*/#include #include#include #define n 1000struct workersint num;char name10;char sex; int age;int year;int month;int date;char xueli30;int wage;char addr30;long int tel;em1000; /*定義一個結(jié)構(gòu)體*/v

11、oid menu();void input();void save(int);void display();void del();void add();void search();void search_num();void search_age();void search_xueli();void search_name();void modify(); /*定義各函數(shù)*/void main() int n,flag;char a;menu(); /*調(diào)用菜單函數(shù)*/doprintf(t請選擇你需要操作的步驟(0-6):n);scanf(%d,&n);if(n=0&n=6)flag=1;br

12、eak;elseflag=0;printf(您輸入有誤,請正確輸入選擇!);while(flag=0);while(flag=1)switch(n)case 1:system(cls); /*清屏*/printf(nnttt*輸入職工信息* n);printf(n);input();break;case 2:system(cls); /*清屏*/printf(nnttt*瀏覽職工信息* n);printf(n);display();break;case 3:system(cls); /*清屏*/printf(nnttt*按條件查詢職工信息* n);printf(n);search();brea

13、k; case 4:system(cls); /*清屏*/printf(nnttt*刪除職工信息* n);printf(n);del();break;case 5:system(cls); /*清屏*/printf(nnttt*添加職工信息* n);printf(n);add();break;case 6:system(cls); /*清屏*/printf(nnttt*修改職工信息* n);printf(n);modify();break;case 0:exit(0);break;default :break;getchar();printf(n);printf(是否繼續(xù)進行(y or n):

14、n);scanf(%c,&a);if(a=y|a=y)flag=1;system(cls); /*清屏*/menu(); /*調(diào)用菜單函數(shù)*/printf(t請再次選擇你需要操作的步驟(1-6):n);scanf(%d,&n);printf(n);else exit(0);void menu() /*菜單函數(shù)*/printf(nnnnnn);printf( tt *職工信息管理*n);printf( tt * 1.錄入職工信息 *n);printf( tt * 2.瀏覽職工信息 *n);printf( tt * 3.查詢職工信息 *n);printf( tt * 4.刪除職工信息 *n);pr

15、intf( tt * 5.添加職工信息 *n);printf( tt * 6.修改職工信息 *n);printf( tt * 0.退出 *n);printf( tt *歡迎使用*n);printf(n);printf(n);void input() /*錄入函數(shù)*/int i,m,n=0;printf(請輸入需要創(chuàng)建信息的職工人數(shù)(1-1000):n);scanf(%d,&m);for (i=0;im;i+)printf(職工號: );scanf(%d,&emi.num);printf(請輸入姓名: );scanf(%s,);getchar();printf(請輸入性別(f-女

16、 m-男): );scanf(%c,&emi.sex);getchar();printf(請輸入出生日期(1991-01-01):); don=0;printf(請輸入日期n);scanf(%d-%d-%d,&emi.year,&emi.month,&emi.date);if(emi.year3000)n=1;if(emi.month12|emi.month31|emi.date29|emi.date28|emi.date31|emi.date30|emi.date31|emi.date30|emi.date31|emi.date31|emi.date30|emi.date31|emi.dat

17、e30|emi.date31|emi.date1) n=1;break;while(n=1);emi.age=2012-emi.year; printf(該職工年齡為: %dn,emi.age);getchar();printf(請輸入學歷: );scanf(%s,emi.xueli);getchar();printf(請輸入工資: );scanf(%d,&emi.wage);getchar();printf(請輸入住址: );scanf(%s,emi.addr);getchar();printf(請輸入電話: );scanf(%d,&emi.tel);printf(n);printf(n創(chuàng)建

18、完畢!n);save(m);void save(int m) /*保存文件函數(shù)*/int i;file*fp;if (fp=fopen(workers_list.txt,wb)=null) /*創(chuàng)建文件并判斷是否能打開*/printf (cannot open filen);exit(0);for (i=0;im;i+) /*將內(nèi)存中職工的信息輸出到磁盤文件中去*/if (fwrite(&emi,sizeof(struct workers),1,fp)!=1)printf(file write errorn);fclose(fp);int load() /*導入函數(shù)*/file*fp;int

19、i=0;if(fp=fopen(workers_list.txt,rb)=null)printf (cannot open filen);exit(0);else do fread(&emi,sizeof(struct workers),1,fp);i+;while(feof(fp)=0);fclose(fp);return(i-1);void display() /*瀏覽函數(shù)*/int i;int m=load();printf(n職工號t姓名t性別t年齡t生日t學歷t工資t住址t電話n);for(i=0;im;i+)printf(n %dt%st%ct%dt%d-%d-%dt%st%dt%

20、st%ldn,emi.num,,emi.sex,emi.age,emi.year,emi.month,emi.date,emi.xueli,emi.wage,emi.addr,emi.tel); void del() /*刪除函數(shù)*/int m=load();int i,j,n,t,flag;char name20;printf(n 原來的職工信息:n);display(); printf(n);printf(請輸入要刪除的職工姓名:n);scanf(%s,name);for(flag=1,i=0;flag&im;i+)if(strcmp(,name)=0)pr

21、intf(n已找到此人,原始記錄為:n);printf(n確定刪除請輸入 1,不刪除請輸入 0n);scanf(%d,&n);if(n=1) /*如果刪除,則其他的信息都往上移一行*/for(j=i;jm-1;j+)strcpy(,emj+1.name);emj.num=emj+1.num;emj.sex=emj+1.sex;emj.age=emj+1.age;strcpy(emj.xueli,emj+1.xueli);emj.wage=emj+1.wage; strcpy(emj.addr,emj+1.addr);emj.tel=emj+1.tel;flag=0;printf

22、(n 瀏覽刪除后的所有職工信息:n);save(m); /*調(diào)用保存函數(shù)*/display(); /*調(diào)用瀏覽函數(shù)*/if(!flag)m=m-1;elseprintf(n對不起,查無此人!n);printf(n繼續(xù)刪除請按1,不再刪除請按0n);scanf(%d,&t);switch(t)case 1:del();break;case 0:break;default :break;void add()/*添加函數(shù)*/file*fp;int n;int count=0;int i;int m=load();printf(n 原來的職工信息:n);display(); /* 調(diào)用瀏覽函數(shù)*/pr

23、intf(n);fp=fopen(emploee_list,a);printf(請輸入想增加的職工數(shù):n);scanf(%d,&n);for (i=m;i(m+n);i+)printf(n 請輸入新增加職工的信息:n);printf(請輸入職工號: );scanf(%d,&emi.num);printf(n);printf(請輸入姓名: );scanf(%s,);getchar();printf(請輸入性別(f-女 m-男): );scanf(%c,&emi.sex);printf(請輸入出生日期(1991-01-01):); don=0;printf(請輸入日期n);scan

24、f(%d-%d-%d,&emi.year,&emi.month,&emi.date);if(emi.year3000)n=1;if(emi.month12|emi.month31|emi.date29|emi.date28|emi.date31|emi.date30|emi.date31|emi.date30|emi.date31|emi.date31|emi.date30|emi.date31|emi.date30|emi.date31|emi.date=1&t=4)flag=1;break;elseflag=0;printf(tt您輸入有誤,請重新選擇!);while(flag=0);wh

25、ile(flag=1)switch(t) case 1:printf(ttt按職工號查詢n);search_num();break;case 2:printf(ttt查詢需退休員工n);search_age();break;case 3:printf(ttt按學歷查詢n);search_xueli();break;case 4:printf(ttt按姓名查詢n);search_name();break;case 5:system(cls); /*清屏*/main();break;default:break;void search_num()int num;int i,t;int m=load(

26、);printf(t請輸入要查找的職工號:n);scanf(%d,&num);for(i=0;im;i+)if(num=emi.num) printf(ntt已找到此人,其信息為:n);printf(n職工號t姓名t性別t年齡t生日t學歷t工資t住址t電話 n);printf(n %dt%st%ct%dt%d-%d-%dt%st%dt%st%ldn,emi.num,,emi.sex,emi.age,emi.year,emi.month,emi.date,emi.xueli,emi.wage,emi.addr,emi.tel); break;if(i=m) printf(ntt對

27、不起,查無此人n);printf(n);printf(t返回查詢函數(shù)請輸入1,繼續(xù)查詢職工號請輸入2,返回主菜單請輸入 3n);scanf(%d,&t);while(t3)printf(輸入有誤,重新輸入n);scanf(%d,&t);switch(t) case 1:system(cls); /*清屏*/search();break;case 2: system(cls); /*清屏*/break;case 3: system(cls); /*清屏*/main();break;default:break;void search_xueli()char xueli30;int i,t,n=0;

28、int m=load();printf(t請輸入要查找的學歷:n);scanf(%s,xueli);for(i=0;im;i+)if(strcmp(emi.xueli,xueli)=0) n+;break;printf(nntt該學歷的人數(shù)為%dn,n);printf(t返回查詢函數(shù)請輸入1,繼續(xù)查詢學歷請輸入2,返回主菜單請輸入 3n);scanf(%d,&t);while(t3)printf(輸入有誤,重新輸入n);scanf(%d,&t);switch(t) case 1:system(cls); /*清屏*/search();break;case 2: system(cls); /*清

29、屏*/break;case 3: system(cls); /*清屏*/main();break;default:break;void search_name()char name20;int i,t,n=0;int m=load();printf(t請輸入要查找的姓名:n);scanf(%s,name);for(i=0;im;i+)if(strcmp(,name)=0) printf(ntt該員工信息為:n);printf(n職工號t姓名t性別t年齡t生日t學歷t工資t住址t電話 n);printf(n %dt%st%ct%dt%d-%d-%dt%st%dt%st%ldn,e

30、mi.num,,emi.sex,emi.age,emi.year,emi.month,emi.date,emi.xueli,emi.wage,emi.addr,emi.tel); n+;break;if(n=0)printf(未找到此人n);printf(t返回查詢函數(shù)請輸入1,繼續(xù)查詢學歷請輸入2,返回主菜單請輸入 3n);scanf(%d,&t);while(t3)printf(輸入有誤,重新輸入n);scanf(%d,&t);switch(t) case 1:system(cls); /*清屏*/search();break;case 2: system(cls); /*

31、清屏*/break;case 3: system(cls); /*清屏*/main();break;default:break;void search_age()int i, t,n=0;int m=load();for(i=0;i=60&emi.sex=m|emi.age=55&emi.sex=f) printf(ntt已找到須退休員工為:n);printf(n職工號t姓名t性別t年齡t生日t學歷t工資t住址t電話 n);printf(n %dt%st%ct%dt%d-%d-%dt%st%dt%st%ldn,emi.num,,emi.sex,emi.age,emi.year,

32、emi.month,emi.date,emi.xueli,emi.wage,emi.addr,emi.tel); n+;if(n=0) printf(ntt對不起,未找到n);printf(n);printf(t返回查詢函數(shù)請輸入 1,返回主菜單請輸入 2n);scanf(%d,&t);while(t2)printf(輸入有誤,重新輸入n);scanf(%d,&t);switch(t) case 1:system(cls); /*清屏*/search();break;case 2:system(cls); /*清屏*/main();break;default :break;void modif

33、y() /*修改函數(shù)*/int num;char name10;char sex; int age;char xueli30;int wage;int year;int month;int date;char addr30;long int tel;int b,c,i,n,t,flag,k=0; int m=load(); /*導入文件內(nèi)的信息*/printf(n tt原來的職工信息:n);display(); /* 調(diào)用瀏覽函數(shù)*/printf(n);printf(t請輸入要修改的職工的姓名:n);scanf(%s,name);for(flag=1,i=0;flag&i9|c1) printf(nttt選擇錯誤,請重新選擇!n); flag=0;if(flag=1)printf(ntt對不起,查無此人!n); do switch(c) /*因為當找到第i個職工時,for語句后i自加了1,所

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論