VC++课程设计GPA计算器的设计.docx

上传人:b****7 文档编号:25810224 上传时间:2023-06-15 格式:DOCX 页数:27 大小:374.45KB
下载 相关 举报
VC++课程设计GPA计算器的设计.docx_第1页
第1页 / 共27页
VC++课程设计GPA计算器的设计.docx_第2页
第2页 / 共27页
VC++课程设计GPA计算器的设计.docx_第3页
第3页 / 共27页
VC++课程设计GPA计算器的设计.docx_第4页
第4页 / 共27页
VC++课程设计GPA计算器的设计.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

VC++课程设计GPA计算器的设计.docx

《VC++课程设计GPA计算器的设计.docx》由会员分享,可在线阅读,更多相关《VC++课程设计GPA计算器的设计.docx(27页珍藏版)》请在冰豆网上搜索。

VC++课程设计GPA计算器的设计.docx

VC++课程设计GPA计算器的设计

 

课程设计说明书

 

题目:

GPA计算器的设计

课程:

VC++程序设计基础课程设计

院(部):

专业:

班级:

学生姓名:

学号:

指导教师:

完成日期:

 

摘要········································································································

正文·········································································································1

1设计目的································································································1

2设计要求································································································1

3设计内容································································································1

3.1系统分析·····························································································1

3.2项目创建·····························································································2

3.3界面设计·····························································································3

3.4代码实现·····························································································5

3.4.1添加菜单控制···················································································5

3.4.2添加分数存储代码·············································································6

3.4.3添加功能函数代码·············································································7

3.4.4添加控件事件代码············································································11

3.4.5设置界面外观··················································································13

3.5设计结果及使用说明·············································································14

总结与致谢·····························································································17

参考文献································································································18

附录······································································································19

摘要

GPA英语全称是GradePointAverage,意思就是平均成绩点数(平均分数、平均绩点),美国的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、在Visualc++中,新建MFCAppWizard(exe),命名为GPACalculator。

如图2所示。

图2单文档工程的创建

2、在MFCAppWizard第一步中设置应用程序的类型为基本对话模式,然后单击“确定”按钮,应用程序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)制作菜单资源。

在‘GPACalcularorresources’文件夹下建立一个‘Menu’文件。

如图8所示。

图8Menu文件的添加

为Menu文件添加文件、帮助两个菜单,再为文件添加一个‘退出’菜单,为帮助添加使用‘使用说明’、‘关于’两个菜单。

并设置菜单的属性,为其设置ID和标明。

菜单资源如下图9所示。

菜单项目属性设置如图10所示。

图9菜单资源

图10菜单项目属性设置

(2)装载菜单。

如图11所示。

图11菜单的装载

(3)添加菜单代码

通过“建立类向导”,分别为退出、使用说明、关于菜单添加响应函数,代码如下:

voidCGPACalculatorDlg:

:

OnMenuitemExit()

{

//TODO:

Addyourcommandhandlercodehere

DestroyWindow();

voidCGPACalculatorDlg:

:

OnMenuitemMan()

{

//TODO:

Addyourcommandhandlercodehere

WinExec("notepad.exeEXPLAIN.HEP",SW_SHOW);

}

voidCGPACalculatorDlg:

:

OnMenuitemAbout()

{

//TODO:

Addyourcommandhandlercodehere

CAboutDlgdlg;

dlg.DoModal();

}

3.4.2添加分数存储代码

分数是由磁盘文件导入的,在程序中应该有相应的内存存储结构来存储分数,当需要用分数来进行计算等操作时,则从这个存储结构中读出。

当磁盘文件内容变化时,则应更新这个存储结构。

(1)在类选项卡下,点击‘CGPACalculatorDlg’在其中加入如下结构代码。

typedefstructstScore

{

doubledOPoint;//原始分

doubledSPoint;//标准分

doubledNum;//学分

}stScore;

(2)通常在MFC编程中,为了使用集合、数组类,要在StdAfx.h中加入下面语句:

#include

在文件选项卡下,双击‘HeaderFiles->StdAfx.h’,在其中加入以下头文件:

#include

(3)在类选项卡下,双击‘CGPACalculatorDlg’加入私有对象‘arScore’,用作分数存储。

代码如下:

private:

CArrayarScore;

3.4.3添加功能函数代码

(1)添加GetSDPoint函数。

在‘CGPACalculatorDlg’中进行函数的定义:

private:

doubleGetSDPoint(doubledPoint);

在‘CAboutDlg’中添加函数的代码如下:

doubleCGPACalculatorDlg:

:

GetSDPoint(doubledPoint)

{

UpdateData();

CArrayarOPoint;

CArrayarSPoint;

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])

