工資信息管理系統C語言設計_第1頁
工資信息管理系統C語言設計_第2頁
工資信息管理系統C語言設計_第3頁
工資信息管理系統C語言設計_第4頁
工資信息管理系統C語言設計_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、C語言課程實習報告學 院: 工程學院專 業(yè): 巖土工程班 級: 052052-33學 號: 20051002623姓 名: 劉恒 第一題:工資信息管理系統一題目要求工資信息管理系統【要求】該系統能夠實現工資信息管理。系統包括錄入,瀏覽,查詢,統計等功能。其中錄入功能要求能夠添加新的工資信息到文件;瀏覽功能要求能按照工資卡號,姓名分類瀏覽,提供分屏顯示;有排序功能,排序后按照工資卡號升序或實發(fā)工資降序輸出;查詢功能要求能夠按照工資卡號,姓名查詢;統計功能要求能夠按照月份累計統計某職工在某時間段實發(fā)工資總金額。(1)文件中一行數據對應一個職工工資信息;(2)工資信息的數據結構采用結構體數組,一個數

2、組元素對應一條工資單記錄;(3)工資單信息包括工資卡號,姓名,月份,應發(fā)工資,水費,電費,稅金,實發(fā)工資等;(4)實發(fā)工資應發(fā)工資水費電費稅金,其中稅金計算方法為:應發(fā)工資800元,稅金=0;800元應發(fā)工資1400元,稅金(應發(fā)工資800)*5;應發(fā)工資1400元,稅金(應發(fā)工資1400)*10二需求分析根據題目要求,由于工資信息是以文本文件的方式存放在文件里的,所以應提供文件的輸入,輸出等操作;在程序中需要知道職工的工資信息,應提供錄入,瀏覽,查詢,排序,統計等操作功能;另外,還應提供鍵盤式選擇菜單實現功能選擇。三總體設計通過分析整個系統,根據上面的需求分析,可以將這個系統的設計分為如下幾

3、個模塊:工資信息管理系統數據輸入數據添加數據瀏覽數據查找工資排序工資統計 圖一系統功能模塊圖四詳細設計1. 主函數主函數一般設計得比較簡潔,只提供輸入,處理和輸出部分的函數調用。其中各功能模塊用菜單方式選擇。【流程圖】如下圖所示:顯示一系列功能選項輸入n,判斷n是否是07根據n的值調用各功能模塊函數 圖二.主函數流程圖【程序】#include #include #include #include#define N 150 void enter(); search(); void add(); void browse();void stat(); void order(); void num_o

4、rder(); void T_wage_order();void menu(); void stat(); void readfiles(); int allwage();void menu()int n,w; system(cls); do puts(tt*MENU*nn); puts(tttt1.Enter new data); puts(tttt2.Addition data); puts(tttt3.Browse all); puts(tttt4.Search data); puts(tttt5.order data); puts(tttt6.Stat by month); puts(

5、tttt7.Exit); puts(nntt*n); printf(Choice your number(1-7): bb); /*對選擇的數字進行判斷*/ scanf(%d,&n); if(n7) w=1;getchar(); else w=0; while(w=1); switch(n) case 1:enter();break; /*輸入模塊*/ case 2:add();break; /*追加模塊*/ case 3:browse();break; /*瀏覽模塊*/ case 4:search();break; /*查找模塊*/ case 5:order();break; /*排序模塊*

6、/ case 6:stat();break; /*統計模塊*/ case 7:exit(0); /*退出*/ void save(); int load(); void input(); void printf_face();void printf_one(); void printf_back(); int T_wage(); /*主函數*/main() menu(); 2. 各功能模塊設計輸入模塊【數據結構】【分析】看各數據信息,工資卡號、姓名是字符型,可以用字符型數組;工資應采用實型。數據信息應放在文件中。struct infowage char num15; char name20;

7、int month; int S_wage; int water_rate; int electric_charge; int tax; int T_wage;IMN; /*IMN中每個元組元素對應一個職工*/【注意】:N為職工人數,應采用宏定義 define N 150。【流程圖】:輸入用戶要輸入職工記錄的個數ni從0到n1調用輸入函數input(i)i!0保存調用函數save(n) 圖三。輸入模塊流程圖程序:void enter() /*輸入模塊*/int i,n; printf(How many informations(0-%d)?:,N-1); scanf(%d,&n); /*要輸入

8、的記錄個數*/ printf(n Enter data nownn); for (i=0;in;i+) printf(n Input %dth info.n,i+1); input(i); /*調用輸入函數*/ if(i!=0)save(n); /*調用保存函數*/ printf_back(); /*一個任務結束時讓用戶選擇是瀏覽還是返回*/追加模塊需求分析:該模塊的功能是添加新的工資信息,從鍵盤輸入并逐條寫到原來的輸入文件中,注意采用追加不是覆蓋的方式.流程圖:調用加載函數n=load();并計算可以記錄個數n輸入用戶要追加職工記錄的個數mK=m+ni從n到k調用輸入函數input(i)保存

