5 面向对象课程设计实习指导书下.docx
- 文档编号:25851112
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:47
- 大小:180.05KB
5 面向对象课程设计实习指导书下.docx
《5 面向对象课程设计实习指导书下.docx》由会员分享,可在线阅读,更多相关《5 面向对象课程设计实习指导书下.docx(47页珍藏版)》请在冰豆网上搜索。
5面向对象课程设计实习指导书下
中国地质大学(武汉)信息工程学院信息工程系
面向对象课程设计
实习指导书(下)
使用班级:
指导老师:
1.
课程设计目的
1、使学生对所学面向对象程序设计理论知识进行一次综合性复习;
2、培养学生对实际问题的分析能力;
3、培养学生独立编程、开发软件的动手能力;
4、培养学生规范的编程习惯;
5、培养学生撰写课程设计报告的能力。
6、培养学生熟练掌握VC++调试技能;
7、培养学生规范的编程习惯;
8、培养学生团队协作精神;
9、培养学生撰写课程设计报告的能力;
10、掌握MFC开发(主要包括视图、对话框等)
11、熟练的文件操作能力
12、接触一定的WindowsAPI
2.课程设计要求
为了能更好地达到课程设计的目的,要求学生:
1、每次上机前充分做好准备工作,查阅资料,预习相关内容,对课程设计内容进行方案的预设计,编制出源程序代码。
3、程序代码的编制应按照C++编码规范的要求进行,具体可参考指导书中【附件二】“C++编码规范”。
程序的界面全部采用MFC的函数实现。
4、按题目要求独立完成课程设计,不旷课、不迟到、不早退、遵守机房规定、爱护机房设备。
5、实习时间:
建议32学时
6、实习成果提交
时间:
建议实习结束后,2周内提交
内容:
纸质报告和光盘(以班级为单位刻盘,盘内含每人代码及电子文档报告)
要求:
课程设计结束后,按照指导书中【附件一】的要求撰写出课程设计报告(要求用A4纸打印,报告格式的电子文档由指导教师提供)。
3.课程设计题目
MFC的程序,出于精益求精的考虑,可以做的非常复杂。
如果不对范围进行较清晰的界定,可能会远远超出课程设计的要求范围,因此本次课程设计采取逐步推进的方法来进行,以便学习曲线尽量平滑,降低MFC和C++的学习难度,增强学生的成就感,提升学生的学习兴趣。
3.1橡皮筋画线程序,要求:
3.1.1基本要求
✧利用鼠标在视图上绘制线,能够设置线的颜色和宽度;
✧能够用鼠标拾取绘制的某条线,被选中的线能够高亮显示,并且弹出对话框,输入线的属性保存起来;
3.1.2高阶要求
✧能够将绘制的线数据保存在Line.dat文本文件中;
✧打开线数据文件Line.dat,可以显示出文件里面的线图形。
3.1.3可选功能
✧文字能够在视图任意地方点击鼠标后输入。
提示:
可以使用STL中的容器来管理数据。
3.2学生学籍成绩管理系统
学生的信息包括:
姓名、学号、性别、班级、院系;学生的成绩信息包括英语、数学、程序设计及体育成绩等各门课的成绩;
定义如下类,并建立一个文本文件Student.dat,用于存储学生、课程与成绩的相关信息。
文件格式自己定义。
学生类CStudent(姓名、学号、性别、班级、院系);
课程类CLessen(课程名称、课程开设时间);
成绩类CGrade(学号、课程名称、成绩)
要求实现如下功能:
✧在对话框上能够添加、删除、编辑和查询课程信息;
✧在对话框上能够添加、删除、编辑和查询学生信息学生信息;
✧在对话框上能够增加、删除、编辑和查询学生的选课信息;
✧在对话框上能够录入和编辑学生某门课的考试成绩;
✧在对话框上能够按照学生姓名查询学生的选课信息和选课成绩,并统计出其总成绩、平均成绩,计算出该学生的成绩的标准差;
✧显示全班的学生成绩排名。
✧统计出各班的平均成绩,并进行排名。
3.3编辑器
做一个单文档的程序,能够进行读取两个文本文件的内容,并将其内容用图形的方式显示出来。
两个文本文件内容:
在Point1.txt文件中,记录了点的坐标信息,如下如所示:
图31point文件内容
第一列是点的行号,没有什么特别意义,就是累加的顺序;
第二列是一个点的ID,具有唯一性。
即没有ID相同的两个点。
第三列是点的类型,不同的类型表示不同的点。
比如10可能是一个小黑点,26是一个空心圆表示的点,20是一个小三角形等。
第四列是点的名字,是一个字符串。
最后两列是点的坐标,注意是浮点型的笛卡尔坐标(方向是上、右),并非vc中的缺省的坐标系(方向是下、右)。
Lin1.txt文件中,记录了线的连接关系(没有曲线,只有折线段),如下图所示:
图32lin文件中的内容
第一列是线的序号,没有实际意义,一行表示一条线。
第二列是线的ID,有唯一性,即每个线的ID不同
第三列和第四列是这个线的两个端点的ID(ID对应point.txt中的ID0)
3.3.1基本要求:
用程序读取两个文本文件,将数据读入内存,用相应的数据结构保存到内存。
将所有数据都在一个视图显示出来。
建议:
1.注意点的坐标为浮点类型,需要进行坐标的变换
2.这一阶段,不用考虑图形参数,不用考虑图形的操作,只需要显示出来即可
3.建议自己做两个简单的文件,手工录入几条整数型的坐标,用缺省坐标系先实现,然后再考虑本题浮点和笛卡尔坐标的问题
4.本题主要考察视图显示、坐标、更新窗口知识点
3.3.2高阶要求:
/图形参数可以选择后变化(包括点的形状、大小;线的颜色,粗细、线型等)。
支持视图的放大、缩小、复位(即一屏显示所有的数据)等
3.3.3可选要求
可以鼠标选中点,对点进行移动,移动后,点上连着的线要能够联动。
移动点的过程中(即还没有确定最终移动的位置的时候),要有虚线显示点和线移动的效果,移动到最终位置的时候,虚线消失,老的实线根据新坐标重绘。
3.4科研文献管理系统
对科研文献的管理有很多专业工具,大部分需要上网,和word、PDF等进行联动使用。
但是对于个人用户本地积累的论文、书籍、学习笔记等进行整体管理的软件比较少。
本课题考虑研制一个单机版本(不用提供互联网方面的注册、登陆之类的功能)的文献管理系统,对科研文献、书籍、学习笔记等进行有效管理。
假设管理系统安装在c盘下,目录为c:
\NoteManager。
3.4.1基本功能
将物理上在一个文件夹中的文件,用多个逻辑文件夹显示。
文献管理有一个重要的功能就是对论文进行分类管理。
Windows文件夹的管理是物理的,分类起来有时候很纠结。
所有人都有感受:
老爸来学校和我还有寝室兄弟们的合影,应该放在“家庭”文件夹还是“学校”文件夹呢?
或者神经网络解决工作调度问题方面的文章,是放在“智能计算”文件夹还是“应用论文”的文件夹呢?
所以科研文献管理系统考虑将所有的pdf论文均放在一个文件夹,假设为c:
\NoteManager\paper。
在c:
\NoteManager存放一个files.txt文件,记录每个pdf的属性,类似如下数据:
文件名分类1分类2分类3作者1作者2作者3年份页码出版社
1.pdf智能计算综合制图GPS王大刘二张三2013100-103地球科学
2.pdf。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
在文献管理系统中,制作一个导航树,能够根据每个pdf论文的自定义属性,用不同的文件夹显示该文件,如下图:
图33文献管理系统的文件逻辑目录显示效果
如上图所示,无论选择gps、智能计算、还是综合制图,右侧的listctrl中总是会显示1.pdf,而实际上,1.pdf物理上只有一份,存放在c:
\NoteManager\paper。
另外,还需要一个content.txt文件,保存目前的目录。
示意效果如下:
此阶段目标,需要组织论文类对其进行管理,并对其进行分类数据组织;
此阶段目标,需要组织目录类对其进行管理,并对其进行分类数据组织;
需要进行文件操作;
需要制作导航树和列表框;
建议:
1.采用一个dialog对话框来制作
2.文件、目录等数据可以手工录入准备好,不必做功能录入相关数据。
即本阶段要求仅仅能够展示就可以了。
3.这部分考察的主要是MFC界面编程能力,因此主要精力放在界面设计和开发上面。
3.4.2高阶要求1
能够增加pdf文件,并选择文件的分类。
能够删除文件(从某个目录删除或者整体删除)、能够修改文件从属的分类。
能够修改分类的结构,包括新增分类(含子分类)、删除分类、修改分类名称。
界面右边的listctrl,要求显示论文的名称、作者、出版社等信息
建议:
1.本部分考察的内容既包括C++类的设计功底,也考察C++程序和界面如何结合起来的能力。
2.在设计功能的时候,需要详细思考类的设计问题。
另外,还需要考虑程序的逻辑的严谨性。
比如在删除某个分类的时候,该分类的论文怎么处理?
3.4.3高阶要求2
为文件编辑其备注信息,以便选中文件的时候,显示该pdf论文的相关信息,如下图所示:
同时需要能够编辑、修改某个文件的备注信息
建议采用一个edit框,可换行,来处理备注信息。
3.4.4高阶要求3
建立作者信息管理功能,要求能够录入作者、作者相关信息(可以是所属学校、email什么的)
能够在增加论文的功能的设置作者,由前面的输入变为在已有类型中选择
用一个导航树显示作者。
目录可以自己设计,可以根据作者、国际什么的来分类显示。
3.4.5可选要求1
界面功能可以做一点提升,左右的窗口大小可以拖放的方式改变大小和对话框布局;
备注信息和文件列表可以上下拖动
文件列表的listctrl可以排序
3.4.6可选要求2
双击listctrl中的文件,能够打开该pdf文件
可以讲一些类的代码用动态链接库实现
完整设计系统功能,配置必要的toolbar、状态栏、菜单、右键菜单
五、成绩评定及评分标准
指导老师按优秀、良好、中等、及格、不及格五档提交成绩。
成绩构成:
(1)现场出勤、提问、调试、运行结果展示:
50%
(2)程序代码质量:
20%
(3)设计报告:
30%
其他说明:
在实现的过程中可根据自己的实际情况增加软件的实用性。
实用性强的软件可酌情加分。
附件一、课程设计报告格式
课程设计报告封面:
《面向对象程序设计》
课程设计报告
学号:
班级序号:
姓名:
指导老师:
成绩:
中国地质大学(武汉)
信息工程学院信息工程系
20XX年X月
实习题目一(<小二,黑体,居中>)
【需求规格说明】
(<五号,宋体>,具体内容:
题号及题目、问题描述、问题分析。
)
【算法设计】
(1)设计思想:
(<五号,宋体>,具体内容:
主要的算法思想。
)
(2)设计表示:
(<五号,宋体>,具体内容:
子模块(过程或函数)的规格说明、关系图(描述类与类之间的关系图、各功能模块之间的关系图等)。
)
【调试报告】
(<五号,宋体>,具体内容:
问题是如何解决的,改进设想。
)
【附录】
(<五号,宋体>,具体内容:
源程序清单(必须有必要的注释)、测试数据及运行结果。
)
实习题目二
……
总结
(<五号,宋体>,具体内容:
通过本次课程设计,谈谈你的体会和感想以及对本课程设计的意见和建议。
)
附件二、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】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。
不再有用的注释要删除。
【规则31】注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。
【规则32】当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读。
【规则33】修正bug之后,要加上描述修改状况的注释。
(2)文档注释
【规则34】文档注释
文档注释用/**……*/标识,它对代码的使用说明进行描述,每一个文档注释被放进/**……*/分隔符,每一个类、接口、构造函数,方法和成员变量拥有一个注释,这样的注释应该出现在相应的声明前。
例如:
/**
*Example类提供如下的功能...
*/
classExample
{
……
}
类和接口的文档注释(/**)的第一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象课程设计实习指导书下 面向 对象 课程设计 实习 指导书