小型公司工资管理系统报告.doc
中国石油大学(华东)信息与控制工程学院 程序设计实习报告 小型公司工资管理系统的设计与实现 专业班级: 学 号: 姓 名: 起止日期: 指导老师: 2010年8月 fengzhanhuaer 小型公司工资管理系统 第 2 页 目录 一、实习目的3 二、实习内容3 1. 设计说明与要求3 2. 程序类体3 3. 流程图4 4. 程序代码4 三、设计思路38 四、输出格式39 2 fengzhanhuaer 小型公司工资管理系统 第 3 页 一、实习目的 1、熟悉c+中类的概念,类的封装,继承和多态的实现方式。 2、了解系统开发的需求分析,类层次设计,模块分析,编码测试,模块组 装和与整体调试的全过程。 3、逐步熟悉程序设计的方法,并养成良好的编程习惯。 二、实习内容 1、设计说明与要求: (1)说明: 公司主要有4类人员:经理,技术员,销售员,销售经理。要求存储这些人的职工号,姓名,月工资,岗位,年龄,性别等信息。 工资的计算方法: 经理:固定月薪为8000; 技术员:工作时间*小是工资(100元每小时); 销售员:销售额*4%提成; 销售经理:底薪(5000)+所辖部门销售额总额*0.5%; (2)要求: a输入数据要求每类人员不能少于4人,并按统一格式输出格式输出; b实现的功能: (1)数据录入:用键盘输入各类员工的数据; (2)数据统计:统计各销售经理下属销售员的销售额及销售额之和;销售经理按工资进行冒泡排序; (3)数据打印:按表格格式打印各类员工的数据信息; (4)数据备份:把各类员工的数据信息写入文本中保存; (5)退出:退出本系统,结束程序的运行; 2、程序的类体: 雇员类 技术员类 经理类 销售员类销售经理类 3 fengzhanhuaer 小型公司工资管理系统 第 4 页 3、流程图 开始 主函数 输入i i=4备份 i=1录入 i=2统计 i=3打印 i=5退出 输入i i=1 i=2 i=3 i=4 i=5 jsy类 xsy类 xsjl类 jl类 返回 结束 4 、程序代码 Main.cpp文件: #include <iostream> #include <cstdlib> #include<fstream> #include"功能函数.h" using namespace std; void main() 4 fengzhanhuaer 小型公司工资管理系统 第 5 页 int z;z=0; int flag=1,operate; do cout<<" 小型公司工资管理系统n" cout<<" n" cout<<" 请选择您所需的操作 n" cout<<" 数据输入:1,并按回车键 n" cout<<" 数据统计:2,并按回车键 n" cout<<" 数据打印:3,并按回车键 n" cout<<" 数据备份:4,并按回车键 n" cout<<" 退出系统:5,并按回车键 n" cout<<" n" cout<<" 请选择一个操作: " cin>>operate; switch(operate) case 1: cout<<"请输入数据:"<<endl; cout<<"正在输入数据."<<endl; set (z); break; case 2: cout<<"请等待."<<endl; if(z=0) 5 fengzhanhuaer 小型公司工资管理系统 第 6 页 cout<<" 警告!操作无法完成!请先输入员工信息!"<<'a'<<endl;/新增了录入错误警告功能,且发出响铃.防止错误操作 break; cout<<"正在进行数据统计."<<endl; count(); break; case 3: cout<<"请等待."<<endl; if(z=0) cout<<" 警告!操作无法完成!请先输入员工信息!"<<'a'<<endl; break; cout<<"正在进行数据打印."<<endl; output(); ; break; case 4: cout<<"请等待."<<endl; if(z=0) 6 fengzhanhuaer 小型公司工资管理系统 第 7 页 cout<<" 警告!操作无法完成!请先输入员工信息!"<<'a'<<endl; break; cout<<"正在进行数据备份."<<endl; backup(); break; case 5: exit(0); break; default: cout<<"错误!请重新选择1-5间的数输入"<<'a'<<endl<<endl; break; while(1); cout<<"退出菜单,回到主程序继续向下执行"<<endl; 功能函数.h文件 #include"类体.h" #include<fstream> using namespace std; jsy a2; xsjl b2; jl c2; 7 fengzhanhuaer 小型公司工资管理系统 第 8 页 xsy d4; int set(int &x) int i; do cout<<" 小型公司工资管理系统"<<endl; "<<endl; cout<<" 请选择您所需要的操作 "<<endl; cout<<" 经理数据输入 : 1,并按回车键 "<<endl; cout<<" 技术员数据输入 : 2,并按回车键 "<<endl; cout<<" 销售员数据输入 : 3,并按回车键 "<<endl; cout<<" 销售经理数据输入: 4,并按回车键 "<<endl; cout<<" 返回上一层 : 5,并按回车 "<<endl; cout<<" "<<endl; cout<<" cout<<" 请选择一个操作: " cin>>i; switch(i) case 1: int k; k=0; while(k<2) ck.input4(); k+; 8 fengzhanhuaer 小型公司工资管理系统 第 9 页 break; case 2: int j; j=0; while(j<2) aj.input1(); j+; break; case 3: int l; l=0; while(l<4) dl.input3(); l+; int m,n,a; for(n=0;n<2;n+) a=0; for(m=0;m<4;m+) if(d0.onum2()=bn.onum() 9 fengzhanhuaer 小型公司工资管理系统 第 10 页 a=d0.osell()+a; bn.set(a); break; case 4: int o; o=0; while(o<2) bo.input2(); o+; break; case 5: break; default : cout<<"错误!请重新输入15之间的数"<<'a'<<endl<<endl; 10 fengzhanhuaer 小型公司工资管理系统 第 11 页 while(i!=5); x+; return 0; void count() int i; i=0; int k; xsy h2; while(i<2) k=0; for(int j=0;j<5;j+) if(dj.onum2()=bi.onum() hk=dj; k+; int a; a=h0.osell()+h1.osell(); bi.set(a); 11 fengzhanhuaer 小型公司工资管理系统 第 12 页 cout<<" 职工编号为"<<bi.onum()<<"销售经理"<<bi.oname()<<"下属销售员的业绩为:"<<endl; cout<<endl; "<<endl;/ cout<<" 表格不在类体中设置是考虑到类的通用性问题 cout<<" "<<" 职工号 "<<""<<" 姓名 "<<""<<" 销售额(元)"<<""<<endl; cout<<setiosflags(ios:right)<<" "<<endl; cout<<" "<<setw(12)<<h0.onum()<<""<<setw(10)<<h0.oname()<<""<<setw(12)<<h0.osell()<<""<<endl;/中间几行可采用循环结构,增加函数的灵活性。 cout<<" "<<endl; cout<<" "<<setw(12)<<h1.onum()<<""<<setw(10)<<h1.oname()<<""<<setw(12)<<h1.osell()<<""<<endl; cout<<" "<<endl; cout<<" "<<"销售额总计:"<<""<<setw(24) <<a<<""<<endl; cout<<" "<<endl; cout<<endl; i+; xsjl e; for(int q=0;q<1;q+) for(int w=0;w<1-q;w+) if(bw.oincome()<bw+1.oincome() e=bw;bw=bw+1;bw+1=e; 12 fengzhanhuaer 小型公司工资管理系统 第 13 页 cout<<"销售经理按工资排序为:"<<endl; cout<<endl; cout<<" "<<endl; cout<<setiosflags(ios:right)<<" "<<" 职工号 "<<""<<" 姓名 "<<""<<" 性别 "<<""<<" 年龄 "<<""<<" 工资 "<<""<<endl; cout<<" "<<endl; cout<<" "<<setw(10)<<b0.onum()<<" "<<setw(10)<<b0.osex()<<""<<setw(10)<<b0.oname()<<""<<setw(10)<<b0.oage()<<""<<setw(10)<<b0.oincome()<<""<<endl; cout<<" "<<endl; cout<<" "<<setw(10)<<b1.onum()<<" "<<setw(10)<<b1.osex()<<""<<setw(10)<<b1.oname()<<""<<setw(10)<<b1.oage()<<""<<setw(10)<<b1.oincome()<<""<<endl; cout<<" "<<endl; void output() cout<<" 职工基本情况一览表如下:"<<endl<<endl; cout<<" 技术员:"<<endl<<endl; 13 fengzhanhuaer 小型公司工资管理系统 第 14 页 cout<<" "<<endl; cout<<" "<<" 职工号 "<<""<<" 姓名 "<<""<<" 性别 "<<""<<" 年龄 "<<""<<" 工资 "<<""<<endl; cout<<" "<<endl; cout<<" "<<setw(10)<<a0.onum()<<" "<<setw(10)<<a0.osex()<<""<<setw(10)<<a0.oname()<<""<<setw(10)<<a0.oage()<<""<<setw(10)<<a0.oincome()<<""<<endl; cout<<" "<<endl; cout<<" "<<setw(10)<<a1.onum()<<" "<<setw(10)<<a1.osex()<<""<<setw(10)<<a1.oname()<<""<<setw(10)<<a1.oage()<<""<<setw(10)<<a1.oincome()<<""<<endl; cout<<" "<<endl; cout<<endl; cout<<" 经理:"<<endl<<endl; cout<<" "<<endl; cout<<" "<<" 职工号 "<<""<<" 姓名 "<<""<<" 性别 "<<""<<" 年龄 "<<""<<" 工资 "<<""<<endl; cout<<" "<<endl; cout<<" "<<setw(10)<<c0.onum()<<" "<<setw(10)<<c0.osex()<<""<<setw(10)<<c0.oname()<<""<<setw(10)<<c0.oage()<<""<<setw(10)<<c0.oincome()<<""<<endl; cout<<" "<<endl; 14 fengzhanhuaer 小型公司工资管理系统 第 15 页 cout<<" "<<setw(10)<<c1.onum()<<" "<<setw(10)<<c1.osex()<<""<<setw(10)<<c1.oname()<<""<<setw(10)<<c1.oage()<<""<<setw(10)<<c1.oincome()<<""<<endl; cout<<" "<<endl; cout<<endl; cout<<" 销售经理:"<<endl<<endl; cout<<" "<<endl; cout<<" "<<" 职工号 "<<""<<" 姓名 "<<""<<" 性别 "<<""<<" 年龄 "<<""<<" 工资 "<<""<<endl; cout<<" "<<endl; cout<<" "<<setw(10)<<b0.onum()<<" "<<setw(10)<<b0.osex()<<""<<setw(10)<<b0.oname()<<""<<setw(10)<<b0.oage()<<""<<setw(10)<<b0.oincome()<<""<<endl; cout<<" "<<endl; cout<<" "<<setw(10)<<b1.onum()<<" "<<setw(10)<<b1.osex()<<""<<setw(10)<<b1.oname()<<""<<setw(10)<<b1.oage()<<""<<setw(10)<<b1.oincome()<<""<<endl; cout<<" "<<endl; cout<<endl; cout<<" 销售员:"<<endl<<endl; cout<<" "/受窗口大小的限制此处正好为一行,故不用加endl cout<<" "<<"职工号"<<""<<" 姓名 "<<""<<" 性别 "<<""<<" 年龄 "<<""<<" 工资 "<<""<<"所属部门经理编号"<<"" 15 fengzhanhuaer 小型公司工资管理系统 第 16 页 cout<<" " cout<<" "<<setw(6)<<d0.onum()<<" "<<setw(6)<<d0.osex()<<""<<setw(8)<<d0.oname()<<" "<<setw(8)<<d0.oincome()<<""<<setw(6)<<d0.oage()<<""<<setw(16)<<d0.onum2()<<"" cout<<" " cout<<" "<<setw(6)<<d1.onum()<<" "<<setw(6)<<d1.osex()<<""<<setw(8)<<d1.oname()<<" "<<setw(8)<<d1.oincome()<<""<<setw(6)<<d1.oage()<<""<<setw(16)<<d1.onum2()<<"" cout<<" " cout<<" "<<setw(6)<<d2.onum()<<" "<<setw(6)<<d2.osex()<<""<<setw(8)<<d2.oname()<<" "<<setw(8)<<d2.oincome()<<""<<setw(6)<<d2.oage()<<""<<setw(16)<<d2.onum2()<<"" cout<<" " cout<<" "<<setw(6)<<d3.onum()<<" "<<setw(6)<<d3.osex()<<""<<setw(8)<<d3.oname()<<" "<<setw(8)<<d3.oincome()<<""<<setw(6)<<d3.oage()<<""<<setw(16)<<d3.onum2()<<"" cout<<" " cout<<endl; void backup() 16 fengzhanhuaer 小型公司工资管理系统 第 17 页 fstream backup; backup.open("c:备份.txt",ios:in|ios:out|ios:trunc); backup<<" 职工基本情况一览表如下:"<<endl<<endl; backup<<" 技术员:"<<endl<<endl; backup<<" "<<endl; backup<<" "<<" 职工号 "<<""<<" 姓名 "<<""<<" 性别 "<<""<<" 年龄 "<<""<<" 工资 "<<""<<endl; backup<<" "<<endl; backup<<" "<<setw(10)<<a0.onum()<<" "<<setw(10)<<a0.osex()<<""<<setw(10)<<a0.oname()<<""<<setw(10)<<a0.oage()<<""<<setw(10)<<a0.oincome()<<""<<endl; backup<<" "<<endl; backup<<" "<<setw(10)<<a1.onum()<<" "<<setw(10)<<a1.osex()<<""<<setw(10)<<a1.oname()<<""<<setw(10)<<a1.oage()<<""<<setw(10)<<a1.oincome()<<""<<endl; backup<<" "<<endl; backup<<endl; backup<<" 经理:"<<endl<<endl; backup<<" "<<endl; backup<<" "<<" 职工号 "<<""<<" 姓名 "<<""<<" 性别 "<<""<<" 年龄 "<<""<<" 工资 "<<""<<endl; backup<<" 17 fengzhanhuaer 小型公司工资管理系统 第 18 页 "<<endl; backup<<" "<<setw(10)<<c0.onum()<<" "<<setw(10)<<c0.osex()<<""<<setw(10)<<c0.oname()<<""<<setw(10)<<c0.oage()<<""<<setw(10)<<c0.oincome()<<""<<endl; backup<<" "<<endl; backup<<" "<<setw(10)<<c1.onum()<<" "<<setw(10)<<c1.osex()<<""<<setw(10)<<c1.oname()<<""<<setw(10)<<c1.oage()<<""<<setw(10)<<c1.oincome()<<""<<endl; backup<<" "<<endl; backup<<endl; backup<<" 销售经理:"<<endl<<endl; backup<<" "<<endl; backup<<" "<<" 职工号 "<<""<<" 姓名 "<<""<<" 性别 "<<""<<" 年龄 "<<""<<" 工资 "<<""<<endl; backup<<" "<<endl; backup<<" "<<setw(10)<<b0.onum()<<" "<<setw(10)<<b0.osex()<<""<<setw(10)<<b0.oname()<<""<<setw(10)<<b0.oage()<<""<<setw(10)<<b0.oincome()<<""<<endl; backup<<" "<<endl; backup<<" "<<setw(10)<<b1.onum()<<" "<<setw(10)<<b1.osex()<<""<<setw(10)<<b1.oname()<<""<<setw(10)<<b1.oage()<<""<<setw(10)<<b1.oincome()<<""<<endl; backup<<" "<<endl; backup<<endl; 18 fengzhanhuaer 小型公司工资管理系统 第 19 页 backup<<" 销售员:"<<endl<<endl; backup<<" "<<endl; backup<<" "<<"职工号"<<""<<" 姓名 "<<""<<" 性别 "<<""<<" 年龄 "<<""<<" 工资 "<<""<<"所属部门经理编号"<<""<<endl; backup<<" "<<endl; backup<<" "<<setw(6)<<d0.onum()<<" "<<setw(8)<<d0.osex()<<""<<setw(8)<<d0.oname()<<" "<<setw(8)<<d0.oincome()<<""<<setw(6)<<d0.oage()<<""<<setw(16)<<d0.onum2()<<""<<endl; backup<<" "<<endl; backup<<" "<<setw(6)<<d1.onum()<<" "<<setw(8)<<d1.osex()<<""<<setw(8)<<d1.oname()<<" "<<setw(8)<<d1.oincome()<<""<<setw(6)<<d1.oage()<<""<<setw(16)<<d1.onum2()<<""<<endl; backup<<" "<<endl; backup<<" "<<setw(6)<<d2.onum()<<" "<<setw(8)<<d2.osex()<<""<<setw(8)<<d2.oname()<<" "<<setw(8)<<d2.oincome()<<""<<setw(6)<<d2.oage()<<""<<setw(16)<<d2.onum2()<<""<<endl; backup<<" "<<endl; backup<<" "<<setw(6)<<d3.onum()<<" "<<setw(8)<<d3.osex()<<""<<setw(8)<<d3.oname()<<" "<<setw(8)<<d3.oincome()<<""<<setw(6)<<d3.oage()<<""<<setw(16)<<d3.onum2()<<""<<endl; 19 fengzhanhuaer 小型公司工资管理系统 第 20 页 backup<<" "<<endl; backup<<endl; backup.close; 类体.h文件 #include<iomanip> #include<string> using namespace std; class gy /基类 public: void input() 请输入雇员职工号: " cin >>num; cout<<setw(40)<<"请输入雇员姓名(请简写到十个字母以内): " cin>>name; cout<<setw(40)<<"请输入雇员性别(m/w): " cin>>sex; cout<<setw(40)<<"请输入雇员年龄: " cin>>age; string oname()return name; /因为整型和字符型变量输入时稍有不符就会导致系统瘫痪,而录入信息又较多且年龄等信息不参加算术运算,采用string型可大大减少系统瘫痪机会。 int onum()return num; string oage()return age; string osex()return sex; protected : 20 fengzhanhuaer 小型公司工资管理系统 第 21 页 int income; int num; string name; string age; string sex; ; class jsy :public gy /技术员类 public: void input1() cout<<"请输入技术员信息"<<endl; gy:input(); cout<<setw(40)<<"请输入技术员工作时间: " cin>>time; income =time*100; oincome()return income; int protected : int time; ; class jl : public gy /经理类 public : void input4() cout<<"请输入经理信息"<<endl; gy:input(); income=0; 21 fengzhanhuaer 小型公司工资管理系统 第 22 页 int oincome()income=8000; return income; ; class xsy:public gy /销售员类 public : void input3() cout<<"请输入销售员的信息"<<endl; gy:input(); 请输入雇员销售额: " cin>>sell; cout<<setw(40)<<"请输入所属的销售经理编号: " cin>>num2; income=sell*0.04; int onum2()return num2; int osell()return sell; int oincome()return income; protected : int sell; int num2; ; class xsjl:public gy /销售经理类 public : int set(int a)income=a*0.005+5000;return 0; void input2() 22 fengzhanhuaer 小型公司工资管理系统 第 23 页 cout<<"请输入销售经理信息"<<endl; gy:input(); int oincome()return income; int set2(int a)income=a ;return 0; ; 三、设计思路 本程序开