南昌大学javaweb大作业报告书.docx

上传人:b****6 文档编号:8261929 上传时间:2023-01-30 格式:DOCX 页数:28 大小:721.50KB
下载 相关 举报
南昌大学javaweb大作业报告书.docx_第1页
第1页 / 共28页
南昌大学javaweb大作业报告书.docx_第2页
第2页 / 共28页
南昌大学javaweb大作业报告书.docx_第3页
第3页 / 共28页
南昌大学javaweb大作业报告书.docx_第4页
第4页 / 共28页
南昌大学javaweb大作业报告书.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

南昌大学javaweb大作业报告书.docx

《南昌大学javaweb大作业报告书.docx》由会员分享,可在线阅读,更多相关《南昌大学javaweb大作业报告书.docx(28页珍藏版)》请在冰豆网上搜索。

南昌大学javaweb大作业报告书.docx

南昌大学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!

=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1