|HILL
SPIFl»i
IDefaultValue
Comment
stupid
dVARCHAR(6)
y
[BINARY
QWthd申
FDATE
llid・
0rativepldce
八ARCHAR[1Q0|
二|BINARY
*class_id
&>INT(11)
J
□UNSIGMED□7ER0FILL
0address
bVARCHAR(IOO)
□BINARY
||迎“・
Qphone
7VARCHAR[20)
LJBINARY
class班级表
记录班级信息
ColumnName
IIDatatjipe
INCT|NULL
l^T0JFlags
|defaultValue
|Comment
id
lt>INT(IO)
✓N)UNSIGNED_
J7ER0ALLcan
Oname
7VARCHARHOJ
二|BINARY
vhteachef
7VARCHAR(8)
□BINARY
班主任
qmonitor
OVARCHAR(G)
□BINARY
班丧
Teacher老师表
记录老师信息(字段可以扩充)
ColumnNane
|Datatype
I粘口勰。
頁
|De#aullValue
|Cammenrt
id
心VARCHAAI8)
yUBINARY
7name
心VARCHAR145)
dLIBINARY
Course课程表
CclumnUame
|Datatype
SSLJSiT0Flags
|DefaultValue
Conmient
id
INT(IQ)
*/辺UNSIGNED□ZEA0FILL
nun
Q畑me
vVARCHAR(100n
#□BIMAffT
0ctescr
&VARCHAE(300J
□BINARY
nnm
Oteacher
©VARCHAR(B)
□BIHARY
Score分数表
记录学生某课程成绩
ColumnName
|Datatype
INUT
|HUJILL
ISiTC>JFlags
DefautValue
Cement
stu_id
心VARCHARIG)
d
□BINARY
course^ad
INT(IO)
y
5UNSIGNED
口ZEROALL
Qscore
XINT(1O)
✓
0UNSUGNED
二|ZEFtOFILL
User用户表
用于用户登录时,其内容由新建学生、老师时自动添加
ColumnName
|Oatalvpe
[闍l丨arI冋郵
|DefaultVakie|匚omment
name
iVARCHARIB)
yLIBINARY
0pass
IVARCHARIE)
✓LJBINARY
Qrde
丄誌INT(10)
Y/UNSIGNED:
JZEROALL1
143.2:
数据流图
一个应用系统在发生业务活动时,会产生大量的不同类型的业务数据,对这些数据的存储、分类和展现是实现系统目标的基础。
上节设计了一系列数据表,在此系统运行中将产生的数据写于数据库,并根据添加查询出来展现。
1.4.4系统流程设计
1)普通学员系统流程
2)老师系统流程
图-5
3)管理员系统流程
管理学籍信息
管理课程信息查看考试成绩
图-6
1.5编码设计
编码一种艺术。
好的编码首先要逻辑正确、清晰,只有这样编码要更成功实现系统功能;其次要书写规范、流畅、注释要写清楚,让人达到赏心悦目的感受。
原因主要是:
写过的代码,在系统升级完善时可能需要修改,而修改人很有可能不是程序的编写者;如果逻辑不清,书写混乱,没有足够的注释,那将是一种灾难,将大大增加系统维护升级的开销。
1.5.1后台编码设计
采用模型(Model),视图(View)和控制Controller)模型。
MVC模式的目的就是实现Web系统的职能分工。
Model层实现系统中的业务逻辑,通常可以用
JavaBean或EJB来实现。
View层用于与用户的交互,通常用JSP来实现。
Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
本系统中,控制器位于包controllers下,控制页面流程跳转,调用modle
模型位于包modles下,模型和数据表对应
如下图:
-;bcontrollers
|_£|]AeppliratioiiCi&Tktfoll^r.javaEl-丄CJa'ssControlltx.jaLV*SJ_CourseCoatroiltr.jitv@lttl-iJMlgeCQutroiler-java
!
iI~~L.
1+1-J.ScoreContrcllw.java+-[TStuController.java+]_J_Symltrailer.javsL+ITesjCooitrq11er.」ava+EVsarCcntroiler,javt
1-1l£jeptIon
[+|-JSysExcapti^U-Java
-.+r
:
E-
iit
ii±i-
i
+
Iij-
Bas-feAccess.javaE^.s^MyEql-javaClassBjsysCourse,javaManager,javaS^ore.javaStudsntjBvaStulnfo.javaTeacher・javaUser,java
典型代码:
teacher模型,对应数据库表teacher
packagemodles;
importcom.et.ar.annotations.Column;
importcom.et.ar.annotations.GeneratorType;
importcom.et.ar.annotations.ld;
importcom.et.ar.annotations.Table;
@Table(name="teacher")
publicclassTeacherextendsBaseMysql{
ld(generate=GeneratorType.NONE)privateStringlumnprivateStringname;
publicStringgetName(){returnname;
}
publicvoidsetName(Stringname){this.name=name;
}
teacher控制器,teacherController
packagecontrollers;
publicclassTeaControllerextendsApplicationController{publicJspViewindex(){
introle=Integer.parseInt((String)session.getAttribute("_role"));Stringrst="tea/indexv.jsp";
switch(role){
case1:
rst="error.jsp?
why=auth"
break;
case2:
rst="tea/indexv.jsp";break;
case3:
rst="tea/index.jsp";break;
returnnewJspView(rst);
■
/*
查询老师信息
*/
publicJsonViewget()throwsException{
Stringorder=
request.getParameter("order"
),
page
=request.getParameter("page"),
rows
=request.getParameter("rows"),
sort=
request.getParameter("sort"),
id=request.getParameter("id"),
name
=request.getParameter(”name");
StringBuildercondition=newStringBuilder();
ArrayListvString>args=newArrayList();
if(id!
=null&&!
id.equals("")){condition.append("id=?
");
order=sort+""+order;
intlimit=Integer.parseInt(rows);
intoffset=(Integer.parseInt(page)-1)*limit;
Listteachers
Teacher.findAII(Teacher.class,condition.toString(),args.toArray(),order,limit,offset);
&&
MapvString,Object>rst=newHashMapvString,Object>();
if(request.getParameter("t")!
=null
request.getParameter("t").equalslgnoreCase("tree")){
returnnewJsonView(teachers);
}else{
rst.put("rows",teachers);
rst.put("total",teachers.size());
returnnewJsonView(rst);
/*
新增老师信息
*/publicJsonViewadd(){
Stringdata=request.getParameter("data");
JSONParserparser=newJSONParser();
JSONArrayja;
JSONObjectjo=null;
Teacherteacher=nul;
ArrayListvString>success=newArrayList(),failure=newArrayListvString>();
MapvString,Object>rst=newHashMapvString,Object>();rst.put("code","O");〃成功
Stringid=null;
try{
ja=(JSONArray)parser.parse(data);
for(inti=0;ijo=(JSONObject)ja.get(i);
id=(String)jo.get("id");
teacher=Teacher.createModel(Teacher.class,jo);
if(teacher.save()){
success.add(id);
try{
Useruser=newUser();
user.setName(id);user.setPass(id);user.setRole
(2);
user.save();
}catch(Exceptionee){
ee.printStackTrace();
System.out.println("添加用户失败,请手动添加用户
);
rst.put("sid",success);
rst.put("fid",failure);
returnnewJsonView(rst);
*更新指定的老师资料
*/
publicJsonViewupdate(){
Stringdata=request.getParameter("data");JSONParserparser=newJSONParser();
ArrayListvString>success=newArrayListvString>(),
failure=newArrayListvString>();
MapvString,Object>rst=newHashMapvString,Object>();rst.put("code","0");
Stringid=null;
try{
ja=(JSONArray)parser.parse(data);
for(inti=0;ijo=(JSONObject)ja.get(i);
id=(String)jo.get("id");
teacher=Teacher.find(Teacher.class,id);
Teacher.updateModel(teacher,jo);
if(teacher.save()){
success.add(id);
returnnewJsonView(rst);
删除老师信息
*/
publicJsonViewdel(){
Stringdata=request.getParameter("data");JSONParserparser=newJSONParser();
JSONArrayja=null;JSONObjectjo=null;Teacherteacher=null;
ArrayListvString>success=newArrayListvString>().
if(teacher.destroy()>0){success.add(id);
try{
Useruser=User.find(User.class,id);if(user!
=null)user.destroy();
}catch(ActiveRecordExceptionee){
System.out.println("用户删除失败,请手动处理");
}
}else{
failure.add(id);
}catch(ParseExceptione)
failure.add(id);
rst.put("code","1");
e.printStackTrace();
}catch(ActiveRecordExceptione){
rst.put("code","-1");
failure.add(id);
e.printStackTrace();
rst.put("sid",success);rst.put("fid",failure);
IreturnnewJsonView(rst);
}l
}
1.5.2前端编码设计
为了简化和统一前端界面风格:
采用JQuery和基于JQuery的UI框架easyui
jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTMLdocumentsevents、实现动画效果,并且方便地为网站提供AJAX交互。
easyu基于JQuery可以方便的创建风格统一的UI,是小型系统快速开发的不错选择。
可以创建window,datagrid,commbox,button等常见控件。
1.6运行测试
系统设计完成后,最总要的一步就是系统运行测试。
通过对最终软件系统进行全面的测试,可以确保最终软件系统满足产品需求并且遵循了既定系统设计。
对于在线考试系统:
作者制定了对系统功能的以下简单测试:
1)系统登录测试:
1•要求能够实现学员、老师、管理员的登录功能;
2•在用户名或密码错误时候有必要提示;
ra.E0
失败提示
图-14
◎.a.niltsvid]aiiHr
r_t±*s
S*n¥S
flsuf
勺毎音辔
■Al]址i#vLfnrwaJ.,
StILTl*41DIQ/QT
登录成功进入主页面
图-15
2)学籍信息管理测试:
1•管理员登录后可以管理学籍信息;
2•系统对一些非法输入能够监测并处理;
新增000005学生信息
t«b
«1T
It111ki■孑tr1-39*-?
1^
肌MHrTl-hiIQLQ^T
新增000005学生信息成功提示
tzai册电amtMWjass*
IA矗W
»ju田剛]mjxhi^r^M
二・4草]旳审k时.些呈刊SK軼如
*Allheilrtcer»edl
WZ3.Tiv-歩IWM
删除000005学生信息成功
3)压力测试:
在较多用户并发访问情况下,系统应能够优雅的胜任服务工作在较多用户并发访问情况下,系统应能够优雅的胜任服务工作。