学生成绩管理系统详细操作过程_第1页
学生成绩管理系统详细操作过程_第2页
学生成绩管理系统详细操作过程_第3页
学生成绩管理系统详细操作过程_第4页
学生成绩管理系统详细操作过程_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学生成绩管理系统我将把我的实现步骤完整的写出来,我是在VC 6.0版本下用MFC实现的。我创建的基于单文档的应用程序,过程不介绍,大家都会。下面的是我系统菜单:思路:刚进入系统时,只有“登录”菜单可用,其他三个菜单项都是灰色不可用的。当用户点“进入系统”菜单项时,用户输入用户名、密码和用户类型,系统将根据相应的用户权限使相应的菜单可用,并且“进入系统”菜单项变为不可用。如:如果用户类型是学生,那么只有学生权限菜单可用,而“教师权限”和“管理员权限”都不可用,同时“进入系统”变为不可用。“学生权限”下只有“查询成绩”,因为学生只可以查询自己相应的成绩;“教师权限”下有“查询学生成绩”和“增改删学

2、生成绩”两个菜单项,因为教师除了可以查询学生成绩还可以增加、修改和删除学生成绩;“管理员权限”下有“管理学生”和“管理教师”两个菜单项。整体设计:因为我们要设置系统菜单的状态,所以必须在CMainFrame中添加相应的函数和代码,具体步骤如下:【步骤1】由于系统要使用ODBC类操作数据库,所以需要在stdafx.h中加入代码: #include <afxdb.h>【步骤2】在CMainFrame中的OnCreat()中添加代码如下,实现菜单的初始化工作,当用户没进入系统之前,只有“登陆”菜单下的“进入系统”菜单项可用,而“退出系统”和其他3个权限菜单都不可用,即都是灰色的。int

3、CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)/使“退出系统”和其他3个权限菜单都不可用,即都是灰色的GetMenu()->GetSubMenu(0)-> EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED); GetMenu()-> EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED); GetMenu()-> EnableMenuItem(2,MF_BYPOSITION | MF_DISAB

4、LED | MF_GRAYED); GetMenu()-> EnableMenuItem(3,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);【步骤3】在CMainFrame中添加自己定义的函数void SetMenuSta(int type),此函数在登陆对话框的OnOK()中被调用,即当用户进入系统后使“进入系统”菜单项不可用,并根据用户类型使相应菜单可用。当类型为1时(学生),使“学生权限”菜单可用;当类型为2时(教师),使“教师权限”菜单可用;当类型为3时,使“管理员”菜单可用。void CMainFrame:SetMenuSta(int typ

5、e)AfxGetMainWnd()->GetMenu()->GetSubMenu(0)->EnableMenuItem(0,MF_BYPOSITION | MF_DISABLED | MF_GRAYED); if(type=1) AfxGetMainWnd()->GetMenu()->EnableMenuItem(1,MF_BYPOSI TION | MF_ENABLED);/在上面的OnCreate中可以直接通过GetMenu()对菜单操作, /但这里却必须先通过AfxGetMainWnd()获得主窗体指针, /浪费了我一晚上时间,虽然解决了,但还不知道为什么。

6、 if(type=2) AfxGetMainWnd()->GetMenu()->EnableMenuItem(2,MF_BYPOSITION | MF_ENABLED); if(type=3) AfxGetMainWnd()->GetMenu()->EnableMenuItem(3,MF_BYPOSITION | MF_ENABLED);【步骤4】通过上面两步并不能按我们的想法实现菜单变灰的操作,运行系统各菜单都是可用的,我们必须在CMainFrame的构造函数中添加下面一句代码:m_bAutoMenuEnable=FALSE; m_bAutoMenuEnable必须放

