VC++开发基于对话框应用实例学生信息管理Word格式.docx
《VC++开发基于对话框应用实例学生信息管理Word格式.docx》由会员分享,可在线阅读,更多相关《VC++开发基于对话框应用实例学生信息管理Word格式.docx(38页珍藏版)》请在冰豆网上搜索。
汉族;
满族;
回族;
壮族;
蒙古族;
藏族;
维吾尔族;
11
IDC_CHECK1
读书
12
IDC_CHECK2
唱歌
13
IDC_CHECK3
足球
14
IDC_CHECK4
游泳
15
IDC_CHECK5
旅游
16
IDC_CHECK6
其他
17
IDC_BTN_NEWDEPARTMENT
新建系部
18
IDC_BTN_NEWCLASS
新建班级
19
IDC_BTN_SAVE
保存
20
IDC_BTN_LOAD
读入
21
IDCANCEL
退出
22
IDC_BTN_NEWSTUDENT
新建
23
IDC_BTN_CONFIRM
确定
姓名:
学号:
性别:
出生日期:
政治面貌:
民族:
兴趣爱好:
2、打开“MFC类向导”,按照下图设置控件在CStudengInfoDlg类中的成员变量;
三、设计系部类、班级类和学生类
1、选择菜单“项目”->
“添加类”,添加三个“MFC类”:
CDepartment、CClass、CStudent,基类为Object;
2、学生类(CStudent)的代码:
//Student.h
#pragmaonce
//CStudent命令目标
classCStudent:
publicCObject
{
DECLARE_SERIAL(CStudent)
public:
CStudent();
virtual~CStudent();
voidSerialize(CArchive&
ar);
CStringm_strName;
CStringm_strID;
intm_nSex;
COleDateTimem_dtBirthdate;
CStringm_strNation;
CStringm_strPolitics;
WORDm_wHobbies;
};
//Student.cpp:
实现文件
#include"
stdafx.h"
StudentInfo.h"
Student.h"
//CStudent
IMPLEMENT_SERIAL(CStudent,CObject,0)
CStudent:
:
CStudent()
m_strName=_T("
"
);
m_strID=_T("
m_nSex=0;
m_dtBirthdate=COleDateTime:
GetCurrentTime();
m_strNation=_T("
汉族"
m_strPolitics=_T("
群众"
m_wHobbies=0x0000;
}
~CStudent()
//CStudent成¨
¦
员¡
À
函¡
¥
数º
y
voidCStudent:
Serialize(CArchive&
ar)
if(ar.IsLoading())
{
ar>
>
m_strName>
m_strID>
m_nSex>
m_strNation>
m_strPolitics>
m_dtBirthdate>
m_wHobbies;
}
else
ar<
<
m_strName<
m_strID<
m_nSex<
m_strNation<
m_strPolitics<
m_dtBirthdate<
3、班级类(CClass)的实现代码:
//Class.h
//CClass命令目标
#include<
afxtempl.h>
student.h"
classCClass:
DECLARE_SERIAL(CClass)
CClass();
virtual~CClass();
CTypedPtrArray<
CObArray,CStudent*>
m_Students;
//Class.cpp:
//
Class.h"
//CClass
IMPLEMENT_SERIAL(CClass,CObject,0)
CClass:
CClass()
~CClass()
intnCount;
nCount=(int)this->
m_Students.GetSize();
if(nCount>
0)
for(inti=nCount-1;
i>
=0;
i--)
{
deletem_Students.GetAt(i);
}
m_Students.RemoveAll();
//CClass成员函数
voidCClass:
m_strName;
this->
m_Students.Serialize(ar);
4、系部类(CDepartment)的实现代码:
//Department.h
//CDepartment命令目标
class.h"
classCDepartment:
publicCObject
DECLARE_SERIAL(CDepartment)
CDepartment();
virtual~CDepartment();
CObArray,CClass*>
m_Classes;
//Department.cpp:
Department.h"
//CDepartment
IMPLEMENT_SERIAL(CDepartment,CObject,0)
CDepartment:
CDepartment()
~CDepartment()
m_Classes.GetSize();
deletem_Classes.GetAt(i);
m_Classes.RemoveAll();
//CDepartment成员函数
voidCDepartment:
m_Classes.Serialize(ar);
四、应用程序类的设计
1、在应用程序类(CStudentInfoApp)的定义文件(studentinfo.h)中添加头文件的引用:
#include<
#include"
并添加成员变量和成员函数:
public:
CTypedPtrArray<
CObArray,CDepartment*>
m_Departments;
voidRemoveMemory();
效果如图所示:
在studentinfo.cpp文件中,添加RemoveMemory()函数的实现代码:
voidCStudentInfoApp:
RemoveMemory()
m_Departments.GetSize();
deletem_Departments.GetAt(i);
m_Departments.RemoveAll();
2、打开“MFC”类向导,为应用程序类(CStudentInfoApp)添加虚函数ExitInstance(),操作界面及步骤如图所示:
编辑ExitInstance()虚函数,添加RemoveMemory();
函数的调用,代码如下:
intCStudentInfoApp:
ExitInstance()
//TODO:
在此添加专用代码和或调用基类
RemoveMemory();
returnCWinApp:
ExitInstance();
五、树型控件图标资源设计
1、在资源视图右键快捷菜单中选择“添加资源”菜单命令,如图所示:
在弹出的的对话框中选择Bitmap资料类型,单击“新建”按钮建立一个资源ID为IDB_BITMAP1的位图资源,如图所示:
2、编辑位图资源的属性,在属性窗口中按下图设置相关属性:
3、编辑位图资源,如图所示建立4个图标,每个图标占用16*16像素,分别作为树型控件中的“当前选中项”、“系部”、“班级”和“学生”的图标;
六、建立输入对话框
1、添加一个对话框资源,如图所示:
2、编辑对话框的属性,设置ID为IDD_DLG_INPUT;
3、按照如图所示设计对话框界面,如图所示,各控件的属性按照下表设置
IDC_STATIC_TEXT
IDC_EDIT1
IDOK
取消
4、为对话框资料建立相应的对话框类(CDlgInput),如图所示:
5、打开MFC类向导,按照下图所示设置控件在CDlgInput类中的成员变量;
6、为CDlgInput类添加一个字符串成员m_strTitle,用于显示对话框标题:
CStringm_strTitle;
7、为CDlgInput类添加一个构造函数
CDlgInput(CStringstrTitle,CStringm_strText);
其实现代码为:
CDlgInput:
CDlgInput(CStringstrTitle,CStringstrText)
:
CDialogEx(CDlgInput:
IDD,NULL)
m_strInput=_T("
m_strTitle=strTitle;
m_strText=strText;
8、打开MFC类向导,为CDlgInput类添加一个虚函数OnInitDialog,如图所示:
代码为:
BOOLCDlgInput:
OnInitDialog()
CDialogEx:
OnInitDialog();
在此添加额外的初始化
SetWindowText(m_strTitle);
UpdateData(FALSE);
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
七、对话框类CStudentInfoDlg的初始化
1、列表控件(IDC_LIST1)初始化,建立CStudentInfoDlg类的成员函数SetList(),在studentinfodlg.h中添加成员函数的定义:
voidSetList();
在studentinfodlg.cpp中添加成员函数的实现,代码如下:
voidCStudentInfoDlg:
SetList()
m_listStudent.InsertColumn(0,L"
学号"
m_listStudent.SetColumnWidth(0,80);
m_listStudent.InsertColumn(1,L"
姓名"
m_listStudent.SetColumnWidth(1,50);
m_listStudent.SetExtendedStyle(m_listStudent.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
2、树型控件(IDC_TREE1)初始化。
在CStudentInfoDlg中添加CImageList类型的数据成员m_ImageList,代码为:
CImageListm_ImageList;
建立CStudentInfoDlg类的成员函数SetTree(),在studentinfodlg.h中添加成员函数的定义:
voidSetTree();
SetTree()
CBitmapbm;
bm.LoadBitmap(IDB_BITMAP1);
m_ImageList.Create(16,16,ILC_COLOR8|ILC_MASK,17,0);
m_ImageList.Add(&
bm,RGB(255,255,255));
m_treeInfo.SetImageList(&
m_ImageList,TVSIL_NORMAL);
CFont*font=CFont:
FromHandle((HFONT):
GetStockObject(DEFAULT_GUI_FONT));
3、树型控件(IDC_TREE1)中层次型数据的显示。
建立CStudentInfoDlg类的成员函数CreateTree(),在studentinfodlg.h中添加两个成员函数的定义:
voidCreateTree();
HTREEITEMCreateTreeItem(HTREEITEMhParent,intnType,CStringstrText,LPARAMlParam);
在studentinfodlg.cpp中添加两个成员函数的实现,代码如下:
CreateTree()
m_treeInfo.DeleteAllItems();
HTREEITEMhShool=CreateTreeItem(0,1,_T("
华北电力大学"
),0);
intnDepartments,nClasses;
nDepartments=(int)theApp.m_Departments.GetSize();
CDepartment*pD;
CClass*pC;
for(inti=0;
i<
nDepartments;
i++)
pD=theApp.m_Departments.GetAt(i);
if(pD!
=NULL)
HTREEITEMhDepartment;
hDepartment=CreateTreeItem(hShool,2,pD->
m_strName,(LPARAM)pD);
nClasses=(int)pD->
for(intj=0;
j<
nClasses;
j++)
{
pC=pD->
m_Classes.GetAt(j);
CreateTreeItem(hDepartment,3,pC->
m_strName,(LPARAM)pC);
}
m_treeInfo.Invalidate();
HTREEITEMCStudentInfoDlg:
CreateTreeItem(HTREEITEMhParent,intnType,CStringstrText,LPARAMlParam)
TV_INSERTSTRUCTltvInsertItem;
ltvInsertItem.hParent=hParent;
ltvInsertItem.hInsertAfter=TVI_LAST;
ltvInsertItem.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM;
ltvInsertItem.item.lParam=lParam;
ltvInsertItem.item.iImage=nType;
ltvInsertItem.item.iSelectedImage=0;
ltvInsertItem.item.pszText=strText.GetBuffer(0);
//CStringtoLPWCTR
strText.ReleaseBuffer();
HTREEITEMhItem=m_treeInfo.InsertItem(&
ltvInsertItem);
returnhItem;
4、在studentinfodlg.h中添加头文件的引用:
并定义指针类型成员变量m_pCurrStud,代码如下:
CStudent*m_pCurrStud;
5、在OnInitDialog()函数中添加如下代码:
SetList();
SetTree();
CreateTree();
m_pCurrStud=NULL;
效果如图:
八、学生信息的显示功能。
1、为CStudentInfoDlg添加学生信息界面清理的成员函数ClearStudentInfo(),在studentinfodlg.h中添加成员函数的定义:
voidClearStudentInfo();
ClearStudentInfo()
m_bHobby01=m_bHobby02=m_bHobby03=m_bHobby04=m_bHobby05=m_bHobby06=FALSE;
2、添加树型控件(IDC_TREE1)的选择改变消息的响应函数。
打开MFC类向导,如图所示,按照步骤建立TVN_SELCHANGED消息的响应函数OnSelchangedTree1:
该函数的代码如下:
OnSelchangedTree1(NMHDR*pNMHDR,LRESULT*pResult)
NM_TREEVIEW*pNMTreeView=(NM_TREEVIEW*)pNMHDR;
Addyourcontrolnotificationhandlercodehere
TVITEMtvItem;
if(GetCurrentTreeItem(&
tvItem))
switch(tvItem.iImage)
case1:
//学¡
ì
校¡
ê
this->
GetDlgItem(IDC_BTN_NEWDEPARTMENT)->
EnableWindow(TRUE);
GetDlgItem(IDC_BTN_NEWCLASS)->
EnableWindow(FALSE);
GetDlgItem(IDC_BTN_NEWSTUDENT)->
GetDlgItem(IDC_BTN_CONFIRM)->
m_listStudent.DeleteAllItems();
ClearStudentInfo();
break;
case2:
//系¦
Ì
部?
GetDlgItem(IDC_BTN_