版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 150void enter();search();void add(
4、); void browse();void stat();void order();void num_order();void T_wage_order();void menu();void stat();void readfiles();int allwage();void menu()int n,w;system(cls);doputs(tt*MENU*nn);puts(tttt1.Enter new data);puts(tttt2.Addition data);puts(tttt3.Browse all);puts(tttt4.Search data);puts(tttt5.order
5、 data);puts(tttt6.Stat by month);puts(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;/* 查找模块 */cas
6、e 5:order();break;/* 排序模块 */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 infowag
7、echar num15; char name20; int month;int S_wage; int water_rate;int electric_charge; int tax;int T_wage;IMN;/*IMN 中每个元组元素对应一个职工*/【注意】:N 为职工人数 ,应采用宏定义 define N 150.【流程图】:输入用户要输入职工记录的个数ni 从 0 到 n 1 调用输入函数input( i )i ! 0保存调用函数save( n)图三 .输入模块流程图程序 :void enter()/* 输入模块 */int i,n;printf(How many informati
8、ons(0-%d)?:,N-1);scanf(%d,&n);/* 要输入地记录个数*/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输入用户要追加
9、职工记录的个数mK=m+ni 从 n 到 k 调用输入函数input(i)保存追加的记录图四 .追加模块流程图程序 :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,a
10、b)=NULL)/* 以ab 方式打开文件,追加保存*/printf(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()/*浏览模
11、块*/int i,k,n;n=load();printf_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;doprintf(nnWhich way do you choose?nt1.By name2.By numbb);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 anoth
13、er2.Backbb);scanf(%d,&w2); while(w2=1);menu(); name_search()/* 姓名查找 */int i,n,k,w=1;struct infowage e;n=load();dok=-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;/* 找到记录 */prin
14、tf_one(k); 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,IMi.
15、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;doprintf(nnWhich way do you choose?nt1.By num2.By T_wage
16、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 another2.Backscanf(%d,&w2);bb);bb);while(w2=1);menu();/* 返回菜单函数*/void num_order()/* 卡号排序 */int i,j,k,n;struct infowage s;n=load();for(i=0;in-1;i+)
17、 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_wag e,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_w age,IMk.water_rate,IMk.electric_charge,IMk.tax,I
18、Mk.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_wage,IMk.water_rate,IMk.el
19、ectric_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:);scanf(%s,filename);if(fp=fopen(filen
21、ame,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(NumNameMonth T_wage:n);for(j=0;ji;j+)if(IMj.month=month
22、) 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)/* 保存函数 ,保存FILE *fp;int i;if(fp=fopen(S_wage.txt, wb)=NULL)printf(nCannot open filen);re
23、turn ;n 个记录 */* 以输出打开方式,在此之前地记录被覆盖*/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)=NULL)/* 以输出打开方式,在此之前地记录被覆盖printf(nCannot open fil
24、en);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) 说明 : 该函数对输入考核进行判断示总共有n 个职工记录 .,确保输入卡号惟一.形参i 表示第i 个职工记录,形参n 表程序 :void num_input(int i)int j,w1;dow1=0;printf(NO.:);scanf(%s,IMi.num);for(j=0;IMi.numj!=0;j+
25、)/* 卡号输入函数,作了严格规定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;dow1=0;printf(Name:);scanf(%s,IM);for(j=0;a=IMj=z;j+)/* 判断姓名是否为字母*/if(j=0)IMi
26、.namej-=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) IMi.tax=(m-800)*5/100;else IMi.tax=(m-1400)*10/100;*/(
27、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
28、:”);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);tax(i);T_wage(i);(8).显示数据结构项目函数void printf_face()/* 显示数据结构项目*/printf(ntNO.NameMonS_wagewaterrateElectricchargeTaxT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度软件测试工程师保密合同及质量保证协议3篇
- 2025年度店铺股份质押与融资服务合同范本2篇
- 二零二五年度智慧城市基础设施建设项目承包合同样本3篇
- 科学思维在学科复习中的运用
- 网络安全教育在学校中的创新实践与策略研究
- Unit 6【单元测试·基础卷】-2023-2024学年九年级英语上册(牛津上海版)(解析版)
- 二零二五年度车辆抵押借款合同争议解决机制4篇
- 2025年度土地租赁合同参考范本3篇
- 2025年度个人水电安装与维护承包服务合同4篇
- 2025版个人二手房交易合同附房屋维修责任说明2篇
- 彩票市场销售计划书
- 骨科抗菌药物应用分析报告
- 支付行业反洗钱与反恐怖融资
- 百词斩托福词汇excel版本
- 基础设施绿色施工技术研究
- 宝钢BQB 481-2023全工艺冷轧中频无取向电工钢带文件
- 车辆定损情况确认书范本
- 高中英语新课标词汇表(附词组)
- 证券公司信用风险和操作风险管理理论和实践中金公司
- 2022年高考湖南卷生物试题(含答案解析)
- GB/T 20909-2007钢门窗
评论
0/150
提交评论