C++期末论文-学生成绩管理程序Word文件下载.doc
《C++期末论文-学生成绩管理程序Word文件下载.doc》由会员分享,可在线阅读,更多相关《C++期末论文-学生成绩管理程序Word文件下载.doc(14页珍藏版)》请在冰豆网上搜索。
字段名称
数据类型
字段大小
小数位
字段含义
1
studentname
文本
20
姓名
2
studentno
10
学号
3
xb
是/否
性别
4
birthday
日期/时间
出生年月
5
special
50
专业
表2学生课程成绩表(score)结构
8
course
7
课程号
score
数字
单精度
成绩
credit
学分
表3课程信息表(course)结构
courseno
所属专业
coursename
课程名
coursestype
课程类型
openterm
字节
开课学期
6
hours
课时数
二、程序框架界面及其添加的类
1.为上述数据库添加并创建一个ODBC数据源
⑴打开控制面板中的管理工具,如图1所示。
图1管理工具
(2)双击ODBC图标,进入ODBC数据管理器,如图2所示。
在这里,用户可以设置一些ODBC数据源的一些信息。
图2ODBC数据源管理器
(3)创建用户DSN
①单击“添加”按钮,弹出有一驱动程序列表的“创建新数据源”对话框,如图3所示。
在这里选择“MicosoftAccessDriver”。
图3“创建新数据源”对话框
②单击“完成”按钮,进入指定驱动程序的ODBCAccess安装对话框,单击“选择”按钮,然后在数据源名输入“student”,如图4所示。
图4ODBCAccess安装对话框
③单击“确定”按钮,刚才创建的用户数据源已被添加在“ODBC数据源管理器”的“用户数据源”列表中,如图5所示。
图5“用户数据源”列表
2.用MFCAppWizard创建一个单文档应用程序student,在向导的第6步选择基类CListView。
3.在应用程序项目中,用ClassWizard为数据表student、score、course创建并添加CRecordSet的派生类:
CStudentSet、CScoreSet和CCourseSet。
4.添加一个对话框资源IDD_STUINFO,用于学生信息数据的添加和修改。
如图6所示为“学生信息”对话框,创建的对话框类为CStuInfoDlg。
并依次为“学生信息”对话框的控件添加成员变量,如图7所示。
图6“学生信息”对话框
图7“学生信息”对话框添加成员变量
5.添加一个对话框资源IDD_SCORE,用于学生课程成绩数据的添加和修改。
如图8所示为“学生成绩”对话框,创建的对话框类为CscoreDlg。
并依次为“学生成绩”对话框的控件添加成员变量,如图9所示。
图8“学生成绩”对话框
图9为“学生成绩”对话框添加成员变量
6.添加一个对话框资源IDD_COURSE,用于课程信息数据的添加和修改。
如图10所示为“课程信息”对话框,创建对话框类为CCourseDlg。
并依次为“课程信息”对话框的控件添加成员变量,如图11所示。
图10“课程信息”对话框
图11为“课程信息”对话框添加成员变量
7.设计菜单项和工具栏,如图12所示。
图12菜单栏和工具栏
三、主要代码分析
1.用MFCClassWizard为CStuInfoDlg类添加WM_INITDIALOG消息映射,并添加下列初始化代码:
BOOLCStuInfoDlg:
:
OnInitDialog()
{
CDialog:
OnInitDialog();
if(m_strSex=="
女"
)
CheckRadioButton(IDC_RADIO_M,IDC_RADIO_W,IDC_RADIO_W);
else
CheckRadioButton(IDC_RADIO_M,IDC_RADIO_W,IDC_RADIO_M);
m_strOKText.TrimLeft();
GetDlgItem(IDOK)->
SetWindowText(m_strOKText);
if(m_strOKText=="
修改"
{
GetDlgItem(IDC_EDIT_NAME)->
EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_NO)->
}
returnTRUE;
}
2.用MFCClassWizard为CStuInfoDlg类添加IDOK按钮的BN_CLILKED消息映射,并添加下列代码:
voidCStuInfoDlg:
:
OnOK()
UpdateData();
m_strName.TrimLeft();
m_strNO.TrimLeft();
if(m_strName.IsEmpty())
MessageBox("
必须有姓名!
"
);
elseif(m_strNO.IsEmpty())
必须有学号!
3.为Cjy001View类添加一个成员函数DispAllRec,用于显示指定数据表的所有记录,并指定字段排序,strFiled默认参数值为"
其代码如下:
voidCjy001View:
DispAllRec(CStringtablename,CStringstrFiled)
CListCtrl&
m_ListCtrl=GetListCtrl();
m_ListCtrl.DeleteAllItems();
intnColumnCount=m_ListCtrl.GetHeaderCtrl()->
GetItemCount();
for(inti=0;
i<
nColumnCount;
i++)
m_ListCtrl.DeleteColumn(0);
_CommandPtrpCmd;
pCmd.CreateInstance(__uuidof(Command));
pCmd->
ActiveConnection=m_pConnection;
CStringstrText;
strField.TrimLeft();
if(strField.IsEmpty())
strText.Format("
SELECT*FROM%s"
tablename);
strText.Format("
SELECT*FROM%sORDERBY%s"
tablename,strField);
CommandText=_bstr_t(strText);
_RecordsetPtrpSet;
pSet.CreateInstance(__uuidof(Recordset));
pSet=pCmd->
Execute(NULL,NULL,adCmdText);
FiledsPtrflds=pSet->
GetFields();
_variant_tIndex;
Index.vt=VT_I2;
m_ListCtrl.InsertColumn(0,"
序号"
LVCEMT_LEFT,40);
for(i=0;
(int)flds->
GetCount();
Index.iVal=i;
intnWidth=flds->
GetItem(Index)->
GetDefineSize()*9;
if(nWidth<
40)nWidth=40;
m_ListCtrl.InsertColumn(i+1,(LPSTR)flds->
GetName(),LVSFMT_LEFT,nWidth);
}_bstr_tstr,value;
intnItem=0;
CStringstrItem;
while(!
pSet->
adoEOF)
strItem.Format("
%d"
nItem+1);
m_ListCtrl.InsertItem(nItem,strItem);
for(i=0;
{
Index.iVal=i;
str=flds->
GetName();
value=pSet->
GetCollect(str);
m_ListCtrl.SetItemText(nItem,i+1,(LPSTR)value);
}
pSet->
MoveNext();
nItem++;
pSet->
Close();
4.用MFCClassWizard为Cjy001View类添加该菜单的COMMAND消息映射,并添加下列代码:
voidCjy001View:
OnStuinfoAdd()
//TODO:
Addyourcommandhandlercodehere
CStuInfoDlgdlg;
if(dlg.DoModal()!
=IDOK)return;
strText.Format("
SELECT*FROMstudentWHEREstudentname='
%s'
ANDstudentno='
dlg.m_strName,dlg.m_strNO);
CommandText=_bstr_t(str