7、在CMainFrame()里初始化,不可用放在登陆对话框的OnOK()函数中,要不其他三个菜单可用变灰,但“进入系统”菜单项却总是不能变灰。数据库设计:根据以上思路,我们使用SQL数据库建立一个“学生成绩管理系统”,其下有4张表,分别为用户表USERS、学生成绩表COURSE_SCORE、学生信息表STUDENT_INFO和教师信息表TEACHER_INFO。表1 用户表USERS字段名 类型 长度 说明USER_ID char 20 用户名USER_PASSWORD char 20 密码USER_TYPE int 4 1为学生,2为教师,3为管理员表2 学生成绩表COURSE_SCORE字段

8、名 类型 长度 说明STU_ID char 10 学生ID,系统中学生的唯一标识COURSE_ID char 10 课程号,系统中课程的唯一标识COURSE_NAME char 10 课程名SCORE int 4 课程分数表3 学生信息表STUDENT_INFO字段名 类型 长度 说明STU_ID char 10 学生ID,系统中学生的唯一标识STU_NAME char 10 学生姓名ENROLLMENT_TIME datetime 8 入学时间DEPARTMENT char 20 所在学院MAJOR char 20 所在专业SEX int 4 性别:0表示男,1表示女BIRTHDAY dat

9、etime 8 生日HOMETOWN varchar 50 籍贯ADDRESS varchar 50 现在住址PHONE char 20 个人电话号码RACE char 10 民族PARTY int 4 政治面貌:0表示党员,1表示预备党员,2表示团员,3表示其他 DIRECTION varchar 50 其他信息具体实现步骤:(一)登陆模块设计1、当刚进入系统时候,用户点击“进入系统”菜单项后系统界面如下:按上面的登陆对话框摆放好控件,其中各个控件ID及对应变量如下图所示:从上图中也可以看出,我们为该登陆对话框建立了个新类:CLoginDlg,它的具体创建过程就不介绍了。2、因为登陆对话框要

10、使用SQL数据库中的USERS表,所以需要在程序中添加类CLoginSet,步骤如下:【步骤1】在项目名“学生成绩管理系统”上单击鼠标右键,在弹出的New Class对话框中的Name文本框中输入CLoginSet,在Base class下拉文本框中选择CRecordset。【步骤2】单击OK按钮,弹出Database Option对话框,在ODBC下拉文本框中选择“学生成绩管理系统”数据库,单击OK按钮,弹出Select Database Tables对话框,选择dbo.USERS选项,单击OK按钮。这样就建立了一个CRecordset的对象,就可以对数据库中的USERS表进行操作了。3、在

11、LoginDlg.cpp中引入头文件LoginSet.h,将CRecordSet对象CLoginSet引入登陆对话框: #include “LoginSet.h”4、声明全局变量。在学生成绩管理系统.cpp文件中添加如下代码:/ CDatabase型变量,用于连接数据库CDatabase m_database;/学生登陆后在系统中的唯一ID值CString m_ID;在LoginDlg.cpp添加如下语句,使用已经声明过的全局变量(记得在以后的每个模块中都要添加):extern CDatabase m_database;extern CString m_ID;5、为登陆对话框的“确定”按钮添加

