实验五 编程实施学生、选课、成绩简易管理系统
一.实验目的
1.通过编程扩展示例程序“学生选课系统”功能。
2.进一步掌握调试程序的基本步骤和方法。
二.实验要求
1.使学生、教师和课程表具有增加、修改、删除和查询数据的功能。
2.学生根据开设课程进行选课。
3.教师根据学生所选课程进行成绩登录。
4.各类统计分析。
5.其他辅助功能。
三.实验报告要求
1.系统说明。
2.程序脚本。
3.调试报告。
4.上机体会。
系统说明:
本系统系学生、选课、成绩简易管理系统。完成学生通过学号、密码、课程号选课和退课,以及教师通过密码维护学生表,课程表和登陆成绩等功能。
程序脚本:
--------------------主界面--------------------
//查询按钮
if sle_1.text="" then
MessageBox("出错","请输入学号!")
else
sle_1.text=upper(sle_1.text)
if trim(sle_1.text)<>trim(s_info) then
s_info=sle_1.text
dw_2.reset()
dw_2.settransobject(SQLCA)
dw_2.retrieve(s_info)
dw_2.object.datawindow.readonly="yes"
dw_3.reset()
dw_3.settransobject(SQLCA)
dw_3.retrieve(s_info)
dw_3.object.datawindow.readonly="yes"
end if
end if
//选课按钮
string cnumber,kk1,kk2,kk3,pwd,tmppwd
sle_1.text=upper(sle_1.text)
sle_2.text=upper(sle_2.text)
kk1=upper(s_info)
if trim(sle_1.text)<>trim(kk1) then
dw_2.settransobject(SQLCA)
s_info=trim(sle_1.text)
dw_2.retrieve(s_info)
dw_2.object.datawindow.readonly="yes"
dw_3.settransobject(SQLCA)
dw_3.retrieve(s_info)
dw_3.object.datawindow.readonly="yes"
end if
if sle_2.text="" or sle_3.text="" then
MessageBox("错误","起输入课程号和密码!")
end if
if sle_2.text<>"" then
pwd=sle_3.text
select password into :tmppwd from s
where s.sno=:sle_1.text ;
if pwd=tmppwd then
cnumber=sle_2.text
select c.cname into :kk2 from c where c.cno=:cnumber;
if kk2="" then
MessageBox("出错","此课程号不存在!")
end if
select sc.cno into :kk3 from sc where (sc.cno=:sle_2.text and sc.sno=:s_info);
if SQLCA.SQLCODE=0 then
MessageBox(出错","此课程已选!")
else
insert into sc(sno,cno) values(:s_info,:sle_2.text);
end if
dw_2.reset()
sle_2.text=""
dw_2.settransobject(SQLCA)
dw_2.retrieve(s_info)
dw_2.object.datawindow.readonly="yes"
else
MessageBox("出错","密码错误!")
end if
end if
//退课按钮
string cnumber,kk1,kk2,kk3,pwd,tmppwd
sle_1.text=upper(sle_1.text)
sle_2.text=upper(sle_2.text)
kk1=upper(s_info)
if trim(sle_1.text)<>trim(kk1) then
dw_2.settransobject(SQLCA)
s_info=trim(sle_1.text)
dw_2.retrieve(s_info)
dw_2.object.datawindow.readonly="yes"
dw_3.settransobject(SQLCA)
dw_3.retrieve(s_info)
dw_3.object.datawindow.readonly="yes"
end if
if sle_2.text="" or sle_3.text="" then
MessageBox("出错","请输入课程号和密码!")
end if
if sle_2.text<>"" then
pwd=sle_3.text
select password into :tmppwd from s
where s.sno=:sle_1.text ;
if pwd=tmppwd then
cnumber=sle_2.text
select c.cname into :kk2 from c where c.cno=:cnumber;
if kk2="" then
MessageBox("出错","此课程号不存在!")
end if
select sc.cno into :kk3 from sc where (sc.cno=:sle_2.text and sc.sno=:s_info);
if SQLCA.SQLCODE=0 then
MessageBox("出错","未选该课程!")
else
insert into sc(sno,cno) values(:s_info,:sle_2.text);
end if
dw_2.reset()
sle_2.text=""
dw_2.settransobject(SQLCA)
dw_2.retrieve(s_info)
dw_2.object.datawindow.readonly="yes"
else
MessageBox("出错","密码错误!")
end if
end if
//关闭按钮
Close(parent)
--------------------学生表和课程表界面--------------------
其代码与书中一致
--------------------成绩表界面--------------------
//保存按钮
int tt,hascol
string kk,grade
tt=dw_1.getrow()
s_info=sle_1.text
c_info=sle_2.text
grade=sle_3.text
update sc set grade=:sle_3.text where (sc.sno=:s_info and sc.cno=:c_info);
if s_info=kk and pb_1.enabled=false then
messagebox("出错","此学号已存在!")
else
dw_1.update()
hascol=dw_1.retrieve()
st_2.text=string(hascol)
end if
调试报告:
调试用未遇到语法错误,遇到过变量未定义的问题。无大碍。
上机体会:
本次实验是基于实验四的。在实验的程序的基础上添加了些其他功能,如:成绩的统计和修改,需要通过密码选课,管理学生表、课程表和成绩表时都需要教师先通过密码登陆。且密码不是写在程序中,是一起放在数据库表中,起初认为很难,可是通过一段时间的PB实践后,对PB的变成语言和SQL语句都比较掌握了,没花多少时间便实现了设想的功能。至此PB的有关实验已经完成了,从中学到了很多,今后会继续研究下去。