




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
山东建筑大学信电学院课程设计说明书山东建筑大学课 程 设 计 说 明 书题 目: GPA计算器的设计 课 程: VC+程序设计基础课程设计 院 (部): 专 业: 班 级: 学生姓名: 学 号: 指导教师: 完成日期: II目 录摘要II正文11 设计目的12 设计要求13 设计内容13.1系统分析13.2项目创建23.3界面设计33.4代码实现53.4.1添加菜单控制53.4.2添加分数存储代码63.4.3添加功能函数代码73.4.4添加控件事件代码113.4.5设置界面外观133.5设计结果及使用说明14总结与致谢 17参考文献 18附录 19摘 要GPA英语全称是Grade Point Average,意思就是平均成绩点数(平均分数、平均绩点),美国的GPA满分是4分,即A=4,B=3,C=2, D=1。GPA的精确度往往达到小数点后1到2位,如:3.0、3.45。GPA的计算一般是将每门课程的成绩乘以学分,加起来以后除以总的学分,得出平均分。中国高校的分数设置最常见的为五分制或四分制,具体的折合方式视各个学校规定而有所不同。一般来讲,百分制中的90分以上可视为4分,80分以上为3分,70分以上为2分,60分以上为1分,五分制中的5分为4分,4分为3分,3分为2分,2分为1分。关键词:GPA;VC+;MFC;控件;山东建筑大学信电学院课程设计说明书正 文1 设计目的GPA,意思是成绩点数与学分的加权平均值。GPA对于申请留学而言,是所有硬件条件中最为重要的。我国大学成绩一般是百分制,而在美国90%的学校成绩的计算方法为4分制,我国学生在申请留学美国时,就应将自己原先的成绩转换成要申请学校的GPA。GPA计算器的出现,是为了方便学生进行GPA换算。2 设计要求设计GPA计算器实现以下功能:(1)学生成绩可以由文件导入。(2)获GPA标准可以选择,也可以手动输入。(3) GPA的计算过程易于监督控制。(4) 计算结果的可读性强。3 设计内容3.1系统分析本次设计要求导入成绩文件,还涉及文件的输入输出控制,界面操作相对频繁,所以对对话框的控件的编程有一定的要求。为了使本次设计更加方便,不容易出错误,设计时应注意:使界面人性化,这样可以减少用户的误操作提高程序的健壮性;界面人性化一般要通过屏蔽当前无效的界面和信息来实现的。系统设计通过VC6.0来实现,用到了庞大的MFC库。MFC库支持三种不同应用程序:单文档、多文档和基于对话框。本次课程设计用到的是基于对话框的这种情况。这些应用程序模型为我们提供了统一的编程方法和界面基础。GPA计算器可以简单地分为三个模块,如下图1所示。 3.2项目创建1、在Visual c+中,新建MFC AppWizard(exe),命名为GPACalculator。如图2所示。 图2单文档工程的创建2、在MFC AppWizard第一步中设置应用程序的类型为基本对话模式,然后单击“确定”按钮,应用程序GPACalculator就建立了。如图3和图4所示。图3基本对话框类型选择 图4新建工程信息3.3界面设计打开对话框资源,为各个控件添加ID,进行属性设计;添加完控件后,打开ClassWizard,针对IDD_GPACALCULATOR_DIALOG所指向的类CCPACalculatorDlg,为该类添加成员变量。(1)打开对话框资源IDD_GPACALCULATOR_DIALOG,该对话框是程序运行时的主界面,按要求完成控件的添加。例如,组框的添加及属性设置如图5所示。其它控件包括按钮、静态文本框、编辑框、组合框、列表框等的添加与此类似。控件添加完成后效果图如图6所示。控件列表见附录1。图5 控件属性设置图6 控件添加完成效果图(2)通过类向导为CCPACalculatorDlg类添加成员变量。为所有的控件添加成员变量。例如控件IDC_EDIT_01的成员变量的添加如图7所示。成员变量列表见附录2。图7 控件的成员变量添加举例 3.4代码实现3.4.1添加菜单控制(1)制作菜单资源。在GPACalcularor resources文件夹下建立一个Menu文件。如图8所示。图8 Menu文件的添加为Menu文件添加文件、帮助两个菜单,再为文件添加一个退出菜单,为帮助添加使用使用说明、关于两个菜单。并设置菜单的属性,为其设置ID和标明。菜单资源如下图9所示。菜单项目属性设置如图10所示。图9 菜单资源图10 菜单项目属性设置(2)装载菜单。如图11所示。图11 菜单的装载(3)添加菜单代码通过“建立类向导” ,分别为退出、使用说明、关于菜单添加响应函数,代码如下:void CGPACalculatorDlg:OnMenuitemExit() / TODO: Add your command handler code hereDestroyWindow();void CGPACalculatorDlg:OnMenuitemMan() / TODO: Add your command handler code hereWinExec(notepad.exe EXPLAIN.HEP,SW_SHOW);void CGPACalculatorDlg:OnMenuitemAbout() / TODO: Add your command handler code hereCAboutDlg dlg;dlg.DoModal();3.4.2添加分数存储代码分数是由磁盘文件导入的,在程序中应该有相应的内存存储结构来存储分数,当需要用分数来进行计算等操作时,则从这个存储结构中读出。当磁盘文件内容变化时,则应更新这个存储结构。(1)在类选项卡下,点击CGPACalculatorDlg在其中加入如下结构代码。typedef struct stScoredouble dOPoint; /原始分double dSPoint; /标准分double dNum; /学分stScore;(2)通常在MFC编程中,为了使用集合、数组类,要在StdAfx.h中加入下面语句:#include。在文件选项卡下,双击Header Files - StdAfx.h,在其中加入以下头文件:#include(3)在类选项卡下,双击CGPACalculatorDlg加入私有对象arScore,用作分数存储。代码如下:private: CArrayarScore;3.4.3添加功能函数代码(1)添加GetSDPoint函数。在CGPACalculatorDlg中进行函数的定义:private: double GetSDPoint(double dPoint);在CAboutDlg中添加函数的代码如下: double CGPACalculatorDlg:GetSDPoint(double dPoint)UpdateData();CArray arOPoint;CArray 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=arOPoint0)return arSPoint0;for(int i=0;i=arOPointi)return arSPointi-1;return 0;(2)添加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);(3)添加GatherData函数。这个函数的作用是将分数文件的信息导入到分数存储及结构,当m_sPathName=“”,即无分数文件时,则导入失败。定义如下:void GatherData();代码如下:void CGPACalculatorDlg:GatherData()CString str;stScore temp;if(m_sPathName=)return;arScore.RemoveAll();CFile file(m_sPathName,CFile:modeRead);CArchive ar(&file,CArchive:load);ar.ReadString(str);while(str!=)SpliterString(str,temp.dOPoint,temp.dNum);temp.dSPoint=GetSDPoint(temp.dOPoint);arScore.Add(temp);ar.ReadString(str);(4)添加ChangeType函数。可以实现根据不同的输入值,转变成不同的参比标准。定义如下:void ChangeType(int nType);代码如下:void CGPACalculatorDlg:ChangeType(int nType)switch(nType)case 0:case 4:m_dS1=m_dS2=m_dS3=m_dS4=m_dS5=m_dS6=m_dS7=0;m_dO1=m_dO2=m_dO3=m_dO4=m_dO5=m_dO6=m_dO7=m_dO8=0;break;case 1:m_dS1=4;m_dS2=3;m_dS3=2;m_dS4=1;m_dS5=m_dO6=m_dO7=0;m_dO1=100;m_dO2=90;m_dO3=80;m_dO4=70;m_dO5=60;m_dO6=m_dO7=m_dO8=0;break;case 2:m_dS1=4.3;m_dS2=4;m_dS3=3.7;m_dS4=3.3;m_dS5=3.0;m_dO6=2.7;m_dO7=2.3;m_dO1=100;m_dO2=90;m_dO3=85;m_dO4=80;m_dO5=75;m_dO6=70;m_dO7=65;m_dO8=60;break;case 3:m_dS1=4;m_dS2=3;m_dS3=2;m_dS4=m_dS5=m_dO6=m_dO7=0;m_dO1=100;m_dO2=85;m_dO3=70;m_dO4=60;m_dO5=m_dO6=m_dO7=m_dO8=0;break;(5)添加SetEditRead函数。输入为真时,参比标准的编辑框将被设为只读模式,而输入为假时,参比标准的编辑框将被设为可写模式。定义如下:void SetEditRead(bool bReadOnly);代码如下:void CGPACalculatorDlg:SetEditRead(bool bReadOnly)(CEdit *)GetDlgItem(IDC_EDIT_S1)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_S2)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_S3)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_S4)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_S5)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_S6)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_S7)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_O1)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_O2)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_O3)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_O4)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_O5)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_O6)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_O7)-SetReadOnly(bReadOnly);(CEdit *)GetDlgItem(IDC_EDIT_O8)-SetReadOnly(bReadOnly);3.4.4添加控件事件代码(1)组合框。通过组合框(IDC_COMBO_STANDARD)可以选择不同的参比标准,相应的编辑框会随着组合框的选择不同而随之改变。添加的处理函数如下:void CGPACalculatorDlg:OnSelchangeComboStandard() / TODO: Add your control notification handler code hereint nIndex=m_cmbStandard.GetCurSel();if(4=nIndex)SetEditRead(false);elseSetEditRead(true);ChangeType(nIndex);UpdateData(false);(2)浏览按钮。单击该按钮可以弹出打开对话框以供选择打开磁盘上的分数文件。添加的处理函数如下:void CGPACalculatorDlg:OnButtonOpen() CFileDialog fdlg(true, NULL, NULL, OFN_OVERWRITEPROMPT, 成绩文件|*.dat;*.txt|, NULL);if(fdlg.DoModal()=IDOK)m_sPathName=fdlg.GetPathName();UpdateData(false);/ TODO: Add your control notification handler code here(3)统计按钮。单击该按钮计算各项参数值,并可以把分数显示在列表框。添加的处理函数如下:void CGPACalculatorDlg:OnButtonOk() double dGPAall=0;double dAvgall=0;GatherData();int i=0;int size=arScore.GetSize();if(size=0)return;m_ListScore.ResetContent();m_ListScore.AddString(序号 成绩 学分 标准);m_ListScore.AddString(-);m_dTotal=0;while(iGetDlgCtrlID()case IDC_EDIT_S1:case IDC_EDIT_S2:case IDC_EDIT_S3:case IDC_EDIT_S4:case IDC_EDIT_S5:case IDC_EDIT_S6:case IDC_EDIT_S7:case IDC_EDIT_O1:case IDC_EDIT_O2:case IDC_EDIT_O3:case IDC_EDIT_O4:case IDC_EDIT_O5:case IDC_EDIT_O6:case IDC_EDIT_O7:case IDC_EDIT_O8:pDC-SetBkColor(RGB(255,255,255);pDC-SetTextColor(RGB(0,0,255);break;case IDC_LIST_SCORE:pDC-SetBkColor(RGB(255,255,255);pDC-SetTextColor(RGB(0,0,255);break;case IDC_EDIT_AVERAGE:case IDC_EDIT_GPA:case IDC_EDIT_TOTAL:pDC-SetBkColor(RGB(255,255,255);pDC-SetTextColor(RGB(255,0,255);/ TODO: Return a different brush if the default is not desiredreturn hbr;3.5设计结果及使用说明(1) GPA计算器对要计算的分数和学分采用文件的形式输入。在计算前把要计算的所有成绩和学分按照下面的格式存放在一个文本文件中:spaces课程成绩学分数spaces(2) GPA计算器提供了几种GPA参考分数标准,可通过下拉列表选择。若程序中提供的标准不能满足需要的话,可选择“用户自定义”,自行定义所需的标准。(3) 选好分数文件和参比标准后,单击【统计】按钮即可求出相应的加权平均分、GPA及总学分等。程序会现实分数文件中的分数,可据此核对计算结果是否正确。程序运行结果如图12、13、14、15所示。图12 无参比标准GPA计算器运行结果图13 4.0标准算法下GPA计算器运行结果图14 4.3标准算法下GPA计算器运行结果图15 用户自定义下GPA计算器运行结果总结与致谢本次课程设计设计了一个GPA计算器,能够用它来简单地计算GPA成绩,加权平均分等。实验结构可读性强,设计简单,操作方便,基本上完成了实验任务:即学生成绩可以由文件导入,获GPA标准可以选择,也可以手动输入, GPA的计算过程易于监督控制,计算结果的可读性强,达到了本次课程设计的要求。这次课程设计让我学到了很多,不仅是巩固了先前学的MFC程序设计知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展。当然,在这次课程设计中,我看到了自己的不足之处,也说明了我们在往日的学习中学得不扎实,只有更好地学习,逐步提高理论知识,才能更好地实践,在资料的查询过程中我也学到了很多的东西,极大地拓宽了我的知识面,也提高了我的综合素质。在设计的过程和设计说明书的撰写过程中,老师给予了我热心的帮助和大力的支持,给我提了诸多的宝贵意见,拓宽了我的思路。在此我向老师致以崇高的敬意和衷心的感谢!参考文献1张宏军、党留群、赵天巨Visual C+ 6.0编程案例精解北京:电子工业出版社,20052 张建宏,汤练兵,马德骏.计算机程序设计基础-C语言程序设计,科学出版社,20063 陈维兴、陈昕、林小茶.C+面向对象程序设计习题解答与实验指导.清华大学出版社,20054 陈维兴、林小茶,C+面向对象程序设计教程.清华大学出版社5 陈清华.Visual C+课程设计案例精选与编程指导.东南大学出版社,20046 刘振安、刘燕君、孙忱.C+语言课程设计.机械工业出版社,20077严华峰. Visual C+课程设计案例精编. 北京:中国水利水电出版社,20028 郑阿奇、丁有和Visual C+教程北京:机械工业出版社,20069 谭浩强.C语言程序设计.清华大学出版社,200010 揣锦华.面向对象程序设计与VC+实践.西安电子科技大学出版社,2005附录附录1 IDD_GPACALCULATOR_DIALOG视图中的主要控件控件类型ID属性设置ButtonIDC_BUTTON_OPENCaption设为浏览ButtonIDC_BUTTON_OKCaption设为统计Static Text默认Caption设为参比标准Static Text默认Caption设为标准分Static Text默认Caption设为原始分Static Text默认Caption设为统计信息Static Text默认Caption设为分数列表Static Text默认Caption设为参比标准Static Text默认Caption设为加权平均分Static Text默认Caption设为GPAStatic Text默认Caption设为总学分Edit BoxIDC_EDIT_PATHNAME默认Edit BoxIDC_EDIT_S1ReadOnlyEdit BoxIDC_EDIT_S2ReadOnlyEdit BoxIDC_EDIT_S3ReadOnlyEdit BoxIDC_EDIT_S4ReadOnlyEdit BoxIDC_EDIT_S5ReadOnlyEdit BoxIDC_EDIT_S6ReadOnlyEdit BoxIDC_EDIT_S7ReadOnlyEdit BoxIDC_EDIT_O1Read
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 拱桥耐久性与维护策略-洞察及研究
- 旅游品牌竞争与区域经济发展-洞察及研究
- 精密仪器多参量传感器集成-洞察及研究
- 时空图数据建模与预测-洞察及研究
- 精益生产实施策略优化-洞察及研究
- 语言理解中的概念隐喻-洞察及研究
- 血管瘤并发症的预防教育-洞察及研究
- 版权管理对行业可持续发展-洞察及研究
- 地下河系地质构造解析-洞察及研究
- 火星土壤样本分析-洞察及研究
- 2025贵州黔西南州普安县县直单位、街道考调事业单位工作人员47人考试参考题库及答案解析
- 2025年辽宁沈阳市近海控股集团招聘24人笔试参考题库附带答案详解
- 拼多多公司技能培训
- 写作技巧:三十六种故事创作套路
- 2025-2026学年教科版(2024)小学体育与健康二年级全一册《饮水促健康》教学设计
- 卵巢囊肿教学查房课件
- 挖机挖方合同协议书模板
- 福建省2025-2026学年福州市高三年级第一次质量检测英语
- 道字的演变课件
- 教案2025秋形势与政策纪念抗战胜利坚定民族信念抗战胜利80周年
- 阀门安装施工组织方案(3篇)
评论
0/150
提交评论