学生成绩管理系统PB课程设计学习资料.docx
《学生成绩管理系统PB课程设计学习资料.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统PB课程设计学习资料.docx(19页珍藏版)》请在冰豆网上搜索。
![学生成绩管理系统PB课程设计学习资料.docx](https://file1.bdocx.com/fileroot1/2023-1/23/b9bb57c6-f36f-4fc0-ba57-3fc7a810fbe5/b9bb57c6-f36f-4fc0-ba57-3fc7a810fbe51.gif)
学生成绩管理系统PB课程设计学习资料
一系统分析与设计
1)系统功能分析
系统功能分析阶段的任务就是确定该系统所要解决的问题及其具体要求。
学生成绩管理系统需要完成的主要功能如下:
1.学生信息的输入和存储,包括学生编号、学生名称、所属专业等。
2.对已经输入的班级信息的修改、查询。
3.学生基本信息的输入和存储、包括学号、姓名、性别、出生日期等。
4.学生基本信息的查询。
5.每学期初各班所开设课程的输入,包括课程名、学期、学时等。
6.各班所开设课程信息的查询。
7.学期末输入每个学生的考试成绩。
8.查询某个学生。
9.查询并打印某班某学期所有学生的各科成绩。
10.查询并打印某班某学期某课成绩。
2)系统功能模块分析
通过上面各项功能的分析、分类、综合,按照模块化程序设计的要求,得到它的模块结构:
(1)学生基本信息管理包括学生基本信息查询,学生基本信息输入。
(2)课程信息管理包括课程信息查询,课程信息输入。
(3)成绩信息管理包括成绩查询,成绩输入。
二、数据库设计和实现
1)创建数据库
在PowerBuilder开发环境中打开数据库画板,使用[ODBODBC]接口建立AdaptiveServerAnywhere8.0(ASA8.0)的数据库,然后建立3个表和1个视图。
分别为“课程”表、“成绩”表、“选课”表。
各表之间的关系如下图1所示:
图1各表的关联关系
2)创建应用对象
(1)创建新的工作空间。
(2)创建应用对象,应用对象名设为“ww”。
(3)打开新的对象画板.为应用对象app_xscj的Open事件编写代码如下:
//Profileliudi
SQLCA.DBMS="ODBC"
SQLCA.AutoCommit=False
SQLCA.DBParm="ConnectString='DSN=mydb;UID=;PWD='"
CONNECT;
ifSQLCA.sqlcode<>0then
messagebox("提示","数据库连接失败!
")
else
open(w_login)
endif
执行此应用时,首先链接数据库“ww”,成功后打开登录窗口。
三、设计系统管理模块
1)设计登录窗口
登录窗口如图2所示:
图2登录窗口
为登录窗口编写脚本。
(1)定义全局变量
stringgs_username,gs_password,gs_admin
分别存储登录用户的姓名、密码和权限。
(2)定义实例变量
intli_n
存储登录时用户输入密码错误的尝试次数,控制在最多3次机会。
(3)登录窗口w_login的open事件脚本如下
li_n=3
初始化变量li_n,限制出错次数为3次。
(4)[确定]按钮cb_1的Clicked事件脚本如下。
stringls_username,ls_password
ls_username=trim(sle_1.text)
ls_password=trim(sle_2.text)
ifls_username=""orls_password=""then
messagebox("提示","用户名和密码不能为空")
else
SELECT"users"."name","users"."password","users"."admin"
INTO:
gs_username,:
gs_password,:
gs_admin
FROM"users"
WHERE("users"."name"=:
ls_username)AND
("users"."password"=:
ls_password);
ifsqlca.sqlcode=0then
open(w_main)
close(w_login)
else
li_n=li_n-1
ifli_n<>0then
messagebox("提示","用户名或密码错误")
else
messagebox("提示","错误超过3次,自动退出")
halt
endif
endif
endif
(5)[放弃]按钮cb_2的Clicked事件脚本如下.
halt
四、设计学生基本信息管理模块
1)设计访问学生基本信息的数据窗口
设计输入学生基本信息的数据窗口
创建数据窗口d_jiben_shuru,显示风格为“Freeform”,数据源类型为“QuickSelect”,其布局如图15所示:
图15数据窗口d_jiben_shuru
数据窗口的d_jiben_shuru生成的SQLSelect语句为:
SELECT"jiben"."xh","jiben"."xm","jiben"."xb","jiben"."csrq","jiben"."jtzz","jiben"."bjbh"FROM"jiben"
设计修改学生基本信息的数据窗口
创建数据窗口d_jiben_xiugai,显示风格为“Grid”,数据源类型为“QuickSelect”,其布局如图16所示:
图16数据窗口d_jiben_xiugai
数据窗口d_jiben_xiugai生成的SQLSeleect语句为:
SELECT"jiben"."xh","jiben"."xm","jiben"."xb",
"jiben"."csrq","jiben"."jtzz","jiben"."bjbh"
FROM"jiben"
ORDERBY"jiben"."xh"ASC
设计查询学生基本信息的数据窗口
创建数据窗口d_jiben_chaxun,显示风格为“Grid”,数据源类型为“SQLSelect”,其布局如图17所示:
图17数据窗口d_jiben_chaxun
其中,定义3个String型的检索参数变量mxh、mxm、mbj,分别表示学号、姓名、班级,形成带检索参数的数据窗口。
2)设计访问学生基本信息的窗口
设计输入学生基本信息的窗口
通过继承窗口输入窗口w_shuru生成输入学生基本信息窗口w_jiben_shuru,将数据控件dw_1的DataObject属性设置为d_jiben_shuru,将窗口的Title属性改为“录入学生基本信息”,如图18。
图18录入学生基本信息窗口
2.设计输入学生基本信息的窗口
通过继承窗口输入窗口w_xiugai生成修改学生基本信息窗口w_jiben_xiugai,将数据控件dw_1的DataObject属性设置为d_jiben_xiugai,将窗口的Title属性改为“修改学生基本信息”,如图19:
图19修改学生基本信息窗口
3.设计查询学生基本信息的窗口
要求此窗口中能够根据学生的姓名或学号查询出学生的基本信息,能够根据班级名称查询出该班所有学生的基本信息。
窗口如图20所示:
图20查询学生基本信息窗口
[查询]按钮的Open事件脚本如下。
dw_1.settransobject(sqlca)
ifddplb_1.text=""orsle_1.text=""then
messagebox("提示","查询列和查询内容不能为空!
")
return
endif
stringstr
str=trim(sle_1.text)
choosecaseddplb_1.text
case"学号"
dw_1.retrieve(str,"%","%")
case"姓名"
dw_1.retrieve("%",str,"%")
case"班级名称"
dw_1.retrieve("%","%",str)
endchoose
代码中根据查询依据的不同,以不同参数方式检索。
五、设计课程管理模块
1)设计访问课程信息的数据窗口
设计输入课程信息的数据窗口
创建数据窗口d_bjkc_shuru,显示风格为“Grid”,数据源类型为“QuickSelect”,其布局如图20所示:
图20数据窗口d_bjkc_shuru
数据窗口d_bjkc_shuru生成的SQLSeleect语句为:
SELECT"bjkc"."bjbh","bjkc"."xq","bjkc"."kcmc",
"bjkc"."xs","bjkc"."jsxm"FROM"bjkc".
设计查询课程信息的数据窗口
创建数据窗口d_bjkc_chaxun,显示风格为“Grid”,数据源类型为“QuickSelect”,其布局如图21所示。
图21数据窗口d_bjkc_chaxunn
其中,定义2个String型检索参数变量mxq、mbjmc,分别表示学期、班级,形成带检索参数的数据窗口。
该数据窗口的修改属性为默认值即“不允许修改”。
数据窗口d_bjkc_chaxun生成的SQLSelect语句为:
SELECT"bjkc"."kcmc","bjkc"."xs","bjkc"."jsxm",
FROM"bjkc","banji""
WHERE("banji"."bjbh"="bjkc"."bjbh")AND
(("bjkc"."xq"=:
mxq)AND
("banji"."bjmc"=:
mbjmc))
2)设计访问课程信息的窗口
设计查询班级开设课程的窗口
首先创建一个窗口对象w_bjkc_chaxun,调整大小,在窗口中放置2个静态文本控件(st_1,st_2)、2个下拉列表框控件(ddlb_1,ddlb_2)、1个命令按钮(cb_1)、1个数据窗口控件(dw_1),调整各个控件的位置和大小。
如图23所示:
(1)窗口w_bjkc_chaxun的open事件脚本如下
dw_1.settransobject(sqlca)
intli_xq,li_bjmc,n
stringls_xq,ls_bjmc
selectcount(distinctxq)into:
li_xq
图23查询班级开设课程的窗口
from课程;
declarexqcursorcursorfor
selectxqfrom课程groupbyxq;
openxqcursor;
forn=1toli_xq
fetchnextxqcursorinto:
ls_xq;
ddplb_1.additem(ls_xq)
next
closexqcursor;
selectcount(distinctbjmc)into:
li_bjmc
from班级;
declarebjmccursorcursorfor
select班级.bjmc
from课程,班级
where课程.bjbh=班级.bjbhgroupby班级.bjmc;
openbjmccursor;
forn=1toli_bjmc
fetchnextbjmccursorinto:
ls_bjmc;
ddplb_2.additem(ls_bjmc)
next
closebjmccursor;
(2)[查询]按钮的Clicked事件脚本如下。
dw_1.retrieve(ddplb_1.text,ddplb_2.text)
六、设计成绩管理模块
1)设计访问成绩信息的数据窗口
设计输入成绩信息的数据窗口
创建数据窗口d_xscj_shuru,显示风格为“Grid”,数据源类型为“SQLSelect”,其布局如图19所示。
数据来源与成绩表xscj和视图xsjb,其中,学号、学期、课程名称和成绩为成绩表xscj的列,姓名是视图xscj的列。
选则[Roes]|[UpdataProperties]命令,打开数据窗口的修改属性对话框,如图24所示:
图24数据窗口d_xscj_shuru
选择[Rows]|[UpdateProperties]命令,打开数据窗口的修改属性对话框,设置数据窗口的修改属性,即只有成绩表xscj的成绩列可以在数据窗口中修改,关键字为成绩表xscj的主关键字(xh,xq,kcmc)。
然后,单击工具条上的[TabOrder]图标,将列控件sxcj_cj的TabOrder值设为10,在单击[TabOrder]图标回到原设计状态。
如图25:
图25数据窗口d_xscj_shuru的修改属性
设计查询某班级某学期全体学生各科成绩的数据窗口
创建数据窗口d_xscj_bjcx,显示风格为“CrossTab”,数据源类型为“SQLSelect”,数据来源于成绩表xscj和视图xsbj。
如图26:
图26数据窗口d_xscj_grcx
设计查询某班级某学期全体学生各科成绩的数据窗口
创建数据窗口d_xscj_bjcx,显示风格为“CrossTab”,数据源类型为“SQLSelect”,数据来源于成绩表xscj和视图xsbj。
如图27:
图27数据窗口d_xscj_bjxc
在[Headeer[1]]条中添加2个计算域控件,对应的表达式分别为mbjmc和mxq,3个文本控件,其文本分别为“成绩单”、“班级”、和“学期”.
数据窗口的检索参数为mxq和mbjmc,分别对应于学期和班级名称,修改属性取默认值(不允许修改)。
设计查询某班级某学期全体学生各科成绩的数据窗口
创建数据窗口d_xscj_kccx,显示风格为“N_Up”,拦数为2,数据源类型为“SQLSelect”,数据来源于成绩表xscj和视图xsbj.如图28:
图28数据窗口d_xsch_kccx
在[Header]条中添加2个计算域控件对应的表达式分别为mbcme,3个文本控件,其文本分别为“成绩单”、“班级”、和“课程”.
数据窗口的检索参数为mxq、mbjmc、mkcme,分别对应于学期、班级名称和课程名称,修改属性取默认值(不允许修改)。
2)设计访问成绩信息的窗口
设计输入成绩的窗口
首先创建窗口对象w_xscj_shuru,在窗口上放置1个分组框控件、3个静态文本控件、3个下拉列表框控件、3个命令按钮控件和1个数据窗口控件。
如图29:
图29输入成绩的窗口
各个窗口和控件的事件脚本如下。
(1)窗口的open事件脚本如下。
dw_1.settransobject(sqlca)
intli_xq,li_bjmc,li_kcmc,n
stringls_xq,ls_bjmc,ls_kcmc
selectcount(distinctxq)into:
li_xq
frombjkc;
declarexqcursorcursorfor
selectxqfrombjkcgroupbyxq;
openxqcursor;
forn=1toli_xq
fetchnextxqcursorinto:
ls_xq;
ddlb_1.additem(ls_xq)
next
closexqcursor;
//生成班级下拉列表框的列表项
selectcount(distinctbjbh)into:
li_bjmc
frombjkc;
declarebjmccursorcursorfor
selectbanji.bjmc
frombjkc,banji
wherebjkc.bjbh=banji.bjbhgroupbybanji.bjmc;
openbjmccursor;
forn=1toli_bjmc
fetchnextbjmccursorinto:
ls_bjmc;
ddlb_2.additem(ls_bjmc)
next
closebjmccursor;
(2)窗口的closequery事件脚本如下。
integerrt
dw_1.accepttext()
ifdw_1.modifiedcount()=0then
return0
else
rt=messagebox("提示","添加修改内容未保存,确实退出吗?
",question!
yesno!
)
ifrt=1then
return0
endif
endif
return1
(3)课程的下拉列表框的getfocus事件脚本如下。
intli_kcmc,n
stringls_kcmc,ls_xq,ls_bjmc
ls_xq=ddlb_1.text
ls_bjmc=ddlb_2.text
ifnot(ls_xq=""orls_bjmc="")then
selectcount(distinctbjkc.kcmc)into:
li_kcmc
frombjkc,banji
where(bjkc.bjbh=banji.bjbh)and(banji.bjmc=:
ls_bjmc)and(bjkc.xq=:
ls_xq);
declarekcmccursorcursorfor
selectbjkc.kcmc
frombanji,bjkc
where(bjkc.bjbh=banji.bjbh)and(banji.bjmc=:
ls_bjmc)and(bjkc.xq=:
ls_xq)
groupbybjkc.kcmc;
ddlb_3.reset()
openkcmccursor;
forn=1toli_kcmc
fetchnextkcmccursorinto:
ls_kcmc;
ddlb_3.additem(ls_kcmc)
next
closekcmccursor;
endif
(4)确定按钮的clicked事件脚本如下。
intli_xh,n
stringls_kcmc,ls_xq,ls_bjmc,ls_xh
ls_xq=ddlb_1.text
ls_bjmc=ddlb_2.text
ls_kcmc=ddlb_3.text
ifls_xq=""orls_bjmc=""orls_kcmc=""then
messagebox("提示","选择项不能空!
")
else
selectcount(distinctxh)into:
li_xh
fromxsbj
wherexsbj.bjmc=:
ls_bjmc;
declarexhcursorcursorfor
selectxh
fromxsbj
wherexsbj.bjmc=:
ls_bjmc;
openxhcursor;
forn=1toli_xh
fetchnextxhcursorinto:
ls_xh;
insertinto"xscj"("xh","xq","kcmc","cj")
values(:
ls_xh,:
ls_xq,ls_kcmc,null);
next
closexhcursor;
dw_1.retrieve(ls_xq,ls_bjmc,ls_kcmc)
endif
设计查询学生个人成绩窗口
查询学生个人成绩的窗口如图30所示。
数据窗口控件连接的数据窗口对象为d_xscj_grcx..
(1)查询按钮的clicked事件脚本如下
dw_1.settransobject(sqlca)
ifsle_1.text=""orsle_2.text=""then
messagebox("提示","班级 学期和课程不能为空")
else
dw_1.retrieve(sle_1.text,sle_2.text)
cb_2.enabled=true
endif
(2)打印按钮的clicked事件脚本如下
dw_1.print(true)
(3)退出按钮的clicked事件脚本如下
close(parent)
设计查询班级成绩的窗口
查询班级成绩的窗口如图31所示。
数据窗口控件的dataobject属性为d_xscj_bjcx。
此窗口的open事件脚本与输入成绩窗口的open事件脚本相同。
打印按钮和退出按钮的clicked事件脚本与d_xscj_grcx中的一样。
(1)查询按钮的clicked事件脚本如下
dw_1.settransobject(sqlca)
据介绍,经常光顾“碧芝”的都是些希望得到世界上“独一无二”饰品的年轻人,他们在琳琅满目的货架上挑选,然后亲手串连,他们就是偏爱这种DIY的方式,完全自助。
ifddplb_1.text=""orddplb_2.text=""then
messagebox("提示","班级 学期和课程不能为空")
else
3.www。
oh/ov。
com/teach/student/shougong/dw_1.retrieve(ddplb_1.text,ddplb_2.text)
cb_2.enabled=true
endif
十几年的学校教育让我们大学生掌握了足够的科学文化知识,深韵的文化底子为我们创业奠定了一定的基础。
特别是在大学期间,我们学到的不单单是书本知识,假期的打工经验也帮了大忙。
图31查询班级成绩的窗口
设计查询课程成绩的窗口
查询课程成绩的窗口如图32所示。
数据窗口控件的dataobject属性为d_xscj_kccx。
标题:
大学生究竟难在哪?
—创业要迈五道坎2004年3月23日此窗口的open事件脚本、“课程”的下拉列框的getfocus事件脚本与输入成绩窗口的对应事件脚本相同,打印按钮和退出按钮的clicked事件脚本与查询学生个人成绩窗口中的一样。
木质、石质、骨质、琉璃、藏银……一颗颗、一粒粒、一片片,都浓缩了自然之美,展现着千种风情、万种诱惑,与中国结艺的朴实形成了鲜明的对比,代表着欧洲贵族风格的饰品成了他们最大的主题。
(1)查询按钮的clicked事件脚本如下
dw_1.settransobject(sqlca)
ifddplb_1.text=""orddplb_2.text=""orddplb_3.text=""then
messagebox("提示","班级 学期和课程不能为空")
else
dw_1.retrieve(ddplb_1.text,ddplb_2.text,ddplb_3.text)
十字绣□编制类□银饰制品类□串珠首饰类□cb_2.enabled=true
endif
图31查询课程成绩的窗口
(3)个性体现七、系统的编译和发布
在现代文化影响下,当今大学生对新鲜事物是最为敏感的群体,他们最渴望为社会主流承认又最喜欢标新立异,他们追随时尚,同时也在制造时尚。
“DIY自制饰品”已成为一种时尚的生活方式和态度。
在“DIY自制饰品”过程中实现自己的个性化追求,这在年轻的学生一代中尤为突出。
“DIY自制饰品”的形式多种多样,对于动手能力强的学生来说更受欢迎。
到此为止,系统的实现工作就完成了。
在第个模块的实现过程中,对其每个功能要进行仔细的测试和调试,最后对整个应有程序做系统的测试,在测试工作完成后可进作应用程序的编译和发布步骤如下。
(1)创建工程对象
单击工具条上的new图标,打开new对话框,在对话框中选择rpoject标签,再选择applicationwizard图标,单击ok按钮,开始工程的向导,露出马最后出现工程对象。