工资信息管理系统C语言设计_第1页
工资信息管理系统C语言设计_第2页
工资信息管理系统C语言设计_第3页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C 语言课程实习报告学院:工程学院专业:岩土工程班级:052052-33学号:20051002623姓 名: 刘恒第一题:工资信息管理系统一'题目要求工资信息管理系统【要求】该系统能够实现工资信息管理系统包括录入,浏览,查询,统计等功能.其 中录入功能要求能够添加新地工资信息到文件;浏览功能要求能按照工资卡号,姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资 降序输出;查询功能要求能够按照工资卡号 ,姓名查询;统计功能要求能够按照 月份累计统计某职工在某时间段实发工资总金额 (1)文件中一行数据对应一个职工工资信息;(2)工资信息地数据结构采用结构体数组,一个数

2、组元素对应一条工资单记录;(3)工资单信息包括工资卡号,姓名月份,应发工资,水费,电费,税金,实发工资等;(4)实发工资=应发工资水费电费税金,其中税金计算方法为: 应发工资V 800元,税金=0; 800元V应发工资V 1400元,税金=(应发工资800) *5%; 应发工资1400元,税金=(应发工资1400) *10 % 二 '需求分析根据题目要求,由于工资信息是以文本文件地方式存放在文件里地 ,所以应提 供文件地输入,输出等操作;在程序中需要知道职工地工资信息,应提供录入,浏览, 查询,排序,统计等操作功能;另外,还应提供键盘式选择菜单实现功能选择 三'总体设计通过分析

3、整个系统,根据上面地需求分析,可以将这个系统地设计分为如下几个模块: 工资信息管理系数据输入数据添加r数据浏览r 数据查找工资排序工资统计<J _图一系统功能模块图四'详细设计1.主函数主函数一般设计得比较简洁,只提供输入,处理和输出部分地函数调用其中各 功能模块用菜单方式选择.【流程图】如下图所示:图二主函数流程图#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");/* 对选择地数字进行判断*/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); /*输入模块*/*追加模块*/*浏览模块*/*查找模块*/*排序模块*/*统计模块*/*退出*/void save(); int load(); void in put(); void prin tf_

7、face(); void printf_on e();void prin tf_back(); int T_wage();/*主函数 */mai n() men u(); 2.各功能模块设计输入模块【数据结构】【分析】看各数据信息,工资卡号、姓名是字符型,可以用字符型数组;工资应采 用实型数据信息应放在文件中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中每个元组元素对应一个职工*/【注意】

8、:N为职工人数,应采用宏定义 # define N 150.【流程图】:图三输入模块流程图程序:void enter()/*输入模块*/int i,n;prin tf("How many in formatio ns(0-%d)?:",N-1);scanf("%d",&n);/*要输入地记录个数*/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);/*调用输入函数*/if(

