当前位置:文档之家› 2016c++课设任务书

2016c++课设任务书

《面向对象程序设计》课程设计任务书学期:2016-2017 第一学期时间2016年12月12日开始班级:15计科本1、本2、15计应专1机电与信息工程学院教师陈小常【设计目的】本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《面向对象程序设计》课程后进行的一次全面的综合练习。

本课程设计的目的和任务:(1)巩固和加深学生对C++课程的基本知识的理解和掌握;(2)掌握C++编程和程序调试的基本技能;(3)利用C++进行简单软件设计的基本思路和方法;(4)提高运用C++解决实际问题的能力;(5)掌握书写程序设计说明文档的能力。

课设报告要求:1、封面上写明:题目、指导教师、专业、班级、姓名、学号、起止日期以及其他内容。

2、在实习报告的扉页上写明设计题目和实习报告要求。

3、系统需求与功能分析,画出功能结构图。

4、各个类的设计思路及其源代码,并适当加以注释。

5、主要功能代码的实现思路及测试过程描述。

6、程序调试正确后的运行结果显示。

7、程序设计中所遇到的问题及解决问题的办法。

8、整个应用程序还需作哪些改进。

9、课程设计的感想和体会。

【设计内容与任务】每组学生在教师提供的课程设计题目中任意选择一题,题目有难有易,学生根据自身情况选题后独立完成,每组成员限定1——4人。

题目选定后不可更换。

题目1 组合类与排序目的与要求:通过类的组合,可以将现有的若干个类合成一个新类,它反映的是对象的组合概念,由小类装成更大的类。

类组合的难点在于其构造函数(包括析构函数)设计。

本实验要求学会创建组合类对象、删除组合类对象时,如何创建(删除)其内嵌对象,这里包括参数的传递、构造的顺序等。

设计任务及过程任务:设计计算机类分解为显示器类、CPU类、硬盘类、主板类、内存类、显卡类等;然后按CPU价格排序(升序)。

过程:数据输入每台主机CPU有自己的数据如主频、频率、价格、日期等;数据存储日期类、CPU类、RAM类、一台主机类、N台主机类;数据处理即排序算法,使用算法对记录进行排序题目2拷贝构造函数与对象复制目的与要求:1、了解拷贝构造函数的含义;2、了解拷贝构造函数的相关语法规则;3、学会运用拷贝构造函数;设计任务及过程任务:以具体对象为列,讨论同类对象的赋值与复制。

过程:数据输入成矩阵;数据存储定义图像类设计、构造函数、拷贝构造函数、显示图像;数据处理所需要到的拷贝构造函数。

题目3组合派生类与对象移动目的与要求:1、了解组合派生类的含义;2、了解拷组合派生类的相关语法规则;3、学会运用派生类与对象移动。

设计任务及过程任务:定义点类(两点),然后类组合成直线类,最后线类派生类增加如颜色等属性的类。

过程:数据输入两点及属性线性、颜色;数据存储,点、直线、扩展直线属性类的设计;数据输出显示相关的属性。

题目4组合派生类与队列操作目的与要求:1、了解组合派生类的含义;2、了解拷组合派生类的相关语法规则;3、学会运用派生类与队列操作。

设计任务及过程任务:以公有派生类对象作为队列的元素,进行入队、出队、访问元素等基本操作。

过程:数据输入5个点的属性值;数据存储,基类、派生类、队列类的设计;数据输出显示相关的属性。

题目5 类模版继承与栈操作目的与要求:1、了解类模版继承与栈操作的含义;2、学会运用类模版继承与栈操作;3、使用类模版继承进行栈基本简单操作;设计任务及过程任务:在学生信息中按序号从小到大顺序,将记录逐条入栈,再逐个出栈、显示。

过程:创建、入栈、出栈、释放、数据输出。

题目6 矩阵的常用运算目的与要求:(1)定义矩阵类。

要求从键盘输入矩阵的行数和列数,以及矩阵的元素值,并用动态内存空间存储。

(2)以菜单的方式选择矩阵的常用运算。

并判断两个矩阵能否进行加、减、乘的运算。

(3)要求重载相关运算符进行矩阵的常用运算。

(4)输出两个矩阵运算后的和、差、积。

题目7 通过string类对象操作学生数据目的与要求:⑴学生数据模型用类CSstudent定义,其数据成员有姓名、学号、三门课的成绩及总成绩,成员函数有print及其它必要的函数。

其中,姓名和学号用string类对象表示,print 函数按相应对齐格式在一行中输出所有数据。

⑵设计类CStuOP。

在类中,通过string和字符串流对存放的学生数据进行添加、遍历、查找、排序和存储到文件的操作。

其中,成员函数Add添加学生数据,成员函数ShowAll 用来遍历所有学生数据,成员函数Seek用来按姓名查找学生数据,成员函数SortToFile 用来按总成绩从高到低排序,并将结果数据保存到文件student.txt中。

⑶编写一个完整的程序并测试。

题目8 分数计算器目的与要求:⑴为分数定义一个类。

分数定义为两个整数之比,比如1/2,3/4,64/2等等,将分数表示成int类型的两个值:一个表示分子,一个表示分母。

将类命名为Fraction。

⑵分数应以1/2,15/32,300/401这样的形式来输入和输出,注意分子、分母可能包含负号,所以必须支持象-1/2,15/-32,以及-300/-401这样的输入。

⑶重载提取运算符>>和插入运算符和<<。

还要重载+, -, *, /运算符,使它们能正确支持Fraction类型。

