c語(yǔ)言課程設(shè)計(jì)報(bào)告-職工工資管理系統(tǒng)_第1頁(yè)
c語(yǔ)言課程設(shè)計(jì)報(bào)告-職工工資管理系統(tǒng)_第2頁(yè)
c語(yǔ)言課程設(shè)計(jì)報(bào)告-職工工資管理系統(tǒng)_第3頁(yè)
c語(yǔ)言課程設(shè)計(jì)報(bào)告-職工工資管理系統(tǒng)_第4頁(yè)
c語(yǔ)言課程設(shè)計(jì)報(bào)告-職工工資管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、c 語(yǔ)言課程設(shè)計(jì)報(bào)告 - 職工工資管理系統(tǒng)課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)報(bào)告題目:職工工資管理系統(tǒng)設(shè) 計(jì) 者:專業(yè)班級(jí):學(xué)號(hào):指導(dǎo)教師:所屬院系:一 設(shè)計(jì)需求說(shuō)明一、職工工資管理系統(tǒng)功能設(shè)計(jì)要求1. 輸入記錄 :將每一個(gè)職工的姓名、 id 號(hào)以及基本工資、職務(wù)工資、崗位津貼、醫(yī)療保險(xiǎn)、公積金的數(shù)據(jù)作為一個(gè)記錄。 ?該軟件能建立一個(gè)新的數(shù)據(jù)文件或給已建立好的數(shù)據(jù)文件增加記錄。2. 顯示記錄 :根據(jù)用戶提供的記錄或者根據(jù)職工姓名顯示一個(gè)或幾個(gè)職工的各項(xiàng)工資和平均工資。3. 修改記錄 :可以對(duì)數(shù)據(jù)文件的任意記錄的數(shù)據(jù)進(jìn)行修改并在修改前后3對(duì)記錄內(nèi)容進(jìn)行顯示。4查找記錄 : 可以對(duì)數(shù)據(jù)文件的任意記錄的數(shù)據(jù)進(jìn)行查

2、找并在查找前后對(duì)記錄內(nèi)容進(jìn)行顯示。5. 刪除記錄 :可刪除數(shù)據(jù)文件中的任一記錄。6恢復(fù)記錄 :能恢復(fù)被刪除的任一記錄。7. 統(tǒng)計(jì) : (a) 計(jì)算各項(xiàng)工資平均工資及總工資 , (b)?統(tǒng)計(jì)符合指定條件(如職工工資前三項(xiàng)之和在2000 元以上、 20001500 元、 15001000元 ) 以內(nèi)的工資職工人數(shù)及占總職工人數(shù)的百分比。 (c)按字符表格形式打印全部職工工資信息表及平均工資 (?包括各項(xiàng)總的平均工資)。8保存數(shù)據(jù)文件功能。9打開(kāi)數(shù)據(jù)文件功能。經(jīng)過(guò)逐層逐塊、不斷細(xì)化、求精過(guò)程,編寫(xiě)程序并進(jìn)行測(cè)試、驗(yàn)證,可以逐個(gè)模塊地分開(kāi)調(diào)試,并通過(guò)文件包含或用工程文件的形式進(jìn)行逐步聯(lián)合調(diào)試。程序運(yùn)行

3、結(jié)果如下表所示(記錄個(gè)數(shù)至少 8 個(gè))。4二模塊設(shè)計(jì)分析系統(tǒng)功能模塊圖 :5歡迎畫(huà)面主菜單保存與讀取輸顯查刪添修統(tǒng)退入示找除加改計(jì)出功功功功功功功程能能能能能能能序按id修 改修 改修改基修改職按姓修 改修 改修 改工作程序分析輸入:輸入職工工資資料通過(guò)結(jié)構(gòu)體的數(shù)組來(lái)進(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)保存6至磁盤(pán)。注:如首次使用,尚未輸入數(shù)據(jù),請(qǐng)先輸入數(shù)據(jù)。輸入的數(shù)據(jù)將自動(dòng)保存。再次選擇輸入功能時(shí)原數(shù)據(jù)

4、將被覆蓋。保存:將輸入的資料存入磁盤(pán)讀取文件 clerk_list ,若文件不存在,打印“打開(kāi)失敗并退出。若存在,則通過(guò)循環(huán)語(yǔ)句將輸入到結(jié)構(gòu)體數(shù)組的數(shù)據(jù)逐個(gè)輸入磁盤(pán)。讀取:讀取磁盤(pán)中的資料打開(kāi)文件 clerk_list ,若文件不存在,打印“打開(kāi)失敗”并退出。若存在,讀取文件中的數(shù)據(jù),并返回職工人數(shù)。顯示:顯示職工工資資料先通過(guò)讀取函數(shù)的返回值確定職工人數(shù) m,再通過(guò)循環(huán)將員工工資資料逐個(gè)打印, 當(dāng)循環(huán)次數(shù)達(dá)到 m 時(shí)退出循環(huán)。其中總工資由程序計(jì)算,總工資 =基本工資 +職務(wù)工資 +津貼 -醫(yī)療保險(xiǎn) -公積金刪除:刪除某員工的資料打印員工資料并提示輸入要?jiǎng)h除職工的姓名,輸入后若該職工不存在則打

