c語言課程設(shè)計報告職工工資管理系統(tǒng)_第1頁
c語言課程設(shè)計報告職工工資管理系統(tǒng)_第2頁
c語言課程設(shè)計報告職工工資管理系統(tǒng)_第3頁
c語言課程設(shè)計報告職工工資管理系統(tǒng)_第4頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

1、共享知識分享快樂卑微如螻蟻、堅強似大象共享知識分享快樂卑微如螻蟻、堅強似大象共享知識分享快樂課程設(shè)計報告課程設(shè)計報告題目:職工工資管理系統(tǒng)設(shè)計者:專業(yè)班級:學號:指導教師:所屬院系:2011年 6 月 29 日卑微如螻蟻、堅強似大象共享知識分享快樂一 設(shè)計需求說明一、職工工資管理系統(tǒng)功能設(shè)計要求1. 輸入記錄 :將每一個職工的姓名、 ID 號以及基本工資、職務(wù)工資、崗位津貼、醫(yī)療保險、公積金的數(shù)據(jù)作為一個記錄。 ?該軟件能建立一個新的數(shù)據(jù)文件或給已建立好的數(shù)據(jù)文件增加記錄。2. 顯示記錄 :根據(jù)用戶提供的記錄或者根據(jù)職工姓名顯示一個或幾個職工的各項工資和平均工資。3. 修改記錄 :可以對數(shù)據(jù)文

2、件的任意記錄的數(shù)據(jù)進行修改并在修改前后對記錄內(nèi)容進行顯示。4查找記錄 :可以對數(shù)據(jù)文件的任意記錄的數(shù)據(jù)進行查找并在查找前后對記錄內(nèi)容進行顯示。5. 刪除記錄 :可刪除數(shù)據(jù)文件中的任一記錄。6恢復(fù)記錄 :能恢復(fù)被刪除的任一記錄。7. 統(tǒng)計 : (A) 計算各項工資平均工資及總工資 , (B)?統(tǒng)計符合指定條件 (如職工工資前三項之和在 2000 元以上、 20001500 元、 15001000 元) 以內(nèi)的工資職工人數(shù)及占總職工人數(shù)的百分比。(C)按字符表格形式打印全部職工工資信息表及平均工資(?包括各項總的平均工資 )。8保存數(shù)據(jù)文件功能。9打開數(shù)據(jù)文件功能。卑微如螻蟻、堅強似大象共享知識分

3、享快樂經(jīng)過逐層逐塊、不斷細化、求精過程,編寫程序并進行測試、驗證,可以逐個模塊地分開調(diào)試,并通過文件包含或用工程文件的形式進行逐步聯(lián)合調(diào)試。程序運行結(jié)果如下表所示(記錄個數(shù)至少 8 個)。卑微如螻蟻、堅強似大象共享知識分享快樂二模塊設(shè)計分析系統(tǒng)功能模塊圖 :歡迎畫面主菜單保存與讀取輸顯查刪添修統(tǒng)退入示找除加改計出功功功功功功功程能能能能能能能序修改 ID 號修改姓名按 ID 號查找修改基本工資修改職務(wù)工資按姓名查找修改津貼修改醫(yī)保修改公積金卑微如螻蟻、堅強似大象共享知識分享快樂工作程序分析輸入:輸入職工工資資料通過結(jié)構(gòu)體的數(shù)組來進行操作,先頭定義數(shù)組 em ,先輸入需要輸入的職工人數(shù) m,然后

4、進入循環(huán), 每次循環(huán)將各項輸入結(jié)構(gòu)體數(shù)組對應(yīng)項的對應(yīng)成員中, 當循環(huán)次數(shù)等于人數(shù)時,完成全部員工的資料輸入,退出循環(huán)。同時將數(shù)據(jù)儲存在 ckerk_list 文件中并自動保存至磁盤。注:如首次使用,尚未輸入數(shù)據(jù),請先輸入數(shù)據(jù)。輸入的數(shù)據(jù)將自動保存。再次選擇輸入功能時原數(shù)據(jù)將被覆蓋。保存:將輸入的資料存入磁盤讀取文件 clerk_list ,若文件不存在,打印“打開失敗并退出。若存在,則通過循環(huán)語句將輸入到結(jié)構(gòu)體數(shù)組的數(shù)據(jù)逐個輸入磁盤。讀取:讀取磁盤中的資料打開文件 clerk_list ,若文件不存在,打印“打開失敗”并退出。若存在,讀取文件中的數(shù)據(jù),并返回職工人數(shù)。顯示:顯示職工工資資料先通

