程序与算法综合设计课程设计指导书(2)

2019-04-02 08:23

系统类图

employee char *name int individualEmpNo; int grade; float accumPay; static int employeeNo; virtual void pay(); void promote(int); vitual void displayStatus(); technician float hourlyRate int workHours virtual void pay(); vitual void displayStatus(); manager float monthlyPay virtual void pay(); vitual void displayStatus(); salesman float CommRate; float sales; virtual void pay(); vitual void displayStatus(); salesmanager virtual void pay(); vitual void displayStatus();

属性和方法定义 类名 employee 成员类别 属性 类型 char * int int float int 方法 void void void

成员名 name grade accumPay employeeNo pay() promote(int) 雇员姓名 级别 月薪总额 本公司雇员编号目前最大值 计算月薪函数(为纯虚函数) 升级函数 individualEmpNo 个人编号 描述 DisplayStatus() 显示人员信息(为纯虚函数) 类名 technician 成员类别 属性 方法 类型 float int void void float void void float float void void 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 显示销售经理信息 manager 属性 方法 salesman 属性 方法 salesmanager 属性 方法

(3) 用户手册

程序运行时,首先提示输入雇员姓名。 对于经理直接输出其工资及其它信息;

对于技术人员,程序提示输入其本月工作时数,然后输出其工资及其它信息; 对于推销员,程序提示输入其本月销售额,然后输出其工资及其它信息; 对于销售经理,程序提示输入其管辖部门本月销售总额,然后输出其工资及其它信息。 (4) 调试及测试

由于公司每增加一个雇员,无论他(她)是哪一类人员,其编号均是顺序加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

(5)进一步改进

(1)目前程序中,经理月薪,技术人员的小时酬金和销售人员的销售额提成比例均是固定的,这不适应不同公司的需要,可考虑用带参数的构造函数来解决。

(2)销售经理月薪计算中,要输入其管辖部门当月销售总额。实际上,这可以通过将本部门所有推销员销售额相加而得到。可以考虑在推销员类中增加所属部门等属性来完成这方面的功能。

(6)附录??源程序

四、课程设计题目

题1:求字符串之间距离

目的:字符串是一种基础且广泛使用的数据结构,与字符串相关的题目既可以考察基本程序设计能力和技巧,也可以考查较强算法设计能力。

要求:设有字符串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:后缀表达式计算器

目的:后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:2 1 + 3 *,即(2 + 1) * 3. 通过本课程设计,应使学生掌握后缀表达式的特点、栈的基本方法和基本原理,培养学生运用语言编程及调试的能力,运用数据结构解决简单的实际问题的能力,为后续计算机专业课程的学习打下坚实的基础。

要求:实现一个简单的后缀表达式计算器。假定表达式里的基本数值为实数,可用的运算符包括+,-,*,/,^,其中的 ^ 表示求幂运算。

1) 假定输入表达式里的数和运算符之间都有空格,这样可以简化输入的处理; 2) 输入的算术表达式以分号为结束符。计算器应该能输入并计算一系列表达式,遇到一行的第一个字符就是分号时程序结束。

3)上题的计算器增加一元函数功能,允许表达式里写sin, cos, tan, log(自然对数)等函数,还可以考虑加入自定义的其他数学函数。 题3:两个小游戏

目的:很多精妙的数学理论往往都以有趣的游戏形式表现出来,正是这些有趣的小游戏使得高深的数学理论被广泛的传播和接受。通过编程实现这些“数学游戏”可以提高学生的编程技巧和算法设计能力,提高解决实际问题的能力。

要求:

(1)猜数字(文曲星游戏)

电脑随机生成一个0~9999之间的整数,若为23,则记为0023。玩家去猜,电脑将对玩家的答案做个评价,然后玩家再按电脑的评价重新猜,一共8次机会,猜对为赢。

比如:

电脑随机生成7859,若玩家第一次输入:1234,程序返回0A0B,表示猜测的 结果有0个A,0个B, 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:二叉树结点染色问题

目的:二叉树是常用的重要非线性数据结构,在客观世界中有着广泛的应用。通过本题可以加深对于二叉树这一数据结构的理解。掌握二叉树的存储结构及各


程序与算法综合设计课程设计指导书(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:皮具厂补料作业标准

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: