MFC开发学生信息管理系统.docx
《MFC开发学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《MFC开发学生信息管理系统.docx(12页珍藏版)》请在冰豆网上搜索。
MFC开发学生信息管理系统
学生信息管理系统
(一)用microsoftofficeaccess创建一个数据库
(图)
在表中添加字段和数据类型,如下图所示:
(图)
(图)
(图)
创建ODBC数据源
选择控制面板→管理工具→数据源(ODBC)→系统DSN标签→单击“添加”
出现下图所示的界面。
选择DrivedoMicrosoftAccess(*.mdb),单击“完成”。
输入数据源名,单击“选择、、、”,选择c/单击“确定”,将会出现如图(图)所示。
(图)
(图)
(图)
(二).MFC图形建立
(图)
特别注意:
创建的应用程序类型是单文档(singledocument应用程序)
(图)
将CSTUDXINXIView的基类改为CScrollView然后单击“完成”。
(图)
为数据表创建CRecordSet用户类
按“Ctrl+W”进入“建立类向导(即MFCClasWizard)”单击“AddClass...”选择“New...”如图(图)所示.按照(图)→(图)→(图)的安装顺序。
即可完成创建CRecordSet用户类的工作。
(图)
(图)
(图)
(图)
在文件中添加CRecordSet包含语句:
#include<>
如图(图)所示
(图)
(三)构建班级信息对话框类
按“Ctrl+R”键,打开“插入资源”,选择dialog(对话框),选择新建。
将名字改为IDD_CLASSINFO,标题为“班级信息输入”。
按照(图)添加控件。
添加的控件
ID号
标题
其他属性
编辑框(班级号)
IDC_EDIT_CLASSNO
默认
编辑框(所在院系)
IDC_EDIT_DEPART
默认
编辑框(专业)
IDC_EDIT_SPECIAL
默认
组合框(学制)
IDC_COMBO_YEAR
默认
日期/时间控件(入学时间)
IDC_DATETIMEPICKER1
默认
对于学制框:
使用Data页面来添加数据项,按Ctrl+Enter换行。
(图)
完成控件添加后,选择“建立类向导”,创建一个新类、即CClassInfoDlg,如图()所示。
然后按照下图,为控件添加成员变量。
(图)
(图)
控件ID号
变量类别
变量类型
变量名
IDC_EDIT_CLASSNO
Value
CString
m_strClassNO
IDC_EDIT_DEPART
Value
CString
m_strDepart
IDC_EDIT_SPECIAL
Value
CString
m_strSpecial
IDC_COMBO_YEAR
Value
CString
m_strYear
IDC_DATETIMEPICKER1
Value
CTime
m_tEnter
(图
使用类向导为CClassInfoDlg类添加WM_INITDIALOG消息映射。
代码位于附录1。
见(图)
使用类向导为CClassInfoDlg类添加IDOK按钮的BN_CLICKED消息映射。
代码位于附录2。
见(图)
(图)
(图)
鉴于添加代码都是从类向导找到相应的代码区域,以后就不详细截图了。
(四)实现班级基本信息添加和显示功能
为CSTUDXINXIView类添加一个LOGFONT型成员变量m_lfFont
选择AddMemberVariable...出现(图)所示输入下面表格的变量类型和名称即可。
连续三次。
变量类型
变量名称
LOGFONT
m_lfFont
CString
m_strClassNO
CString
m_strSQL
在CSTUDXINXIView:
:
CSTUDXINXIView()添加代码。
代码位于附录3.
(图)
添加一个成员函数
如(图)所示。
(图)
添加代码,位于附录4.
在文件的前面添加CClassInfo类的包含语句:
#include""
打开菜单资源,添加如(图)所示的菜单项。
(图)
用类向导为CSTUDXINXIView类添加该菜单项的COMMAND消息映射,并添加代码。
代码位于附录5
在CSTUDXINXIView:
:
OnDraw函数添加代码。
代码位于附录6
在文件的前面添加ClassInfoDlg类的包含语句:
#include""
(五)查询班级信息
添加一个新的对话资源框,名字改为ID_SEEKCLASS标题定为“查询班级信息”。
按照下面的表格添加控件。
布局如(图所示)
添加的控件
ID号
标题
其他属性
单选按钮(按所在院系)
IDC_RADIO1
默认
单选按钮(按专业)
IDC_RADIO2
默认
编辑框
IDC_EDIT1
默认
(图)
建立新类,为IDC_EDIT1添加一个CString型变量m_strSeek
为CSeekClassDlg类添加消息映射,代码位于附录7
为CSeekClassDlg类添加CString型成员变量m_strSQL
用类向导为IDOK按钮添加消息映射。
代码位于附录8
打开菜单资源,添加菜单项如(图)所示。
用类向导添加消息映射。
代码位于附录9
在文件的前面添加包含语句:
#include""
(图)
运行,编译。
附录:
1
m_strYear="4";//有关于消息映射
UpdateData(FALSE);
2
UpdateData();
();
();
();
if())
MessageBox("必须要有所院系!
");
elseif())
MessageBox("必须要有班级!
");
else
if())
MessageBox("必须要有班级号!
");
else
3
memset(&m_lfFont,0,sizeof(LOGFONT));
=12;
=GB2312_CHARSET;
strcpy,"宋体");
m_strClassNO=m_strSQL="";
4
CFontfont;
LOGFONTlf=m_lfFont;
=700;
strcpy,"幼圆");
(&lf);
TEXTMETRICtm;
pDC->GetTextMetrics(&tm);
intnLineHeight=(int)(+*;
//行高为倍字符高度
intx=0,y=0,nWidth;
CFont*oldFont=pDC->SelectObject(&font);//使用新字体
//输出表头
CStringstrHeader[]={"班级号","所在院系","专业名称","学制","入学时间"};
intnStrWidth[]={10,25,25,8,10};
CClassInfoSetcSet;
=strSQL;
();
for(UINTi=0;i<;i++)
{
//计算每一个字段所需的长度
nWidth=*nStrWidth[i];
pDC->TextOut(x,y,strHeader[i]);
x+=nWidth;
}
pDC->SelectObject(oldFont);
//显示具体内容
CStringstr;
while(!
())
{
if(strClass==
{
//这是要强调显示的班级
=0;
strcpy,"楷体");
();
(&lf);
pDC->SelectObject(&font);
}
else
pDC->SelectObject(oldFont);//使用原来的字体
x=0;y+=nLineHeight;
for(UINTi=0;i<;i++)
{
(i,str);
//计算每一个字段需要的长度
nWidth=*nStrWidth[i];
pDC->TextOut(x,y,str);
x+=nWidth;
}
();
}
();
//设置视图滚动大小
CSizesizeTotal;
=x+nWidth;=y+nLineHeight;
SetScrollSizes(MM_TEXT,sizeTotal);
5
CClassInfoDlgdlg;
if()!
=IDOK)return;
//向classinfo表添加新的记录,为了防止添加相同的记录,这里先来判断
CClassInfoSetinfoSet;
"classno='%s'ANDdepart='%s'",,,;
();
if(!
())
{
MessageBox+"班级记录已被添加过!
!
!
");//if())();
return;
}
if())
();
CClassInfoSetaddSet;
if())
{
//添加一个新的记录
();
=;
=;
=;
=(float)atof;
=;
();
();
}
if())
();
//更新视图
m_strClassNO=;m_strSQL="";
MessageBox("稍等几分钟后,单击“确定”按钮!
O(∩_∩)O谢谢","特别提示",MB_OK|MB_ICONINFORMATION);
Invalidate();//重新调用OnDraw
6
CFontfont;
(&m_lfFont);
CFont*oldFont=pDC->SelectObject(&font);
DispClassInfo(pDC,m_strClassNO,m_strSQL);
pDC->SelectObject(oldFont);
7
CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);
8
UpdateData();
();
if())
{
MessageBox("查询内容不能为空!
");
return;
}
intnID=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO2);
if(nID==IDC_RADIO1)
("depart='%s'",m_strSeek);
else
("special='%s'",m_strSeek);
9
CSeekClassDlgdlg;
if()==IDOK){
m_strClassNO="";
m_strSQL=;
Invalidate();
}