093712面向对象课程设计指导.docx

上传人:b****2 文档编号:16886005 上传时间:2023-07-19 格式:DOCX 页数:35 大小:64.70KB
下载 相关 举报
093712面向对象课程设计指导.docx_第1页
第1页 / 共35页
093712面向对象课程设计指导.docx_第2页
第2页 / 共35页
093712面向对象课程设计指导.docx_第3页
第3页 / 共35页
093712面向对象课程设计指导.docx_第4页
第4页 / 共35页
093712面向对象课程设计指导.docx_第5页
第5页 / 共35页
093712面向对象课程设计指导.docx_第6页
第6页 / 共35页
093712面向对象课程设计指导.docx_第7页
第7页 / 共35页
093712面向对象课程设计指导.docx_第8页
第8页 / 共35页
093712面向对象课程设计指导.docx_第9页
第9页 / 共35页
093712面向对象课程设计指导.docx_第10页
第10页 / 共35页
093712面向对象课程设计指导.docx_第11页
第11页 / 共35页
093712面向对象课程设计指导.docx_第12页
第12页 / 共35页
093712面向对象课程设计指导.docx_第13页
第13页 / 共35页
093712面向对象课程设计指导.docx_第14页
第14页 / 共35页
093712面向对象课程设计指导.docx_第15页
第15页 / 共35页
093712面向对象课程设计指导.docx_第16页
第16页 / 共35页
093712面向对象课程设计指导.docx_第17页
第17页 / 共35页
093712面向对象课程设计指导.docx_第18页
第18页 / 共35页
093712面向对象课程设计指导.docx_第19页
第19页 / 共35页
093712面向对象课程设计指导.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

093712面向对象课程设计指导.docx

《093712面向对象课程设计指导.docx》由会员分享,可在线阅读,更多相关《093712面向对象课程设计指导.docx(35页珍藏版)》请在冰点文库上搜索。

093712面向对象课程设计指导.docx

093712面向对象课程设计指导

面向对象课程设计指导

专业:

电子信息科学与技术

指导教师:

黄迎春,程磊

一、课程设计的目的

面向对象课程设计是电子信息科学与技术专业非常重要的实践性环节之一,是学完面向对象程序设计课程后的一次全面的综合练习。

本课程设计主要在于巩固学生对面向对象程序设计的基础理论的理解,掌握面向对象程序设计开发的基本方法,进一步提高学生综合运用所学知识的能力。

二、课程设计的内容及要求

以MicrosoftVisualC++6.0作为集成开发环境,完成面向对象课程设计。

要求每人完成以下一个题目,题目由指导教师指派,学生进行程序分析、设计、编程与调试、功能测试,并最终完成课程设计报告,课程设计题目如下:

PARTI

1.分数类的设计与实现

2.一维数组类模板的设计与实现

3.矢量类的设计与实现

4.多项式类的设计与实现

5.设计一个能够实现n×n矩阵操作的类

6.复数类的设计与实现

7.链表类(模版)的设计与实现

8.大整数类的设计与实现

9.多边形类虚函数设计

10.小型人员信息管理系统的设计与实现

11.大学教师工资的计算与显示

12.教师与干部信息管理

13.哈希表类模板的设计与实现

14.赫夫曼编码的设计与实现

15.二叉树类模板的设计与实现

16.队列类模板的设计与实现

17.栈类模板的设计与实现

18.表达式求值的设计与实现

19.字符串类的设计与实现

20.简单加密系统设计

21.某系学生成绩管理系统

22.制作一个通讯录程序

23.设计一个库存管理系统

24.设计INI配置文件分析器

25.二维点容器设计

26.集合并、交和差的运算

PARTII

27.计算器程序

28.小型数字钟

29.象棋程序

30.设计一个歌友会售票系统

31.设计一个打地鼠小游戏

32.设计一个贪吃蛇小游戏

33.设计一个小型考试系统

34.弹球小游戏