(4)应考虑有一个函数,能对分数进行约分与规格化,在规格化之后,分母一定是正的,并且分子分母的最大分约数为1。

例如,对4/-8进行规格化之后,它应该表示成等价的-1/2。

(5)仿照计算器的运算过程,采用计算器方式来进行有关分数运算。

题目9 复数运算器目的与要求:(1)为复数定义一个类,名为Complex。

复数的形式是a+bi其中,a和b是double 类型的数字,而i表示虚数单位√-1。

将复数表示成double 类型的两个值。

将成员变量命名为realPart(实部)和imagePart(虚部)。

(2)重载输入和输出运算符>>和<<.。

输入复数时,最好能接受6,6+4i,5-2i,7i,-9i,i,和-i这样形式的输入。

可考虑用字符串接受输入,然后对字符串进行讨论,以便识别各种情况。

(3)输出复数时,应对实部和虚部的各种情况加以讨论,以便能输出6,6+4i,5-2i,7i,-9i,i,和-i这样形式的复数。

注意实部、虚部可能包含负号。

(4)重载+、-、*、/ 运算符,使它们能支持Complex类型。

(5)参考教材P119例EX_ComplexFriend和P426 实验六例EX_Complex.cpp。

题目10 学生选课系统目的与要求:(1)定义学生类、课程类。

设每个学生最多只能选修5门课程,每门课程最多30名学生选修。

(2)根据用户要求,可设置并得到学生所选课程。

(3)给出学生姓名,可得到某门课程的成绩,也可得到学生所有课程的平均成绩。

(4)根据课程名,可设置选修学生,设置或修改选修学生的学生成绩,也可计算该课程的平均成绩。

题目11 将学生成绩类对象作为栈元素,并设计用栈类来存取学生成绩数据。

设学生成绩类的私有数据成员有学生姓名,学号和三门成绩。

说明:栈模型栈是一种“FILO”(先进后出)或“LIFO”(后进先出)的存储结构。

它占用一块连续的内存空间,有两个端点:一个端点是固定的,称为栈底;另一个端点是活动的,称为栈顶。

操作只能在栈顶进行,建立一个栈先要开辟栈空间。

且为了指示栈顶位置还要设定一个指针,称为栈顶指针sp。

栈有两种操作:push(压入)与pop(弹出)。

初建栈时,栈顶指针sp指向栈底。

当向栈内压入一个元素d1时,先向栈顶写入d1,再执行sp++。

再压入一个元素d2时,先向栈顶写入d2,再执行sp++。

可见,栈顶总是用于存放下一个元素。

当栈内弹出一个元素d2时,直接执行sp--,然后含会SP中的内容,当再次压入新元素时,d2被覆盖。

题目12 将学生成绩数据分成两个类CPerson和CScore,其中CPerson类的数据成员是姓名和学号,而CScore的数据成员除了三门课成绩外,还有一个CPerson类对象stu。

并且,CScore类是CPerson的友元类,这样在类CScore 中通过stu对象可以访问CPerson类的所有成员。

此外,仍使用栈模型来存取学生成绩数据,其中栈类Cstack使用静态成员来进行数据操作。

说明:Cperson和CScore类的设计由于要设计的Cperson类是将Cscore类作为自己的友元类,因此,Cperson类的私有数据成员的操作不必再在Cperson类中指定,且不必重新指定构造函数和拷贝构造函数,它们的默认版本已能满足要求。

题目13 定义个人信息类CPerson,描述的属性有姓名、年龄、性别。

并以CPerson为基类分别公有派生出学生类CSstudent和CTeacher。

其中CSstudent 类增加的属性有班级、学号、三门课程成绩、总分和平均分;CTeacher类增加的属性有职称、部门、工龄。

在定义一个研究生助手类CAssistant, 它分别从CTeacher类和CSstudent类公有派生,增加的属性有导师(CPerson类对象)、职责。

要求:(1)除某类CPerson外,其他类增加的属性用成员函数SerData来设定。

集成的属性用构造函数来初始化;但Cassistant中的CTeacher成员对象仍需要在构造函数中进行初始化。

(2)每个类都有一个成员函数ShowInfo,用于显示当前类增加的属性。

对于基类CPerson则选择全部属性。

(3)分析可能产生二义性的情况,并分别给出相应的解决办法。

(4)设计各个类的代码,在main函数中定义Cassistant类对象。

然后输出该对象的所有属性然后输出该对象的所有属性(包括基类属性)。

根据上述描述和要求,编写程序。

题目14 用简单链表模型来存取个人信息类数据。

其中。

个人信息CPerson包含的数据有:姓名、年龄和性别。

为了能用类来实现简单链表模型,且便于以后扩展,用结点类CNode和链表类CSimpList类来描述。

其中,结点类CNode包含的数据成员有:描述数据域的CPerson 对象data指向下一个节点的指针next。

链表类CSimpList用来实现结点的常用操作,其数据成员有:头指针pHead、当前指针pCur。

在链表类CSimpList要求实现下列操作。

(1)当成员函数重载“+=”运算符,根据CPerson对象构造并实现结点的添加操作。

(2)用友元函数重载后缀“++”,实现当前结点指针向后移动,并返回当前结点指针。

(3)用成员函数重载“[ ]”运算符,实现按姓名查找匹配的结点,并返回该节点的指针。

根据上述描述和要求,编写实现程序。

题目15 通过文件操作存放学生数据。

⑴学生数据模型用类CSstudent来定义,其数据成员有:姓名、学好和三门课的成绩。

相关主题