c語言課程設計報告職工工資管理系統(tǒng).doc

上傳人:good****022 文檔編號:116492256 上傳時間:2022-07-05 格式:DOC 頁數:28 大?。?54KB
收藏 版權申訴 舉報 下載
c語言課程設計報告職工工資管理系統(tǒng).doc_第1頁
第1頁 / 共28頁
c語言課程設計報告職工工資管理系統(tǒng).doc_第2頁
第2頁 / 共28頁
c語言課程設計報告職工工資管理系統(tǒng).doc_第3頁
第3頁 / 共28頁

下載文檔到電腦,查找使用更方便

13 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《c語言課程設計報告職工工資管理系統(tǒng).doc》由會員分享,可在線閱讀,更多相關《c語言課程設計報告職工工資管理系統(tǒng).doc(28頁珍藏版)》請在裝配圖網上搜索。

1、 課程設計報告C+課程設計報告題 目:人事管理系統(tǒng)設 計 者: 專業(yè)班級: 學 號: 指導教師: 二模塊設計分析系統(tǒng)功能模塊圖:歡迎畫面主菜單顯示功能查找功能刪除功能輸入功能保存與讀取退出程序添加功能修改功能統(tǒng)計功能按ID號查找按姓名查找修改ID號修改姓名修改職務工資修改基本工資修改醫(yī)保修改津貼修改公積金 工作程序分析輸入:輸入職工工資資料 通過結構體的數組來進行操作,先頭定義數組em,先輸入需要輸入的職工人數m,然后進入循環(huán),每次循環(huán)將各項輸入結構體數組對應項的對應成員中,當循環(huán)次數等于人數時,完成全部員工的資料輸入,退出循環(huán)。同時將數據儲存在ckerk_list文件中并自動保存至磁盤。注:

2、如首次使用,尚未輸入數據,請先輸入數據。輸入的數據將自動保存。再次選擇輸入功能時原數據將被覆蓋。保存:將輸入的資料存入磁盤 讀取文件clerk_list,若文件不存在,打印“打開失敗并退出。若存在,則通過循環(huán)語句將輸入到結構體數組的數據逐個輸入磁盤。 讀?。鹤x取磁盤中的資料 打開文件clerk_list ,若文件不存在,打印“打開失敗”并退出。若存在,讀取文件中的數據,并返回職工人數。 顯示:顯示職工工資資料 先通過讀取函數的返回值確定職工人數m,再通過循環(huán)將員工工資資料逐個打印,當循環(huán)次數達到m時退出循環(huán)。其中總工資由程序計算,總工資=基本工資+職務工資+津貼-醫(yī)療保險-公積金刪除:刪除某員

3、工的資料 打印員工資料并提示輸入要刪除職工的姓名,輸入后若該職工不存在則打印“查無此人”;若存在,則顯示該職工資料并詢問是否確定刪除。若確定,則刪除。刪除時,通過對比輸入的姓名與資料中的姓名做對比從而確定要刪除的項i,從第i項開始,將后一項的各成員的值賦給前一項各對應的成員,完成對第i項的刪除。添加:添加新的員工資料而不覆蓋原有資料打印原有職工資料,詢問要添加的職工人數并詢問是否確定添加。逐個逐項輸入員工信息,之后程序計算其總工資。完成后顯示“添加成功”,打印新的員工資料并自動保存。添加的方法為:定義一個相同類型的結構體數組,將原有項復制后增添新的項,并保存新的數組。查找:按ID好查詢與按姓名

4、查找員工資料根據提示輸入要查詢的ID號或姓名,程序通過循環(huán)語句將輸入的數字與以保存的結構體數組中的數據對比,若相同,則打印“已找到”及該員工的資料;當循環(huán)次數等于人數時結束循環(huán),若至結束循環(huán)時也沒有找到相同的,則打印“查無此人”。修改:修改特定員工的特定資料打印員工信息并提示輸入要修改資料的職工姓名。按提示確定要修改,確定要修改的項目,輸入要修改成的結果并將該結果賦給對應項的對應成員,完成對特定職工特定項目的修改。統(tǒng)計 通過循環(huán)對結構體數組中的每一項經行統(tǒng)計,計算工資總額為,將工資總額除以人數計算出平均工資。根據每名職工的資料計算基本工資、職務工資、津貼之和在1000-1500圓1500-20