题目分成C++语言基本应用和MFC应用两部分,每名学生必须完成第一部分和第二部分中各一道题。

第一部分题目已经按学号分配好,第二部分由学生自行选择并完成。

三、课程设计时间安排

本课程设计在学完面向对象程序设计课程后进行,具体时间为2周。

四、课程设计考核办法

(1)课程设计报告

不少于5000字,报告除了在封面中应有题目、班级、姓名、学号和课程设计日期以外,其正文一般包括需求分析、类与对象设计、算法设计、调试问题分析、用户使用说明、参考文献等部分。

(2)程序演示和验收答辩情况

在课程设计的后期,指导教师在实验室进行课程设计程序的验收与答辩,由学生演示编制的程序,并回答教师提出的问题,教师检查学生程序的编写情况。

(3)课程设计的考勤与纪律遵守情况

五、各题目的具体要求

PARTI

1.分数类的设计与实现

建立用于完成分数形式运算的类RationalNumber。

编写一个测试该类的程序。

用整数变量表示类的私有数据(即分子和分母)。

给类提供一个能够对所声明的对象初始化的构造函数。

为了能够在不提供初始化值的情况下也能对对象初始化,构造函数中应该包含默认的值。

构造函数还应该以最简分数的形式存储数据,即2/4应该在对象中存储成分子为1、分母为2的形式。

公有成员函数应该有以下功能:

(1)两个有理数相加,以最简形式保存结果;

(2)两个有理数相减,以最简形式保存结果;

(3)两个有理数相乘,以最简形式保存结果;

(4)两个有理数相除,以最简形式保存结果;

(5)以a/b的形式输出有理数(a是分子,b是分母);

以浮点形式输出有理数。

2.一维数组类模板的设计与实现

建立一维数组数据结构的模板类,使一维数组中的数据元素可以是char,int,float等多种数据类型,类中的成员函数主要包括:

(1)排序函数,能够对数组元素进行升序排列;

(2)查找函数,能够在输入待查元素后,输出其在数组中的下标;

(3)构造函数,初始化输入数组元素,这里要求数组元素的个数n是一个变量;

(4)析构函数,释放数组元素所占用的堆内存;

(5)Set函数,可以为指定的数组元素赋值;

(6)Get函数,可以读取指定数组元素的值;

(7)重载数组访问运算符“[]”;

(8)Print函数,可以输出数组元素的值。

编写一个测试该模板类的程序。

3.矢量类的设计与实现

编写一个实现n维矢量各种操作的类,功能包括:

(1)构造函数实现n维矢量的初始化构造,这里n可变;

(2)析构函数实现矢量动态内存的释放;

(3)拷贝构造函数实现矢量的拷贝构造;

(4)重载赋值运算符‘=’,实现两个矢量之间的赋值;

(5)编写成员函数求两个矢量的内积;

(6)编写成员函数求两个矢量的外积;

(7)编写成员函数求两个矢量的和;

(8)编写成员函数求两个矢量的差;

(9)编写成员函数判断两个矢量之间的线性相关性。

(10)编写一个主函数测试多项式类的上述功能。

可以自行编写链表类,或者用数组,或者使用STL中的list容器,也可以采用vector类实现。

4.多项式类的设计与实现

开发多项式类Polynomial,多项式的每一项用链表的结点表示,每项包含一个系数和一个指数。

例如:

2x4的指数为4,系数为2。

请开发一个完整的Polynomial类,包括构造函数、析构函数以及“get”函数(读取值)和“set”函数(设置值)。

该类还要提供以下重载的运算符:

(1)重载加法运算符+,将两个多项式相加。

(2)重载加法运算符-,将两个多项式相减。

(3)重载赋值运算符=,将一个多项式赋给另外一个多项式。

(4)重载加法运算符*,将两个多项式相乘。

(5)编写一个主函数测试多项式类的上述功能。

可以自行编写链表类,或者使用STL中的list容器,也可以采用vector类实现。

