1、字段名称数据类型字段大小小数位字段含义1studentname文本20姓名2studentno10学号3xb是/否性别4birthday日期/时间出生年月5special50专业表2 学生课程成绩表(score)结构8course7课程号score数字单精度成绩credit学分表3 课程信息表(course)结构courseno所属专业coursename课程名coursestype课程类型openterm字节开课学期6hours课时数二、程序框架界面及其添加的类1.为上述数据库添加并创建一个ODBC数据源 打开控制面板中的管理工具,如图1所示。图1 管理工具(2)双击ODBC图标,进入ODB
2、C数据管理器,如图2所示。在这里,用户可以设置一些ODBC数据源的一些信息。图2 ODBC数据源管理器(3)创建用户DSN单击“添加”按钮,弹出有一驱动程序列表的“创建新数据源”对话框,如图3所示。在这里选择“Micosoft Access Driver”。图3 “创建新数据源”对话框单击“完成”按钮,进入指定驱动程序的ODBC Access安装对话框,单击“选择”按钮,然后在数据源名输入“student”,如图4所示。图4 ODBC Access安装对话框单击“确定”按钮,刚才创建的用户数据源已被添加在“ODBC数据源管理器”的“用户数据源”列表中,如图5所示。图5 “用户数据源”列表2用M
3、FC AppWizard创建一个单文档应用程序student,在向导的第6步选择基类CListView。3.在应用程序项目中,用Class Wizard为数据表student、score、course创建并添加CRecordSet的派生类:CStudentSet、CScoreSet和CCourseSet。4添加一个对话框资源IDD_STUINFO,用于学生信息数据的添加和修改。如图6所示为“学生信息”对话框,创建的对话框类为CStuInfoDlg。并依次为“学生信息”对话框的控件添加成员变量,如图7所示。图6 “学生信息”对话框图7 “学生信息”对话框添加成员变量5. 添加一个对话框资源IDD
4、_SCORE,用于学生课程成绩数据的添加和修改。如图8所示为“学生成绩”对话框,创建的对话框类为CscoreDlg。并依次为“学生成绩”对话框的控件添加成员变量,如图9所示。图8 “学生成绩”对话框图9 为“学生成绩”对话框添加成员变量6.添加一个对话框资源IDD_COURSE,用于课程信息数据的添加和修改。如图10所示为“课程信息”对话框,创建对话框类为CCourseDlg。并依次为“课程信息”对话框的控件添加成员变量,如图11所示。图10 “课程信息”对话框图11 为“课程信息”对话框添加成员变量7.设计菜单项和工具栏,如图12所示。图12 菜单栏和工具栏三、主要代码分析1.用MFC Cl
5、assWizard 为CStuInfoDlg类添加WM_INITDIALOG消息映射,并添加下列初始化代码:BOOL CStuInfoDlg:OnInitDialog() CDialog: OnInitDialog();if(m_strSex=女)CheckRadioButton(IDC_RADIO_M,IDC_RADIO_W,IDC_RADIO_W);elseCheckRadioButton(IDC_RADIO_M,IDC_RADIO_W,IDC_RADIO_M);m_strOKText.TrimLeft();GetDlgItem(IDOK)-SetWindowText(m_strOKTex
6、t);if(m_strOKText=修改GetDlgItem(IDC_EDIT_NAME)-EnableWindow(FALSE); GetDlgItem(IDC_EDIT_NO)-return TRUE;2.用MFC ClassWizard 为CStuInfoDlg类添加IDOK按钮的BN_CLILKED消息映射,并添加下列代码:void CStuInfoDlg:OnOK()UpdateData();m_strName.TrimLeft();m_strNO.TrimLeft();if(m_strName.IsEmpty()MessageBox(必须有姓名!);else if(m_strNO.
7、IsEmpty()必须有学号!3.为Cjy001View类添加一个成员函数DispAllRec,用于显示指定数据表的所有记录,并指定字段排序,strFiled默认参数值为,其代码如下:void Cjy001View:DispAllRec(CString tablename, CString strFiled)CListCtrl&m_ListCtrl=GetListCtrl();m_ListCtrl.DeleteAllItems();int nColumnCount=m_ListCtrl.GetHeaderCtrl()-GetItemCount();for(int i=0;iActiveConn
8、ection=m_pConnection;CString strText; strField.TrimLeft();if(strField.IsEmpty()strText.Format(SELECT*FROM %s,tablename);strText.Format(SELECT*FROM %s ORDER BY %s,tablename,strField);CommandText=_bstr_t(strText);_RecordsetPtr pSet;pSet.CreateInstance(_uuidof(Recordset);pSet=pCmd-Execute(NULL,NULL,adC
9、mdText);FiledsPtr flds=pSet-GetFields();_variant_t Index;Index.vt=VT_I2;m_ListCtrl.InsertColumn(0,序号,LVCEMT_LEFT,40);for(i=0;(int)flds-GetCount();Index.iVal=i;int nWidth=flds-GetItem(Index)-GetDefineSize()*9;if(nWidthGetName(),LVSFMT_LEFT,nWidth);_bstr_t str,value;int nItem=0;CString strItem;while(!
10、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.用MFC ClassWizard 为Cjy001View类添加该菜单的COMMAND消息映射,并添加下列代码:void Cjy001View:OnStuinfoAdd() / TODO: Add your command handler code hereCStuInfoDlg dlg;if(dlg.DoModal()!=IDOK)return;strText.Format(SELECT * FROM student WHERE studentname=%s AND studentno=,dlg.m_strName,dlg.m_strNO);CommandText=_bstr_t(str
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1