12、消息代码,如下:void CLoginDlg:OnOK() BOOL bLogin=FALSE;CLoginSet *m_recordset=new CLoginSet(&m_database); CString strSQL;UpdateData(TRUE);if(m_usetype.Compare("学生")=0)type=1;elseif(m_usetype.Compare("教师")=0)type=2;elseif(m_usetype.Compare("管理员")=0)type=3;strSQL.Format(&quo

13、t;select * from USERS where USER_ID='%s' AND USER_PASSWORD='%s' AND USER_TYPE='%d'",m_useID,m_usepassword,type);m_recordset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);if(m_recordset->GetRecordCount()=0)if(count<3)MessageBox("用户名或密码不正确!");m_useID=""

14、;m_usepassword=""UpdateData(FALSE); /没有这条语句就不能实现使账号和密码文本框为空,很多人会忘记写这条语句。 count+;elseMessageBox("错误次数达三次以上,本窗口即将关闭!");EndDialog(IDCANCEL);else m_recordset->GetFieldValue("USER_ID",m_ID);bLogin=TRUE;if(bLogin)MessageBox("欢迎进入学生成绩管理系统!");EndDialog(IDOK);CMainF

15、rame *mainfrm=new CMainFrame();mainfrm->SetMenuSta(type); else m_database.Close();/CDialog:OnOK(); 6、为登陆菜单下的“进入系统”添加响应函数,此函数是在CMainFrame类中添加的,代码如下:void CMainFrame:OnLogin() / TODO: Add your command handler code hereCLoginDlg login; login.DoModal();(二)学生成绩查询模块设计 1、 如果用户类型是1,即学生时,用户可以查询自己的成绩。 在其中用户

16、可以根据课程号或者课程名查询自己的成绩。按上面的学生成绩查询对话框摆放好控件,其中各个控件ID及对应变量如下图所示:从上图中也可以看出,我们为该学生成绩查询对话框建立了个新类:CStuCheckScoreDlg,它的具体创建过程就不介绍了。2、因为学生成绩查询对话框要使用SQL数据库中的COURSE_SCORE表,所以需要在程序中添加类CCourseScoreSet,步骤如下:【步骤1】在项目名“学生成绩管理系统”上单击鼠标右键,在弹出的New Class对话框中的Name文本框中输入CCourseScoreSet,在Base class下拉文本框中选择CRecordset。【步骤2】单击OK

17、按钮,弹出Database Option对话框,在ODBC下拉文本框中选择“学生成绩管理系统”数据库,单击OK按钮,弹出Select Database Tables对话框,选择dbo. COURSE_SCORE选项,单击OK按钮。这样就建立了一个CRecordset的对象,就可以对数据库中的COURSE_SCORE表进行操作了。3、在StuCheckScoreDlg.cpp中引入头文件CourseScoreSet.h,将CRecordSet对象CCourseScoreSet引入登陆对话框: #include “CourseScoreSet.h”4、 在StuCheckScoreDlg.cpp添

18、加如下语句,使用已经声明过的全局变量(记得在以后的每个模块中都要添加):extern CDatabase m_database;extern CString m_ID;5、为学生成绩查询模块的“查询”按钮添加响应事件:void CStuCheckScoreDlg:OnCheckButton() CString strSQL;CDBVariant varValue;UpdateData(TRUE);if(m_keyword.Compare("课程号")=0)strSQL.Format("select * from COURSE_SCORE where COURSE_

19、ID='%s'",m_cost); elsestrSQL.Format("select * from COURSE_SCORE where COURSE_NAME='%s'",m_cost); CCourseScoreSet *m_recordset=new CCourseScoreSet(&m_database);m_recordset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);if(m_recordset->GetRecordCount()=0)MessageBox(&quo

20、t;对不起,没有您所需要的结果,请核对后重新输入!");elseint temp=0;m_stuID=m_recordset->m_STU_ID;m_courseID=m_recordset->m_COURSE_ID;m_coursename=m_recordset->m_COURSE_NAME;m_score=m_recordset->m_SCORE;m_recordset->Close();UpdateData(FALSE);注意:在上面我们对对话框中各个文本框对应的变量进行赋值时,并不是使用 m_recordset->GetFieldValu

21、e(3,varValue); m_coursename=varValue.m_pstring->GetBuffer(1);不用这么麻烦的写法,直接用m_recordset中的变量就行了,m_recordset中的变量对应这数据库表中的各个字段,且和表中字段类型都一致。(三)教师操作学生成绩信息模块设计 1、 如果用户类型是2,即教师时,用户可以查询学生的成绩,还可以对学生成绩进行增、改、删操作。查询学生成绩和上个模块差不多,就不做了。而对学生成绩的增、改、删操作就是通过这个模板实现的。界面如下:在其中的列表控件中显示COURSE_SCORE中所有的信息,并且当用户点击其中一行时,可以在上

22、面的文本框中进行显示。按上面的对话框摆放好控件,其中各个控件ID及对应变量如下图所示:从上图中也可以看出,我们为该教师操作学生成绩对话框建立了个新类:COperateScore,它的具体创建过程就不介绍了。2、因为教师操作学生成绩对话框也要使用SQL数据库中的COURSE_SCORE表,所以需要在OperateScore.cpp中引入在前面创建的COURSE_SCORE表所对应的记录集对象的头文件CourseScoreSet.h,将CRecordSet对象CCourseScoreSet引入登陆对话框: #include “CourseScoreSet.h”3、 在OperateScore.cp

23、p添加如下语句,使用已经声明过的全局变量(记得在以后的每个模块中都要添加):extern CDatabase m_database;extern CString m_ID;4、因为该对话框中含有列表控件,我们需要对其进行初始化,让列表控件一开始就显示COURSE_SCORE表中的所有记录,并且把列表控件中的第一条记录显示在上面的文本框中。 【步骤1】右键点击COperateScore,在弹出的菜单中选择“Add windows message handle”项,然后在弹出的对话框的“新建windows消息/事件”中选择“WM_INITDIALOG”,然后点击“Add Handle”按钮,最后点

24、击“Edit Existing”按钮,编写代码如下:BOOL COperateScore:OnInitDialog() CDialog:OnInitDialog();m_listscore.InsertColumn(0,"学号"); m_listscore.InsertColumn(1,"课程号"); m_listscore.InsertColumn(2,"课程名"); m_listscore.InsertColumn(3,"成绩"); RECT rect; m_listscore.GetWindowRect(&a

25、mp;rect); int width=rect.right-rect.left; m_listscore.SetColumnWidth(0,width/4); m_listscore.SetColumnWidth(1,width/4); m_listscore.SetColumnWidth(2,width/4); m_listscore.SetColumnWidth(3,width/4); m_listscore.SetExtendedStyle(LVS_EX_FULLROWSELECT); initial();/ TODO: Add extra initialization hereret

26、urn TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE 【步骤2】在上面的OnInitDialog()函数中我们设置了列表控件的表头和每列的间距,并在最后调用了initial()函数。initial()是我自定义的一个函数,用来将COURSE_SCORE表中的数据全部在该列表控件中显示出来。该函数是自定义函数,添加过程比较简单,不介绍。代码如下:void COperateScore:initial()m_listscore.

27、DeleteAllItems(); CDBVariant varValue204;CCourseScoreSet m_recordset; int j=m_recordset.GetDatebase(varValue);int k;int i=0; char buf20;for(k=0;k<j;k+) /用来处理数据表中的字符型字段m_listscore.InsertItem(i,varValuek0.m_pstring->GetBuffer(1);m_listscore.SetItemText(i,1,varValuek1.m_pstring->GetBuffer(1);m

28、_listscore.SetItemText(i,2,varValuek2.m_pstring->GetBuffer(1);/用来处理数据表中的整型字段sprintf(buf,"%d",varValuek3.m_iVal);m_listscore.SetItemText(i,3,buf);i=0;settext(0);varValue204是CDBVariant型的,该类型的变量可以用来存储数据表中任意类型的字段,所在在数据库操作时用该变量比较方便。变量j表示COURSE_SCORE数据表中的行数,通过for循环把该数据表中的所有记录全部显示出来。数据表中的前3个字段

29、我都是用varValuek0.m_pstring->GetBuffer(1)来显示在列表控件中,是因为数据表中前3个字段都是字符型的,而最后一个字段是用来显示分数的,该字段在数据表中我定义为了整型,所有用sprintf(buf,"%d",varValuek3.m_iVal); m_listscore.SetItemText(i,3,buf);来显示。【步骤3】在上面的initial()函数中我调用了GetDatebase(varValue)函数,该函数返回COURSE_SCORE数据表中的记录条数,我们将其赋给了j。并且该函数把COURSE_SCORE表中所有记录都存

30、储在二维数组varValue中。在前面两个模块中我对数据库操作都是直接在该模块中操作的,但现在我要换种方法。我把对数据库的操作封装在了记录集类CCourseScoreSet中,这样避免混乱。在记录集类CCourseScoreSet中添加GetDatebase(varValue)函数,注意:因为我们要在类COperateScore调用该函数,所有我们必须要把该函数定义为public型。其代码如下:int CCourseScoreSet:GetDatebase(CDBVariant varValue4)CCourseScoreSet m_recordset(&m_database);CSt

31、ring strSQL;strSQL.Format("select *from COURSE_SCORE");m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);if(m_recordset.GetRecordCount()!=0)m_recordset.MoveFirst();int j=0;while(!m_recordset.IsEOF()for(int i=0;i<4;i+)m_recordset.GetFieldValue(i,varValueji);j+;m_recordset.MoveNext();m_rec

32、ordset.Close();return j;【步骤4】在步骤2的initial()函数最后我们调用了settext(int index)函数,该函数也是一个自定义函数,用来将列表控件中的指定索引的记录显示在上面的文本框中。自定义函数的添加方法不做介绍,代码如下:void COperateScore:settext(int index) m_stuID=m_listscore.GetItemText(index,0); m_courseID=m_listscore.GetItemText(index,1); m_coursename=m_listscore.GetItemText(index

33、,2); m_score=m_listscore.GetItemText(index,3); UpdateData(FALSE); 【步骤5】因为我还需要实现:当点击列表控件中的一行时,对应的记录能够显示在上面的文本框中,所以还需要为列表控件添加单击事件。添加方法如下:首先:切换都ResourceView,在Dialog下双击IDD_OPERATE_SCORE_DIALOG,在该对话框中选中列表控件,右击,选择“建立类向导”。然后:在弹出的MFC ClassWizard对话框中的“Object IDs”下选择列表控件的ID:ID_LIST_SCORE,在“Messages”下选择“NM_CLI

34、CK”,单击“Add Function”按钮,最后单击“Edit Code”按钮,添加代码如下:void COperateScore:OnClickListScore(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code hereint i=m_listscore.GetSelectionMark();settext(i);*pResult = 0;至此,对该模块的初始化工作全部完成,接下来对该模块中的4个按钮分别添加消息响应函数。5、为该模块中的“录入成绩”按钮添加消息响应函数,

35、双击该按钮,添加代码如下:void COperateScore:OnInputScoreButton() / TODO: Add your control notification handler code hereCCourseScoreSet *m_recordset=new CCourseScoreSet(&m_database); CString strSQL;UpdateData(TRUE);int m_int_score;m_int_score = atoi(m_score);strSQL.Format("insert into COURSE_SCORE(STU_

36、ID,COURSE_ID,COURSE_NAME,SCORE) values('%s','%s','%s','%d') ",m_stuID,m_courseID,m_coursename,m_int_score);m_database.ExecuteSQL(strSQL);initial();MessageBox("录入成绩成功!");函数中的int m_int_score; m_int_score = atoi(m_score);两条语句是将m_score转换为int型,因为m_score是与文本框

37、“成绩”相关联的变量,我将其定义为了字符型,但SQL数据表中成绩字段是int型,所以必须先进行转化。调用initial()函数是将插入操作完成,数据表中记录发生更新后的记录重新在列表控件中显示出来,实现一种动态的效果。6、为“修改成绩”按钮添加消息响应函数,双击该按钮,添加代码如下:void COperateScore:OnModifyScoreButton() / TODO: Add your control notification handler code hereCCourseScoreSet *m_recordset=new CCourseScoreSet(&m_databa

38、se); CString strSQL;UpdateData(TRUE);int m_int_score;m_int_score = atoi(m_score);strSQL.Format(" update COURSE_SCORE set SCORE='%d' whereSTU_ID='%s' and COURSE_ID='%s' ",m_int_score,m_stuID,m_courseID);m_database.ExecuteSQL(strSQL);initial();MessageBox("修改成绩成功!

39、"); 7、为“删除成绩”按钮添加消息响应函数,双击该按钮,添加代码如下:void COperateScore:OnDeleteScoreButton() / TODO: Add your control notification handler code hereCCourseScoreSet *m_recordset=new CCourseScoreSet(&m_database); CString strSQL;UpdateData(TRUE);strSQL.Format(" delete from COURSE_SCORE where STU_ID='

40、;%s' and COURSE_ID='%s' ",m_stuID,m_courseID);m_database.ExecuteSQL(strSQL);initial();MessageBox("删除成绩成功!"); 8、为“取消”按钮添加消息响应函数,双击该按钮,添加代码如下:void COperateScore:OnCancelButton() / TODO: Add your control notification handler code hereEndDialog(IDCANCEL);(四)学生信息管理模块设计1、 如果用户类型

41、是3,即管理员时,管理员可以对学生的信息进行管理,也可以对教师的信息进行管理。对教师的信息进行管理模块和对学生的信息进行管理模块差不多,就不做了。而对学生信息进行管理包括对学生信息的查询和增改删操作,界面如下所示:在其中的列表控件中显示STUDENT_INFO表中所有的信息,并且当用户点击其中一行时,可以在上面的文本框中进行显示。对于查询操作,管理员可以根据姓名进行查询,也可以根据学号进行查询。按上面的对话框摆放好控件,其中各个控件ID及对应变量如下图所示:由于对话框中控件太多,还有几个变量如下:重复了几个变量,大家见谅,本来只想把那剩下的几个变量截图给大家看看的,可以截下来后粘贴不上,只好又

42、整体截图了。从上图中也可以看出,我们为该对话框建立了个新类:CManageStuDlg,它的具体创建过程就不介绍了。2、因为学生信息管理对话框要使用SQL数据库中的STUDENT_INFO表,所以需要在程序中添加类CStudentInfoSet,步骤如下:【步骤1】在项目名“学生成绩管理系统”上单击鼠标右键,在弹出的New Class对话框中的Name文本框中输入CStudentInfoSet,在Base class下拉文本框中选择CRecordset。【步骤2】单击OK按钮,弹出Database Option对话框,在ODBC下拉文本框中选择“学生成绩管理系统”数据库,单击OK按钮,弹出Se

43、lect Database Tables对话框,选择dbo. STUDENT_INFO选项,单击OK按钮。这样就建立了一个CRecordset的对象,就可以对数据库中的STUDENT_INFO表进行操作了。3、在ManageStuDlg.cpp中引入在前面创建的STUDENT_INFO表所对应的记录集对象的头文件StudentInfoSet.h,将CRecordSet对象CStudentInfoSet引入登陆对话框: #include “StudentInfoSet.h”4、 在ManageStuDlg.cpp添加如下语句,使用已经声明过的全局变量(记得在以后的每个模块中都要添加):exter

44、n CDatabase m_database;extern CString m_ID;5、因为该对话框中含有列表控件,我们需要对其进行初始化,让列表控件一开始就显示STUDENT_INFO表中的所有记录,并且把列表控件中的第一条记录显示在上面的文本框中。 【步骤1】右键点击CManageStuDlg,在弹出的菜单中选择“Add windows message handle”项,然后在弹出的对话框的“新建windows消息/事件”中选择“WM_INITDIALOG”,然后点击“Add Handle”按钮,最后点击“Edit Existing”按钮,编写代码如下:BOOL CManageStuDl

45、g:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization herem_student_list.InsertColumn(0,"学号"); m_student_list.InsertColumn(1,"姓名"); m_student_list.InsertColumn(2,"入学时间"); m_student_list.InsertColumn(3,"所在学院");m_student_list.InsertColumn(4,&q

46、uot;专业");m_student_list.InsertColumn(5,"性别");m_student_list.InsertColumn(6,"出生日期");m_student_list.InsertColumn(7,"籍贯");m_student_list.InsertColumn(8,"现在住址");m_student_list.InsertColumn(9,"电话号码");m_student_list.InsertColumn(10,"民族");m_s

47、tudent_list.InsertColumn(11,"政治面貌");m_student_list.InsertColumn(12,"其他"); RECT rect; m_student_list.GetWindowRect(&rect); int width=rect.right-rect.left; m_student_list.SetColumnWidth(0,width/7); m_student_list.SetColumnWidth(1,width/7); m_student_list.SetColumnWidth(2,width/

48、7); m_student_list.SetColumnWidth(3,width/7); m_student_list.SetColumnWidth(4,width/7);m_student_list.SetColumnWidth(5,width/7);m_student_list.SetColumnWidth(6,width/7);m_student_list.SetColumnWidth(7,width/7);m_student_list.SetColumnWidth(8,width/7);m_student_list.SetColumnWidth(9,width/7);m_studen

49、t_list.SetColumnWidth(10,width/7);m_student_list.SetColumnWidth(11,width/7);m_student_list.SetColumnWidth(12,width/7); m_student_list.SetExtendedStyle(LVS_EX_FULLROWSELECT); initial();settext(0);return TRUE; 【步骤2】在上面的OnInitDialog()函数中我们设置了列表控件的表头和每列的间距,并在最后调用了initial()函数。initial()是我自定义的一个函数,用来将STUDE

50、NT_INFO表中的数据全部在该列表控件中显示出来。而settext(0)是将列表控件的第一条记录显示在上面对应的文本框中。initial()该函数是自定义函数,添加过程比较简单,不介绍。代码如下:void CManageStuDlg:initial()m_student_list.DeleteAllItems(); CDBVariant varValue2013;CStudentInfoSet m_recordset; int j=m_recordset.GetDatebase(varValue);int k;int i=0; char buf20;for(k=0;k<j;k+)m_s

51、tudent_list.InsertItem(i,varValuek0.m_pstring->GetBuffer(1);m_student_list.SetItemText(i,1,varValuek1.m_pstring->GetBuffer(1);/对数据表中的datatime型数据进行操作 sprintf(buf,"%d-%d-%d",varValuek2.m_pdate->year,varValuek2.m_pdate- >month,varValuek2.m_pdate->day);m_student_list.SetItemText

52、(i,2,buf); m_student_list.SetItemText(i,3,varValuek3.m_pstring->GetBuffer(1);m_student_list.SetItemText(i,4,varValuek4.m_pstring->GetBuffer(1);/对数据表中int型数据进行操作sprintf(buf,"%d",varValuek5.m_iVal);m_student_list.SetItemText(i,5,buf); /对数据表中的datatime型数据进行操作 sprintf(buf,"%d-%d-%d&qu

53、ot;,varValuek6.m_pdate->year,varValuek6.m_pdate->month,varValuek6.m_pdate->day);m_student_list.SetItemText(i,6,buf);m_student_list.SetItemText(i,7,varValuek7.m_pstring->GetBuffer(1);m_student_list.SetItemText(i,8,varValuek8.m_pstring->GetBuffer(1);m_student_list.SetItemText(i,9,varVal

54、uek9.m_pstring->GetBuffer(1);m_student_list.SetItemText(i,10,varValuek10.m_pstring->GetBuffer(1);/对数据表中int型数据进行操作sprintf(buf,"%d",varValuek11.m_iVal);m_student_list.SetItemText(i,11,buf);m_student_list.SetItemText(i,12,varValuek12.m_pstring->GetBuffer(1);i=0;变量j表示STUDENT_INFO数据表中的行数,通过for循环把该数据表中的所有记录全部显示出来。【步骤3】在上面的initial()函数中我调用了GetDatebase(varValue)函数,该函数返回STUDENT_INFO数据表中的记录条数,我们将其赋给了j。并且该函数把STUDENT_INFO表中所有记录都存储在二维数组varValue中。我把对数据库的操作封装在了记录集类CStudentInfoSet中,这样避免混乱。在记录集类CStudentInfoSet中添加GetDatebase(varValue)函数,注意:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论