程序与算法综合设计课程设计指导书.docx

上传人:b****3 文档编号:1854404 上传时间:2022-10-24 格式:DOCX 页数:35 大小:141.81KB
下载 相关 举报
程序与算法综合设计课程设计指导书.docx_第1页
第1页 / 共35页
程序与算法综合设计课程设计指导书.docx_第2页
第2页 / 共35页
程序与算法综合设计课程设计指导书.docx_第3页
第3页 / 共35页
程序与算法综合设计课程设计指导书.docx_第4页
第4页 / 共35页
程序与算法综合设计课程设计指导书.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

程序与算法综合设计课程设计指导书.docx

《程序与算法综合设计课程设计指导书.docx》由会员分享,可在线阅读,更多相关《程序与算法综合设计课程设计指导书.docx(35页珍藏版)》请在冰豆网上搜索。

程序与算法综合设计课程设计指导书.docx

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

 

数据结构与算法综合设计

课程设计指导书

合肥工业大学

计算机与信息学院

2014年6月

一、概述

课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的、必不可少的一个教学环节。

通常,课程设计中的问题比平时的习题复杂的多,也更接近实际。

课程设计着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的目的。

平时的习题较偏重于如何编写功能单一的“小”算法,局限于一个或两个知识点,而课程设计题是软件设计的综合训练,包括问题分析,总体结构设计,用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。

此外,还有很重要的一点是:

计算机是比任何教师更严厉的检查者。

为达到上述目的,使学生更好地掌握程序设计的基本方法和C++语言的应用,本课程安排了课程设计环节,提供了各类题目供学生选择。

每个设计题采取了统一的格式,由问题描述、基本要求、测试数据、实现提示和选做内容等五个部分组成。

问题描述旨在为学生建立问题提出的背景,指明问题“是什么”。

基本要求则对问题进一步求精,划出问题的边界,指出具体的参量或前提条件,并规定该题的最低限度要求。

测试数据部分旨在为检查学生上机作业提供方便。

在实现提示部分,对实现中的难点及其解法思路等问题作了简要提示,提示的实现方法未必是最好的,学生不应拘泥与此,而应努力设计和开发更好的方法和结构。

选做部分向那些尚有余力的读者提出了更高的要求,同时也能开拓其它读者的思路,在完成基本要求时就力求避免就事论事的不良思想方法,尽可能寻求具有普遍意义的解法,使得程序结构合理,容易修改、扩充和重用。

二、总体要求

1.系统分析与系统设计

“分析就是在采取行动之前,对问题的研究”(Demarco,1978)。

系统分析在软件开发过程中是非常重要的,其任务就是通过对问题本身的研究,产生一个系统需要做什么的规范的、一致的和可行的需求说明。

在此基础上,确定系统中所需考虑的类(对象)、类之间的关系、本系统中各个类所涉及的属性及针对这些属性的操作。

类及类之间的关系可用类图来表示,对象之间的消息传递可用箭头表示,另外一些重要的操作应给出规格说明。

2.详细设计与编码

对类中的属性和操作从实现的角度(如可扩充、在派生类中能否直接使用或只需少量修改、访问的效率和方便性等)进一步考察;对类中的操作(即方法)进一步求精:

用if、while、for和赋值语句加上自然语言写出算法框架;同时考虑能否使用已有类库(包括直接使用或通过派生)以减少编程的工作量和提高程序的可靠性。

编码,即程序设计,是对详细设计的结果的进一步求精,用面向对象语言(如C++)表达出来。

在充分理解和把握语言运行机制的基础上,编写出正确的、清晰的、易读易改和高效率的程序。

另外,在标识符的命名、代码的长度(一个方法长度一般不超过40行,否则应划分为两个或多个方法)、程序书写的风格(如缩进格式、空格(空行)的应用、注释等)方面也应注意,遵循统一的规范。

3.上机调试和测试

上机时要带一本面向对象语言的教材,若有开发环境的用户指南(手册)及类库(库函数)手册则更好。

应仔细阅读程序编译和连接时的错误信息(通常是英文的),弄清其确切含义,提高调试效率。

要学习并掌握开发环境所提供的调试工具。

经过调试,能够运行的的程序并非就是一个正确的程序。

实际上,在上机之前,就应根据系统的需求设计相应的测试数据集,特别是一些异常情况的处理(如用户输入数据未按指定格式、数据极大或极小时程序如何处理等一些极端的情况)。

4.课程设计报告

课程设计报告的内容及要求:

(1)需求和规格说明

描述问题,简述题目要解决的问题是什么?

规定软件做什么。

原题条件不足时补全

(2)设计

1)设计思想:

程序结构(如类图),重要的数据结构。

主要算法思想(文字描述,不要画框图)

2)设计表示:

类名及其作用,类中数据成员名称及作用,类中成员函数原型及其功能,可以用表格形式表达。

3)实现注释:

各项要求的实现程度、在完成基本要求的基础上还实现了什么功能?

4)详细设计表示:

主要算法的框架及实现此算法的成员函数接口。

(3)用户手册

即使用说明(包括数据输入时的格式要求)。

(4)调试及测试

