javaweb简单的图方案管理系统.docx
《javaweb简单的图方案管理系统.docx》由会员分享,可在线阅读,更多相关《javaweb简单的图方案管理系统.docx(15页珍藏版)》请在冰豆网上搜索。
javaweb简单的图方案管理系统
实验报告
实验课程:
Web应用开发
学生姓名:
学号:
专业班级:
2018年6月18日
南昌大学实验报告
学生姓名:
学号:
专业班级:
实验类型:
□验证■综合□设计□创新实验日期:
实验成绩:
一、实验项目名称
《Web应用开发》综合训练
二、实验目的和要求
使用Java+JSP+Servlet技术,选用EL、JSTL、Struts、Hibernate、myBatis、jQuery等技术,开发一个基本Web的应用程序,以达到掌握Web应用开发的基本原理、具备使用Java+JSP+Servlet技术结合流行框架技术开发Web应用程序的能力,从而提升学生的Web编程能力。
要求学生自选题目,开发一个模拟的Web应用程序。
可以一人一题,也可以多人一题。
但是每人必须单独完成动态Web页面10页以上。
要求学生根据需求描述独自完成需求分析,软件设计、程序模块设计以及程序的编写、调试和测试。
设计和程序完成后,要求根据指定的格式要求,独自完成设计报告的撰写。
三、实验基本情况
本实训要求根据下述需求陈述写出需求分析文本并进行软件开发,并列出源代码和运行结果。
四、需求分析
项目介绍
这是一个简单的图书管理系统,由一个管理员来实现对用户的删除,图书的增加,修改和图书的删除功能,用户注册登录后可以实现对图书的借阅和归还。
由于时间关系在设计项目时有很多不好的地方,未来得及修改,在管理员登录界面采用了图形验证码,由于是同样的技术,在用户登录界面就没有采用图形验证技术。
功能需求
1.用户注册
2.图书添加
3.图书修改
4.用户管理
5.图书借阅
6.归还图书
五、软件设计
ER图
程序流程
数据库设计
模块设计及运行结果
项目整体采用MVC模式,整体上运用jsp+javabean+servlet+jdbc+dao,每个jsp页面采用jQuery技术作为背景,实现简单的动态背景,部分页面运用EL、JSTL、js中的点击事件、Bootsrap、图形验证码、分页技术以及邮箱页面。
六、源代码
1.用户类User.Java
packagevo;
publicclassUser{
privateStringname,pwd;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetPwd(){
returnpwd;
}
publicvoidsetPwd(Stringpwd){
this.pwd=pwd;
}
}
2.图书类bookinfo.java
packagevo;
publicclassbookinfo
{
privateStringbno,bname,author,price,other;
publicStringgetBno(){
returnbno;
}
publicvoidsetBno(Stringbno){
this.bno=bno;
}
publicStringgetBname(){
returnbname;
}
publicvoidsetBname(Stringbname){
this.bname=bname;
}
publicStringgetAuthor(){
returnauthor;
}
publicvoidsetAuthor(Stringauthor){
this.author=author;
}
publicStringgetPrice(){
returnprice;
}
publicvoidsetPrice(Stringprice){
this.price=price;
}
publicStringgetOther(){
returnother;
}
publicvoidsetOther(Stringother){
this.other=other;
}
}
3.借书信息类lendbook.info
packagevo;
publicclasslendbook
{
privateStringusername,bno,bname,author,price,other;
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetBno(){
returnbno;
}
publicvoidsetBno(Stringbno){
this.bno=bno;
}
publicStringgetBname(){
returnbname;
}
publicvoidsetBname(Stringbname){
this.bname=bname;
}
publicStringgetAuthor(){
returnauthor;
}
publicvoidsetAuthor(Stringauthor){
this.author=author;
}
publicStringgetPrice(){
returnprice;
}
publicvoidsetPrice(Stringprice){
this.price=price;
}
publicStringgetOther(){
returnother;
}
publicvoidsetOther(Stringother){
this.other=other;
}
}
4.用户功能UserDao.java
packagedao;
importjava.sql.*;
importvo.bookinfo;
importvo.User;
importvo.lendbook;
importdbc.JdbcUtil;
publicclassUserDao
{
publicvoidadd(Useruser)throwsException{//添加用户
Connectionconn=null;
PreparedStatementps=null;
try
{
conn=JdbcUtil.getConnection();
Stringsql="insertintouservalues(?
?
)";
ps=conn.prepareStatement(sql);
ps.setString(1,user.getName());
ps.setString(2,user.getPwd());
ps.executeUpdate();
}
finally
{
JdbcUtil.free(null,ps,conn);
}
}
publicvoidadd_book(bookinfobook)throwsException{//添加图书
Connectionconn=null;
PreparedStatementps=null;
try
{
conn=JdbcUtil.getConnection();
Stringsql="insertintobook_infovalues(?
?
?
?
?
)";
ps=conn.prepareStatement(sql);
ps.setString(1,book.getBno());
ps.setString(2,book.getBname());
ps.setString(3,book.getAuthor());
ps.setString(4,book.getPrice());
ps.setString(5,book.getOther());
ps.executeUpdate();
}
finally
{
JdbcUtil.free(null,ps,conn);
}
}
publicvoidlend_book(lendbookbook)throwsException{//借出图书
Connectionconn=null;
PreparedStatementps=null;
try
{
conn=JdbcUtil.getConnection();
Stringsql="insertintolendbookvalues(?
?
?
?
?
?
)";
ps=conn.prepareStatement(sql);
ps.setString(1,book.getUsername());
ps.setInt(2,Integer.parseInt(book.getBno()));
ps.setString(3,book.getBname());
ps.setString(4,book.getAuthor());
ps.setString(5,book.getPrice());
ps.setString(6,book.getOther());
ps.executeUpdate();
}
finally
{
JdbcUtil.free(null,ps,conn);
}
}
publicListQueryAll()throwsException//列出全部用户
{
Connectionconn=null;
PreparedStatementps=null;
ResultSetrs=null;
ListuserList=newArrayList();
try
{
conn=JdbcUtil.getConnection();
Stringsql="select*fromuser";
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
Useruser=newUser();
user.setName(rs.getString
(1));
user.setPwd(rs.getString
(2));
userList.add(user);
}
}
finally
{
JdbcUtil.free(rs,ps,conn);
}
returnuserList;
}
publicvoiddelete(Stringbookno)throwsException//删除图书
{
Connectionconn=null;
PreparedStatementps=null;
try{
conn=JdbcUtil.getConnection();
Stringsql="deletefrombook_infowherebno=?
";
ps=conn.prepareStatement(sql);
ps.setString(1,bookno);
ps.executeUpdate();
}
finally{
JdbcUtil.free(null,ps,conn);
}
}
publicvoidreturnbook(Stringbno,Stringusername)throwsException//归还图书
{
Connectionconn=null;
PreparedStatementps=null;
try{
conn=JdbcUtil.getConnection();
Stringsql="deletefromlendbookwherebno=?
andusername=?
";
ps=conn.prepareStatement(sql);
ps.setString(1,bno);
ps.setString(2,username);
ps.executeUpdate();
}
finally{
JdbcUtil.free(null,ps,conn);
}
}
publicvoiddelete_user(Stringusername)throwsException//删除用户
{
Connectionconn=null;
PreparedStatementps=null;
try{
conn=JdbcUtil.getConnection();
Stringsql="deletefromuserwherename=?
";
ps=conn.prepareStatement(sql);
ps.setString(1,username);
ps.executeUpdate();
}
finally{
JdbcUtil.free(null,ps,conn);
}
}
publicintgetPageCount()throwsException{//分页
Connectionconn=null;
PreparedStatementps=null;
ResultSetrs=null;
intrecordCount=0,t1=0,t2=0;
try
{
conn=JdbcUtil.getConnection();
Stringsql="selectcount(*)frombook_info";
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
rs.next();
recordCount=rs.getInt
(1);
t1=recordCount%5;
t2=recordCount/5;
}
finally
{
JdbcUtil.free(null,ps,conn);
}
returnt1==0?
t2:
t2+1;
}
publicListQueryAll_book(intpageNo)throwsException//列出全部图书
{
Connectionconn=null;
PreparedStatementps=null;
ResultSetrs=null;
intpageSize=5;
intstartRecno=(pageNo-1)*pageSize;
ListbookList=newArrayList();
try
{
conn=JdbcUtil.getConnection();
Stringsql="select*frombook_infoorderbybnolimit?
?
";
ps=conn.prepareStatement(sql);
ps.setInt(1,startRecno);
ps.setInt(2,pageSize);
rs=ps.executeQuery();
while(rs.next()){
bookinfobook=newbookinfo();
book.setBno(rs.getString
(1));
book.setBname(rs.getString
(2));
book.setAuthor(rs.getString(3));
book.setPrice(rs.getString(4));
book.setOther(rs.getString(5));
bookList.add(book);
}
}
finally
{
JdbcUtil.free(rs,ps,conn);
}
returnbookList;
}
publicListQueryAll_lendbook(Stringusername)throwsException//列出已借图书
{
Connectionconn=null;
PreparedStatementps=null;
ResultSetrs=null;
ListbookList=newArrayList();
try
{
conn=JdbcUtil.getConnection();
Stringsql="select*fromlendbookwhereusername=?
";
ps=conn.prepareStatement(sql);
ps.setString(1,username);
rs=ps.executeQuery();
while(rs.next()){
lendbookbook=newlendbook();
book.setUsername(rs.getString
(1));
book.setBno(rs.getString
(2));
book.setBname(rs.getString(3));
book.setAuthor(rs.getString(4));
book.setPrice(rs.getString(5));
book.setOther(rs.getString(6));
bookList.add(book);
}
}
finally
{
JdbcUtil.free(rs,ps,conn);
}
returnbookList;
}
publicvoidmodify_book(bookinfobook)throwsException{//修改图书
Connectionconn=null;
PreparedStatementps=null;
try
{
conn=JdbcUtil.getConnection();
Stringsql="updatebook_infosetbname=?
author=?
price=?
other=?
wherebno=?
";
ps=conn.prepareStatement(sql);
ps.setString(1,book.getBname());
ps.setString(2,book.getAuthor());
ps.setString(3,book.getPrice());
ps.setString(4,book.getOther());
ps.setString(5,book.getBno());
ps.executeUpdate();
}
finally
{
JdbcUtil.free(null,ps,conn);
}
}
}
5.获取表格值代码:
functiongetTableContent(node){
var
varname=tr1.cells[0].innerText;
"<%=path%>/delete_user?
name="+name;
alert(name);
}
7.背景jQuery代码
由于代码过长,不展示;
七、运行结果
1.管理员登录页面:
管理员登录界面采用简单的CSS、jQuery、以及图形验证码,当图形验证码输入不正确以及账号密码输入不正确会出现相相应提示,同时点击相信的输入框,提示输入对应类型的背景字体会消失,当鼠标点击其他地方时会相应出现,采用的是placeholder属性,我们平时单纯的html的输入框以及提交的按钮,让人感觉不是很舒适,采用简单的CSS将他们的边框去除,然后加上相应的边框。
2.登录主界面:
导航栏感谢bootstrap开源,运用了始终悬浮在顶部的导航栏,奈何页面长度有限不能向下滚动,无法看出这一功能,页面内容由于思维过于局限,暂时没有想出用什么内容来填充,只想到类似于积分的东西,这一内容在以后会作出改进,目前只有一个大概的模板,同时在改变页面的分辨率时导航栏中的功能选项会变成一个按钮,用一个便签来装载,本页也有一个亮点便是响应式,在改变分辨率时板块并不会发生错乱的现象,运用栅格系统思想,在第二张图张可以看到效果,由于调各种分辨率国语繁琐,所以这一技术只在两个页面运用到,以后有时间会加以改善。
3.管理用户页面:
点击管理用户的小便签会出现用户的列表,点击删除用户可以将用户从数据库中删除,同时页面中的几个小符号也是运用bootstrap中的组件,给人以更直观清楚的描述功能,在本页面我并没有采用分页技术,但是在后面几个页面中有采用分页技术,在做页面的时候并没有考虑到有很多的用户,只是用几个来验证,所以就没有用分页技术,在这个点击就删除的技术上一开始遇到了难题,并不知道怎么样去些控制的后台,后来在页面中运用了js的技术,可以利用表格的结点来获取每个表格单元格的内容,再将按键设置为this,点击便是获取当前行的值,并传到servlet中调用dao中删除用户的函数,便实现了。
同时利用js的鼠标事件,鼠标移动到当前行时会改变颜色。
4.添加图书页面:
添加图书的页面并没有多么的新奇,同样还