c語言課程設(shè)計(jì)報(bào)告職工工資管理系統(tǒng).doc
《c語言課程設(shè)計(jì)報(bào)告職工工資管理系統(tǒng).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《c語言課程設(shè)計(jì)報(bào)告職工工資管理系統(tǒng).doc(28頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 課程設(shè)計(jì)報(bào)告C+課程設(shè)計(jì)報(bào)告題 目:人事管理系統(tǒng)設(shè) 計(jì) 者: 專業(yè)班級(jí): 學(xué) 號(hào): 指導(dǎo)教師: 二模塊設(shè)計(jì)分析系統(tǒng)功能模塊圖:歡迎畫面主菜單顯示功能查找功能刪除功能輸入功能保存與讀取退出程序添加功能修改功能統(tǒng)計(jì)功能按ID號(hào)查找按姓名查找修改ID號(hào)修改姓名修改職務(wù)工資修改基本工資修改醫(yī)保修改津貼修改公積金 工作程序分析輸入:輸入職工工資資料 通過結(jié)構(gòu)體的數(shù)組來進(jìn)行操作,先頭定義數(shù)組em,先輸入需要輸入的職工人數(shù)m,然后進(jìn)入循環(huán),每次循環(huán)將各項(xiàng)輸入結(jié)構(gòu)體數(shù)組對(duì)應(yīng)項(xiàng)的對(duì)應(yīng)成員中,當(dāng)循環(huán)次數(shù)等于人數(shù)時(shí),完成全部員工的資料輸入,退出循環(huán)。同時(shí)將數(shù)據(jù)儲(chǔ)存在ckerk_list文件中并自動(dòng)保存至磁盤。注:
2、如首次使用,尚未輸入數(shù)據(jù),請(qǐng)先輸入數(shù)據(jù)。輸入的數(shù)據(jù)將自動(dòng)保存。再次選擇輸入功能時(shí)原數(shù)據(jù)將被覆蓋。保存:將輸入的資料存入磁盤 讀取文件clerk_list,若文件不存在,打印“打開失敗并退出。若存在,則通過循環(huán)語句將輸入到結(jié)構(gòu)體數(shù)組的數(shù)據(jù)逐個(gè)輸入磁盤。 讀?。鹤x取磁盤中的資料 打開文件clerk_list ,若文件不存在,打印“打開失敗”并退出。若存在,讀取文件中的數(shù)據(jù),并返回職工人數(shù)。 顯示:顯示職工工資資料 先通過讀取函數(shù)的返回值確定職工人數(shù)m,再通過循環(huán)將員工工資資料逐個(gè)打印,當(dāng)循環(huán)次數(shù)達(dá)到m時(shí)退出循環(huán)。其中總工資由程序計(jì)算,總工資=基本工資+職務(wù)工資+津貼-醫(yī)療保險(xiǎn)-公積金刪除:刪除某員
3、工的資料 打印員工資料并提示輸入要?jiǎng)h除職工的姓名,輸入后若該職工不存在則打印“查無此人”;若存在,則顯示該職工資料并詢問是否確定刪除。若確定,則刪除。刪除時(shí),通過對(duì)比輸入的姓名與資料中的姓名做對(duì)比從而確定要?jiǎng)h除的項(xiàng)i,從第i項(xiàng)開始,將后一項(xiàng)的各成員的值賦給前一項(xiàng)各對(duì)應(yīng)的成員,完成對(duì)第i項(xiàng)的刪除。添加:添加新的員工資料而不覆蓋原有資料打印原有職工資料,詢問要添加的職工人數(shù)并詢問是否確定添加。逐個(gè)逐項(xiàng)輸入員工信息,之后程序計(jì)算其總工資。完成后顯示“添加成功”,打印新的員工資料并自動(dòng)保存。添加的方法為:定義一個(gè)相同類型的結(jié)構(gòu)體數(shù)組,將原有項(xiàng)復(fù)制后增添新的項(xiàng),并保存新的數(shù)組。查找:按ID好查詢與按姓名
4、查找員工資料根據(jù)提示輸入要查詢的ID號(hào)或姓名,程序通過循環(huán)語句將輸入的數(shù)字與以保存的結(jié)構(gòu)體數(shù)組中的數(shù)據(jù)對(duì)比,若相同,則打印“已找到”及該員工的資料;當(dāng)循環(huán)次數(shù)等于人數(shù)時(shí)結(jié)束循環(huán),若至結(jié)束循環(huán)時(shí)也沒有找到相同的,則打印“查無此人”。修改:修改特定員工的特定資料打印員工信息并提示輸入要修改資料的職工姓名。按提示確定要修改,確定要修改的項(xiàng)目,輸入要修改成的結(jié)果并將該結(jié)果賦給對(duì)應(yīng)項(xiàng)的對(duì)應(yīng)成員,完成對(duì)特定職工特定項(xiàng)目的修改。統(tǒng)計(jì) 通過循環(huán)對(duì)結(jié)構(gòu)體數(shù)組中的每一項(xiàng)經(jīng)行統(tǒng)計(jì),計(jì)算工資總額為,將工資總額除以人數(shù)計(jì)算出平均工資。根據(jù)每名職工的資料計(jì)算基本工資、職務(wù)工資、津貼之和在1000-1500圓1500-20
5、00圓2000圓以上的員工占總員工的百分比。三源程序代碼(附各部分解釋)#include#include#include#include#define N 100struct clerk int num; /ID號(hào) char name20; /姓名 int jbgz; /基本工資 int zwgz; /職務(wù)工資 int jt; / 津貼 int yb; /醫(yī)療保險(xiǎn) int gjj; /公積金/ int total; /總工資em100; void menu();void input();void save(int);void display();void del();void add();vo
6、id search();void search_num();void search_name();void modify(); void sta();void start(); /*定義各函數(shù)*/void start() /開始界面 system(cls);/清屏 system(color 1E); /設(shè)置文字顏色為黃色 背景色藍(lán)色printf(nnnnnn);printf(*);printf(*歡迎使用工資管理系統(tǒng)*);printf(*nnnnn);printf(tttt 制作: n);printf(tttt 2011年6月nnnn);printf(ttt *按任意鍵進(jìn)入*n);void m
7、enu() /菜單界面system(cls);system(color 1F); printf(*菜單*nn);printf( 1 輸入 nn);printf( 2 顯示 nn);printf( 3 查找 nn);printf( 4 刪除 nn);printf( 5 添加 nn);printf( 6 修改 nn);printf( 7 統(tǒng)計(jì) nn);printf( 8 退出 nn);printf(說明:*如首次使用 尚未輸入數(shù)據(jù) 請(qǐng)先輸入數(shù)據(jù) n *輸入的數(shù)據(jù)將自動(dòng)保存 n *再次選擇輸入功能時(shí)原數(shù)據(jù)將被覆蓋nn);void input() /*錄入函數(shù)*/ int i,m; system(cl
8、s); printf(職工人數(shù)(1-100):n); scanf(%d,&m); for (i=0;im;i+) printf(請(qǐng)輸入職工號(hào): ); scanf(%d,&emi.num); printf(請(qǐng)輸入姓名: ); scanf(%s,&emi.name); getchar(); printf(請(qǐng)輸入基本工資: ); scanf(%d,&emi.jbgz); printf(請(qǐng)輸入職務(wù)工資: ); scanf(%d,&emi.zwgz); printf(請(qǐng)輸入津貼: ); scanf(%d,&emi.jt); printf(請(qǐng)輸入醫(yī)療保險(xiǎn): ); scanf(%d,&emi.yb); pr
9、intf(請(qǐng)輸入公積金: ); scanf(%d,&emi.gjj); emi.total=(emi.jbgz)+(emi.zwgz)+(emi.jt)-(emi.yb)-(emi.gjj);/計(jì)算總工資 printf(n);/計(jì)算總工資 printf(n創(chuàng)建完畢!n); save(m);/保存職工人數(shù)mvoid save(int m) /*保存文件函數(shù)*/ int i; FILE*fp; /聲明fp是指針,用來指向FILE類型的對(duì)象 if (fp=fopen(clerk_list,wb)=NULL) /打開職工列表文件為空 printf (打開失敗n); exit(0); for (i=0;
10、im;i+) /*將內(nèi)存中職工的信息輸出到磁盤文件中去*/ if (fwrite(&emi,sizeof(struct clerk),1,fp)!=1)/寫入數(shù)據(jù)塊 &emi:是要輸出數(shù)據(jù)的地址 sizeof(struct clerk):獲取一個(gè)單體的長(zhǎng)度 1:數(shù)據(jù)項(xiàng)的個(gè)數(shù) fp:目標(biāo)文件指針 printf(文件讀寫錯(cuò)誤n); fclose(fp);/ 緩沖區(qū)內(nèi)最后剩余的數(shù)據(jù)輸出到磁盤文件中,并釋放文件指針和有關(guān)的緩沖區(qū)int load() /*導(dǎo)入函數(shù) int型*/ FILE*fp; int i=0; if(fp=fopen(clerk_list,rb)=NULL) printf (cann
11、ot open filen); exit(0); else do fread(&emi,sizeof(struct clerk),1,fp); /讀取 i+; while(feof(fp)=0); /檢測(cè)流上的文件結(jié)束符 fclose(fp); return(i-1);/返回人數(shù)void display() /*瀏覽函數(shù)*/ int i,sum=0; int m=load(); system(cls); printf(職工號(hào) 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險(xiǎn) 公積金 總工資 n); for(i=0;im;i+) /*m為輸入部分的職工人數(shù)*/ printf(n %-6d%-6s %-8
12、d %-8d %-8d %-8d %-8d %-8d ,emi.num,emi.name,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total); sum+=emi.total;/計(jì)算員工總工資之和 printf(nn職工平均工資為:%d n,sum/m);void del() /*刪除函數(shù) */ int m=load(); int i,j,n,t,button; char name20; printf(n 原來的職工信息:n); display(); /顯示刪除前的員工信息 printf(n); printf(按姓名刪除:n); scanf(%s
13、,name); for(button=1,i=0;button&im;i+)/主函數(shù)中確定button=1時(shí)各函數(shù)才可以被調(diào)用 if(strcmp(emi.name,name)=0)/按員工姓名查找到某員工 并調(diào)出其資料 printf(n此人原始記錄為:n);/顯示選定員工的信息 printf(職工號(hào) 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險(xiǎn) 公積金 總工資 n); printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ,emi.num,emi.name,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total
14、); printf(n確定刪除 請(qǐng)按1,不刪除請(qǐng)按0n); scanf(%d,&n); if(n=1) for(j=i;jm-1;j+)/從第i項(xiàng)開始 將后一項(xiàng)的各成員的值賦給前一項(xiàng)各對(duì)應(yīng)的成員 完成對(duì)第i項(xiàng)的刪除 strcpy(emj.name,emj+1.name); emj.num=emj+1.num; emj.jbgz=emj+1.jbgz; emj.zwgz=emj+1.zwgz; emj.jt=emj+1.jt; emj.yb=emj+1.yb; emj.gjj=emj+1.gjj; emj.total=emj+1.total; .button=0; if(!button)/but
15、ton=0表明刪除已完成 m=m-1;/總員工數(shù)減少一人 else printf(n查無此人!n); printf(n 刪除后的所有職工信息:n); save(m); /調(diào)用保存函數(shù) display(); /調(diào)用瀏覽函數(shù) printf(n繼續(xù)刪除請(qǐng)按1,不再刪除請(qǐng)按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)
16、; display(); printf(n); fp=fopen(emploee_list,a); printf(請(qǐng)輸入想增加的職工數(shù):n);/確定要加入的職工數(shù)n scanf(%d,&n); for (i=m;i=1&t=3) button=1; break; else button=0; printf(輸入錯(cuò)誤); while(button=0);/回到查詢選擇項(xiàng) while(button=1) switch(t)/選擇查詢方式 case 1:printf(按工號(hào)查詢n);search_num();break; case 2:printf(按姓名查詢n);search_name();bre
17、ak; case 3:main();break; default:break; void search_num()/按職工號(hào)查詢 int a; int i,t; int m=load(); printf(請(qǐng)輸入要查找的職工號(hào):n); scanf(%d,&a); for(i=0;im;i+) if(a=emi.num) printf(職工號(hào) 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險(xiǎn) 公積金 總工資 n); printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ,emi.num,emi.name,emi.jbgz,emi.zwgz,emi.jt,emi.y
18、b,emi.gjj,emi.total); break; if(i=m) printf(n對(duì)不起,查無此人n); printf(n); printf(返回查詢函數(shù)請(qǐng)按1,繼續(xù)查詢職工號(hào)請(qǐng)按2n); scanf(%d,&t); switch(t) case 1:search();break; case 2: break; default:break; void search_name() char name30; int i,t; int m=load(); printf(請(qǐng)輸入姓名:n); scanf(%s,name); for(i=0;im;i+) if(strcmp(emi.name,na
19、me)=0) printf(n已找到,其記錄為:n); printf(職工號(hào) 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險(xiǎn) 公積金 總工資 n); printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ,emi.num,emi.name,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total); if(i=m) printf(nn); printf(n); printf(返回查詢菜單請(qǐng)按1,繼續(xù)查詢姓名請(qǐng)按2n); scanf(%d,&t); switch(t) case 1:search();break; ca
20、se 2:break; default :break; void modify() /*修改函數(shù)*/ int num; char name20; int jbgz; int zwgz; int jt; int yb; int gjj; int b,c,i,n,t,button; int m=load(); system(cls); printf(n 原來的職工信息:n); display(); printf(n); printf(請(qǐng)輸入要修改的職工的姓名:n); scanf(%s,name); for(button=1,i=0;button&i8|c1) printf(n選擇錯(cuò)誤,請(qǐng)重新選擇!
21、n); button=0; if(button=1) printf(n查無此人n); do switch(c) /*因?yàn)楫?dāng)找到第i個(gè)職工時(shí),for語句后i自加了1,所以下面的應(yīng)該把改后的信息賦值給第i-1個(gè)人*/ case 1:printf(職工號(hào)改為: ); scanf(%d,&num); emi-1.num=num; break; case 2:printf(姓名改為: ); scanf(%s,name); strcpy(emi-1.name,name); break; case 3:printf(基本工資改為: ); getchar(); scanf(%d,&jbgz); emi-1.j
22、bgz=jbgz; emi-1.total=( emi-1.jbgz+ emi-1.zwgz + emi-1.jt- emi-1.yb- emi-1.gjj); break; case 4:printf(職務(wù)工資改為: ); scanf(%d,&zwgz); emi-1.zwgz=zwgz; emi-1.total=( emi-1.jbgz+ emi-1.zwgz + emi-1.jt- emi-1.yb- emi-1.gjj); break; case 5:printf(津貼改為: ); scanf(%d,&jt); emi-1.jt=jt; emi-1.total=( emi-1.jbgz
23、+ emi-1.zwgz + emi-1.jt- emi-1.yb- emi-1.gjj); break; case 6:printf(醫(yī)療保險(xiǎn)改為: ); scanf(%d,&yb); emi-1.yb=yb; emi-1.total=( emi-1.jbgz+ emi-1.zwgz + emi-1.jt- emi-1.yb- emi-1.gjj); break; case 7:printf(公積金改為: ); scanf(%d,&gjj); emi-1.gjj=gjj; emi-1.total=( emi-1.jbgz+ emi-1.zwgz + emi-1.jt- emi-1.yb- e
24、mi-1.gjj); break; case 8:modify(); break; printf(n); printf(nn 確定修改 請(qǐng)按1 ; 重新修改 請(qǐng)按2: n); scanf(%d,&b); while(b=2); printf(n修改后的所有職工信息:n); printf(n); save(m); display(); printf(n按1 繼續(xù)修改 ,不再修改請(qǐng)按0n); scanf(%d,&t); switch(t) case 1:modify();break; case 0:break; default :break; void sta()/統(tǒng)計(jì)函數(shù) int i; int
25、sum=0; int a=0,b=0,c=0; int m=load();system(cls);/清屏函數(shù) for(i=0;im;i+) /*m為輸入部分的職工人數(shù)*/ sum+=emi.total; if(emi.total)=1000) a+; if(emi.total1500&emi.total2000) c+;printf(nn工資總額為:%dn,sum);printf(平均工資為:%dn,sum/m);printf(n基本工資、職務(wù)工資、津貼之和n);printf(在1000-1500圓的員工占總員工的百分之%dn,a*100/m); printf(在1500-2000圓的員工占總
26、員工的百分之%dn,b*100/m); printf(在2000圓以上的員工占總員工的百分之%dn,c*100/m);printf(nn按任意鍵繼續(xù));getch();menu();void main()/主函數(shù) int n,button; char a; start();getch(); menu(); do printf(功能選擇(1-8):n); scanf(%d,&n); if(n=1&n=7) button=1; break; else button=0; printf(您輸入有誤,請(qǐng)重新選擇!); while(button=0); while(button=1) switch(n)
27、 case 1: input();break; case 2: display();break; case 3: search();break; case 4:del();break; case 5: add();break; case 6:modify();break; case 7:sta();break; case 8:exit(0);break; default :break; getchar(); printf(n); printf(按任意鍵繼續(xù)n); getch(); system(cls); /*清屏*/ menu(); /*調(diào)用菜單函數(shù)*/ printf(功能選擇(1-8):n
28、); scanf(%d,&n); printf(n); 運(yùn)行結(jié)果及截圖歡迎畫面菜單輸入功能顯示功能統(tǒng)計(jì)功能刪除功能添加功能修改功能心得體會(huì)通過這兩周的c語言課程設(shè)計(jì),我加深了對(duì)c語言程序設(shè)計(jì)的理解,使自己的操作更加熟練,發(fā)現(xiàn)了自己的不足,為自己今后的繼續(xù)學(xué)習(xí)指明了方向。在這次課程設(shè)計(jì)中,我鞏固所了學(xué)過的知識(shí),能用匯編語言熟練地運(yùn)用順序、選擇、循環(huán)三大結(jié)構(gòu),進(jìn)一步掌握結(jié)構(gòu)體數(shù)組的使用,文件函數(shù)的使用,掌握了子程序的定義及調(diào)用。并在調(diào)試過程中不斷發(fā)現(xiàn)與改正錯(cuò)誤,完善算法,改進(jìn)用戶體驗(yàn)等等。調(diào)試索然繁瑣而艱苦,但極大的促進(jìn)了我編程能力的提高。由于自己目前能力有限,該程序還有諸多不足,感謝指正。感謝老師的悉心教導(dǎo)與細(xì)致的幫助。雖然c語言的課程與課程設(shè)計(jì)都已結(jié)束,但通過這次課程設(shè)計(jì)我也發(fā)現(xiàn)了差距,并將在未來努力學(xué)習(xí),積極實(shí)踐,使自己能真正的掌握運(yùn)用c語言。參考文獻(xiàn)28
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案