5.设计一个能够实现n×n矩阵操作的类

这里的n可变,主要功能包括:

(1)使用构造函数完成方阵的初始化赋值(动态内存分配);

(2)使用析构函数完成矩阵动态内存的释放;

(3)重载加法运算符+,实现两个矩阵的和;

(4)重载加法运算符-,实现两个矩阵的差;

(5)重载加法运算符*,实现两个矩阵的积;

(6)重载加法运算符=,实现两个矩阵之间的赋值;

(7)使用函数实现矩阵的转置;

(8)使用函数求矩阵中的最大值;

(9)使用函数求矩阵中的最小值。

(10)添加函数Det以得到矩阵对应行列式的值

(11)重载加法运算符<<,实现矩阵按照行列的格式输出

编写一个主函数测试上述功能。

6.复数类的设计与实现

设计一个复数类,复数类的数据成员是real和imag,它们的数据类型是double,分别表示复数的实部和虚部,要求如下:

(1)编写一个带有缺省参数的构造函数,默认值为(0,0),实现一个复数的构造。

(2)编写一个拷贝构造函数,实现一个复数的拷贝构造。

(3)编写一个析构函数,在函数中输出(real,imag)被析构,例如:

如果复数的实部为1,虚部为2,则被析构时程序输出:

“(1,2)被析构”。

(4)重载运算符“+”为复数类的成员函数,其功能是返回两个复数的相加的结果。

(5)重载运算符“-”为复数类的成员函数,其功能是返回两个复数的相减的结果。

(6)重载运算符“*”为复数类的友元函数,其功能是返回两个复数的相乘的结果。

(7)重载运算符“/”为复数类的友元函数,其功能是返回两个复数的相除的结果。

(8)重载单目运算符“-”为复数类的友元函数,其功能是返回当前复数的相反数。

(9)重载运算符“>>”为复数类的友元函数,其功能是按照以格式(real,imag)

(10)输入复数。

例如:

如果复数的实部为1,虚部为2,则输入的格式是“(1,2)”。

(11)重载运算符“<<”为复数类的友元函数,其功能是按照以格式(real,imag)

(12)输出复数。

例如:

如果复数的实部为1,虚部为2,则输出的结果是“(1,2)”。

以上函数在类的内部写出函数原型,在类的外部写出函数实现代码,最后编写一个主函数main测试以上的函数功能。

7.链表类(模版)的设计与实现

编写一个实现学生信息单链表各种操作的类,学生信息包括学号、姓名和成绩,类实现以下功能:

(1)初始化单链表为空表;

(2)实现单链表的插入操作的成员函数;

(3)实现单链表的删除操作的成员函数;

(4)实现单链表的查找操作的成员函数(给定学号,查找其学号、姓名和成绩);

(5)实现求单链表长度的成员函数;

(6)实现建立单链表的成员函数,单链表节点的个数不确定;

(7)重载运算符“+=”实现两个链表对象合并功能;

(8)编写Unique()成员函数,实现剔除链表中重复元素,使所有节点值唯一;

编写一个主函数测试上述功能。

8.大整数类的设计与实现

计算机中表示整数的位数是有限的,设计并实现一个能够进行任意长度整数准确计算的类,完成以下功能:

(1)用构造函数实现大整数的构造。

(2)重载“+”运算符,实现两个大整数的相加运算;

(3)重载“-”运算符,实现两个大整数的相减运算;

(4)重载“*”运算符,实现两个大整数的相乘运算;

(5)重载“<<”运算符,实现大整数的输出。

提示:

长整数用一维字符型数组来存储,数组的每一个元素顺序存储长整数的一位数字。

设有k位长整数m,用数组a[]存储:

m=a[k]*10^(k-1)+a[k-1]*10^(k-2)+...+a[2]*10^1+a[1]*10^0

并用a[0]存储长整数m的位数,即a[0]=k。

可以自行编写链表类,或者使用STL中的list容器,也可以采用vector类实现。