returnarSPoint[0];

for(inti=0;i

{

if(dPoint>=arOPoint[i])

returnarSPoint[i-1];

}

return0;

}

(2)添加SpliterString函数。

分数文件是以‘原始分学分’的方式给出的,需要一个功能函数来将这个字符串拆分成两个double型的原始分和学分。

函数定义如下:

voidSpliterString(CStringstr,double&a,double&b);

函数代码如下:

voidCGPACalculatorDlg:

:

SpliterString(CStringstr,double&a,double&b)

{

CStringstrOne,strTwo;

intifind;

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=“”,即无分数文件时,则导入失败。

定义如下:

voidGatherData();

代码如下:

voidCGPACalculatorDlg:

:

GatherData()

{

CStringstr;

stScoretemp;

if(m_sPathName=="")

return;

arScore.RemoveAll();

CFilefile(m_sPathName,CFile:

:

modeRead);

CArchivear(&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函数。

可以实现根据不同的输入值,转变成不同的参比标准。

定义如下:

voidChangeType(intnType);

代码如下:

voidCGPACalculatorDlg:

:

ChangeType(intnType)

{

switch(nType)

{

case0:

case4:

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;

case1:

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;

case2:

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;

case3:

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函数。

输入为‘真’时,参比标准的编辑框将被设为只读模式,而输入为‘假’时,参比标准的编辑框将被设为可写模式。

定义如下:

voidSetEditRead(boolbReadOnly);

代码如下:

voidCGPACalculatorDlg:

:

SetEditRead(boolbReadOnly)

{

((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)可以选择不同的参比标准,相应的编辑框会随着组合框的选择不同而随之改变。

添加的处理函数如下:

voidCGPACalculatorDlg:

:

OnSelchangeComboStandard()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

intnIndex=m_cmbStandard.GetCurSel();

if(4==nIndex)

SetEditRead(false);

else

SetEditRead(true);

ChangeType(nIndex);

UpdateData(false);

}

(2)[浏览]按钮。

单击该按钮可以弹出‘打开’对话框以供选择打开磁盘上的分数文件。

添加的处理函数如下:

voidCGPACalculatorDlg:

:

OnButtonOpen()

{

CFileDialogfdlg(true,NULL,NULL,OFN_OVERWRITEPROMPT,"成绩文件|*.dat;*.txt|",NULL);

if(fdlg.DoModal()==IDOK){

m_sPathName=fdlg.GetPathName();

}

UpdateData(false);

//TODO:

Addyourcontrolnotificationhandlercodehere

}

(3)[统计]按钮。

单击该按钮计算各项参数值,并可以把分数显示在列表框。

添加的处理函数如下:

voidCGPACalculatorDlg:

:

OnButtonOk()

{

doubledGPAall=0;

doubledAvgall=0;

GatherData();

inti=0;

intsize=arScore.GetSize();

if(size==0)

{

return;

}

m_ListScore.ResetContent();

m_ListScore.AddString("序号成绩学分标准");

m_ListScore.AddString("---------------------------");

m_dTotal=0;

while(i

{

CStringstr;

m_dTotal+=arScore.GetAt(i).dNum;

dGPAall+=arScore.GetAt(i).dSPoint*arScore.GetAt(i).dNum;

dAvgall+=arScore.GetAt(i).dOPoint*arScore.GetAt(i).dNum;

str.Format("%d%0.2f%0.2f%0.2f",i+1,arScore.GetAt(i).dOPoint,arScore.GetAt(i).dNum,arScore.GetAt(i).dSPoint);

i++;

m_ListScore.AddString(str);

}

m_strGPA.Format("%.2f",dGPAall/m_dTotal);

m_strAverage.Format("%.2f",dAvgall/m_dTotal);

UpdateData(false);

}

3.4.5设置界面外观

如果对界面的外观不满意,可以截取消息加以控制。

本程序截取‘WM_CTCOLOR’函数来达到修改控件外观眼色的目的。

添加的函数代码如下:

HBRUSHCGPACalculatorDlg:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1