MicrosoftSQLSERVER-学生信息管理系统数据库设计示例培训资料.doc
Good is good, but better carries it.精益求精,善益求善。MicrosoftSQLSERVER-学生信息管理系统数据库设计示例-学生信息管理系统(MicrosoftSQLSERVER)数据库设计示例一、前言随着我国教育产业化的飞速发展,社会对教育水平和教学管理软硬件的要求日益提高,尤其是学校对学生管理能够具有一整套完善的教学管理软件提出了更多的要求。为了适应这种形式,教育系统尤其不仅首先要有坚实的硬件基础,还要有一整套完善的教学管理软件管理系统。而要实现这一功能,就要求学校管理者配备一套高效的教育管理网络系统,以便在学校内实施良好的一整套完善的管理且以最快地速度响应教师和学生的需求,及时为他们提供服务,为他们提供一个高效、便捷的环境。学生管理信息系统(MIS)是校园网络中一个重要的应用系统,它大大了改善学校教学、科研与管理的基础环境,在一定程度上反映出学校管理现代化的水平。学生信息管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面.对于前者要求建立数据一致性和完整性强,数据安全性好的数据库.而对于后者则要求应用程序功能完备,易使用等特点.学生信息管理系统主要功能有学生学籍管理、成绩管理、班级管理、课程管理。学生学籍管理主要有添加新学生学籍;学生学籍修改;学生学籍删除。成绩管理包括成绩录入、成绩查询、成绩删除。班级管理包括添加班级、修改班级。课程管理包括设置课程、添加课程、修改课程。同时系统采用分级使用,即分管理者和普通用户两个级别,管理者具有所有功能,普通用户即有部分功能将限制使用。系统开发采用Microsoft公司的VisualBasic6.0,利用其强大的可视化界面功能及对数据库的支持。系统中大量采用SQL查询语句,界面友好,功能较强。采用MicrosoftSQLSERVER系统作为数据库,速度较快,数据能共享,能较好地解决访问速度及数据共享的问题。二系统功能描述本系统的主要任务是实现对学校的学生学籍管理、成绩管理、班级管理、课程管理。系统采用分级使用其主要功能包括:1 学生学藉管理功能l 添加新学生学籍。添加新生的具体数据,主要有学号、姓名、性别、班号、联系电话、入学时间等详细信息。l 修改学籍。将已经入库的学籍信息进行修改、更新、删除(需要管理员权限)。l 删除学籍。删除已经入库的学籍信息(需要管理员权限)。l 查询学籍。根据学号、姓名、或班级进行党籍信息查询。2班级管理功能l 添加班级。添加班号、年级、班主任及教室等内容(需要管理员权限)。l 修改班级。修改、更新、删除已经入库的班级内容(需要管理员权限)。3 成绩管理功能l 添加成绩。主要内容为考试编号、班号、学号、姓名、课程及分数(需要管理员权限)。l 修改成绩。修改、更新、删除已经入库成绩单(需要管理员权限)。l 查询成绩。按条件进行成绩查询。4 课程管理功能l 课程设置。为每个年级进行课程安排。(需要管理员权限)。l 添加课程。录入课程名称、课程编号、课程类型等信息。(需要管理员权限)。l 修改课程。修改、更新、删除已经入库的课程信息。(需要管理员权限)。三、1、数据库概念结构设计根据以上分析规划出的实体有:用户信息实体(user_info)、学生学籍信息实体(student_Info)、成绩信息实体(result_Info)、班级课程实体(gradecourse_Info)、课程实体(course_Info)及班级实体(class_Info)。用户实体E-R图用户实体用户名用户密码用户类型学生学籍信息实体E-R图学生学籍实体姓名备注联系地址入学时间班级号出生日期性别学号成绩信息实体E-R图成绩实体分数课程名班级号姓名学号考试编号班级课程实体E-R图课程名班级号班级课程实体课程实体E-R图课程实体课程号课程名称课程类别课程描述班级实体E-R图班级实体班级号年级班主任教室2、数据库逻辑结构设计(1)用户表user_Info列名数据类型可否为空说明user_IDcharNOTNULL用户名user_PWDcharNULL用户密码user_DescharNULL用户类型(2)学生学籍表student_Info列名数据类型可否为空说明student_IDintNOTNULL主键student_NamecharNULL学生名称student_SexcharNULL性别born_DatedatetimeNULL出生日期class_NOintNULL班级号tele_NumbercharNULL联系电话ru_DatedatetimeNULL入校日期addressvarcharNULL联系地址commentvarcharNULL学生备注(3)成绩表(result_Info)列名数据类型可否为空说明exam_NocharNOTNULL考试编号student_IDintNOTNULL学号student_NamecharNULL学生姓名class_NointNULL班号course_NamecharNULL课程名resultfloatNULL分数(4)班级课程表(gradecourse_Info)列名数据类型可否为空说明gradecharNULL年级course_NamecharNULL课程名(5)课程表(course_Info)列名数据类型可否为空说明course_NointNOTNULL课程号course_NamecharNULL课程名course_TypecharNULL课程类型course_DescharNULL课程描述(6)班级表(class_Info)列名数据类型可否为空说明class_NointNOTNULL班号gradecharNULL年级directorcharNULL班主任classroom_NocharNULL教室四、数据库结构的实现1、 经过前面的需求分析和概念结构设计以后,得到数据库的逻辑结构。现在就可以在SQLServer2000数据库系统中实现该逻辑结构。这是利用SQLServer2000数据库系统中的SQL查询分析器实现的。下面给出创建这些表格的SQL语句。创建用户表CREATETABLEdbo.user_Info(user_IDchar(10)COLLATEChinese_PRC_CI_ASNOTNULL,user_PWDchar(10)COLLATEChinese_PRC_CI_ASNULL,user_Deschar(10)COLLATEChinese_PRC_CI_ASNULL)ONPRIMARYGO2、创建学生信息表CREATETABLEdbo.student_Info(student_IDintNOTNULL,student_Namechar(10)COLLATEChinese_PRC_CI_ASNULL,student_Sexchar(2)COLLATEChinese_PRC_CI_ASNULL,born_DatedatetimeNULL,class_NOintNULL,tele_Numberchar(10)COLLATEChinese_PRC_CI_ASNULL,ru_DatedatetimeNULL,addressvarchar(50)COLLATEChinese_PRC_CI_ASNULL,commentvarchar(200)COLLATEChinese_PRC_CI_ASNULL)ONPRIMARY3、创建成绩表CREATETABLEdbo.result_Info(exam_Nochar(10)COLLATEChinese_PRC_CI_ASNOTNULL,student_IDintNOTNULL,student_Namechar(10)COLLATEChinese_PRC_CI_ASNULL,class_NointNULL,course_Namechar(10)COLLATEChinese_PRC_CI_ASNULL,resultfloatNULL)ONPRIMARY4、创建年级课程表CREATETABLEdbo.gradecourse_Info(gradechar(10)COLLATEChinese_PRC_CI_ASNULL,course_Namechar(10)COLLATEChinese_PRC_CI_ASNULL)ONPRIMARY5、创建课程表CREATETABLEdbo.course_Info(course_NointNOTNULL,course_Namechar(10)COLLATEChinese_PRC_CI_ASNULL,course_Typechar(10)COLLATEChinese_PRC_CI_ASNULL,course_Deschar(50)COLLATEChinese_PRC_CI_ASNULL)ONPRIMARY6、创建班级表CREATETABLEdbo.class_Info(class_NointNOTNULL,gradechar(10)COLLATEChinese_PRC_CI_ASNULL,directorchar(10)COLLATEChinese_PRC_CI_ASNULL,classroom_Nochar(10)COLLATEChinese_PRC_CI_ASNULL)ONPRIMARY五、学生信息管理系统主窗体的创建上面的SQL语句在SQLServer2000中查询分析器的执行,将自动产生需要的所有表格。有关数据库结构的所有后台工作已经完成。现在将通过航空公司管理信息系统中各个功能模块的实现,讲解如何使用VisualBasic来编写数据库系统的客户端程序。1、创建公用模块在VisualBasic中可以用公用模块来存放整个工程项目公用的函数、过程和全局变量等。这样可以极大地提高代码的效率。在项目资源管理器中为项目添加一个Module,保存为Module1.bas。下面就可以开始添加需要的代码了。由于系统中各个功能模块都将频繁使用数据库中的各种数据,因此需要一个公共的数据操作函数,用以执行各种SQL语句。添加函数ExecuteSQL,代码如下:'.PublicDeclareFunctionShellExecuteLib"shell32.dll"Alias"ShellExecuteA"(ByValhWndAsLong,ByVallpOperationAsString,ByVallpFileAsString,ByVallpParametersAsString,ByVallpDirectoryAsString,ByValnShowCmdAsLong)AsLongPublicDeclareFunctionGetWindowLongLib"user32"Alias"GetWindowLongA"(ByValhWndAsLong,ByValnIndexAsLong)AsLongPublicDeclareFunctionSetWindowLongLib"user32"Alias"SetWindowLongA"(ByValhWndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLongPublicDeclareFunctionSetLayeredWindowAttributesLib"user32"(ByValhWndAsLong,ByValcrKeyAsLong,ByValbAlphaAsByte,ByValdwFlagsAsLong)AsLongPublicfMainFormAsfrmMainPublicUserNameAsStringPublicmnUserTypeAsBoolean'判断用户类型SubMain()DimfLoginAsNewfrmLoginfLogin.ShowvbModalIfNotfLogin.OKThen'LoginFailedsoexitappEndEndIfUnloadfLoginSetfMainForm=NewfrmMainfMainForm.ShowEndSubPublicFunctionConnectString()_AsString'returnsaDBConnectStringConnectString="Driver=SQLServer;Server=ABS;Database=student;Uid=sa;Pwd=abs;"'ConnectString="Provider=SQLOLEDB.1;Password=abs;PersistSecurityInfo=True;UserID=sa;InitialCatalog=student;DataSource=ABS"EndFunctionPublicFunctionExecuteSQL(ByValSQL_AsString,MsgStringAsString)_AsADODB.Recordset'executesSQLandreturnsRecordsetDimcnnAsADODB.ConnectionDimrstAsADODB.RecordsetDimsTokens()AsStringOnErrorGoToExecuteSQL_ErrorsTokens=Split(SQL)Setcnn=NewADODB.Connectioncnn.OpenConnectStringIfInStr("INSERT,DELETE,UPDATE",_UCase$(sTokens(0)Thencnn.ExecuteSQLMsgString=sTokens(0)&_"querysuccessful"ElseSetrst=NewADODB.Recordsetrst.CursorLocation=adUseClientrst.OpenTrim$(SQL),cnn,_adOpenKeyset,_adLockOptimistic'rst.MoveLast'getRecordCountSetExecuteSQL=rstMsgString="查询到"&rst.RecordCount&_"条记录"EndIfExecuteSQL_Exit:Setrst=NothingSetcnn=NothingExitFunctionExecuteSQL_Error:MsgString="查询错误:"&_Err.DescriptionResumeExecuteSQL_ExitEndFunctionPublicFunctionTesttxt(txtAsString)AsBooleanIfTrim(txt)=""ThenTesttxt=FalseElseTesttxt=TrueEndIfEndFunction2、创建主窗体这个项目我们使用多文档界面,单击工具栏中的ADDMDIForm按钮,产生一个窗体frmmain.代码如下:'.PrivateSubis_usertype()IfmnUserType=FalseThenfrmsjm.cmdaddsj.Enabled=Falsefrmsjm.cmdmodsj.Enabled=Falsefrmbjm.cmdaddbj.Enabled=Falsefrmbjm.cmdmodbj.Enabled=Falsefrmkcmod.cmdaddkc.Enabled=Falsefrmkcmod.cmdmodkc.Enabled=Falsefrmkcmod.cmdfindkc.Enabled=Falsefrmcjmod.cmdaddcj.Enabled=Falsefrmcjmod.cmdmodcj.Enabled=Falsefrmsjm.cmdaddsj.Enabled=Falsefrmsjm.cmdmodsj.Enabled=Falsefrmsys.cmdaddsys.Enabled=Falsemnuadduser.Enabled=FalseEndIfEndSubPrivateSubbjIMG_Click()frmsjm.Hidefrmkcmod.Hidefrmcjmod.Hidefrmbjm.ShowEndSubPrivateSubcjIMG_Click()frmsjm.Hidefrmkcmod.Hidefrmbjm.Hidefrmcjmod.ShowEndSubPrivateSubexitIMG_Click()EndEndSubPrivateSubImgHelp_Click()frmhelp.ShowEndSubPrivateSubkcIMG_Click()frmsjm.Hidefrmbjm.Hidefrmcjmod.Hidefrmkcmod.ShowEndSubPrivateSubMDIForm_Load()Me.Caption="学生信息管理系统,操作员"&UserName&""LoadfrmbjmLoadfrmkcmodLoadfrmcjmodCallis_usertypeEndSubPrivateSubMenuHelp_Click(IndexAsInteger)frmhelp.ShowEndSubPrivateSubmnuadduser_Click()frmAdduser.ShowEndSubPrivateSubmnuExit_Click()EndEndSubPrivateSubmnupsw_Click()frmModifyuserinfo.ShowEndSubPrivateSubsysIMG_Click()frmsys.ShowEndSubPrivateSubxjIMG_Click()frmsjm.Showfrmbjm.Hidefrmkcmod.Hidefrmcjmod.HideEndSub3创建frmLogin窗体代码如下:OptionExplicitPrivateDeclareFunctionGetUserNameLib"advapi32.dll"Alias"GetUserNameA"(ByVallpbufferAsString,nSizeAsLong)AsLongPrivateConstWS_EX_LAYERED=&H80000PrivateConstGWL_EXSTYLE=(-20)PrivateConstLWA_ALPHA=&H2PrivateConstLWA_COLORKEY=&H1'表示当前用户登录所选择的身份,即用户类型,0-表示教务管理人员;1-表示学生DimUserTypeAsIntegerPublicOKAsBoolean'记录确定次数DimmiCountAsIntegerPrivateSubcmdCancel_Click()OK=FalseMe.HideEndSubPrivateSubcmdOK_Click()DimtxtSQLAsStringDimmrcAsADODB.RecordsetDimMsgTextAsString'ToDo:createtestforcorrectpassword'checkforcorrectpasswordUserName=""IfTrim(txtUserName.Text="")ThenMsgBox"没有这个用户,请重新输入用户名!",vbOKOnly+vbExclamation,"警告"txtUserName.SetFocusElsetxtSQL="select*fromuser_Infowhereuser_ID='"&txtUserName.Text&"'"Setmrc=ExecuteSQL(txtSQL,MsgText)Ifmrc.EOF=TrueThenMsgBox"没有这个用户,请重新输入用户名!",vbOKOnly+vbExclamation,"警告"txtUserName.SetFocusElseIfTrim(mrc.Fields(1)=Trim(txtPassword.Text)AndTrim(mrc.Fields(2)=Trim(UserType)ThenOK=Truemrc.CloseMe.HideUserName=Trim(txtUserName.Text)IfUserType=0ThenmnUserType=TrueElsemnUserType=FalseEndIfElseMsgBox"输入密码不正确,请重新输入!",vbOKOnly+vbExclamation,"警告"txtPassword.SetFocustxtPassword.Text=""EndIfEndIfEndIf'用户密码错误的次数,如果错误次数超过3次,则退出系统miCount=miCount+1IfmiCount=3ThenMsgBox"您无权操作本系统!再见!",vbCritical,"无权限"UnloadMeEndIfExitSubEndSubPrivateSubForm_Load()'设备半透明窗体DimrtnAsLongrtn=GetWindowLong(hWnd,GWL_EXSTYLE)rtn=rtnOrWS_EX_LAYEREDSetWindowLonghWnd,GWL_EXSTYLE,rtnSetLayeredWindowAttributeshWnd,0,200,LWA_ALPHADimsBufferAsStringDimlSizeAsLongsBuffer=Space$(255)lSize=Len(sBuffer)CallGetUserName(sBuffer,lSize)IflSize>0ThentxtUserName.Text=""ElsetxtUserName.Text=vbNullStringEndIfOK=FalsemiCount=0optUserType(0).Value=TrueImage1.ToolTipText="管理员账号:admin;密码:admin;普通用户账号:guest;密码:guest"EndSubPrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)Line1.BorderColor=&HE0E0E0Line2.BorderColor=&HE0E0E0Line3.BorderColor=&HE0E0E0Line4.BorderColor=&HE0E0E0EndSubPrivateSubImage1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)Line1.BorderColor=&HFF&Line2.BorderColor=&HFF&Line3.BorderColor=&HFF&Line4.BorderColor=&HFF&EndSubPrivateSuboptUserType_Click(IndexAsInteger)UserType=IndexEndSubPrivateSubtxtPassword_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThencmdOK.SetFocusEndIfEndSubPrivateSubtxtUserName_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThentxtPassword.SetFocusEndIfEndSub4、创建frmAddclassinfo窗体代码如下:PrivateSubCommand1_Click()DimmrcAsADODB.RecordsetDimMsgTextAsStringDimtxtSQLAsStringIfNotTesttxt(txtClassno.Text)ThenMsgBox"请输入班号!",vbOKOnly+vbExclamation,"警告"txtClassno.SetFocusExitSubEndIfIfNotTesttxt(comboGrade.Text)ThenMsgBox"请选择年级!",vbOKOnly+vbExclamation,"警告"comboGrade.SetFocusExitSubEndIfIfNotTesttxt(txtDirector.Text)ThenMsgBox"请输入班主任姓名!",vbOKOnly+vbExclamation,"警告"txtDirector.SetFocusExitSubEndIfIfNotTesttxt(txtClassroom.Text)ThenMsgBox"请输入教室房间号!",vbOKOnly+vbExclamation,"警告"txtClassroom.SetFocusExitSubEndIfIfNotIsNumeric(Trim(txtClassno.Text)ThenMsgBox"请输入数字!",vbOKOnly+vbExclamation,"警告"ExitSubtxtClassno.SetFocusEndIftxtSQL="select*fromclass_Info"Setmrc=ExecuteSQL(txtSQL,MsgText)IfNotmrc.BOFAndmrc.EOFThenmrc.MoveFirstEndIfWhile(mrc.EOF=False)If(Trim(mrc.Fields(0)=Trim(txtClassno.Text)ThenMsgBox"班号已经存在,请重新输入班号!",vbOKOnly+vbExclamation,"警告"ExitSubtxtClassno.Text=""txtClassno.SetFocusElsemrc.MoveNextEndIfWendmrc.AddNewmrc.Fields(0)=Trim(txtClassno.Text)mrc.Fields(1)=Trim(comboGrade.Text)mrc.Fields(2)=Trim(txtDirector.Text)mrc.Fields(3)=Trim(txtClassroom.Text)mrc.Updatemrc.CloseMsgBox"添加班级信息成功!",vbOKOnly+vbExclamation,"添加班级信息"EndSubPrivateSubCommand2_Click()UnloadMeEndSubPrivateSubForm_Load()comboGrade.AddItem"初中一年级"comboGrade.AddItem"初中二年级"comboGrade.AddItem"初中三年级"comboGrade.AddItem"高中一年级"comboGrade.AddItem"高中二年级"comboGrade.AddItem"高中三年级"EndSub5、创建frmAddcourseinfo窗体代码如下:'.PrivateSubCommand1_Click()DimmrcAsADODB.RecordsetDimMsgTextAsStringDimtxtSQLAsStringIfNotTesttxt(txtCourseno.Text)ThenMsgBox"请输入课程编号!",vbOKOnly+vbExclamation,"警告"txtCourseno.SetFocusExitSubEndIfIfNotTesttxt(txtCoursename.Text)ThenMsgBox"请输入课程名称!",vbOKOnly+vbExclamation,"警告"txtCoursename.SetFocusExitSubEndIfIfNotTesttxt(comboCoursetype.Text)ThenMsgBox"请选择课程类型!",vbOKOnly+vbExclamation,"警告"comboCoursetype.SetFocusExitSubEndIfIfNotTesttxt(txtCoursedes.Text)ThenMsgBox"请输入课程描述信息!",vbOKOnly+vbExclamation,"警告"txtCoursedes.SetFocusExitSubEndIfIfNotIsNumeric(Trim(txtCourseno.Text)ThenMsgBox"请输入数字编号!",vbOKOnly+vbExclamation,"警告"ExitSubtxtCourseno.SetFocusEndIftxtSQL="select*fromcourse_Info"Setmrc=ExecuteSQL(txtSQL,MsgText)While(mrc.EOF=False)If(Trim(mrc.Fields(0)=Trim(txtCourseno.Text)ThenMsgBox"课程编号已经存在,请重新输入课程编号!",vbOKOnly+vbExclamation,"警告"txtCourseno.Text=""txtCourseno.SetFocusExitSubElsemrc.MoveNextEndIfWendmrc.AddNewmrc.Fields(0)=Trim(txtCourseno.Text)mrc.Fields(1)=Trim(txtCoursename.Text)mrc.Fields(2)=Trim(comboCoursetype.Text)mrc.Fields(3)=Trim(txtCoursedes.Text)mrc.Updatemrc.CloseMsgBox"添加课程信息成功!",vbOKOnly+vbExclamation,"添加课程信息"UnloadMeEndSubPrivateSubCommand2_Click()UnloadMeEndSubPrivateSubForm_Load()comboCoursetype.AddItem"必修"comboCoursetype.AddItem"考查"EndSub6、创建frmAddresult窗体代码如下:'.DimFlagselectAsBooleanDimGradeAsStringPrivateSubcmdCancel_Click()UnloadMeEndSubPrivateSubcmdOK_Click()DimmrcAsADODB.RecordsetDimtxtSQLAsStringDimMsgTextAsStringIfNotTesttxt(comboExamtype.Text)ThenMsgBox"请输入考试编号!",vbOKOnly+vbExclamation,"警告"ExitSubEndIfIfNotTesttxt(comboClassno.Text)ThenMsgBox"请选择班号!",vbOKOnly+vbExclamation,"警告"ExitSubEndIfIfNotTesttxt(comboSID.Text)ThenMsgBox"请选择学号!",vbOKOnly+vbExclamation,"警告"ExitSubEndIfIfNotTesttxt(comboCourse.Text)ThenMsgBox"请选择课程!",vbOKOnly+vbExclamation,"警告"ExitSubEndIfIfNotTesttxt(txtResult.Text)ThenMsgBox"请输入分数!",vbOKOnly+vbExclamation,"警告"ExitSubEndIfIfNotIsNumeric(txtResult.Text)ThenMsgBox"分数请输入数字!",vbOKOnly+vbExclamation,"警告"ExitSubEndIftxtSQL="select*fromresult_Infowhereexam_No='"&comboExamtype.Text&"'andstudent_ID='"&c