职工工资管理系统程序
- 格式:doc
- 大小:17.00 KB
- 文档页数:9
1. 工资管理系统的数据流程图,如图:2. 主要数据字典 1) 数据项的定义数据项数据项名称类型及宽度简述取值范围编号 I1 标示其他部门提交的职工考勤信息的年考勤日期 Char ( 10) 月工资日期 Char10) 标示职工工资的年月 I2 职工编码 Char10) 唯一用来标示职工的编码 I3 部门名称 Char(20) 使用此系统单位内部子部分 I4 基本工资 decimal(7,2) I5 各部门内的员工固定工资,即部门岗位工资。
2)数据存储的描述数据数据存简述数据存储组成相关联的存储储名称处理编号 S1 变动工记录职工变动工资的工资日期 + 职工编码 + 加班费 + 奖金 + 水P2 、 p4 资表详细信息电费 + 保险费 + 病假扣款 + 事假扣款 + 旷工扣款 + 其他扣款 + 个人所得税 S2 基本工记录职工固定工资的工资日期 + 职工编码 + 基本工资 + 工 P4 、 p5 资表详细信息龄工资 + 岗位津贴 + 固定补贴 S3 工资计记录职工工资的详细工资日期 + 职工编码 + 职工姓名 + 个 P4 、 p5 、算表信息人账号 + 基本工资 + 工龄工资 + 岗位p6 、 p7 、津贴 + 固定补贴 + 变动津贴 + 加班费 + p8 、 p9 奖金 + 应发工资 + 水电费 + 保险费 + 病假扣款 + 事假扣款 + 旷工扣款 + 其他扣款 + 个人所得税 + 扣款合计 + 实发工资 S4 福利费记录职工福利费分配日期 + 职工编码 + 部门编码 + 对应科目编码 P8 、 p10 计提分的详细信息 + 金额配表 S5 个人所记录职工个人所得税职工编码 + 职工姓名 + 所得期间 + 所得项目 P9 、 p10 得税申情况 + 收入额合计 + 费用额 + 应纳税所得额 + 税报表率 + 速算扣除数 + 扣缴所得税额 S6 工资费描述工资费用的分摊日期 + 职工编码 + 部门编码 + 对应科目编码 P7 、 p10 用分配(来源) + 金额表S8 职员信职员基本信息职工编码 + 职工姓名 + 性别 + 人员类别 + P3 、 E3息表部门编码 + 部门名称 + 岗位编码 + 岗位名称 + 职称 + 工龄 + 个人账号 + 联系电话 S9 工资计设置职工工资项目金基本工资计算标准 + 变动工资计算标准 E3 、 P2 算标准额标准表 S10 考勤表记录职工考勤信息情考勤日期 + 职工编码 + 加班天数 + 病假天数 P1 、 P2 况 + 旷工天数 + 事假天数; 3)数据流的描述数据数据流简述数据流数据流数据流组成数据高峰流编名称来源去向流量流量号D1 考勤记输入的企业所有E1 P1 考勤日期 + 职工编码 + 1 次 1 次录职工的考勤信息加班天数 + 病假天数 + / 月 / 月旷工天数 + 事假天数; D1 人事基描述人事基本信E2 P3 职工编码 + 职工姓名 + 1 次 1 次本信息息性别 + 人员类别 + 部门/ 月 / 月编码 + 部门名称 + 岗位编码 + 岗位名称 + 职称 + 工龄 + 个人账号 + 联系电话 4) 处理的描述处理处理逻输入的数据流处理逻辑的描述输出的数处理逻辑辑名称据流频率编号 P1 输入考D1 其他部门汇总的由其他部门的负责人每个月按期输入S11 考勤1 次勤信息考勤信息企业所有职工的考勤信息表 / 月 P2 编制变S9 工资计算标准财务处根据其他部门的负责人输入的S1 变动1 次动工资表 ;s11 考勤表职工考勤等考勤信息,以及工资计算标工资表 / 月表准表中设置的金额计算出企业每个职工的加班费、病假扣款、事假扣款、旷工扣款等金额,并编制变动工资表。
【软件工程】工资管理系统在当今的企业管理中,工资管理是一项至关重要的任务。
一个高效、准确且易于操作的工资管理系统不仅能够提升企业的财务管理效率,还能增强员工对企业的信任和满意度。
接下来,让我们深入了解一下工资管理系统。
工资管理系统是一种专门用于处理企业员工工资相关事务的软件应用程序。
它的主要功能包括员工基本信息管理、工资计算与发放、工资条生成、税务处理、报表统计等。
首先,员工基本信息管理是工资管理系统的基础。
系统中需要存储员工的姓名、工号、部门、职位、入职时间、银行账号等关键信息。
这些信息的准确性直接影响到后续工资计算和发放的准确性。
例如,如果员工的银行账号信息错误,那么工资就无法正常发放到员工的账户中,这将给员工和企业带来不必要的麻烦。
工资计算是系统的核心功能之一。
它需要考虑多种因素,如员工的基本工资、绩效工资、加班工资、津贴补贴、扣税等。
对于不同的岗位和职级,工资计算的方式可能会有所不同。
例如,销售人员的工资可能会与销售业绩挂钩,生产工人的工资可能会与生产数量和质量相关。
系统需要能够根据预设的规则和算法,准确地计算出每个员工的应发工资和实发工资。
在工资发放环节,系统需要与银行等金融机构进行对接,实现工资的批量转账。
同时,系统还应该具备工资发放记录的功能,以便企业随时查询和核对工资发放的情况。
工资条生成是为了让员工清楚地了解自己的工资构成和扣除项目。
工资条通常包括员工的基本信息、各项工资收入和扣除项目的明细、应发工资、实发工资等内容。
工资条可以以纸质形式发放给员工,也可以通过电子邮件或企业内部系统发送给员工。
税务处理是工资管理中不可忽视的一部分。
系统需要根据国家税收政策,准确计算员工应缴纳的个人所得税,并在工资发放时进行代扣代缴。
同时,系统还应该能够生成相关的税务报表,以满足企业纳税申报的需要。
报表统计功能可以帮助企业管理层了解工资支出的总体情况。
通过报表,企业可以分析不同部门、不同岗位员工的工资水平,比较不同时期的工资变化趋势,为企业的人力资源决策提供数据支持。
广东省人事工资管理系统使用操作流程适用于统发机关单位(包括统发依公事业单位)第一步:安装系统 (具体可看光盘附带操作说明书)一.电脑硬件要求如下:电脑1台及以上,CPU奔腾4以上,内存512M以上,硬盘160G以上,DVD刻录光驱,移动硬盘或U盘,打印机1台。
二.安装软件要求如下:一台电脑只能安装一套2.0版工资管理系统。
不影响(旧)广工版工资管理决策支持系统的保留与使用。
操作系统WIN2000、WINXP,IE6.0,EXCEL2000。
安装IE6.0,主要是工资管理系统要运行在该环境中。
安装EXCEL主要是工资管理系统显示和打印报表,要调用EXCEL。
三.安装过程注意事项:1、操作系统建议使用WIN2000或WINXP操作系统,但不要使用WINXP home版。
2、建议安装前关闭防火墙。
第二步:导入旧数据库转换数据库要注意的事项1、转换旧版数据库至2.0版广东省人事工资管理系统。
可在安装工资管理软件的过程中,系统自动提示下进行旧数据的导入,如错过系统提示,也可在安装完成后点击“开始菜单”选中“广东省人事工资管理系统(下级版)”程序组。
2、点击里面的“导入旧版工资系统数据”程序详见下图3、点击程序系统会出现下图。
选择本单位的旧版数据库文件(此文件为一个Access数据库文件,文件后缀名为.mdb)4、点击,导库程序自动运行,见下图5、完成导入后系统会提示是否继续导入下一个单位的数据,如需继续导入按“确定”按钮重复第3点的操作。
如只有一个单位按“确定”按钮后,直接点击。
6、重新启动电脑后即可完成旧工资系统数据库导入新系统的操作。
7、转换数据库是为了减少录入信息的工作量,但不是百分百都准确转换。
因此,转换完成后,在新工资管理系统中,一定要对每一个人的信息都进行检查和修改,以保证信息的准确性。
注意:转换数据库完成后,新系统将自动生成“离退”,“其他”以及各单位在旧数据库中自定义的部门,单位已离退休人员自动默认放在“离退”部门内。
系统主要操作流程指南当您第一次进入本工资管理系统,开始对本单位的人员和工资信息进行录入操作和日常管理时,您可按照下列流程进行。
一、进入系统运行《财政工资统一发放系统(单位版)》,如同运行其它应用软件一样,非常简单:单击“开始”,打开“程序”组,选择“财政工资统一发放系统(单位版)”项,然后单击图标,即开始运行,进入系统的登录窗口。
二、创建套帐一个账套组成一个单位的人事、工资数据系统。
本系统支持多套账的管理,这意味着本系统可以管理多个单位的人事、工资数据。
如果单位需要建立新的套账就单击“建套账”按钮。
并且可以在“系统管理”中“建立单位铺帐”,“整理套帐”是对套帐进行管理,可以对主、辅套帐进行删除。
三、获取基础数据获取基础数据包括导入系统编码表、导入数据结构文件、导入财政对单位数据和导入单位对单位的数据。
导入由财政部门提供的系统编码表、数据结构文件和财政对单位数据。
为设置单位信息、部门信息、设置人员档案、工资变动等提供原始的数据字典。
注意:只有在读入数据结构文件后,系统才能开始正常工作。
此操作一般只进行一次,在系统数据结构没有变化时可不再进行。
但当系统被初始化或单位信息因误操作而被修改时除外。
导入单位对单位的数据的目的:单位向财政上报单位数据,财政部门对该单位上报的单位数据进行审核,当财政部门在对该单位数据审核过程中发现不合理的数据时,而这时,某些单位上报人员不方便返回本单位进行修改数据,这种情况下,该单位上报人员就可以在财政部门特设的客户机上,通过“导入单位对单位的数据”对单位数据进行修改,修改完毕后,直接再上报给财政部门。
导入系统编码表:系统编码表是本系统首次使用时所必须的基础编码数据.对应的文件名称:CODE.ARJ(编码表)。
导入数据结构文件:数据结构文件是本系统首次使用时所必须的基础数据结构.对应文件名称:DWJG_单位编码.ARJ(单位结构_单位编码)。
导入财政对单位数据:导入财政对单位数据是从财政系统导出给单位的基础数据.对应文件名称:DWSJ_单位编码.ARJ(单位数据_单位编码)。
职工工资管理系统c++程序设计报告职工工资管理系统是一种用于管理员工薪资的软件系统。
下面是一个使用C++编写的职工工资管理系统的程序设计报告。
## 设计与实现### 设计该系统的设计主要考虑到以下几个方面:1. 功能需求:设计一个能够记录职工的基本信息、薪资信息、请假信息、加班信息等的系统。
2. 数据库设计:设计一个可以存储数据的数据结构,包括表格和字段。
3. 界面设计:设计一个用户友好的界面,方便用户进行操作。
4. 安全性:设计一个安全性措施,保证数据的安全性和隐私性。
### 实现1. 数据库设计:使用MySQL数据库进行数据存储。
2. 界面设计:使用Qt Creator开发界面。
3. 程序实现:使用C++语言进行程序实现。
#### 功能实现1. 记录职工基本信息:包括职工ID、姓名、性别、出生日期、身份证号码、联系方式等。
2. 记录薪资信息:包括基本工资、基本工资+津贴、基本工资+补贴、奖金等。
3. 记录请假信息:包括请假日期、请假原因、请假时间等。
4. 记录加班信息:包括加班日期、加班时间、加班地点、加班原因等。
5. 记录职工基本信息与薪资信息的关联关系。
6. 记录加班信息与请假信息的关联关系。
7. 显示当前职工的工资信息、请假信息、加班信息等。
8. 允许用户对职工的工资信息、请假信息、加班信息等进行编辑和删除。
## 性能测试为了测试系统的性能和稳定性,我们使用了以下方法:1. 模拟大量数据的操作:在系统中添加大量数据,并对其进行各种操作。
2. 进行并发测试:在系统中添加并发用户,并对系统进行各种操作。
3. 进行压力测试:在系统中添加大量压力,并通过增加并发用户等方式对系统进行压力测试。
通过以上方法,我们测试了系统的性能和稳定性,并得到了以下结果:- 系统在高并发情况下能够稳定运行。
- 系统在低并发情况下也能够流畅运行。
- 系统在高压力情况下能够快速响应,并保持稳定运行。
- 系统在低压力情况下也能够流畅运行。
广东省人事工资管理系统使用操作流程适用于统发机关单位(包括统发依公事业单位)第一步:安装系统 (具体可看光盘附带操作说明书)一.电脑硬件要求如下:电脑1台及以上,CPU奔腾4以上,内存512M以上,硬盘160G以上,DVD刻录光驱,移动硬盘或U盘,打印机1台。
二.安装软件要求如下:一台电脑只能安装一套2。
0版工资管理系统。
不影响(旧)广工版工资管理决策支持系统的保留与使用。
操作系统WIN2000、WINXP,IE6.0,EXCEL2000。
安装IE6。
0,主要是工资管理系统要运行在该环境中。
安装EXCEL主要是工资管理系统显示和打印报表,要调用EXCEL.三.安装过程注意事项:1、操作系统建议使用WIN2000或WINXP操作系统,但不要使用WINXP home版。
2、建议安装前关闭防火墙。
第二步:导入旧数据库转换数据库要注意的事项1、转换旧版数据库至2.0版广东省人事工资管理系统。
可在安装工资管理软件的过程中,系统自动提示下进行旧数据的导入,如错过系统提示,也可在安装完成后点击“开始菜单”选中“广东省人事工资管理系统(下级版)”程序组。
2、点击里面的“导入旧版工资系统数据”程序详见下图3、点击程序系统会出现下图。
选择本单位的旧版数据库文件(此文件为一个Access数据库文件,文件后缀名为.mdb)4、点击,导库程序自动运行,见下图5、完成导入后系统会提示是否继续导入下一个单位的数据,如需继续导入按“确定"按钮重复第3点的操作。
如只有一个单位按“确定”按钮后,直接点击。
6、重新启动电脑后即可完成旧工资系统数据库导入新系统的操作。
7、转换数据库是为了减少录入信息的工作量,但不是百分百都准确转换。
因此,转换完成后,在新工资管理系统中,一定要对每一个人的信息都进行检查和修改,以保证信息的准确性。
注意:转换数据库完成后,新系统将自动生成“离退”,“其他”以及各单位在旧数据库中自定义的部门,单位已离退休人员自动默认放在“离退"部门内。
1.课程论文题目职工信息管理系统程序设计一、题目要求职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:(1)系统以菜单的方式工作。
(2)职工信息录入功能(职工信息用文件保存)。
(3)职工浏览功能。
(4)职工信息查询功能,查询方式可按学历查询或者工号查询。
(5)职工信息的删除、修改功能(可选项)。
2.程序设计思路1、设计思路(1)根据题目要求,应该把职工工资信息用结构体形式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;(2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立相应的功能模块来实现;(3)另外还需要提供键盘式选择菜单实现功能,在运行时达到所要的目的。
3.功能模块图5.算法设计1.主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。
2浏览模块【分析】该模块的功能是浏览职工的全部信息3排序模块4查询模块【分析】该模块的功能是根据输入的职工按照工号和学历查找对应的记录,找到以后,可进行继续查找或修改信息的操作。
流程图如下:5修改模块【分析】该模块的功能是显示所有职工的信息,考虑到记录较多,建议采用分屏显示。
显示完所有记录后,输入要修改的职工的工号,根据工号查到职工的记录,并提示用户修改该记录的哪部分信息,根据用户做的选择修改相应信息。
流程图如下:6.程序代码#include<stdio.h>#define N 50struct worker{char id[50];char name[20];char sex[10];char age[10];char edu[20];char salary[10];char address[20];char tel[20];}worker[N];void save(int n) //保存函数,保存n个记录{ FILE *fp;int i;if((fp=fopen("worker.txt","wb"))==NULL) //以只写方式为输出打开一个二进制文件{ printf("\nCannot open file\n");}for(i=0;i<n;i++)if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1)printf("file write error\n");fclose(fp);}int load() //加载函数{ FILE *fp;int i;if((fp=fopen("worker.txt","rb"))==NULL){printf("\nCannot open file\n");return NULL;}for(i=0;!feof(fp);i++)fread(&worker[i],sizeof(struct worker),1,fp);fclose(fp);return(i-1);}void no_input(int i,int n) //工号输入函数,i表示第i个职工的信息,n 表示比较到第n个职工{ int j,k,w1;do{w1=0;printf("工号:");scanf("%s",worker[i].id);for(j=0;worker[i].id[j]!='\0';j++)if(worker[i].id[j]<'0'||worker[i].id[j]>'9') //判断工号是否为数字{puts("请重新输入!\n");w1=1;break;}if(w1!=1)for(k=0;k<n;k++) //比较到第N个职工if(k!=i&&strcmp(worker[k].id,worker[i].id)==0) //判断职工号是否有雷同{puts("请重新输入!\n");w1=1;break;}}while(w1==1);}void input(int i) //输入一个记录的函数{ no_input(i,i);printf("姓名:");scanf("%s",worker[i].name);printf("性别:");scanf(" %s",&worker[i].sex);printf("年龄:");scanf("%s",&worker[i].age);printf("工资:");scanf("%s",worker[i].salary);printf("学历:");scanf("%s",&worker[i].edu);printf("住址:");scanf("%s",worker[i].address);printf("电话:");scanf("%s",worker[i].tel);}void printf_one(int i) //显示一个记录的函数{printf("%10s %10s %5s %5s %8s %6s %10s %10s\n",worker[i].id,worker[i].name,worker[i].sex,worker[i].age,worker[i].salary,worker[i].edu,worker[i].address,worker[i].tel); }void printf_back() //一个任务结束后选择是好似浏览还是返回{ int k,w;printf("\n\n\tSuccessful^-^.\n\n");printf("接下来做什么?\n\n\t1).浏览全部\t2).返回: [ ]\b\b");scanf("%d",&w);if(w==1)browse();else menu();}modify_data(int i,int n) //修改函数{ int c,w1;do{puts("\nmodify by=>\n\n 1).工号 2).姓名 3).性别 4).年龄 5).工资6).学历 7).地址 8).电话 9).取消");printf("请选择?:[ ]\b\b");scanf("%d",&c);if(c>9||c<1){puts("\nChoice error!please again!");getchar();}}while(c>9||c<1);do{switch(c){case 1:no_input(i,n);break;case 2:printf("name:");scanf("%s",worker[i].name);break;case 3:printf("sex:");scanf("%s",worker[i].sex);break;case 4:printf("age:");scanf("%s",worker[i].age);break;case 5:printf("salary:");scanf("%s",worker[i].salary);break;case 6:printf("edu:");scanf("%s",worker[i].edu);break;case 7:printf("address:");scanf("%s",worker[i].address);break;case 8:printf("tel:");scanf("%s",worker[i].tel);break;case 9:menu();break;}puts("\nNow:\n");printf_face();printf_one(i);printf("\n确定?\n\n\t1).是2).否,重新修改3).不保存退出[ ]\b\b");scanf("%d",&w1);if(w1==1)save(n);}while(w1==2);return(w1);}printf_face() //显示数据结构项目{ printf("\n\t工号姓名性别年龄工资学历地址电话号码\n"); }void enter() //输入模块{ int i,n;printf("输入多少个职工信息(0-%d):",N-1);scanf("%d",&n);printf("\n 请输入职工信息\n\n");for(i=0;i<n;i++)input(i);if(i!=0)save(n);printf_back();}browse() //浏览模块{ int i,j,n;n=load();printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)){printf("\n\n按任意键显示下一页...");getch();puts("\n\n");}printf_one(i);}printf("\t这里有 %d 条记录.\n",n);printf("\n按任意键返回...");getch();menu();}modify() //修改模块{struct worker s;FILE *fp;int i,n,k,w0=1,w1,w2=0;n=load();do{k=-1;printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)) //目的是分屏显示{printf("\n\n记住要修改的工号.按任意键显示下一页");getch();puts("\n\n");}printf_one(i); //调用显示一个记录的函数}do{printf("\n\n输入要修改的职工工号! 工号:");scanf("%s",s.id); //输入要修改的IDfor(i=0;i<n;i++) //查找要修改的数据if(strcmp(s.id,worker[i].id)==0){k=i; //找到要修改的记录s=worker[i]; //把worker[i]备份,以便恢复}if(k==-1)printf("\n\n未找到请重输");}while(k==-1); //当k=-1表示没有找到printf_face(); //调用显示数据结构项目的函数printf_one(k); //调用显示一个记录的函数w1=modify_data(k,n); //修改记录并返回保存控制值w1,w1=1表示用户已确认修改if(w1==1){printf("\Successful^_^.\n\n修改另一个?\n\n\t1).是 2).否,保存退出\t[ ]\b\b");scanf("%d",&w0);w2=1; //用来控制保存,使w2=1是标记已有过修改}else{w0=0;if(w2==1)worker[k]=s;}if(w0!=1&&w2==1)save(n);}while(w0==1);menu();}search() //查询模块{ int c,w1;do{puts("\nsearch by=>\n\n1).工号 2}.学历 3).取消并返回"); printf("Which you needed?:[ ]\b\b");scanf("%d",&c);if(c>3||c<1){ puts("\nchoice error!please again!");getchar();}}while(c>3||c<1);{switch(c){case 1:search1();break;case 2:search2();break;case 3:menu();break;}}}search1() //按工号查询模块{int i,n,k,w1=1,w2,w3,w4;struct worker s;n=load();do{do{k=-1;printf("\n\n输入要查询的工号! id:");scanf("%s",s.id);printf_face();for(i=0;i<n;i++)if(strcmp(s.id,worker[i].id)==0){k=i;printf_one(k);break;}if(k==-1){printf("\n\nNo exit!please");printf("\n\n继续查找?\n\t1).是 2).否,返回 [ ]\b\b");scanf("%d",&w1);if(w1==2) menu();}}while(k==-1&&w1==1);w4=0;w3=0;if(k!=-1){printf("\n\n接下来干什么?\n\t1).查找另一个 2).修改 3).返回菜单[ ]\b\b");scanf("%d",&w2);switch(w2){case 1:search1();break;case 2:w3=modify_data(k,n);break;case 3:{menu();break;}}}}while(w2==1);menu();}search2() //按学历查询模块{int i,n,k,w1=1,w2,w3,w4;struct worker s;n=load();do{do{k=-1;printf("\n\n请输入你要查询的学历:\n");scanf("%s",);printf_face();for(i=0;i<n;i++)if(strcmp(,worker[i].edu)==0){k=i;printf_one(k);}if(k==-1){printf("\n\nNo exit!please");printf("\n\n继续查找?\n\t1).是 2).否,返回 [ ]\b\b");scanf("%d",&w1);if(w1==2) menu();}}while(k==-1&&w1==1);w4=0;w3=0;if(k!=-1){printf("\n\n接下来干什么?\n\t1).查找另一个 2).修改 3).返回菜单[ ]\b\b");scanf("%d",&w2);switch(w2){case 1:search2();break;case 2:w3=modify_data(k,n);break;case 3:{menu();break;}}}}while(w2==1);menu();}menu(){int n,w1;do{puts("\t\t*******************菜单*******************\n\n");puts("\t\t\t\t1.录入职工信息");puts("\t\t\t\t2.浏览职工信息");puts("\t\t\t\t3.查询职工信息");puts("\t\t\t\t4.修改职工信息");puts("\t\t\t\t5.退出");puts("\t\t****************************************\n\n");printf("请选择(1~5): [ ]\b\b");scanf("%d",&n);if(n<1||n>5) //对选择的数字作判断{w1=1;getchar();}else w1=0;} while(w1==1);switch(n){case 1:enter();break; //录入 case 2:browse();break; //浏览 case 3:search();break; //查询 case 4:modify();break; //修改 case 5:exit(0); //退出}}main(){menu();}7.程序运行结果下面是各个模块的的界面截图(1)、主菜单(2)、输入模块(3)、浏览模块(3)、查找模块(4)、修改模块8.编程中遇到的困难及解决方法温故而知新,可以为师矣。
综合设计实验——职工工资信息管理专业:班级:学号:姓名:完成日期:2012/7/3一、实验目的:1、进一步熟悉开发环境,掌握编译、连接和调试的技巧;2、综合运用数组、指针、函数和文件,通过综合设计掌握数组、结构体、指针和函数之间的相互关系,掌握函数参数传递,理解“传值”、“传指针”和“传引用”3、熟悉具有复杂需求的大程序设计过程和注意事项二、实验内容:【题目描述】编写程序实现单位职工工资信息管理。
包含各种基本数据的录入、修改、删除、插入、查询、统计(应发工资=基本工资+职务工资+各种补助,实发工资=应发工资-水电费-公积金)【基本功能】:(1)添加功能:添加一个职工的基本信息,包括工资卡号、身份证号、姓名、基本工资、职务工资、各种补助、应发工资、水电费、公积金、实发工资等(2)删除功能:能够对一个职工的信息进行删除,例如按姓名进行删除(3)显示功能:显示所有职工的主要信息包括工资卡号、身份证号、姓名、基本工资、职务工资、各种补助、应发工资、水电费、公积金、实发工资等(4)查找功能:根据你键入的职工姓名,显示其详细信息(注:在main内显示查找到的职工信息!)(5)修改功能:根据你键入的职工姓名,对该职工工资信息进行修改。
(6)排序功能:对职工的信息按照实发工资进行排序(不得选用直接选择法,可以使用交换法、设标签的选择法、快速排序法等)。
【题目要求】(1) 按照分析、设计、编码、调试和测试的软件开发过程完成这个应用程序;(2) 职工工资信息应该包含:工资卡号、身份证号、姓名、基本工资、职务工资、各种补助、应发工资、水电费、公积金、实发工资等;(3) 为各项操作功能设计一个菜单(可选)。
应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4) 不使用C++的string类型来存放字符串(5) 函数接口参数设计允许使用C++引用类型(6) 建议使用动态堆内存分配,达到高效利用内存目的(本要求适合提高水平的同学,不做严格要求)【输入要求】应用程序运行后,在屏幕上显示一个菜单。
编写一个职工工资管理系统程序,该程序输入职工工号和应发工资,由系统对其完成的实发工资实现计算。
其中职工信息包括职工号、姓名、性别、应发工资、税金、实发工资等(职工号不重复)。
功能要求及说明:
系统以菜单方式工作
职工基本信息和应发工资的录入功能(用文件保存)
从键盘输入数据,建立磁盘数据文件
职工工资信息浏览功能:
从磁盘数据文件读取所有职工工资信息并显示输出到屏幕上;
计算应发工资和查询的功能:
计算公式为:税金=应发工资*税率;
实发工资=应发工资-税金;
应发工资税率
<1000 0
1000~4999 5%
5000以上 10%
其中
源代码:
#include <iostream>
et() ;
ut() ;
cout << endl ;
}
break ;
case 3:
{
int p=0 ;
for(int i=0;i<80;i++)
cout << "#" ;
cout << setw(20) << "查询应发工资\n" ;
for(int j=0;j<80;j++)
cout << "#" ;
int number ;
cout << "\n输入你要查询的职工号:" ;
cin >> number ;
for (int m=0;m<Count;m++)
if( person[m].check(number,2) )
{
cout << "\n找到了!\n" ;
person[m].put () ;
p=1 ;
break;
}
if(p==0)
cout << "\n没有这个工号!\n" ; }
break ;
default:
cout << "\n输入错误!" ;
}
cout << "\n是否继续察看主菜单?(y or n):" ;
cin >> choose2 ;
}while(choose2=='y') ;
for (int i=0;i<=Count;i++)
person[i].put_txt ( out ) ;
closing ( in , out ) ;
return 0 ;
}
void opening ( ifstream& ins , ofstream& outs ) {
("c:\\tc\\tc\\s a l a r " ) ;
if ())
{
cout << "wo can not open !" ;
exit (1);
}
("c:\\tc\\tc\\s a l a r " ) ;
if ())
{
cout << "wo con not opening s a l a r !" ;
exit (1);
}
}
void closing ( ifstream& ins , ofstream& outs ) {
();
();
}
int show_menu ()
{
int word ;
for(int i=0;i<80;i++)
cout << "#" ;
cout << "1. 职工基本信息和应发工资的录入; \n" ; cout << "2.职工工资信息浏览; \n" ;
cout << "3.查询应发工资; \n" ;
for(int j=0;j<80;j++)
cout << "#" ;
cout << "请你输入选择的项目的代码(1,2...) :" ;
cin >> word ;
return word ;
}
void Person::change_pay()
{
if(pay<1000)
{
pay_out = 0 ;
pay_true = pay ;
}
if( (pay<4999) && (pay>=1000) ) {
pay_out = pay* ;
pay_true = pay - pay_out ; }
if(pay>=5000)
{
pay_out = pay* ;
pay_true = pay - pay_out ; }
}
void Person::come(ifstream& in) {
char b ;
(b) ;
if(b==':')
in >> number ;
a[Count]=number ;
do
{
(b) ;
}while(b!=':') ;
if(b==':')
in >> name ;
do
{
(b) ;
}while(b!=':') ;
in >> pay ;
do
{
(b) ;
}while(b!=':') ;
in >> pay_out ;
do
{
(b) ;
}while(b!=':') ;
in >> pay_true;
}
void Person::get()
{
do
{
cout << "\n职工号:" ;
cin >> number ;
a[Count]=number ;
if( check(number,1) )
break ;
cout << "\n职工号有重复,请重新输入!" ; }while(1);
cout << "\n姓名:" ;
cin >> name;
cout << "\n应发工资:" ;
cin >> pay ;
}
void Person::put()
{
change_pay() ;
for(int i=0;i<80;i++)
cout << "#" ;
cout << "\n职工号:" << number
<< "\n姓名:" << name
<< "\n应发工资:" << pay
<< "\n税金:" << pay_out
<< "\n实发工资:" << pay_true ; cout << endl ;
}
void Person::put_txt( ofstream& out ) {
for(int i=0;i<80;i++)
cout << "#" ;
out << "\n职工号:" << number
<< "\n姓名:" << name
<< "\n应发工资:" << pay
<< "\n税金:" << pay_out
<< "\n实发工资:" << pay_true ; }
bool Person::check( int b , int choose) {
switch(choose)
{
case 1:
{
for(int i=0;i<Count;i++)
if(b == a[i])
return (b!=a[i]) ;
return 1 ;
}
case 2:
return (b==number) ; default:
cout << "\n系统错误!" ;
exit(1) ;
}
}。