调试过程中遇到的主要问题是如何解决的;对设计和编码的回顾讨论和分析;程序运行的时空效率分析;测试数据集;运行实例;改进设想;经验和体会等。

(5)附录

1)源程序清单:

打印文本和磁盘文件,磁盘文件是必须的。

源程序要加注释,除原有注释外再用钢笔加一些必要的注释和断言。

2)测试数据:

即列出测试数据集

3)运行结果:

上面测试数据输入后程序运行的结果

注意事项:

以上要求为一般的要求,针对具体问题和具体的开发过程,某些方面可以做适当的增减。

各种文档资料要在程序开发过程中逐渐形成,而不是最后补写(但不排斥最后誉清)。

各种文档要以统一格式的稿纸用钢笔书写,也可录入计算机用Word及其它文字编辑软件排版后打印输出。

三、课程设计示例

封面:

课程设计报告

设计题目:

小型公司人员信息管理

学生姓名:

专业:

班级:

学号:

指导教师:

完成日期:

合肥工业大学计算机与信息学院

(1)需求和规格说明

某小型公司,主要有四类人员:

经理、技术人员、销售经理和推销员。

要求存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。

人员编号基数为1000,每输入一个人员的信息,编号顺序加1。

程序要对所有人员有提升级别的功能。

为简单起见,所有人员的初始级别均为1级,然后进行升级,经理升为4级,技术人员和销售经理升为3级,推销员仍为1级。

月薪计算办法是:

经理拿固定月薪8000元;技术人员按每小时100元领取月薪;推销员的月薪按该推销员当月销售额的4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的5‰。

(2)设计

根据上述需求,设计一个基类employee,然后派生出technician(技术人员)类、manager(经理)类和salesman(推销员)类。

由于销售经理(salesmanager)既是经理又是销售人员,兼具两类人员的特点,因此同时继承manager和salesman两个类。

在基类中,除了定义构造函数和析构函数以外,还应统一定义对各类人员信息都应有的操作,这样可以规范各派生类的基本行为。

但是各类人员的月薪计算方法不同,不能在基类employee中统一定义计算方法。

各类人员信息的显示内容也不同,同样不能在基类中统一定义显示方法。

因此,在employee类中用纯虚函数的方式定义了计算月薪函数pay()和显示信息函数displayStatus(),然后在派生类中再根据各自的同名函数实现具体的功能。

由于salesmanager的两个基类又有公共基类employee,为避免二义性,这里将employee类设计为虚基类。

 

系统类图

salesmanager

 

virtualvoidpay();

vitualvoiddisplayStatus();

salesman

floatCommRate;

floatsales;

virtualvoidpay();

vitualvoiddisplayStatus();

manager

floatmonthlyPay

 

virtualvoidpay();

vitualvoiddisplayStatus();

technician

floathourlyRate

intworkHours

virtualvoidpay();

vitualvoiddisplayStatus();

employee

char*name

intindividualEmpNo;

intgrade;

floataccumPay;

staticintemployeeNo;

virtualvoidpay();

voidpromote(int);

vitualvoiddisplayStatus();

 

属性和方法定义

类名

成员类别

类型

成员名

描述

employee

属性

char*

name

雇员姓名

int

individualEmpNo

个人编号

int

grade

级别

float

accumPay

月薪总额

int

employeeNo

本公司雇员编号目前最大值

方法

void

pay()

计算月薪函数(为纯虚函数)

void

promote(int)

升级函数

void

DisplayStatus()

显示人员信息(为纯虚函数)

 

类名

成员类别

类型

成员名

描述

technician

属性

float

hourlyRate

每小时酬金

int

workHours

当月工作时数

方法

void

pay()

accumPay=hourlyRate*workHours

void

DisplayStatus()

显示技术人员信息

manager

属性

float

monthlyPay

固定月薪数

方法

void

pay()

AccumPay=monthlyPay

void

DisplayStatus()

显示经理信息

salesman

属性

float

CommRate

按销售额提取酬金百分比

float

sales

当月销售额

方法

void

pay()

accumPay=sales*CommRate

void

DisplayStatus()

显示推销员信息

salesmanager

属性

方法

void

pay()

accumPay=monthlyPay+CommRate*sales

void

DisplayStatus()

显示销售经理信息

(3)用户手册

程序运行时,首先提示输入雇员姓名。

对于经理直接输出其工资及其它信息;

对于技术人员,程序提示输入其本月工作时数,然后输出其工资及其它信息;

对于推销员,程序提示输入其本月销售额,然后输出其工资及其它信息;

对于销售经理,程序提示输入其管辖部门本月销售总额,然后输出其工资及其它信息。

(4)调试及测试

由于公司每增加一个雇员,无论他(她)是哪一类人员,其编号均是顺序加1,也就是employee类的所有派生类对象创建时,都要访问同一个employeeNo,因此将employeeNo定义为静态数据成员。

运行实例:

pleaseinputemployee'sname:

zhang

pleaseinputemployee'sname:

wang

pleaseinputemployee'sname:

Li

pleaseinputemployee'sname:

zhao

inputzhangtheworkHoursofthismonth:

56

Technician:

zhangNo:

1001monthsalary:

5600

Technician:

zhangNo:

100

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1