1、高级语言(VC+ )课程设计指导书- 1 -一、课程设计目的1、 使学生对所学理论知识进行一次综合性复习;2、 培养学生对实际问题的分析能力; 3、 培养学生独立编程、开发软件的动手能力;4、 培养学生开放思维的创新能力;5、 培养学生熟练掌握 VC+调试技能;6、 培养学生规范的编程习惯;7、 培养学生团队协作精神;8、 培养学生撰写课程设计报告的能力;9、 认识 MFC 开发环境。(附加)二、课程设计要求为了能更好地达到课程设计的目的,要求学生:1、每次上机前充分做好准备工作,查阅资料,预习相关内容,对课程设计内容进行方案的预设计,编制出源程序代码。2、充分利用上机时间完成源程序代码的输入
2、、调试及优化。3、程序代码的编制应按照 C+编码规范的要求进行,具体可参考指导书中【附件一】 “C+编码规范” 。4、课程设计结束后,按照指导书中【附件二】 “课程设计报告格式”的要求撰写出课程设计中期设计报告(要求用 A4 纸打印) 。5、按题目要求独立完成课程设计,不旷课、不迟到、不早退、遵守机房规定、爱护机房设备。三、课程设计内容和时间分配1、课程设计内容分为两个部分:(1)课程设计基本练习题目:A 组(完成一题) 、B 组(完成一题) 、C 组(完成两题) ;(2)课程设计中期设计题目:共 1 题;2、实习中,建议每天完成一道题目。在课程设计中,同学们可以根据自己的实际情况,时间上酌情
3、调整。3、课程设计题目完成的数量要求:(1)课程设计基本练习题目(一级)A 组、B 组、C 组,每组任选一题,共三题;(2)课程序设计基本练习题目(二级)A 组、B 组,每组任选一题,共两题;(3)课程设计综合练习题目至少选做一题,多做者可酌情加分。4、课程设计的成绩与题目完成的数量、质量、创新程度、回答提问、课程设计中期设计报高级语言(VC+ )课程设计指导书- 2 -告以及平时表现等有关,具体请看指导书“成绩评定及评分标准” 。四、课程设计题目I、课程设计基本练习题目(18 分4)【A 组】请从以下 1-3 题中任意选做一题1、输出 1 至 100 之间每位数的乘积大于每位数的和的数,例如
4、对于数字 12,有 1*22+7,故输出该数。2、编写一个程序,求出所有的“水仙花数” 。所谓水仙花数,是指一个三位数,其各位数字的立方和恰好等于该数本身。例如 153=1*1*1+5*5*5+3*3*3,所以 153 是水仙花数。3、求任意 n 个数中的最大数和最小数:先输入一个正整数 n(个数) ,而后再输入任意 n 个实数,找出这 n 个数中的最大数及最小数并显示出来。【B 组 】请从以下 4-6 题中任意选做一题4、对两个有序数组进行合并:设有如下数组 A、B,并假设两个数组的元素都已经有序(从大到小降序排列) 。编程序,合并 A、B 数组形成一个新的数组 C,并使 C 的元素仍有序(
5、从大到小降序排列) 。int A10=123,88,86,86,33,15,7,0,-1,-3;int B10=86,69,51,50,27,19,15,12,5,2;5、统计若干行(字符串)中的关键字各出现了多少次:从键盘输入 n 个字符串(每串为一行最多 80 个字符,且输入时以回车结束每一行) ,先存放在一个二维字符数组中。而后统计全体行中如下 10 个 C+关键字各自出现的次数,并将结果显示在屏幕上。要统计的关键字有:int, float,double,if,else ,for,while,do,case,break 。6、计算两个日期之间的间隔天数:从键盘输入两个日期(如以 year
6、1,month1,day1 以及year2, month2,day2 的方式来输入它们) ,而后计算出这两个日期的间隔天数并在屏幕上显示出结果。要求编制具有如下原型的函数 difs2Date:long difs2Date(int y1,int m1,int d1,int y2,int m2,int d2) ;它负责计算出两个日期的间隔天数并返回,要求将该函数的代码存放到一个叫做“difs2Date.h”的头文件中,而在 main 函数的主文件中通过 include 编译预处理命令将该头文件的内容包含进来,并在 main 主函数中通过调用 difs2Date 函数来实现所需的计算。【C 组】请从
7、以下 7-10 题中任意选做 2 题7、编写一个程序计算两个给定长方形的面积,其中在设计类成员函数 addarea()(用于计算两个长方形的总面积)时使用对象作为参数。8、以面向对象的概念设计一个类,此类包含 3 个私有数据:unlead(无铅汽油) 、lead(有铅高级语言(VC+ )课程设计指导书- 3 -汽油)以及 total(当天总收入) 。无铅汽油的价格是 17 元/公升,有铅汽油的价格是 16 元/公升。请以构造函数方式建立此值。试输入某天所加的汽油量,本程序将列出加油站当天的总收入。9、设计一个时间类 Time,包括 3 个数据成员,时(h) 、分(m) 、秒(s) ,另外包括存
8、取各数据成员和设置时间的成员函数,按上、下午各 12 小时或按 24 小时输出时间的成员函数,以及默认构造函数,默认时间值为 0 时 0 分 0 秒。10、编写一个程序,输入 3 个学生的英语和计算机成绩,并按总分从高到低排序(要求设计一个学生类 Student) 。II、课程设计中期设计题目(28 分1)11. 求解一元二次方程。一元二次方程的定义为:ax2+bx+c=0(1)如果 b2 -4ac0,方程有两个不同的实根,分别是:(2)如果 b2 -4ac 格式来引用标准库的头文件(编译器将从标准库目录开始搜索) 。【规则 4】用 #include “filename.h” 格式来引用非标准
9、库的头文件(编译器将从用户的工作目录开始搜索) 。【建议 1】头文件中只存放“声明”而不存放“定义”在 C+语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数,如果从提高性能角度考虑是可取。除此之外的选择,建议将成员函数的定义与声明分开,不论该函数体有多么小。【建议 2】不提倡使用全局变量,尽量不要在 头文件中出现 象 extern int value 这类声明。C、头文件的作用 通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的,编译器会从库中提取相应的
10、代码。 头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。高级语言(VC+ )课程设计指导书- 7 -2、命名规则比较著名的命名规则当推 Microsoft 公司的“匈牙利” 法,该命名规则的主要思想是 “在变量和函数名中加入前缀以增进人们对程序的理解”。例如所有的字符变量均以 ch 为前缀,若是指针变量则追加前缀 p,如果一个变量由 ppch 开头,则表明它是指向字符指针的指针。在程序体中应基本遵循匈牙利命名规则。(1) 总则【规则 6】标识符应当直观且可以拼读,可望文知意,不必进行“解码
11、”。标识符应该采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名。【规则 7】标识符长度应当尽量符合“min-length / 变量 x 与 X 容易混淆void foo(int x); / 函数 foo 与 FOO 容易混淆void FOO(float x);【规则 9】命名规则尽量与所采用的操作系统或开发工具的风格保持一致。例如 Windows 应用程序的标识符通常采用 “大小写”混排的方式,如 AddChild。而 Unix 应用程序的标识符通常采用“小写加下划线”的方式,如 add_child。别把这两类风格混在一起用。【建议 3】尽量避免名字中出现数字编号,如 Var1,V
12、ar2 等,除非逻辑上的确需要编号。【建议 4】尽量使用公认的无异义的缩写, 缩写一般不超过 4 个字母。例如:HTML Hypertext Markup LanguageURL Uniform Resource Locatorcmd commandinit initialize【规则 10】程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解。【规则 11】变量的名字应当使用“名词”或者“形容词名词”。例如: float value;float oldValue;float newValue;【规则 12】函数的名字应当使用“动词”或者“动词
13、名词” (动宾词组) 。类的成员函数省掉表示对象本身的“名词” 。高级语言(VC+ )课程设计指导书- 8 -例如:DrawBox(); / 全局函数box-Draw(); / 类的成员函数【规则 13】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。例如:int minValue;int maxValue;int SetValue();int GetValue();(2) 文件【规则 14】通用文件命名规则 类的声明文件(.h)和实现文件(.cpp):类名.h 类名.cpp 常量定义文件:项目名称缩写(大写)+_Const.h 例:DI_Const.h 全局变量、函数声明文件:项目
14、名称缩写(大写)+_GlobalDef.h 例:DI_GlobalDef.h 错误代码定义文件:项目名称缩写(大写)+_ErrorDef.h 例:DI_ErrorDef.h(3) 变量【规则 15】变量名由范围前缀+类型前缀+限定词组成。【规则 16】变量和参数用小写字母开头的单词组合而成。例如:BOOL flag;int drawMode;【规则 17】变量的范围前缀 全局变量加上 g_(表示 global)例如:int g_howManyPeople; / 全局变量int g_howMuchMoney; / 全局变量 静态变量加上 s_例如:void Init()static int s_
15、initValue; / 静态变量高级语言(VC+ )课程设计指导书- 9 - 局部变量范围前缀为空【规则 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 lpnSysDoom
16、Type文件指针 fp m_fpFile结构体 st stMyStruct【规则 19】方法参数名使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字。例如:void setTopic (String strTopic)this.strTopic = strTopic;.【建议 5】循环变量可以用 i,j,k 做循环变量,用 p,q 做位移变量。【规则 20】常量名全用大写,用下划线分割单词高级语言(VC+ )课程设计指导书- 10 -例如:const int MAX = 100;const int MAX_LENGTH = 100;(4) 自定义类型【规则 21】类名必须由大写字
17、母开头的单词或缩写组成,只用英文字母,禁用数字、下划线等符号。【规则 22】typedef 定义的类型利用 typedef 创建类型名为以“S”加单词或缩写组成,只用英文字母。【规则 23】枚举类型枚举类型名以“E”加单词或缩写组成,只用英文字母。枚举类型的成员遵循常量命名约定,使用大写字母和下划线,名称要有含义。【规则 24】结构(struct)和联合( union)结构(struct)和联合(union)名同类名。(5) 函数【规则 25】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。【规则 26】函数的名字应当使用“动词”或者“动词名词”(动宾词组) 。【规则 27】类方法名
18、必须用一个小写字母的动词开头,后面的单词用大写字母。例如: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/hide3、注释(1) 总则【规则 28】程序可以有两种注释:代
19、码注释(implementation comments)和文档注释(documentation comments) 。代码注释主要删除注释(注释掉目前不需要的代码)和说明注释(对代码进行说明) ,文档注释是指专门用来形成文档用的注释。【规则 29】注释是 Why 而不是 What。程序中的注释不可喧宾夺主,注释的花样要少。【规则 30】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。【规则 31】注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。【规则 32】当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅
20、读。【规则 33】修正 bug 之后,要加上描述修改状况的注释。高级语言(VC+ )课程设计指导书- 11 -(2) 文档注释【规则 34】文档注释文档注释用/*/标识,它对代码的使用说明进行描述,每一个文档注释被放进 /*/分隔符,每一个类、接口、构造函数,方法和成员变量拥有一个注释,这样的注释应该出现在相应的声明前。 例如:/* Example 类提供如下的功能 .*/class Example 类和接口的文档注释(/*)的第一行不应该缩进,以后的文档注释每行都应有一个空格的缩进(给垂直排列的星号) 。成员函数(包括构造函数) ,第一行文档注释前有一个 Tab 缩进,后续的行有一个 Tab
21、 外加一个空格的缩进。对于那些不适于文档注释的类、接口、变量、方法的信息,用代码注释进行说明,而不应该在类的文档注释中。 文档注释不应该放在方法或构造函数的定义体内。(3) 源程序文件【规则 35】源程序文件文档注释每个源程序文件的开头都需要文档注释(参见例 1) ,主要内容有: 版权声明:版权声明内容为 Copyright Beijing China Tech international Software, Inc. All Rights Reserved.。 文件名称:本文件的名称。 开发者姓名:填写最初编写此代码的人。 创建日期:本文件的创建日期。 功能目的:简要描述本文件中代码的功能。
22、 修改历史(修改日期、修改人、修改编号、修改内容) 。其中修改历史可以多次出现,任何对本文件的修改必须增加一条修改历史。(4)类【规则 36】类注释每个类的必须有文档注释,其中至少要包括:功能、版本、最后修改时间、作者、修改历史(修改日期、修改人、修改编号、修改内容)等,其中修改历史可以多次出现,任何对本类的修改必须增加一条修改历史,此外可以根据需要添加其它相关信息或链接。类注释必须在类的声明之前。 高级语言(VC+ )课程设计指导书- 12 -例 例如:/* 类 String 封装了有关字符串的操作,这些操作包括* 单个字符定位、串比较、查找、提取子串、大写/小写转换等* * author
23、Lee Boynton* author Arthur van Hoff* version 1.130, 02/09/01*/class String(5) 函数【规则 37】函数注释所有函数(包括类自定义类型的成员函数)必须有文档注释。注释在其定义之前,按如下方式书写:/* 判断一字符串是否为数字 * * param sNum 字符串* return true=是数字 false=不是数字*/boolean isNumber(String sNum) .【规则 38】构造函数注释要标明此函数为构造函数。如果有多个构造函数,用递增的方式书写,参数多的写在后面,如有多组构造函数,每组分别用递增的方
24、式写,并且每一个都要有详细的注释。(6) 变量【规则 39】变量的注释变量注释出现在变量声明或自定义数据类型成员声明的前一行,用以描述对应变量的作用和含义,变量注释一般占一行。下列变量必须有注释: 自定义类型的成员 全局变量 其它重要的局部变量注释必须按如下方式书写:高级语言(VC+ )课程设计指导书- 13 -/* 包计数器*/int iPackets;(7) 语句【建议 7】代码注释风格代码注释用/*.*/和/标识。程序可以有四种风格的代码注释:块注释、单行注释、后缘注释(trailing) 、行尾注释( end-of-line) 。块注释。块注释常用来提供文件、方法、数据结构、算法的说明
25、。块注释可以被用在每个文件的开头和每个方法的起始,它们也可以被用在其他地方,比如在方法内部等。块注释在函数或方法的内部应该和它们描述的代码具有同样的缩进格式。块注释之前应该有一个空行。单行注释。短的注释可以出现在单行,和它后面的代码使用同样的缩进。单行注释前应该有一个空行。后缘注释(trailing )和行尾注释( end-of-line) 。非常短的注释可以出现在和它说明的代码的同一行中,但应该和被说明的代码相隔足够远。如果在一个代码块中出现了多于一个的短注释,它们应该有相同的缩进。【规则 40】语句块结束注释 函数定义的结束必须加如下内容的注释: /end of 函数名。若程序文件中能够明
26、确指出函数结束的不需加此注释。 对于包含代码行较多的条件语句,每个条件处理语句块的结束必须加如下内容的注释:/end of 此语句块的条件。 对于包含代码行较多的循环语句,循环语句块的结束必须如下内容的注释:/end of 循环条件。4、程序的版式(1) 空白符A、空行【规则 41】在每个类声明之后、每个函数定义结束之后都要加空行。【规则 42】在一个函数体内,逻辑上密切相关的语句之间不加空行,其它地方应加空行分隔。B、空格【规则 43】在 if、for、while 等关键字之后应留一个空格再跟左括号(,以突出关键字。【规则 44】函数名之后不要留空格,紧跟左括号(,以与关键字区别。【规则 4
27、5】 ,、 ;向前紧跟,紧跟处不留空格。高级语言(VC+ )课程设计指导书- 14 -【规则 46】 ,之后要留空格,如 Function(x, y, z)。如果;不是一行的结束符号,其后要留空格,如 for (initialization; condition; update)。【规则 47】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、 “+=”“=”、 “”前后不加空格。C、对齐【规则 50】相互匹配的和应独占一行并且位于同一列,同时与引用它们的语句左对齐。【规则 51】 之内的代码块在新行右边一个 Tab 处左对齐。(2)表达式A、运算符的优先级【建议 8】建议
28、对于除+,*等优先级非常明显的运算符之外,全部使用括号确定表达式的操作 顺序。B、复合表达式【规则 52】不要有多用途的复合表达式。C、逻辑表达式 布尔变量与零值比较【规则 53】布尔变量与零值比较不可将布尔变量直接与 TRUE、FALSE 或者 1、0 进行比较。应写为:bool bFlag;if (bFlag) / 表示 flag 为真if (!bFlag) / 表示 flag 为假其它的用法都属于不良风格,例如:if (flag = TRUE)if (flag = 1 )if (flag = FALSE) if (flag = 0) 整型变量与零值比较【规则 54】应当将整型变量用“=”
29、或“!=”直接与 0 比较。假设整型变量的名字为 value,它与零值比较的标准 if 语句如下:if (value = 0) if (value != 0)不可模仿布尔变量的风格而写成:高级语言(VC+ )课程设计指导书- 15 -if (value) / 会让人误解 value 是布尔变量if (!value) 浮点变量与零值比较【规则 55】不可将浮点变量用“=”或“!=”与任何数字比较。千万要留意,无论是 float 还是 double 类型的变量,都有精度限制。所以一定要避免将浮点变量用“=” 或“ !=”与数字比较,应该设法转化成“=”或“=-EPSINON) & (x)【需求规格说明】( ,具体内容:题号及题目、问题描述、问题分析。 )【算法设计】(1)设计思想:( ,具体内容:主要的算法思想。 )(2)设计表示:( ,具体内容:子模块(过程或函数)的规格说明、关系图(描述类与类之间的关系图、各功能模块之间的关系图等) 。 )【调试报告】( ,具体内容:问题是如何解决的,改进设想。 )【附录】( ,具体内容:源程序清单(必须有必要的注释) 、测试数据及运行结果。 )实习题目二总 结( ,具体内容:通过本次课程设计,谈谈你的体会和感想以及对本课程设计的意见和建议。 )