面向对象课程设计实习指导书.docx
- 文档编号:10221771
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:48
- 大小:70.99KB
面向对象课程设计实习指导书.docx
《面向对象课程设计实习指导书.docx》由会员分享,可在线阅读,更多相关《面向对象课程设计实习指导书.docx(48页珍藏版)》请在冰豆网上搜索。
面向对象课程设计实习指导书
中国地质大学(武汉)信息工程学院空间信息系
面向对象课程设计实习指导书
使用班级:
114111~3
实习指导老师:
2012-5-14
一、课程设计目的
1、使学生对所学理论知识进行一次综合性复习;
2、培养学生对实际问题的分析能力;
3、培养学生独立编程、开发软件的动手能力;
4、培养学生开放思维的创新能力;
5、培养学生熟练掌握VC++调试技能;
6、培养学生规范的编程习惯;
7、培养学生团队协作精神;
8、培养学生撰写课程设计报告的能力。
二、课程设计要求
为了能更好地达到课程设计的目的,要求学生:
1、每次上机前充分做好准备工作,查阅资料,预习相关内容,对课程设计内容进行方案的预设计,编制出源程序代码。
2、充分利用上机时间完成源程序代码的输入、调试及优化。
3、程序代码的编制应按照C++编码规范的要求进行,具体可参考指导书中【附件一】“C++编码规范”。
4、课程设计结束后,按照指导书中【附件二】“课程设计报告格式”的要求撰写出课程设计报告(要求用A4纸打印,报告格式的电子文档由指导教师提供)。
5、按题目要求独立完成课程设计,不旷课、不迟到、不早退、遵守机房规定、爱护机房设备。
三、课程设计内容和时间分配
1、课程设计内容分为四部分:
(1)课程设计基本练习题目(一级);
(2)课程设计基本练习题目(二级):
A组、B组;
(3)课程设计基本练习题目(三级);
(4)课程设计综合题;
2、实习中,建议对上述四部分内容的时间分配为:
1:
2:
3:
4。
即
0.5个上机时
完成一级题目
1.5次上机时
完成二级题目
3次上机时(第3~5次)
完成三级题目
3次上机时(第6~8次)
完成综合题
在课程设计中,同学们可以根据自己的实际情况,时间上酌情调整。
3、课程设计题目完成的数量要求:
(1)课程设计基本练习题目(一级)A组、B组、C组,每组任选一题,共三题;
(2)课程序设计基本练习题目(二级)A组、B组,每组任选一题,共两题;
(3)课程设计综合练习题目至少选做一题,多做者可酌情加分。
4、课程设计的成绩与题目完成的数量、质量、创新程度、回答提问、课程设计报告以及平时表现等有关,具体请看指导书“成绩评定及评分标准”。
四、课程设计题目
、课程设计基本练习题目(一级,10分×1)
请从以下1-3题中任意选做一题(建议使用MFC设计程序界面)
1、有1、2、3、4、5、6六个数,能组成多少个互不相同且无重复数字的三位数?
都是多少?
2、福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE*?
=EDCBA。
他对华生说:
“ABCDE应该代表不同的数字,问号也代表某个数字!
”华生:
“我猜也是!
”。
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用编程技术,找到破解的答案。
3、假定你有一张信用卡,卡上已经产生应还金额为500元,假定你一直不还款,那么在多少个月之后,这张卡的应还金额会超过1000元?
每月的应还额假定会增长2%,即第一个月应还50元,第二个月应还500+500*0.02=510元,第三个月应还510+510*0.02=520.20……,货币计算保留2位有效小数,编程给出问题的答案。
、课程设计基本练习题目(二级,12分×2)
【A组】请从以下4-5题中任意选做一题(鼓励使用MFC设计程序界面)
4、统计学生成绩
从文本文件中读某班学生的学号、姓名和成绩,进行分析给出平均分、最高分、最低分、最大分数差、标准差、各学生的名次,把结果输出到文件中。
其中:
最大分数差=最高分-最低分
5、文本文件中有一组整数,以空格分隔,要求排序后输出到另一个文件中。
【B组】请从以下6-8题中任意选做一题(鼓励使用MFC设计程序界面)
6、计算正方体、球体和圆柱体的表面积和体积(要求使用虚函数)。
7、假设d:
\a.txt文件中存储着一个10行6列的矩阵整型数据,数据之间用空格隔开的。
编写一个程序实现从d:
\a.txt文件中读入数据到一个二维整型数据矩阵中,并求解每一行最大值和每一列最小值,输出到屏幕显示。
8、定义一个Stud类,含学号、姓名、成绩和班号数据成员。
建立若干个Stud类对象,并将它们存储到文件data.dat中,最后输出文件内容。
、课程设计基本练习题目(三级,18分×2)
请从以下9-13题中至少选做两题,其中第9题为必选题(要求使用MFC设计程序界面)
9、定义复数的类Complex并测试其功能:
(1)复数由实部、虚部两个部分组成,在类的定义中应包含保存这两部分信息的内容。
(2)在类中定义构造函数,使用户能够在构造对象的同时为对象赋初值。
(3)在类中定义复数的加法、减法、乘法三个二元操作符来完成复数间的加、减、乘的功能。
(4)通过重载“<<”,使得Complex类的对象能够显示其自身信息。
(5)通过显示定义一个成员函数完成对象的赋值操作,使用户能够对Complex类的对象进行赋值。
(6)编写一段主程序(main函数),使用户能够通过这段主程序输入复数并进行复数的计算。
10、设计实现一个猜数字的小游戏。
游戏开始时在程序内部随机生成一个4位数字(每一位上的值不同,例如3795),用户通过若干轮的尝试试图猜出该数字,猜测次数不能超过8次,第八次如果仍未猜对则提示用户下次继续努力,程序退出。
每一轮猜测过程包括:
(1)用户输入一个猜测的四位数字,每一位值不同,例如输入3456;
(2)程序比较用户输入的数字和程序内部随机生成的数字,如果值对但位置不对则一个计数变量B累加,如果值对位置也对则计数变量A累加。
(3)输出A和B的累加信息以提示用户后续的猜测,例如输入3456,则输出1A1B;输入1268,则输出0A0B;输入5973,则提示0A4B;输入3795,则提示猜测成功。
要求用类来实现该小游戏。
11、栈模板及其实例的使用:
(1)利用类模板实现一个通用的栈模板。
要求这个栈模板能够完成一般栈的基本操作(栈元素为基本数据类型,不包括指针、数组以及对象):
向栈中压入一个元素(push)、取栈顶元素的值(top)、弹出栈顶元素(pop)、清空栈(empty)、判断栈是否为空(isEmpty)。
(2)编写一段主程序,要求主程序中生成整型、浮点型、字符型的栈实例各一个并分别测试其功能。
12、编写一个字符串类,要求该类可以实现以下功能:
(1)取字符串长度GetLength,判断字符串是否为空IsEmpty,取特定字符在字符串中位置GetAt。
(2)实现+和=的重载。
(3)实现插入一字符(或子串)Insert、删除一字符(或子串)Delete、替换一字符(或子串)Replace。
13、图形绘制与拾取。
具体要求如下:
【主要功能】
绘制并拾取线图元,修改拾取的线图元信息。
【要求】
(1)通过鼠标点击在视图区域输入线图元;
(2)通过鼠标点击拾取线图元;
(3)提供线图元信息对话框,用户可以修改所选图元信息;
(4)将绘制信息保存至文本文件,第二次打开文件,程序可以显示正确的绘制。
、课程设计综合练习题目(30分×1)(要求使用MFC设计程序界面)
14、设计一个程序用于管理自己的个人资金软件。
其中有3个类,CBC、CICBC和CCash,分别为中国银行类、工商银行类和现金类。
每个类都包含一个私有数据balance,用于存放自己在该类帐号中的余额数,每个类还有转帐(tranfer)、收入(income)、支出(consume)、统计(Statistic)等操作功能。
类结构如图4-2所示。
(1)界面的形式如图4-3~4-5所示。
界面上需要实现的功能包括:
1、记帐功能:
记录某个帐户中的资金变化的明细。
写入到磁盘文件。
2、统计功能:
本月总支出;
3、帐单查看:
各个帐号的查看;(直接调用文件显示)
类CCash
intbalance
类CICBC
intbalance
类CBC
intbalance
图4-2银行类结构图
图4-3记账功能菜单设计
图4-4帐单查看菜单设计
图4-5记账功能界面设计
(2)基类CMyAccount的定义如下:
classCMyAccount
{
public:
//参数说明:
ptSourceA[in]-转帐源方;
//ptDestA[in]-转帐目的方;
//sum[in]-转帐金额
//ptNote[in]-备注
//功能举例:
从银行取钱时,就需要执行转帐操作:
从某个银行帐号转入到现金帐号中。
virtuallongtransfer(CMyAccount*ptSourceA,CMyAccount*ptDestA,doublesum,char*ptNote=NULL);
//参数说明:
inType[in]-收入类型:
例如奖学金、勤工俭学、父母支助等。
可根据实际情况添加。
virtuallongincome(CMyAccount*ptSourceA,shortinType,doublesum,char*ptNote=NULL);
//参数说明:
conType[in]-支出类型:
食物、衣物、学费、书籍等。
可根据实际情况添加。
virtuallongconsume(CMyAccount*ptSourceA,shortconType,doublesum,char*ptNote=NULL);
//参数说明:
conType[in]-支出类型:
食物、衣物、学费、书籍等。
可根据实际情况添加。
//功能说明:
统计某个时间段内的收支情况,结果有收支总体情况和各种子类的具体数据。
virtuallongstatistic(TimeStamp_STRU&timeStart,TimeStamp_STRU&timeEnd);
private:
doublebalance;
}
(3)其他说明:
在实现的过程中可根据自己的实际情况增加软件的实用性。
实用性强的软件可酌情加分。
五、成绩评定及评分标准
由指导教师根据课程设计任务完成情况、现场提问、观看运行结果、评阅课程设计报告并参考学生平时表现等五方面给出课程设计成绩。
1、具体评分标准(见表5-1),成绩等级分为:
A(100分)、B(80分)、C(70分)、D(60分)、E(<60分)五档或折合成百分制给出成绩。
表5-1VC++课程设计评分暂行标准
项目
评定内容
评分标准(ABCDE)
评分
A
D
课堂
检查
完成设计题目的数量与质量(X1)
超额完成设计题目,达到较高的程序设计水平,具有一定的创新性、实用性。
基本完成课程设计要求
提问检查基础理论掌握情况(X2)
回答问题准确合理,概念表达清楚、有条理。
基本符合问题要求
调试能力和软件运行检查(X3)
具有较强的调试程序的能力,操作熟练,程序运行结果正确,界面友好,界面结构合理。
程序运行结果基本符合要求
课程
设计
报告
课程设计报告情况检查(X4)
严格按照课程设计报告格式的要求,设计文档规范;书写清晰有条理,图文并貌,能够总结算法或设计的优缺点,附有改进意见、设计体会或心得。
基本达到课程设计报告的要求
平时
表现
出勤记载(X5)
严格遵守机房规定,不迟到不早退,不做与课程设计无关的事情
基本能按要求进行课程设计
总分
总分=(X1+X2+X3+X4+X5)/5
2、指导老师按优秀、良好、中等、及格、不及格五档提交成绩,成绩等级如下:
优秀:
90-100;
良好:
80-89;
中等:
70-79;
及格:
60-69;
不及格:
<60,成绩不合格者需要重修。
附件一、C++编码规范
1、文件组织
(1)文件结构
A、版权和版本的声明
版权和版本的声明位于头文件和定义文件的开头(参见例1),主要内容有:
①版权信息。
②文件名称,标识符,摘要。
③当前版本号,作者/修改者,完成日期。
④版本历史信息。
//Copyright(c)2002-2005,中国地质大学
//Allrightsreserved.
//
//文件名称:
输入文件名,如filename.h
//文件标识:
见配置管理计划书
//摘要:
简要描述本文件的内容
//
//当前版本:
1.1
//作者:
输入作者(或修改者)名字
//完成日期:
2002年7月20日
//
//取代版本:
1.0
//原作者:
输入原作者(或修改者)名字
//完成日期:
2002年5月10日
例1版权和版本的声明
B、头文件的结构
头文件由三部分内容组成:
①头文件开头处的版权和版本声明(参见例1)。
②预处理块。
③函数和类结构声明等。
假设定义文件的名称为box.h,定义文件的结构参见例2。
//版权和版本声明见例1,此处省略。
#include“graphics.h”//引用头文件
…
//全局函数的声明
voidFunction1(…);
;
//类的声明
classCBox{
public:
longGetSize();
…
private:
longm_lWidth;
….
};
例2C++/C定义文件的结构
【规则1】防止头文件内容被重复包含
为了防止头文件内容被重复包含,所有头文件必须用ifndef/define/endif结构产生预处理块。
例如:
对于文件mystring.h,其文件内容应按照如下方式编写(例3):
#ifndefMYSTRING_H
#defineMYSTRING_H
#include
…
#include“myheader.h”//引用非标准库的头文件
…
voidFunction1(…);//全局函数声明
…
classBox//类结构声明
{
…
};
…
#endif
例3文件的内容定义
【规则2】引用信息顺序
标准的头文件要放在前面,而且按照字母顺序排列。
标准头文件和自己的头文件之间应该用空行分隔。
【规则3】用#include
【规则4】用#include“filename.h”格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
【建议1】头文件中只存放“声明”而不存放“定义”
在C++语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数,如果从提高性能角度考虑是可取。
除此之外的选择,建议将成员函数的定义与声明分开,不论该函数体有多么小。
【建议2】不提倡使用全局变量,尽量不要在头文件中出现象externintvalue这类声明。
C、头文件的作用
①通过头文件来调用库功能。
在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。
用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的,编译器会从库中提取相应的代码。
②头文件能加强类型安全检查。
如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
(2)目录结构
如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分别保存于不同的目录,以便于维护。
例如,可将头文件保存于include目录,将定义文件保存于source目录(可以是多级目录)。
如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声明”。
为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。
【规则5】统一目录结构
项目开始时,规定好项目相关文件在磁盘上的存储目录结构。
2、命名规则
比较著名的命名规则当推Microsoft公司的“匈牙利”法,该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。
例如所有的字符变量均以ch为前缀,若是指针变量则追加前缀p,如果一个变量由ppch开头,则表明它是指向字符指针的指针。
在程序体中应基本遵循匈牙利命名规则。
(1)总则
【规则6】标识符应当直观且可以拼读,可望文知意,不必进行“解码”。
标识符应该采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名。
【规则7】标识符长度应当尽量符合“min-length&&max-information”原则。
单字符的名字也是有用的,常见如i,j,k,m,n,x,y,z等,它们通常可用作函数内的局部变量。
【规则8】程序中不要出现仅靠大小写区分的相似的标识符。
例如:
intx,X;//变量x与X容易混淆
voidfoo(intx);//函数foo与FOO容易混淆
voidFOO(floatx);
【规则9】命名规则尽量与所采用的操作系统或开发工具的风格保持一致。
例如Windows应用程序的标识符通常采用“大小写”混排的方式,如AddChild。
而Unix应用程序的标识符通常采用“小写加下划线”的方式,如add_child。
别把这两类风格混在一起用。
【建议3】尽量避免名字中出现数字编号,如Var1,Var2等,除非逻辑上的确需要编号。
【建议4】尽量使用公认的无异义的缩写,缩写一般不超过4个字母。
例如:
HTMLHypertextMarkupLanguage
URLUniformResourceLocator
cmdcommand
initinitialize
【规则10】程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解。
【规则11】变量的名字应当使用“名词”或者“形容词+名词”。
例如:
floatvalue;
floatoldValue;
floatnewValue;
【规则12】函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。
类的成员函数省掉表示对象本身的“名词”。
例如:
DrawBox();//全局函数
box->Draw();//类的成员函数
【规则13】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。
例如:
intminValue;
intmaxValue;
intSetValue(…);
intGetValue(…);
(2)文件
【规则14】通用文件命名规则
①类的声明文件(.h)和实现文件(.cpp):
类名.h类名.cpp
②常量定义文件:
项目名称缩写(大写)+_Const.h例:
DI_Const.h
③全局变量、函数声明文件:
项目名称缩写(大写)+_GlobalDef.h例:
DI_GlobalDef.h
④错误代码定义文件:
项目名称缩写(大写)+_ErrorDef.h例:
DI_ErrorDef.h
(3)变量
【规则15】变量名由范围前缀+类型前缀+限定词组成。
【规则16】变量和参数用小写字母开头的单词组合而成。
例如:
BOOLflag;
intdrawMode;
【规则17】变量的范围前缀
①全局变量加上g_(表示global)
例如:
intg_howManyPeople;//全局变量
intg_howMuchMoney;//全局变量
②静态变量加上s_
例如:
voidInit(…)
{
staticints_initValue;//静态变量
…
}
③局部变量范围前缀为空
【规则18】变量的类型前缀
类型名称
表示符号
范例
整型
n
m_nTotalNum
长整型
l
g_lOpenDate
无符号整型
u
uMsgID
无符号长整型
dw
dwCardNo
字符
ch
chChar
布尔量
b
m_bOK
浮点数
f
m_fPrice
双精度浮
d
g_dRate
字符数组
sz
m_szPath
指针
p
pProgress
字节指针
pb
m_pbSendData
无符号指针
pv
g_pvParam
字符指针
lpsz
lpszNameStr
整型指针
lpn
lpnSysDoomType
文件指针
fp
m_fpFile
结构体
st
stMyStruct
【规则19】方法参数名
使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字。
例如:
voidsetTopic(StringstrTopic)
{
this.strTopic=strTopic;
...
}
【建议5】循环变量
可以用i,j,k做循环变量,用p,q做位移变量。
【规则20】常量名全用大写,用下划线分割单词
例如:
constintMAX=100;
constintMAX_LENGTH=100;
(4)自定义类型
【规则21】类名
必须由大写字母开头的单词或缩写组成,只用英文字母,禁用数字、下划线等符号。
【规则22】typedef定义的类型
利用typedef创建类型名为以“S”加单词或缩写组成,只用英文字母。
【规则23】枚举类型
枚举类型名以“E”加单词或缩写组成,只用英文字母。
枚举类型的成员遵循常量命名约定,使用大写字母和下划线,名称要有含义。
【规则24】结构(struct)和联合(union)
结构(struct)和联合(union)名同类名。
(5)函数
【规则25】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。
【规则26】函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。
【规则27】类方法名必须用一个小写字母的动词开头,后面的单词用大写字母。
例如:
getName(),setHTML()
【建议6】方法名前缀
根据需要使用get/set存取属性值,is/has/should存取布尔值。
推荐使用下列方法前缀,按下列组合配对使用:
add/remove,create/destroy,old/new,insert/delete,increment/decrement,start/stop,
begin/end,first/last,up/down,next/previous,min/max,open/close,show/hide
3、注释
(1)总则
【规则28】程序可以有两种注释:
代码注释(implementationcomments)和文档注释(documentationcomments)。
代码注释主要删除注释(注释掉目前不需要的代码)和说明注释(对代码进行说明),文档注释是指专门用来形成文档用的注释。
【规则29】注释是Why而不是What。
程序中的注释不可喧宾夺主,注释的花样要少。
【规则30】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。
不再有用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 课程设计 实习 指导书