学生成绩管理系统PB课程设计Word文档格式.docx
《学生成绩管理系统PB课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统PB课程设计Word文档格式.docx(42页珍藏版)》请在冰豆网上搜索。
(7)学生对自己基本信息、课表和成绩查询,快速选课,修改登陆密码等。
1.2系统功能模块设计
通过对上述功能的分析、分类、综合,按照模块化程序设计的要求,得到如图
2-1所示的功能模块图。
图2-1
二、数据库设计与实现
数据库在学生成绩管理系统中占有非常重要的地位,数据库结构的好坏将直接影响到应用系统操作效率已经能否保证数据的一致性、完成性和安全性。
2.1数据库设计
根据学生成绩管理系统的功能要求,通过分析系统要设计的相关实体一集要收集、存储和操纵数据信息,得到如下图所示的系统E-R图。
关系模式如下:
学生基本信息(学号,姓名,性别,专业,总学分)
教师基本信息(职工号,姓名,年龄,性别,所授课程)
课程(课程号,课程名,开课学期,学时,学分)
成绩(学号,课程号,成绩,所获学分)
用户(用户账号,密码,权限)
E-R图如图3-1:
1
n
图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
4.“成绩”表
xs_cj
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
error"
用户名不能为空,请输入!
sle_1.setfocus();
else
select"
user"
."
id"
into:
qj_id
from"
where("
=:
l_id);
ifsqlca.sqlcode<
messagebox("
用户名不存在,请重新输入!
sle_1.setfocus();
else
sle_2.setfocus();
endif
(6)在ddplb_1的selecttionchanged中的脚本为:
l_password=trim(sle_2.text)
ifl_password="
密码不能为空,请输入!
sle_2.setfocus();
password"
qj_id,:
qj_password
l_idand"
l_password);
密码错误,请重新输入!
ddplb_1.setfocus();
(7)在cb_1的clicked中的脚本为:
l_qx=trim(ddplb_1.text)
qx"
qj_password,:
qj_qx
l_passwordand"
l_qx);
用户类型不匹配,请重新选择!
ddplb_1.setfocus();
choosecasel_qx
case"
管理员"
open(w_admin)
close(w_load)
教师"
open(w_teacher)
学生"
open(w_student)
endchoose
(8)给cb_1定义一个用户事件u_keydown,事件号为pbm_keydown,u_keydown中的脚本为:
ifkeydown(keyenter!
)then
this.triggerevent(clicked!
(9)cb_2的clicked脚本为:
close(parent)
(10)给cb_2定义一个用户事件u_2,事件号为pbm_keydown,u_2中的脚本为:
this.eventclicked()
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(:
m)
usingsqlca;
messagebox("
选课失败:
此课程不是可选课程或已被选,请检查!
sle_1.setfocus()
sle_1.selecttext(1,len(m))
选课成功"
你已成功选定课程号"
+m)
sle_1.text="
(5)在cb_2中的clicked的脚本为:
(6)在cb_3中的clicked的脚本为:
3创建快速退课窗口
(1)创建学生退课窗口,命名为“w_tuike”:
图13-1
在窗口上放置一个数据窗口控件,2个静态文本控件,1个单行编辑文本控件,三个按钮控件,给数据窗口控件添加个数据窗口对象d_kc。
如图13-1.
(3)在w_tuike的open事件中的脚本为:
stringm,cj_kch
select"
xs_cj"
kch"
into:
cj_kch
from"
where("
xh"
qj_id);
ifcj_kch<
mthen
课程表中没有此课程,请重新输入!
sle_1.setfocus()
deletefromxs_cj
.kch=:
退选成功"
你已成功退选课程号"
w_tuike.dw_1.retrieve(qj_id)
4创建修改密码窗口
(1)创建学生登录密码修改窗口,命名为“w_password”:
图14-1
在窗口上放置2个静态文本框控件,1个单行编辑控件,2个按钮控件。
如图14-1.
(3)在cb_1的clicked事件中的脚本为:
stringl
intn
l=trim(sle_1.text)
n=len(sle_1.text)
ifl="
orn>
10then
新密码为空或长度大于10,请检查!
update"
set"
l
where"
ifsqlca.sqlcode=0then
密码修改成功!
请记住新密码:
+l)
close(w_password)
else
密码修改失败:
~n长度过长或有特殊字符!
return
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
teacher"
qj_kch
zgh"
ifqj_kch<
你输入的课程号不在你的授课范围!
请重新输入!
sle_1.selecttext(1,n)
open(w_lrcj)
close(w_srkch)
(3)在cb_2中的clicked的脚本为:
3创建录入成绩窗口,命名为“w_lrcj”
图17-1
(1)在窗口上放置2个静态文本框控件,2个单行编辑框控件,3个按钮控件。
如图17-1.
(2)给sle_2中的getfocus的脚本为:
ifm="
orlen(m)>
学号格式不正确,请重新输入!
sle_1.selecttext(1,len(m))
s_xh,:
s_kch
mand"
qj_kch);
你没有权限录入"
此学生没有选择此门课程"
sle_2.setfocus()
(3)给cb_1中的clicked的脚本为:
intm,n,chengji
n=integer(sle_2.text)
ifsle_1.text="
orsle_2.text="
then
学号或成绩不能为空"
kc"
xf"
m
where("
s_kch);
ifn>
=0andn<
=100then
cj"
chengji
s_xhand"
ifstring(chengji)="
=60then
updatexs_cjsetcj=:
n,xf=:
成功"
学号"
+s_xh+"
的成绩已录入!
n,xf=0
sle_2.text="
此学生此门课成绩已存在,不能重复录入!
sle_2.selecttext(1,len(sle_2.text))
录入成绩格式错误,请检查!
(4)给cb_2的clicked的脚本为:
(5)给cb_3的clicked的脚本为:
4创建查询成绩窗口
(1)创建查询成绩窗口,命名为“w_tcj”
图19-1
(2)在窗口上放置1个静态文本框按钮,1个单行编辑框控件,2个按钮控件。
如图19-1.
(3)给cb_1的clicked的脚本为:
你的输入有误!
w_teacher.dw_1.dataobject="
d_tcj"
w_teacher.dw_1.settransobject(sqlca)
w_teacher.dw_1.retrieve(m)
close(w_tcj)
5创建修改密码窗口
(1)创建教师登录密码修改窗口,命名为“w_password”:
图20-1
如图20-1.
stringl
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(用户