1、应用软件实践课程设计(2012/2013-2 分散)课程名称:学生成绩管理系统班 级:10 通信工程(2)班学 号:Xb10680218姓 名:张泽星指导老师:霍戌文、郭奕亿2013 年 3 月2目 录一、题目: .3学生成绩管理系统 3二、目的和要求: .3三、需求分析: .3四、数据分析与建模: .4数据分析 4E-R 图 4系统流程图 6五、数据库建立: .6学生基本信息表 6登入表 7六、数据库应用开发与运行: .7登入界面 7密码修改界面 9学生基本信息管理界面 10学生基本信息修改界面 22学生成绩管理界面 24七、结果分析、结论与体会: .33八、参考文献及资料: .333一、题
2、目:学生成绩管理系统二、目的和要求:1掌握软件工程的规范掌握一般应用软件开发的基本过程、基本技术,为以后的毕业设计奠定基础。2掌握关系型数据库管理系统的编程技术,并能独立完成一般小系统的程序设计、调试运行等工作。3培养把所学知识运用到具体对象,理解面向对象编程理论,并能求出解决方案的能力。运用关系型数据库管理系统,实现学生成绩管理系统开发。具体功能如下:1、学生基本信息设置:包括专业、班级、姓名、学号等;2、学生课程名称和成绩录入;3、学生基本信息和课程信息的查询及增删改;4、成绩排名及相应绩点分计算。三、需求分析:目前计算机管理在日常生活中的地位变得越来越重要。它能够代替人做各种重复、繁琐的
3、劳动,并且拥有操作简单、可信度好、不易出错等优点,大大减少了不必要的人力消耗,提高个人的工作效率。随着学校的规模不断扩大,学生人数急剧增加,有关学生的各种信息也成倍增长。面对庞大的信息量需要有学生管理系统来提供学生管理工作的效率。通过这样的系统可以做到信息的规范管理,科学统计和快速查询,修改,增加,删除等,从而减少管理方面的工作量。实现学生信息关系的系统化,规范化,自动化,用计算机对学生各种信息进行日常管理。 学生信息查询是每个学校必须面临的问题,所以,如何开发一个应用简单、界面友好、容易操作、数据安全性好的管理系统就成为非常重要的技术问题。4四、数据分析与建模:数据分析数据库在一个信息管理系
4、统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。合理的数据库结构设计可提高数据存储的效率,保证数据的完整和一致。同时,合理的数据库结构也将有利于程序的实现。 数据库需求分析 用户的需求具体体现在各种信息的提供、保证、更新和查询,这就要求数据库结构能够充分满足各种信息的输出和输入。 针对一般学生信息管理系统的要求,通过对学生学习过程的内容和数据流程分析,设计如下的数据项和数据结构: 1、学生基本信息包括的数据项有:学生学号、学生姓名、性别、班级、专业、政治面貌。2、学生成绩信息包括数据项有:学生学号、课程号、考试分数、绩点、学分。3、 学生登入信息有:学
5、号、密码。根据上面的数据结构、数据项和数据流程,进行数据库设计E-R 图学生姓名学号政治面貌性别班级专业5登入学号 密码成绩信息课程号学号所得学分绩点成绩系统流程图6五、数据库建立:学生基本信息表登入表成绩表字段名 类型 长度 允许空 主键学号 char 15 否 是姓名 char 10 否 否专业 char 10 是 否班级 char 4 是 否性别 char 10 是 否政治面貌 char 10 是 否字段名 类型 长度 允许空 主键学号 char 15 否 是密码 char 10 否 否字段名 类型 长度 允许空 主键学号 char 15 否 是课程号 int 4 否 是成绩 float
6、 8 是 否绩点 float 8 是 否所得学分 int 4 是 否7六、数据库应用开发与运行:登入界面登入界面代码Private Sub Cmdcancel_Click()Dim myVal As StringBeepmyVal = MsgBox(“确认退出系统吗?“, vbYesNo + vbQuestion, “退出“)If myVal = vbYes ThenUnload MeElsetxtname.Text = “txtpwd.Text = “txtname.SetFocusEnd IfEnd SubPrivate Sub cmdOK_Click()If txtname.Text “
7、 Thenpassword.RecordSource = “select * from username where 学号=“ + Trim(Txtnum.Text) + “password.Refresh对不是合法用户的错误捕捉If Not (password.Recordset.BOF) ThenIf Trim(Txtpassword1.Text) = “ Or Trim(Txtpassword2.Text) = “ ThenMsgBox “密码为空或输入不相等,请重新输入密码!“, vbInformation + vbOKOnly, “抱歉“Txtpassword1.Text = “Tx
8、tpassword2.Text = “Txtpassword1.SetFocusElseIf Txtpassword1.Text “ And txtname.Text “ & a & “ 筛选总成绩大于 a 成绩的学生result0.Refreshsum = result0.Recordset.RecordCount 计算总数Form4.Txtranking.Text = sum + 1Unload MeForm4.ShowEnd Sub学生基本信息查询“开始查询”按钮代码Private Sub cmdFind_Click()Dim num As StringIf Txtfind.Text “
9、 Then 判断 Txtfind.Text 的输入是否为空,不为空则查找出此学号对应的所有课程的成绩search.RecordSource = “select * from information where 学号=“ + Trim(Txtfind1.Text) + “search.RefreshIf search.Recordset.BOF Then Txtfind.Text 的输入不为空,且和数据库中的学生学号不能对应上MsgBox “抱歉您的用户名不存在 !“, vbInformation + vbOKOnly, “抱歉“Txtfind1.Text = “Txtfind1.SetFocu
10、sElse: num = search.Recordset.Fields(“学号“) Txtfind.Text 的输入的和数据库中的学号对19应上并在 Form4 中显示基本信息Form4.Txtnum.Text = numForm4.txtname.Text = search.Recordset.Fields(“姓名“)Form4.Txtmag.Text = search.Recordset.Fields(“专业“)Form4.Txtclass.Text = search.Recordset.Fields(“班级“)chiness0.RecordSource = “select * from
11、 chiness where 学号=“ + Trim(Txtfind1.Text) + “把大学语文数据表中的学号和“Txtfind1.Text”中学号相等的成绩以及学分取出chiness0.RefreshIf chiness0.Recordset.BOF ThenForm4.Txtchiness.Text = 0Else: Form4.Txtchiness.Text = chiness0.Recordset.Fields(“成绩“)chiness = chiness0.Recordset.Fields(“所得学分“)End Ifenglish0.RecordSource = “select
12、* from english where 学号=“ + Trim(Txtfind1.Text) + “ 取出英语成绩以及学分english0.RefreshIf english0.Recordset.BOF ThenForm4.Txtenglish.Text = 0Else: Form4.Txtenglish.Text = english0.Recordset.Fields(“成绩“)english = english0.Recordset.Fields(“所得学分“)End Ifphysics0.RecordSource = “select * from physics where 学号=“
13、 + Trim(Txtfind1.Text) + “ 取出物理成绩以及学分physics0.RefreshIf physics0.Recordset.BOF ThenForm4.Txtphy.Text = 0Else: Form4.Txtphy.Text = physics0.Recordset.Fields(“成绩“)physics = physics0.Recordset.Fields(“所得学分“)End Ifphotoshop0.RecordSource = “select * from photoshop where 学号=“ + Trim(Txtfind1.Text) + “ 取出
14、 PS 成绩以及学分photoshop0.RefreshIf photoshop0.Recordset.BOF ThenForm4.Txtps.Text = 0Else: Form4.Txtps.Text = photoshop0.Recordset.Fields(“成绩“)photoshop = physics0.Recordset.Fields(“所得学分“)End IfSQL0.RecordSource = “select * from SQL where 学号=“ + Trim(Txtfind1.Text) + “ 取出 SQL 成绩以及学分SQL0.RefreshIf SQL0.Re
15、cordset.BOF ThenForm4.Txtsql.Text = 020Else: Form4.Txtsql.Text = SQL0.Recordset.Fields(“成绩“)SQL = physics0.Recordset.Fields(“所得学分“)End If计算被查找的学生的平均成绩ave = (chiness0.Recordset.Fields(“成绩“) + english0.Recordset.Fields(“成绩“) + physics0.Recordset.Fields(“成绩“) + photoshop0.Recordset.Fields(“成绩“) + SQL0.
16、Recordset.Fields(“成绩 “) / 5ave = Round(ave, 2) 取两位小数Form4.Txtave.Text = ave 赋给相应的文本框credit = (CDbl(chiness) + CDbl(english) + CDbl(physics) + CDbl(photoshop) + CDbl(SQL) 计算被查找的学生的学分credit = 20 - credit 与总学分进行相减If credit = 0 ThenForm4.Txtcredit.Text = 20 已修学分Form4.Txtuncredit.Text = 0 还需修学分Form4.Txtf
17、ail.Text = 0 不及格数目ElseIf credit = 4 ThenForm4.Txtcredit.Text = 16Form4.Txtuncredit.Text = 4Form4.Txtfail.Text = 1ElseIf credit = 8 ThenForm4.Txtcredit.Text = 12Form4.Txtuncredit.Text = 8Form4.Txtfail.Text = 2ElseIf credit = 12 ThenForm4.Txtcredit.Text = 8Form4.Txtuncredit.Text = 12Form4.Txtfail.Text
18、 = 3ElseIf credit = 16 ThenForm4.Txtcredit.Text = 4Form4.Txtuncredit.Text = 16Form4.Txtfail.Text = 4ElseIf credit = 20 ThenForm4.Txtcredit.Text = 0Form4.Txtuncredit.Text = 20Form4.Txtfail.Text = 5End If计算平均绩点point = (chiness0.Recordset.Fields(“绩点“) * chiness0.Recordset.Fields(“所得学分“) + english0.Reco
19、rdset.Fields(“绩点“) * english0.Recordset.Fields(“所得学分“) + physics0.Recordset.Fields(“绩点“) * physics0.Recordset.Fields(“所得学分“) + photoshop0.Recordset.Fields(“绩点“) * photoshop0.Recordset.Fields(“所得学分“) + 21SQL0.Recordset.Fields(“绩点 “) * SQL0.Recordset.Fields(“所得学分“) / (20)point = Round(point, 4) 对平均绩点取
20、四位小数Form4.Txtpoint.Text = pointDim a As Integer 定义变量 aDim sum As Integerresult0.RecordSource = “select *from chengji where 学号 =“ & Txtfind1.Text & “ 取出和 Txtnum 学号相对应的学生总成绩result0.Refresha = result0.Recordset.Fields(“总成绩“)result0.RecordSource = “select * from chengji where 总成绩“ & a & “ 筛选总成绩大于 a 成绩的学
21、生result0.Refreshsum = result0.Recordset.RecordCount 计算总数Form4.Txtranking.Text = sum + 1Form4.ShowForm2.HideEnd IfElse: MsgBox “抱歉,学号为空!“, vbInformation + vbOKOnly, “抱歉“ 如果 Txtfind1 中无任何输入系统进行报错Txtfind1.SetFocussearch.RefreshEnd IfTxtfind1.Text = “End Sub详细功能介绍:此界面可以对学生基本信息的查看,在点击“DataGrid”窗体控件里的某个学时
22、候,会在对应的文本框中显示该学生的基本信息。刚刚加载到此页面时候“确定增加”按钮和“取消增加”按钮为不可用,且文本框、DataGrid 也为不可用状态,防止误操作,多学生信息修改。当点击“添加记录”按钮的时候, “确定增加”按钮和“取消增加”按钮为可用状态,可以进行增加新学生和基本信息,假如输入的学号和数据库中的学生信息表中有重复则增加失败。当输入正确的学号时候,点击“确定增加”则在对应的课程成绩表和密码表中也新增加该学生的信息,初始密码为“123456” ,其它课程信息均为“0” 。当点击删除的时候,关于该学生的所有信息都被删除!“上一条记录”和“下一条记录”则可以查看其它学生的信息。在学生
23、基本信息查询中点击“开始查询” ,则可以查询输入学号学生的信息。当输入为空或者输入学号不存在于数据库中会报错,提醒重新输入。在学生成绩信息查询中“点击开始查询” ,则可以查看输入学号的学生成绩信息以及平均绩点、平均分、名次、已修学分、还需要修学分等信息。而点击“成绩管理界面”22直接进入成绩管理界面,显示默认学生信息。学生基本信息修改界面界面代码“保存”按钮代码Private Sub Cmdsave_Click()txtname.Locked = True 锁住文本框防止误操作Txtclass.Locked = TrueTxtnum.Locked = TrueTxtmag.Locked = T
24、rueTxtsex.Locked = TrueTxtpolity.Locked = TrueDim i As Integer提示用户是否删除记录i = MsgBox(“是否要保存当前修改记录?“, vbYesNo, “警告“)If i = 6 Then 确定修改之后把修改之后的信息上传Form2.search.Recordset.Fields(“学号“) = Form3.Txtnum.TextForm2.search.Recordset.Fields(“姓名“) = Form3.txtname.TextForm2.search.Recordset.Fields(“专业“) = Trim(For
25、m3.Txtmag.Text)Form2.search.Recordset.Fields(“班级“) = Trim(Form3.Txtclass.Text)Form2.search.Recordset.Fields(“性别“) = Trim(Form3.Txtsex.Text)Form2.search.Recordset.Fields(“政治面貌“) = Trim(Form3.Txtpolity.Text)保存修改Form2.search.Recordset.UpdateForm2.search.Refresh23Form2.student.RefreshCmdsave.Enabled = F
26、alseCmdrevise.Enabled = TrueEnd IfEnd Sub详细功能介绍:对查询出来的学生进行基本信息的修改和保存。学生成绩管理界面“确定修改/添加成绩”按钮代码Dim sum As IntegerDim i As Integer 定义 MsgBox 变量Dim ave As Double 定义平均分变量Dim point As Double 定义平均绩点变量Dim credit As String 定义学分变量Dim chiness1 As Integer 定义已修学分变量Dim english1 As Integer24Dim physics1 As IntegerD
27、im photoshop1 As IntegerDim SQL1 As IntegerDim chiness2 As Double 定义已修绩点变量Dim english2 As DoubleDim physics2 As DoubleDim photoshop2 As DoubleDim SQL2 As Doublei = MsgBox(“是否要保存当前修改记录?“, vbYesNo, “提示“)If i = 6 ThenIf CDbl(Txtchiness.Text) = 60 Then 判断修改后的成绩是否大于等于 60,是则顺序执行chiness.Recordset.Fields(“成
28、绩“) = Txtchiness.Textchiness.Recordset.Fields(“绩点“) = (CDbl(Txtchiness.Text) - 45) / 10chiness.Recordset.Fields(“所得学分 “) = 4chiness2 = chiness.Recordset.Fields(“绩点“)chiness1 = 4chiness.Recordset.Updatechiness.RefreshElse: chiness.Recordset.Fields(“成绩“) = Txtchiness.Text 修改后的成绩小于60,则学分和绩点都为 0chiness.
29、Recordset.Fields(“绩点“) = 0chiness2 = chiness.Recordset.Fields(“绩点“)chiness.Recordset.Fields(“所得学分 “) = 0chiness1 = 0chiness.Recordset.Updatechiness.RefreshEnd IfElse: chiness.Recordset.Fields(“成绩“) = Txtchiness.Text 大于 95 则绩点为 5 分且把相应的成绩、学分写入数据库chiness.Recordset.Fields(“绩点“) = 5chiness2 = chiness.Re
30、cordset.Fields(“绩点“)chiness.Recordset.Fields(“所得学分 “) = 4chiness1 = 4chiness.Recordset.Updatechiness.RefreshEnd IfIf CDbl(Txtenglish.Text) = 60 Thenenglish.Recordset.Fields(“成绩“) = Txtenglish.Textenglish.Recordset.Fields(“绩点“) = (CDbl(Txtenglish.Text) - 45) / 10english2 = english.Recordset.Fields(“绩
31、点“)english.Recordset.Fields(“所得学分“) = 4english1 = 4english.Recordset.Updateenglish.RefreshElse: english.Recordset.Fields(“成绩“) = Txtenglish.Textenglish.Recordset.Fields(“绩点“) = 0english2 = english.Recordset.Fields(“绩点“)english.Recordset.Fields(“所得学分“) = 0english1 = 0english.Recordset.Updateenglish.R
32、efreshEnd IfElse: english.Recordset.Fields(“成绩“) = Txtenglish.Textenglish.Recordset.Fields(“绩点“) = 5english2 = english.Recordset.Fields(“绩点“)english.Recordset.Fields(“所得学分“) = 4english1 = 4english.Recordset.Updateenglish.RefreshEnd IfIf CDbl(Txtphy.Text) = 60 Thenphysics.Recordset.Fields(“成绩“) = Txt
33、phy.Textphysics.Recordset.Fields(“绩点“) = (CDbl(Txtphy.Text) - 45) / 10physics2 = Trim(physics.Recordset.Fields(“绩点“)physics.Recordset.Fields(“所得学分“) = 4physics1 = 4physics.Recordset.Updatephysics.RefreshElse: physics.Recordset.Fields(“成绩“) = Txtphy.Textphysics.Recordset.Fields(“绩点“) = 0physics2 = ph
34、ysics.Recordset.Fields(“绩点“)physics.Recordset.Fields(“所得学分“) = 0physics1 = 0physics.Recordset.Updatephysics.RefreshEnd IfElse: physics.Recordset.Fields(“成绩“) = Txtphy.Textphysics.Recordset.Fields(“绩点“) = 5physics2 = physics.Recordset.Fields(“绩点“)26physics.Recordset.Fields(“所得学分“) = 4physics1 = 4phys
35、ics.Recordset.Updatephysics.RefreshEnd IfIf CDbl(Txtps.Text) = 60 Thenphotoshop.Recordset.Fields(“成绩“) = Txtps.Textphotoshop.Recordset.Fields(“绩点“) = (CDbl(Txtps.Text) - 45) / 10photoshop2 = photoshop.Recordset.Fields(“绩点“)photoshop.Recordset.Fields(“所得学分“) = 4photoshop1 = 4photoshop.Recordset.Updat
36、ephotoshop.RefreshElse: photoshop.Recordset.Fields(“成绩“) = Txtps.Textphotoshop.Recordset.Fields(“绩点“) = 0photoshop2 = photoshop.Recordset.Fields(“绩点“)photoshop.Recordset.Fields(“所得学分“) = 0photoshop1 = 0photoshop.Recordset.Updatephotoshop.RefreshEnd IfElse: photoshop.Recordset.Fields(“成绩“) = Txtps.Te
37、xtphotoshop.Recordset.Fields(“绩点“) = 5photoshop3 = photoshop.Recordset.Fields(“绩点“)photoshop.Recordset.Fields(“所得学分“) = 4photoshop1 = 4photoshop.Recordset.Updatephotoshop.RefreshEnd IfIf CDbl(Txtsql.Text) = 60 ThenSQL.Recordset.Fields(“成绩“) = Txtsql.TextSQL.Recordset.Fields(“绩点“) = (CDbl(Txtsql.Text
38、) - 45) / 10SQL2 = SQL.Recordset.Fields(“绩点“)SQL1 = 4SQL.Recordset.Fields(“所得学分“) = 4SQL.Recordset.UpdateSQL.RefreshElse: SQL.Recordset.Fields(“成绩“) = Txtsql.TextSQL.Recordset.Fields(“绩点“) = 027SQL3 = SQL.Recordset.Fields(“绩点“)SQL.Recordset.Fields(“所得学分“) = 0SQL1 = 0SQL.Recordset.UpdateSQL.RefreshEn
39、d IfElse: SQL.Recordset.Fields(“成绩“) = Txtsql.TextSQL.Recordset.Fields(“绩点“) = 5SQL2 = SQL.Recordset.Fields(“绩点“)SQL.Recordset.Fields(“所得学分“) = 4SQL1 = 4SQL.Recordset.UpdateSQL.RefreshEnd If计算修改后的平均分ave = (chiness.Recordset.Fields(“成绩“) + english.Recordset.Fields(“成绩“) + physics.Recordset.Fields(“成绩
40、“) + photoshop.Recordset.Fields(“成绩“) + SQL.Recordset.Fields(“成绩 “) / 5ave = Round(ave, 2)Txtave.Text = avesum = chiness.Recordset.Fields(“成绩“) + english.Recordset.Fields(“成绩“) + physics.Recordset.Fields(“成绩“) + photoshop.Recordset.Fields(“成绩“) + SQL.Recordset.Fields(“成绩 “)scorec.RecordSource = “sel
41、ect *from chengji where 学号 =“ & Txtnum.Text & “scorec.Refreshscorec.Recordset.Fields(“总成绩“) = sumscorec.Recordset.Updatescorec.RecordSource = “ select * from chengji order by 总成绩 desc“scorec.Refresh计算修改后的总学分credit = Str(CDbl(chiness1) + CDbl(english1) + CDbl(physics1) + CDbl(photoshop1) + CDbl(SQL1)
42、credit = 20 - creditIf credit = 0 ThenForm4.Txtcredit.Text = Trim(20)Form4.Txtuncredit.Text = Trim(0)Form4.Txtfail.Text = Trim(0)ElseIf credit = 4 ThenForm4.Txtcredit.Text = Trim(16)Form4.Txtuncredit.Text = Trim(4)Form4.Txtfail.Text = Trim(1)28ElseIf credit = 8 ThenForm4.Txtcredit.Text = Trim(12)For
43、m4.Txtuncredit.Text = Trim(8)Form4.Txtfail.Text = Trim(2)ElseIf credit = 12 ThenForm4.Txtcredit.Text = Trim(8)Form4.Txtuncredit.Text = Trim(12)Form4.Txtfail.Text = Trim(3)ElseIf credit = 16 ThenForm4.Txtcredit.Text = Trim(4)Form4.Txtuncredit.Text = Trim(16)Form4.Txtfail.Text = Trim(4)ElseIf credit =
44、 20 ThenForm4.Txtcredit.Text = Trim(0)Form4.Txtuncredit.Text = Trim(20)Form4.Txtfail.Text = Trim(5)End If计算修改后的平均绩点point = (CDbl(chiness1) * CDbl(chiness2) + CDbl(english1) * CDbl(english2) + CDbl(physics1) * CDbl(physics2) + CDbl(photoshop1) * CDbl(photoshop2) + CDbl(SQL1) * CDbl(SQL2) / (20)point
45、= Round(point, 4)Txtpoint.Text = pointDim a As IntegerDim sum0 As IntegerAdodc1.RecordSource = “select *from chengji where 学号 =“ & Txtnum.Text & “Adodc1.Refresha = Adodc1.Recordset.Fields(“总成绩“)Adodc1.RecordSource = “select * from chengji where 总成绩“ & a & “Adodc1.Refreshsum0 = Adodc1.Recordset.Recor
46、dCountTxtranking.Text = sum0 + 1Txtchiness.Locked = True 对文本框进行锁定,防止误操作Txtenglish.Locked = TrueTxtphy.Locked = TrueTxtps.Locked = TrueTxtsql.Locked = TrueCmdrevise.Enabled = True 锁住确定修改/ 添加键,释放添加/修改键Cmdsure.Enabled = FalseCmdup.Enabled = True 释放相应的查看键Cmdnext.Enabled = True29Cmdback.Enabled = TrueEls
47、e 取消修改操作Cmdrevise.Enabled = True 锁住确定修改/ 添加键,释放添加/修改键Cmdsure.Enabled = FalseCmdup.Enabled = True 释放相应的查看键Cmdnext.Enabled = TrueCmdback.Enabled = TrueTxtchiness.Locked = True 对文本框进行锁定,防止误操作Txtenglish.Locked = TrueTxtphy.Locked = TrueTxtps.Locked = TrueTxtsql.Locked = TrueEnd IfEnd Sub“上一条记录”按钮代码(“下一条
48、记录”代码和“上一条记录”代码相似)Private Sub Cmdup_Click()Dim chiness1 As Double 定义绩点变量Dim english1 As DoubleDim physics1 As DoubleDim photoshop1 As DoubleDim SQL1 As DoubleDim chiness2 As Integer 定义学分变量Dim english2 As IntegerDim physics2 As IntegerDim photoshop2 As IntegerDim SQL2 As IntegerDim point As Double 定平
49、均义绩点变量Dim credit As Integer 定义已修学分变量Dim credit1 As IntegerTxtnum.DataField = “学号 “ 将文本框和数据库链接Txtname.DataField = “姓名“Txtmag.DataField = “专业“Txtclass.DataField = “班级 “30result.Recordset.MovePrevious 学生基本信息移至下一条,有数数据库中有主键相连接,所以成绩表也更着一起同步移动If result.Recordset.BOF ThenMsgBox “已经是第一条学生信息!“, vbInformation + vbOKOnly, “抱歉“result.Recordset.MoveFirstEnd If取出相应课程的绩点、学分和成绩chiness.RecordSource = “select * from chiness