9.多边形类虚函数设计

设计多边形基类CPolygon及其派生类CTriangle、CRectangel和CCircle类,为各个类设计虚函数Input()、Area()、Print(),实现从数据文件读入数据,从而生成各种多边形对象,并且计算面积和输出对象信息,数据文件格式如下:

TRIANGLE底边长高

RECTANGLE长宽

CIRCLE半径

每一行存储一个对象,第一单词位对象类型,其后是数据,具体实例:

TRIANGLE305

RECTANGLE127

TRIANGLE203

CIRCLE27

CIRCLE8

………………

要求采用STL中的vector来存储基类指针来指向各个对象,并用循环实现各形状对象的操作。

10.小型人员信息管理系统的设计与实现

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

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

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

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

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

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

月薪计算办法是:

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

要求为每一类人员单独建立文件,并在每个文件中手工录入一些人员基本信息,并根据这些基本信息计算职工的月薪,并将计算结果保存入相应的磁盘文件中。

要求编写程序实现上述功能,并且可以通过实例演示上述功能。

11.大学教师工资的计算与显示

某大学的教师的职称等级决定其工资等级,教师共有四种职称等级:

助教,讲师,副教授,教授,其月薪分别为:

助教900元/月,讲师1000元/月,副教授1300元/月,教授1600元/月。

编写一个计算教师工资的程序,要求如下:

(1)建立一个抽象基类Teacher,其数据成员有:

教师姓名name,教师职称position,教师工资Salary;成员函数有:

纯虚函数CalcSalary()计算教师工资,纯虚函数Show()输出教师的姓名、职称和工资。

(2)分别从抽象基类Teacher中派生出四个具体类Assistant,Lecture,AssociateProfessor,Professor,分别表示助教,讲师,副教授,教授。

在每一个类中实现三个成员函数,构造函数为教师初始化姓名和职称;CalcSalary()函数计算教师工资;Show()输出教师的姓名、类别和工资,其中输出格式为:

姓名:

name,职称:

position,工资:

Salary元

(3)教师的姓名和职称信息包含在磁盘文件teacher.txt中,要求建立teacher.txt文本文件,并输入如下信息:

王刚助教

李铭讲师,

张莉副教授

赵蒙教授

程序从Teacher.txt文件中读取上述信息,作为工资计算依据。

(4)编写一个主函数main测试以上各类,要求用一个基类的指针分别指向派生类对象分别计算每一个人的工资,并将输出结果保存到Teacher.txt文件中。

例如输出如下结果:

王刚助教900

李铭讲师1000

张莉副教授1300

赵蒙教授1600

12.教师与干部信息管理

分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。

要求:

(1)在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。

(2)在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Techear_Cadre类中还包含数据成员wages(工资)。

(3)对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。

(4)在类体中声明成员函数,在类外定义成员函数。

(5)在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。

人员的基本信息分别存储在磁盘文件Teacher.txt,Cadre.txt和Teacher_Cadre.txt文件中,Teacher.txt的格式是:

(姓名、年龄、性别、地址、电话、职称),Cadre.txt的格式是:

(姓名、年龄、性别、地址、电话、职务),Teacher_Cadre.txt的格式是:

(姓名、年龄、性别、地址、电话、职称、职务、工资),要求在操作系统中建立上述文件,并按照上述格式手工录入几条记录,程序首先从文件中读取相应数据,然后完成上述功能。

13.哈希表类模板的设计与实现

实现哈希表类模板,数据元素可以是char,int,float等多种数据类型,包括以下功能:

(1)实现哈希表的建立,散列函数采用除留余数法;

(2)使用开放地址法处理冲突;

(3)使用链地址法处理冲突;

(4)实现哈希表元素的插入;

(5)实现哈希表元素的删除;

(6)实现哈希表的查找;

将上述功能作为类的成员函数实现,编写主函数测试上述查找功能。

14.赫夫曼编码的设计与实现

