版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C語言課程實習報告學 院: 工程學院專 業(yè): 巖土工程班 級: 052052-33學 號: 20051002623姓 名: 劉恒 第一題:工資信息管理系統(tǒng)一題目要求工資信息管理系統(tǒng)【要求】該系統(tǒng)能夠?qū)崿F(xiàn)工資信息管理。系統(tǒng)包括錄入,瀏覽,查詢,統(tǒng)計等功能。其中錄入功能要求能夠添加新的工資信息到文件;瀏覽功能要求能按照工資卡號,姓名分類瀏覽,提供分屏顯示;有排序功能,排序后按照工資卡號升序或?qū)嵃l(fā)工資降序輸出;查詢功能要求能夠按照工資卡號,姓名查詢;統(tǒng)計功能要求能夠按照月份累計統(tǒng)計某職工在某時間段實發(fā)工資總金額。(1)文件中一行數(shù)據(jù)對應(yīng)一個職工工資信息;(2)工資信息的數(shù)據(jù)結(jié)構(gòu)采用結(jié)構(gòu)體數(shù)組,一個數(shù)
2、組元素對應(yīng)一條工資單記錄;(3)工資單信息包括工資卡號,姓名,月份,應(yīng)發(fā)工資,水費,電費,稅金,實發(fā)工資等;(4)實發(fā)工資應(yīng)發(fā)工資水費電費稅金,其中稅金計算方法為:應(yīng)發(fā)工資800元,稅金=0;800元應(yīng)發(fā)工資1400元,稅金(應(yīng)發(fā)工資800)*5;應(yīng)發(fā)工資1400元,稅金(應(yīng)發(fā)工資1400)*10二需求分析根據(jù)題目要求,由于工資信息是以文本文件的方式存放在文件里的,所以應(yīng)提供文件的輸入,輸出等操作;在程序中需要知道職工的工資信息,應(yīng)提供錄入,瀏覽,查詢,排序,統(tǒng)計等操作功能;另外,還應(yīng)提供鍵盤式選擇菜單實現(xiàn)功能選擇。三總體設(shè)計通過分析整個系統(tǒng),根據(jù)上面的需求分析,可以將這個系統(tǒng)的設(shè)計分為如下幾
3、個模塊:工資信息管理系統(tǒng)數(shù)據(jù)輸入數(shù)據(jù)添加數(shù)據(jù)瀏覽數(shù)據(jù)查找工資排序工資統(tǒng)計 圖一系統(tǒng)功能模塊圖四詳細設(shè)計1. 主函數(shù)主函數(shù)一般設(shè)計得比較簡潔,只提供輸入,處理和輸出部分的函數(shù)調(diào)用。其中各功能模塊用菜單方式選擇?!玖鞒虉D】如下圖所示:顯示一系列功能選項輸入n,判斷n是否是07根據(jù)n的值調(diào)用各功能模塊函數(shù) 圖二.主函數(shù)流程圖【程序】#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); /*對選擇的數(shù)字進行判斷*/ 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; /*統(tǒng)計模塊*/ case 7:exit(0); /*退出*/ void save(); int load(); void input(); void printf_face();void printf_one(); void printf_back(); int T_wage(); /*主函數(shù)*/main() menu(); 2. 各功能模塊設(shè)計輸入模塊【數(shù)據(jù)結(jié)構(gòu)】【分析】看各數(shù)據(jù)信息,工資卡號、姓名是字符型,可以用字符型數(shù)組;工資應(yīng)采用實型。數(shù)據(jù)信息應(yīng)放在文件中。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中每個元組元素對應(yīng)一個職工*/【注意】:N為職工人數(shù),應(yīng)采用宏定義 define N 150?!玖鞒虉D】:輸入用戶要輸入職工記錄的個數(shù)ni從0到n1調(diào)用輸入函數(shù)input(i)i!0保存調(diào)用函數(shù)save(n) 圖三。輸入模塊流程圖程序:void enter() /*輸入模塊*/int i,n; printf(How many informations(0-%d)?:,N-1); scanf(%d,&n); /*要輸入
8、的記錄個數(shù)*/ printf(n Enter data nownn); for (i=0;in;i+) printf(n Input %dth info.n,i+1); input(i); /*調(diào)用輸入函數(shù)*/ if(i!=0)save(n); /*調(diào)用保存函數(shù)*/ printf_back(); /*一個任務(wù)結(jié)束時讓用戶選擇是瀏覽還是返回*/追加模塊需求分析:該模塊的功能是添加新的工資信息,從鍵盤輸入并逐條寫到原來的輸入文件中,注意采用追加不是覆蓋的方式.流程圖:調(diào)用加載函數(shù)n=load();并計算可以記錄個數(shù)n輸入用戶要追加職工記錄的個數(shù)mK=m+ni從n到k調(diào)用輸入函數(shù)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); /*輸入要追加的記錄個數(shù)*/ k=n+m; for(i=n;ik;i+) printf(n Input %dth info.n,i-n+1); input(i); /*調(diào)用輸入函數(shù)*/ 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(); /*一個任務(wù)結(jié)束時讓用戶選擇是瀏覽還是返回*/.瀏覽模塊需求分析該模塊的功能是顯示所有職工記錄信息.流程圖顯示職工記錄(5個一屏)按任意鍵顯示下一屏按任意鍵返回主菜單 圖五.瀏覽模塊流程圖程序:void browse() /*瀏覽模塊*/int i,k,n; n=load(); /*加載記錄*/ pri
11、ntf_face(); /*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項目函數(shù)*/ for(i=0;in;i+) if(i!=0)&(i%5=0) /*目的是分屏顯示*/ printf(nnPass any key to continue .); getch(); puts(nn); printf_one(i); /*調(diào)用顯示一個記錄的函數(shù)*/ printf(tThere are %d info.n,n); printf(nPass any key to back .); getch(); /*按任意鍵*/ menu();.查找模塊需求分析:該模塊的功能是根據(jù)輸入的職工姓名或者工資卡號查找對應(yīng)的記錄.流程圖 查找模塊卡
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(); /*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項目函數(shù)*/ for(i=0;in;i+) /*查找數(shù)據(jù)*/ if(strcmp(,IM)=0) k=i; /*找到記錄*/ printf_one(k
14、); break; /*調(diào)用顯示一個記錄的函數(shù)*/ 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(); /*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項目函數(shù)*/ for(i=0;in;i+) /*查找數(shù)據(jù)*/ if(strcmp(s.num,I
15、Mi.num)=0) k=i; /*找到記錄*/ printf_one(k);break; /*調(diào)用顯示一個記錄的函數(shù)*/ if(k=-1) printf(nnNo exist!); while(k=-1&w=1); (5).排序模塊。需求分析:該模塊的功能是將職工按照卡號升序或者實發(fā)工資降序排列輸出?!玖鞒虉D】:排序按照卡號升序排列按照實發(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(); /*返回菜單函數(shù)*/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(); /*保存函數(shù)*/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(); /*保存函數(shù)*/puts(nn); (6).統(tǒng)計模塊【需求分析】:要求能夠按照月份累計統(tǒng)計某職工在某時間段實發(fā)工資總金額?!玖鞒虉D】:統(tǒng)計模塊讀入文件信息讀入相對月份信息計算實發(fā)工資總金額顯示職工工資信息
20、計算總金額累計月份信息 圖八。統(tǒng)計模塊流程圖【程序】:void stat() /*統(tǒng)計模塊*/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(); /*返回菜單函數(shù)*/3. 公共函數(shù)下面是能夠用到的一些公共函數(shù).保存函數(shù)save(int n)說明:形參n控制保存的個數(shù).程序void save(int n) /*保存函數(shù),保存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);加載函數(shù) load()說明:該函數(shù)可以用來加載所有記錄,并且可以返回所有的記錄的個數(shù).程序int load() /*加載記錄或可以計算記錄個數(shù)的函數(shù)*/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); /*返回記錄個數(shù)*/.卡號輸入函數(shù)num_input(int i,int n)說明:該函數(shù)對輸入考核進行判斷,確保輸入卡號惟一. 形參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+) /*卡號輸入函數(shù),作了嚴格規(guī)定*/ if(IMi.numj9) /*判斷卡號是否為數(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個職工記錄.程序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) /*姓名輸入函數(shù),作了嚴格規(guī)定*/ IMj+1-=32; w1=1;break; while(w1=1); (5).求稅率函數(shù)void tax(int i)說明:形參i表示第i個職工記錄.程序: void tax(int i) /*稅率函數(shù)*/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ā)工資函數(shù)*/ IMi.T_wage=IMi.S_wage-IMi.water_rate-IMi.electric_charge-IMi.tax; return IMi.T_wage; /*實發(fā)工資計算方法*/(7).輸入整個記錄函數(shù) input(int i)說明:形參i表示第i個職工記錄.程序:void input(int i) /*輸入一個記錄函數(shù)*/num_input(i); /*調(diào)用卡號輸入函數(shù)*/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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024門窗行業(yè)綠色環(huán)保認證與推廣合同3篇
- 二零二五版股權(quán)激勵計劃執(zhí)行與監(jiān)督合同3篇
- 專業(yè)滑雪教學合作合同書2024版版B版
- 西安交通大學《基礎(chǔ)護理學基本技能1》2023-2024學年第一學期期末試卷
- 武漢晴川學院《心理咨詢倫理》2023-2024學年第一學期期末試卷
- 專業(yè)塔吊故障檢修服務(wù)協(xié)議樣本版A版
- 二零二五版建筑垃圾再生利用與建材企業(yè)合作協(xié)議3篇
- 二零二五年度股權(quán)代持與公司治理創(chuàng)新合同范本2篇
- 2024版供貨協(xié)議范本
- 2024年網(wǎng)絡(luò)安全服務(wù)提供商合作協(xié)議 with 服務(wù)內(nèi)容包括攻防演練、安全監(jiān)控
- 薪酬與福利管理實務(wù)-習題答案 第五版
- 廢舊物資處置申請表
- GB/T 37234-2018文件鑒定通用規(guī)范
- GB/T 31888-2015中小學生校服
- 質(zhì)量檢查考核辦法
- 云南省普通初中學生成長記錄-基本素質(zhì)發(fā)展初一-初三
- 2023年系統(tǒng)性硬化病診斷及診療指南
- 外科醫(yī)師手術(shù)技能評分標準
- 《英語教師職業(yè)技能訓練簡明教程》全冊配套優(yōu)質(zhì)教學課件
- 采購控制程序
- 六年級上冊數(shù)學簡便計算題200題專項練習
評論
0/150
提交評論