计算器类面向对象程序设计大作业.docx
- 文档编号:8432861
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:27
- 大小:21.76KB
计算器类面向对象程序设计大作业.docx
《计算器类面向对象程序设计大作业.docx》由会员分享,可在线阅读,更多相关《计算器类面向对象程序设计大作业.docx(27页珍藏版)》请在冰豆网上搜索。
计算器类面向对象程序设计大作业
面向对象程序设计大作业
------计算器类、学校人员管理系统
学院名称数学与系统科学学院
专业班级信息与计算科学2013-2班
学生姓名陈涛
学号201301050904
指导教师孙红梅
完成时间:
2015年7月1日
山东科技大学
大作业任务书
一、题目:
计算器类
二、原始资料:
《面向对象程序设计》 大作业要求和任务书
三、应解决下列各主要问题:
计算器类:
设计一个计算器类模板,适用各类型表达式的“+、-、×、/”数学四则运算以及“>、>=、<、<=、!
=、==”等关系运算。
数学四则运算表达式中可含有加、减、乘、除运算符以及各型数据的运算对象。
程序可以直接输入数学表达式以及关系表达式,不需要任何转换,就可以直接输出数学四则运算和逻辑运算的结果。
并且操作简单、界面清晰、灵活、实用、方便等。
(系统功能可充分自由发挥)。
扩展功能:
三角运算、进制转换、开方、幂指数等。
四、设计说明书应附有下列图纸:
无
五、小组分工说明:
无
六、命题发出日期:
2015.6.10 设计完成日期:
2015.7.10
计算器类
目的和要求
设计一个计算器类模板,适用各类型表达式的“+、-、×、/”数学四则运算以及“>、>=、<、<=、!
=、==”等关系运算。
数学四则运算表达式中可含有加、减、乘、除运算符以及各型数据的运算对象。
程序可以直接输入数学表达式以及关系表达式,不需要任何转换,就可以直接输出数学四则运算和逻辑运算的结果。
并且操作简单、界面清晰、灵活、实用、方便等。
(系统功能可充分自由发挥)。
扩展功能:
三角运算、进制转换、开方、幂指数等。
问题描述
设计一个简单计算器。
用户输入四则运算表达式,程序输出正确结果。
当表达式
中数据格式或运算符输入错误,程序给出错误信息。
要求:
(1)表达式的左、右操作数可以为整数或实数。
(2)运算符限制为+,-,*,/
(3)输入表达式允许有前导空格,允许在运算符前后嵌入空格。
(4)检测表达式由以下函数完成:
voidcheck(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"
usingnamespacestd;
voidcheck(char*input,double&x,double&y,int&op,char*&err);
doublechage(char*ch);
intmain()
{
doublex,y;
intop;
charinput[40],*err;
doubleresult;
gets(input);
check(input,x,y,op,err);
if(op<0)
{cout< switch(op) { case1: result=x+y;break; case2: result=x-y;break; case3: result=x*y;break; case4: result=x/y;break; } cout< return0; } voidcheck(char*input,double&x,double&y,int&op,char*&err) { inti=0,j=0,k; intpoint=0; charleftx[20],righty[20]; while(input[i]=='')i++; j=i; if(input[j]=='0'&&(input[j+1]>='0'&&input[j+1]<='9')) {err="左操作数错误! ";op=-1;return;} while((input[j]>='0'&&input[j]<='9')||input[j]=='.') { if(input[j]=='.')point++; if(point>1){err="左操作数错误! ";op=-1;return;} j++; } k=0; while(i leftx[k]='\0'; x=chage(leftx); while(input[i]=='')i++; switch(input[i]) { case'+': op=1;i++;break; case'-': op=2;i++;break; case'*': op=3;i++;break; case'/': op=4;i++;break; default: op=-3; err="运算符错误! "; return; } while(input[i]=='')i++; j=i; point=0; if(input[j]=='0'&&(input[j+1]>='0'&&input[j+1]<='9')) {err="右操作数错误! ";op=-2;return;} while((input[j]>='0'&&input[j]<='9')||input[j]=='.') { if(input[j]=='.')point++; if(point>1){err="右操作数错误! ";op=-2;return;} j++; } k=0; while(i righty[k]='\0'; y=chage(righty); if(op==4&&y==0) {err="除数不能为0";op=-2;return;} } doublechage(char*ch) { inti=0,j,f=-1; doubleresult=0,wre; while(ch[i]) { if(ch[i]=='.')break; i++; } f=i; for(i=f-1;i>=0;i--) { wre=1; j=0; while(j result+=(ch[i]-'0')*wre; } for(i=f+1;ch[f]&&ch[i];i++) { wre=1; j=0; while(j result+=(ch[i]-'0')*wre; } returnresult; } 指导教师评语 成绩: 指导教师(签章): 2015年 月日 山东科技大学 大作业任务书 六、题目: 公司人员工资管理系统 七、原始资料: 《面向对象程序设计》 大作业要求和任务书 八、应解决下列各主要问题: 公司人员工资管理系统: 本程序用于管理一个公司的人员工资,所有雇员类(Employee)有共性的数据成员是: 编号、姓名和工资。 技术员类(Technician)的数据成员包括共性的数据成员以及工作时间(每月的)、每小时的工资。 销售员类(Salesman)的数据成员包括共性的数据成员以及销售额(本月)、提成。 经理类(Manager)的数据成员包括共性的数据成员以及月工资。 销售员兼经理类(Salesmanager)的数据成员包括销售员类和经理类的数据成员。 九、设计说明书应附有下列图纸: 无 一十、小组分工说明: 无 六、命题发出日期: 2015.6.10 设计完成日期: 2015.7.10 目的与要求 本程序用于管理一个公司的人员工资,所有雇员类(Employee)有共性的数据成员是: 编号、姓名和工资。 技术员类(Technician)的数据成员包括共性的数据成员以及工作时间(每月的)、每小时的工资。 销售员类(Salesman)的数据成员包括共性的数据成员以及销售额(本月)、提成。 经理类(Manager)的数据成员包括共性的数据成员以及月工资。 销售员兼经理类(Salesmanager)的数据成员包括销售员类和经理类的数据成员。 问题描述 (1)公司主要有4类人: 经理、计术员、销售员、销售经理。 要求存储这些人的职工号、姓名、月工资、年龄、性别等信息。 (2)工资的计算方法 A、经理: 固定月薪为8000元; B、技术员: 工作时间*小时工资(100元每小时); C、销售员: 销售额*4%提成; D、销售经理: 底薪(5000元)+所辖部门销售额总额*0.5%; (3)输入员工基本数据,要求每类人员不能少于2人。 (4)实现功能 数据录入: 输入各项数据; 数据统计: 统计各销售经理下属销售员的销售额及销售额之和;销售经理按工资进行的冒泡排序; 数据打印: 打印各类员工的数据信息; 数据备份: 把各类员工的数据信息写入文件中保存; 退出: 退出本系统 (6)菜单说明 数据录入指通过键盘输入各类员工的各项数据; 数据统计指统计各销售经理下属销售员的销售额及销售额之和;销售经理按工资进行的冒泡排序; 数据打印指按照表格的格式在屏幕上输出各类员工的信息; 数据备份指将所有员工的信息保存到文件; 退出: 结束程序的运行。 附录(源程序代码) #include #include #include #include #include usingnamespacestd; ofstreamoutfile; constintB=2; constintT=2; constintSB=2; constintS=4; intwage(intn); voidtechnicianinformatian(); voidmanagerinformation(); voidsalesmanagerinformation(); voidsellerinformation(); voidtotal(); voidmaopao(); voidyejibiao(); voidSBrank(); voidexcelhead(); voidexcelmiddle(); voidexcelend(); voidbackup_yejibiao(); voidbackup_SBrank(); voidbackup_technicianinformatian(); voidbackup_managerinformation(); voidbackup_salesmanagerinformation(); voidbackup_sellerinformation(); classEmployee { public: intnume(){return(num);} stringnam(){return(name);} charshowsex(){return(sex);} intshowage(){return(age);} protected: intnum; stringname; charsex; intage; intwage; }; classManager: publicEmployee { public: Manager()//8000元为经理固定月薪 {wage=8000;} intmanagerwage(){return(wage);} voidset_in() { cout<<"经理的编号: "; cin>>num; cout< cout<<"其姓名: "; cin>>name; cout< cout<<"性别(m/w): "; cin>>sex; cout< cout<<"年龄: "; cin>>age; cout< } }; classTechnician: publicEmployee { public: voidset_in() { cout<<"技术员的编号: "; cin>>num; cout< cout<<"其姓名: "; cin>>name; cout< cout<<"性别(m/w): "; cin>>sex; cout< cout<<"年龄: "; cin>>age; cout< cout<<"工作时间: "; cin>>worktime; cout< } intget_wage() {return(worktime*100);}//100元为单位小时工资 protected: intworktime; }; classSalesmanager: publicEmployee { public: Salesmanager() {allsale=0;} voidset_in() { cout<<"销售经理的编号: "; cin>>num; cout< cout<<"其姓名: "; cin>>name; cout< cout<<"性别(m/w): "; cin>>sex; cout< cout<<"年龄: "; cin>>age; cout< } intget_wage() {return(5000+allsale*0.005);}//5000元为销售经理底薪 protected: intallsale; }; classSeller: publicEmployee { public: intbossnume(){return(bossnum);} intmoney(){return(salesmoney);} voidset_in() { cout<<"销售员的编号: "; cin>>num; cout< cout<<"其姓名: "; cin>>name; cout< cout<<"性别(m/w): "; cin>>sex; cout< cout<<"年龄: "; cin>>age; cout< cout<<"销售额: "; cin>>salesmoney; cout< cout<<"所属销售经理的编号: "; cin>>bossnum; cout< } intget_wage() {return(salesmoney*0.04);} protected: intsalesmoney; intbossnum; }; Managerboss[B]; Techniciantechni[T]; Sellersalesman[S]; Salesmanagersalesboss[SB]; intsalesbosstotale[SB]={0}; SalesmanagerexchangeSB; intexchange; intb=0,t=0,sb=0,s=0; intInputboss() { for(inti=0;i boss[i].set_in(); cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"< return0; } intInputtechni() { for(intj=0;j techni[j].set_in(); cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"< return0; } intInputsalesman() { for(intn=0;n salesman[n].set_in(); cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"< return0; } intInputsalesboss() { for(intm=0;m salesboss[m].set_in(); return0; } intmain() { for(;;) { cout<<"★★小型公司工资管理系统★★"< cout<<"┏━━━━━━━━━━━━━━━━┓"< cout<<"┃请选择您所需要的操作┃"< cout<<"┃数据输入: 1,并按回车键┃"< cout<<"┃数据统计: 2,并按回车键┃"< cout<<"┃数据打印: 3,并按回车键┃"< cout<<"┃数据备份: 4,并按回车键┃"< cout<<"┃退出系统: 5,并按回车键┃"< cout<<"┗━━━━━━━━━━━━━━━━┛"< cout<<"请选择一个操作: "; intselect; cin>>select; switch(select) { case1: for(;;) { cout<<"★★小型公司工资管理系统★★"< cout<<"┏━━━━━━━━━━━━━━━━━━━━┓"< cout<<"┃请选择您所需要的操作┃"< cout<<"┃经理数据输入: 1,并按回车键┃"< cout<<"┃技术员数据输入: 2,并按回车键┃"< cout<<"┃销售员数据输入: 3,并按回车键┃"< cout<<"┃销售经理数据输入: 4,并按回车键┃"< cout<<"┃返回上一级: 5,并按回车键┃"< cout<<"┗━━━━━━━━━━━━━━━━━━━━┛"< cout<<"请选择一个操作: "; intchoice; cin>>choice; switch(choice) { case1: Inputboss(); b++; break; case2: Inputtechni(); t++; break; case3: Inputsalesman(); s++; break; case4: Inputsalesboss(); sb++; break; case5: break; default: cout<<"输入有误,请重新输入..."< } if(choice==5)break; } break; case2: if(s==0)cout<<"尚未输入销售员数据..."< if(sb==0)cout<<"尚未输入销售经理数据..."< if(s==0||sb==0)break; total(); maopao(); yejibiao(); SBrank(); break; case3: cout<<"请等待..."< if(t! =0||b! =0||sb! =0||s! =0) { cout<<"职工基本情况一览表如下"< } if(t! =0) { cout<<"技术员"< technicianinformatian(); cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"< } if(b! =0) { cout<<"经理"< managerinformation(); cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"< } if(sb! =0) { cout<<"销售经理"< salesmanagerinformation(); cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"< } if(s! =0) { cout<<"销售员"< sellerinformation(); cout<<"┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅"< } if(t==0&&b==0&&sb==0&&s==0) { cout<<"尚未录入任何人员数据..."< } else {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算器 面向 对象 程序设计 作业