5、00圓2000圓以上的員工占總員工的百分比。三源程序代碼(附各部分解釋)#include#include#include#include#define N 100struct clerk int num; /ID號 char name20; /姓名 int jbgz; /基本工資 int zwgz; /職務工資 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(); /*定義各函數*/void start() /開始界面 system(cls);/清屏 system(color 1E); /設置文字顏色為黃色 背景色藍色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(說明:*如首次使用 尚未輸入數據 請先輸入數據 n *輸入的數據將自動保存 n *再次選擇輸入功能時原數據將被覆蓋nn);void input() /*錄入函數*/ int i,m; system(cl

8、s); printf(職工人數(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(請輸入職務工資: ); 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);/保存職工人數mvoid save(int m) /*保存文件函數*/ int i; FILE*fp; /聲明fp是指針,用來指向FILE類型的對象 if (fp=fopen(clerk_list,wb)=NULL) /打開職工列表文件為空 printf (打開失敗n); exit(0); for (i=0;

10、im;i+) /*將內存中職工的信息輸出到磁盤文件中去*/ if (fwrite(&emi,sizeof(struct clerk),1,fp)!=1)/寫入數據塊 &emi:是要輸出數據的地址 sizeof(struct clerk):獲取一個單體的長度 1:數據項的個數 fp:目標文件指針 printf(文件讀寫錯誤n); fclose(fp);/ 緩沖區(qū)內最后剩余的數據輸出到磁盤文件中,并釋放文件指針和有關的緩沖區(qū)int load() /*導入函數 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); /檢測流上的文件結束符 fclose(fp); return(i-1);/返回人數void display() /*瀏覽函數*/ int i,sum=0; int m=load(); system(cls); printf(職工號 姓名 基本工資 職務工資 津貼 醫(yī)療保險 公積金 總工資 n); for(i=0;im;i+) /*m為輸入部分的職工人數*/ 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() /*刪除函數 */ 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+)/主函數中確定button=1時各函數才可以被調用 if(strcmp(emi.name,name)=0)/按員工姓名查找到某員工 并調出其資料 printf(n此人原始記錄為:n);/顯示選定員工的信息 printf(職工號 姓名 基本工資 職務工資 津貼 醫(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項開始 將后一項的各成員的值賦給前一項各對應的成員 完成對第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;/總員工數減少一人 else printf(n查無此人!n); printf(n 刪除后的所有職工信息:n); save(m); /調用保存函數 display(); /調用瀏覽函數 printf(n繼續(xù)刪除請按1,不再刪除請按0n); scanf(%d,&t); switch(t) case 1:del();break; case 0:break; default :break; void add()/*添加函數*/ 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(請輸入想增加的職工數:n);/確定要加入的職工數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(職工號 姓名 基本工資 職務工資 津貼 醫(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(返回查詢函數請按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(職工號 姓名 基本工資 職務工資 津貼 醫(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() /*修改函數*/ 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,所以下面的應該把改后的信息賦值給第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(職務工資改為: ); 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)計函數 int i; int

25、sum=0; int a=0,b=0,c=0; int m=load();system(cls);/清屏函數 for(i=0;im;i+) /*m為輸入部分的職工人數*/ sum+=emi.total; if(emi.total)=1000) a+; if(emi.total1500&emi.total2000) c+;printf(nn工資總額為:%dn,sum);printf(平均工資為:%dn,sum/m);printf(n基本工資、職務工資、津貼之和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()/主函數 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(); /*調用菜單函數*/ printf(功能選擇(1-8):n

28、); scanf(%d,&n); printf(n); 運行結果及截圖歡迎畫面菜單輸入功能顯示功能統(tǒng)計功能刪除功能添加功能修改功能心得體會通過這兩周的c語言課程設計,我加深了對c語言程序設計的理解,使自己的操作更加熟練,發(fā)現(xiàn)了自己的不足,為自己今后的繼續(xù)學習指明了方向。在這次課程設計中,我鞏固所了學過的知識,能用匯編語言熟練地運用順序、選擇、循環(huán)三大結構,進一步掌握結構體數組的使用,文件函數的使用,掌握了子程序的定義及調用。并在調試過程中不斷發(fā)現(xiàn)與改正錯誤,完善算法,改進用戶體驗等等。調試索然繁瑣而艱苦,但極大的促進了我編程能力的提高。由于自己目前能力有限,該程序還有諸多不足,感謝指正。感謝老師的悉心教導與細致的幫助。雖然c語言的課程與課程設計都已結束,但通過這次課程設計我也發(fā)現(xiàn)了差距,并將在未來努力學習,積極實踐,使自己能真正的掌握運用c語言。參考文獻28

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

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!