进行赫夫曼编码类的设计并实现,包括以下功能:

(1)设计类的数据成员和成员函数,实现赫夫曼树的存储;

(2)根据给定的通信字符出现的概率,实现赫夫曼树的建立;

(3)遍历赫夫曼树,求赫夫曼编码;

(4)给出一段字符串,进行赫夫曼编码;

将上述功能作为类的成员函数实现,编写主函数测试上述功能。

15.二叉树类模板的设计与实现

进行二叉树类模板的设计并实现,数据元素可以是char,int,float等多种数据类型,包括以下功能:

(1)采用顺序存储结构或链式存储结构实现二叉树的存储;

(2)实现二叉树的建树;

(3)实现二叉树的前序、中序、后序遍历;

(4)能够求解二叉树的结点总数和叶子结点总数;

(5)能够求解二叉树的高度;

将上述功能作为类的成员函数实现,编写主函数测试上述功能。

16.队列类模板的设计与实现

进行队列类模板的设计并实现,队列采用循环队列实现,数据元素可以是char,int,float等多种数据类型,包括以下功能:

(1)实现初始化队列操作,建立一个空队列;

(2)实现清空队列操作;

(3)实现判断队列是否为空的操作;

(4)实现求队列长度的操作;

(5)实现返回队首元素的操作;

(6)实现入队操作;

(7)实现出队操作;

(8)实现队列的遍历操作,输出队列的每个元素。

将上述功能作为类的成员函数实现,编写主函数测试上述功能。

17.栈类模板的设计与实现

进行栈类模板的设计并实现,栈采用链式存储结构,数据元素可以是char,int,float等多种数据类型,包括以下功能:

(1)实现初始化栈操作,建立一个空栈;

(2)实现清空栈操作;

(3)实现判断栈是否为空的操作;

(4)实现求栈长度的操作;

(5)实现返回栈顶元素的操作;

(6)实现入栈操作;

(7)实现出栈操作;

(8)实现栈的遍历操作,输出栈的每个元素。

将上述功能作为类的成员函数实现,编写主函数测试上述功能。

18.表达式求值的设计与实现

表达式求值是程序设计语言编译中的一个最基本问题,要求进行类的设计与实现,采用算符优先法实现表达式求值。

具体要求如下:

(1)用顺序栈作为表达式求值过程中运算符栈和操作数栈的实现;

(2)用二维数组存储算符间的优先关系;

(3)采用算符优先法实现表达式求值;

将上述功能作为类的成员函数实现,编写主函数测试上述功能。

19.字符串类的设计与实现

封装字符串类,实现字符初始化、存储、对象赋值、求长度、连接、查找子串(字符)、插入子串(字符)、比较、清空串等操作,其中赋值、连接要用运算符重载。

(用动态内存分配实现)。

例:

CMyStringstr1(“Hello”),str2;

str2=str1;//赋值,str2也变成“Hello”

str2+=”China”;//连接功能,str2变成“HelloChina”

str2.Find(‘o’)//返回4

str1.Insert(2,’K’);//str1变成HeKllo

str1.Compair(“HeMllo”);//返回1,”HeKllo”〉”HeMllo”,向等返回0。

20.简单加密系统设计

实现输入明文字符串及密码后,使用加密功能可以得到密文字符串,同样输入密文和密码后可以得到明文字符串。

加密方法可以对字符的ASCII码进行异或操作来实现,如C=A

B,且B=C

A,A为密码,B为明文,C为密文,

为异或操作。

要求:

及加密类、解密类,可以操作文件。

可以用控制台窗口(DOS)实现,也可以用MFC设计可视化程序(推荐)。

21.某系学生成绩管理系统

要求,实现年级管理(4个年级)、班级管理及学生信息管理,可以实现班级的查询、添加、删除、修改,学生成绩的查询、添加、删除、修改等。

程序使用类的包含方法实现。

(1)一个班最多30名学生,4门课程;

