工資信息管理系統(tǒng)C語言設(shè)計(jì)_第1頁
工資信息管理系統(tǒng)C語言設(shè)計(jì)_第2頁
工資信息管理系統(tǒng)C語言設(shè)計(jì)_第3頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C 語言課程實(shí)習(xí)報(bào)告學(xué)院:工程學(xué)院專業(yè):巖土工程班級(jí):052052-33學(xué)號(hào):20051002623姓 名: 劉恒第一題:工資信息管理系統(tǒng)一'題目要求工資信息管理系統(tǒng)【要求】該系統(tǒng)能夠?qū)崿F(xiàn)工資信息管理系統(tǒng)包括錄入,瀏覽,查詢,統(tǒng)計(jì)等功能.其 中錄入功能要求能夠添加新地工資信息到文件;瀏覽功能要求能按照工資卡號(hào),姓名分類瀏覽,提供分屏顯示;有排序功能,排序后按照工資卡號(hào)升序或?qū)嵃l(fā)工資 降序輸出;查詢功能要求能夠按照工資卡號(hào) ,姓名查詢;統(tǒng)計(jì)功能要求能夠按照 月份累計(jì)統(tǒng)計(jì)某職工在某時(shí)間段實(shí)發(fā)工資總金額 (1)文件中一行數(shù)據(jù)對(duì)應(yīng)一個(gè)職工工資信息;(2)工資信息地?cái)?shù)據(jù)結(jié)構(gòu)采用結(jié)構(gòu)體數(shù)組,一個(gè)數(shù)

2、組元素對(duì)應(yīng)一條工資單記錄;(3)工資單信息包括工資卡號(hào),姓名月份,應(yīng)發(fā)工資,水費(fèi),電費(fèi),稅金,實(shí)發(fā)工資等;(4)實(shí)發(fā)工資=應(yīng)發(fā)工資水費(fèi)電費(fèi)稅金,其中稅金計(jì)算方法為: 應(yīng)發(fā)工資V 800元,稅金=0; 800元V應(yīng)發(fā)工資V 1400元,稅金=(應(yīng)發(fā)工資800) *5%; 應(yīng)發(fā)工資1400元,稅金=(應(yīng)發(fā)工資1400) *10 % 二 '需求分析根據(jù)題目要求,由于工資信息是以文本文件地方式存放在文件里地 ,所以應(yīng)提 供文件地輸入,輸出等操作;在程序中需要知道職工地工資信息,應(yīng)提供錄入,瀏覽, 查詢,排序,統(tǒng)計(jì)等操作功能;另外,還應(yīng)提供鍵盤式選擇菜單實(shí)現(xiàn)功能選擇 三'總體設(shè)計(jì)通過分析

3、整個(gè)系統(tǒng),根據(jù)上面地需求分析,可以將這個(gè)系統(tǒng)地設(shè)計(jì)分為如下幾個(gè)模塊: 工資信息管理系數(shù)據(jù)輸入數(shù)據(jù)添加r數(shù)據(jù)瀏覽r 數(shù)據(jù)查找工資排序工資統(tǒng)計(jì)<J _圖一系統(tǒng)功能模塊圖四'詳細(xì)設(shè)計(jì)1.主函數(shù)主函數(shù)一般設(shè)計(jì)得比較簡潔,只提供輸入,處理和輸出部分地函數(shù)調(diào)用其中各 功能模塊用菜單方式選擇.【流程圖】如下圖所示:圖二主函數(shù)流程圖#in clude<stdio.h>#in clude<stdlib.h>#defi ne N 150void en ter();void stat();void order();void menu();void stat();void men

4、u()int n ,w;system("cls");【程序】do#in clude<math.h>#in clude<alloc.h>search();void add(); void browse()void num_ order();void T_wage_order();void readfiles();int allwage();puts("tt*MENU*nn")puts("tttt1.Enter new data");puts("tttt2.Addition data");put

5、s("tttt3.Browse all");puts("tttt4.Search data");puts("tttt5.order data");puts("tttt6.Stat by mon th");puts("tttt7.Exit");puts("nntt* *n");prin tf("Choice your number(1-7): bb");/* 對(duì)選擇地?cái)?shù)字進(jìn)行判斷*/scan f("%d",&n);if(n<

6、 1| n>7) w=1;getchar(); while(w=1);else w=0;switch( n)case 1:e nter();break;case 2:add();break;case 3:browse();break;case 4:search();break;case 5:order();break;case 6:stat();break;case 7:exit(0); /*輸入模塊*/*追加模塊*/*瀏覽模塊*/*查找模塊*/*排序模塊*/*統(tǒng)計(jì)模塊*/*退出*/void save(); int load(); void in put(); void prin tf_

