属性和方法定义 类名 employee 成员类别 属性 类型 char * int int float int 方法 void void void 类名 technician 成员类别 属性 类型 float int 方法 void void manager 属性 方法 float void void salesman 属性 float float 方法 void void salesmanager 属性 方法 void void
成员名 hourlyRate workHours pay() DisplayStatus() monthlyPay pay() DisplayStatus() CommRate sales pay() DisplayStatus() pay() DisplayStatus() 每小时酬金 当月工作时数 accumPay=hourlyRate*workHours 显示技术人员信息 固定月薪数 AccumPay=monthlyPay 显示经理信息 按销售额提取酬金百分比 当月销售额 accumPay=sales*CommRate 显示推销员信息 accumPay=monthlyPay+CommRate*sales 显示销售经理信息 描述 成员名 name individualEmpNo grade accumPay employeeNo pay() promote(int) DisplayStatus() 雇员姓名 个人编号 级别 月薪总额 本公司雇员编号目前最大值 计算月薪函数(为纯虚函数) 升级函数 显示人员信息(为纯虚函数) 描述 (三) 用户手册
程序运行时,首先提示输入雇员姓名。 对于经理直接输出其工资及其它信息;
对于技术人员,程序提示输入其本月工作时数,然后输出其工资及其它信息; 对于推销员,程序提示输入其本月销售额,然后输出其工资及其它信息; 对于销售经理,程序提示输入其管辖部门本月销售总额,然后输出其工资及其它信息。
(四) 调试及测试
由于公司每增加一个雇员,无论他(她)是哪一类人员,其编号均是顺序加1,也就是employee类的所有派生类对象创建时,都要访问同一个employeeNo,因此将employeeNo定义为静态数据成员。
运行实例:
please input employee's name: zhang please input employee's name: wang please input employee's name: Li please input employee's name: zhao
input zhang the workHours of this month: 56 Technician: zhang No: 1001 month salary: 5600
Technician: zhang No: 1001 grade: 3 this month salary: 5600 Manager: wang No: 1002 month salary: 8000
Manager: wang No: 1002 grade: 4 this month salary: 8000 input Li the sales of this month: 47900 Salesman: Li No: 1003 month salary: 1916
Salesman: Li No: 1003 grade: 1 this month salary: 1916
input zhao the total sales of the department of this month: 123654 salesman: zhao No: 1004 month salary: 5618.27 salesmanager: zhao No: 1004 grade: 3 this month salary: 5618.27
进一步改进
(1)目前程序中,经理月薪,技术人员的小时酬金和销售人员的销售额提成比例均是固定的,这不适应不同公司的需要,可考虑用带参数的构造函数来解决。
(2)销售经理月薪计算中,要输入其管辖部门当月销售总额。实际上,这可以通过将本部门所有推销员销售额相加而得到。可以考虑在推销员类中增加所属部门等属性来完成这方面的功能。
附录??源程序
题1:(90分)
目的:字符串是一种基础且广泛使用的数据结构,与字符串相关的题目既可以考察基本程序设计能力和技巧,也可以考查较强算法设计能力。 题目:求字符串之间距离
要求:设有字符串X,称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为“abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X的扩展串,这里“□”代表空格字符。 如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其它任意字符之间的距离为已知的定值K,空格字符与空格字符的距离为0。在字符串A、B的所有扩展串中,必定存在两个等长的扩展串A1、B1,使得A1与B1之间的距离达到最小,将这一距离定义为字符串A、B的距离。请编写程序,求出字符串A、B的距离。
题2:(95分(全部完成)/90分(完成1和2))
目的:后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:2 1 + 3 *,即(2 + 1) * 3. 通过本课程设计,应使学生掌握后缀表达式的特点、栈的基本方法和基本原理,培养学生运用语言编程及调试的能力,运用数据结构解决简单的实际问题的能力,为后续计算机专业课程的学习打下坚实的基础。 题目:后缀表达式计算器
要求:实现一个简单的后缀表达式计算器。假定表达式里的基本数值为实数,可用的运算符包括+,-,*,/,^,其中的 ^ 表示求幂运算。
1) 假定输入表达式里的数和运算符之间都有空格,这样可以简化输入的处理; 2) 输入的算术表达式以分号为结束符。计算器应该能输入并计算一系列表达式,遇到一行的第一个字符就是分号时程序结束。
3)上题的计算器增加一元函数功能,允许表达式里写sin, cos, tan, log(自然对数)等函数,还可以考虑加入自定义的其他数学函数。(选做)
题3:(90分)
目的:很多精妙的数学理论往往都以有趣的游戏形式表现出来,正是这些有趣的小游戏使得高深的数学理论被广泛的传播和接受。通过编程实现这些“数学游戏”可以提高学生的编程技巧和算法设计能力,提高解决实际问题的能力。 题目:两个小游戏 要求:
(1) 猜数字(文曲星游戏)
电脑随机生成一个0~9999之间的整数,若为23,则记为0023。玩家去猜,电脑将对玩家的答案做个评价,然后玩家再按电脑的评价重新猜,一共8次机会,猜对为赢。
比如:
电脑随机生成7859,若玩家第一次输入:1234,程序返回0A0B,A代表数
字和位置都猜对,B代表数字猜对,但位置不对。
若玩家第二次输入:5678,则返回0A2B,因为78都是原整数中的,但是位置不对。
若玩家第三次输入:0896,则返回1A1B……
依次,直至玩家输入7859,返回4A0B并终止程序。 记住,只有8次机会哦。
(2) 生命游戏(经典游戏,实现起来不难,正因为实现简单却变化繁复所以才成为经典)
http://baike.http://www.wodefanwen.com//view/162057.htm
我们可以把计算机中的宇宙想象成是一堆方格子构成的封闭空间,尺寸为N的空间就有N*N个格子。而每一个格子都可以看成是一个生命体,每个生命都有生和死两种状态,如果该格子生就显示蓝色,死则显示白色。每一个格子旁边都有邻居格子存在,如果我们把3*3的9个格子构成的正方形看成一个基本单位的话,那么这个正方形中心的格子的邻居就是它旁边的8个格子。
每个格子的生死遵循下面的原则: 1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) 。
2. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;
3. 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变设定图像中每个像素的初始状态后依据上述的游戏规则演绎生命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案)。
题4:(95分)
目的:二叉树是常用的重要非线性数据结构,在客观世界中有着广泛的应用。通过本题可以加深对于二叉树这一数据结构的理解。掌握二叉树的存储结构及各种操作。
题目:二叉树结点染色问题
要求:一棵二叉树可以按照如下规则表示成一个由0、1、2组成的字符序列,我们称之为“二叉树序列S”:
例如,下图所表示的二叉树可以用二叉树序列S=21200110来表示。
任务是要对一棵二叉树的节点进行染色。每个节点可以被染成红色、绿色或蓝色。并且,一个节点与其子节点的颜色必须不同,如果该节点有两个子节点,那么这两个子节点的颜色也必须不相同。给定一棵二叉树的二叉树序列,请求出这棵树中最多和最少有多少个点能够被染成绿色。
题5:(85分)
目的:通过本课程设计,应使学生掌握队列的基本方法和基本原理,培养学生运用语言编程及调试的能力,运用数据结构解决简单的实际问题的能力,为后续计算机专业课程的学习打下坚实的基础。 题目:打印机任务队列
要求:打印机的打印队列中,每一个打印任务都有一个优先级,为1~9的一个整数(9的优先级最高,1的优先级最低),打印按如下方法进行.
(1)取出打印队列中队首的打印任务J;
(2)如果打印队列中存在优先级高于J的打印任务,则将J移动到打印队列的队尾;否则,打印J.
现在的问题是,要确定你要打印的文件何时打印完毕。给定当前打印队列(一个优先级队列)和你的打印任务在当前打印队列中的位置,确定你的打印任务完成时需要多长时间。为了简化问题,假定没有新的打印任务加入到打印队列中;并且,假定完成任何一个打印任务均需要1min时间,向打印队列中加入一个打印任务或从打印队列中移除一个打印任务不需要时间。
例如,当前打印队列为“1 1 9 1 1 1”且你的打印任务在队首时,需要5min.
题6:(?分) 此题删除,不作为选题。
目的:通过本课程设计,培养学生算法设计的能力,运用语言编程及调试的能力,运用计算机解决实际问题的能力,为后续计算机专业课程的学习打下坚实的基础。
题目:输出满足条件整数
要求:从小到大输出满足如下条件的整数:
① 是7和7的倍数 ② 包含7的数字 ③ ≤ N,N为给定的正整数
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库程序与算法综合设计课程设计指导书-2013(2)在线全文阅读。
相关推荐: