学期最多只能选择20个学分的课程(不包括重修),要是所选择的课程学分数加上已经选课程的总学分数大于20个学分,则选课不成功;如果所选择的课程人数已经选满,则选课也不成功。
选课代码如下:
stringcom,sname,grade,tnum,tname,zhouci,time2,cha,term,school
stringcnum,cname,a,b,cents
doublecent,sumcent
inttime1,sump,subp
longch
integerdex
dex=lv_1.SelectedIndex()
lv_1.GetItem(dex,3,cnum)
lv_1.getItem(dex,4,cname)
lv_1.getItem(dex,6,cents)
ifcnum=''then
else
ch=messagebox("提示","最多可选择20个学分!"+"你确定选"+trim(cname)+"择这门课程吗?",question!,YesNoCancel!)
ifch=1then
selectchoise_Snum,choise_Cnum
into:a,:b
fromchoise_Info
wherechoise_Snum=:userandchoise_Cnum=:cnum;
ifuser=trim(a)andcnum=trim(b)then
messagebox("提示","你已经选择了"+""+trim(cname)+""+"择这门课程!")
else
selectsum(choise_Cent)
into:sumcent
fromchoise_Info
wherechoise_Snum=:userand(choise_Cha="专业选修"orchoise_Cha="专业必修"orchoise_Cha="公共选修"orchoise_Cha="公共必修"orchoise_Cha="素质选修");
ifsumcent+double(cents)>double(20)then
messagebox("提示","最多选20个学分"+"你已经选"+trim(string(sumcent))+"个学分!"+trim(cname)+""+"学分为"+trim(cents))
return
endif
selectcourse_Com,course_Grade,course_cent,course_Time,course_Tnum,course_Tname,course_Zhouci,course_times,course_Sump,course_Subp,course_Cha,course_School into:com,:grade,:cent,:time1,:tnum,:tname,:zhouci,:time2,:sump,:subp,:cha,:school
fromcourse_Info
wherecourse_Num=:cnum;
ifsump-subp<=0then
messagebox("提示","选择此门课的人数已满!")
return
endif
selectstd_Name
into:sname
fromstd_Info
wherestd_Num=:user;
insert?into?choise_Info(choise_Com,choise_Snum,choise_Sname,choise_Cnum,choise_Cname,choise_Grade,choise_Cent,choise_Time,choise_Tnum,choise_Tname,choise_Zhouci,choise_Times,choise_Cha,choise_Term,choise_School) values(:com,:user,:sname,:cnum,:cname,:grade,:cent,:time1,:tnum,:tname,:zhouci,:time2,:cha,:getterm,:school);
ifsqlca.sqlcode=0then
subp=subp+1
updatecourse_Info
setcourse_Subp=:subp
wherecourse_Num=:cnum;
messagebox("提示",trim(cname)+""+"这门课选择成功!")
endif
endif
else
endif
endif
§4.3.3学生查询功能的实现
学生查询模块可以查询各种信息他主要由选课查询、课表查询、资费查询及成绩查询4个部分组成[8]。各部分介绍如下:
选课查询界面:
图4.13选课查询窗口
当学生选课结束以后,系统把学生当前提交的课程信息保存到一个临时的表中,等待教务员审订通过选课,这时学生可以对已经选择的课程进行查询,确定原来选择的课程是否选上,并且当不满意原来所选的选课时候,学生可以撤消不满意的课程,然后做再次调整,直到学生满意所有的课程选择,选课查询界面相当于学生对课程选择的修改、确认界面。
代码如下:
integerinde=1
stringcom,cnum,cname,grade,tnum,tname,zhouci,time2,cha
doublecent
inttime1,subp
stringcnums,cnames,chas
integerdexs
longk
dexs=lv_1.SelectedIndex()
lv_1.GetItem(dexs,3,cnums)
lv_1.GetItem(dexs,4,cnames)
lv_1.GetItem(dexs,12,chas)
cnums=trim(cnums)
ifcnums=""then
else
k=messagebox("提示","你真的想撤消课程"+trim(cnames)+"?",question!,YesNoCancel!)
ifk=1then
deletefromchoise_Infowherechoise_Snum=:userandchoise_Cnum=:cnums;
ifsqlca.sqlcode=0then
messagebox("提示","课程"+trim(cnames)+"撤消成功!")
iftrim(chas)="素质选修"then
selectcourses_Subp
into:subp
fromcourses_Info
wherecourses_Num=:cnums;
subp=subp-1
updatecourses_Info
setcourses_Subp=:subp
wherecourses_Num=:cnums;
else
selectcourse_Subp
into:subp
fromcourse_Info
wherecourse_Num=:cnums;
subp=subp-1
updatecourse_Info
setcourse_Subp=:subp
wherecourse_Num=:cnums;
endif
lv_1.deleteitems()
declarecodecurcursorfor
selectchoise_Com,choise_Cnum,choise_Cname,choise_Grade,choise_Cent,choise_Time,choise_Tnum,choise_Tname,choise_Zhouci,choise_Times,choise_Cha
fromchoise_Info
wherechoise_Snum=:user;
opencodecur;
fetch?codecurinto:com,:cnum,:cname,:grade,:cent,:time1,:tnum,:tname,:zhouci,:time2,:cha;
dowhileSqlca.Sqlcode=0
lv_1.insertItem(inde,trim("撤消"),1)
lv_1.setitem(inde,2,trim(com))
lv_1.setitem(inde,3,trim(cnum))
lv_1.setitem(inde,4,trim(cname))
lv_1.setitem(inde,5,trim(grade))
lv_1.setitem(inde,6,trim(string(cent)))
lv_1.setitem(inde,7,trim(string(time1)))
lv_1.setitem(inde,8,trim(tnum))
lv_1.setitem(inde,9,trim(tname))
lv_1.setitem(inde,10,trim(zhouci))
lv_1.setitem(inde,11,trim(time2))
lv_1.setitem(inde,12,trim(cha))
inde=inde+1
fetch?codecurinto:com,:cnum,:cname,:grade,:cent,:time1,:tnum,:tname,:zhouci,:time2,:cha;
loop
closecodecur;
endif
else
endif
endif
资费查询界面:
图4.14资费查询窗口
资费查询界面实现学生费用查询功能,即对已经选择的课程所交纳费用的查询,需要交纳费用的课程科目包括素质选修课程和重修课程(其他不需要交纳费用),费用为60元/1学分。资费界面中显示出所有需要交纳费用的课程及金额数,并计算出需要交纳的总费用。
成绩查询界面:
图4.15成绩查询窗口
成绩查询模块实现的功能是查看以往学过所有课程的成绩,根据个人要求不同可以对成绩进行统计,比如可以按升、降序排列成绩,统计以前所有课程总学分数,查看不及格科目门数及需要重修的学分数等等。
课表查询界面:
图4.16课表查询窗口
当学生选课结束后,教务员通过学生提交的选课信息,审订课程是否给予排课安排教室,假如某课程审订通过则对此课程安排相应的上课教室。学生可以在课表栏查询到所此课程对应的上课教室、上课时间及周次等相关信息。
§4.3.4学生个人信息修改功能的实现
本模块包括学生对本人基本信息的修改和他人基本信息查询。
个人信息修改界面:
图4.17基本信息修改窗口
个人基本信息修改界面只能对除学号、姓名以外的信息进行修改,当确认修改后按提交按钮,则保存修改。
查询他人基本信息界面:
图4.18基本信息查询窗口
在查询界面输入要查询学生的学号,及可查询到对应学生的基本信息,如输入:20003789显示信息如图4.18所示,如果输入学生学号不正确或不符合规范,则系统提示输入错误。
§4.3.5教务员排课功能的实现
此模块实现功能:教务员对学生提交的选课单进行排课,由于课程开课年级和学期的关系,把排课分为专业课程排课和素质选修课程排课,又两种排课实现都基本相同,所以本作者只介绍专业课程排课。
排课界面:
图4.19专业课程排课窗口
根据规定系统设定凡是选择课程人数少于50人的课程不给予排课,由于课程科目交多,教务员可以查看指定的课程号对应课程的所有信息,比如查询已经选择人数,可以避免不必要的排课造成工作效率降低;当确定要排的课程后,在排课栏输入要排的课程号,系统根据设定算法,自动对课程进行排课。
代码如下:
stringnum,classnum,pa
intsubp,zt=1
longk
num=sle_2.text
selectcourse_Subp
into:subp
fromcourse_Info
wherecourse_Num=:num;//专业课程中提取已选人数
ifsqlca.sqlcode<>0then
messagebox("提示","课程号不存在!")
return
endif
selectchoise_Adress
into:pa
fromchoise_Info
wherechoise_Cnum=:num;
pa=trim(pa)
ifpa<>""then
messagebox("提示","已经排课!")
sle_2.text=""
return
endif
ifsubp<50then//安排教室
k=messagebox("提示","选择学习此课人数太少,此课取消!",question!,YesNoCancel!)
ifk=1then
deletefromchoise_Infowherechoise_Cnum=:num;
ifsqlca.sqlcode<>0then
messagebox("","此课取消失败!")
return
endif
updatecourse_Info
setcourse_Subp=0
wherecourse_Num=:num;
ifsqlca.sqlcode<>0then
rollback;
messagebox("","此课取消失败!")
return
endif
commit;
messagebox("提示","操作成功!")
endif
return
endif
//************小教室安排***********
ifsubp>=50andsubp<=70then
selectclass_Num
into:classnum
fromclass_Info
whereclass_Cha=70andclass_Zt=0;
updateclass_Info
setclass_Zt=:zt
whereclass_Num=:classnum;
ifsqlca.sqlcode<>0then
messagebox("提示","数据库中插入出错!")
rollback;
return
endif
updatechoise_Info
setchoise_Adress=:classnum
wherechoise_Cnum=:num;
ifsqlca.sqlcode<>0then
messagebox("提示","排课失败!")
rollback;
return
endif
messagebox("提示","排课成功!")
sle_2.text=""
commit;
return
endif
//************中等大教室安排***********
ifsubp>70andsubp<=150then
selectclass_Num
into:classnum
fromclass_Info
whereclass_Cha=150andclass_Zt=0;
updateclass_Info
setclass_Zt=:zt
whereclass_Num=:classnum;
ifsqlca.sqlcode<>0then
messagebox("提示","数据库中插入出错!")
rollback;
return
endif
updatechoise_Info
setchoise_Adress=:classnum
wherechoise_Cnum=:num;
ifsqlca.sqlcode<>0then
messagebox("提示","排课失败!")
rollback;
return
endif
messagebox("提示","排课成功!")
sle_2.text=""
commit;
return
endif
//**************大教室安排************
ifsubp>150andsubp<=300then
selectclass_Num
into:classnum
fromclass_Info
whereclass_Cha=300andclass_Zt=0;
updateclass_Info
setclass_Zt=:zt
whereclass_Num=:classnum;
ifsqlca.sqlcode<>0then
messagebox("提示","数据库中插入出错!")
rollback;
return
endif
updatechoise_Info
setchoise_Adress=:classnum
wherechoise_Cnum=:num;
ifsqlca.sqlcode<>0then
messagebox("提示","排课失败!")
rollback;
return
endif
messagebox("提示","排课成功!")
sle_2.text=""
commit;
return
endif
§4.3.6教师成绩录入功能的实现
此模块实现教师对学生成绩的录入及修改等操作[10]。
成绩录入界面:
图4.20成绩录入窗口
对学生成绩的录入分新录和修改,如果添加学生新课程成绩,按添加按钮,输入学生对应信息及成绩,然后保存即可。假如要修改某学生成绩,可以在文本框中输入学生学号,查找该学生对应信息,也可以输入要修改课程的的课程号进行查询,当操作完成以后保存,成绩录入成功。
§4.3.7密码修改功能的实现
密码修改界面被各角色用户公用,当用户登陆此系统时,系统设置的全局变量jiaose将保存此用户的角色信息,当jiaose=1时,表示该用户是教务员;当jiaose=2时,表示该用户是学生;否则用户是教师。系统根据jiaose的取值从而判断出该用户是何种类型。当各类型用户进行密码修改时,系统从而能确定该用户对应的个人信息表,对密码进行修改,从而实现密码修改功能。
密码修改界面:
图4.21密码修改界面
其他模块如教师基本信息查询、修改;教务员对教师、学生的添加、删除、修改等功能,这里不在做详细说明,本作者只对学生选课功能做了详述。
密码修改功能实现代码如下:
stringpw1,pw2,pw3
pw1=sle_1.text
pw2=sle_2.text
pw3=sle_3.text
ifjiaose=1then//教务员密码修改
iftrim(password)=pw1then
ifpw2=pw3then
updateadmin_Infosetadmin_Key=:pw2whereadmin_Num=:user;
ifsqlca.sqlcode=0then
messagebox("","密码修改成功!")
close(w_modify_key)
else
messagebox("","密码修改失败!")
endif
else
messagebox("","两次输入的密码不一致!请重新输入。")
sle_2.text=''
sle_3.text=''
return
endif
else
messagebox("","输入的旧密码不正确!")
sle_1.text=''
return
endif
return
endif
ifjiaose=2then//学生密码修改
iftrim(password)=pw1then
ifpw2=pw3then
updatestd_Infosetstd_Key=:pw2wherestd_Num=:user;
ifsqlca.sqlcode=0then
messagebox("","密码修改成功!")
close(w_modify_key)
else
messagebox("","密码修改失败!")
endif
else
messagebox("","两次输入的密码不一致!请重新输入。")
sle_2.text=''
sle_3.text=''
return
endif
else
messagebox("","输入的旧密码不正确!")
sle_1.text=''
return
endif
else
iftrim(password)=pw1then//教师密码修改
ifpw2=pw3then
updateteacher_Infosetteacher_Key=:pw2
whereteacher_Num=:user;
ifsqlca.sqlcode=0then
messagebox("","密码修改成功!")
close(w_modify_key)
else
messagebox("","密码修改失败!")
endif
else
messagebox("","两次输入的密码不一致!请重新输入。")
sle_2.text=''
sle_3.text=''
return
endif
else
messagebox("","输入的旧密码不正确!")
sle_1.text=''
return
endif
第五章学生信息管理系统测试
§5.1测试环境
本系统的测试是在WindowsXP+SQLServer200环境下进行;数据库学生表中有数据2条,专业课程表中有数据若干条;成绩表中有成绩若干条;其他表中也有数据若干。
§5.2测试目的和目标
测试目的是发现程序中的错误,好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案成功的测试是发现至今为
上一篇:
VFP现代物流企业管理系统C(论文和程序)
下一篇:
法律专业开题报告范文