(2)班级信息、学生成绩存放在数据文件中(可以多个文件);

(3)内存中数据组织建议采用STL容器。

设计班级类、学生类等,建立文件、输出文件内容、计算每个学生总分并进行总分排序、查找各科最低分和最高分。

可以用控制台窗口(DOS)实现,也可以用MFC设计可视化程序(推荐)。

22.制作一个通讯录程序。

(1)该程序具有查找、添加、修改、删除功能;

(2)通讯录包括:

姓名、电话、街道、城市、省、邮编;

(3)内存中数据组织建议采用STL容器;

(4)建立文件,存储文件可以使用默认文件名或指定文件名;

(5)存储信息到文件中,从文件中读取信息。

程序说明:

通讯录用记录类来实现,查找、删除使用姓名作为关键字,删除可以删除一人,也可删除多人,要有相应的交互操作实现。

可以用控制台窗口(DOS)实现,也可以用MFC设计可视化程序(推荐)。

23.设计一个库存管理系统

可实现货品的入库、出库、查询、删除等操作。

每条库存记录包括:

编号、货品名、厂家、数量、单价、描述等,进货时如果原来没有此货物,就插入新记录;如果有就找到原来记录修改数量。

出货时修改货品数量。

(1)库存记录用类实现

(2)内存中数据组织建议采用STL容器;

(3)存储信息到文件中,从文件中读取信息。

可以用控制台窗口(DOS)实现,也可以用MFC设计可视化程序(推荐)。

24.设计INI配置文件分析器

标准的INI配置文件的格式为:

[节名1]

ValueName1=hello

ValueName2=1000

[节名2]

ValueName1=you

ValueName2=100,500

ValueName3=0

ValueName4=6

[节名3]

ValueName1=jack

………………

设计一个文本分析器类CINIReader,可以打开配置文件,给定节名和项目名就可以得到具体值及修改具体值,也可以根据节名添加和删除节,最后可以把分析器的内容保存为文件。

如上INI文件中,如果设计测试主函数后可如下所示:

CINIReaderreader;

stringsvalue;

reader.Open(“example.ini”);//打开文件

svalue=reader.Get(“节名1”,”ValueName1”);//返回字符串“hello”

reader.Set(“节名1”,”ValueName2”,”2000”);//修改项目值为”2000”

reader.Add(“节名1”,”ValueName3”,”600”);//在此节中添加一行新值

reader.Save();//可以把修改后结果保存下来

………

25.二维点容器设计

首先设计一个二维点Point类,包括x,y2个浮点数成员;然后设计点容器PointContainer类,为该类设计成员函数:

(1)成员函数voidAdd(Point&pt),实现向容器中添加点;

(2)成员函数voidRemove(intindex),删除容器中指定序号的点;

(3)成员函数voidClear(),清空容器,删除所有点;

(4)成员函数Point&Get(intindex),返回指定序号点的引用;

(5)重载运算符“[]”,实现核(4)同样的功能;

(6)成员函数intCount(),得到容器中点的数量;

(7)成员函数intCloseToWhich(Point&pt,floatfdist),返回容器中与参数pt距离小于fdist的第一个点的序号。

(8)编写主函数测试上述功能。

可以采用MFC编程测试,把鼠标点击位置保存到容器中。

26.集合并、交和差的运算

通过类与对象的设计,编制一个能演示执行集合的并、交和差运算的程序,要求如下:

(1)设计集合类,集合的元素限定为小写字母字符[‘a’,…,’z’];

(2)演示程序以用户和计算机的对话方式执行;

(3)以有序链表表示集合发,或者用STL中的容器;

(4)实现集合的元素判;

(5)子集判定运算;

(6)可以队集合添加、删除元素;

(7)编写主函数测试上述功能

PARTII

27.计算器程序

制作一个基于对话框的简单的计算器程序,可以实现两个操作数的加、减、乘、除运算,以及一个操作数的平方、开方、正

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

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2