南昌大学javaweb大作业报告书.docx
- 文档编号:8261929
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:28
- 大小:721.50KB
南昌大学javaweb大作业报告书.docx
《南昌大学javaweb大作业报告书.docx》由会员分享,可在线阅读,更多相关《南昌大学javaweb大作业报告书.docx(28页珍藏版)》请在冰豆网上搜索。
南昌大学javaweb大作业报告书
软件学院大作业实验报告
题目:
基于Struts的图书管理系统
专业:
软件工程
班级:
122班(java方向)
学号:
**********
******
完成人数:
1人
起讫日期:
2015/05/20
任课教师:
周兴斌职称:
副教授
部分管主任:
刘晓强
完成时间:
2015/05/30
1.前言
1.1实验目的
学习Web应用程序的开发,以B/S方式,JSP编程技术开发图书管理系统;
通过编程实践掌握JSP的动态网页与sql2012数据库相结合的技术;
通过MVC(模型-视图-控制)架构模式,使其在开发过程中得以应用,并了解Web编程模式下的Model1和Model2的区别;了解Struts框架的具体含义及在Struts模式下的开发。
1.2实验的基本要求
数据库表不少于3个,且表之间必须存在关联。
页面设计布局合理,颜色使用恰当,风格统一,页面应不少于10个。
系统功能不少于6个,且能正确运行。
系统采用面向对象的方式设计,尽量使界面、业务、数据之间的耦合关系降低。
代码实现尽量使用事件处理、事务处理。
系统应对一些常见的异常进行适当的处理。
数据的操作以事务的方式实现,要求处理并发问题。
2.系统分析与设计
2.1系统功能描述(简单需求分析)
图书管理系统是典型的信息管理系统(MIS),本系统是根据现代化校园的发展而设计的基于jsp的图书管理系统,本系统就是为了管理好图书信息和借阅等一系列操作而设计的。
图书管理系统需要满足来自两方面的需求,这三个方面分别是学生和管理员。
学生的需求是查询图书馆的藏书,借阅图书,和退换图书等功能;管理员的功能最为复杂,包括对学生、图书进行管理,及系统状态的查看、维护并。
学生要使用图书管理系统,需要进行登陆,登陆之后则可以进行一系列的操作,例如:
查询图书,借阅图书,归还图书等功能。
而作为管理员,则可以对学生进行添加,只有已添加有卡号的学生才可以进行图书管理系统的登陆,管理员还可以对图书进行增,删,改,查。
亦可以对用户进行增,删,改查等功能。
2.2系统功能流程
为了满足以上的需求,系统分成了两大模块,普通用户模块和管理员模块。
功能模块图如图所示。
相应Struts页面流程如下所示(电子版可自行放大):
2.3数据库设计
2.3.1数据表的构建
本系统采用如下的数据表:
用户信息表users:
用于记录用户信息数据表
字段名
类型
长度
是否为主键
可否为空
说明
ID
nchar
10
是
否
用户ID
username
nchar
10
否
否
用户姓名
password
nchar
10
否
否
用户密码
cardnum
int
10
否
否
卡号信息
userlevel
int
10
否
否
用户级别
coater
int
10
否
否
借阅限额
borrowed
int
10
否
否
已借阅数
can_borrow
int
10
否
否
可借阅数
图书信息表books:
(用于存储图书相关信息)
字段名
类型
长度
是否为主键
可否为空
说明
b_ID
int
10
是
否
图书ID
b_name
nvarchar
50
否
否
图书名称
b_author
nchar
10
否
否
图书作者
b_publish
nvarchar
50
否
否
图书出版社
b_type
nchar
10
否
否
图书类型
b_count
int
10
否
否
拥有数量
b_hot
int
10
否
否
欢迎度
借阅表borrowbook:
(用于表示借阅信息)
字段名
类型
长度
是否为主键
可否为空
说明
brid
int
10
是
否
借阅表id
cardnum
int
10
是
否
用户表外键
b_ID
int
10
是
否
图书表外键
borrowday
nchar
10
否
否
借阅日期
shouldreturn
nchar
10
否
否
应还日期
罚金表fine:
(用于设置罚金)
字段名
类型
长度
是否为主键
可否为空
说明
fine
float
10
是
否
罚金
3.系统的实现与测试
3.1系统采用的关键技术
本系统采用的是Model2模型,Model2表示的是基于MVC模式的框架。
MVC是Model-View-Controller的简写。
"Model"代表的是应用的业务逻辑(通过JavaBean,),"View"是应用的表示面(由JSP页面产生),"Controller"是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。
这些组件可以进行交互和重用。
从而弥补了Model1的不足。
Model2具有组件化的优点从而更易于实现对大规模系统的开发和管理,但是开发MVC系统比简单的JSP开发要复杂许多,它需要更多的时间学习和掌握。
同时新东西的引入会带来新的问题(这让我想起来关于"自动计算"的一篇文章,中间提到为了降低系统的复杂度,却导致更高的复杂度)。
必须基于MVC组件的方式重新思考和设计应用结构。
原来通过建立一个简单的JSP页面就能实现的应用现在变成了多个步骤的设计和实现过程。
所有的页面和组件必须在MVC框架中实现,所以必须进行附加地开发工作。
MVC本身就是一个非常复杂的系统,所以采用MVC实现Web应用时,最好选一个现成的MVC框架,在此之下进行开发,从而取得事半功倍的效果。
现在有很多可供使用的MVC框架,由于Struts有完整的文档并且相对来讲比较简单,所以用它开发MVC系统还是比较方便地。
3.2关键程序流程
本实验的总体流程如下:
本系统应用3层架构模型,现分别对其进行阐述:
第一层架构为数据库层,也是程序的最底层(主要由DataBase.java实现),它的功能实现sql2012数据库的连接,函数里封装了几个操作。
publicbooleanquery(Strings)(用于查询数据表操作);
publicResultSetgetlist(Strings)(用于获取数据的可以滚动结果集);
publicintupdate(Strings)(用于简单的数据更新操作)
publicbooleanexecutebatch(Stringa[])(批处理,用于处理多条sql);
第二层为JavaBean层和DAO层,主要实现对数据表的信息及对其进行操作的信息进行封装(主要由文件Books.java、Fine.java、borrowbook.java、Users.java、BookService.java、borrowbookSevice.java、FineService.java和UserService.java来实现的)。
在相应的JavaBean层封装了所有数据表的信息,在上述的实体类中(Books.java、Fine.java、borrowbook.java、Users.java)仅包含对属性的set和get方法,在相应的DAO层主要包含对数据表的相关操作,如获得该数据表的全部信息或部分信息,增加、删除、修改、查询相应的数据表;
第三层为业务逻辑层,主要由Struts和其的action来实现,实现页面的控制和跳转到相应的jsp页面,其中action主要包括BooksAction.java、LoginAction.java、ResetfineAction.java、UserAction.java。
相应的程序架构如图所示:
3.3关键代码分析
Ø数据库的连接和相关一些操作函数(在文件DataBase.java中实现的):
packagecom.wk.util;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
publicclassDataBase{
privateConnectionconn=null;
privateStatementstmt;
ResultSetrs=null;
//数据库的url
privateStringurl="jdbc:
sqlserver:
//localhost:
1433;DatabaseName=Book";
//数据库的用户名密码
Stringuser="sa";
Stringpass="123";
//用于验证查询操作
publicbooleanquery(Strings)throwsSQLException{
try{
//加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}catch(ClassNotFoundExceptione){
System.out.println("加载驱动器类时异常");
}
try{
//创建链接
conn=DriverManager.getConnection(url,user,pass);
stmt=conn.createStatement();
rs=stmt.executeQuery(s);
}catch(SQLExceptione){
System.out.println("query连接数据库的过程中出现SQL异常
");
}
return(rs.next());
}
//用于结果集可滚动的操作
publicResultSetgetlist(Strings)throwsSQLException{
try{
//加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}catch(ClassNotFoundExceptione){
System.out.println("加载驱动器类时异常");
}
try{
//建立连接
conn=DriverManager.getConnection(url,user,pass);
//得到statement对象
stmt=conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
//得到一个可滚动但不可以更新的结果集rs
rs=stmt.executeQuery(s);
}catch(SQLExceptione){
System.out.println("更新操作连接数据库的过程中出现SQL异常
");
}
returnrs;
}
//用于对数据库的更新
publicintupdate(Strings)throwsSQLException{
intmsg=0;
try{
//加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}catch(ClassNotFoundExceptione){
System.out.println("加载驱动器类时异常");
}
try{
//创建链接
conn=DriverManager.getConnection(url,user,pass);
stmt=conn.createStatement();
msg=stmt.executeUpdate(s);
}catch(SQLExceptione){
System.out.println("连接数据库的过程中出现SQL异常
");
}
return(msg);
}
//批处理,用于处理多条sql
publicbooleanexecutebatch(Stringa[]){
try{
//创建链接
conn=DriverManager.getConnection(url,user,pass);
conn.setAutoCommit(false);//关闭自动提交,进行事物处理
stmt=conn.createStatement();
for(inti=0;i stmt.addBatch(a[i]); } int[]number=stmt.executeBatch();//开始批处理,返回被执行的sql语句的序号 mit(); System.out.println("共有"+number.length+"条sql语句被执行"); stmt.clearBatch();//清空batch conn.close(); returntrue; }catch(SQLExceptione){ //TODOAuto-generatedcatchblock try{ conn.rollback(); returnfalse; }catch(SQLExceptione1){ //TODOAuto-generatedcatchblock e1.printStackTrace(); } e.printStackTrace(); } returnfalse; } //关闭数据流 publicvoidclose()throwsSQLException{ conn.close(); stmt.close(); rs.close(); } } Ø管理员操作用户(在文件UserService.java中实现的) //管理员对用户的添加操作 publicbooleanadduser(Stringa[])throwsSQLException{ //将密码明文转换为密文存入数据库 a[2]=ead.encrypt(a[2]); //利用字符串的拼接组成sql语句 sql="insertintousersvalues('"+a[0]+"','"+a[1]+"','"+a[2]+"',"+a[3]+","+a[4]+","+a[5]+","+a[6]+")"; System.out.println("添加的sql"+sql); //调用数据库的更新数据的操作函数 intresult=db.update(sql); if(result! =0) returntrue; returnfalse; } //管理员对用户的删除操作 publicbooleandeluser(Stringid)throwsSQLException{ sql="deletefromuserswhereID='"+id+"'"; System.out.println("delsql="+sql); intresult=db.update(sql); if(result! =0) returntrue; returnfalse; } //管理员对用户的更新操作 publicbooleanupdateusers(Stringa[])throwsSQLException{ sql="updateuserssetusername='"+a[1]+"',userlevel="+a[2]+"whereID='"+a[0]+"'"; System.out.println("更新sql="+sql); intresult=db.update(sql); if(result! =0) returntrue; returnfalse; } 这里管理员对图书的操作和对用户的操作很类似,这里就不再赘述了。 Ø用户对图书的查询,借阅和续借和归还(主要在BooksService.java和borrowbookService.java实现的) BooksService.java部分代码: //模糊查询,获取用户的关键词,以此为查询条件进行搜索,默认按人气高至低排列 publicArrayListgetbook(Stringa[])throwsSQLException{ ArrayListal=newArrayList(); for(inti=0;i System.out.println(a[i]); } if(a[0].equals("")){ sql="select*frombookswhere"+a[2]+"LIKE'%"+a[1]+"%'orderbyb_hotdesc"; }else{ sql="select*frombookswhere"+a[2]+"LIKE'%"+a[0]+"%'orderbyb_hotdesc"; } System.out.println("sql: "+sql); //调用DataBase.java的函数,获取相应的图书列表 rs=db.getlist(sql); while(rs.next()){ Booksbk=newBooks(); bk.setB_ID(rs.getInt (1)); bk.setB_name(rs.getString (2)); bk.setB_author(rs.getString(3)); bk.setB_publish(rs.getString(4)); bk.setB_type(rs.getString(5)); bk.setB_count(rs.getInt(6)); bk.setB_hot(rs.getInt(7)); al.add(bk);//将al放到arrayList中 } returnal;} borrowbookService.java部分代码: //归还图书, publicbooleanreturnbook(Stringbrid,Stringcardnum,Stringb_ID)throwsSQLException{ Stringsql1="updateuserssetborrowed=borrowed-1,can_borrow=can_borrow+1wherecardnum="+cardnum; Stringsql2="updatebookssetb_count=b_count+1whereb_ID="+b_ID; Stringsql3="deletefromborrowbookwherebrid="+brid; Stringa[]={sql1,sql2,sql3}; //处理多条语句时,使用事务处理和使用批处理进行处理。 if(db.executebatch(a)) returntrue; returnfalse; } //续借图书 publicbooleanrenewbook(Stringbrid)throwsSQLException{ //将当前时间获得,拼接之sql,进行数据库表的更新操作 sql="updateborrowbooksetborrowday='"+newDay().getnowdate()+"',shouldreturn='"+newDay().getdate()+"'wherebrid="+brid; System.out.println("sql="+sql); intr=db.update(sql); if(r! =0){ returntrue; } returnfalse; } Ø管理员对罚金的设置(主要由FineService.java和Resetfine.java完成的) FineService.java代码: packagecom.wk.service; importjava.sql.ResultSet; importjava.sql.SQLException; importcom.wk.util.DataBase; publicclassFineService{ DataBasedb=newDataBase(); ResultSetrs=null; Stringsql=""; //管理员设定罚金金额 publicbooleansetfine(floatf){ //字符拼接将设置的金额拼接成sql sql="updatefinesetfine="+f; System.out.println(sql); try{ //调用database.java的更新函数进行数据库操作 intr=db.update(sql); if(r! =
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南昌大学 javaweb 作业 报告书
![提示](https://static.bdocx.com/images/bang_tan.gif)