5、過讀取函數(shù)的返回值確定職工人數(shù) m,再通過循環(huán)將員工工資資料逐個打印, 當循環(huán)次數(shù)達到 m 時退出循環(huán)。其中總工資由程序計算,總工資 =基本工資 +職務(wù)工資 +津貼 -醫(yī)療保險 -公積金刪除:刪除某員工的資料打印員工資料并提示輸入要刪除職工的姓名,輸入后若該職工不存在則打印“查無此人”;若存在,則顯示該職工資料并詢問是否確定刪除。若確定,則刪除。刪除時,通過對比輸入的姓名與資料中的姓名做對比從而確定要刪除的項i,從第 i 項開始,將后一項的各成員的值賦給前一項各對應(yīng)的成員,完成對第i 項的刪除。卑微如螻蟻、堅強似大象共享知識分享快樂添加:添加新的員工資料而不覆蓋原有資料打印原有職工資料,詢問要

6、添加的職工人數(shù)并詢問是否確定添加。逐個逐項輸入員工信息,之后程序計算其總工資。完成后顯示“添加成功”,打印新的員工資料并自動保存。添加的方法為:定義一個相同類型的結(jié)構(gòu)體數(shù)組,將原有項復(fù)制后增添新的項,并保存新的數(shù)組。查找:按 ID 好查詢與按姓名查找員工資料根據(jù)提示輸入要查詢的 ID 號或姓名,程序通過循環(huán)語句將輸入的數(shù)字與以保存的結(jié)構(gòu)體數(shù)組中的數(shù)據(jù)對比,若相同,則打印“已找到”及該員工的資料;當循環(huán)次數(shù)等于人數(shù)時結(jié)束循環(huán),若至結(jié)束循環(huán)時也沒有找到相同的,則打印“查無此人” 。修改:修改特定員工的特定資料打印員工信息并提示輸入要修改資料的職工姓名。按提示確定要修改,確定要修改的項目,輸入要修改

7、成的結(jié)果并將該結(jié)果賦給對應(yīng)項的對應(yīng)成員, 完成對特定職工特定項目的修改。統(tǒng)計通過循環(huán)對結(jié)構(gòu)體數(shù)組中的每一項經(jīng)行統(tǒng)計,計算工資總額為,將工資總額除以人數(shù)計算出平均工資。根據(jù)每名職工的資料計算基本工資、職務(wù)工資、津貼之和在 1000-1500 圓 1500-2000 圓 2000 圓以上的員工占總員工的百分比。三源程序代碼(附各部分解釋)#include<stdio.h>#include<windows.h>#include<string.h>#include<conio.h>#define N 100struct clerk卑微如螻蟻、堅強似大象共

8、享知識分享快樂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();void search();void search_num();void search_name();void modify();void sta();void start(); /* 定義各函數(shù) */vo

