VC++课程设计Word文档下载推荐.docx
《VC++课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《VC++课程设计Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
1.启动VisualC++6.0
打开计算机,启动VisualC++6.0系统。
2.创建多文档应用程序Ex_MDI
用MFCAppWizard创建一个默认的多文档应用程序Ex_MDI。
3.复制“学生基本信息”和“课程信息”对话框
①将Ex_Student项目工作区切换到ResourceView页面,展开Dialog资源的所有项。
②单击开发环境标准工具栏上的“打开”按钮,打开实验3中Ex_Ctrls的资源文
件Ex_Ctrl.rc,展开Dialog资源的所有项,选定IDD_STUINFO对话框资源项,按住Ctrl
键,将其拖放到Ex_Student项目的Dialog资源处。
同样,再将IDD_COURSE对话框资源
击中。
4.复制对话框类CStuInfoDlg和CCourseDlg
①单击标准工具栏上的“打开”按钮,在“打开”文件对话框中,定位到Ex_Ctrls
项目文件夹,选中StuInfoDlg.h和StuInfoDlg.cpp以及CourseDlg.h和CourseDlg.cpp文件,
按快捷键Ctrl+C,然后将“打开”文件对话框的文件“查找范围”定位到本项目Ex_MDI
的文件夹中,按快捷键Ctrl+V、CStuInfoDlg和CCourseDlg类的源代码文件就复制过来了。
②关闭“打开”文件对话框,选择“工程”→“添加工程”→Files菜单,在弹出的
InsertFilesIntoProject对话框中选中刚才复制的源文件,单击“确定”按钮,CStuInfoDlg
和CCourseDlg类就添加到Ex_MDI项目中。
③打开StuInfoDlg.cpp文件,将文件前面的头文件包含进行修改,如下所示:
#include"
Ex_MDI.h"
//修改原来的#include"
Ex_Ctrls.h"
StuInfoDlg.h"
④打开CourseDlg.cpp文件,将文件前面的头文件包含进行修改,如下所示:
CourseDlg.h"
5.实现MFCClassWizard对CStuInfoDlg和CCourse类的支持
若此时打开MFCClassWizard对话框,在Classname组合框中有时是找不到刚添加的
CStuInfoDlg和CCourse类。
为此需要进行下列操作:
①单击标准工具栏上的“打开”按钮,在“打开”文件对话框中,将文件类型选择
为“所有文件(*.*)”,在文件列表框中,右击文件Ex_MDI.clw,从弹出的快捷菜单中选
择“删除”命令。
这里的Ex_MDI.clw是项目Ex_MDI的类向导文件。
②关闭“打开”文件对话框后,按快捷键Ctrl+W,出现一个消息对话框,询问是否
从资源中重新创建一个类向导文件,单击“是(Y)”按钮,出现如图6.3所示的对话框。
图6.3重新创建类向导文件
③单击AddAll按钮,再单击OK按钮。
6.添加一个CStudentInfo类并使该类可序列化
①选择“文件”→“新建”菜单命令,显示出“新建”对话框。
单击“文件”标签,
在左边的列表框中选择C/C++HeaderFile项,在右边的“文件”下的编辑框中输入
StudentInfo.h,单击“确定”按钮。
②在文档窗口中输入下面的代码:
classCStudentInfo:
publicCObject
{
CStringstrName;
//姓名
CStringstrNO;
//学号
BOOLbMale;
//性别,是否为男
CTimetBirth;
//出生年月
CStringstrSpecial;
//专业
DECLARE_SERIAL(CStudentInfo)//序列化声明
public:
CStudentInfo(){};
CStudentInfo(CStringname,CStringid,BOOLmale,CTimebirth,CStringspecial);
voidSerialize(CArchive&
ar);
voidDisplay(inty,CDC*pDC);
//在坐标为(0,y)处显示数据
};
③再次选择“文件”→“新建”菜单命令,显示出“新建”对话框。
单击“文件”
标签,在左边的列表框中选择C++SourceFile项,在右边的“文件”下的编辑框中输入
StudentInfo.cpp,单击“确定]按钮。
④在文档窗口中输入下面的代码:
stdafx.h"
StudentInfo.h"
CStudentInfo:
:
CStudentInfo(CStringname,CStringid,BOOLmale,CTimebirth,CStringspecial)
strName=name;
strNO=id;
bMale=male;
tBirth=birth;
strSpecial=special;
}
voidCStudentInfo:
Display(inty,CDC*pDC)
CStringstr,strSex("
女"
);
if(bMale)strSex="
男"
;
str.Format("
%s%s%s%s%s"
strName,strNO,
strSex,tBirth.Format("
%Y-%m-%d"
),strSpecial);
pDC->
TextOut(0,y,str);
IMPLEMENT_SERIAL(CStudentInfo,CObject,1)//序列化实现
Serialize(CArchive&
ar)
if(ar.IsStoring())
ar<
<
strName<
strNO<
bMale<
tBirth<
strSpecial;
else
ar>
>
strName>
strNO>
bMale>
tBirth>
⑤编译。
7.添加一个CCourseInfo类并使该类可序列化
CourseInfo.h,单击“确定”按钮。
classCCourseInfo:
//课程号
//课课名称
//所属专业
CStringstrType;
//课程类型
BYTEnOpen;
//开课学期
BYTEnHours;
//课时数
floatfCredit;
//学分
DECLARE_SERIAL(CCourseInfo)//序列化声明
CCourseInfo(){};
CCourseInfo(CStringid,CStringname,CStringspecial,CStringtype,
BYTEterm,BYTEhours,floatcredit);
CourseInfo.cpp,单击“确定”按钮。
CourseInfo.h"
CCourseInfo:
BYTEterm,BYTEhours,floatcredit)
strType=type;
nOpen=term;
nHours=hours;
fCredit=credit;
voidCCourseInfo:
CStringstr;
%s%s%s%s%d%d%4.1f"
strNO,strName,
strSpecial,strType,nOpen,nHours,fCredit);
IMPLEMENT_SERIAL(CCourseInfo,CObject,1)//序列化实现
strSpecial<
strType<
nOpen<
nHours<
fCredit;
strSpecial>
strType>
nOpen>
nHours>
8.实现课程信息文档序列化
①在Ex_MDIDoc.h文件的classCEx_MDIDoc前面,添加包含CCourseInfo类的头
文件。
②为CEx_MDIDoc类添加下列成员变量,用来保存添加的CCourseInfo类对象数据:
CObArraym_courseObArray;
//对象集合类对象
③为CEx_MDIDoc类添加成员函数CCourseInfo*GetCourseInfoAt(intnIndex),用
来获取m_courseObArray中指定索引号的CCourseInfo类指针,其代码如下:
CCourseInfo*CEx_MDIDoc:
GetCourseInfoAt(intnIndex)
if((nIndex<
0)||nIndex>
m_courseObArray.GetUpperBound())
returnNULL;
//超界处理
return(CCourseInfo*)m_courseObArray.GetAt(nIndex);
④为CEx_MDIDoc类添加成员函数intGetCourseRecNum(void),用于获取集合类
中对象的个数其代码如下:
intCEx_MDIDoc:
GetCourseRecNum()
returnm_courseObArray.GetSize();
⑤在CEx_MDIDoc类析构函数~CEx_MDIDoc添加下列删除并释放对象的代码:
CEx_MDIDoc:
~CEx_MDIDoc()
intnIndex=GetCourseRecNum();
while(nIndex--)
deletem_courseObArray.GetAt(nIndex);
//删除并释放对象的内存空间
m_courseObArray.RemoveAll();
⑥在CEx_StudentDoc:
Serialize函数中添加下列代码:
voidCEx_MDIDoc:
Serialize(CArchive&
ar)
if(ar.IsStoring()){
m_courseObArray.Serialize(ar);
}else{
⑦在Ex_MDIDoc.cpp文件的开始处,添加包含CCourseDlg类的头文件包含:
Ex_MDIDoc.h"
⑧在菜单资源IDR_EX_MDITYPE中添加顶层菜单项“课程信息(&
S)”,在该顶层
菜单项中添加子菜单“添加(&
A)”(ID_COURSEINFO_ADD)。
⑨用MFCClassWizard为CEx_MDIDoc类添加处理菜单项ID_COURSEINFO_ADD
的COMMAND消息,并添加下列代码:
OnCourseinfoAdd()
CCourseDlgdlg;
if(dlg.DoModal()!
=IDOK)return;
//添加记录
CCourseInfo*pCourse=newCCourseInfo(dlg.m_strNO,dlg.m_strName,
dlg.m_strSpecial,dlg.m_strType,dlg.m_nOpen,dlg.m_nHours,dlg.m_fCredit);
m_courseObArray.Add(pCourse);
SetModifiedFlag();
//设置文档更改标志
UpdateAllViews(NULL);
//更新视图
⑩修改CEx_MDIView:
OnDraw代码,用来将所有的课程信息记录显示在视图中:
voidCEx_MDIView:
OnDraw(CDC*pDC)
CEx_MDIDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
inty=0;
for(intnIndex=0;
nIndex<
pDoc->
GetCourseRecNum();
nIndex++){
pDoc->
GetCourseInfoAt(nIndex)->
Display(y,pDC);
y+=16;
打开文档的字串资源IDR_EX_MDITYPE,将其内容修改为:
\nCourseRec\nEx_MDI\n课程信息文件(*.cou)\n.cou\nExMDI.Document\nEx_MDIDocument
编译并运行。
9.第一次测试
①运行后,选择“课程基本信息”→“添加”菜单命令,弹出“课程信息”对话框,
输入相关信息后,单击“确定”按钮。
重复刚才的操作,添加两个课程信息记录,结果如
图6.1所示。
②选择“文件”→“保存”菜单命令,弹出保存文件对话框,指定要保存的文件名1.cou,
单击“保存”按钮,这样就将添加的记录保存到1.cou文件中。
③关闭应用程序,然后重新运行。
选择“文件”→“打开”菜单命令,从弹出的打
开文件对话框中指定刚才保存的1.cou文件,单击“打开”按钮,该文件中的课程信息记
录被保存到m_courseObArray中,并在视图中显示出来。
④再添加一个课程信息记录,保存后再打开,结果如何?
10.添加另一个文档模板类型
①打开项目工作区窗口中StringTable的资源项,双击该项下的StringTable,打开字
符串表资源,拖动字符串表编辑器右边的滚动块,直到出现最后一个字符串项,双击最后
的空行,在字符串属性对话框中将ID设为IDR_STUDENT,值为130,标题内容设为:
\nStuRec\nEx_Student\n学生基本信息文件(*.stu)\n.stu\nExMDI.Document\nEx_MDIDocument
②按快捷键Ctrl+W,打开MFCClassWizard,单击AddClass按钮,从弹出的菜单中
选择New,出现NewClass对话框,在Name框中输入类名CEx_StudentDoc,在Baseclass
组合框中选择基类CDocument。
单击OK按钮,新的文档类COtherDoc就添加到Ex_MDI
项目中。
③类似地再添加一个新的视图类CEx_StudentView,基类为CView。
单击“确定”按
钮,关闭MFCClassWizard对话框。
④修改CEx_MDIApp:
InitInstance函数代码,如下所示:
BOOLCEx_MDIApp:
InitInstance()
…
CMultiDocTemplate*pDocTemplate;
pDocTemplate=newCMultiDocTemplate(
IDR_EX_MDITYPE,
RUNTIME_CLASS(CEx_MDIDoc),
RUNTIME_CLASS(CChildFrame),//customMDIchildframe
RUNTIME_CLASS(CEx_MDIView));
AddDocTemplate(pDocTemplate);
IDR_STUDENT,//指定新的资源
RUNTIME_CLASS(CEx_StudentDoc),//指定新的文档类
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CEx_StudentView));
//指定新的视图类
⑤在文件Ex_MDI.cpp的开始处,添加包含前面创建的两个派生类的头文件包含:
Ex_MDIView.h"
Ex_StudentDoc.h"
Ex_StudentView.h"
⑥编译并运行。
11.实现学生基本信息文档序列化
①在Ex_StudentDoc.cpp文件的开始处,添加包含CStuInfoDlg类的头文件包含。
②将项目工作区切换到ResourceView页面,展开Menu所有节点,选中
IDR_EX_MDITYPE,然后按住Ctrl键,将其拖放到Menu节点上,将IDR_EX_MDITYPE1
标识改为IDR_STUDENT。
③保留“文件”和“帮助”菜单,其他删除。
添加顶层菜单项“学生基本信息(&
S)”,
在该顶层菜单项中添加子菜单“添加(&
A)”(ID_STUINFO_ADD)。
④用MFCClassWizard为CEx_StudentDoc类添加处理菜单项ID_STUINFO_ADD的
COMMAND消息,并添加下列代码:
voidCEx_StudentDoc:
OnStuinfoAdd()
CStuInfoDlgdlg;
CStudentInfo*pStudent=newCStudentInfo(dlg.m_strName,
dlg.m_strNo,dlg.m_bMale,dlg.m_tBirth,dlg.m_strSpecial);
m_stuObArray.Add(pStudent);
⑤修改CEx_StudentDoc类代码(与教材文档序列化示例Ex_Student相同)。
⑥在CEx_StudentView:
OnDraw中添加下列代码:
voidCEx_StudentView:
CEx_StudentDoc*pDoc=(CEx_StudentDoc*)GetDocument();
GetAllRecNum();
GetStudentInfoAt(nIndex)->
⑦在Ex_StudentView.cpp文件的前面添加CEx_StudentDoc类的头文件包含:
⑧编译运行。
在文档类型“新建”对话框中,选中Ex_Student,单击“确定”按钮,
出现程序主界面,然后进行测试,测试的内容与教材文档序列化示例Ex_Student相同。
结
果如图6.2所示。
实验环境
硬件环境:
软件环境:
程序测试及结果分析
实验总结
(1)通过这次课程设计,可以说我粗略的掌握了MFC程序设计,对vc的关键技术之一的消息机制有了很深刻的认识,对MFC的的常用控件,列表,树控件,菜单,工具栏,状态栏,框架窗口,文本窗口以及切分窗口,图形,文本,打印有了理解.
(2)我还理解到程序的界面设计十分的重要,一个好的程序必须有便捷的操作和美观的界面.人性化的设计是程序的翅膀,长了翅膀的程序才能飞得更远更高。
(3)更重要的是此次课程设计让我从实践的角度了解了编