7、face(); void printf_on e();void prin tf_back(); int T_wage();/*主函數(shù) */mai n() men u(); 2.各功能模塊設(shè)計(jì)輸入模塊【數(shù)據(jù)結(jié)構(gòu)】【分析】看各數(shù)據(jù)信息,工資卡號(hào)、姓名是字符型,可以用字符型數(shù)組;工資應(yīng)采 用實(shí)型數(shù)據(jù)信息應(yīng)放在文件中struct in fowagechar nu m15;char n ame20;int mon th;int S_wage;int water_rate;int electric_charge;int tax;int T_wage;IMN;/*IMN中每個(gè)元組元素對(duì)應(yīng)一個(gè)職工*/【注意】

8、:N為職工人數(shù),應(yīng)采用宏定義 # define N 150.【流程圖】:圖三輸入模塊流程圖程序:void enter()/*輸入模塊*/int i,n;prin tf("How many in formatio ns(0-%d)?:",N-1);scanf("%d",&n);/*要輸入地記錄個(gè)數(shù)*/prin tf("n En ter data nownn ”);for (i=0;i< n;i+)pri ntf("n In put %dth in fo.n",i+1);input(i);/*調(diào)用輸入函數(shù)*/if(

9、i!=O)save(n);/* 調(diào)用保存函數(shù) */prin tf_back();/* 一個(gè)任務(wù)結(jié)束時(shí)讓用戶選擇是瀏覽還是返回*/.追加模塊需求分析:該模塊地功能是添加新地工資信息,從鍵盤輸入并逐條寫到原來地輸入文件中注意采用追加不是覆蓋地方式 流程圖四追加模塊流程圖程序:void add()/* 追加模塊 */int i,k,n,m;FILE *fp;n=load();printf("How many IMloyees are you want to add(0-%d)?:",N-1-n);scan f("%d", &m);/*輸入要追加地記錄個(gè)

10、數(shù)*/k=n+m;for(i=n ;i<k;i+)pri ntf("n In put %dth in fo.n",i-n+1);input(i);/*調(diào)用輸入函數(shù)*/if(fp=fopen("infowage.txt","ab")=NULL)/* 以 ab 方式打開文件,追加保存 */pri ntf("Ca nnot ope n filen");for(i=0;i <n ;i+)if(fwrite(&IMi,sizeof(struct infowage),1,fp)!=1)/* 輸出到文件 */

11、prin tf("file write error'n");fclose(fp);prin tf_back();/* 一個(gè)任務(wù)結(jié)束時(shí)讓用戶選擇是瀏覽還是返回*/.瀏覽模塊需求分析該模塊地功能是顯示所有職工記錄信息流程圖圖五瀏覽模塊流程圖程序:void browse()int i,k, n;n=load();prin tf_face();for(i=0;i <n ;i+)if(i!=0)&&(i%5=0)printf("nnPass any key to continue ."); getch();puts("nn

12、”);printf_on e(i);prin tf("tThere are %d in fo.n",n);/*瀏覽模塊*/*加載記錄*/*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目函數(shù) */*目地是分屏顯示*/*調(diào)用顯示一個(gè)記錄地函數(shù)*/prin tf("nPass any key to back .");getch();/*按任意鍵*/menu();.查找模塊需求分析:該模塊地功能是根據(jù)輸入地職工姓名或者工資卡號(hào)查找對(duì)應(yīng)地記錄流程圖查找模塊圖六:查找模塊流程圖程序:search()/*查找模塊*/int k=0; int w1,w2;dopri ntf("nn W

13、hich way do you choose?' n'tl.By name 2.By num bb"); scan f("%d",&w1);if(w1=1) name_search();/* 姓名查找 */else num_search();/* 卡號(hào)查找 */if(k!=-1)pri ntf("nnSuccessful.A_A.");prin tf("nnWhat do you want to do?nt1.Search ano ther2.Back bb");scan f("%d&quo

14、t;,&w2); while(w2=1);menu(); name_search()/* 姓名查找 */int i,n ,k,w=1;struct in fowage e;n=load();dok=-1;prin tf("nnEn ter n ame that you want to search! Name:");scanf("%s",);/* 輸入要找地名字 */prin tf_face();/*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目函數(shù)*/for(i=0;i<n;i+)/* 查找數(shù)據(jù) */if(strcmp(e. name,IMi. nam

15、e)=0)k=i;/*找到記錄*/printf_on e(k); break;/*調(diào)用顯示一個(gè)記錄地函數(shù)*/if(k=-1)pri ntf("ninNo exist!"); while(k=-1 &&w=1); num_search()/* 卡號(hào)查找 */int i,k ,n, w=1;struct in fowage s;n=load();dok=-1;prin tf("nnEn ter num that you want to search!NO.:");sea nf("%s",s .nu m);prin tf_f

