资源描述
《Java程序设计》课程设计报告书
课题名称
基于Java教师档案管理系统设计
姓 名
学 号
学 院
专 业
指引教师
年 6 月 28 日
一、设计任务及规定:
1. 采用B/S模式进行开发,其长处是后台与前台解决层次分明,并且符合众多已经习惯网页方式顾客。
2. 采用面向对象开发与设计理念。运用面向对象技术前提是对整体系统高度和精确抽象,通过它可以保证系统良好框架,进而带来产品较强稳定性和运营效率。
3. 采用模块化设计。模块化设计规定将整个系统划提成基于小模块,有助于代码重载,简化设计和实现过程。
4. 简朴以便系统界面。设计简朴和谐系统界面,以便顾客较快适应系统操作。
5.速度优先原则。由于此工具最重要评测原则就是速度,因而在设计过程中,详细过程尽量做到资源占用少,速度快。
6.设计既要突出重点,又要细致周到。要符合设计需求,在有也许改进地方进行扩充,使系统更适应顾客需要。
指引教师签名:
年 月 日
二、指引教师评语:
指引教师签名:
年 月 日
三、成绩
验收盖章
年 月 日
基于Java教师档案管理系统系统设计
谭维隽
1设计目
长期以来,教职工管理工作大多数都采用是老式手工方式来记录有关信息,这种管理方式存在诸多缺陷,例如说,教职工信息、工资信息录入,查询,更新,分析都要完全依赖管理人员手工记录和人工分析,人工记录是相称麻烦。为满足需求,决定采用各种编程语言JSP开发了基于B/S架构教师档案管理系统,教师档案管理系统是涉及信息科学、数据计算和计算机技术复杂人机交互系统。通过这些系统,可以对教职工和管理进行智能化管理,有效地记录并查询教职工各项状况,为管理者提供了诸多以便。
2设计重要内容和规定
2.1数据库逻辑构造设计
咱们懂得,数据库概念模型独立于任何特定数据库管理系统,因而,需要依照详细使用数据库管理系统特点进行转换。即转化为按计算机观点解决逻辑关系模型,E-R模型向关系数据库模型转换应遵循下列原则:
*每一种实体要转换成一种关系
*所有主键必要定义非空(NOT NULL)
*对于二元联系应按照一对多、弱对实、一对一、多对多等联系来定义外键。
依照E-R模型,教师档案管理系统建立了如下逻辑数据构造,下面是各数据表详细阐明。
(1)教师信息表重要是记录了教师基本信息。表构造如表2.1所示。
表2.1教师信息表(t_jaoshi)
列名
数据类型
长度
容许空
与否主键
阐明
id
int
4
否
是
ID
gonghao
varchar
50
否
否
教师号
xingming
varchar
50
否
否
姓名
xingbie
varchar
50
否
否
性别
nianling
varchar
20
否
否
年龄
shengri
varchar
20
否
否
出生日期
gongzuo
varchar
50
否
否
工作时间
zhuanye
varchar
50
否
否
专业
zhaopian
varchar
50
否
否
照片
beizhu
varchar
50
否
否
备注信息
(2) 工资信息表重要是记录了教职工工资基本信息。表构造如表2.2所示。
表2.2工资信息表(t_gongzi)
列名
数据类型
长度
容许空
与否主键
阐明
id
int
4
否
是
ID
jsid
varchar
50
否
否
教师ID
riqi
varchar
50
否
否
工资月份
gongzi
varchar
50
否
否
工资数
jiangjin
varchar
20
否
否
奖金
(3)管理员信息表重要记录管理员账号信息,涉及顾客名和密码,表构造如表2.3所示。
表2.3管理员信息表(t_admin)
列名
数据类型
长度
容许空
与否主键
阐明
userId
int
4
否
是
编号
userName
varchar
50
否
否
顾客名
userPw
varchar
50
否
否
密码
2.2数据库连接原理
采用JDBC连接数据库方式,只需在工程中导入相应数据库jar包,就可以以便对数据库进行连接,在程序中,用Class.forName()办法来加载驱动程序,在用DriverManagergetConnection()办法就可以创立一种数据库连接。程序采用是DAO模式来操作数据库,DAO(Data Access Object,数据访问对象),是Java编程中一种典型模式,已被广泛应用,也是J2EE架构中持久层框架基本知识,基于分层次式软件架构来实现对数据库访问操作。DAO模式重要思想就是从抽象数据源获取与操纵数据办法。抽象数据含义就是编写应用程序程序员不必关怀数据库物理位置,已经是何种数据库,只需使用封装数据库中表达记录数据对象即可。其思想如图2.4所示:
封装
使用
DataSource
DataAccessObject
BusinessObject
创立/使用
获取/修改
DataTransferObject
图2.4 DAO模式类图
图中BussinessObject是业务对象,是使用DAO模式客户端;DataTransferObject数据传播对象,在应用程序不同层次之间传播对象,在一种分布式应用程序中,普通可以提高整顿性能;DataObjectAcces数据输入/输出对象封装了对数据源某些基本操作;DataSource指是数据源。可以从图中看出,DAO模式分离了业务逻辑和数据罗即将,是编写软件具备良好层次式体系构造。本系统为了以便数据库操作,重要使用DBContent对象来接一种数据库(建立一种类DBContent),代码如代码1。
2.3系统功能实现
在管理信息系统生命周期中,仅过了需求分析、系统设计等阶段之后,便开始了系统实行阶段。在系统分析和设计阶段,系统开发工作重要是集中在逻辑、功能和技术设计上,系统实行阶段要继承此前面各个阶段工作成果,将技术设计转化为物理实现,因而系统实行成果是系统分析和设计阶段结晶。
2.3.1系统登陆页
1.描述:为了保证系统安全性,要先使用本系统必要先登陆到系统中。
2.在登陆页面输入顾客名和密码以,选取登陆身份后,点击提交按钮,跳转到登陆service中,在该service中会对顾客名,密码,验证码进行判断,并依照相应顾客角色进入相应页面,代码如代码2。
2.3.2系统主页面
1.描述:管理员主页面:左方页面展示了管理员可操作七大功能,进入有关管理页面可以链接到子菜单,并且高亮显示,每个管理模块下面均有相应子菜单。
2.在每个jsp页面将会对有关顾客进行拦截操作,这样可以提高安全性,防止顾客不通过登陆页面而进入任何子菜单页面,如代码3:
2.3.3教职工信息管理
(1)教职工录入
1.描述:管理员输入教职工有关对的信息后点击录入按钮,如果是没有输入完整信息,都会给出相应错误提示,不能录入成功。输入数据都通过form表单中定义办法onsubmit="return checkForm()"来检查,checkForm()函数中是各种校验输入数据方式。
2.流程图如下图4所示:
(2)教职工管理
1.描述:管理员点击左侧菜单“教职工管理”,页面跳转到做教职工界面,调用后台servlet类查询所有教职工信息。
2.教职工管理核心代码如代码4:
2.3.4工资信息管理
(1)工资录入
1.描述:在此页面重要是输入工资数、奖金等信息,然后选取教职工,所有信息都不可觉得空,与否为空也是通过form表单中onsubmit="return checkForm()来检查。
(2)工资信息管理
1.描述:管理员点击左侧菜单“工资管理”,页面跳转到工资管理界面,调用后台gongziServlet类查询出所有工资信息,并把这些信息封转到数据集合List中,绑定到request对象,然后页面跳转到相应jsp,显示出来。
2.工资管理核心代码代码5:
(3)修改个人密码
1.描述:输入顾客名和顾客原有密码,输入新密码后来点击修改按钮即可修改密码成功。
(4)安全退出系统
1.描述:点此按钮回到系统主页面。
2.核心代码如代码6。
3 整体设计方案
4 流程图设计
登陆系统
管理员录入教职工信息
系统验证教职工信息
录入成功
结 束
通过
未通过
图4教职工录入流程图
5 程序设计
代码1:
public DBContent(){
String CLASSFORNAME="com.SqlServer.jdbc.Driver";//连接数据库驱动
String url="jdbc:SqlServer://localhost:3306/jzggl";
String user="root";//连接数据库顾客名
String password="root";//连接数据库密码
try{
Class.forName(CLASSFORNAME);
con= DriverManager.getConnection(url,user,password);//加载数据库驱动
stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
}
catch(Exception ex){
ex.printStackTrace();
}
}
代码2
public String login(String userName,String userPw,int userType)
{
try
{
Thread.sleep(700);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
String result="no";
if(userType==0)//系统管理员登陆
{
String sql="from TAdmin where userName=?and userPw=?";
Object[] con={userName,userPw};
List adminList=adminDAO.getHibernateTemplate().find(sql,con);
if(adminList.size()==0)
{
result="no";
}
else
{
WebContext ctx = WebContextFactory.get();
HttpSession session=ctx.getSession();
TAdmin admin=(TAdmin)adminList.get(0);
session.setAttribute("userType",0);
session.setAttribute("admin",admin);
result="yes";
}
}
if(userType==1)
{
}
if(userType==2)
{
}
return result;
}
代码3
if(session.getAttribute("user")==null)
{
out.print("<script>alert('请先登录!');window.open('../index.jsp','_self')</script>");
}
代码4
public void jihuayuanAdd(HttpServletRequest req,HttpServletResponse res)
public void jiaoshiDel(HttpServletRequest req,HttpServletResponse res)
{
int id = Integer.parseInt(req.getParameter("id"));
String del = "yes";
String sql = "update t_jiaoshi set del=?where id=?";
Object[] params={del,id};
DB mydb=new DB();
mydb.doPstm(sql,params);
mydb.closed();
req.setAttribute("message","教师信息删除成功!");
req.setAttribute("path","jiaoshi?type=jiaoshiMana");
String targetURL = "/common/success.jsp";
dispatch(targetURL,req,res);
}
public void jiaoshiUpd(HttpServletRequest req,HttpServletResponse res)
{
int id = Integer.parseInt(req.getParameter("id"));
String gonghao = req.getParameter("gonghao");
String xingming = req.getParameter("xingming");
String xingbie = req.getParameter("xingbie");
String nianling = req.getParameter("nianling");
String shengri = req.getParameter("shengri");
String gongzuo = req.getParameter("gongzuo");
String zhuanye = req.getParameter("zhuanye");
String zhaopian = req.getParameter("zhaopian");
String beizhu = req.getParameter("beizhu");
String sql = "update t_jiaoshi set gonghao=?,xingming=?,xingbie=?,nianling=?,shengri=?,gongzuo=?,zhuanye=?,zhaopian=?,beizhu=?where id=?";
Object[] params={gonghao,xingming,xingbie,nianling,shengri,gongzuo,zhuanye,zhaopian,beizhu,id};
DB mydb=new DB();
mydb.doPstm(sql,params);
mydb.closed();
req.setAttribute("message","教师信息修改成功!");
req.setAttribute("path","jiaoshi?type=jiaoshiMana");
String targetURL = "/common/success.jsp";
dispatch(targetURL,req,res);
}
public void jiaoshiAdd(HttpServletRequest req,HttpServletResponse res)
{
String gonghao = req.getParameter("gonghao");
String xingming = req.getParameter("xingming");
String xingbie = req.getParameter("xingbie");
String nianling = req.getParameter("nianling");
String shengri = req.getParameter("shengri");
String gongzuo = req.getParameter("gongzuo");
String zhuanye = req.getParameter("zhuanye");
String zhaopian = req.getParameter("zhaopian");
String beizhu = req.getParameter("beizhu");
String del = "no";
String sql = "insert into t_jiaoshi (gonghao,xingming,xingbie,nianling,shengri,gongzuo,zhuanye,zhaopian,beizhu,del)" +
" values (?,?,?,?,?,?,?,?,?,?)";
Object[] params={gonghao,xingming,xingbie,nianling,shengri,gongzuo,zhuanye,zhaopian,beizhu,del};
DB mydb=new DB();
mydb.doPstm(sql,params);
mydb.closed();
req.setAttribute("message","教师信息添加成功!");
req.setAttribute("path","jiaoshi?type=jiaoshiMana");
String targetURL = "/common/success.jsp";
dispatch(targetURL,req,res);
}
public void jiaoshiMana(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException
{
List jiaoshiList=new ArrayList();
String sql="select * from t_jiaoshi where del='no'";
Object[] params={};
DB mydb=new DB();
try
{
mydb.doPstm(sql,params);
ResultSet rs=mydb.getRs();
while(rs.next())
{
TJiaoshi jiaoshi=new TJiaoshi();
jiaoshi.setId(rs.getInt("id"));
jiaoshi.setGonghao(rs.getString("gonghao"));
jiaoshi.setXingming(rs.getString("xingming"));
jiaoshi.setXingbie(rs.getString("xingbie"));
jiaoshi.setNianling(rs.getString("nianling"));
jiaoshi.setShengri(rs.getString("shengri"));
jiaoshi.setGongzuo(rs.getString("gongzuo"));
jiaoshi.setZhuanye(rs.getString("zhuanye"));
jiaoshi.setZhaopian(rs.getString("zhaopian"));
jiaoshi.setBeizhu(rs.getString("beizhu"));
jiaoshiList.add(jiaoshi);
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb.closed();
req.setAttribute("jiaoshiList",jiaoshiList);
req.getRequestDispatcher("admin/jiaoshi/jiaoshiMana.jsp").forward(req,res);
}
代码5
public void gongziAdd(HttpServletRequest req,HttpServletResponse res)
{
int jsid = Integer.parseInt(req.getParameter("jsid"));
String riqi = req.getParameter("riqi");
String gongzi = req.getParameter("gongzi");
String jiangjin = req.getParameter("jiangjin");
String sql = "insert into t_gongzi (jsid,riqi,gongzi,jiangjin) values (?,?,?,?)";
Object[] params={jsid,riqi,gongzi,jiangjin};
DB mydb=new DB();
mydb.doPstm(sql,params);
mydb.closed();
req.setAttribute("message","教师工资添加成功");
req.setAttribute("path","gongzi?type=gongziMana");
String targetURL = "/common/success.jsp";
dispatch(targetURL,req,res);
}
public void jsList(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException
{
List jiaoshiList=new ArrayList();
String sql="select * from t_jiaoshi where del='no'";
Object[] params={};
DB mydb=new DB();
try
{
mydb.doPstm(sql,params);
ResultSet rs=mydb.getRs();
while(rs.next())
{
TJiaoshi jiaoshi=new TJiaoshi();
jiaoshi.setId(rs.getInt("id"));
jiaoshi.setGonghao(rs.getString("gonghao"));
jiaoshi.setXingming(rs.getString("xingming"));
jiaoshi.setXingbie(rs.getString("xingbie"));
jiaoshi.setNianling(rs.getString("nianling"));
jiaoshi.setShengri(rs.getString("shengri"));
jiaoshi.setGongzuo(rs.getString("gongzuo"));
jiaoshi.setZhuanye(rs.getString("zhuanye"));
jiaoshi.setZhaopian(rs.getString("zhaopian"));
jiaoshi.setBeizhu(rs.getString("beizhu"));
jiaoshiList.add(jiaoshi);
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb.closed();
req.setAttribute("jiaoshiList",jiaoshiList);
req.getRequestDispatcher("admin/gongzi/jsList.jsp").forward(req,res);
}
public void toAddGz(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException
{
TJiaoshi jiaoshi=new TJiaoshi();
int jsid = Integer.parseInt(req.getParameter("jsid"));
String sql="select * from t_jiaoshi where id = ?";
Object[] params={jsid};
DB mydb=new DB();
try
{
mydb.doPstm(sql,params);
ResultSet rs=mydb.getRs();
while(rs.next())
{
jiaoshi.setId(rs.getInt("id"));
jiaoshi.setGonghao(rs.getString("gonghao"));
jiaoshi.setXingming(rs.getString("xingming"));
jiaoshi.setXingbie(rs.getString("xingbie"));
jiaoshi.setNianling(rs.getString("nianling"));
jiaoshi.setShengri(rs.getString("shengri"));
jiaoshi.setGongzuo(rs.getString("gongzuo"));
jiaoshi.setZhuanye(rs.getString("zhuanye"));
jiaoshi.setZhaopian(rs.getString("zhaopian"));
jiaoshi.setBeizhu(rs.getString("beizhu"));
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb.closed();
GregorianCalendar gc = new GregorianCalendar();
String strDate = DateUtils.formatDate2Str(gc.getTime(),"yyyy-MM");
req.setAttribute("strDate",strDate);
req.setAttribute("jiaoshi",jiaoshi);
req.getRequestDispatcher("admin/gongzi/gzAdd.jsp").forward(req,res);
}
public void gongziMana(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException
{
List gongziList = new ArrayList();
String riqi = req.getParameter("riqi")==null?"":req.getParameter("riqi");
String sql = "select tb.xingming,ta.* from t_gongzi ta,t_jiaoshi tb where ta.jsid=tb.id";
if(!("".equals(riqi))){
sql += " and ta.riqi = '"+riqi+"'";
}
Object[] params={};
DB mydb=new DB();
try
{
mydb.doPstm(sql,params);
ResultSet rs=mydb.getRs();
while(rs.next())
{
TGongzi gongzi=new TGongzi();
gongzi.setId(rs.getInt("id"));
gongzi.setJsxm(rs.getString("xingming"));
gongzi.setRiqi(rs.getString("riqi"));
gongzi.setGongzi(rs.getString("gongzi"));
gongzi.setJiangjin(rs.getString("jiangjin"));
gongziList.add(gongzi);
}
rs.close();
}
catch(Exception e)
{
e.printStackTrace();
}
mydb.closed();
req.setAttribute("riqi",riqi);
req.setAttribute("gongziList",gongziList);
req.getRequestDispatcher("admin/gongzi/gongziMana.jsp").forward(req,res);
}
代码6
重要是通过javascript语句来实现,item_word[8][4]="退出系统";
item_link[8][4]="javascript:window.open('../index.jsp','_self')";
代码7
6 系统测试
6.1系统测试目与意义
系统测试是管理信息系统开发周期中一种十分重要而漫长阶段。其重要性体当前她是保证系统质量与可靠性最后关口,是对整个系统开发过程涉及系统分析、系统设计和系统实现最后审查。
系统测试任务是尽量彻底检查出程序中错误,提高软件系统可靠性,其目是检查系统“做得如何”。这这阶段又可以分为三个环节:模块测试,测试每个模块程序与否对的;组装测试,测试模块之间接口与否对的;确认测试,测试整个软件系统与否满足顾客功能和性能规定。测试发现问题之后要通过调试找出错误因素和位置,然后进行改正。是基于系统整体需求阐明书黑盒测试,应覆盖系统随偶联合部件,系统测试是正对整个产品系统进行测试,目是验证系统与否满足了需求规格定义,找出需求规格不符合或与之矛盾地方。
6.2主页面登录模块测试
测试流程: 1.打开系统首页,输入错误登录信息
2.登录
3.输入对的登录信息
4.登录
5.测试成果
模块名称
测试用例
预期成果
实际成果
与否通过
登录模块
顾客名:null 密码:null
弹出错误提示,请输入顾客名
登陆失败,提示请输入顾客名
通过
登录模块
顾客名:m1
密码:null
弹出错误提示,请输入密码
失败,提示输入密码
通过
登录模块
顾客名:m1
密码:1
弹出错误提示,顾客名或者密码错误
登陆失败,提示顾客名或者密码错误
通过
7 设计总结
本次课程设计将我大学所学软件工程理论知识用到了详细实践中去,深化了理论知识,同步也锻炼了动手实践能力。在这段日子里,我查阅了许多关于教师档案管理信息系统资料,翻阅了许多JSP书籍,结合自己经验,详细调查了教职工管理工作内容与细节,开发设计了这个教师档案管理系统,虽然公司每个学期都会有相应课程课程设计和实训来作为动手练习训练,但是在本次毕业设计详细实践时候还是遇到了诸多小问题,例如说在jsp页面将输入框设为不可用是添加属性readonly=“true”,而我在实际编程中却错写成disable=“true”,这样直接导致了request对象取不到数据,调试了程序好久才发现request对象获得返回值始终是空,之前始终觉得是代码哪里出了问题,总是在查源程序逻辑。这些虽然都是小问题,但是由于不细心在详细实践中却挥霍了不少时间,看来平时还是要多多实践才是。
在系统开发过程中,我运用到了B/S三层构造技术和自己在平时学习中掌握某些技术,通过这些技术实现,整个系统性能得到了大大提高。这些技术都在论文中做了比较详细简介。本系统还存在许多缺陷和局限性之处,例如诸多细节上做还不行,有些功能模块还应再加强。但愿在后来时间里,我可以把这些缺陷都弥补过来,进一步完善系统。
通过本次毕业设计
展开阅读全文