9、i!=O)save(n);/* 调用保存函数 */prin tf_back();/* 一个任务结束时让用户选择是浏览还是返回*/.追加模块需求分析:该模块地功能是添加新地工资信息,从键盘输入并逐条写到原来地输入文件中注意采用追加不是覆盖地方式 流程图四追加模块流程图程序: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);/*输入要追加地记录个

10、数*/k=n+m;for(i=n ;i<k;i+)pri ntf("n In put %dth in fo.n",i-n+1);input(i);/*调用输入函数*/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();/* 一个任务结束时让用户选择是浏览还是返回*/.浏览模块需求分析该模块地功能是显示所有职工记录信息流程图图五浏览模块流程图程序: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);/*浏览模块*/*加载记录*/*调用显示数据结构项目函数 */*目地是分屏显示*/*调用显示一个记录地函数*/prin tf("nPass any key to back .");getch();/*按任意键*/menu();.查找模块需求分析:该模块地功能是根据输入地职工姓名或者工资卡号查找对应地记录流程图查找模块图六:查找模块流程图程序: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();/* 卡号查找 */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();/*调用显示数据结构项目函数*/for(i=0;i<n;i+)/* 查找数据 */if(strcmp(e. name,IMi. nam

15、e)=0)k=i;/*找到记录*/printf_on e(k); break;/*调用显示一个记录地函数*/if(k=-1)pri ntf("ninNo exist!"); while(k=-1 &&w=1); num_search()/* 卡号查找 */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)/*输入要找地号码*/*调用显示数据结构项目函数*/*查找数据*/*找到记录*/*调用显示一个记录地函数 */printf("ninNo exist!"); while(k=-1 &&w=1);(5) .排序模块.需求分析:该模块地功能是将职工按照卡号升序或者实发工资降序排列输出【流程图】:图七:排序模块流程图【程序】: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();/* 按照卡号排序 */else T_wage_order();/*按照实发工资排序*/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);/*返回菜单函数*/while(w2=1);menu(); void num_order()I* 卡号排序 */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();/*保存函数*/puts("nn"); void T_wage_order()/* 实发工资排序 */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();/*保存函数*/puts("nn");(6).统计模块【需求分析】:要求能够按照月份累计统计某职工在某时间段实发工资总金额【流程图】:图八.统计模块流程图【程序】:void stat()/* 统计模块 */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();/* 返回菜单函数 */3. 公共函数下面是能够用到地一些公共函数 .保存函数 save(int n)说明:形参 n 控制保存地个数 .程

25、序void save(int n)/* 保存函数 ,保存 n 个记录 */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、;加载函数 load()说明 :该函数可以用来加载所有记录,并且可以返回所有地记录地个数.程序int load() /*加载记录或可以计算记录个数地函数 */ 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);/* 返回记录个数 */ .卡号输入函数 num_input(int i,int n)说明:该函数对输入考核进行判断,确保输入卡号惟一.形参i表示第i个职工记录,形参n表 示总共有 n 个职工记录 . 程序 :void num_input(int i)int j,w1;dow1=0;printf("NO.:");scanf("%s",IMi.num);for(j=0;IMi.numj!='0'j+)/* 卡号输入函数 ,作了严格规定 */if(IMi.numj<'0'|IMi.numj>

28、;'9')/* 判断卡号是否为数字 */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;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). 求税率函数 void tax(int i) 说明:形参 i 表示第 i 个职工记录 程序: void tax(int i)int m;m=IMi.S_wage;if(m<=800) IMi.tax=0;/* 姓名输入函数 ,作了严格规定 */* 税率函数 */* 计算税率地方法

30、*/else if(800<m<1400) IMi.tax=(m-800)*5/100;else IMi.tax=(m-1400)*10/100;(6) . 求实发工资 int T_wage(int i)说明:形参 i 表示第 i 个职工记录 .程序 :return IMi.T_wage; /* 实发工资计算方法 */(7). 输入整个记录函数 input(int i)说明:形参 i 表示第 i 个职工记录程序 :void input(int i)num_input(i); printf( “Name:”); printf("Mon:"); printf(&qu

31、ot;S_wage:"); printf("Water_rate");/* 输入一个记录函数 */* 调用卡号输入函数 */ 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).显示数据结构项

32、目函数 void printf_face() printf("ntNO. Namescanf("%d",&IMi.electric_charge);/* 显示数据结构项目 */Mon S_wage water rateElectric chargeTax T_wagen");(9).显示一个记录地函数 void printf_one(i)/* 显示一个记录地函数 */ printf("%11s%-17s %6d%12.2f %9.2f %9.2f%int T_wage(int i)/* 实发工资函数 */ 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). 个任务结束时地选择浏览还是返回地函数void prin tf_back()/* 一个任务结束时地选择浏览还是返回*/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(); 五.上机操作1. 数据源根据前面所列地数据输入形式(1).主菜单函数2.编译,连接和运行3结果:下面是各个模块地界面图(2).输入模块在主界面出现后输入1回车看到下图Choice </our nunber<l-7> ; Il J Hoi> manr infovnations<0-149>?:-|n| x|输入要输入地记录数然后逐条增加,如下图: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務 梵杆 妊疑 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.实发工资排序注:这个模块

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论