16、aee();for(i=0;i <n ;i+)if(stremp(s. nu m,IMi. nu m)=0)k=i;printf_on e(k);break;if(k=-1)/*輸入要找地號(hào)碼*/*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目函數(shù)*/*查找數(shù)據(jù)*/*找到記錄*/*調(diào)用顯示一個(gè)記錄地函數(shù) */printf("ninNo exist!"); while(k=-1 &&w=1);(5) .排序模塊.需求分析:該模塊地功能是將職工按照卡號(hào)升序或者實(shí)發(fā)工資降序排列輸出【流程圖】:圖七:排序模塊流程圖【程序】:void order()/* 排序模塊 */int k=0;

17、int w1,w2;dopri ntf("nn Which way do you ehoose?n'tl.By num2.By T_wage bb");scan f("%d",&w1);if(w1=1) num_order();/* 按照卡號(hào)排序 */else T_wage_order();/*按照實(shí)發(fā)工資排序*/if(k!=-1)pri ntf("nnSueeessful.A_A.");prin tf("nnWhat do you want to do?nt1.order ano ther2.Baek bb

18、");scan f("%d",&w2);/*返回菜單函數(shù)*/while(w2=1);menu(); void num_order()I* 卡號(hào)排序 */int i,j,k ,n;struct in fowage s;n=load();for(i=0;i< n-1;i+) k=i; for(j=i+1;j<n;j+)/*選擇排序法 */if(IMj.num>IMk.num) k=j;s=IMi; IMi=IMk; IMk=s;prin tf("%11s%-17s%6d%6d%6d%6d%6d%6d",IMi. num,I

19、Mi. name,IMi.mo nth,IMi.S_wage,IMi.water_rate,IMi.electric_charge,IMi.tax,IMi.T_wage);prin tf("%11s%-17s%6d%6d%6d%6d%6d%6d",IMk. nu m,IMk. name,IMk.mo nth,IMk.S_wage,IMk.water_rate,IMk.electric_charge,IMk.tax,IMk.T_wage);save();/*保存函數(shù)*/puts("nn"); void T_wage_order()/* 實(shí)發(fā)工資排序 */i

20、nt i,j,k ,n;struct in fowage s;n=load();for(i=0;i< n-1;i+) k=i; for(j=i+1;j<n;j+)/*選擇排序法 */if(IMj.T_wage<IMk.T_wage)k=j;s=IMi; IMi=IMk; IMk=s;prin tf("%11s%-17s%6d%6d%6d%6d%6d%6d",IMk. nu m,IMk. name,IMk.mo nth,IMk.S_wage,IMk.water_rate,IMk.electric_charge,IMk.tax,IMk.T_wage);prin

