学生成绩管理系统PB课程设计.docx
- 文档编号:8507217
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:42
- 大小:1.11MB
学生成绩管理系统PB课程设计.docx
《学生成绩管理系统PB课程设计.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统PB课程设计.docx(42页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统PB课程设计
PB课程设计
学
生
成
绩
管
理
系
统
学号:
姓名:
指导老师:
引言
Powerbuilder是目前最有代表性的数据库前端开发工具之一。
它具有强大的数据库管理功能,以特有的数据窗口技术和简单易用功能强大的powerscript语言满足了快速开发和实施的需要。
在这个学期学习的powerbuilder结合数据库原理进行了本系统的设计,本系统为学生成绩管理系统,制作了一个小型的系统,实现了基本的学生成绩管理功能,在实践中进一步理解和掌握了数据库技术,并使所学的知识有一定的应用价值。
学生成绩管理系统能够有效运行,从而完成自动,高效,科学的学生和老师信息的输入和维护,以及老师对学生成绩的录入。
系统开发的总体任务是实现学生成绩管理的系统化,规范化和自动化,同时这是对学完powerbuilder之后开发的第一次完整实践。
本学生成绩管理系统主要包括三大模块:
一、管理员模块,管理员可对教师和学生的基本信息进行输入和维护,对学校课程进行录入、修改,对学生成绩的查看等。
二、教师模块,教师可查看自己的基本信息,以及对录入学生成绩和登陆密码的修改等。
三、学生模块,学生可查看自己的基本信息、课表,以及选课、退课和修改登陆密码等。
本系统中,基本满足对学生成绩的管理,没有对学生成绩进行统计分析。
通过做这次的学生成绩管理系统,自己受益匪浅,由于水平有限,不当之处在所难免,恳请老师批评指正。
一、系统分析和设计
学生成绩管理是学校教务管理的重要环节之一。
近年来,随着高校的不断扩招,学生人数越来越多,学生成绩管理的任务更加繁重,必须借助现代化的管理工具和手段提高学生成绩管理效率。
学生成绩管理系统广泛应用于高校教务管理部门的学生成绩管理,其作用和功能也是学生比较熟悉和容易理解的。
一个应用系统的开发过程包括分析、设计、实现、调试和发布等阶段。
以下是分析说明。
1.1系统功能分析
本系统可以实现的功能主要包括以下几点:
(1)管理员对学生基本信息的输入和维护,包括学号、姓名、性别、专业、总学分等。
(2)管理员对教师基本信息的输入和维护,包括职工号、姓名、年龄、性别、所授的课程号等。
(3)管理员对用户权限的设置,包括用户名、密码、和登陆权限等。
(4)管理员对课程信息的输入和修改,包括课程号、课程名、开课学期、学时、学分等。
(5)管理员对学生成绩的查询等。
(6)教师对学生成绩的录入以及登陆密码的修改等。
(7)学生对自己基本信息、课表和成绩查询,快速选课,修改登陆密码等。
1.2系统功能模块设计
通过对上述功能的分析、分类、综合,按照模块化程序设计的要求,得到如图
2-1所示的功能模块图。
图2-1
二、数据库设计与实现
数据库在学生成绩管理系统中占有非常重要的地位,数据库结构的好坏将直接影响到应用系统操作效率已经能否保证数据的一致性、完成性和安全性。
2.1数据库设计
根据学生成绩管理系统的功能要求,通过分析系统要设计的相关实体一集要收集、存储和操纵数据信息,得到如下图所示的系统E-R图。
关系模式如下:
学生基本信息(学号,姓名,性别,专业,总学分)
教师基本信息(职工号,姓名,年龄,性别,所授课程)
课程(课程号,课程名,开课学期,学时,学分)
成绩(学号,课程号,成绩,所获学分)
用户(用户账号,密码,权限)
E-R图如图3-1:
1
n
n
1
1
1
图3-1
2.2创建数据库
开始,在E盘根目录下建立本实例的工作文件夹“workspace”再在”E:
\workspace”文件夹下建立文件夹”data”,用于存储数据文件。
选择ODBODBC----Utilities---CreateASADatabase,如图4-1
图4-1
选择table----newtable设置参数如图4-2到图5-4。
图4-2
图4-3
图5-1
图5-2
图5-3
图5-4
1.“学生”表
表名:
student
主键:
xh
2.“教师”表
表名:
teacher
主键:
zgh
外键:
kch
3.“课程”表
表名:
kc
主键:
kch
4.“成绩”表
表名:
xs_cj
主键:
xh和kch
外键:
xh和kch
5.“用户”表
表名:
user
主键:
id
表之间的具体联系如图6-1:
图6-1
2.3创建应用
在”E:
\workspace”文件夹下建立工作空间命名为“workspace”,如图7-1和7-2:
图7-1
图7-2
创建新的应用,打开new,选择“target”页中的应用“Application”,单击ok,弹出保存文件对话框,选择到新建的目录E:
\workspace,输入文件名为“project”,单击finish,具体如图8-1:
图8-1
创建应用之后,在project的open事件中编写代码:
//Profilestudent
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="ConnectString='DSN=student;UID=dba;PWD=sql'"
connect;
ifsqlca.sqlcode<>0then
messagebox("提示","数据库连接失败!
")
else
open(w_load)
endif
2.4创建窗口
2.4.1创建登陆窗口
1.单击new,选择PBObject,点击window,然后单击ok,窗口如下:
保存窗口为“w_load”。
2.添加控件并设置属性
在窗口上放置1个图片控件,5个静态文本控件,2个单行编辑控件,1个
图9-1
下拉列表控件,2个按钮控件,各个控件的位置和大小如图9-1所示。
对象
属性
取值
W_load
Title
学生成绩管理系统
Windowtype
Response!
sle_2
Password
True
3.编写脚本
(1)定义全局变量
stringqj_id,qj_password,qj_qx,qj_kch,qj_xf
strings_kch,s_xh
(2)定义实例变量
intl_n;
stringl_id,l_password,l_qx
(3)w_load的open事件脚本为:
st_4.text=string(today(),"yyyy-mm-dd")
st_5.text=string(now(),"hh:
mm:
ss")
Timer
(1)
在timer()中脚本为:
st_5.text=string(now())
(4)在sle_1中的getfocus中的脚本为:
this.selecttext(1,len(this.text))
(5)在sle_2中的getfocus中的脚本为:
l_id=trim(sle_1.text)
ifl_id=""then
messagebox("error","用户名不能为空,请输入!
")
sle_1.setfocus();
else
select"user"."id"
into:
qj_id
from"user"
where("user"."id"=:
l_id);
ifsqlca.sqlcode<>0then
messagebox("error","用户名不存在,请重新输入!
")
sle_1.setfocus();
else
sle_2.setfocus();
endif
endif
this.selecttext(1,len(this.text))
(6)在ddplb_1的selecttionchanged中的脚本为:
l_id=trim(sle_1.text)
l_password=trim(sle_2.text)
ifl_password=""then
messagebox("error","密码不能为空,请输入!
")
sle_2.setfocus();
else
select"user"."id","user"."password"
into:
qj_id,:
qj_password
from"user"
where("user"."id"=:
l_idand"user"."password"=:
l_password);
ifsqlca.sqlcode<>0then
messagebox("error","密码错误,请重新输入!
")
sle_2.setfocus();
else
ddplb_1.setfocus();
endif
endif
(7)在cb_1的clicked中的脚本为:
l_id=trim(sle_1.text)
l_password=trim(sle_2.text)
l_qx=trim(ddplb_1.text)
select"user"."id","user"."password","user"."qx"
into:
qj_id,:
qj_password,:
qj_qx
from"user"
where("user"."id"=:
l_idand"user"."password"=:
l_passwordand"user"."qx"=:
l_qx);
ifsqlca.sqlcode<>0then
messagebox("error","用户类型不匹配,请重新选择!
")
ddplb_1.setfocus();
else
choosecasel_qx
case"管理员"
open(w_admin)
close(w_load)
case"教师"
open(w_teacher)
close(w_load)
case"学生"
open(w_student)
close(w_load)
endchoose
endif
(8)给cb_1定义一个用户事件u_keydown,事件号为pbm_keydown,u_keydown中的脚本为:
ifkeydown(keyenter!
)then
this.triggerevent(clicked!
)
endif
(9)cb_2的clicked脚本为:
close(parent)
(10)给cb_2定义一个用户事件u_2,事件号为pbm_keydown,u_2中的脚本为:
ifkeydown(keyenter!
)then
this.eventclicked()
endif
2.4.2创建学生窗口
1创建窗口,命名为“w_student”:
图11-1
(1)添加控件
在窗口上放置一个数据窗口控件,一个选单,如图11-1
2创建学生快速选课窗口
(1)
创建学生选课窗口命名为“w_ksxk”;
图12-1
(2)添加控件
在窗口上放置一个数据窗口控件,2个静态文本控件,1个单行编辑文本控件,三个按钮控件,给数据窗口控件添加个数据窗口对象d_ksxk,如图12-1。
(3)在w_ksxk的open事件中的脚本为:
dw_1.settransobject(sqlca)
dw_1.retrieve()
(4)在cb_1的clicked中的脚本为:
stringm
m=trim(sle_1.text)
insertxs_cj(xh,kch)
values(:
qj_id,:
m)
usingsqlca;
ifsqlca.sqlcode<>0then
messagebox("error","选课失败:
此课程不是可选课程或已被选,请检查!
")
sle_1.setfocus()
sle_1.selecttext(1,len(m))
else
messagebox("选课成功","你已成功选定课程号"+m)
sle_1.text=""
endif
(5)在cb_2中的clicked的脚本为:
sle_1.text=""
(6)在cb_3中的clicked的脚本为:
close(parent)
3创建快速退课窗口
(1)创建学生退课窗口,命名为“w_tuike”:
图13-1
(2)添加控件
在窗口上放置一个数据窗口控件,2个静态文本控件,1个单行编辑文本控件,三个按钮控件,给数据窗口控件添加个数据窗口对象d_kc。
如图13-1.
(3)在w_tuike的open事件中的脚本为:
dw_1.settransobject(sqlca)
dw_1.retrieve()
(4)在cb_1的clicked中的脚本为:
stringm,cj_kch
m=trim(sle_1.text)
select"xs_cj"."kch"
into:
cj_kch
from"xs_cj"
where("xs_cj"."xh"=:
qj_id);
ifcj_kch<>mthen
messagebox("error","课程表中没有此课程,请重新输入!
")
sle_1.setfocus()
sle_1.selecttext(1,len(m))
else
deletefromxs_cj
where("xs_cj".kch=:
m)
usingsqlca;
messagebox("退选成功","你已成功退选课程号"+m)
w_tuike.dw_1.retrieve(qj_id)
sle_1.text=""
endif
(5)在cb_2中的clicked的脚本为:
sle_1.text=""
(6)在cb_3中的clicked的脚本为:
close(parent)
4创建修改密码窗口
(1)创建学生登录密码修改窗口,命名为“w_password”:
图14-1
(2)添加控件
在窗口上放置2个静态文本框控件,1个单行编辑控件,2个按钮控件。
如图14-1.
(3)在cb_1的clicked事件中的脚本为:
stringl
intn
l=trim(sle_1.text)
n=len(sle_1.text)
ifl=""orn>10then
messagebox("提示","新密码为空或长度大于10,请检查!
")
else
update"user"
set"user"."password"=:
l
where"user"."id"=:
qj_id
usingsqlca;
ifsqlca.sqlcode=0then
messagebox("提示","密码修改成功!
请记住新密码:
"+l)
close(w_password)
else
messagebox("提示","密码修改失败:
~n长度过长或有特殊字符!
")
return
endif
endif
(4)在cb_2的clicked事件中的脚本为:
sle_1.text=""
5创建帮助窗口,命名为“w_guanyu”:
如图15-1.
图15-1
2.4.3创建教师窗口
1创建窗口,命名为“w_teacher“:
图16-1
(1)在窗口上放置1个数据窗口控件,给数据窗口控件添加一个数据窗口对象。
如图16-1.
(2)在w_teacher的open事件中的脚本为:
dw_1.settransobject(sqlca)
dw_1.retrieve(qj_id)
2创建进入录入学生成绩窗口,命名为“w_srkch”:
图16-2
(1)窗口上放置1个静态文本框控件,一个单行编辑框控件,2个按钮控件。
如图16-2.
(2)在cb_1中的clicked中的脚本为:
stringm
intn
m=trim(sle_1.text)
n=len(sle_1.text)
select"teacher"."kch"
into:
qj_kch
from"teacher"
where("teacher"."zgh"=:
qj_id);
ifqj_kch<>mthen
messagebox("error","你输入的课程号不在你的授课范围!
请重新输入!
")
sle_1.setfocus()
sle_1.selecttext(1,n)
else
open(w_lrcj)
close(w_srkch)
endif
(3)在cb_2中的clicked的脚本为:
sle_1.text=""
3创建录入成绩窗口,命名为“w_lrcj”
图17-1
(1)在窗口上放置2个静态文本框控件,2个单行编辑框控件,3个按钮控件。
如图17-1.
(2)给sle_2中的getfocus的脚本为:
stringm
m=trim(sle_1.text)
ifm=""orlen(m)>10then
messagebox("error","学号格式不正确,请重新输入!
")
sle_1.setfocus()
sle_1.selecttext(1,len(m))
else
select"xs_cj"."xh","xs_cj"."kch"
into:
s_xh,:
s_kch
from"xs_cj"
where("xs_cj"."xh"=:
mand"xs_cj"."kch"=:
qj_kch);
ifsqlca.sqlcode<>0then
messagebox("你没有权限录入","此学生没有选择此门课程")
sle_1.setfocus()
sle_1.selecttext(1,len(m))
else
sle_2.setfocus()
endif
endif
(3)给cb_1中的clicked的脚本为:
intm,n,chengji
n=integer(sle_2.text)
ifsle_1.text=""orsle_2.text=""then
messagebox("error","学号或成绩不能为空")
else
select"kc"."xf"
into:
m
from"kc"
where("kc"."kch"=:
s_kch);
ifn>=0andn<=100then
select"xs_cj"."cj"
into:
chengji
from"xs_cj"
where("xs_cj"."xh"=:
s_xhand"xs_cj"."kch"=:
s_kch);
ifstring(chengji)=""then
ifn>=60then
updatexs_cjsetcj=:
n,xf=:
m
where("xs_cj"."xh"=:
s_xhand"xs_cj"."kch"=:
s_kch);
messagebox("成功","学号"+s_xh+"的成绩已录入!
")
else
updatexs_cjsetcj=:
n,xf=0
where("xs_cj"."xh"=:
s_xhand"xs_cj"."kch"=:
s_kch);
messagebox("成功","学号"+s_xh+"的成绩已录入!
")
endif
sle_1.text=""
sle_2.text=""
else
messagebox("error","此学生此门课成绩已存在,不能重复录入!
")
sle_2.setfocus()
sle_2.selecttext(1,len(sle_2.text))
endif
else
messagebox("error","录入成绩格式错误,请检查!
")
sle_2.setfocus()
sle_2.selecttext(1,len(sle_2.text))
endif
endif
(4)给cb_2的clicked的脚本为:
sle_1.text=""
sle_2.text=""
(5)给cb_3的clicked的脚本为:
close(parent)
4创建查询成绩窗口
(1)创建查询成绩窗口,命名为“w_tcj”
图19-1
(2)在窗口上放置1个静态文本框按钮,1个单行编辑框控件,2个按钮控件。
如图19-1.
(3)给cb_1的clicked的脚本为:
stringm
intn
m=trim(sle_1.text)
n=len(sle_1.text)
select"teacher"."kch"
into:
qj_kch
from"teacher"
where("teacher"."zgh"=:
qj_id);
ifqj_kch<>mthen
messagebox("error","你的输入有误!
请重新输入!
")
sle_1.setfocus()
sle_1.selecttext(1,n)
else
w_teacher.dw_1.dataobject="d_tcj"
w_teacher.dw_1.settransobject(sqlca)
w_teacher.dw_1.retrieve(m)
close(w_tcj)
endif
(4)给cb_2的clicked的脚本为:
close(parent)
5创建修改密码窗口
(1)创建教师登录密码修改窗口,命名为“w_password”:
图20-1
(2)添加控件
在窗口上放置2个静态文本框控件,1个单行编辑控件,2个按钮控件。
如图20-1.
(3)在cb_1的clicked事件中的脚本为:
stringl
intn
l=trim(sle_1.text)
n=len(sle_1.text)
ifl=""orn>10then
messagebox("提示","新密码为空或长度大于10,请检查!
")
else
update"user"
set"user"."password"=:
l
where"user"."id"=:
qj_id
usingsqlca;
ifsqlca.sqlcode=0then
messagebox("提示","密码修改成功!
请记住新密码:
"+l)
close(w_password)
else
messagebox("提示","密码修改失败:
~n长度过长或有特殊字符!
")
return
endif
endif
(4)在cb_2的clicked事件中的脚本为:
sle_1.text=""
6创建帮助窗口,命名为“w_guanyu”:
如图21-1
图21-1
2.4.4创建管理员窗口
1创建管理员窗口,命名为“w_admin”:
图21-2
2在窗口上放置1个按钮控件和1个选项卡控件,在选项卡上创建5个子选项,每个子选项上添加1个数据窗口控件,和5个按钮控件。
如图21-2
3编写tab_1.tabpage_1(用户
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 PB 课程设计