5、印“查無(wú)此人”;若存在,則顯示該職工資料并詢問(wèn)是否確定刪除。若確定,則刪除。刪除時(shí),通過(guò)對(duì)比輸入的姓名與資料中的姓名做對(duì)比從而確定要?jiǎng)h除的項(xiàng) i,從第 i 項(xiàng)開(kāi)始,將后一項(xiàng)的各成員的值賦給前一項(xiàng)各對(duì)應(yīng)的成員,完成對(duì)第 i 項(xiàng)的刪除。添加:添加新的員工資料而不覆蓋原有資料打印原有職工資料,詢問(wèn)要添加的職工人數(shù)并詢問(wèn)是否確定添加。逐個(gè)逐項(xiàng)輸入員工信息,之后程序計(jì)算其總工資。完成后顯示“添加成功” ,打印新的員工資料并自動(dòng)保存。添加的方法為: 定義一個(gè)相同類型的結(jié)構(gòu)體數(shù)組, 將原有項(xiàng)復(fù)制后增添新的項(xiàng), 并保存新的數(shù)組。查找:按 id 好查詢與按姓名查找員工資料根據(jù)提示輸入要查詢的 id 號(hào)或姓名,程

6、序通過(guò)循環(huán)語(yǔ)句將輸入的數(shù)字與以保存的結(jié)構(gòu)體數(shù)組中的數(shù)據(jù)對(duì)比,若相同,則打印“已找到”及該員工的資料;當(dāng)循環(huán)次數(shù)等于人數(shù)7時(shí)結(jié)束循環(huán),若至結(jié)束循環(huán)時(shí)也沒(méi)有找到相同的,則打印“查無(wú)此人”。修改:修改特定員工的特定資料打印員工信息并提示輸入要修改資料的職工姓名。按提示確定要修改,確定要修改的項(xiàng)目,輸入要修改成的結(jié)果并將該結(jié)果賦給對(duì)應(yīng)項(xiàng)的對(duì)應(yīng)成員,完成對(duì)特定職工特定項(xiàng)目的修改。統(tǒng)計(jì)通過(guò)循環(huán)對(duì)結(jié)構(gòu)體數(shù)組中的每一項(xiàng)經(jīng)行統(tǒng)計(jì),計(jì)算工資總額為,將工資總額除以人數(shù)計(jì)算出平均工資。根據(jù)每名職工的資料計(jì)算基本工資、職務(wù)工資、津貼之和在1000-1500圓 1500-2000 圓 2000 圓以上的員工占總員工的百分

7、比。三源程序代碼(附各部分解釋)#include#include#include#include#define n 100struct clerkint num;/id 號(hào)char name20;/姓名int jbgz;/基本工資int zwgz;/職務(wù)工資int jt;/ 津貼int yb;/醫(yī)療保險(xiǎn)int gjj;/公積金 /int total;/總工資8em100;void menu();void input();void save(int);void display();void del();void add();void search();void search_num();void

8、 search_name();void modify();void sta();void start(); /* 定義各函數(shù) */void start() / 開(kāi)始界面system(cls);/ 清屏system(color 1e); / 設(shè)置文字顏色為黃色背景色藍(lán)色printf(nnnnnn);printf(*);printf(*歡迎使用工資管理系統(tǒng)*);printf(*nnnnn);printf(tttt制作 : n);printf(tttt2011年 6 月 nnnn);9printf(ttt* 按任意鍵進(jìn)入 *n);void menu() / 菜單界面system(cls);syste

9、m(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( 說(shuō)明: * 如首次使用尚未輸入數(shù)據(jù)請(qǐng)先輸入數(shù)據(jù)n* 輸入的數(shù)據(jù)將自動(dòng)保存 n* 再次選擇輸入功能時(shí)原數(shù)據(jù)將被覆蓋nn);void input()/* 錄入函數(shù) */10int i,m;system(cls);printf( 職工人數(shù) (1-100):n);scanf(%d,&m);for (i=0;i

10、m;i+)printf( 請(qǐng)輸入職工號(hào) : );scanf(%d,&emi.num);printf( 請(qǐng)輸入姓名 :);scanf(%s,&);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);printf( 請(qǐng)輸入公積金 :);scanf(%d,&emi.gjj);11emi.total=(emi.jbgz)+