21、 tf("%11s%-17s%6d%6d%6d%6d%6d%6d",IMi. num,IMi. name,IMi.mo nth,IMi.S_wage,IMi.water_rate,IMi.electric_charge,IMi.tax,IMi.T_wage);save();/*保存函數(shù)*/puts("nn");(6).統(tǒng)計(jì)模塊【需求分析】:要求能夠按照月份累計(jì)統(tǒng)計(jì)某職工在某時(shí)間段實(shí)發(fā)工資總金額【流程圖】:圖八.統(tǒng)計(jì)模塊流程圖【程序】:void stat()/* 統(tǒng)計(jì)模塊 */readfiles();/*讀入職工工資信息*/allwage();/* 總金額

22、 */void readfiles()int n; n=load(); /*從文件讀入職工工資信息 */ printf_face(n); int allwage() int i,j,month;int allwage=0; struct infowage s100;FILE *fp;char filename30;printf("Please input T_wage information filename:");scanf("%s",filename); if(fp=fopen("filename","rb")

23、!=NULL) printf("File open error.n");exit(0); i=0;while( !( feof(fp) ) ) fscanf(fp,"%d%s%d%d",&IMi.num,&IM,&IMi.month,&IMi.T_wage);i+; printf("Please input month searched:");scanf("%d",&month);printf("The result searching as follo

24、ws:n");printf("Num Name Month T_wage:n");for(j=0;j<i;j+) if(IMj.month=month) printf("%5d %10s %3d %10dn",IMj.num,IM,IMj.month,IMj.T_wage); allwage+=IMj.T_wage;fclose(fp);getchar();getchar();menu();/* 返回菜單函數(shù) */3. 公共函數(shù)下面是能夠用到地一些公共函數(shù) .保存函數(shù) save(int n)說明:形參 n 控制保存地個(gè)數(shù) .程

25、序void save(int n)/* 保存函數(shù) ,保存 n 個(gè)記錄 */FILE *fp;int i;if(fp=fopen("S_wage.txt", "wb")=NULL)/* 以輸出打開方式 ,在此之前地記錄被覆蓋 */printf("nCannot open filen");return ;for(i=0;i<n;i+) if(fwrite(&IMi,sizeof(struct infowage),1,fp)!=1)printf("file write errorn");fclose(fp)

26、;加載函數(shù) load()說明 :該函數(shù)可以用來加載所有記錄,并且可以返回所有地記錄地個(gè)數(shù).程序int load() /*加載記錄或可以計(jì)算記錄個(gè)數(shù)地函數(shù) */ FILE*fp;int i;if(fp=fopen("S_wage","rb")=NULL) /* 以輸出打開方式 ,在此之前地記錄被覆蓋 */ printf("nCannot open filen");return NULL;for(i=0;!feof(fp);i+)fread(&IMi,sizeof(struct infowage),1,fp);fclose(fp)

27、;return(i-1);/* 返回記錄個(gè)數(shù) */ .卡號(hào)輸入函數(shù) num_input(int i,int n)說明:該函數(shù)對(duì)輸入考核進(jìn)行判斷,確保輸入卡號(hào)惟一.形參i表示第i個(gè)職工記錄,形參n表 示總共有 n 個(gè)職工記錄 . 程序 :void num_input(int i)int j,w1;dow1=0;printf("NO.:");scanf("%s",IMi.num);for(j=0;IMi.numj!='0'j+)/* 卡號(hào)輸入函數(shù) ,作了嚴(yán)格規(guī)定 */if(IMi.numj<'0'|IMi.numj>

28、;'9')/* 判斷卡號(hào)是否為數(shù)字 */puts("Input error!Only be made up of (0-9).Please reinput!n"); w1=1;break; while(w1=1);姓名輸入函數(shù) name_input (int i)說明 形參 i 表示第 i 個(gè)職工記錄 . 程序 void name_input(int i)int j,w1;dow1=0;printf("Name:");scanf("%s",IM);for(j=0;'a'<=IMi.na

29、mej<='z'j+)/* 判斷姓名是否為字母 */if(j=0)IMj-=32; w1=1;break; if(j!=0&&IMj!='0')IMj+1-=32; w1=1;break;while(w1=1); (5). 求稅率函數(shù) void tax(int i) 說明:形參 i 表示第 i 個(gè)職工記錄 程序: void tax(int i)int m;m=IMi.S_wage;if(m<=800) IMi.tax=0;/* 姓名輸入函數(shù) ,作了嚴(yán)格規(guī)定 */* 稅率函數(shù) */* 計(jì)算稅率地方法

30、*/else if(800<m<1400) IMi.tax=(m-800)*5/100;else IMi.tax=(m-1400)*10/100;(6) . 求實(shí)發(fā)工資 int T_wage(int i)說明:形參 i 表示第 i 個(gè)職工記錄 .程序 :return IMi.T_wage; /* 實(shí)發(fā)工資計(jì)算方法 */(7). 輸入整個(gè)記錄函數(shù) input(int i)說明:形參 i 表示第 i 個(gè)職工記錄程序 :void input(int i)num_input(i); printf( “Name:”); printf("Mon:"); printf(&qu

31、ot;S_wage:"); printf("Water_rate");/* 輸入一個(gè)記錄函數(shù) */* 調(diào)用卡號(hào)輸入函數(shù) */ scanf("%s",&IM); scanf("%d",&IMi.month); scanf("%d",&IMi.S_wage);scanf("%d",&IMi.water_rate);printf("electric_charge"); tax(i); T_wage(i); (8).顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)

32、目函數(shù) void printf_face() printf("ntNO. Namescanf("%d",&IMi.electric_charge);/* 顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目 */Mon S_wage water rateElectric chargeTax T_wagen");(9).顯示一個(gè)記錄地函數(shù) void printf_one(i)/* 顯示一個(gè)記錄地函數(shù) */ printf("%11s%-17s %6d%12.2f %9.2f %9.2f%int T_wage(int i)/* 實(shí)發(fā)工資函數(shù) */ IMi.T_wage=IMi.

33、S_wage-IMi.water_rate-IMi.electric_charge-IMi.tax;9.2f %9.2f",IMi.num,IM,IMi.month,IMi.S_wage,IMi.water_rate,IMi.electric_charge,IMi.tax,IMi.T_wage); (10). 個(gè)任務(wù)結(jié)束時(shí)地選擇瀏覽還是返回地函數(shù)void prin tf_back()/* 一個(gè)任務(wù)結(jié)束時(shí)地選擇瀏覽還是返回*/int k,w;prin tf("nn tSuccessful.A_Ann ”);printf("What do you want

34、 to do?nnt1.Browset2.Back: bb");scan f("%d",&w);if(w=1)browse();else menu(); 五.上機(jī)操作1. 數(shù)據(jù)源根據(jù)前面所列地?cái)?shù)據(jù)輸入形式(1).主菜單函數(shù)2.編譯,連接和運(yùn)行3結(jié)果:下面是各個(gè)模塊地界面圖(2).輸入模塊在主界面出現(xiàn)后輸入1回車看到下圖Choice </our nunber<l-7> ; Il J Hoi> manr infovnations<0-149>?:-|n| x|輸入要輸入地記錄數(shù)然后逐條增加,如下圖:1 .Enter neu

35、deita2. AdditIon data3. Brause all 4Search dta 5order dataS.Stat hy month 7.ExitEntei* dataChoice your nnnber<lm7>:(1 J lloif ndny infornations<0-149)?:2» ” at托a* w; me務(wù) 梵桿 妊疑 X 托msm* atUiiat dn you want to do?5,order dataG.Stat by nonth 7.Exit(3).追加模塊Input 1th info. NO. :1Name-zhan

36、63;an Mon :1S_wa9& =1234Water_rate:12Electi*ic_ciAi!*ge :34(nput Sth info.N0.:2Naras?lisi tlon :2S_wage lJater_i'ate : IS Electi'ic cJiairsfe -231.Browse2.Back: (11. Enter new data2. Addition data3.Srouse all4.Search5order data&.Stat by nonth 7.Exit|Cho ice your nunbei*<l-7>: 1

37、21How manij IMloees ai*e du 問nt to add(0-14?)?:1In nut lth inf-N0,:3Name : uanuuMon :3S_wage:4578 AJtcr_Fate :24 Electriccharge j31SuccessF ul1.Blouse2-Back:(4).瀏覽模塊Uiat do you i?ant to do?Cho ice youp numbei'<l-?> : L3 N0_Tax12 lisie 2 info .Pass any key15689S_wageElectric cbarge211167540

38、7There arwater pate123423244NameMonT_wage zhangsanto back 、- A-A-A - A -A -A-A -A -A -A- A -i - A 7 7 譏譏 J35211 -Enter new data2.Addition data3-Browse all 4.Search data 5.order data6 .Stat by month 7-ExitID(5).查找模塊(6).排序模塊Jnjxl1-Enter new data2 _Add Itinn dat3, Browse all4-Seapch data5«order dat« G _Stat by month ?.ExitCErn ice yout* nuf»ber(l-7> : IS 1Which w戲呼 do you choose?1 HBy nun 2.By Twatie 112 lisi256S9152324454071 zhanHsan112341234211167Successful.What do yom uant to do?1.order another 2.Back LII.實(shí)發(fā)工資排序注:這個(gè)模塊

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論