9、id start() /開始界面system("cls");/清屏system("color 1E"); /設(shè)置文字顏色為黃色 背景色藍色 printf("nnnnnn");卑微如螻蟻、堅強似大象共享知識分享快樂printf("*");printf("*歡迎使用工資管理系統(tǒng)*");printf("*nnnnn");printf("tttt制作 : n");printf("tttt2011 年 6 月 nnnn");printf(&quo

10、t;ttt* 按任意鍵進入 *n");void menu() /菜單界面system("cls");system("color 1F");printf("* 菜單 *nn");printf(">>>>>>>>>>>>>>>>>>>>>>>>>1輸入nn");printf(">>>>>>>>>&g

11、t;>>>>>>>>>>>>>>>2顯示nn");printf(">>>>>>>>>>>>>>>>>>>>>>>>>3查找nn");printf(">>>>>>>>>>>>>>>>>>>>>&g

12、t;>>>4刪除nn");printf(">>>>>>>>>>>>>>>>>>>>>>>>>5添加nn");printf(">>>>>>>>>>>>>>>>>>>>>>>>>6修改nn");printf(">>

13、>>>>>>>>>>>>>>>>>>>>>>>7統(tǒng)計nn");printf(">>>>>>>>>>>>>>>>>>>>>>>>>8退出nn");printf(" 說明:* 如首次使用尚未輸入數(shù)據(jù)請先輸入數(shù)據(jù)n* 輸入的數(shù)據(jù)將自動保卑微如螻蟻、堅強似大象共享知識分享快樂存

14、n* 再次選擇輸入功能時原數(shù)據(jù)將被覆蓋nn");void input()/* 錄入函數(shù) */int i,m;system("cls");printf(" 職工人數(shù) (1-100):n");scanf("%d",&m);for (i=0;i<m;i+)printf(" 請輸入職工號 : ");scanf("%d",&emi.num);printf(" 請輸入姓名 :");scanf("%s",&);ge

15、tchar();printf(" 請輸入基本工資 :");scanf("%d",&emi.jbgz);printf(" 請輸入職務(wù)工資 :");scanf("%d",&emi.zwgz);printf(" 請輸入津貼 :");卑微如螻蟻、堅強似大象共享知識分享快樂scanf("%d",&emi.jt);printf(" 請輸入醫(yī)療保險 :");scanf("%d",&emi.yb);printf(&quo

16、t; 請輸入公積金 :");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",&

17、quot;wb")=NULL) /打開職工列表文件為空printf (" 打開失敗 n");exit(0);for (i=0;i<m;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)

18、最后剩余的數(shù)據(jù)輸出到磁盤文件中,并釋放文件指針和有關(guān)的緩沖區(qū)int load()/* 導入函數(shù)int 型*/FILE*fp;int i=0;if(fp=fopen("clerk_list","rb")=NULL)printf ("cannot open filen");exit(0);elsedofread(&emi,sizeof(struct clerk),1,fp); / 讀取i+;while(feof(fp)=0);/檢測流上的文件結(jié)束符fclose(fp);return(i-1);/返回人數(shù)卑微如螻蟻、堅強似大象共享知

19、識分享快樂void display()/* 瀏覽函數(shù) */int i,sum=0;int m=load();system("cls");printf(" 職工號姓名基本工資職務(wù)工資津貼醫(yī)療保險公積金總工資n");for(i=0;i<m;i+) /*m為輸入部分的職工人數(shù) */printf("n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total);sum+=emi.t

20、otal;/ 計算員工總工資之和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",name);for(button=1,i=0;button&a

21、mp;&i<m;i+)/ 主函數(shù)中確定 button=1 時各函數(shù)才可以被調(diào)用if(strcmp(,name)=0)/按員工姓名查找到某員工并調(diào)出其資料printf("n 此人原始記錄為 :n");/ 顯示選定員工的信息printf(" 職工號姓名基本工資職務(wù)工資津貼醫(yī)療保險公積金總工資n");printf("n%-6d%-6s%-8d%-8d%-8d%-8d%-8d%-8d",emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.tot

22、al);printf("n 確定刪除請按 1,不刪除請按 0n");scanf("%d",&n);if(n=1)for(j=i;j<m-1;j+)/ 從第 i 項開始 將后一項的各成員的值賦給前一項各對應(yīng)的成員完成對第 i 項的刪除strcpy(,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

23、;.button=0;卑微如螻蟻、堅強似大象共享知識分享快樂if(!button)/button=0 表明刪除已完成m=m-1;/總員工數(shù)減少一人elseprintf("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;

24、void add()/* 添加函數(shù) */FILE*fp;int n;int count=0;int i;卑微如螻蟻、堅強似大象共享知識分享快樂int m=load();printf("n 原來的職工信息 :n");display();printf("n");fp=fopen("emploee_list","a");printf(" 請輸入想增加的職工數(shù) :n");/ 確定要加入的職工數(shù) n scanf("%d",&n);for (i=m;i<(m+n);i+)/

25、 添加 n 名員工的信息printf("n 請輸入新增加職工的信息:n");printf(" 請輸入職工號 :");scanf("%d",&emi.num);printf("n");printf(" 請輸入姓名 :");scanf("%s",);getchar();printf(" 請輸入基本工資 :");scanf("t%d",&emi.jbgz);printf(" 請輸入職務(wù)工資 :&quo

26、t;);scanf("%d",&emi.zwgz);printf(" 請輸入津貼 :");scanf("%d",&emi.jt);printf(" 請輸入醫(yī)療保險 :");scanf("t%d",&emi.yb);printf(" 請輸入公積金 :");scanf("%d",&emi.gjj);emi.total=( emi.jbgz+ emi.zwgz + emi.jt- emi.yb- emi.gjj);/計算該員工總工

27、資printf("n");卑微如螻蟻、堅強似大象共享知識分享快樂count=count+1;printf(" 已增加的人數(shù) :n");printf("%dn",count);printf("n 添加成功 n");m=m+count;/將新添加員工的人數(shù)加到總員工人數(shù)中printf("n 增加后的所有職工信息 :n");printf("n");save(m);display();/ 顯示添加后的信息fclose(fp);void search()/*查詢函數(shù) */int t,b

28、utton;system("cls");/清屏doprintf("n 按 1 按工號查詢 n 按 2 按姓名查詢 n 按 3 回主菜單 n");scanf("%d",&t);if(t>=1&&t<=3)button=1;break;卑微如螻蟻、堅強似大象共享知識分享快樂elsebutton=0;printf(" 輸入錯誤 ");while(button=0);/ 回到查詢選擇項while(button=1)switch(t)/ 選擇查詢方式case 1:printf("

29、按工號查詢 n");search_num();break;case 2:printf("按姓名查詢 n");search_name();break;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;i<m;i+)if(a=emi.num)printf("

30、; 職工號姓名基本工資職務(wù)工資津貼醫(yī)療保險公積金總工資n");printf("n%-6d%-6s%-8d%-8d%-8d%-8d%-8d%-8d",emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total);break;if(i=m)printf("n 對不起 ,查無此人 n");printf("n");printf(" 返回查詢函數(shù)請按1,繼續(xù)查詢職工號請按2n");scanf("%d",&t);sw

31、itch(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;i<m;i+)if(strcmp(,name)=0)printf("n 已找到 ,其記錄為 :n");printf(" 職工號姓名基本工資職務(wù)工資津貼醫(yī)療保險公積金

32、總工資 n");printf("n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",emi.num,,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;c

33、ase 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("

34、;%s",name);for(button=1,i=0;button&&i<m;i+)if(strcmp(,name)=0)printf("n 此人原始記錄為 :n");printf(" 職工號姓名基本工資職務(wù)工資津貼醫(yī)療保險公積金總工資 n");printf("n%-6d%-6s%-8d%-8d%-8d%-8d%-8d%-8d",emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total);printf(&quo

35、t;n 確定 按 1 ; 不修改請按 0n");scanf("%d",&n);if(n=1)卑微如螻蟻、堅強似大象共享知識分享快樂printf("n 需要進行修改的選項 n 1.職工號 2.姓名3.基本工資4.職務(wù)工資5.津貼 6.醫(yī)療保險7.公積金8.返回上層 n");printf(" 請選擇序號 1-8:n");scanf("%d",&c);if(c>8|c<1)printf("n 選擇錯誤 ,請重新選擇 !n");button=0;if(button=

36、1)printf("n 查無此人 n");doswitch(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(,name);break;case 3:printf("

37、;基本工資改為 : ");getchar();scanf("%d",&jbgz);卑微如螻蟻、堅強似大象共享知識分享快樂emi-1.jbgz=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-e

38、mi-1.yb-emi-1.gjj);break;case 5:printf("津貼改為 : ");scanf("%d",&jt);emi-1.jt=jt;emi-1.total=(emi-1.jbgz+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

39、.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-emi-1.gjj);break;case 8:modify();break;卑微如螻蟻、堅強似大象共享知識分享快樂printf("n");printf("nn 確定修改 請按 1 ; 重新修改 請按 2: n"); scanf("%d&q

40、uot;,&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 sum=0;int a=0,b=0,c=0;卑微如螻蟻、堅強似大象共享知識分享快樂int m

41、=load();system("cls");/清屏函數(shù)for(i=0;i<m;i+) /*m為輸入部分的職工人數(shù) */sum+=emi.total;if(emi.total)<=1500&&emi.total>=1000)a+;if(emi.total>1500&&emi.total<=2000)b+;if(emi.total>2000)c+;printf("nn 工資總額為: %dn",sum);printf(" 平均工資為: %dn",sum/m);printf("n 基本工資、職務(wù)工資、津貼之和n"

溫馨提示

  • 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

提交評論