学生成绩管理系统PB程序设计
课程设计要求
使用powerbuilder制作“学生成绩管理系统”,提交系统光盘和总结
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
。 要求:
1. 系统应设计合理,功能完整,使用方便,编码
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
。
2. 总结报告包括封面、
目录
工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录
、正文、参考文献、封底五部分,A4纸打印、
装订。
3. 总结报告应包括系统
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
、系统设计、系统制作、使用说明、优缺点分
析等内容。
4. 使用统一封底。
郑小东老师
2011.10.24
1
目 录
1( 系统分析????????????????????????????????????????,
1.1功能需求分析???????????????????????????????, 2( 系统设计????????????????????????????????????????,
2.1功能模块设计???????????????????????????????,
2.2数据库的设计与连接?????????????????????????, 3( 系统的详细设计??????????????????????????????????8 4( 用户使用说明????????????????????????????????????31 5( 系统优缺点分析??????????????????????????????????31 6( 参考文献????????????????????????????????????????32 7. 教师评阅????????????????????????????????????????33
系统分析
1.1功能需求分析
该阶段的主要任务是确定本系统所要实现的功能,以及具体的要求。学生成绩管理系统
的主要功能如下:
(,)学生对于自己基本信息的查询,包括学号、姓名、专业名、性别、出生日期、总
学分等。
(2)学生对于课程信息的查询
(3)学生对于自己选课情况及成绩的查询;
(4)教师对于自己登陆信息的修改
(5)教师对学生成绩的查询、添加、删除、修改等操作。
(6)教师对课程信息的管理,包括添加、删除、插入等操作。
(7)学生对于自己登陆信息的修改;
(8)管理员对于可登陆用户的信息进行管理,包括查询、修改、添加、删除等操作;
(9)登陆用户可以使用各种帮助工具,包括:查看日历、备忘录等;
(10)教师及管理员对学生课程信息的统计查询;
系统设计
2.1功能模块设计
通过上面对于该系统各个功能的分析,按照模块化设计的理念,将其大体上分为三个主要模块:
(,) 管理员模块 主要包括对登陆用户信息的管理及其他查询操作。 (,) 学生模块 主要包括学生基本信息查询、学生课程查询、学生本人成绩查询及其他
帮助信息使用。
(,) 教师模块 主要包括本人信息管理,课程管理、学生成绩的管理及其他帮助信息使
用。
2.2数据库的设计与连接
(1)在PowerBuilder开发环境下打开数据库画板,依据创建数据库的步骤,依次创建物理数据库XSCJ,定义ODBC数据源,定义DB Profile ,连接数据库。
根据功能需求,在数据库中先创建4个表,分别为“学生”表1、“课程”表2、“成绩”表3和“用户”表4。
表2.2.1 学生表xs结构
1
列名 数据类型 长度 是否允许为空 默认值 说明
char 6 学号 否 无 主键
Char 8 姓名 否 无
Char 10 专业名 是 无
Char 2 性别 否 无
Date 出生日期 默认 否 无
Tinyint 总学分 默认 是 无
Varchar 备注 默认 是 无
表2.2.2 课程表kc结构
列名 数据类型 长度 是否允许为空 默认值 说明
Char 3 课程号 否 无 主键
Char 16 课程名 否 无
Tinyint 开课学期 默认 否 无
Tinyint 学 时 默认 否 无
Tinyint 学 分 默认 是 无
表2.2.3 成绩表xs_cj结构
列名 数据类型 长度 是否允许为空 默认值 说明
Char 6 学号 否 无 主键
Char 3 课程号 否 无 主键
Tinyint 成绩 默认 是 无
Tinyint 学分 默认 是 无
1
表2.2.4 用户表
列名 数据类型 长度 是否允许为空 默认值 说明
Char 10 用户名 否 无 主键
Char 10 密码 否 无
Char 3 权限 否 无
并创建表与表之间主键及外键约束 如图2.2.1所示:
图2.2.1
其中学生、课程与成绩之间的联系如下E-R图2.2.2所示:
1
图2.2.2 E—R图
系统详细设计 1. 创建工作空间及应用程序对象
(1) 在本地硬盘E盘下创建一个文件夹“学生管理系统”存放新建的工作空间 。 (2) 启动PowerBuilder9.0开发环境,创建一个新的工作空间project1,存放在文件夹
下。
(3) 在工作空间中新建一个应用程序对象aa,并保存。
(4) 在应用程序对象aa的Open事件中,输入以下脚本:
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=xscj;UID=dba;PWD=sql'"
connect; //使应用程序连接数据库
open(w_load)
2. 创建登录窗口w_load
(1) 单击New图标按钮,打开New 对话框,选择‘PB object’页,双击‘Window’
图标,创建一个新窗口对象,进入窗口画板。
(2) 在窗口属性卡的General页中,在Title栏中输入窗口标题“欢迎进入学生成绩
管理系统”,窗口类型为响应式窗口response! ,用鼠标拖动窗口至合适大小,
其他属性为默认值。最后,保存窗口对象,取名为w_load。 (3) 在窗口w_load中添加相应的控件,并进行美化处理。设置完成后,在窗口上放
置控件p_1,选择背景图片,将其大小改为与窗口一致,在图片上单击右键,选
1
择‘send to back’。
注意:图片所在文件夹要保存在该项目所在文件夹下。
(4) 登录窗口如图3.1所示:
图3.1 登录窗口
登录窗口脚本:
(1) 定义全局变量
string l_username, l_password,l_admin
//分别存储登录用户的姓名、密码、权限
(2) 定义实例变量
int login_n //存储登录时输入的次数,最多三次
(3) 登录窗口w_load的open事件脚本
login_n=3 //初始值为3
(4)“登陆”按钮的clicked事件脚本
string ls_username, ls_password ,ls_admin
ls_username=trim(sle_userid.text)
ls_password=trim(sle_password.text)
if ls_username="" or ls_password="" then
messagebox("提示","用户名、密码或用户类型不能为空")
else if
rb_3.checked=true then
ls_admin=string(1)
else
if rb_2.checked=true then
ls_admin=string(2)
1
else
ls_admin=string(3)
end if
end if
SELECT username, password, quanx
INTO :l_username, :l_password, :l_admin
FROM users
WHERE (username = :ls_username ) and
if SQLCA.sqlcode=0 then
if l_admin=string(1) then
(password = :ls_password ) and
(quanx = :ls_admin);
open(w_admin)
else
if l_admin=string(2) then
open(w_stu)
else
open(w_teacher)
end if
end if
else
login_n=login_n - 1
if login_n<>0 then
messagebox("提示","用户名/密码错误")
else
messagebox("提示","错误超过3次,自动退出系统")
halt
end if
end if
end if
(5)“退出”按钮的clicked事件脚本:
Close(parent)
3. 创建新选单
(1) 单击New按钮,弹出New对话框,选择Object页中的Menu图标,双击,就产生了新的选单对象。
(2) 在选单根项Untitled0上单击右键,出现弹出式选单,单击“Insert SubMenu Item”选项单,在Untitled0下出现一可编辑的空白框,则为选单的第一个选单标题,在此框的“text”栏中输入需要的标题,这时正在所见窗口可以见到新加入的选单标题。将所需的各个选单内容加到选单上,最后,得到选单manu1如图3.2所示:
1
图3.2 选单的结构
下面则为每一个选单项对应的功能脚本。
[修改密码]的clicked事件脚本如下:
Open(w_pwd)
[退出当前窗口]的clicked事件脚本如下:
Close(parentwindow)
查询子系统
[学生信息查询]的clicked事件脚本如下:open(w_stu) [学生选课查询]的clicked事件脚本如下:open(w_query) [学生成绩查询] 的clicked事件脚本如下:open(w_cjquery) [用户自定义查询] 的clicked事件脚本如下:open(w_zidingyi) 数据管理子系统
[学生信息管理] 的clicked事件脚本如下:open(w_stuuodata) [课程信息管理] 的clicked事件脚本如下:open(w_courseupdata) [学生成绩管理] 的clicked事件脚本如下:open(w_cjupdata) 帮助子系统
[使用帮助] 的clicked事件脚本如下:open(w_h1)
[版本信息] 的clicked事件脚本如下:open(w_helpversion) [软件宣传] 的clicked事件脚本如下:open(w_ helpversion) [小工具] 的clicked事件脚本如下:open(w_day)
[数据通道] 的clicked事件脚本如下:open(w_pipe)
[统计分析] 的clicked事件脚本如下:open(w_statistic)
4. 创建系统主窗口w_main
基本步骤同w_load一致,主窗口如图3.3所示:
1
图3.3 系统主窗口
W_main窗口脚本:
为建立各个窗口间的连接。
? 在“学生查询子系统”按钮的clicked事件中编写代码:
Open(w_query)
? “数据管理子系统”按钮 的clicked事件中编写以下脚本:
Open(w_data)
? “帮助子系统”按钮 的clicked事件中编写以下脚本:
Open(w_help)
? “数据通道”按钮 的clicked事件中编写以下脚本:
Open(w_pipe)
? “统计分析”按钮 的clicked事件中编写以下脚本:
Open(w_statistic)
? “退出”按钮的clicked事件中的脚本:
Close(parent)
5. 创建基本窗口w_base
(1) 创建基本窗口w_base,设置窗口的WindowsType类型为Midhelp!,
Menuname=menu1,其他属性采用默认值。
(2) 在基本窗口w_base的基础上,通过继承的方式创建出查询子系统窗口w_query,
数据管理子系统窗口w_data,帮助子系统w_help,数据通道窗口w_pipe,统计
分析窗口w_statistic。窗口w_query的Title=查询子系统控制台,窗口w_data的
Title=数据管理子系统控制台,窗口w_help的Title=帮助子系统控制台,窗口
w_pipe的Title=数据通道,窗口w_statistic的Title=统计分析。 6. 创建窗口w_query
基本步骤同w_load一致,该窗口如图3.4所示:
1
图3.4 查询子系统
该窗口下的脚本:
? 在“学生基本信息查询”按钮的clicked事件中代码为:Open (w_stu) ? 在“学生选课查询”按钮的clicked事件中代码为:open(w_select) ? 在“学生成绩查询”按钮的clicked事件中代码为:open(w_cjquery) ? 在“自定义查询”按钮的clicked事件中代码为:open(w_zidingyi) ? 在“返回主页”按钮的clicked事件中代码为: close(parent)
open(w_main)
学生查询子系统
7. 创建数据窗口对象d_1
(1) 单击New ,弹出New对话框,选择New对话框中的DataWindow选项页,
图3.5 数据窗口样式 (2) 选择Grid样式,点击OK。在弹出的
对话框中SQL select,点击next,选择所需的数据表XS,单击‘Add All’,单击
OK。然后单击默认项,单击“finish”。单击‘保存’按钮。得出数据窗口对象
d_1。如图3.6所示:
1
图3.6 数据窗口对象d_1
为该数据对象创建检索参数:单击‘Edit’中的“select” 下的“select columns”
选项,然后选择“design”下的“Retrieval Arguments”弹出如图3.7对话框:
图3.7
设置参数。点击ok。选择“where”设置如图3.8:
图3.8 where子页
8. 创建窗口w_stu
基本步骤同w_load一致,该窗口如图3.9所示:
将窗口中的数据窗口控件的General属性中的DataObject项下选择d_1。
1
图3.9 学生基本信息查询
该窗口下的脚本:
? 在该窗口的open事件中写如下脚本:
dw_1.settransobject(sqlca) //为dw_1分配事务处理对象
? 在“查询”按钮的clicked事件中写如下脚本:
string is_1
is_1=trim(sle_1.text)
if is_1="" then
messagebox("提示","请输入正确的查询条件!")
else
dw_1.retrieve(is_1)
end if
sle_1.setfocus()
? 在“清除”按钮的clicked事件中写如下脚本:
sle_1.text=""
dw_1.reset()
sle_1.setfocus()
? 在“返回”按钮的clicked事件中写如下脚本:
close(parent)
open(w_query)
9. 创建数据窗口对象d_kc
如过程7所示,创建数据窗口对象d_kc,如图3.10所示: 同时设置检索参数,同d_1方法一样。
1
图3.10 数据窗口对象d_kc
10.创建窗口w_select
基本步骤同w_load一致,该窗口如图3.11所示: 将窗口中的数据窗口控件的General属性中的DataObject项下选择d_kc。 将属性中的HScrollBar和VScrollBar选项前划勾、便于显示完整的数据。
图3.11 选课查询
该窗口下的脚本:
? 在该窗口的open事件中写如下脚本:
dw_1.settransobject(sqlca) //为dw_1分配事务处理对象
? 在“查询”按钮的clicked事件中写如下脚本:
string is_1
is_1=trim(sle_1.text)
if is_1="" then
messagebox("提示","请输入正确的查询条件!")
1
else
dw_1.retrieve(is_1)
end if
sle_1.setfocus()
? 在“清除”按钮的clicked事件中写如下脚本:
sle_1.text=""
dw_1.reset()
sle_1.setfocus()
? 在“返回”按钮的clicked事件中写如下脚本:
close(parent)
open(w_query) 11. 创建数据窗口对象d_cj 如过程7所示,创建数据窗口对象d_cj,如图3.12所示: 并设置检索参数。(sno和kno)
图3.12 数据窗口对象d_cj
12.创建窗口w_cjquery
基本步骤同w_load一致,该窗口如图3.13所示:
图3.13 成绩查询
1
该窗口下的脚本:
? 在该窗口的open事件中写如下脚本:
dw_1.settransobject(sqlca) //为dw_1分配事务处理对象
? 在“查询”按钮的clicked事件中写如下脚本:
string is_1
string is_2
is_1=trim(sle_1.text)
is_2=trim(sle_2.text)
if is_1="" or is_2="" then
messagebox("提示","请输入正确的查询条件!")
else
dw_1.retrieve(is_1,is_2)
end if
? 在“返回”按钮的clicked事件中写如下脚本:
close(parent)
open(w_query)
13.创建窗口w_zidingyi
基本步骤同w_load一致,该窗口如图3.4所示:
图3.14 自定义查询
在该窗口下的脚本:
? “查询”按钮下的脚本:p_2.visible=false
int m,n
string mysql,str
mysql=mle_1.text
lb_1.reset()
1
declare mycur dynamic cursor for sqlsa; prepare sqlsa from :mysql using sqlca; describe sqlsa into sqlda;
open dynamic mycur using descriptor sqlda; fetch mycur using descriptor sqlda; m=sqlda.numoutputs
do while sqlca.sqlcode=0
str=""
for n=1 to m
choose case sqlda.outparmtype[n]
case typeinteger!,typedecimal!,typedouble!
str=str+string(sqlda.getdynamicnumber(n))+""
case typestring!
str=str+string(sqlda.getdynamicstring(n))+""
case typedate!
str=str+string(sqlda.getdynamicdate(n))+""
end choose
next
lb_1.additem(str)
fetch mycur using descriptor sqlda;
loop
close mycur;
? “返回”按钮下的脚本:close(parent)
open(w_query)
数据管理子系统
14.创建窗口w_data 如图3.15所示
1
图 3.15 数据管理子系统
该窗口下的脚本:
? 在“学生信息管理”按钮的clicked事件中代码为:
open(w_stuupdata)
? 在“课程信息管理”按钮的clicked事件中代码为:
open(w_courseupdata) ? 在“学生成绩信息管理”按钮的clicked事件中代码为:
open(w_cjupdata)
? 在“返回主页”按钮的clicked事件中代码为:
close(parent)
open(w_main)
15. 创建数据窗口对象d_4
所创建的过程均与过程7类似。如下图3.16所示:
图3.16 学生信息 16.创建窗口w_stuupdata 如图3.17所示:
1
图3.17 学生信息管理
该窗口下的脚本:
? 在该窗口的open事件中写如下脚本:
dw_1.settransobject(sqlca) //为dw_1分配事务处理对象 ? 在“显示”按钮的clicked事件中写如下脚本:
dw_1.retrieve()
? 在“插入”按钮的clicked事件中写如下脚本:
long r=dw_1.insertrow(dw_1.getrow())
dw_1.setrow(r)
dw_1.Scrolltorow(r)
dw_1.setfocus()
? 在“删除”按钮的clicked事件中写如下脚本:
dw_1.deleterow(dw_1.getrow()) ? 在 “更新”按钮的clicked事件中写如下脚本:
dw_1.update()
dw_1.reset()
dw_1.retrieve() ? 在“添加”按钮的clicked事件中写如下脚本:
long r=dw_1.insertrow(0)
dw_1.setrow(r)
dw_1.Scrolltorow(r)
dw_1.setfocus() //获得焦点
? 在“上一记录”按钮的clicked事件中写如下脚本
dw_1.scrollnextrow()
dw_1.selectrow(dw_1.getrow() +1 ,false)
dw_1.selectrow(dw_1.getrow(),true) ? 在“下一记录”按钮的clicked事件中写如下脚本:
dw_1.scrollnextrow() //滚动到下一行
dw_1.selectrow(dw_1.getrow() -1 ,false)
1
dw_1.selectrow(dw_1.getrow(),true)
? 在“返回”按钮的clicked事件中写如下脚本:
close(parent)
open(w_query) 17. 创建数据窗口对象d_5 所创建的过程均与过程7类似。如下图3.18所示:
图3.18 学生信息
13 创建窗口w_ courseupdata
如图3.19所示:
图3.19 课程信息管理
1
该窗口下的脚本:
? 在该窗口的open事件中写如下脚本:
dw_1.settransobject(sqlca) //为dw_1分配事务处理对象 ? 在“显示”按钮的clicked事件中写如下脚本:
dw_1.retrieve()
? 在“插入”按钮的clicked事件中写如下脚本:
long r
r=dw_1.insertrow(dw_1.getrow())
dw_1.setrow(r)
dw_1.Scrolltorow(r)
dw_1.setfocus()
? 在“删除”按钮的clicked事件中写如下脚本:
dw_1.deleterow(dw_1.getrow()) ? 在 “更新”按钮的clicked事件中写如下脚本:
dw_1.update()
dw_1.reset()
dw_1.retrieve()
? 在“添加”按钮的clicked事件中写如下脚本:
long r
r=dw_1.insertrow(0)
dw_1.setrow(r)
dw_1.Scrolltorow(r)
dw_1.setfocus()
? 在“上一记录”按钮的clicked事件中写如下脚本
dw_1.scrollnextrow()
dw_1.selectrow(dw_1.getrow() +1 ,false)
dw_1.selectrow(dw_1.getrow(),true)
? 在“下一记录”按钮的clicked事件中写如下脚本:
dw_1.scrollnextrow()
dw_1.selectrow(dw_1.getrow() -1 ,false)
dw_1.selectrow(dw_1.getrow(),true)
? 在“返回”按钮的clicked事件中写如下脚本:
close(parent)
open(w_query)
14 创建窗口w_ cjupdata
如图3.20所示:
1
图3.20 学生成绩管理
该窗口下的脚本:
? 在该窗口的open事件中写如下脚本:
dw_1.settransobject(sqlca) //为dw_1分配事务处理对象 ? 在“确定”按钮的clicked事件中写如下脚本:
string str1,str2
integer chj
integer xuef
str1=sle_1.text
str2=sle_2.text
chj=integer(sle_3.text)
xuef=integer(sle_4.text)
insert into XS_CJ values(:str1 ,:str2,:chj,:xuef) using SQLCA; ? 在“清除”按钮的clicked事件中写如下脚本:
sle_1.text=""
sle_2.text=""
sle_3.text=""
sle_4.text=""
dw_1.reset()
? 在 “返回”按钮的clicked事件中写如下脚本:
open(w_data)
close(w_cjupdata)
? 在“显示记录”按钮的clicked事件中写如下脚本:
dw_1.retrieve()
? 在“删除记录”按钮的clicked事件中写如下脚本
dw_1.deleterow(dw_1.getrow())
1
帮助子系统
15 创建窗口w_ help
如图3.21所示:
图3.21 帮助子系统 该窗口下的脚本:
? 在“使用帮助”按钮的clicked事件中代码为:
open(w_h1)
? 在“版本信息”按钮的clicked事件中代码为:
open(w_ helpversion) ? 在“软件宣传”按钮的clicked事件中代码为:
open(w_ helppublicize) ? 在“小工具”按钮的clicked事件中代码为:
open(w_day)
? 在“返回主页”按钮的clicked事件中代码为:
close(parent)
open(w_main)
16 创建窗口w_ h1
如图3.22所示:
在窗口中布置OLE控件。选择word格式的OLE控件。 然后编辑Word文本文件,如图所示的内容
1
图3.22 系统说明
17 创建窗口w_ helpversion
如图3.23所示:
图3.23 版本信息
18 创建窗口w_ helppublicize
如图3.24所示:
1
图3.24 软件宣传 19 创建窗口w_day
如图3.25所示:
图3.25 日历
? 在“退出”按钮的clicked事件中代码为:
close(parent)
open(w_help)
1
20 创建窗口w_pipe
图3.26 数据统计
在该窗口的open事件中写如下代码:
gr_1.Elevation=30 gr_1.Spacing=100 gr_1.AddCategory("第一学期")
gr_1.AddCategory("第二学期")
gr_1.AddCategory("第三学期")
gr_1.AddCategory("第四学期")
gr_1.AddCategory("第五学期")
gr_1.AddCategory("第六学期")
gr_1.AddCategory("第七学期")
gr_1.addSeries("计算机基础")
gr_1.addSeries("程序设计与语言")
gr_1.addSeries("数据结构")
gr_1.addSeries("操作系统")
gr_1.addSeries("程序设计与语言")
gr_1.addSeries("计算机原理")
gr_1.addSeries("数据库原理")
gr_1.addSeries("软件
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
")
gr_1.adddata(1,80,1) gr_1.adddata(2,68,2) gr_1.adddata(4,68,5) gr_1.adddata(5,68,6) gr_1.adddata(6,85,5) gr_1.adddata(7,68,7) gr_1.adddata(9,51,7)
1
21( 创建窗口w_pwd
如图3.27所示
图3.27 密码修改
? “确定”按钮下编辑的脚本:
string Is_password
if trim(sle_1.text)=trim(sle_3.text) then
messagebox("提示","输入的旧密码错误")
if trim(sle_2.text) = trim(sle_3.text) then
Is_password=trim(sle_2.text)
update "users"
set "password"=:Is_password
where ("username"=:l_username)and("password"=:l_password)
if(sqlca.sqlcode<>0) then
messagebox("提示","密码修改失败")
else
close(parent)
messagebox("提示","密码修改完成")
end if
else messagebox("提示","两次输入的新密码不同")
end if
1
end if
? “放弃”按钮下所写的脚本:close(parent) 21 创建数据窗口对象d_userinfo
所创建的过程均与过程7类似。如下图3.28所示:
图3.28 用户数据对象
22 创建窗口w_admin
如图3.29所示:
1
图3.29 用户管理
该窗口所需的脚本:
? 窗口的open事件中脚本如下:
dw_1.settransobject(sqlca)
dw_1.retrieve()
? 窗口的closequery事件的脚本如下:
integer t
dw_1.accepttext()
if dw_1.modifiedcount()=0 and dw_1.deletedcount()=0 then
return 0
else
t=messagebox("提示","添加修改内容未保存,是否退出,",question!,yesno!)
if t=1 then
return 0
end if
end if
return 1
? 窗口中的数据对象控件dw_1的ItemChanged事件脚本如下:
cb_3.enabled=true ? “添加”按钮的clicked事件脚本如下:
integer r
r=dw_1.insertrow(0)
dw_1.scrolltorow(r)
1
? “删除”按钮的clicked事件脚本如下:
dw_1.deleterow(0)
cb_3.enabled=true
? “保存”按钮的clicked事件脚本如下:
if dw_1.update(true,false)=1 then
dw_1.resetupdate()
commit;
cb_3.enabled=false
else
rollback;
messagebox("错误","保存数据失败!")
end if
? “退出”按钮的clicked事件脚本如下:
close(parent)
? “返回主页”按钮的clicked事件脚本如下:
open(w_main)
close(parent)
close(w_load)
用户使用说明书
该学生成绩管理系统所关联的数据库XSCJ主要涉及4张表:学生表(xs)、课程表(kc)、学生成绩表(xs_cj)、用户表(users)用户是管理员、学生、教师,不同用户分别对应自己的密码和访问权限。学生的用户名为本人的学号,如:081101,密码默认为11111。教师的用户名为自己的教师号如1101,密码统一默认为111.管理员的用户名为admin,密码默认为admin,其权限最广,所能操作的数据也最多.不同的用户进入系统需选择相应的权限。
不同用户在登录时输入密码或用户名错误超过三次,自动退出系统。(1)学生进入系统后后输入学号可以查看及修改个人信息,查看及修改个人密码,查看个人成绩、选课。修改信息后点击“保存“按钮就可改正。(2)教师进入自己的界面输入课程号即可给学生输入成绩,还可以修改个人密码。(3)管理员进入系统后可以对学生信息进行插入、删除、修改、更新等,还可以对课程信息进行插入、删除、修改、更新等,还可以对学生、教师、课程信息进行维护。
1
系统优缺点分析
从教学基本需求可知,该系统主要针对管理员、学生、教师操作的对象设计,但是本系统所能进行的功能比较简单,草做起来也比较明了清晰。界面设计比较清楚。一些简单的功能易实现。但是该系统的整体功能不够全面,对于系统中各信息的安全性存在隐患,整体设计比较朴素,数据库中给定的数据不够全面。系统在登录时,未进行输入字符等的验证,,存在安全性隐患。将进行的下一步工作是完善系统。
参考文献
1. 郑阿奇。PowerBuilder实用教程(第三版)。
北京:电子工业出版社,2009.2
2. 陈刚。PowerBuilder案例开发程序设计教程。
北京:中国水利水电出版社,2003
3. 郭兴成。 PowerBuilder9.0实用教程。
北京:科学出版社,2003
4. 孟祥双。 PowerBuilder程序设计教程。
北京:中国电力出版社,2004
1
教 师 评 阅
观测点 比重(%) 完成情况
10 1. 系统分析是否充分
10 2. 系统设计是否合理
30 系统 3. 系统功能是否完整
10 4. 系统使用是否方便
10 5. 系统制作是否规范
5 总结报告 6. 内容是否完整
1
5 7. 排版是否规范
10 8. 结构是否清晰、合理
10 9. 表述是否清楚
合计
成绩
1