9、追加的記錄 圖四.追加模塊流程圖程序: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); scanf(%d,&m); /*輸入要追加的記錄個數*/ k=n+m; for(i=n;ik;i+) printf(n Input %dth info.n,i-n+1); input(i); /*調用輸入函數*/ if(fp=fopen(infowage.txt,ab)=NULL) /*以ab方式打開文件,追加保存*/ printf(

10、Cannot open filen); for(i=0;in;i+) if(fwrite(&IMi,sizeof(struct infowage),1,fp)!=1) /*輸出到文件*/ printf(file write errorn); fclose(fp); printf_back(); /*一個任務結束時讓用戶選擇是瀏覽還是返回*/.瀏覽模塊需求分析該模塊的功能是顯示所有職工記錄信息.流程圖顯示職工記錄(5個一屏)按任意鍵顯示下一屏按任意鍵返回主菜單 圖五.瀏覽模塊流程圖程序:void browse() /*瀏覽模塊*/int i,k,n; n=load(); /*加載記錄*/ pri

11、ntf_face(); /*調用顯示數據結構項目函數*/ for(i=0;in;i+) if(i!=0)&(i%5=0) /*目的是分屏顯示*/ printf(nnPass any key to continue .); getch(); puts(nn); printf_one(i); /*調用顯示一個記錄的函數*/ printf(tThere are %d info.n,n); printf(nPass any key to back .); getch(); /*按任意鍵*/ menu();.查找模塊需求分析:該模塊的功能是根據輸入的職工姓名或者工資卡號查找對應的記錄.流程圖 查找模塊卡

12、號查找姓名查找 圖六:查找模塊流程圖程序:search() /*查找模塊*/int k=0; int w1,w2; do printf(nnWhich way do you choose?nt1.By name 2.By num bb); scanf(%d,&w1); if(w1=1) name_search(); /*姓名查找*/ else num_search(); /*卡號查找*/ if(k!=-1) printf(nnSuccessful._.); printf(nnWhat do you want to do?nt1.Search another 2.Back bb); scanf(

13、%d,&w2); while(w2=1); menu(); name_search() /*姓名查找*/int i,n,k,w=1; struct infowage e; n=load(); do k=-1; printf(nnEnter name that you want to search! Name:); scanf(%s,); /*輸入要找的名字*/ printf_face(); /*調用顯示數據結構項目函數*/ for(i=0;in;i+) /*查找數據*/ if(strcmp(,IM)=0) k=i; /*找到記錄*/ printf_one(k

14、); break; /*調用顯示一個記錄的函數*/ if(k=-1) printf(nnNo exist!); while(k=-1&w=1); num_search() /*卡號查找*/int i,k,n,w=1; struct infowage s; n=load(); do k=-1; printf(nnEnter num that you want to search! NO.:); scanf(%s,s.num); /*輸入要找的號碼*/ printf_face(); /*調用顯示數據結構項目函數*/ for(i=0;in;i+) /*查找數據*/ if(strcmp(s.num,I

15、Mi.num)=0) k=i; /*找到記錄*/ printf_one(k);break; /*調用顯示一個記錄的函數*/ if(k=-1) printf(nnNo exist!); while(k=-1&w=1); (5).排序模塊。需求分析:該模塊的功能是將職工按照卡號升序或者實發(fā)工資降序排列輸出。【流程圖】:排序按照卡號升序排列按照實發(fā)工資降序排列保存返回主菜單保存返回主菜單 圖七:排序模塊流程圖【程序】:void order() /*排序模塊*/int k=0; int w1,w2; do printf(nnWhich way do you choose?nt1.By num 2.By

16、 T_wage bb); scanf(%d,&w1); if(w1=1) num_order(); /*按照卡號排序*/ else T_wage_order(); /*按照實發(fā)工資排序*/ if(k!=-1) printf(nnSuccessful._.); printf(nnWhat do you want to do?nt1.order another 2.Back bb); scanf(%d,&w2); while(w2=1); menu(); /*返回菜單函數*/void num_order() /*卡號排序*/ int i,j,k,n; struct infowage s; n=lo

