




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言课程实习报告学 院: 工程学院专 业: 岩土工程班 级: 052052-33学 号: 20051002623姓 名: 刘恒 第一题:工资信息管理系统一题目要求工资信息管理系统【要求】该系统能够实现工资信息管理。系统包括录入,浏览,查询,统计等功能。其中录入功能要求能够添加新的工资信息到文件;浏览功能要求能按照工资卡号,姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号,姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。(1)文件中一行数据对应一个职工工资信息;(2)工资信息的数据结构采用结构体数组,一个数
2、组元素对应一条工资单记录;(3)工资单信息包括工资卡号,姓名,月份,应发工资,水费,电费,税金,实发工资等;(4)实发工资应发工资水费电费税金,其中税金计算方法为:应发工资800元,税金=0;800元应发工资1400元,税金(应发工资800)*5;应发工资1400元,税金(应发工资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).排序模块。需求分析:该模块的功能是将职工按照卡号升序或者实发工资降序排列输出。【流程图】:排序按照卡号升序排列按照实发工资降序排列保存返回主菜单保存返回主菜单 图七:排序模块流程图【程序】: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(); /*按照实发工资排序*/ 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() /*实发工资排序*/ 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).统计模块【需求分析】:要求能够按照月份累计统计某职工在某时间段实发工资总金额。【流程图】:统计模块读入文件信息读入相对月份信息计算实发工资总金额显示职工工资信息
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+) /*卡号输入函数,作了严格规定*/ 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) /*姓名输入函数,作了严格规定*/ 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).求实发工资int T_wage(int i)说明:形参i表示第i个职工记录.程序:int T_wage(int i) /*实发工资函数*/ IMi.T_wage=IMi.S_wage-IMi.water_rate-IMi.electric_charge-IMi.tax; return IMi.T_wage; /*实发工资计算方法*/(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. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物资搬迁协议合同书模板
- 班班通安装劳务合同范本
- 精准扶贫房改造合同范本
- 销售店集体买车合同范本
- 牛肉面合作协议合同范本
- 物业消防水维修合同范本
- 燃气供货合同协议书模板
- 苗木移栽合同协议书样本
- 网签合同撤销协议书范本
- 甲状旁腺切除手术协议书
- 2021-2022学年辽宁省大连市高二下学期期末考试化学试题
- 延期交货申请书
- 2024版消防设计质量问题案例分析手册建筑机电专业
- 《义务教育道德与法治课程标准》解读
- 学校总务后勤管理经验交流材料
- 2025年非全日制劳动合同模板
- 滴滴出行财务管理案例分析
- 离职赔偿协商协议书(2025年)
- 2024年度半导体生产工人劳动合同范本3篇
- 2025三会一课工作学习计划
- 甲亢性心脏病诊疗方案
评论
0/150
提交评论