vb课程设计学生管理系统.docx
《vb课程设计学生管理系统.docx》由会员分享,可在线阅读,更多相关《vb课程设计学生管理系统.docx(23页珍藏版)》请在冰豆网上搜索。
vb课程设计学生管理系统
长江大学工程技术学院
VB语言程序设计课程设计报告
(2011-2012学年第二学期)
系(部)
机械系
专业班级
模具61001班
学生姓名
罗健
学号/序号
201062378/22
指导教师
肖雪(助教)/刘刚(助教)
完成时间
2012年6月17日
学生成绩管理系统
一、功能描述
学生成绩管理系统是一个学校必须需要的,这个系统对学校的管理有着重要的作用。
单一的用人工手抄不但麻烦且对于查询、更新来讲也是很困难的。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
所以学生成绩管理系统可以通过计算机来实现,这个学生管理系统主要有权限登录、编辑、查询功能。
在编辑里可以进行添加、修改、删除等功能。
其核心是数据库,系统设计以提高数据共享程度。
很大程度的改善了用人工手工记录的不足,效率高,查询准确。
二、概要设计
1、系统功能模块框图
图1系统流程图
2、数据库设计
2.1学生成绩管理系统数据库设计
由于考虑到本系统的应用环境,只建立起一个数据库,在此数据库基础上建立如下三个基本表:
学生表(表
(1)):
学号(idx_)、姓名、性别
课程表(表
(2)):
课程号(idx_)、课程名称、学时、学分
成绩表(表(3)):
学号、姓名、课程号、成绩
2.2数据库逻辑结构设计
(1)学生表结构:
表
(1)
字段名
字段类型
字段长度
学号
Text
9
姓名
Text
10
性别
Boolean
1
(2)课程表结构:
表
(2)
字段名
字段类型
字段长度
课程号
Text
9
课程名称
Text
10
学时
Integer
2
学分
Integer
2
(3)成绩表结构
表(3)
字段名
字段类型
字段长度
学号
Text
9
姓名
Text
10
课程号
Text
10
成绩
Integer
2
三、详细设计
1.主界面(MDI)
主界面为一个MDI窗口,有编辑菜单分别是“登录、编辑、查询、退出”当程序运行时主界面最先弹出,菜单中“登录”和“退出”是可用的,只有点击“登陆”登录后其余两个才可用。
这个窗口还设置了MDI图片作为背景。
(1)窗体截图(如图1)
图1
(2)功能实现(部分代码)
PrivateSubDL_Click()
land.Show
EndSub
PrivateSubBJ_Click()
edit.Show
DL.Enabled=False
EndSub
PrivateSubCX_Click()
chaxun.Show
DL.Enabled=False
EndSub
MDIForm1.Show
CX.Enabled=False
BJ.Enabled=False
EndSub
2.登录界面(Land)
登录界面有两个按钮一个“确定”一个“取消”主要是实现进入编辑与查询界面。
在text1中输入正确的账号“2010”输入正确的密码“12345”才能进入,否则提示“用户名或密码错误”。
(1)窗体截图(图2)
图2
(2)功能实现(部分代码)
PrivateSubCommand1_Click()
IfText1.Text="2010"AndText2.Text="12345"Then
Loadland
MDIForm1.Show
DIForm1.DL.Enabled=False
MDIForm1.BJ.Enabled=True
MDIForm1.CX.Enabled=True
Unloadland
Else
MsgBox"用户名或密码错误",1,"密码错误"
EndIf
EndSub
3.编辑界面(Edit)
编辑窗体里面有一个SSTab控件主要实现3个信息的转换。
有3个Data控件分别是Dataxues、Datakc、Datacj且分别与数据库里面的学生表、课程表、成绩表连接。
窗体上面的text也相应的与数据库里面对应的信息连接从而实现运行是有学生成绩等信息的显示。
上面还有7个按钮对学生的信息进行修改、添加、删除等。
对学生成绩信息的更新起到了关键的作用。
(1)窗体的截图(图3(部分))
说明:
这是未运行是的截图,在运行是Dtata控件是不可见的。
图3
(2)功能实现(部分代码和部分属性截图)
添加的代码:
PrivateSubCmdtj_Click()
SelectCaseCmdtj.Caption
Case"添加"
SelectCaseSSTab1.Tab
Case0
Dataxues.Recordset.AddNew
Case1
Datakc.Recordset.AddNew
Case2
Datacj.Recordset.AddNew
EndSelect
SSTab1.TabEnabled(0)=False
SSTab1.TabEnabled
(1)=False
SSTab1.TabEnabled
(2)=False
Cmdtj.Caption="确定"
Cmdxg.Enabled=False
Cmdsc.Enabled=False
Cmdsjl.Enabled=False
Cmdsyt.Enabled=False
Cmdxyt.Enabled=False
cmdwjl.Enabled=False
Case"确定"
SelectCaseSSTab1.Tab
Case0
Datakc.UpdateRecord
Case1
Datacj.UpdateRecord
Case2
Dataxues.UpdateRecord
EndSelect
SSTab1.TabEnabled(0)=True
SSTab1.TabEnabled
(1)=True
SSTab1.TabEnabled
(2)=True
Cmdtj.Caption="添加"
Cmdxg.Enabled=True
Cmdsc.Enabled=True
Cmdsjl.Enabled=True
Cmdsyt.Enabled=True
Cmdxyt.Enabled=True
cmdwjl.Enabled=True
EndSelect
EndSub
数据库的连接:
PrivateSubForm_Load()
IfRight(App.Path,1)="\"Then
Dataxues.DatabaseName=App.Path+"mydb.mdb"
Else
Dataxues.DatabaseName=App.Path+"\mydb.mdb"
EndIf
Dataxues.RecordSource="学生表"
Dataxues.Refresh
Option1.Value=Dataxues.Recordset.Fields("性别").Value
Datakc.DatabaseName=Dataxues.DatabaseName
Datakc.RecordSource="课程表"
Datakc.Refresh
Textkch.DataField="课程号"
Textkcm.DataField="课程名称"
Textxshi.DataField="学时"
Textxf.DataField="学分"
Datacj.DatabaseName=Dataxues.DatabaseName
Datacj.RecordSource="成绩表"
Datacj.Refresh
Textxh2.DataField="学号"
Textkch2.DataField="课程号"
Textxm2.DataField="姓名"
Textcj.DataField="成绩"
SSTab1.Tab=0
EndSub
部分属性截图:
其他Data与Text的属性类似。
4.查询界面(chaxun)
查询界面主要实现学生系统的信息查询工作。
有按照课程号和学号两种查询方式。
其中用到了两个很关键的控件一个是DataGrid与Adodc。
Adodc控件是与数据库连接信息在DataGrid中显示。
窗体和具体属性见下图所示。
窗体
Adodc属性截图:
说明:
代码见源代码。
四、调试中存在的问题及解决方法
在调试工程中运行编辑这张表时学生信息的性别不会发生变化
原因的分析:
在查询中执行上一条和下一条时表中的数据性别是没有跟着一起变化的。
解决办法:
在上一条和下一条的代码中间加入这样的代码
PrivateSubcmdsyt_Click()
------------------------------------------
Option1.Value=Dataxues.Recordset.Fields("性别").Value
IfOption1.Value=FalseThenOption2.Value=True
------------------------------------------
使之和其他数据一样变化下去,最终达到正常。
五、心得体会
通过为期一星期的vb课程设计使我对vb这门课程在实际生活中的运用有了很深入的了解,感受到数据库的强大功能使现实的有些工作变得更方便。
在设计过程中,因为是大一学习的课程对有些知识有些陌生刚开始就觉得这个设计可能难度有些大还有些畏惧。
但在老师的提醒回忆中有了希望。
在设计中遇到过一些困难,要是以前一遇到困难肯定是第一时间问老师,这次不同这次遇到困难后写自己找办法解决除非是正的解决不了了才找老师,在这个寻知的过程中自己将问题解决了感觉十分舒爽。
本系统的不足是在用户登录的权限方面有待改进,应该对编辑用户和查询用户进行权限,这样可能会更好。
六、参考文献
【1】罗朝盛.VisualBasic6.0程序设计教程(第3版)[M].人民邮电出版社,
2009.2
【2】邵洁..VisualBasic6.0程序设计(第4版)[M].东南大学出版社,2009.1
【3】邵洁.VisualBasic6.0实验与测试(第4版).东南大学出版社,2008.2
七、附录(源代码)
1.主界面(MDI)
PrivateSubDL_Click()
land.Show
land.Height=5500
land.Width=7150
MDIForm1.Height=6315
MDIForm1.Width=8340
EndSub
PrivateSubBJ_Click()
edit.Show
DL.Enabled=False
MDIForm1.Height=6315
MDIForm1.Width=8340
EndSub
PrivateSubCX_Click()
chaxun.Show
DL.Enabled=False
EndSub
PrivateSubForm_Load()
MDIForm1.Show
CX.Enabled=False
BJ.Enabled=False
EndSub
PrivateSubMDIForm_Load()
CX.Enabled=False
BJ.Enabled=False
EndSub
PrivateSubTC_Click()
End
EndSub
2.登录:
PrivateSubCommand1_Click()
IfText1.Text="2010"AndText2.Text="12345"Then
Loadland
MDIForm1.Show
MDIForm1.Height=6315
MDIForm1.Width=8340
MDIForm1.DL.Enabled=False
MDIForm1.BJ.Enabled=True
MDIForm1.CX.Enabled=True
Unloadland
Else
MsgBox"用户名或密码错误",1,"密码错误"
EndIf
EndSub
PrivateSubCommand2_Click()
End
EndSub
3.编辑:
删除:
PrivateSubCmdsc_Click()
DimiAsInteger
i=MsgBox("确定要删除此记录?
",vbYesNo+vbExclamation+vbDefaultButton1,"编辑")
Ifi=vbYesThen
SelectCaseSSTab1.Tab
Case0
Dataxues.Recordset.Delete
Dataxues.Refresh
Case1
Datakc.Recordset.Delete
Datakc.Refresh
Case2
Datacj.Recordset.Delete
Datacj.Refresh
EndSelect
EndIf
EndSub
首记录:
PrivateSubcmdsjl_Click()
SelectCaseSSTab1.Tab
Case0
Dataxues.Recordset.MoveFirst
Case1
Datakc.Recordset.MoveFirst
Case2
Datacj.Recordset.MoveFirst
EndSelect
Cmdsjl.Enabled=False
Cmdsyt.Enabled=False
cmdwjl.Enabled=True
Cmdxyt.Enabled=True
EndSub
下一条:
PrivateSubcmdsyt_Click()
SelectCaseSSTab1.Tab
Case0
Dataxues.Recordset.MovePrevious
Option1.Value=Dataxues.Recordset.Fields("性别").Value
IfOption1.Value=FalseThenOption2.Value=True
IfDataxues.Recordset.BOFThen
Dataxues.Recordset.MoveFirst
Cmdsjl.Enabled=False
Cmdsyt.Enabled=False
Cmdxyt.Enabled=True
cmdwjl.Enabled=True
EndIf
Case1
Datakc.Recordset.MovePrevious
Ifdatkc.Recordset.BOFThen
datkc.Recordset.MoveFirst
Cmdsjl.Enabled=False
Cmdsyt.Enabled=False
Cmdxyt.Enabled=True
cmdwjl.Enabled=True
EndIf
Case2
Datacj.Recordset.MovePrevious
IfDatacj.Recordset.BOFThen
Datacj.Recordset.MoveFirst
cmdyjl.Enabled=False
Cmdsyt.Enabled=False
Cmdxyt.Enabled=True
cmdwjl.Enabled=True
EndIf
EndSelect
EndSub
添加:
PrivateSubCmdtj_Click()
SelectCaseCmdtj.Caption
Case"添加"
SelectCaseSSTab1.Tab
Case0
Dataxues.Recordset.AddNew
Case1
Datakc.Recordset.AddNew
Case2
Datacj.Recordset.AddNew
EndSelect
SSTab1.TabEnabled(0)=False
SSTab1.TabEnabled
(1)=False
SSTab1.TabEnabled
(2)=False
Cmdtj.Caption="确定"
Cmdxg.Enabled=False
Cmdsc.Enabled=False
Cmdsjl.Enabled=False
Cmdsyt.Enabled=False
Cmdxyt.Enabled=False
cmdwjl.Enabled=False
Case"确定"
SelectCaseSSTab1.Tab
Case0
Datakc.UpdateRecord
Case1
Datacj.UpdateRecord
Case2
Dataxues.UpdateRecord
EndSelect
SSTab1.TabEnabled(0)=True
SSTab1.TabEnabled
(1)=True
SSTab1.TabEnabled
(2)=True
Cmdtj.Caption="添加"
Cmdxg.Enabled=True
Cmdsc.Enabled=True
Cmdsjl.Enabled=True
Cmdsyt.Enabled=True
Cmdxyt.Enabled=True
cmdwjl.Enabled=True
EndSelect
EndSub
尾记录:
PrivateSubcmdwjl_Click()
SelectCaseSSTab1.Tab
Case0
Dataxues.Recordset.MoveLast
Case1
Datakc.Recordset.MoveLast
Case2
Datacj.Recordset.MoveLast
EndSelect
Cmdsjl.Enabled=True
Cmdsyt.Enabled=True
cmdwjl.Enabled=False
Cmdxyt.Enabled=False
EndSub
修改:
PrivateSubCmdxg_Click()
SelectCaseCmdxg.Caption
Case"修改"
SelectCaseSSTab1.Tab
Case0
Dataxues.Recordset.edit
Case1
Datakc.Recordset.edit
Case2
Datacj.Recordset.edit
EndSelect
SSTab1.TabEnabled(0)=False
SSTab1.TabEnabled
(1)=False
SSTab1.TabEnabled
(2)=False
Cmdxg.Caption="确定"
Cmdtj.Enabled=False
Cmdsc.Enabled=False
Cmdsjl.Enabled=False
Cmdsyt.Enabled=False
Cmdxyt.Enabled=False
cmdwjl.Enabled=False
Case"确定"
SelectCaseSSTab1.Tab
Case0
Dataxues.UpdateRecord
Case1
Datakc.UpdateRecord
Case2
Datacj.UpdateRecord
EndSelect
SSTab1.TabEnabled(0)=True
SSTab1.TabEnabled
(1)=True
SSTab1.TabEnabled
(2)=True
Cmdxg.Caption="修改"
Cmdtj.Enabled=True
Cmdsc.Enabled=True
Cmdsjl.Enabled=True
Cmdsyt.Enabled=True
Cmdxyt.Enabled=True
cmdwjl.Enabled=True
EndSelect
EndSub
下一条:
PrivateSubcmdxyt_Click()
SelectCaseSSTab1.Tab
Case0
Dataxues.Recordset.MoveNext
Option1.Value=Dataxues.Recordset.Fields("性别").Value
IfOption1.Value=FalseThenOption2.Value=True
IfDataxues.Recordset.EOFThen
Dataxues.Recordset.MoveLast
Cmdsjl.Enabled=True
Cmdsyt.Enabled=True
Cmdxyt.Enabled=False
cmdwjl.Enabled=False
EndIf
Case1
Datakc.Recordset.MoveNext
IfDatakc.Recordset.EOFThen
Datakc.Recordset.MoveLast
Cmdsjl.Enabled=True
Cmdsyt.Enabled=True
Cmdxyt.Enabled=False
cmdwjl.Enabled=False
EndIf
Case2
Datacj.Recordset.MoveNext
IfDatacj.Recordset.EOFThen
Datacj.Recordset.MoveLast
Cmdsjl.Enabled=True
Cmdsyt.Enabled=True
Cmdxyt.Enabled=False
cmdwjl.Enabled=False
EndIf
EndSelect
EndSub
数据库连接:
PrivateSubForm_Load()
IfRight(App.Path,1)="\"Then
Dataxues.DatabaseName=App.Path+"mydb.mdb"
Else
Dataxues.DatabaseName=App.Path+"\mydb.mdb"
EndIf
Dataxues.RecordSource="学生表"
Dataxues.Refresh
Option1.Value=Dataxues.Recordset.Fields("性别").Value
Da