pb学生成绩管理系统课程设计报告书.docx
《pb学生成绩管理系统课程设计报告书.docx》由会员分享,可在线阅读,更多相关《pb学生成绩管理系统课程设计报告书.docx(53页珍藏版)》请在冰豆网上搜索。
pb学生成绩管理系统课程设计报告书
2010-2011学年第1学期
PowerBuilder程序设计
(专业选修课)
学号:
姓名:
班级:
答辩情况:
1、程序难易程度:
难(),较难(),一般(),简单();
2、程序工作量:
大(),较大(),一般(),较小();
3、基本操作:
熟练(),较熟练(),一般(),不熟练(),
极不熟练();
4、代码理解:
准确(),较准确(),一般(),不准确(),
极不准确();
平时成绩:
优秀(),良好(),中等(),一般()
总评成绩:
任课教师:
2010年12月
学生成绩管理系统
一、系统分析与设计
在任何高等院校,学生的成绩管理都是学校教务管理的重要环节之一。
随着学校学生人数的增加,学生成绩管理的任务更加繁重,必须借助现代化的管理工具和手段提高学生成绩管理效率。
学生成绩管理系统广泛适用于高校教务管理部门的学生成绩管理。
1、系统功能分析
系统功能分析阶段的任务就是确定该系统所要解决的问题及其具体要求。
需要通过与用户的交流和沟通明确用户对系统的功能要求,最终列出系统可以实现的功能由用户确认。
本例中的学生成绩管理系统需要完成的主要功能如下。
⑴班级信息的输入和存储,包括班级编号、班级名称、所属院系、入校时间和学制等。
⑵对已经输入的班级信息的修改、查询。
⑶学生基本信息的输入和存储,包括学号、姓名、性别、出生日期、班级等。
⑷学生基本信息的修改和查询。
⑸每学期初各班所开设课程的输入,包括课程名、学期、学时等。
⑹各班所开设课程信息的修改和查询。
⑺学期末输入每个学生的考试成绩。
⑻学生成绩的修改。
⑼查询某个学生某学期的各科成绩。
⑽查询并打印某班某学期所有学生的各科成绩。
⑾查询并打印某班某学期某科成绩。
⑿系统具有用户和密码的管理。
2、系统功能模块设计
通过对上述各项功能的分析、分类、综合,按照模块化程序设计的要求,得到如图1所示的功能模块图。
二、数据库设计与实现
数据库在一个管理信息系统中占有非常重要的地位,数据库结构的好坏将直接影响到应用系统的实现效果和数据操作效率以及能否保证数据的一致性、完成性和安全性。
图1系统功能模块
1、数据库设计
根据学生成绩管理系统的功能要求,通过分析系统要涉及的相关实体以及要收集、存
储和操纵的数据信息,得到如图2所示的系统E-R图。
根据系统E-R图得到以下关系模式。
班级(班级编号,班级名称,所属院系,学制,入学时间,人数)。
学生基本信息(学号,姓名,性别,出生日期,家庭住址,班级编号)。
课程(班级编号,学期,课程名称,学时,教师)。
成绩(学号,学期,课程名称,成绩)。
为了系统的使用安全,要建立用户管理,而用户使用权限分为管理员和一般用户两类,因此需要建立一个存储用户信息的关系。
用户(姓名,密码,用户类型)。
2、创建数据库
根据关系模式,确定需要建立的数据库和表。
在PowerBuilder开发环境中打开数据库画板,使用【ODBODBC】接口建立AdaptiveServerAnywhere9.0(ASA9.0)的数据库D:
\xscj\data\xscj.db,然后依次建立以下5个表和1个视图。
图2系统E_R图
1)“class”表
表名:
banji
主键:
bjbh
班级表
2)“student”表
表名:
jiben
主键:
xh
学生表
3)“subject”表
表名:
bjkc
主键:
(bjbh,xq,kcmc)
课程表
4)“xscj”表
表名:
xscj
主键:
(xh,xq,kcmc)
学生成绩表
5)“users”表
表名:
users
主键:
xm
用户表
各个表之间通过外键形成如图3所示的关联关系。
6)视图
为了访问数据库方便,还建立了1个视图“v_1”,该视图由学生基本信息表和班级
表连接而成,对应的SQL语句如下。
CREATEVIEWv_1(xh,xm,xb,csrq,bjbh,bjmc,zymc)AS
SELECT
student.xh,student.xm,student.xb,student.csrq,student.bjbh,class.bjmc,class.xbmc
FROMstudent,class
WHERE(class.bjbh=student.bjbh);
完成数据库和表的创建后,可以在数据库画板中向数据库输入部分数据。
其中,“用户”表中必须输入一条记录(“900001”,“123456”,“管理员”),作为进入系统默认的管理员,即账号为“900001”,密码为“123456”,用户类型“管理员”。
图3、各表的关联关系
三、创建应用对象
完成数据库的设计和系统功能设计之后,可以开始各个功能模块的实现。
在PowerBuilder中开发应用程序时,就是创建各种对象、为对象设置属性以及编写事件脚本的过程。
⑴创建新的工作空间,工作空间文件路径及名称设为“d:
\xscj\workplace.pbw”。
⑵创建应用对象,应用对象名设为“xscj”,应用库文件路径及名称设为“d:
\xscj\xscj.pbl”,目标文件路径及名称设为“d:
\xscj\xscj.pbt”。
(3)为应用对象xscj的Open事件编写代码如下。
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="ConnectString='DSN=student;UID=dba;PWD=sql'"
CONNECT;
ifSQLCA.sqlcode<>0then
messagebox("提示","数据库连接失败!
")
else
open(w_main)
endif
四、设计系统管理模块
本模块实现用户登录控制、学生能查询自己的个人成绩,教师能录入班级的课程信息,
管理员能实现对用户管理的控制以及对一些基本信息的录入。
1、设计登录窗口
图4窗口w_load
1)创建窗口并设置属性
创建登录窗口w_load,调整其大小,在窗口上放置1个图片控件(p_1)、4个静态文本
对象
属性
取值
w_main
Title
登录
WindowType
Response!
p_1
picturename
登录.jpg
st_1
text
账号
st_2
text
密码
password
TRUE
st_3
text
用户类型
st_4
text
欢迎登录学生管理学系统
TextColor
LinkHove
FaceName
华文斜体
sle_1
text
""
sle_2
text
""
cb_1
text
登录
cb_2
text
退出
表1
控件(st_1、st_2、st_3、st_4)、2个单行编辑器控件(sle_1、sle_2)、1个下拉列表控件(ddlb_1)、
2个命令按钮控件(cb_1、cb_2),各个控件的属性如表1所示,表中未列出的采用默认值
2)编写脚本
⑴定义全局变量。
stringgs_username,gs_password,gs_admin
分别存储登录用户的账号、密码和用户类型。
⑵定义实例变量。
intli_n
存储登录时用户输入密码错误的尝试次数,控制在最多3次机会不能是局部变量。
⑶登录窗口w_login的Open事件脚本如下。
li_n=3
初始化变量li_n,限制出错次数为3次。
⑷【登录】按钮cb_1的Clicked事件脚本如下。
stringls_username,ls_password,ls_admin
ls_username=trim(sle_1.text)
ls_password=trim(sle_2.text)
ls_admin=ddlb_1.text
ifls_username=""orls_password=""orls_admin=""then
messagebox("提示","账号,密码,用户类型不能为空")
else
SELECT"users"."name","users"."password","users"."admin"
INTO:
gs_username,:
gs_password,:
gs_admin
FROM"users"
WHERE("users"."name"=:
ls_username)AND
("users"."password"=:
ls_password)AND
("users"."admin"=:
ls_admin);
ifsqlca.sqlcode=0then
open(w_main)
close(w_load)
else
li_n=li_n-1
ifli_n<>0then
messagebox("提示","账号或密码错误")
else
messagebox("提示","错误超过3次,自动退出")
halt
endif
endif
⑸【退出】按钮cb_2的Clicked事件脚本如下。
halt//退出程序
2、设计密码修改窗口
密码修改窗口如图5所示。
1)创建窗口并设置属性
创建密码修改窗口w_mmxg,调整其大小,在窗口上放置3个静态文本控件(st_1、st_2、st_3)、3个单行编辑器控件(sle_1、sle_2、sle_3)、2个命令按钮控件(cb_1、cb_2),各个控件的位置和大小参照图5调整。
其他需要修改的属性见表2,表中未列出的属性保留其默认值。
图5窗口w_mmxg
对象
属性
取值
w_mmxg
Title
用户密码设置
WindowType
Response!
p_1
picturename
密码修改.jpg
st_1
text
旧密码
st_2
text
新密码
password
TRUE
st_3
text
重新输入新密码
sle_1
text
""
password
TRUE
sle_2
text
""
password
TRUE
sle_3
text
""
password
TRUE
cb_1
text
确定
cb_2
text
取消
表2
2)编写脚本
(1)【确定】按钮cb_1的Clicked事件脚本如下。
stringls_password
iftrim(sle_1.text)<>gs_passwordthen
messagebox("提示","旧密码错误")
else
iftrim(sle_2.text)=(sle_3.text)then
ls_password=trim(sle_2.text)
UPDATE"users"
SET"password"=:
ls_password
WHERE("users"."name"=:
gs_username)AND
("users"."password"=:
gs_password);
ifsqlca.sqlcode<>0then
messagebox("提示","密码修改不成功")
else
close(parent)
messagebox("提示","密码修改完成")
endif
else
messagebox("提示","两次密码不相同")
endif
endif
(2)【取消】按钮cb_2的Clicked事件脚本如下。
close(parent)
3、设计用户管理的数据窗口和窗口
1)设计数据窗口
创建数据窗口“d_yhgl”,显示风格为“Grid”,数据源类型为“QuickSelect”,布局如图6所示。
数据窗口d_yhgl生成的SQLSelect语句为:
SELECT"users"."name","users"."password","users"."admin"
FROM"users"
图6数据窗口d_yhgl
其中列控件“admin”的编辑风格改为“DropDownListBox”,码表(CodeTable)下图所示。
2)创建窗口并设置属性
创建用户管理窗口w_yhgl,调整其大小,在窗口上放置1个数据窗口控件(dw_1)、
4个命令按钮控件(cb_1、cb_2、cb_3、cb_4),各个控件的位置和大小如图7所示,其
对象
属性
取值
w_mmxg
Title
用户密码设置
WindowType
Response!
p_1
picturename
用户管理.jpg
dw_1
DataObject
d_yhgl
VScrollbar
TRUE
HScrollbar
TRUE
cb_1
text
添加
cb_2
text
删除
cb_3
text
保存
Enabled
FALSE
cb_4
text
退出
表3
他需要修改的属性见表3,表中未列出的属性保留其默认值。
图7窗口w_yhgl
3)编写脚本
(1)用户管理窗口w_yhgl的Open事件脚本如下。
dw_1.settransobject(sqlca)
dw_1.retrieve()
(2)用户管理窗口w_yhgl的Closequery事件脚本如下。
integerrt
dw_1.accepttext()
ifdw_1.modifiedcount()=0anddw_1.deletedcount()=0then
return0
else
rt=messagebox("提示","添加修改内容未保存,确实退出吗?
",Question!
YesNo!
)
ifrt=1then
return0
endif
endif
return1
(3)数据窗口控件dw_1的Itemchanged事件脚本如下。
cb_3.enabled=true//激活“保存”按钮
(4)【添加】按钮控件cb_1的Clicked事件脚本如下。
integerrow
row=dw_1.insertrow(0)
dw_1.scrolltorow(row)
(5)【删除】按钮控件cb_2的Clicked事件脚本如下。
dw_1.deleterow(0)
cb_3.enabled=true
(6)【保存】按钮控件cb_3的Clicked事件脚本如下。
ifdw_1.update(true,false)=1then
dw_1.resetupdate()
commit;
cb_3.enabled=false
else
rollback;
messagebox("提示","保存数据失败!
")
endif
(7)【退出】按钮控件cb_4的Clicked事件脚本如下。
close(parent)
五、设计主窗口和菜单
主窗口和菜单是系统工作的主界面。
1、创建菜单对象
菜单结构如图8所示。
菜单对象名为“m_main”,菜单栏中的菜单项设置了访问
键(AccessKey),菜单项在工具条上建立了图标按钮。
(1)【系统】菜单下【密码修改】菜单项的Clicked事件脚本如下。
open(w_mmxg)
(2)【系统】菜单下【用户管理】菜单项的Clicked事件脚本如下。
open(w_yhgl)
(3)【系统】菜单下【退出系统】菜单项的Clicked事件脚本如下。
close(parentwindow)
(4)【班级管理】菜单下【录入班级信息】菜单项的Clicked事件脚本如下。
opensheet(w_banji_shuru)
(5)【班级管理】菜单下【修改班级信息】菜单项的Clicked事件脚本如下。
opensheet(w_banji_xiugai)
图8菜单m_main
(6)【班级管理】菜单下【浏览班级信息】菜单项的Clicked事件脚本如下。
open(w_banji_liulan)
(7)【学生管理】菜单下【录入学生信息】菜单项的Clicked事件脚本如下。
open(w_student_shuru)
(8)【学生管理】菜单下【修改学生信息】菜单项的Clicked事件脚本如下。
open(w_student_xiugai)
(9)【学生管理】菜单下【查询学生信息】菜单项的Clicked事件脚本如下。
open(w_student_chaxun)
(10)【课程管理】菜单下【录入/修改开设课程】菜单项的Clicked事件脚本如下。
open(w_subject_shuruxiugai)
(11)【课程管理】菜单下【查询开设课程信息】菜单项的Clicked事件脚本如下。
open(w_subject_chaxun)
(12)【成绩管理】菜单下【录入修改成绩】菜单项的Clicked事件脚本如下。
open(w_xscj_shuru)
(13)【成绩管理】菜单下【查询个人成绩】菜单项的Clicked事件脚本如下。
open(w_xscj_grcx)
(14)【成绩管理】菜单下【查询班级成绩】菜单项的Clicked事件脚本如下。
open(w_xscj_bjcx)
(15)【成绩管理】菜单下【查询课程成绩】菜单项的Clicked事件脚本如下。
open(w_xscj_kccx)
(16)【窗口】菜单下【层叠窗口】菜单项的Clicked事件脚本如下。
//w_main.arrangesheets(cascade!
)
(17)【帮助】菜单下【关于】菜单项的Clicked事件脚本如下。
open(w_about)
2、设计主窗口
创建主窗口w_main如图9所示,其需要设置的属性如表4所示,表中未列出的属性保留其默认值。
图9主窗口w_main
对象
属性
取值
w_main
Title
学生成绩管理系统
WindowType
main!
MenuName
m_main
MaxBox
FALSE
p_1
picturename
主界面.jpg
表4
窗口对象w_main的Open事件脚本如下。
ifgs_admin="学生"then
m_main.m_系统.m_用户管理.enabled=false
m_main.m_学生管理.enabled=false
m_main.m_班级管理.enabled=false
m_main.m_课程管理.m_录入修改开设课程信息.enabled=false
m_main.m_成绩管理.m_录入修改成绩.enabled=false
m_main.m_成绩管理.m_查询班级成绩.enabled=false
m_main.m_成绩管理.m_查询课程成绩.enabled=false
else
ifgs_admin="教师"then
m_main.m_系统.m_用户管理.enabled=false
m_main.m_学生管理.enabled=false
m_main.m_班级管理.enabled=false
endif
endif
其功能是对用户进行权限控制。
六、设计班级管理模块
本模块实现班级信息的输入、修改和查询。
1、设计访问班级信息的数据窗口
1)设计输入班级信息的数据窗口
创建数据窗口d_class_shuru,显示风格为“Freeform”,数据源类型为“QuickSelect”,
其布局如图10所示。
数据窗口d_class_shuru生成的SQLSelect语句为:
SELECT"class"."bjbh","class"."bjmc","class"."xbmc","class"."xz","class"."rxsj","class"."rs"FROM"class"
图10数据窗口d_class_shuru
2)设计修改班级信息的数据窗口
创建数据窗口d_class_xiugai,显示风格为“Grid”,数据源类型为“QuickSelect”,
其布局如图11所示。
图11数据窗口d_class_xiugai
数据窗口d_class_xiugai生成的SQLSelect语句为:
SELECT"class"."bjbh","class"."bjmc","class"."xbmc","class"."xz","class"."rxsj","class"."rs"
FROM"class"
ORDERBY"class"."bjbh"ASC
2、设计访问班级信息的窗口
首先设计两个通用的输入窗口和修改窗口作为父对象,实现一般输入和修改的功能,
窗口中的数据窗口控件不设定具体的数据窗口对象,在继承的窗口对象中再设定。
通过继
承可以简化程序设计,实现代码重用。
1)设计输入窗口
创建窗口对象w_shuru,调整其大小,放置1个数据窗口控件(dw_1)、8个命令按钮控
件(cb_1~cb_8),窗口布局如图12所示。
窗口及其控件的属性设置见表5。
图12窗口w_shuru
对象
属性
取值
w_shuru
Title
WindowType
response!
cb_1
text
添加
cb_2
text
删除
cb_3
text
保存
Enabled
FALSE
cb_4
text
退出
cb_5
text
|<<
cb_6
text
<
cb_7
text
>
cb_8
text
>>|
dw_1
VscrollBar
TRUE
表5
设置完属性后开始编写脚本代码,其中窗口w_shuru的Open事件和Closequery事件、命令按钮(【添加】、【删除】、【保存】和【退出】)的Clicked事件同窗口w_yhgl的相应事件脚本,在此不再重复。
其他命令按钮的事件脚本如下。
(1)【|<<】按钮的Clicked事件脚本如下。
dw_1.scrolltorow
(1)
(2)【<】按钮的Clicked事件脚本如下。
dw_1.scrollpriorrow()
(3)【>】按钮的Clicked事件脚本如下。
dw_1.scrollnextrow()
(4)【>>|】按钮的Clicked事件脚本如下。
dw_1.scrolltorow(dw_1.rowcount())
2)设计修改窗口
创建窗口对象w_xiugai,调整其大小,放置1个数据窗口控件(dw_1)、4个命令按钮
控件(cb_1~cb_4),窗口布局如图13所示。
窗口及其控件的属性设置见表6,表中未列出的采用默认值。
图13窗口w_xiugai
对象
属性
取值
w_shuru
Title
WindowType
response!
cb_1
text
添加
cb_2
text
删除
cb_3
text
保存
E