石油大学小型工资管理系统C .
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国石油大学(华东)信息与控制工程学院《程序设计实习》报告
小型公司工资管理系统设计
专业班级:
学号:
姓名:
实习时间:
2015年7月
目录
一、实习内容 (1)
二、设计思路 (4)
三、程序调试过程中典型问题及解决方法 (5)
四、程序使用说明 (6)
五、总结及心得体会 (22)
一、实习内容
设计一个简单的《小型公司管理系统》,。
了解系统开发的需求设计、类层次设计、模版分析、模块组装与整体调试的过程;熟悉程序设计的方法。
1..题目:小型公司工资管理系统的设计
类的结构
先创建了一个Employer基类.然后派生出四个类: Manager、Technician、Salesman、Salemanager。
分别对经理、技术员、销售员、销售经理的数据进行输入。
然后选用了一个switch的多分枝选择结构,依次据菜单的选择条件执行数据的输入、数据统计、数据打印、数据备份和退出等。
数据的备份要用到fstream类,用来支持对磁盘文件的输入输出。
对于switch,结束循环用到exit函数。
此函数的参数为任意整数。
运行程序后,根据菜单栏的提示选择操作。
输入“1”回车后,进入职工基本数据输入栏,在这里,要将所有的技术员、销售员、销售经理、经理的职工号、姓名、性别、工作时间等信息输入程序中。
职工的数据输入完成后自动跳转到菜单栏,选择“2”回车后进入
到数据统计界面,程序会自动对你输入的各销售经理下属销售员的销售额及销售额之和进行统计,并对销售经理按工资进行排序。
数据统计完成后,选择“3”,程序会对你输入的职工基本信息进行打印,打印结果显示在控制台下。
在菜单栏中继续选择“4”后,程序将对所有的员工信息进行打印并保存到文件中。
最后选择“5”,根据提示是否退出本程序,输入“Y”,结束程序执行;输入“N”,返回主菜单继续进行程序。
2.设计说明与基本要求:
(1)公司主要有4类人员:经理、技术员、销售员、销售经理。
要求存储这些人的职工号、姓名、性别、年龄、月工资等信息;
(2) 工资的计算方法:经理:固定月薪为8000元;技术员:工作时间×工资(100元/小时);销售员:销售额×4%提成;销售经理:底薪(5000元)+下属销售员销售额总额×0.5%;
(3) 员工基本数据的输入:要求每类人员不能少于4人,其中销售员需要8名,每名销售经理手下有2名销售员。
3. 实现的基本功能:数据输入、数据统计、数据打印、数据备份、退出。
(应用程序中要有菜单,用于选择各项功能)
4.菜单说明
①数据输入要通过键盘;
②统计是统计销售经理下属销售员的销售额及销售额之和,销售经理按工资冒泡排序;
③数据打印是以表格形式在屏幕上输出;
④数据备份是将所有的员工信息保存到文件;
⑤退出:结束程序运行。
二、设计思路
从给出的运行结果看主函数是一个选择结构,在这里我采用switch结构,根据学过的c++知识合理的定义类及其对象在类中声明公有函数,来完成对保护数据成员的调用,留作接口,输出数据。
根据运行结果菜单来看知道有5个功能,要分为5个函数来一一实现所需功能,所以在整个系统就要分为5大块来完成。
三、程序调试过程中典型问题及解决方法
在编写整个程序的第一部分内容——数据输入函数时,完成的较快,但是类数组的定义并没有定义为全局数组,虽然把第一天的任务完成了,但是这样的定义给第二天的统计函数的书写造成的极大地不便。
结果第二天我又重新修改了第一天的程序,把类数组定义为了全局数组,方便后面程序的调用。
在编写打印函数时,遇到了很多难题,像如何把保护类的成员函数给调用出来,刚开始想到是指针的方法,但是经过尝试,可是实现,但是会让程序显得十分冗杂,后来和同学讨论,发现了一种更为简便的方法,在public里面定义一个return函数,通过这个函数可以访问protected里面的成员函数,这样就可以在类外用这些数据。
在编写主函数时采用的switch结构,但这个结构只能使用一次,于是我想到了for循环语句,考虑到在输入选择操作时,可能有输错误的行为,所以把这个函数能够循环的最大次数规定到了20次。
编写可控各类人员函数时,想要用数组,但是数组必须有初始值,考虑到用户是一家小型公司,就把初始值定为30,方便用户使用。
在编写打印备份函数时,由于各类成员姓名长度不一,无法使表格对齐,翻看了课本,学到了一种控制字符长度的变量setw,不论其后的数据占多大的空间,其长度是固定值。
四、程序使用说明
#include<iostream>
#include<string>
#include<iomanip>///////////控制输出量长度的头文件#include<fstream>//////////输入输出流头文件
using namespace std;
void datainput();
void chose();
void statistics();
void print();
void backup();
int n,i;
int a,b,c,d;
class Employee//基类雇员类
{protected:
int num,salary;
int age;
string name;
char sex;
public:
void display();
int return_num()///////////
{return num;}
string return_name()//////////
{return name;}
char return_sex()//////////
{return sex;}
int return_age()//////////
{return age;}
int return_salary()//////////
{return salary;}
};
void Employee::display()//基类成员函数
{
cout<<"姓名:";
cin>>name;
cout<<"性别(男士填m/女士填w):";
cin>>sex;
cout<<"年龄:";
cin>>age;
}
class Technician:public Employee//定义技术员类,继承方式为共有继承{
protected:
double worktime;
public:
void Technician_out()
{cout<<"技术员编号:";
cin>>num;//输入技术员编号
display();//输入年龄性别姓名
cout<<"工作时间:";
cin>>worktime;
salary=100*worktime;
}
};
Technician t[30];//技术员
class Manager:public Employee//定义经理类,继承方式为共有继承{
public:
void Manager_out()
{cout<<"经理编号:";
cin>>num;//输入经理编号
display();//输入年龄性别姓名
salary=8000;}
};
Manager m[30];//经理
class Salesman:public Employee//定义销售员类,继承方式为共有继承{protected:
double amount;
int belong_manager_num;
public:
void Salesman_out()
{cout<<"销售员编号:";
cin>>num;//输入销售员编号
display();//输入年龄性别姓名
cout<<"销售额:";
cin>>amount;//输入销售额
salary=amount*0.04;
cout<<"所属经理编号:";
cin>>belong_manager_num;}//输入所属经理编号
int fun1() ////////// {return belong_manager_num;}
string fun2() //////////
{return name;}
int fun3() //////////
{return amount;}
};
Salesman s[30];//销售员
class SalesManager:public Employee//定义销售经理类,继承方式为共有继承{protected:
int saleroom;
public:
void SalesManager_out()
{cout<<"销售经理编号:";
cin>>num;//输入销售经理编号
display();//输入年龄性别姓名
}
void SalesManager_salary_calculate(int n)//销售经理工资计算
{salary=n*0.005+5000;
saleroom=n;}
int return_salary(){return salary;}
int return_saleroom(){return saleroom;}
};
SalesManager sm[30];//销售经理
void main()///////////////////////////////////////////////////////////////////////////////////主函数{
for(i=0;i<20;i++)
{ chose();
switch (n)
{case 1:datainput();break;
case 2:statistics();break;
case 4:backup();break;
case 5:exit(0);break;
default :cout<<"您输入的数字错误!"<<endl;}
}}
void chose()
{cout<<" ★★小型公司工资管理系统★★"<<endl;
cout<<"┏━━━━━━━━━━━━━━━┓"<<endl;
cout<<"┃请选择您所需的操作┃"<<endl;
cout<<"┃数据输入:1,并按回车键┃"<<endl;
cout<<"┃数据统计:2,并按回车键┃"<<endl;
cout<<"┃数据打印:3,并按回车键┃"<<endl;
cout<<"┃数据备份:4,并按回车键┃"<<endl;
cout<<"┃退出系统:5,并按回车键┃"<<endl;
cout<<"┗━━━━━━━━━━━━━━━┛"<<endl;
cout<<"请选择您的操作!";
cin>>n;
}
void datainput()////////////////////////////////////////////////////////////////////////////////////////////////数据输入函数
{int i;
cout<<"请输入各个职位函数"<<endl;
cout<<"技术员:";
cin>>a;
cout<<"经理:";
cin>>b;
cout<<"销售员:";
cin>>c;
cout<<"销售经理:";
cout<<"━━━━━━━━━━━━━━"<<endl;
for(i=0;i<a;i++)
t[i].Technician_out();
cout<<"━━━━━━━━━━━━━━"<<endl;
for(i=0;i<b;i++)
m[i].Manager_out();
cout<<"━━━━━━━━━━━━━━"<<endl;
for(i=0;i<c;i++)
s[i].Salesman_out();
cout<<"━━━━━━━━━━━━━━"<<endl;
for(i=0;i<d;i++)
sm[i].SalesManager_out();
cout<<"━━━━━━━━━━━━━━"<<endl;
}
void order()////////////////////////////////////////////////////////////////////////////////////////////////冒泡排序函数{SalesManager p;
for(int y=0;y<d-1;y++)
for(int z=1;z<d;z++)
if(sm[y].return_saleroom()<sm[z].return_saleroom())
{p=sm[z];
sm[z]=sm[y];
sm[y]=p;}
}
void statistics()//////////////////////////////////////////////////////////////////////////////////////////////统计函数{for(int x=0;x<d;x++)
{int sum=0;int j;
cout<<"职工号为"<<sm[x].return_num()<<"销售经理"<<sm[x].return_name()<<"下属销售
<<endl;
cout<<"┏━━━━━━━┳━━━━━━━┳━━━━━━━┓"<<endl;
cout<<"┃职工号┃姓名┃销售额┃"<<endl;
for(j=0;j<c;j++)
if(sm[x].return_num()==s[j].fun1())
{cout<<"┣━━━━━━━╋━━━━━━━╋━━━━━━━┫"<<endl;
sum=sum+s[j].fun3();
cout<<"┃"<<setw(14)<<s[j].return_num()<<"┃"<<setw(14)<<s[j].return_name()<<"┃"<<setw(14)<<s[j].fun3()<<"┃"<<endl;}
sm[x].SalesManager_salary_calculate(sum);
cout<<"┣━━━━━━━╋━━━━━━━┻━━━━━━━┫"<<endl;
cout<<"┃"<<setw(14)<<"销售额总计"<<"┃"<<setw(30)<<sum<<"┃"<<endl;
cout<<"┗━━━━━━━┻━━━━━━━━━━━━━━━┛"<<endl;
}
cout<<"销售经理按工资排序为:"<<endl;
cout<<"┏━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┓"<<endl;
cout<<"┃职工号┃姓名┃性别┃年龄┃工资┃"<<endl;
order();
for(int i=0;i<d;i++)
{
cout<<"┣━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━┫"<<endl;
cout<<"┃"<<setw(12)<<sm[i].return_num()<<"┃"<<setw(12)<<sm[i].return_name()<<"┃"
<<setw(12)<<sm[i].return_sex()<<"┃"<<setw(12)<<sm[i].return_age()<<"┃"<<setw(12)<<sm[i].return_salary()<<"┃"<<endl;
}
━┛"<<endl;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////打印函数
void print()
{int i,j,k;
cout<<"请等待……"<<endl;
cout<<"职工基本情况一览表如下"<<endl;
cout<<"技术员"<<endl;///////////////////////////////////////////////////////////////////////////////技术员
cout<<"┏━━━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━┓"<<endl;
cout<<"┃职工号┃姓名┃性别┃年龄┃工资┃"<<endl;
for(i=0;i<a;i++)
{
cout<<"┣━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━┫"<<endl;
cout<<"┃"<<setw(10)<<t[i].return_num()<<"┃"<<setw(10)<<t[i].return_name()<<"┃"<<setw(10)
<<t[i].return_sex()<<"┃"<<setw(10)<<t[i].return_age()<<"┃"<<setw(10)<<t[i].return_salary()<<"┃"<<endl;
}
cout<<"┗━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┛"<<endl;
cout<<"━━━━━━━━━━━━━━━━━━━"<<endl;
cout<<"经理"<<endl;////////////////////////////////////////////////////////////////////////////////////经理
cout<<"┏━━━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━┓"<<endl;
cout<<"┃职工号┃姓名┃性别┃年龄┃工资┃"<<endl;
{
cout<<"┣━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━┫"<<endl;
cout<<"┃"<<setw(10)<<m[i].return_num()<<"┃"<<setw(10)<<m[i].return_name()<<"┃"<<setw(10)
<<m[i].return_sex()<<"┃"<<setw(10)<<m[i].return_age()<<"┃"<<setw(10)<<m[i].return_salary()<<"┃"<<endl;
}
cout<<"┗━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┛"<<endl;
cout<<"━━━━━━━━━━━━━━━━━━━"<<endl;
cout<<"销售经理"<<endl;///////////////////////////////////////////////////////////////////////////////销售经理cout<<"┏━━━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━┓"<<endl;
cout<<"┃职工号┃姓名┃性别┃年龄┃工资┃"<<endl;
for(k=0;k<d;k++)
{int sum=0;
for(j=0;j<c;j++)
{if(sm[k].return_num()==s[j].fun1())
sum=sum+s[j].fun3();}
sm[k].SalesManager_salary_calculate(sum);
cout<<"┣━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━┫"<<endl;
cout<<"┃"<<setw(10)<<sm[k].return_num()<<"┃"<<setw(10)<<sm[k].return_name()<<"┃"<<setw(10)
<<sm[k].return_sex()<<"┃"<<setw(10)<<sm[k].return_age()<<"┃"<<setw(10)<<sm[k].return_salary()<<"┃"<<endl;
}
cout<<"┗━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┛
cout<<"━━━━━━━━━━━━━━━━━━━"<<endl;
cout<<"销售员"<<endl;///////////////////////////////////////////////////////////////////////////////////销售员cout<<"┏━━━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━━┓"<<endl;
cout<<"┃职工号┃姓名┃性别┃年龄┃工资┃所属经理编号┃"<<endl;
for(i=0;i<c;i++)
{
cout<<"┣━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━━┫"<<endl;
cout<<"┃"<<setw(10)<<s[i].return_num()<<"┃"<<setw(10)<<s[i].return_name()<<"┃"<<setw(10)
<<s[i].return_sex()<<"┃"<<setw(10)<<s[i].return_age()<<"┃"<<setw(10)<<s[i].return_salary()<<"┃"<<setw(14)<<s[i].fun1()<<"┃"<<endl;
}
cout<<"┗━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━━┛"<<endl;
cout<<"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"<<endl;
}
void backup()///////////////////////////////////////////////////////////////////////////////////////////////////////////备份函数
{ofstream putout;//建立输出文件流对象
putout.open("职员基本信息备份.txt");//使文件流与txt文件建立关联
putout<<"职工基本情况一览表如下"<<endl;
putout<<"技术员"<<endl;///////////////////////////////////////////////////////////////////////////////技术员putout<<"┏━━━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━┓"<<endl;
putout<<"┃职工号┃姓名┃性别┃年龄┃工资┃
for(i=0;i<a;i++)
{
putout<<"┣━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━┫"<<endl;
putout<<"┃"<<setw(10)<<t[i].return_num()<<"┃"<<setw(10)<<t[i].return_name()<<"┃"<<setw(10)
<<t[i].return_sex()<<"┃"<<setw(10)<<t[i].return_age()<<"┃"<<setw(10)<<t[i].return_salary()<<"┃"<<endl;
}
putout<<"┗━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┛"<<endl;
putout<<"━━━━━━━━━━━━━━━━━━━"<<endl;
putout<<"经理"<<endl;////////////////////////////////////////////////////////////////////////////////////经理putout<<"┏━━━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━┓"<<endl;
putout<<"┃职工号┃姓名┃性别┃年龄┃工资┃"<<endl;
for(i=0;i<b;i++)
{
putout<<"┣━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━┫"<<endl;
putout<<"┃"<<setw(10)<<m[i].return_num()<<"┃"<<setw(10)<<m[i].return_name()<<"┃"<<setw(10)
<<m[i].return_sex()<<"┃"<<setw(10)<<m[i].return_age()<<"┃"<<setw(10)<<m[i].return_salary()<<"┃"<<endl;
}
putout<<"┗━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┛"<<endl;
putout<<"━━━━━━━━━━━━━━━━━━━"<<endl;
putout<<"销售经理"<<endl;///////////////////////////////////////////////////////////////////////////////销售经理
"<<endl;
putout<<"┃职工号┃姓名┃性别┃年龄┃工资┃"<<endl;
for(int k=0;k<d;k++)
{int sum=0;
for(int j=0;j<c;j++)
{if(sm[k].return_num()==s[j].fun1())
sum=sum+s[j].fun3();}
sm[k].SalesManager_salary_calculate(sum);
putout<<"┣━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━┫"<<endl;
putout<<"┃"<<setw(10)<<sm[k].return_num()<<"┃"<<setw(10)<<sm[k].return_name()<<"┃"<<setw(10)
<<sm[k].return_sex()<<"┃"<<setw(10)<<sm[k].return_age()<<"┃"<<setw(10)<<sm[k].return_salary()<<"┃"<<endl;
}
putout<<"┗━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┛"<<endl;
putout<<"━━━━━━━━━━━━━━━━━━━"<<endl;
putout<<"销售员"<<endl;///////////////////////////////////////////////////////////////////////////////////销售员putout<<"┏━━━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━━┓"<<endl;
putout<<"┃职工号┃姓名┃性别┃年龄┃工资┃所属经理编号┃"<<endl;
for(i=0;i<c;i++)
{
putout<<"┣━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━━┫"<<endl;
putout<<"┃"<<setw(10)<<s[i].return_num()<<"┃"<<setw(10)<<s[i].return_name()<<"┃"<<setw(10)
"<<setw(10)<<s[i].return_salary()<<"┃"<<setw(14)<<s[i].fun1()<<"┃"<<endl;
}
putout<<"┗━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━━┛"<<endl;
putout<<"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"<<endl;
}
使用说明:
输入1,然后按Enter键,填入各类人员人数,然后再输入各类人员信息;
输入2,然后按Enter键,统计各销售经理下属销售员的销售额及销售额之和,销售经理工资按冒泡排序;
输入3,然后按Enter键,对每个职位的数据进行打印;
输入4,然后按Enter键,进行数据备份;
输入5,然后按Enter键,退出函数。