版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学生成绩管理系统我将把我的实现步骤完整的写出来,我是在 VC 6.0版本下用MFC实现的。 我创建的基于单文档的应用程序,过程不介绍,大家都会。下面的是我系统 菜单:思路:刚进入系统时,只有“登录”菜单可用,其他三个菜单项都是灰色不可用的。 当用户点“进入系统”菜单项时,用户输入用户名、密码和用户类型,系统将根 据相应的用户权限使相应的菜单可用,并且“进入系统”菜单项变为不可用。女口:如果用户类型是学生,那么只有学生权限菜单可用,而“教师权限”和“管理员 权限”都不可用,同时“进入系统”变为不可用。“学生权限”下只有“查询成绩”,因为学生只可以查询自己相应的成绩;“教师权限”下有“查询学生成绩
2、”和“增改删学生成绩”两个菜单项,因为教 师除了可以查询学生成绩还可以增加、修改和删除学生成绩;“管理员权限”下有“管理学生”和“管理教师”两个菜单项。整体设计:因为我们要设置系统菜单的状态,所以必须在CMainFrame中添加相应的函 数和代码,具体步骤如下:【步骤1】由于系统要使用ODBC类操作数据库,所以需要在stdafx.h中加 入代码:#in clude 【步骤2】在CMainFrame中的OnCreat()中添加代码如下,实现菜单的初始 化工作,当用户没进入系统之前,只有“登陆”菜单下的“进入系统”菜单项可 用,而“退出系统”和其他3个权限菜单都不可用,即都是灰色的。int CMa
3、i nFrame:O nCreate(LPCREATESTRUCT IpCreateStruct)使“退出系统”和其他3个权限菜单都不可用,即都是灰色的GetMe nu()-GetSubMe nu(0)- En ableMe nultem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);GetMenu()- EnableMenultem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);GetMenu()- EnableMenultem(2,MF_BYPOSITION | MF_DISABLED | MF_GRAYED)
4、;GetMenu()- EnableMenultem(3,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);【步骤3】在CMainFrame中添加自己定义的函数 void SetMenuSta(int type), 此函数在登陆对话框的 On OK()中被调用,即当用户进入系统后使“进入系统”菜单项不可用,并根据用户类型使相应菜单可用。当类型为1时(学生),使“学生权限”菜单可用;当类型为 2时(教师),使“教师权限”菜单可用;当类型 为3时,使“管理员”菜单可用。void CMai nFrame:SetMe nuSta( int type)AfxGetMai
5、nWnd()-GetMe nu()-GetSubMe nu(0)-E nableMe nultem(0,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);if(type=1) AfxGetMai nWnd()-GetMe nu()-E nableMe nultem(1,MF_BYPOSI TION | MF_ENABLED);/在上面的On Create中可以直接通过GetMe nu()对菜单操作,但这里却必须先通过AfxGetMainWnd()获得主窗体指针,浪费了我一晚上时间,虽然解决了,但还不知道为什么。 if(type=2) AfxGetMa in Wn
6、d()-GetMe nu()-E nableMe nultem(2,MF_BYPOSIT ION | MF_ENABLED);if(type=3)AfxGetMa in Wnd()-GetMe nu()-E nableMe nultem(3,MF_BYPOSIT ION | MF_ENABLED);【步骤4】通过上面两步并不能按我们的想法实现菜单变灰的操作,运行系统各菜单都是可用的,我们必须在CMainFrame的构造函数中添加下面一句代码: m_bAutoMe nuE nable=FALSE;m_bAutoMenuEnable必须放在 CMainFrame()里初始化,不可用放在登陆对话框的
7、_On OK()函数中,要不其他三个菜单可用变灰,但“进入系统”菜单项却 总是不能变灰。数据库设计:根据以上思路,我们使用SQL数据库建立一个“学生成绩管理系统”,其下 有4张表,分别为用户表 USERS、学生成绩表 COURSE_SCORE、学生信息表 STUDENT_INFO 和教师信息表 TEACHER_INFO。表1用户表USERS字段名类型 长度说明USER IDchar20用户名USER_PASSWORDchar20密码USER TYPEint41为学生,2为教师,3为管理员表2学生成绩表COURSE SCORE字段名类型长度说明STU_IDchar10学生ID,系统中学生的唯一标
8、识COURSE_IDchar10课程号,系统中课程的唯一标识COURSE_NAMEchar10课程名SCOREint4课程分数表3学生信息表STUDENT INFO字段名类型长度说明STU_IDchar10学生ID,系统中学生的唯一标识STU_NAMEchar10学生姓名ENROLLMENT_TIME datetime8入学时间DEPARTMENTchar20所在学院MAJORchar20所在专业SEXint4性别:0表示男,1表示女BIRTHDAYdatetime8生日HOMETOWNvarchar50籍贯ADDRESSvarchar50现在住址PHONEchar20个人电话号码RACEch
9、ar10民族PARTYint4政治面貌:0表示党员,1表示预 备党员,2表示团员,3表示其他DIRECTIONvarchar50其他信息具体实现步骤:(一)登陆模块设计1、当刚进入系统时候,用户点击“进入系统”菜单项后系统界面如下:按上面的登陆对话框摆放好控件,其中各个控件ID及对应变量如下图所示:从上图中也可以看出,我们为该登陆对话框建立了个新类:CLoginDlg,它的具体创建过程就不介绍了。2、因为登陆对话框要使用SQL数据库中的USERS表,所以需要在程序中 添加类CLoginSet,步骤如下:【步骤1】在项目名“学生成绩管理系统”上单击鼠标右键,在弹出的NewClass对话框中的Na
10、me文本框中输入 CLog in Set,在Base class下拉文本框中选 择 CRecordse。【步骤2】单击0K按钮,弹出Database Option对话框,在ODBC下拉文 本框中选择“学生成绩管理系统”数据库,单击OK按钮,弹出Select DatabaseTables对话框,选择 dbo.USERS选项,单击 OK按钮。这样就建立了一个 CRecordset的对象,就可以对数据库中的 USERS表进行操作了。3、在 LoginDlg.cpp 中引入头文件 LoginSet.h,将 CRecordSet对象 CLoginSet 引入登陆对话框:#include LoginSet
11、.h”4、声明全局变量。在学生成绩管理系统.cpp文件中添加如下代码:/ CDatabaseS变量,用于连接数据库CDatabase m_database;学生登陆后在系统中的唯一 ID值CStri ng mD;在LoginDlg.cpp添加如下语句,使用已经声明过的全局变量(记得在以后 的每个模块中都要添加):exter n CDatabase m_database;extern CStri ng m_ID;5、为登陆对话框的“确定”按钮添加消息代码,如下:void CLogi nDlg:O nOK()BOOL bLogi n=FALSE;CLoginSet *m_recordset=new
12、 CLoginSet(&m_database);CStri ng 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(select * from USERS where USER_ID=%s ANDUSER_PASSWORD=%s AND USER_TYPE=%d, m_uselD,m_usepassword,type);m_recordset-Op
13、e n(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_recordset-GetRecordCo un t()=0)if(cou ntGetFieldValue(USERD,mD); bLogi n=TRUE;if(bLogi n)MessageBox(欢迎进入学生成绩管理系统!);En dDialog(IDOK);CMai nF rame *mai nfrm=new CMainF rame();main frm-SetMe nu Sta(type);elsem_database.Close();/CDialog: On OK();6、为登陆菜单下的“进入系统”添
14、加响应函数,此函数是在 CMainFrame 类中添加的,代码如下:void CMai nF rame:O nLog in()/ TODO: Add your comma nd han dler code hereCLog inDig logi n;logi n.DoModal();(二) 学生成绩查询模块设计1、如果用户类型是1,即学生时,用户可以查询自己的成绩。学生成域查询X查询学生成绩信息诸输人杳询条件:选择关键宇:I1输入对应值:査询查询结果:学号:谍程编号:谍程名:战绩:卩在其中用户可以根据课程号或者课程名查询自己的成绩。按上面的学生 成绩查询对话框摆放好控件,其中各个控件ID及对应
15、变量如下图所示:?|X)Message MapsMember VariablesAutomationAdiveX LvenlsClass Into偉生歳绩曾理柔死|cSluCheckScc reDigT|project:Class name:F:rStuCheckScoreDIg-h, FX AStuCheckScoreDIg cppAdd Class.Add Variable.,Conlrol IDs:TypeMemberOelele VairiableCOMBO KEYWORDC SiringCOSTC SiringCOURSE IDC SiringCOURSENAWEC SiringSC
16、OHtintSTU IDC SiringIDCIDCIDCIDCIDCIDCIDC CIIIZCK BUTTONkeywardUpdate olumn&cost course ID coursename score stu IDBind AllFC ClasslizaidDescription: CSlring with lenglb validationMandmunt Character?:确圭取悄从上图中也可以看出,我们为该学生成绩查询对话框建立了个新类:CStuCheckScoreDIg它的具体创建过程就不介绍了。2、因为学生成绩查询对话框要使用 SQL数据库中的COURSE_SCOR
17、E表,所以 需要在程序中添加类CCourseScoreSet步骤如下:【步骤1】在项目名“学生成绩管理系统”上单击鼠标右键,在弹出的 New Class对话框中的Name文本框中输入 CCourseScoreSe,在Base class下拉文本 框中选择CRecordse。【步骤2】单击0K按钮,弹出Database Option对话框,在ODBC下拉文本框中选择“学生成绩管理系统”数据库,单击OK按钮,弹出Select DatabaseTables对话框,选择dbo. COURSE_SCORE选项,单击OK按钮。这样就建立了 一个CRecordset的对象,就可以对数据库中的COURSE_S
18、CORE表进行操作了。3、在 StuCheckScoreDlg.cpp中引入头文件 CourseScoreSet.hh将 CRecordSet对象 CCourseScoreSe引入登陆对话框:#include CourseScoreSet.h4、在StuCheckScoreDlg.cpp添加如下语句,使用已经声明过的全局变量(记得 在以后的每个模块中都要添加):exter n CDatabase m_database;extern CStri ng m_ID;5、为学生成绩查询模块的“查询”按钮添加响应事件:void CStuCheckScoreDlg:O nCheckButto n()CSt
19、ri ng strSQL;CDBVaria nt varValue;UpdateData(TRUE);if(m_keyword.Compare(课程号)=0)strSQL.Format(select*fromCOURSE_SCOREwhereCOURSED=%s”:m_cost);elsestrSQL.Format(select*fromCOURSE_SCOREwhereCOURSE_NAME=%s,m_cost);CCourseScoreSet *m_recordset=new CCourseScoreSet(&m_database); m_recordset-Ope n(AFX_DB_US
20、E_DEFAULT_TYPE,strSQL); if(m_recordset-GetRecordCo un t()=0) _MessageBox(对不起,没有您所需要的结果,请核对后重新输入!);elseint temp=0;m_stulD=m_recordset-m_STUD; m_courselD=m_recordset-m_COURSED;m_course name=m_recordset-m_COURSE_NAME; m_score=m_recordset-m_SCORE; 一m_recordset-Close();UpdateData(FALSE);注意:在上面我们对对话框中各个文本
21、框对应的变量进行赋值时,并不是使用m_recordset-GetFieldValue(3,varValue);m_course name=varValue.m_pstri ng-GetBuffer(1);不用这么麻烦的写法,直接用 m_recordset中的变量就行了, m_recordset中的变 量对应这数据库表中的各个字段,且和表中字段类型都一致。(三) 教师操作学生成绩信息模块设计1、如果用户类型是2,即教师时,用户可以查询学生的成绩,还可以对 学生成绩进行增、改、删操作。查询学生成绩和上个模块差不多,就不做了。而 对学生成绩的增、改、删操作就是通过这个模板实现的。界面如下:学号:?0
22、10003谍程集号:0連程名:F”分数:阿录人成绩修改战绩剧除成绩呈生成绩列表:事号谍程号课程名歳20100032C+62201D0024高筹数学S120100014盘答数学S52D100013数据眸技术76201D0022C+ +552D100021C语言782D100012C+3220100011心语言1 ,在其中的列表控件中显示 COURSE_SCORE中所有的信息,并且当用户点击其 中一行时,可以在上面的文本框中进行显示。 按上面的对话框摆放好控件,其中 各个控件ID及对应变量如下图所示:从上图中也可以看出,我们为该教师操作学生成绩对话框建立了个新类: COperateScore它的具
23、体创建过程就不介绍了。2、 因为教师操作学生成绩对话框也要使用SQL数据库中的COURSE_SCORE 表,所以需要在OperateScore.cpp中引入在前面创建的 COURSE_SCORE表所对 应的记录集对象的头文件 CourseScoreSet.h将CRecordSet对象CCourseScoreSet 引入登陆对话框:#include CourseScoreSet.fi3、 在OperateScore.cpp添加如下语句,使用已经声明过的全局变量(记得在以 后的每个模块中都要添加):exter n CDatabase m_database;extern CStri ng m_ID;
24、4、因为该对话框中含有列表控件,我们需要对其进行初始化,让列表控件一开 始就显示COURSE_SCORE表中的所有记录,并且把列表控件中的第一条记录 显示在上面的文本框中。【步骤1】右键点击 COperateScore在弹出的菜单中选择“ Add windows message han die项,然后在弹出的对话框的“新建 wi ndows消息/事件”中选择“ WM_I NITDIALOG ”,然后点击“ Add Han die ”按钮,最后点击“ Edit Existi ng ” 按钮,编写代码如下:BOOL COperateScore:O nln itDialog()CDialog:O n
25、lni tDialog();m_l istscore.I nsertColum n(0,学号);m_l istscore.I nsertColum n(1,课程号);m_listscore.InsertColumn(2,课程名);m_l istscore.I nsertColum n( 3,成绩);RECT rect;mistscore.GetWi ndowRect( &rect);int width=rect.right-rect .l eft;mistscore.SetColu mn Width(0,width/4);m_l istscore.SetColu mn Width(1,widt
26、h/4);mistscore.SetColu mn Width(2,width/4);mistscore.SetColu mn Width(3,width/4);mistscore.SetExte ndedStyle(LVS_EX_FULLROWSELECT);in itial();/ TODO: Add extra initialization herereturn TRUE; / return TRUE uni ess you set the focus to a con trol/ EXCEPTION: OCX Property Pages should return FALSE【步骤2
27、】在上面的On I ni tDialog()函数中我们设置了列表控件的表头和每列 的间距,并在最后调用了initial()函数。initial()是我自定义的一个函数,用来将COURSE_SCORE表中的数据全部在该列表控件中显示出来。该函数是自定义函 数,添加过程比较简单,不介绍。代码如下:void COperateScore:i nitial()mistscore.DeleteAllltems();CDBVaria nt varValue204;CCourseScoreSet m_recordset;int j=m_recordset.GetDatebase(varValue);int k
28、;int i=0;char buf20;for(k=0;kGetBuffer(1);m_l istscore.SetltemText(i,1,varValuek1.m_pstri ng-GetBuffer(1);m_l istscore.SetltemText(i,2,varValuek2.m_pstri ng-GetBuffer(1);用来处理数据表中的整型字段spri ntf(buf,%d,varValuek3.m_iVal);m_l istscore.SetItemText(i,3,buf); i=0; settext(0); varValue204是CDBVariant型的,该类型的变
29、量可以用来存储数据表中任意类 型的字段,所在在数据库操作时用该变量比较方便。 变量j表示COURSE_SCORE 数据表中的行数,通过for循环把该数据表中的所有记录全部显示出来。数据表 中的前3个字段我都是用varValuek0.m_pstring-GetBuffer(1)来显示在列表控 件中,是因为数据表中前3个字段都是字符型的,而最后一个字段是用来显示分 数的,该字段在数据表中我定义为了整型,所有用 sprintf(buf,%d,varValuek3.m_iVal); m_listscore.SetltemText(i,3,buf);来显示。【步骤3】在上面的initial()函数中我调
30、用了 GetDatebase(varValue函数,该函 数返回COURSE_SCORE数据表中的记录条数,我们将其赋给了j。并且该函数把COURSE_SCORE表中所有记录都存储在二维数组 varValue中。在前面两个 模块中我对数据库操作都是直接在该模块中操作的,但现在我要换种方法。我把对数据库的操作圭寸装在了记录集类 CCourseScoreSet中,这样避免混乱。在记录 集类CCourseScoreSet中添加 GetDatebase(varValue函数,注意:因为我们要在 类COperateScore调用该函数,所有我们必须要把该函数定义为public型。其代码如下:int CC
31、ourseScoreSet:GetDatebase(CDBVaria nt varValue4)CCourseScoreSet m_recordset(&m_database);CStri ng strSQL;strSQL.Format(select *from COURSE_SCORE);m_recordset.Ope n(AFX_DB_USE_DEFAULT_TYPE,strSQL); if(m_recordset.GetRecordCou nt()!=0)m_recordset.MoveFirst();int j=0;while(!m_recordset.lsEOF() _for(int
32、 i=0;i4;i+) m_recordset.GetFieldValue(i,varValueji); _j+;m_recordset.MoveNext(); _m_recordset.Close();return j;【步骤4】在步骤2的initial()函数最后我们调用了 settext(int index)函数,该 函数也是一个自定义函数,用来将列表控件中的指定索引的记录显示在上面的文 本框中。自定义函数的添加方法不做介绍,代码如下:void COperateScore:settext(i nt in dex)m_stuID=m_listscore.GetItemText(i ndex
33、,O);m_courseID=mistscore.GetltemText(i ndex,1); m_course name二m_listscore.GetltemText(i ndex,2); m_score=m_listscore.GetItemText(i ndex,3);UpdateData(FALSE);【步骤5】因为我还需要实现:当点击列表控件中的一行时,对应的记录能 够显示在上面的文本框中,所以还需要为列表控件添加单击事件。添加方法如下: 首先:切换都 ResourceView,在 Dialog 下双击 IDD_OPERATE_SCORE_DIALOG, 在该对话框中选中列表控件,
34、右击,选择“建立类向导”。然后:在弹出的MFC ClassWizard对话框中的“Object IDs”下选择列表控件的ID : ID_LIST_SCORE,在“Messaged 下选择“ NM_CLICK ”,单击“ Add Function” 按钮,最后单击“ Edit Code”按钮,添加代码如下:void COperateScore:O nClickListScore(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your con trol no tificati on han dler code herein t i=m_l istscor
35、e.GetSelectio nMark();settext(i);*pResult = 0;至此,对该模块的初始化工作全部完成,接下来对该模块中的4个按钮分别添加 消息响应函数。5、为该模块中的“录入成绩”按钮添加消息响应函数,双击该按钮,添加代码 如下:void COperateScore:O nln putScoreButt on()/ TODO: Add your con trol no tificatio n han dler code hereCCourseScoreSet *m_recordset 二new CCourseScoreSet(&m_database); CStri n
36、g strSQL;UpdateData(TRUE);int mn t_score;m_in t_score = atoi(m_score);strSQL.Format( in sert into COURSE_SCORE(STU_ID, COURSE_ID,COURSE_NAME,SCORE) values(%s,%s,%s,%d) , m_stulD,m_courselD,m_course name,mn t_score);m_database.ExecuteSQL(strSQL);in itial();MessageBox(录入成绩成功!);函数中的 int mnt_score; mnt_
37、score = atoi(m_score)两条语句是将 m_score转换 为int型,因为m_score是与文本框“成绩”相关联的变量,我将其定义为了字 符型,但SQL数据表中成绩字段是int型,所以必须先进行转化。调用initial() 函数是将插入操作完成,数据表中记录发生更新后的记录重新在列表控件中显示 出来,实现一种动态的效果。&为“修改成绩”按钮添加消息响应函数,双击该按钮,添加代码如下:void COperateScore:O nModifyScoreButto n()/ TODO: Add your con trol no tificatio n han dler code h
38、ere CCourseScoreSet *m_recordset=new CCourseScoreSet(&m_database); CStri ng strSQL;UpdateData(TRUE);int mn t_score;m_in t_score = atoi(m_score);strSQL.Format( update COURSE_SCORE set SCORE=%d whereSTU_ID=%s and COURSED=%s ,mnt_score,m_stulD,m_courselD);m_database.ExecuteSQL(strSQL);in itial();Messag
39、eBox(修改成绩成功!);7、为“删除成绩”按钮添加消息响应函数,双击该按钮,添加代码如下:void COperateScore:O nDeleteScoreButt on()/ TODO: Add your con trol no tificatio n han dler code here CCourseScoreSet *m_recordset=new CCourseScoreSet(&m_database); CStri ng strSQL;UpdateData(TRUE);strSQL.Format(” delete from COURSE_SCORE where STU_ID=%
40、s and COURSE_ID=%s ,m_stulD,m_courselD);m_database.ExecuteSQL(strSQL);in itial(); MessageBox(删除成绩成功!);8、为“取消”按钮添加消息响应函数,双击该按钮,添加代码如下:void COperateScore:O nCan celButt on()/ TODO: Add your con trol no tificatio n han dler code here En dDialog(IDCANCEL);(四) 学生信息管理模块设计1、如果用户类型是3,即管理员时,管理员可以对学生的信息进行管理,也
41、可 以对教师的信息进行管理。对教师的信息进行管理模块和对学生的信息进行管理模块差不多,就不做了。而对学生信息进行管理包括对学生信息的查询和增改删 操作,界面如下所示:学生宿息学生基水信息:姓名;王五学号:2010003查询学生其他信息性跖雾入学时闾:叩両昔民族:联系电ii:所在学曉:出生日期:政希面第:预备竞广专业:计算机应用技7剧除轄贯:家庭隹址:南昌愛社何种奖励或处罚:无-学生信息列表:学号201000.2010D0.201000.,.姓名 人学时闾五敏三2D10-9-.2D1 0-9-,.2D10-9-.,所在学院专业*1.化 算寡算 ft息息 软信信性别出生口期1 987-9-.190
42、0-6-.在其中的列表控件中显示STUDENT_INFO表中所有的信息,并且当用户点击其 中一行时,可以在上面的文本框中进行显示。 对于查询操作,管理员可以根据姓 名进行查询,也可以根据学号进行查询。按上面的对话框摆放好控件,其中各个 控件ID及对应变量如下图所示:Message MapsMember VariablesAutomation ActiveX Events Class InfoProjecl:Class name:CManageStuDIgF;V -ManageSluDlgrhT F:V-AManageStuDlgxppIDC ADDRESSCStringm_addressAID
43、C BIRTHDAYCStringmbirthdayIDC CHECK BUTTONIDC COMBO PARTYCCnmtjaBoxm c partyIDC COMBO SEXCComboBoxUi_c_sexIDC DELETE BUTTONIDC DEPARTMENTCStringmdepartmentIDC DIRECTIONCStringm_diredionIDC ENROLLMENT TIMECStringm enrollment limeIDC HOMETOWNCStringm hometownIDC IDCStringm_IDVControl IDs:TyptMemberDes
44、criplion: CString wilh length validalionAdd CJass. Add Variable.Delete VariableUpdfitr CohiiTin?Rind AllMaximum Characters:由于对话框中控件太多,还有几个变量如下:|X|FC ClassTizard重复了几个变量,大家见谅,本来只想把那剩下的几个变量截图给大家看看的, 可以截下来后粘贴不上,只好又整体截图了。从上图中也可以看出,我们为该对话框建立了个新类:CManageStuDIg,它的具体创建过程就不介绍了。2、因为学生信息管理对话框要使用 SQL数据库中的STUDENT
45、_INFO表,所以 需要在程序中添加类CStudentInfoSet步骤如下:【步骤1】在项目名“学生成绩管理系统”上单击鼠标右键,在弹出的 New Class对话框中的Name文本框中输入CStudentlnfoSet,在Base class下拉文本框 中选择 CRecordset【步骤2】单击0K按钮,弹出Database Option对话框,在ODBC下拉文 本框中选择“学生成绩管理系统”数据库,单击 OK按钮,弹出Select Database Tables对话框,选择dbo. STUDENT_INFO选项,单击OK按钮。这样就建立了 一个CRecordset的对象,就可以对数据库中的
46、 STUDENT_INFO表进行操作了。3、在ManageStuDlg.cpp中引入在前面创建的STUDENT_INFO表所对应的记录 集对象的头文件StudentlnfoSet.h将CRecordSet对象CStudentlnfoSet引入登陆对 话框:#include StudentlnfoSet.h4、在ManageStuDIg.cpp添加如下语句,使用已经声明过的全局变量(记得在 以后的每个模块中都要添加):exter n CDatabase m_database;extern CStri ng m_ID;5、因为该对话框中含有列表控件,我们需要对其进行初始化,让列表控件一开始就显示S
47、TUDENT_INFO表中的所有记录,并且把列表控件中的第一条记录显 示在上面的文本框中。【步骤1】右键点击CManageStuDlg,在弹出的菜单中选择“ Add windows message han die项,然后在弹出的对话框的“新建 wi ndows消息/事件”中选择 “WM_INITDIALOG ”,然后点击“ Add Handle”按钮,最后点击“ Edit Existing ” 按钮,编写代码如下:BOOL CMa nageStuDlg:O nln itDialog()CDialog:O nlni tDialog();/ TODO: Add extra initializati
48、on herem_stude nt_list.l nsertColum n(0,学号);m_stude nt_list.l nsertColum n( 1,姓名);m_student_list.lnsertColumn(2,入学时间);m_student_list.lnsertColumn(3,所在学院);m_stude nt_list.l nsertColu mn (4,专业);m_stude nt_list.l nsertColum n( 5,性别);m_student_list.lnsertColumn(6,出生日期);m_stude nt_list.l nsertColum n( 7,
49、籍贯);m_student_list.lnsertColumn(8,现在住址);m_student_list.lnsertColumn(9,电话号码);m_stude nt_list.l nsertColum n(10,民 族);m_student_list.lnsertColumn(11,政治面貌);m_stude nt_list.l nsertColum n(12,其他);RECT rect;m_stude nt_list.GetWi ndowRect(&rect);int width=rect.right-rect .l eft;m_stude nt_list.SetColum nWid
50、th(0,width/7);m_stude nt_list.SetColum nWidth(1,width/7);m_stude nt_list.SetColum nWidth(2,width/7);m_stude nt_list.SetColum nWidth(3,width/7);m_stude nt_list.SetColum nWidth(4,width/7);m_stude nt_list.SetColum nWidth(5,width/7);m_stude nt_list.SetColum nWidth(6,width/7);m_stude nt_list.SetColum nWi
51、dth(7,width/7);m_stude nt_list.SetColum nWidth(8,width/7);m_stude nt_list.SetColum nWidth(9,width/7);m_stude nt_list.SetColum nWidth(10,width/7);m_stude nt_list.SetColum nWidth(11,width/7);m_stude nt_list.SetColum nWidth(12,width/7);m_stude nt_list.SetExte ndedStyle(LVS_EX_FULLROWSELECT);in itial();
52、settext(0);return TRUE;【步骤2】在上面的On I ni tDialog()函数中我们设置了列表控件的表头和每列 的间距,并在最后调用了 initial()函数。initial()是我自定义的一个函数,用来将 STUDENT_INFO表中的数据全部在该列表控件中显示出来。而settext (0)是将列表控件的第一条记录显示在上面对应的文本框中。initial()该函数是自定义函数,添加过程比较简单,不介绍。代码如下:void CMa nageStuDlg:i nitial()m_stude nt_list.DeleteAllltems();CDBVaria nt varValue2013;CStude ntl nfoSet m_recordset;int j=m_recordset.GetDatebase(varValue);int k;int i=0;char buf20;for(k=0;kGetBuffer(1); m_stude nt_list.SetltemText(i,1,varValuek1.m_pstri ng-GetBuffer(1);/对数据表中的datatime型数据进行操作spri ntf(buf,%d-%d-%d,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全球及中国牙釉质粘结剂行业头部企业市场占有率及排名调研报告
- 2025年全球及中国塑料用群青紫行业头部企业市场占有率及排名调研报告
- 2025-2030全球健康饮食膳食计划应用程序行业调研及趋势分析报告
- 2025-2030全球大型扫描电子显微镜(SEM)行业调研及趋势分析报告
- 2025-2030全球螯合锌钾硼尿素行业调研及趋势分析报告
- 2025年全球及中国化学镀化学品行业头部企业市场占有率及排名调研报告
- 2025年全球及中国危险区域轨道衡行业头部企业市场占有率及排名调研报告
- 2025-2030全球磁性长度和角度测量系统行业调研及趋势分析报告
- 2025-2030全球食用菌灭菌设备行业调研及趋势分析报告
- 2025-2030全球军用航空平视显示器行业调研及趋势分析报告
- 电除颤并发症的处理及预防
- 智慧体育场馆建设方案
- 避暑旅游目的地评价指标、阈值和评价等级表、人体舒适度、度假气候指数和旅游气候指数计算方法
- 允许一切发生:过不紧绷松弛的人生
- 注塑生产过程控制流程
- 教科版六年级科学下册 (厨房里的物质与变化)教学课件
- 公务员面试应急应变题目大全及解析
- 浙江省炮制规范2015版电子版
- 冰心《童年的春节》
- 郑州小吃详细地点
- 上海高考英语词汇手册
评论
0/150
提交评论