数据库开发与维护
一.分析与建模
系统业务流程图
项目用例图:
功能需求分析与建模
数据需求分析与建模
体之间的联系:学生信息表(student)、教师信息表(teacher)、管理员信息表(Administrator)、课程表(course)、选课表(curricula_variable)、成绩表(score)、公告发布表(announcement)。几张表格。
- 管理员(Administrator):管理号、姓名、性别、年龄、联系电话、密码、邮箱
- 公告(announcement):通知编号、管理号、通知标题、 通知内容
- 学生(student):学号、姓名、性别 、民族、入学时间、专业、培养层次、学生联系电话、学生 QQ、密码、邮箱
- 成绩(score):学生编号、 课程编号、教师编号、学期、分数
- 教师(teacher):教师编号、教师姓名、教师姓名、职称、所在学院、教师联系电话、教师 QQ、密码、邮箱
- 选课表(curricula_variable):选课编号、学号、课程号、学生编号、教师编号、上课时间、学生姓名、教师姓名、是否选课、教师审核
- 课程(course):课程号、课程名、学分、课程简介
二.系统设计
功能设计
根据学生选课排课--成绩查询管理的需要,学生成绩管理系统从功能上共分几大模块,其结构如图
- 系统管理员模块:可以进行管理员、教师、学生等不同身份选择性的登陆,对用户权限进行限制,方便不同级别用户工作。
- 学生管理模块:该模块主要功能是完成查看学生成绩信息、打印成绩报表。修改个人信息、查看公告和选课学习课程等功能。
- 教师管理模块:该模块主要功能是审核学生的选课,查看,学生成绩、选课、当有挂科时候,发布公告通知、以及对相关学生的成绩的录入合提交给管理员管理功能。
- 数据库管理员模块:该模块主要功能是查看、审核学生的选课情况、发布公告通知学生和教师,以及删除过于陈旧、误发布的公告。新增加、删除、修改、查询学生教师用户的个人信息。审核教师提交的学生成绩。还附带开发出完成数据的备份、,误删除以及恢复功能。
数据库设计
在学生成绩管理数据库中需建立至少 7 个必要的数据表:学生信息表(student)、教师信息表(teacher)、管理员信息表(Administrator)、课程表(course)、选课表(curricula_variable)、成绩表(score)、公告发布表(announcement)。
系统实现
对系管理员而言,进入登陆界面后,可直接调用数据库中数据修改、查询本系统现有学生成绩信息等;对教师而言,进入登陆界面后,不仅有对教师自身信息能够得取得相关的权限外,可对全校学生成绩修改、查询,统计补考人员,打印成绩单等的操作。对于学生而言,可以实现自己的选课功能,成绩查询和预览、打印成绩单,查看公告。
数据库设计
三.系统开发与维护中的重难点
系统开发与维护环境
近几年来,随着学院新校建设、办学、招生规模的扩大,学校校生从 几千余人增加到 几万余人。与之对应的学生成绩信出现了几何式的增长, 使学校的的教务管理工作变的异常繁重,经常出现成绩查询不准确、补考学生统计不全等情况,采用传统的管理模式不适应学院当前的要求,因此学生成绩管理自动化、信息化也被提上了日程。在学校教务工作中占有很大比重的一项就是每学期末的成绩录入、成绩打印工作,以及部分选课在网上选课,采用传统的人工进行管理不仅任务重、效率低,而且易出错、不易查询、难于维护。
学生成绩管理系统正是为了减轻教务人员工作量,实现学校管理自动化,解决学院学生成绩管理难这一难题的办公软件。本系统以中文版 Power bulider 12.5 为前台开发工具,PowerDesign 15.1 和使用目前到 2018 年为止的最新的 Oracle 11g 数据库作为后台数据库。系统对操作人员的计算机水平要求不高,对他们几乎不加培训便能掌握系统的大部分功能使用。
硬件环境:
c
windows XP/win7 x86 x64/win10 x86 x64
软件开发环境:
c
Power bulider 12.5/ PowerDesign 15.1/Oracle 11g
选择原因:
开发时候,因为大部分时间都需要在机房里面进行编写,而 XP 的系统现在还有一部分在计算机机房存在,所以要考虑到兼容,还有主要占领大部分份额的 win7 和现在正在推行的外 win10 的操作系统,都是需要考虑的能够兼容运行的。而实际上面我们开发了中考虑到了 PowerBuilder 提供了对目前流行的大多数关系数据库管理系统的支持,并且在 PowerBuilder 的应用程序中对数据库访问的部分一般采用国际化标准数据库查询语言 SQL,方便我们使用 PowerBuilder 开发的应用程序的时候,可以不做修改或者只做少量的修改就可以在不同的后台数据库管理系统上使用。并且 PowerBuilder 开发的应用程序是独立于服务器上的数据库管理系统的。使用 PowerDesigner 不仅可以加速了开发的过程,而且也向最终的用户提供了管理和访问项目的信息的一个有效的结构方式。它允许我们编码时候创建和管理数据的结构,和开发和利用数据的结构针时候,使用开发工具环境快速地生成应用对象和数据敏感的组件。后台的数据库使用 Oracle 11g 则是考虑了它提供的高性能、伸展性、可用性和安全性,并且更方便地在低成本服务器和存储设备组成的网格上运行 ,相对过往版本而言,Oracle 11g 具有了与众不同的特性。
系统开发与维护的重难点
教师登录界面
c
user1=sle_1.text
psw1=sle_2.text
username=user1
...
if rb_2.checked=true then
select count(*) into :count1 from teachers where tno= :user1;
select count(*) into :count2 from teachers where tno=:user1 and tpsw=:psw1 ;
if count2=1 then
open(w_teacher_main)
close(parent)
else
if count1=1 then
messagebox("提示","密码错误!")
count0=count0+1
if count0=3 then
messagebox("提示","错误三次!")
close(parent)
else
end if
else
messagebox("提示","用户名不存在!")
count0=count0+1
if count0=3 then
messagebox("提示","错误三次!")
close(parent)
else
end if
end if
end if
课程信息管理:上传课程信息、检查课程信息
c
dw_1.dataobject="d_student_view_course"
dw_1.settransobject(sqlca)
dw_1.insertrow(0)
dw_1.retrieve("%")
dw_1.settransobject(sqlca)
dw_1.getrow()
dw_1.retrieve("%"+sle_1.text+"%")
integer i
messagebox("提示","课程信息上传成功!")
dw_1.update()
commit;
i=dw_1.insertrow(0)
dw_1.scrolltorow(i)
dw_1.settransobject(sqlca)
dw_1.insertrow(0)
close(parent)
成绩管理:录入学生成绩、查看学生成绩、打印学生成绩
c
dw_1.settransobject(sqlca)
dw_1.insertrow(0)
integer i
messagebox("提示","成绩录入成功!")
dw_1.update()
commit;
i=dw_1.insertrow(0)
dw_1.scrolltorow(i)
close(parent)
dw_1.dataobject="d_select_chengji"
dw_1.settransobject(sqlca)
//dw_1.insertrow(0)
dw_1.retrieve("%")
dw_1.retrieve("%"+sle_1.text+"%")
dw_1.settransobject(sqlca)
dw_1.getrow()
dw_1.dataobject="d_select_chengji"
dw_1.settransobject(sqlca)
dw_1.retrieve("%")
dw_1.object.datawindow.print.preview=true
dw_1.print()
个人信息管理:密码修改、查看个人信息
c
string psw1
username=sle_1.text
select tpsw into :
psw1 from teachers where tno=:
username;
if sle_2.text=psw1 then
if sle_3.text=sle_4.text then
update teachers set tpsw=:
sle_3.text where tno=:
username;
messagebox("提示","密码修改成功")
close(parent)
else
messagebox("提示","两次密码不一致")
end if
else
messagebox("提示","原密码错误")
end if
dw_1.settransobject(sqlca)
dw_1.retrieve(username)
dw_1.settransobject(sqlca)
dw_1.getrow()
公告管理模块:发布、查看、删除、打印公告
c
dw_1.settransobject(sqlca)
dw_1.insertrow(0)
integer i
messagebox("提示","公告插入成功!")
dw_1.update()
commit;
i=dw_1.insertrow(0)
dw_1.scrolltorow(i)
dw_1.settransobject(sqlca)
dw_1.insertrow(0)
dw_1.dataobject="d_gonggao1"
dw_1.settransobject(sqlca)
dw_1.retrieve("%")
dw_1.retrieve("%"+sle_1.text+"%")
dw_1.deleterow(dw_1.getrow())
dw_1.update()
选课管理:查看学生选课
c
dw_1.dataobject="d_teacher_view_course1"
dw_1.settransobject(sqlca)
dw_1.insertrow(0)
dw_1.retrieve("%")
dw_1.settransobject(sqlca)
dw_1.getrow()
四.总结
通过为期五周的课程小学期实训教程的临近结束,有一开始的有一个大概的了解数据库,到后来模糊知道了使用 PowerBuild 编写界面程序,发现它是能够如此之快的在短时间类完成相关的一个带界面的管理类程序软件。
随着信息技术的发展,办公自动化已成为社会发展的主要趋势,学生选课--成绩管理系统的开发也就必不可少了,因此在这次的实践活动中,我们决定采用目前流行的 PowerBuilder12.5+Oracle11g+PowerDesign15.0 设计了一个小型的学生选课--成绩查询系统,以增加对于项目的经验积累。完成项目之后,且对设计结果进行了一定的总结。总结如下:
对于 E_R 图,生成表、和表与表之间的联系一定要正确,最好不要有大的问题。可以在设计过程中反复修改,以达到完美。而学生选课--成绩查询管理因为其日常事务比较繁琐,在设计数据库表之前一定要对系统的设计有一个整体的认识,对学生信息和课程信息进行整理,设计好各功能模块的 E-R 图。这样,在后期的编码设计时,避免了在后期便编写源码的过程中反复更改之前设计的表和相关 E-R 图。尤其是注意一点,千千万万不要命名使用英文和拼音混合,不然的话会是一个很悲伤的故事,还经常找不到相关的设计
对于公共部分的源码,窗口控件和布局都可以设计成具有通用性质,以提高编写的性能和缩短研发速度。还要注意代码的健壮性、稳定性和测试时候的一些边缘值的测试。在设计各个功能模块时,要考虑和其他模块的联系,更要结合实际情况对窗口要放置的空间进行分析,尤其在编制代码是要充分考虑各种限制条件,对不同的身份规定其不同的登录权限。
还要注意与组员之间的沟通和交流,毕竟每个小组都是分工合作的,当组员出现了 bug 的时候,要能够帮助其找出错误,向互联网和组长和老师寻求帮助,以提高团队的氛围和整体水平,还可以促进大家之间的情感交流。何乐而不为?
最后通过本小学期实践教学环节,我们不仅掌握了设计的基本步骤,懂得了编程的规范化,习惯和命名的规范化,设计初期的重要性和严谨性,编写的源码程序具有容错性和健壮性。并且在这五周之中,也离不开老师的耐心辅导,总是为了我们的知识的完备性,讲着更多的知识点,希望我们能够学的更好,辛苦劳累。最后通过这次的学习,加深了我们对软件开发的认识与理解。也为今后的开发打下了坚实基础和宝贵的经验。