11、(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 是指針,用來(lái)指向file 類型的對(duì)象if (fp=fopen(clerk_list,wb)=null) /打開(kāi)職工列表文件為空printf ( 打開(kāi)失敗 n);exit(0);for (i=0;im;i+) /*將內(nèi)存中職工的信息輸出到磁盤(pán)文件中去*/if (fwrite(&emi,sizeof(struct c

12、lerk),1,fp)!=1)/寫(xiě)入數(shù)據(jù)塊&emi :是要輸出數(shù)據(jù)的地址sizeof(struct clerk) :獲取一個(gè)單體的長(zhǎng)度1:數(shù)據(jù)項(xiàng)的個(gè)數(shù)fp :目標(biāo)文件指針printf( 文件讀寫(xiě)錯(cuò)誤 n);fclose(fp);/緩沖區(qū)內(nèi)最后剩余的數(shù)據(jù)輸出到磁盤(pán)文件中,并釋放文件指針和有關(guān)的緩沖區(qū)int load()/* 導(dǎo)入函數(shù)int 型 */12file*fp;int i=0;if(fp=fopen(clerk_list,rb)=null)printf (cannot open filen);exit(0);elsedofread(&emi,sizeof(struct clerk),1,f

13、p); /讀取i+;while(feof(fp)=0);/檢測(cè)流上的文件結(jié)束符fclose(fp);return(i-1);/ 返回人數(shù)void display()/* 瀏覽函數(shù) */int i,sum=0;int m=load();13system(cls);printf( 職工號(hào)姓名基本工資職務(wù)工資津貼醫(yī)療保險(xiǎn)公積金總工資 n);for(i=0;im;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.

14、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原來(lái)的職工信息 :n);display(); / 顯示刪除前的員工信息printf(n);printf( 按姓名刪除 :n);scanf(%s,name);for(button=1,i=0;button&im;i+)/主函數(shù)中確定 button=1 時(shí)各函數(shù)才可以被調(diào)用if(strcmp(,name)=0)/ 按員

15、工姓名查找到某員工并調(diào)出其資料14printf(n此人原始記錄為 :n);/ 顯示選定員工的信息printf( 職工號(hào)姓名基本工資職務(wù)工資津貼醫(yī)療保險(xiǎn)公積金總工資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(n確定刪除請(qǐng)按 1,不刪除請(qǐng)按 0n);scanf(%d,&n);if(n=1)for(j=i;jm-1;j+)/從第 i 項(xiàng)開(kāi)始將后一項(xiàng)的各成員的值賦給前一項(xiàng)各對(duì)應(yīng)的成員完成對(duì)第 i 項(xiàng)的刪除str

16、cpy(,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)/button=0表明刪除已完成m=m-1;/ 總員工數(shù)減少一人elseprintf(n查無(wú)此人 !n);printf(n刪除后的所有職工信息:n);15save(m);/ 調(diào)用保存函數(shù)display();/調(diào)用瀏覽函數(shù)printf(n繼續(xù)刪除請(qǐng)按

17、 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原來(lái)的職工信息 :n);display();printf(n);fp=fopen(emploee_list,a);printf( 請(qǐng)輸入想增加的職工數(shù):n);/ 確定要加入的職工數(shù)nscanf(%d,&n);16for (i=m;i=1&t=3)button=1;break;elsebu

18、tton=0;printf( 輸入錯(cuò)誤 );while(button=0);/ 回到查詢選擇項(xiàng)18while(button=1)switch(t)/ 選擇查詢方式case 1:printf( 按工號(hào)查詢 n);search_num();break;case 2:printf( 按姓名查詢 n);search_name();break;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;

19、i+)if(a=emi.num)printf( 職工號(hào)姓名基本工資職務(wù)工資津貼醫(yī)療保險(xiǎn)公積金總工資n);printf(n%-6d%-6s%-8d%-8d%-8d%-8d%-8d%-8d19,emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total);break;if(i=m)printf(n對(duì)不起 ,查無(wú)此人 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;defa

20、ult: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(,name)=0)printf(n已找到 ,其記錄為 :n);printf( 職工號(hào)姓名基本工資職務(wù)工資津貼醫(yī)療保險(xiǎn)公積金總20工資 n);printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ,emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gj

21、j,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;case 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;21int m=load();system(cls);printf(n原來(lái)的職工信息 :n);di

22、splay();printf(n);printf( 請(qǐng)輸入要修改的職工的姓名:n);scanf(%s,name);for(button=1,i=0;button&i8|c1)printf(n選擇錯(cuò)誤 ,請(qǐng)重新選擇 !n);button=0;22if(button=1)printf(n查無(wú)此人 n);doswitch(c)/* 因?yàn)楫?dāng)找到第i 個(gè)職工時(shí) ,for 語(yǔ)句后 i 自加了 1,所以下面的應(yīng)該把改后的信息賦值給第i-1 個(gè)人 */case 1:printf( 職工號(hào)改為 : );scanf(%d,&num);emi-1.num=num;break;case 2:printf( 姓名改為

23、: );scanf(%s,name);strcpy(,name);break;case 3:printf( 基本工資改為 : );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-emi-1.yb-2

24、3emi-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ī)療保險(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);

25、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 確定修改 請(qǐng)按 1 ; 重新修改 請(qǐng)按 2: n); scanf(%d,&b);while(b=2);printf(n修改后的所有職工信息:n);24printf(n);save(m);display();printf(n按 1 繼續(xù)修改,不再修改請(qǐng)按 0n);scanf(%d,&t);switch(t)case 1:modify();break

26、;case 0:break;default :break;void sta()/ 統(tǒng)計(jì)函數(shù)int i;int 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 圓的員工占總員工的百分之 %dn,b*100/m); printf( 在 2000 圓以上的員工占總員工的百分之 %dn,c*100/m);printf(nn按任意鍵繼續(xù) );getch();menu();void main()/ 主函

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論