目录一、需求分析 (1)二、概要设计 (3)三、详细设计 (12)四、调试分析 (12)五、用户手册 (13)六、测试数据 (17)七、附录 (31)一、需求分析1.源文件采用多文件的工程结构。
2.数据存储采用文件形式。
3.标准C++输入输出4.程序完成企业人事工资管理,能够实现工资的录入、统计(整个单位的平均工资、最高工资、最低工资和工资均方差;各部门的平均工资、最高工资、最低工资和工资均方差)、查询(按工号或姓名查询)、修改、删除等功能。
5.程序执行的命令:(1)录入员工工资信息;(2)选择需要执行的操作(添加、统计、删除、修改、查询);(3)输出结果。
二、概要设计1.设计类的数据类型定义class message{private:char bornplace[10],duty[10];//籍贯职务int ID;//身份证号public:char name[10],bumen[10];//姓名部门int number; //工号int basesalary;//基本工资int jobsalary;//岗位工资int yljj;//医疗基金int sj;//税金int jiangjin;//奖金friend void modify(int x); //友员函数friend int del(int x); //友员函数}2.程序模块(1)录入操作:void writen(int x),该模版主要实现工资信息的录入;(2)添加操作:void add(int x),该模版主要实现工资信息的添加;(3)删除操作:void del(int x),该模版主要实现工资信息的删除;(4)修改操作:void modify(int x),该模版主要实现工资信息的修改;(5)查询操作:void find(int x) ,该模版主要实现工资信息的查询(按名字查询或按工号查询);(6)统计操作:void count(int x),该模版主要实现工资信息的统计(统计单位的平均工资、最高工资、最低工资、工资均方差;统计部门的平均工资、最高工资、最低工资、工资均方差)。
3.程序模块结构void main(){菜单(输入选择);操作;}三、详细设计(1)类模块class message{private:char bornplace[10],duty[10];//籍贯职务int ID;//身份证号public:char name[10],bumen[10];//姓名部门int number; //工号int basesalary;//基本工资int jobsalary;//岗位工资int yljj;//医疗基金int sj;//税金int jiangjin;//奖金message(){} //********************构造函数void xinxi(char a_name[],char a_bornplace[],char a_duty[],char a_bumen[],int a_ID,inta_number,int a_basesalary,int a_jobsalary,int a_jiangjin,int a_yljj,int a_sj){strcpy(name,a_name);strcpy(bornplace,a_bornplace);strcpy(duty,a_duty);strcpy(bumen,a_bumen);ID=a_ID;number=a_number;basesalary=a_basesalary;jobsalary=a_jobsalary;jiangjin=a_jiangjin;yljj=a_yljj;sj=a_sj;}message &operator=(const message &s) //**********************运算符重载{strcpy(name,);strcpy(bornplace,s.bornplace);strcpy(duty,s.duty);strcpy(bumen,s.bumen);ID=s.ID;number=s.number;basesalary=s.basesalary;jobsalary=s.jobsalary;jiangjin=s.jiangjin;yljj=s.yljj;sj=s.sj;return * this;}friend void modify(int x); //************************友元函数friend int del(int x);void put(){cout<<name<<" "<<bornplace<<" "<<duty<<" "<<bumen<<" "<<ID<<" "<<number<<" "<<basesalary<<" "<<jobsalary<<" "<<jiangjin<<" "<<yljj<<" "<<sj<<endl;}~message() //**************************析构{}};(2)主函数流程图(3)录入、添加函数流程图(4)删除函数流程图message a[30];fstream ap("wenjian.txt",ios::in||ios::out); //文件打开操作cout<<"请输入要删除人员信息的名字:";cin>>ming; //输入要删除的人员姓名cout<<endl;for(j=0,i=0;i<temp;i++) //判断是否删除{if(strcmp(b[i].name,ming)==0)//标记要删除的信息{flag=i;}}if(flag==-1){cout<<"没有要删除的信息。
"<<endl;return 0;}for(j=0,i=0;i<temp,j<temp-1; )//删除信息{if(flag!=i){a[j]=b[i]; //删除信息i++;j++;}elsei++;}(5)修改函数流程图cout<<"输入要修改人的名字:";cin>>ming;cout<<endl;cout<<flag<<endl;cout<<"请输入修改信息:"<<endl;cout<<"姓名: "<<endl;cin>>b[flag].name;cout<<"籍贯: "<<endl;cin>>b[flag].bornplace;cout<<"职务: "<<endl;cin>>b[flag].duty;cout<<"部门: "<<endl;cin>>b[flag].bumen;cout<<"身份证号: "<<endl;cin>>b[flag].ID;cout<<"工号: "<<endl;cin>>b[flag].number;cout<<"基本工资: "<<endl;cin>>b[flag].basesalary;cout<<"岗位工资: "<<endl;cin>>b[flag].jobsalary;cout<<"奖金: "<<endl;cin>>b[flag].jiangjin;cout<<"医疗住房基金: "<<endl;cin>>b[flag].yljj;cout<<"税金: "<<endl;cin>>b[flag].sj;cout<<endl;(6)查找函数流程图1:按姓名查询cout<<"输入要查询的姓名:";cin>>ming;message b[30];fstream sp("wenjian.txt",ios::in||ios::out);for(j=0,i=0;i<temp;i++){if(strcmp(b[i].name,ming)==0){cout<<"姓名籍贯职务部门身份证号工号基本工资岗位工资奖金医疗住房基金税金"<<endl;b[i].put();}}2.按工号查询:cout<<"输入要查询的工号:";cin>>nu;message b[30];for(i=0;i<temp;i++){if(b[i].number==nu){cout<<"姓名籍贯职务部门身份证号工号基本工资岗位工资奖金医疗住房基金税金"<<endl;b[i].put();}}(7)统计函数流程图1.按部门统计for(j=0,i=0;i<temp;i++){if(strcmp(b[i].bumen,a_bumen)==0){sum=sum+b[i].basesalary+b[i].jobsalary+b[i].jiangjin-b[i].yljj-b[i].sj; //实发工资u[i]=b[i].basesalary+b[i].jobsalary+b[i].jiangjin-b[i].yljj-b[i].sj;j++;}}int max;int min;max=u[0];min=u[0];int bb;for(i=0;i<temp;i++){if(U[i]>max){bb=U[i];U[i]=max;max=bb; //最高工资}}for(i=0;i<temp;i++){if(U[i]<min){bb=U[i];U[i]=min;min=U[i];//最低工资}}for(i=0;i<temp;i++){b[i].basesalary=abs(sum/(j+0.0)-b[i].basesalary);//工资均方差sum1=sum1+b[i].basesalary;}2.单位统计int U[20];for(i=0;i<20;i++){U[i]=0;}for(j=0,i=0;i<temp;i++){sum=sum+b[i].basesalary+b[i].jobsalary+b[i].jiangjin-b[i].yljj-b[i].sj;//实发工资U[i]=b[i].basesalary+b[i].jobsalary+b[i].jiangjin-b[i].yljj-b[i].sj;j++;}int max;int min;max=U[0];min=U[0];int bb;for(i=0;i<temp;i++){if(U[i]>max){bb=U[i];U[i]=max;max=bb; //最高工资}}for(i=0;i<temp;i++){if(U[i]<min){bb=U[i];U[i]=min;min=U[i];//最低工资}}for(i=0;i<temp;i++){b[i].basesalary=abs(sum/(j+0.0)-b[i].basesalary);//工资均方差sum1=sum1+b[i].basesalary;}四、调试分析1、开始使用文件保存时出现不能为read错误,后通过查阅资料解决了问题;2、删除部分程序开始不能判断是否找到了要删除的人员信息,后来加了flag 标记后可以判断了;3、统计部分程序在求均方差的时候出现算法错误,后来查阅了均方差公式后改正了过来4、使用友员函数可以解决类外作用域问题。