17、ad(); for(i=0;in-1;i+) k=i; for(j=i+1;jIMk.num) k=j; s=IMi; IMi=IMk; IMk=s;printf(%11s%-17s%6d%6d%6d%6d%6d %6d,IMi.num,IM,IMi.month,IMi.S_wage,IMi.water_rate,IMi.electric_charge,IMi.tax,IMi.T_wage); printf(%11s%-17s%6d%6d%6d%6d%6d %6d,IMk.num,IM,IMk.month,IMk.S_wage,IMk.water_rate,IMk.el

18、ectric_charge,IMk.tax,IMk.T_wage);save(); /*保存函數*/puts(nn); void T_wage_order() /*實發(fā)工資排序*/ int i,j,k,n; struct infowage s; n=load(); for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) /*選擇排序法*/if(IMj.T_wageIMk.T_wage)k=j;s=IMi; IMi=IMk; IMk=s;printf(%11s%-17s%6d%6d%6d%6d%6d %6d,IMk.num,IM,IMk.month,IMk.S_

19、wage,IMk.water_rate,IMk.electric_charge,IMk.tax,IMk.T_wage);printf(%11s%-17s%6d%6d%6d%6d%6d %6d,IMi.num,IM,IMi.month,IMi.S_wage,IMi.water_rate,IMi.electric_charge,IMi.tax,IMi.T_wage); save(); /*保存函數*/puts(nn); (6).統計模塊【需求分析】:要求能夠按照月份累計統計某職工在某時間段實發(fā)工資總金額。【流程圖】:統計模塊讀入文件信息讀入相對月份信息計算實發(fā)工資總金額顯示職工工資信息

20、計算總金額累計月份信息 圖八。統計模塊流程圖【程序】:void stat() /*統計模塊*/readfiles(); /*讀入職工工資信息*/ allwage(); /*總金額*/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:);

21、scanf(%s,filename); if(fp=fopen(filename,rb)!=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 follows:n); printf(Num Name Mo

22、nth T_wage:n); for(j=0;ji;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(); /*返回菜單函數*/3. 公共函數下面是能夠用到的一些公共函數.保存函數save(int n)說明:形參n控制保存的個數.程序void save(int n) /*保存函數,保存n個記錄*/FILE *fp; int i; if(fp=fop

23、en(S_wage.txt, wb)=NULL) /*以輸出打開方式,在此之前的記錄被覆蓋*/ printf(nCannot open filen); return ; for(i=0;in;i+) if(fwrite(&IMi,sizeof(struct infowage),1,fp)!=1) printf(file write errorn); fclose(fp);加載函數 load()說明:該函數可以用來加載所有記錄,并且可以返回所有的記錄的個數.程序int load() /*加載記錄或可以計算記錄個數的函數*/FILE*fp; int i; if(fp=fopen(S_wage,rb

24、)=NULL) /*以輸出打開方式,在此之前的記錄被覆蓋*/ printf(nCannot open filen); return NULL; for(i=0;!feof(fp);i+) fread(&IMi,sizeof(struct infowage),1,fp); fclose(fp); return(i-1); /*返回記錄個數*/.卡號輸入函數num_input(int i,int n)說明:該函數對輸入考核進行判斷,確保輸入卡號惟一. 形參i表示第i個職工記錄,形參n表示總共有n個職工記錄.程序:void num_input(int i)int j,w1; do w1=0; pri

25、ntf(NO.:); scanf(%s,IMi.num); for(j=0;IMi.numj!=0;j+) /*卡號輸入函數,作了嚴格規(guī)定*/ if(IMi.numj9) /*判斷卡號是否為數字*/ puts(Input error!Only be made up of (0-9).Please reinput!n); w1=1;break; while(w1=1);姓名輸入函數 name_input (int i)說明形參i表示第i個職工記錄.程序void name_input(int i)int j,w1; do w1=0; printf(Name:); scanf(%s,IM

26、); for(j=0;a=IMj=z;j+) /*判斷姓名是否為字母*/ if(j=0) IMj-=32; w1=1;break; if(j!=0&IMj!=0) /*姓名輸入函數,作了嚴格規(guī)定*/ IMj+1-=32; w1=1;break; while(w1=1); (5).求稅率函數void tax(int i)說明:形參i表示第i個職工記錄.程序: void tax(int i) /*稅率函數*/int m; m=IMi.S_wage; if(m=800) IMi.tax=0; /*計算稅率的方法*/ else if(800m1400)

27、IMi.tax=(m-800)*5/100; else IMi.tax=(m-1400)*10/100; (6).求實發(fā)工資int T_wage(int i)說明:形參i表示第i個職工記錄.程序:int T_wage(int i) /*實發(fā)工資函數*/ IMi.T_wage=IMi.S_wage-IMi.water_rate-IMi.electric_charge-IMi.tax; return IMi.T_wage; /*實發(fā)工資計算方法*/(7).輸入整個記錄函數 input(int i)說明:形參i表示第i個職工記錄.程序:void input(int i) /*輸入一個記錄函數*/num_input(i); /*調用卡號輸入函數*/printf(“Name:”); scanf(%s,&IM); printf(Mon:); scanf(%d,&IMi.month); printf(S_wage:); scanf(%d,&IMi.S_wage); printf(Water_rate); scanf(%d,&IMi.water_rate); printf(electric_charge); scanf(%d,&IMi.electric_charge

溫馨提示

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

評論

0/150

提交評論