VC++程序设计说明书---计算器
- 格式:doc
- 大小:964.50 KB
- 文档页数:25
目录目录 (I)摘要 (II)1 设计目的 (1)2 设计要求 (2)3 设计内容 (3)3.1 系统分析 (3)3.2项目创建 (3)3.3界面设计 (5)3.4 代码实现 (8)3.5 方案分析总结 (17)总结与致谢 (20)参考文献 (21)附件 (22)摘要GPA英语全称是grade point average,意思就是平均分。
GPA的精确度往往达到小数点后1到2位,如:3.0,3.45。
GPA的标准计算方法是将大学成绩的加权平均数乘以4,再除以100,得出平均分。
美国的GPA满分是4分,即A=4,B=3,C=2,D=1。
一般来讲,百分制中的90分以上可视为4分,80分以上为3分,70分以上为2分,60分以上为1分,五分制中的5分为4分,4分为3分,3分为2分,2分为1分。
这次课程设计完成了一个简单的GPA计算器。
本次设计系统具有良好的界面,必要的交互信息和较好的健壮性,使我们能快捷简单地进行操作,即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
关键词:GPA;VC++6.0;MFC;控件;1 设计目的《VC程序设计++》是一门实践性、应用性很强的科目。
实践教学环节是必不可少的一个重要环节。
VC程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握VC程序设计的基本技能和面向对象的概念和方法;了解菜单、视图/文档、数据库等编程技术。
同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
2 设计要求GPA计算器的出现,是为了方便学生进行GPA换算。
功能要求有以下几点:(1)学生成绩可以由文件导入。
(2)获GPA标准可以选择,也可以手动输入(3)GPA的计算过程易于监督控制(4)计算结果的可读性强3 设计内容3.1 系统分析本次设计要求导入成绩文件,还涉及文件的输入输出控制,界面操作相对频繁,所以对对话框的控件的编程有一定的要求。
为了使本次设计更加方便,不容易出错误,设计时应注意:使界面人性化,这样可以减少用户的误操作提高程序的健壮性;界面人性化一般要通过屏蔽当前无效的界面和信息来实现的。
系统设计通过VC6.0来实现,用到了庞大的MFC库。
MFC库支持三种不同应用程序:单文档、多文档和基于对话框。
本次课程设计用到的是基于对话框的这种情况。
这些应用程序模型为我们提供了统一的编程方法和界面基础。
GPA计算器可以简单地分为三个模块,如下图1.1所示。
图1.1 GPA模块设置3.2项目创建(1)在Visual c++中,新建MFC AppWizard(exe)单文档工程,命名为GPACalculator。
(2)在MFC AppWizard第一步中设置应用程序的类型为基本对话模式,然后单击“确定”按钮,应用程序GPACalculator就建立了。
图1.2 基本对话模式工程的建立图1.3 新建工程信息3.3界面设计打开对话框资源,为各个控件添加ID,进行属性设计;添加完控件后,打开ClassWizard,针对IDD_GPACALCULATOR_DIALOG所指向的类CCPACalculatorDlg,为该类添加成员变量。
(1)打开对话框资源IDD_GPACALCULATOR_DIALOG,该对话框是程序运行时的主界面,按要求完成控件的添加。
例如,组框的添加。
首先,点击控件工具条上的‘组框’按钮,在对话框上画出组框,并适当地调整其大小。
然后右键单击组框,选择‘属性’,ID保持默认,标题改为‘第一步:载入分数文件’,关闭对话框。
这样,组框控件添加完成。
如下图 1.3、1.4所示。
按照这样的步骤,完成所有控件的添加。
其中包括按钮、静态文本框、编辑框、组合框、列表框等。
控件添加完成后效果图如图1.6所示。
控件列表见附录1。
图1.4 控件属性设置 图1.5 控件添加完成示意图(2)通过类向导为CCPACalculatorDlg 类添加成员变量。
单击菜单栏的‘查看’中的‘建立类向导’,打开‘MFC ClassWizard ’对话框。
然后,选择‘Member Variables ’选项,选择要添加成员变量的类,再选择要添加成员变量的控制ID ,单击‘添加变量’按钮,输入变量名,选择变量类型,单击确定即可。
然后按照同样的方法为所有的控件添加成员变量。
控件IDC_EDIT_PATHNAME 的成员变量的添加如下图1.7所示。
成员变量列表见附录2。
图1.6 控件添加完成效果图3.4 代码实现(1)添加菜单控制①制作菜单资源。
右键单击‘资源’选项卡上的最顶层文件夹‘GPACalcularor resources ’,选择‘插入’->‘菜单’,单击‘新建’按钮。
这样,就在‘GPACalcularor resources ’文件夹下建立了一个‘Menu ’文件下,内含有一个‘IDR_MAIN_MENU ’资源。
双击‘IDR_MAIN_MENU ’上的虚线框,为其添加文件、帮助两个菜单,再为文件添加一个‘退出’菜单,为帮助添加使用‘说明’、‘关于’两个菜单。
并设置菜单的属性,为其设置ID 和表明。
分别如下:退出‘ID_MENU_ITEM_EXIT ’、关于‘ID_MENU_ITEM_ABOUT ’、使用说明‘ID_MENU_ITEM_MAN ’。
菜单资源如下图1.8所示。
②装载菜单。
选中对话框资源‘IDD_GPACALCULATOR_DIALOG ’,在对话框上右击,从弹出的快捷菜单中选择‘属性’命令,然后弹出属性对话框。
在属性对话框中选择相应的菜单资源。
如下图1.9所示。
图1.7 控件的成员变量添加举例山东建筑大学信电学院课程设计说明书③编写菜单代码。
使用类向导为菜单添加响应函数。
打开类向导,选中退出菜单项的ID ‘ID_MENUITEM_EXIT ’,单击右边‘Message ’框下面的COMMAND ,单击‘Add Function ’为退出菜单添加响应函数。
然后,点击‘Edit Code ’在跳转处添加下面代码:void CGPACalculatorDlg::OnMenuitemExit() { // TODO: Add your command handler code hereDestroyWindow();按同样的步骤为使用说明和关于菜单添加程序代码如下: void CGPACalculatorDlg::OnMenuitemMan() {// TODO: Add your command handler code here图1.8 菜单资源图1.9 装载菜单山东建筑大学信电学院课程设计说明书WinExec("notepad.exe EXPLAIN.HEP",SW_SHOW);}void CGPACalculatorDlg::OnMenuitemAbout(){// TODO: Add your command handler code hereCAboutDlg dlg;dlg.DoModal();}(2)分数存储结构。
分数是由磁盘文件导入的,在程序中应该有相应的内存存储结构来存储分数,当需要用分数来进行计算等操作时,则从这个存储结构中读出。
当磁盘文件内容变化时,则应更新这个存储结构。
①在类选项卡下,点击‘CGPACalculatorDlg’在其中加入如下结构代码。
typedef struct stScore{double dOPoint; //原始分double dSPoint; //标准分double dNum; //学分}stScore;②在文件选项卡下,双击‘Header Files -> StdAfx.h’,在其中加入以下头文件:#include<afxtempl.h>③在类选项卡下,双击‘CGPACalculatorDlg’加入私有对象‘arScore’,用作分数存储。
代码如下:private:CArray<stScore,stScore&>arScore;(3)功能函数①添加GetSDPoint函数。
在‘CGPACalculatorDlg’中进行函数的定义:private:double GetSDPoint(double dPoint);在‘CAbourDlg’中添加函数的代码如下:double CGPACalculatorDlg::GetSDPoint(double dPoint){UpdateData();CArray<double,double&> arOPoint;山东建筑大学信电学院课程设计说明书CArray<double,double&> arSPoint;arOPoint.Add(m_dO1);arOPoint.Add(m_dO2);arOPoint.Add(m_dO3);arOPoint.Add(m_dO4);arOPoint.Add(m_dO5);arOPoint.Add(m_dO6);arOPoint.Add(m_dO7);arOPoint.Add(m_dO8);arSPoint.Add(m_dS1);arSPoint.Add(m_dS2);arSPoint.Add(m_dS3);arSPoint.Add(m_dS4);arSPoint.Add(m_dS5);arSPoint.Add(m_dS6);arSPoint.Add(m_dS7);if(dPoint>=arOPoint[0])return arSPoint[0];for(int i=0;i<arOPoint.GetSize();i++){if(dPoint>=arOPoint[i])return arSPoint[i-1];}return 0;}②添加SpliterString函数。
分散文件是以‘原始分学分’的方式给出的,需要一个功能函数来将这个字符串拆分成两个double型的原始分和学分。
函数定义如下:void SpliterString(CString str,double &a,double &b);函数代码如下:void CGPACalculatorDlg::SpliterString(CString str, double &a, double &b){CString strOne,strTwo;int ifind;str.TrimLeft(' ');str.TrimRight(' ');ifind=str.Find(' ');strOne=str.Left(ifind);山东建筑大学信电学院课程设计说明书strTwo=str.Right(str.GetLength()-ifind-1);a=atof(LPCTSTR(strOne));b=atof(LPCTSTR(strTwo));}③GatherData的添加。