2022年面向对象程序设计大作业 .pdf
面向对象程序设计大作业- 计算器类、学校人员管理系统学 院 名称数学与系统科学学院专业 班级信息与计算科学 2013-2 班学生 姓名陈涛学号 201301050904 指 导 教 师孙红梅完成时间: 2015 年 7 月 1 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 32 页 - - - - - - - - - 山东科技大学大 作 业 任 务 书一、题目:计算器类二、原始资料:面向对象程序设计大作业要求和任务书三、应解决下列各主要问题:计算器类:设计一个计算器类模板,适用各类型表达式的“+、- 、 / ” 数学四则运算以及“、=、 、=、=、!=、=”等关系运算。数学四则运算表达式中可含有加、减、乘、除运算符以及各型数据的运算对象。程序可以直接输入数学表达式以及关系表达式,不需要任何转换,就可以直接输出数学四则运算和逻辑运算的结果。并且操作简单、界面清晰、灵活、实用、方便等。(系统功能可充分自由发挥) 。扩展功能:三角运算、进制转换、开方、幂指数等。问题描述设计一个简单计算器。 用户输入四则运算表达式, 程序输出正确结果。 当表达式中数据格式或运算符输入错误,程序给出错误信息。要求:(1)表达式的左、右操作数可以为整数或实数。(2)运算符限制为 +,- ,*,/ (3)输入表达式允许有前导空格,允许在运算符前后嵌入空格。(4)检测表达式由以下函数完成:void check(char *input, int &a, double &y, int &op, char * &err); 其中参数意义如下: input 输入表达式的字符串。x 返回表达式的左操作数转换结果数值。此题为简单起见,把数据统一转换成double 类型。y 返回表达式的右操作数转换结果数值。op 返回对运算式的判断结果。若输入表达式左、右操作数和运算符都正确,则返回值为1、2、3、4,分别表示做 +、-、*、/ 运算。若返回 -1,表示左操作数错;若返回 -2,表示右操作数错;若返回-3,表示操作符错。err 返回显示错误信息的字符串。附录(源程序代码)#include iostream #include string using namespace std; void check(char *input, double &x, double &y, int &op, char * &err); double chage(char *ch); int main() double x,y; int op; char input40,*err; double result; gets(input); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 32 页 - - - - - - - - - check(input,x,y,op,err); if(op0) couterrendl; return 0; switch(op) case 1: result=x+y; break; case 2: result=x-y; break; case 3: result=x*y; break; case 4: result=x/y; break; coutinput=result=0&inputj+1=0&inputj1) err=左操作数错误 !; op=-1; return; j+; k=0; while(i=0&inputj+1=0&inputj1) err=右操作数错误 !; op=-2; return; j+; k=0; while(i=0;i-) wre=1; j=0; while(jf-i-1) wre*=10; j+; result+=(chi-0)*wre; for(i=f+1;chfχi+) wre=1; j=0; while(ji-f) wre*=0.1; j+; result+=(chi-0)*wre; return result; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 32 页 - - - - - - - - - 指导教师评语成绩:指导教师(签章):2015 年月日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 32 页 - - - - - - - - - 山东科技大学大 作 业 任 务 书六、题目:公司人员工资管理系统七、原始资料:面向对象程序设计大作业要求和任务书八、应解决下列各主要问题:公司人员工资管理系统:本程序用于管理一个公司的人员工资,所有雇员类(Employee) 有共性的数据成员是:编号、 姓名和工资。 技术员类 (Technician)的数据成员包括共性的数据成员以及工作时间( 每月的 ) 、每小时的工资。销售员类(Salesman) 的数据成员包括共性的数据成员以及销售额( 本月 ) 、提成。经理类(Manager) 的 数 据 成 员 包 括 共 性 的 数 据 成 员 以 及 月 工 资 。 销 售 员 兼 经 理 类(Salesmanager)的数据成员包括销售员类和经理类的数据成员。九、设计说明书应附有下列图纸:无十、小组分工说明:无六、命题发出日期:2015.6.10 设计完成日期:2015.7.10 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 32 页 - - - - - - - - - 目的与要求本程序用于管理一个公司的人员工资,所有雇员类 (Employee) 有共性的数据成员是:编号、姓名和工资。技术员类(Technician)的数据成员包括共性的数据成员以及工作时间(每月的) 、每小时的工资。 销售员类(Salesman) 的数据成员包括共性的数据成员以及销售额(本月) 、提成。经理类 (Manager)的数据成员包括共性的数据成员以及月工资。销售员兼经理类 (Salesmanager) 的数据成员包括销售员类和经理类的数据成员。问题描述(1)公司主要有 4 类人:经理、计术员、销售员、销售经理。要求存储这些人的职工号、 姓名、月工资、年龄、性别等信息。(2)工资的计算方法 A 、经理:固定月薪为8000元; B 、技术员:工作时间 *小时工资( 100元每小时); C、销售员:销售额 *4% 提成;D、销售经理:底薪( 5000 元)+所辖部门销售额总额 *0.5%;(3)输入员工基本数据,要求每类人员不能少于2 人。(4)实现功能数据录入:输入各项数据;数据统计:统计各销售经理下属销售员的销售额及销售额之和;销售经理按工资进行的冒泡排序;数据打印:打印各类员工的数据信息;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 32 页 - - - - - - - - - 数据备份:把各类员工的数据信息写入文件中保存;退出:退出本系统(6)菜单说明数据录入指通过键盘输入各类员工的各项数据;数据统计指统计各销售经理下属销售员的销售额及销售额之和;销售经理按工资进行的冒泡排序;数据打印指按照表格的格式在屏幕上输出各类员工的信息;数据备份指将所有员工的信息保存到文件;退出:结束程序的运行。附录(源程序代码)#include #include #include #include #include using namespace std; ofstream outfile; const int B=2; const int T=2; const int SB=2; const int S=4; int wage(int n); void technicianinformatian(); void managerinformation(); void salesmanagerinformation(); void sellerinformation(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 32 页 - - - - - - - - - void total(); void maopao(); void yejibiao(); void SBrank(); void excelhead(); void excelmiddle(); void excelend(); void backup_yejibiao(); void backup_SBrank(); void backup_technicianinformatian(); void backup_managerinformation(); void backup_salesmanagerinformation(); void backup_sellerinformation(); class Employee public: int nume() return(num); string nam()return(name); char showsex() return(sex); int showage() return(age); protected: int num; string name; char sex; int age; int wage; ; class Manager:public Employee 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 32 页 - - - - - - - - - public: Manager() /8000元为经理固定月薪wage=8000; int managerwage() return(wage); void set_in() coutnum; coutendl; coutname; coutendl; coutsex; coutendl; coutage; coutendl; ; class Technician:public Employee public: void set_in() coutnum; coutendl; coutname; coutendl; coutsex; coutendl; coutage; coutendl; coutworktime; coutendl; int get_wage() return (worktime*100); /100元为单位小时工资protected: int worktime; ; class Salesmanager:public Employee public: Salesmanager() allsale=0; void set_in() coutnum; coutendl; coutname; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 32 页 - - - - - - - - - coutendl; coutsex; coutendl; coutage; coutendl; int get_wage() return (5000+allsale*0.005); /5000元为销售经理底薪protected: int allsale; ; class Seller:public Employee public: int bossnume() return(bossnum); int money() return(salesmoney); void set_in() coutnum; coutendl; coutname; coutendl; coutsex; coutendl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 32 页 - - - - - - - - - coutage; coutendl; coutsalesmoney; coutendl; coutbossnum; coutendl; int get_wage() return (salesmoney*0.04); protected: int salesmoney; int bossnum; ; Manager bossB; Technician techniT; Seller salesmanS; Salesmanager salesbossSB; int salesbosstotaleSB=0; Salesmanager exchangeSB; int exchange; int b=0,t=0,sb=0,s=0; int Inputboss() for(int i=0;iB;i+) bossi.set_in(); coutendl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 32 页 - - - - - - - - - return 0; int Inputtechni() for(int j=0;jT;j+) technij.set_in(); coutendl; return 0; int Inputsalesman() for(int n=0;nS;n+) salesmann.set_in(); coutendl; return 0; int Inputsalesboss() for(int m=0;mSB;m+) salesbossm.set_in(); return 0; int main () for(;) cout 小型公司工资管理系统endl; cout endl; cout 请选择您所需要的操作endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 32 页 - - - - - - - - - cout 数据输入: 1,并按回车键endl; cout 数据统计: 2,并按回车键endl; cout 数据打印: 3,并按回车键endl; cout 数据备份: 4,并按回车键endl; cout 退出系统: 5,并按回车键endl; cout endl; coutselect; switch(select) case 1: for(;) cout 小型公司工资管理系统endl; coutendl; cout请选择您所需要的操作endl; cout经理数据输入:1,并按回车键endl; cout技术员数据输入:2,并按回车键endl; cout销售员数据输入:3,并按回车键endl; cout销售经理数据输入:4,并按回车键endl; cout返回上一级:5,并按回车键endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 32 页 - - - - - - - - - coutendl; coutchoice; switch(choice) case 1: Inputboss(); b+; break; case 2: Inputtechni(); t+; break; case 3: Inputsalesman(); s+; break; case 4: Inputsalesboss(); sb+; break; case 5: break; default: cout 输入有误,请重新输入 .endl; if(choice=5) break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 32 页 - - - - - - - - - break; case 2: if(s=0) cout尚未输入销售员数据 .endl; if(sb=0) cout尚未输入销售经理数据 .endl; if(s=0|sb=0) break; total(); maopao(); yejibiao(); SBrank(); break; case 3: cout 请等待 .endl; if(t!=0|b!=0|sb!=0|s!=0) cout 职工基本情况一览表如下endl; if(t!=0) cout 技术员 endl; technicianinformatian(); cout endl; if(b!=0) cout 经理endl; managerinformation(); cout名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 32 页 - - - - - - - - - endl; if(sb!=0) cout 销售经理 endl; salesmanagerinformation(); cout endl; if(s!=0) cout 销售员 endl; sellerinformation(); cout endl; if(t=0&b=0&sb=0&s=0) cout 尚未录入任何人员数据 .endl; else if(t=0) cout 尚未录入技术员数据 .endl; if(b=0) cout 尚未录入经理数据 .endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 32 页 - - - - - - - - - if(sb=0) cout 尚未录入销售经理数据 .endl; if(s=0) cout 尚未录入销售员数据 .endl; if(t=0|b=0|sb=0|s=0) cout 请录入所需打印数据或 进行其他操作 endl; break; case 4: if(t=0|b=0|sb=0|s=0) cout 人 员 数 据 输 入 尚 未 完 全 , 请 打 印 确 认 后 再 备份.endl; break; backup_yejibiao(); backup_SBrank(); backup_technicianinformatian(); backup_managerinformation(); backup_salesmanagerinformation(); backup_sellerinformation(); cout 备份中,请等待 .endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 32 页 - - - - - - - - - break; case 5: char choice; for(;) coutchoice; if(choice=Y) exit(0); else if(choice=N) break; else cout输入有误,请重新输入 .endl; default: cout 输入有误,请重新输入 .endl; return 0; int wage(int n) return(5000+n*0.005); / 以下为第二步代码void total() / 求总销售额 for(int n=0;nS;n+) for(int m=0;mSB;m+) if(salesmann.bossnume()=salesbossm.nume() salesbosstotalem+=salesmann.money(); break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 32 页 - - - - - - - - - void maopao() / 冒泡法排序 for(int n=1;nSB;n+) for(int m=1;msalesbosstotalem) exchangeSB=salesbossm-1; salesbossm-1=salesbossm; salesbossm=exchangeSB; exchange=salesbosstotalem-1; salesbosstotalem-1=exchange; salesbosstotalem=exchange; void yejibiao() for(int n=0;nSB;n+) cout 职 工 号 为 salesbossn.nume()销 售 经 理salesbossn.nam()下属的销售员业绩为 :endl; cout endl; cout职工号姓名销售额endl; for(int j=0;jS;j+) if(salesmanj.bossnume()=salesbossn.nume() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 32 页 - - - - - - - - - cout endl; cout setw(12)salesmanj.nume()setw(12)salesmanj.nam()setw(14)salesmanj.money()endl; cout endl; cout销售额总计: setw(28)salesbosstotalenendl; cout endl; void SBrank() cout 销售经理按工资排序为:-1;n-) excelmiddle(); coutsetw(8)salesbossn.nume()setw(8)salesbossn.nam()setw(6)salesbossn.showsex()setw(8)salesbossn.showage()setw(8)wage(salesbosstotalen)endl; excelend(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 32 页 - - - - - - - - - / 以上为第二步代码/ 以下为职工信息一览表代码void technicianinformatian() excelhead(); for(int k=0;kT;k+) excelmiddle(); coutsetw(8)technik.nume()setw(8)technik.nam() setw(6)technik.showsex()setw(8)technik.showage()setw(8)technik.get_wage()endl; excelend(); void managerinformation() excelhead(); for(int k=0;kB;k+) excelmiddle(); coutsetw(8)bossk.nume()setw(8)bossk.nam()setw(6)bossk.showsex()setw(8)bossk.showage()setw(8)bossk.managerwage()-1;k-) excelmiddle(); coutsetw(8)salesbossk.nume()setw(8)salesbossk.nam()setw(6)salesbossk.showsex()setw(8)salesbossk.showage()setw(8)wage(salesbosstotalek)endl; excelend(); void sellerinformation() cout endl; cout 职工号 姓名 性别 年龄工资 所属部门经理编号 endl; for(int k=0;kS;k+) cout endl; coutsetw(8)salesmank.nume()setw(8)salesmank.nam()setw(6)salesmank.showsex()setw(8)salesmank.showage()setw(8)salesmank.get_wage()名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 32 页 - - - - - - - - - setw(16)salesmank.bossnume()endl; cout endl; / 以上为职工信息一览表代码/ 各步表格的表头 , 表中和表尾void excelhead() cout endl; cout 职工号 姓名 性别 年龄工资 endl; void excelmiddle() cout endl; void excelend() cout endl; / 各步表格的表头 , 表中和表尾/ 数据备份void backup_yejibiao() outfile.open(备份数据 .text,ios:out); for(int n=0;nSB;n+) outfile职 工 号 为 salesbossn.nume()销 售 经 理名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 32 页 - - - - - - - - - salesbossn.nam()下属的销售员业绩为 :endl; outfile endl; outfile职工号姓名销售额endl; for(int j=0;jS;j+) if(salesmanj.bossnume()=salesbossn.nume() outfileendl; outfilesetw(12)salesmanj.nume()setw(12)salesmanj.nam()setw(14)salesmanj.money()endl; outfileendl; outfile销售额总计: setw(28)salesbosstotalenendl; outfile endl; void backup_SBrank() outfile销售经理按工资排序为:endl; outfileendl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 32 页 - - - - - - - - - outfile 职工号姓名 性别年龄工资-1;n-) outfileendl; outfilesetw(8)salesbossn.nume()setw(8)salesbossn.nam()setw(6)salesbossn.showsex()setw(8)salesbossn.showage()setw(8)wage(salesbosstotalen)endl; outfileendl; void backup_technicianinformatian() outfile职工基本情况一览表如下endl; outfile技术员 endl; outfileendl; outfile 职工号姓名 性别年龄工资endl; for(int k=0;kT;k+) outfileendl; outfilesetw(8)technik.nume()名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 28 页,共 32 页 - - - - - - - - - setw(8)technik.nam() setw(6)technik.showsex()setw(8)technik.showage()setw(8)technik.get_wage()endl; outfileendl; void backup_managerinformation() outfile经理endl; outfileendl; outfile 职工号姓名 性别年龄工资endl; for(int k=0;kB;k+) outfileendl; outfilesetw(8)bossk.nume()setw(8)bossk.nam()setw(6)bossk.showsex()setw(8)bossk.showage()setw(8)bossk.managerwage()endl; outfileendl; void backup_salesmanagerinformation() outfile销售经理 endl; outfile名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 29 页,共 32 页 - - - - - - - - - endl; outfile 职工号姓名 性别年龄工资endl; for(int k=0;kSB;k+) outfileendl; outfilesetw(8)salesbossk.nume()setw(8)salesbossk.nam()setw(6)salesbossk.showsex()setw(8)salesbossk.showage()setw(8)wage(salesbosstotalek)endl; outfileendl; void backup_sellerinformation() outfile销售员 endl; outfile endl; outfile 职工号姓名 性别 年龄工资所属部门经理编号 endl; for(int k=0;kS;k+) outfile endl; outfilesetw(8)salesmank.nume()setw(8)salesmank.nam()名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 30 页,共 32 页 - - - - - - - - - setw(6)salesmank.showsex()setw(8)salesmank.showage()setw(8)salesmank.get_wage()setw(16)salesmank.bossnume()endl; outfile endl; outfile.close(); / 数据备份名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 31 页,共 32 页 - - - - - - - - - 指导教师评语成绩:指导教师(签章):2015 年月日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 32 页,共 32 页 - - - - - - - - -