c語言課程設(shè)計報告職工工資管理系統(tǒng).doc
《c語言課程設(shè)計報告職工工資管理系統(tǒng).doc》由會員分享,可在線閱讀,更多相關(guān)《c語言課程設(shè)計報告職工工資管理系統(tǒng).doc(28頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 課程設(shè)計報告C+課程設(shè)計報告題 目:人事管理系統(tǒng)設(shè) 計 者: 專業(yè)班級: 學 號: 指導教師: 二模塊設(shè)計分析系統(tǒng)功能模塊圖:歡迎畫面主菜單顯示功能查找功能刪除功能輸入功能保存與讀取退出程序添加功能修改功能統(tǒng)計功能按ID號查找按姓名查找修改ID號修改姓名修改職務(wù)工資修改基本工資修改醫(yī)保修改津貼修改公積金 工作程序分析輸入:輸入職工工資資料 通過結(jié)構(gòu)體的數(shù)組來進行操作,先頭定義數(shù)組em,先輸入需要輸入的職工人數(shù)m,然后進入循環(huán),每次循環(huán)將各項輸入結(jié)構(gòu)體數(shù)組對應(yīng)項的對應(yīng)成員中,當循環(huán)次數(shù)等于人數(shù)時,完成全部員工的資料輸入,退出循環(huán)。同時將數(shù)據(jù)儲存在ckerk_list文件中并自動保存至磁盤。注:
2、如首次使用,尚未輸入數(shù)據(jù),請先輸入數(shù)據(jù)。輸入的數(shù)據(jù)將自動保存。再次選擇輸入功能時原數(shù)據(jù)將被覆蓋。保存:將輸入的資料存入磁盤 讀取文件clerk_list,若文件不存在,打印“打開失敗并退出。若存在,則通過循環(huán)語句將輸入到結(jié)構(gòu)體數(shù)組的數(shù)據(jù)逐個輸入磁盤。 讀取:讀取磁盤中的資料 打開文件clerk_list ,若文件不存在,打印“打開失敗”并退出。若存在,讀取文件中的數(shù)據(jù),并返回職工人數(shù)。 顯示:顯示職工工資資料 先通過讀取函數(shù)的返回值確定職工人數(shù)m,再通過循環(huán)將員工工資資料逐個打印,當循環(huán)次數(shù)達到m時退出循環(huán)。其中總工資由程序計算,總工資=基本工資+職務(wù)工資+津貼-醫(yī)療保險-公積金刪除:刪除某員
3、工的資料 打印員工資料并提示輸入要刪除職工的姓名,輸入后若該職工不存在則打印“查無此人”;若存在,則顯示該職工資料并詢問是否確定刪除。若確定,則刪除。刪除時,通過對比輸入的姓名與資料中的姓名做對比從而確定要刪除的項i,從第i項開始,將后一項的各成員的值賦給前一項各對應(yīng)的成員,完成對第i項的刪除。添加:添加新的員工資料而不覆蓋原有資料打印原有職工資料,詢問要添加的職工人數(shù)并詢問是否確定添加。逐個逐項輸入員工信息,之后程序計算其總工資。完成后顯示“添加成功”,打印新的員工資料并自動保存。添加的方法為:定義一個相同類型的結(jié)構(gòu)體數(shù)組,將原有項復制后增添新的項,并保存新的數(shù)組。查找:按ID好查詢與按姓名
4、查找員工資料根據(jù)提示輸入要查詢的ID號或姓名,程序通過循環(huán)語句將輸入的數(shù)字與以保存的結(jié)構(gòu)體數(shù)組中的數(shù)據(jù)對比,若相同,則打印“已找到”及該員工的資料;當循環(huán)次數(shù)等于人數(shù)時結(jié)束循環(huán),若至結(jié)束循環(huán)時也沒有找到相同的,則打印“查無此人”。修改:修改特定員工的特定資料打印員工信息并提示輸入要修改資料的職工姓名。按提示確定要修改,確定要修改的項目,輸入要修改成的結(jié)果并將該結(jié)果賦給對應(yīng)項的對應(yīng)成員,完成對特定職工特定項目的修改。統(tǒng)計 通過循環(huán)對結(jié)構(gòu)體數(shù)組中的每一項經(jīng)行統(tǒng)計,計算工資總額為,將工資總額除以人數(shù)計算出平均工資。根據(jù)每名職工的資料計算基本工資、職務(wù)工資、津貼之和在1000-1500圓1500-20
5、00圓2000圓以上的員工占總員工的百分比。三源程序代碼(附各部分解釋)#include#include#include#include#define N 100struct clerk int num; /ID號 char name20; /姓名 int jbgz; /基本工資 int zwgz; /職務(wù)工資 int jt; / 津貼 int yb; /醫(yī)療保險 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è)置文字顏色為黃色 背景色藍色printf(nnnnnn);printf(*);printf(*歡迎使用工資管理系統(tǒng)*);printf(*nnnnn);printf(tttt 制作: n);printf(tttt 2011年6月nnnn);printf(ttt *按任意鍵進入*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)計 nn);printf( 8 退出 nn);printf(說明:*如首次使用 尚未輸入數(shù)據(jù) 請先輸入數(shù)據(jù) n *輸入的數(shù)據(jù)將自動保存 n *再次選擇輸入功能時原數(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(請輸入職工號: ); scanf(%d,&emi.num); printf(請輸入姓名: ); scanf(%s,&emi.name); getchar(); printf(請輸入基本工資: ); scanf(%d,&emi.jbgz); printf(請輸入職務(wù)工資: ); scanf(%d,&emi.zwgz); printf(請輸入津貼: ); scanf(%d,&emi.jt); printf(請輸入醫(yī)療保險: ); scanf(%d,&emi.yb); pr
9、intf(請輸入公積金: ); scanf(%d,&emi.gjj); emi.total=(emi.jbgz)+(emi.zwgz)+(emi.jt)-(emi.yb)-(emi.gjj);/計算總工資 printf(n);/計算總工資 printf(n創(chuàng)建完畢!n); save(m);/保存職工人數(shù)mvoid save(int m) /*保存文件函數(shù)*/ int i; FILE*fp; /聲明fp是指針,用來指向FILE類型的對象 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):獲取一個單體的長度 1:數(shù)據(jù)項的個數(shù) fp:目標文件指針 printf(文件讀寫錯誤n); fclose(fp);/ 緩沖區(qū)內(nèi)最后剩余的數(shù)據(jù)輸出到磁盤文件中,并釋放文件指針和有關(guān)的緩沖區(qū)int load() /*導入函數(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); /檢測流上的文件結(jié)束符 fclose(fp); return(i-1);/返回人數(shù)void display() /*瀏覽函數(shù)*/ int i,sum=0; int m=load(); system(cls); printf(職工號 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險 公積金 總工資 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;/計算員工總工資之和 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ù)才可以被調(diào)用 if(strcmp(emi.name,name)=0)/按員工姓名查找到某員工 并調(diào)出其資料 printf(n此人原始記錄為:n);/顯示選定員工的信息 printf(職工號 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險 公積金 總工資 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確定刪除 請按1,不刪除請按0n); scanf(%d,&n); if(n=1) for(j=i;jm-1;j+)/從第i項開始 將后一項的各成員的值賦給前一項各對應(yīng)的成員 完成對第i項的刪除 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ù)刪除請按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)
16、; display(); printf(n); fp=fopen(emploee_list,a); printf(請輸入想增加的職工數(shù):n);/確定要加入的職工數(shù)n scanf(%d,&n); for (i=m;i=1&t=3) button=1; break; else button=0; printf(輸入錯誤); while(button=0);/回到查詢選擇項 while(button=1) switch(t)/選擇查詢方式 case 1:printf(按工號查詢n);search_num();break; case 2:printf(按姓名查詢n);search_name();bre
17、ak; case 3:main();break; default:break; void search_num()/按職工號查詢 int a; int i,t; int m=load(); printf(請輸入要查找的職工號:n); scanf(%d,&a); for(i=0;im;i+) if(a=emi.num) printf(職工號 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險 公積金 總工資 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對不起,查無此人n); printf(n); printf(返回查詢函數(shù)請按1,繼續(xù)查詢職工號請按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(請輸入姓名:n); scanf(%s,name); for(i=0;im;i+) if(strcmp(emi.name,na
19、me)=0) printf(n已找到,其記錄為:n); printf(職工號 姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險 公積金 總工資 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(返回查詢菜單請按1,繼續(xù)查詢姓名請按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(請輸入要修改的職工的姓名:n); scanf(%s,name); for(button=1,i=0;button&i8|c1) printf(n選擇錯誤,請重新選擇!
21、n); button=0; if(button=1) printf(n查無此人n); do switch(c) /*因為當找到第i個職工時,for語句后i自加了1,所以下面的應(yīng)該把改后的信息賦值給第i-1個人*/ case 1:printf(職工號改為: ); 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ī)療保險改為: ); 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 確定修改 請按1 ; 重新修改 請按2: n); scanf(%d,&b); while(b=2); printf(n修改后的所有職工信息:n); printf(n); save(m); display(); printf(n按1 繼續(xù)修改 ,不再修改請按0n); scanf(%d,&t); switch(t) case 1:modify();break; case 0:break; default :break; void sta()/統(tǒng)計函數(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(您輸入有誤,請重新選擇!); 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); 運行結(jié)果及截圖歡迎畫面菜單輸入功能顯示功能統(tǒng)計功能刪除功能添加功能修改功能心得體會通過這兩周的c語言課程設(shè)計,我加深了對c語言程序設(shè)計的理解,使自己的操作更加熟練,發(fā)現(xiàn)了自己的不足,為自己今后的繼續(xù)學習指明了方向。在這次課程設(shè)計中,我鞏固所了學過的知識,能用匯編語言熟練地運用順序、選擇、循環(huán)三大結(jié)構(gòu),進一步掌握結(jié)構(gòu)體數(shù)組的使用,文件函數(shù)的使用,掌握了子程序的定義及調(diào)用。并在調(diào)試過程中不斷發(fā)現(xiàn)與改正錯誤,完善算法,改進用戶體驗等等。調(diào)試索然繁瑣而艱苦,但極大的促進了我編程能力的提高。由于自己目前能力有限,該程序還有諸多不足,感謝指正。感謝老師的悉心教導與細致的幫助。雖然c語言的課程與課程設(shè)計都已結(jié)束,但通過這次課程設(shè)計我也發(fā)現(xiàn)了差距,并將在未來努力學習,積極實踐,使自己能真正的掌握運用c語言。參考文獻28
- 溫馨提示:
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 110中國人民警察節(jié)(筑牢忠誠警魂感受別樣警彩)
- 2025正字當頭廉字入心爭當公安隊伍鐵軍
- XX國企干部警示教育片觀后感筑牢信仰之基堅守廉潔底線
- 2025做擔當時代大任的中國青年P(guān)PT青年思想教育微黨課
- 2025新年工作部署會圍繞六個干字提要求
- XX地區(qū)中小學期末考試經(jīng)驗總結(jié)(認真復習輕松應(yīng)考)
- 支部書記上黨課筑牢清廉信念為高質(zhì)量發(fā)展營造風清氣正的環(huán)境
- 冬季消防安全知識培訓冬季用電防火安全
- 2025加強政治引領(lǐng)(政治引領(lǐng)是現(xiàn)代政黨的重要功能)
- 主播直播培訓直播技巧與方法
- 2025六廉六進持續(xù)涵養(yǎng)良好政治生態(tài)
- 員工職業(yè)生涯規(guī)劃方案制定個人職業(yè)生涯規(guī)劃
- 2024年XX地區(qū)黨建引領(lǐng)鄉(xiāng)村振興工作總結(jié)
- XX中小學期末考試經(jīng)驗總結(jié)(認真復習輕松應(yīng)考)
- 幼兒園期末家長會長長的路慢慢地走