洛阳理工学院
课程设计报告
课程名称Web 程序设计课程设计设计题目图书馆管理系统
专业计算机科学与技术
完成日期2014.6.27
课程设计任务书
设计题目:图书馆管理系统
设计内容与要求:
1、问题描述
了解网上图书馆管理相关流程,实现B/S 模式的图书馆管理系统。
2、基本要求
(1)数据库设计要符合范式要求。
(2)能对图书按照)等信息进行添加、删除、修改操作。
(3)提供必要查询功能,例如输入图书名称,能查找出该图书的相关信息,并展示图书信息。
(4)针对图书馆管理系统,锻炼学生的分析、设计能力,培养学生对软件
文档规范的书写能力;
(5)以图书馆管理业务为背景,通过调研、分析现有的管理模式和已有的管理软件,建立系统模型;完成图书馆管理系统的软件可行性分析、项目开发计划、
需求规格说明、概要设计和详细设计(结构化设计方法和面向对象设计方法可任选
一种);
( 6)做好答辩工作
指导教师:刁文广
2014年6月19日
课程设计评语
成绩:
指导教师:
年月日
.
目录
第 1 章需求分析 (1)
1.1编写目的 (1)
1.2可行性分析 (1)
1.2.1背景分析 (1)
1.2.2经济可行性 (1)
1.1.3技术可行性 (1)
1.3功能需求分析 (1)
1.3.1待开发系统概述 (1)
1.3.2产品功能 (2)
1.4系统性能分析 (2)
第 2 章数据库设计 (3)
2.1数据库概念级设计(E-R 图) (3)
2.1.1实体图 (3)
2.1.2系统 E-R 图 (4)
2.2数据库逻辑级设计 (4)
第 3 章概要设计 (6)
3.1系统功能设计 (6)
3.2系统功能描述 (6)
第 4 章详细设计与实现 (8)
4.1详细设计概述 (8)
4.2系统详细设计 (8)
4.2.1登陆页面 (8)
4.2.2图书添加 (10)
4.2.3借阅图书 (14)
4.2.4图书查询 (17)
4.2.5修改密码 (19)
第 5 章总结 (20)
.
第1章需求分析
1.1 编写目的
编写本报告的目的是明确本系统的详细需求,提供给使用单位确认系统的功能和性能,并在此基础上进行修改和完善,同时作为设计人员进行软件设计的依据和使用单位的验收标准。
1.2 可行性分析
1.2.1 背景分析
近年来,随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量
也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力
与物力过多浪费,图书馆管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运
作和控制管理,因此,必须制定一套合理、有效,规范和实用的图书管理系统,对图书资料
进行集中统一的管理。
另一方面, IT 产业和 Internet 获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。图书管理工作面对大量的可模块化处理的信息,是当今信息革命的一个重要阵地。我们开发图书管理信息系统就是采用现代化的信息管理方式代替手工管理方式,提高图书管理工作效率,作到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校,社会服务。
1.2.2 经济可行性
目标系统开发需求比较低,加上具有成熟的软硬件环境,所以在软硬件的支出上十分有限。而且,目标系统并不是十分的复杂,开发的周期较短,人员经济支出有限。当系统开发
完实际运行后,将很大程度上提高计算机的功能,在为使用者带来便利的同时,也为系统的
进一步推广创造了条件。这带来的经济回报将远超过支出,并且最重要的一点是该软件的开
发可以给我们对系统的开发有个全面的认识。从经济角度考虑,此信息系统开发可行。
1.1.3 技术可行性
此次信息系统开发是大学专业知识的一次综合应用与提高,我以自己的电脑完成系统开发。我的电脑能满足系统开发的要求。硬件完全可以胜任、从技术角度考虑,我将参考与查
阅相关信息来完成此系统、因此此信息系统开发可行。
1.3 功能需求分析
1.3.1 待开发系统概述
.
以提高图书信息的现代化管理水平,实现信息资源的共享。图书管理系统是一种基于集中统一
规划的数据库数据管理新模式。在对图书、读者的管理,其实是对图书、读者数据的管理。本
系统的建成无疑会为管理者对图书管理系统提供极大的帮助。使用该系统之后,图书馆管理人
员可以管理读者的登记、图书的购入、借出、归还以及注销等;还可以查询某位读者、某本图
书的借阅情况,对当前借阅情况给出一些统计,给出统计表格,以全面掌握图书的流通情况。
本系统的宗旨是提高图书管理工作的效率,减少相关人员的工作量,使学校的图书管理工作真
正做到科学、合理的规划,系统、高效的实施。
1.3.2 产品功能
(1)登录系统:注销用户、系统退出。
(2)管理:用户管理、图书管理、读者管理、借阅管理。
(3)查询:图书查询、读者查询、借阅查询。
(4)报表打印:所有图书、借出图书、库存图书、所有读者。
(5)帮助:使用说明、关于。
(6)图书管理员不定期地对图书信息进行添加、修改和删除等操作,在图书尚未归还的情况
下不能对图书信息进行删除。也可以对读者信息进行添加、修改、删除等操作,在读者还
有未归还的图书的情况下不能进行删除读者信息。系统管理员主要进行图书管理员权限的
设置、读者类别信息的设置、图书类别的设置以及罚款和赔偿标准的设置、数据备份和数据
恢复等处理。
1.4 系统性能分析
为了保证系统能够长期、安全、稳定、可靠、高效的运行,图书管理系统应该满足以下
的性能需求:
1.系统处理的准确性和及时性
系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑
系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足学校对信息处理
的需求。
2.系统的开放性和系统的可扩充性
图书管理系统在开发过程中,应该充分考虑以后的可扩充性。例如用户查询的需求也会
不断的更新和完善。
3.系统的易用性和易维护性
图书管理系统是直接面对使用人员的,而使用人员往往对计算机并不时非常熟悉。这就
要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该
尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的
在线帮助,缩短用户对系统熟悉的过程。
4.系统的标准性
系统在设计开发使用过程中都要涉及到很多计算机硬件、软件。所有这些都要符合主流
国际、国家和行业标准。
.
第 2 章数据库设计
2.1 数据库概念级设计( E-R 图)
2.1.1 实体图
ID管理员
ID
密密码码
图 2-1管理员实体图
管理员实体的属性有:登陆ID、密码。
卡号密码
卡号
姓名
班班级级读者其其它它
已借书系系别别性别已借数量
数
图 2-2读者实体图
读者实体的属性有:卡号、密码、、班级、性别等。
书号书名类型
书架图书单价
出版社作者库存
图 2-3 图书实体图
图书实体的属性有:书号、书架、书名、单价、出版社等。
2.1.2 系统 E-R 图
管理员
1
N
管理管理
M N
图书M
借阅
N
读者图 2-4系统 E-R 图
2.2 数据库逻辑级设计
表 2-1读者信息表
序号字段名类型(宽度、
取值约束空否默认值主键 /外键注释精度)
1ReaderNu
varchar15否无是卡号m
2Psw varchar20否无是密码
3readerNam
varchar20否无是e
4Class Varchar50否无否班级5Xibie Varchar50否无否系别6Sex Varchar20否无否性别
7Borrownu
Int15否无否已借数量m
8Other varchar50否无否其它
表 2-2图书信息表
序号字段名类型(宽度、
取值约束空否默认值主键 /外键注释精度)
1bookid varchar15否无是条形码
3bookname varchar20否无否书名4bookwriter Varchar50否无否作者5price float5否无否单价6bookclass Varchar20否无否类型7Shujia Varchar20否无否书架8Kucun Int15否无否库存
表 2-3管理员信息表
序号字段名类型(宽度、
取值约束空否默认值主键 /外键注释精度)
1adminid varchar15否无是ID 2adminpwd varchar20否无是密码
表 2-4借阅信息表
序号字段名类型(宽度、
取值约束空否默认值主键 /外键注释精度)
1ReaderNu
varchar15否无是卡号m
2bookid varchar20否无是条形码
3Borrowdat
varchar20否无否借出日期e
4Senedate varchar20否无否应还日期
.
第3章概要设计
3.1 系统功能设计
图书管理系统
系统设置读者管理图书管理
管读读图图
退系修者者书书图图理
出统改档类档类书书员
系查密案型案型借归设
统询码管管管管阅还置
理理理理
图 3-1系统功能图
3.2 系统功能描述
1.登录模块
输入用户名和密码,如果用户名和密码正确,进入主控制平台;否则提示用户明确的错
误信息。
2.系统管理模块
(1) 用户管理子模块:用于系统管理员进行用户权限设置和用户的浏览,包括用户密码的
用户权限的更改,同时为保障系统安全需要进行输入检验,并进行必要的信息提示。一般用
户不能使用该项功能。
(2)重新登录子模块:其作用是提供用户在不退出系统的情况下可以用另外的账户登录系
统。
(3)退出系统子模块;退出系统。
.
3.读者管理子模块
(1)查询读者子模块:用于查询特定读者的账号及其他信息。
(2)管理读者子模块:用于管理由于各种原因引起的读者加入与减少,提供读者的添加删除及浏览功能。
4.图书管理子模块
包括以下几个功能模块:
(1)查询图书子模块:用于查询图书借阅情况,帮助读者了解是否剩余有自己需要的图书。
(2)图书管理子模块:用于在新书上架及图书因为各种原因丢失情况下图书的添加删除,
将图书信息录入数据库。
(3)图书档案管理子模块:对图书进行添加,删除,修改
(4)图书类型管理:添加,删除图书的种类。以便读者更快的查询到所需的书籍。
5.借书还书模块:
(1)借书子模块:用于显示并更新借书记录。
(2)还书子模块:用于显示并更新还书记录。
(3)借书总表子模块:用于显示图书借阅信息。
6.报表管理模块:
包括读者报表,图书报表和借书报表,管理员表。
.
第 4 章详细设计与实现
4.1 详细设计概述
依据软件工程的基本原理,详细设计阶段的根本任务是确定应该怎样具体实现所要求的
系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在系统
实现阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。具体来说就是把经过
总体设计得到的各个模块详细的加以描述。
AdminManage类:包含添加、删除、修改管理员的方法。
BookcaseManage 类:书架信息的添加、删除、修改。
BookManage 类:图书信息的添加、删除、修改。
DataBase 类:数据库的创建链接。
BrrowandBackManage类:图书的借还操作方法的类。
ReaderManage 类:主要包含读者的添加,删除,修改信息的操作的方法。
Images 文件夹:程序中用到的图片放在此文件夹中。
4.2 系统详细设计
4.2.1 登陆页面
登陆页面采用简单的DIV 分层和 CSS布局,以及表格table 以及背景图的结合设计出一个简洁的登陆界面,其中验证码是包含一个随机数生成的Random 类的方法生成的。
图 4-1登陆页面设计
后台代码如下:
public partial class Login : System.Web.UI.Page
OperatorClass operatorclass = new OperatorClass();
AdminManage adminmanage = new AdminManage ();
ReaderManage readermanage =new ReaderManage ();
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnLogin_Click( object sender, EventArgs e)
{
if (txtAdmin.Text ==string .Empty)
{
Response.Write("" );
return ;
}
else
{
DataSet adminds = null;
DataSet readerds = null;
https://www.doczj.com/doc/e96126802.html, = txtAdmin.Text;
adminmanage.Pwd = txtPwd.Text;
adminds = adminmanage.Login(adminmanage);
readermanage.ID=txtPwd.Text;
https://www.doczj.com/doc/e96126802.html,=txtAdmin.Text;
readerds=readermanage.ReaderLogin(readermanage);
if (adminds.Tables[0].Rows.Count > 0 && txtCode.Text ==
Request.Cookies["CheckCode" ].Value)
{
Session["Name" ] = txtAdmin.Text;
Response.Redirect("Default.aspx" );
}
else if (readerds.Tables[0].Rows.Count > 0 && txtCode.Text ==
Request.Cookies["CheckCode" ].Value)
{
Session["Name" ] = txtAdmin.Text;
Session["readid" ] = txtPwd.Text;
Session["role" ] = "Reader";
Response.Redirect("Default.aspx" );
}
else
{
Response.Write("" );
}
}
protected void btnCancel_Click(object sender, EventArgs e)
{
txtAdmin.Text = txtPwd.Text = txtCode.Text =string .Empty;
}
}
4.2.2 图书添加
图书添加页面有多个 Label,TextBox 控件,以及一定数量 DropdownList 控件调用 BookManage 类中的方法进行图书的添加。
图 4-2添加图书页面
后台代码如下:
public partial class BookManage_AddBook : System.Web.UI.Page {
ValidateClass validate= new ValidateClass();
BookcaseManage bookcasemanage = new BookcaseManage ();
BTypeManage btypemanage =new BTypeManage ();
BookManage bookmanage = new BookManage ();
protected void Page_Load(object sender, EventArgs e)
{
this.Title = "添加修改图书 | 信息页面 ";
if (!IsPostBack)
{
DataSet bcaseds = bookcasemanage.GetAllBCase( "tb_bookcase" );
ddlBCase.DataSource = bcaseds;
ddlBCase.DataTextField = "name" ;
ddlBCase.DataBind();
DataSet btypeds = btypemanage.GetAllBType( "tb_booktype" );
ddlBType.DataSource = btypeds;
ddlBType.DataTextField = "typename" ;
ddlBType.DataBind();
if (Request["bookcode" ] == null )
{
btnAdd.Enabled =true ;
txtInTime.Text = DateTime .Now.ToShortDateString();
}
else
{
btnSave.Enabled = true ;
txtBCode.ReadOnly = txtBName.ReadOnly =true ;
txtBCode.Text = Request[ "bookcode" ].ToString();
bookmanage.BookCode = txtBCode.Text;
DataSet bookds = bookmanage.FindBookByCode(bookmanage, "tb_bookinfo" );
txtBName.Text = bookds.Tables[0].Rows[0][1].ToString(); ddlBType.SelectedValue
= bookds.Tables[0].Rows[0][2].ToString(); txtAuthor.Text =
bookds.Tables[0].Rows[0][3].ToString();
txtTranslator.Text = bookds.Tables[0].Rows[0][4].ToString();
txtPub.Text = bookds.Tables[0].Rows[0][5].ToString(); txtPrice.Text
= bookds.Tables[0].Rows[0][6].ToString(); txtPage.Text =
bookds.Tables[0].Rows[0][7].ToString(); ddlBCase.SelectedValue
= bookds.Tables[0].Rows[0][8].ToString(); txtStorage.Text =
bookds.Tables[0].Rows[0][9].ToString(); txtInTime.Text =
bookds.Tables[0].Rows[0][10].ToString(); txtOper.Text =
bookds.Tables[0].Rows[0][11].ToString();
}
}
}
protected void btnAdd_Click( object sender, EventArgs e)
{
ValidateFun();
bookmanage.BookCode = txtBCode.Text;
if (bookmanage.FindBookByCode(bookmanage, "tb_bookinfo" ).Tables[0].Rows.Count > 0)
bookmanage.BookName = txtBName.Text;
bookmanage.Type = ddlBType.SelectedValue;
bookmanage.Author = txtAuthor.Text;
bookmanage.Translator = txtTranslator.Text;
bookmanage.PubName = txtPub.Text;
bookmanage.Price =Convert .ToDecimal(txtPrice.Text);
bookmanage.Page =Convert .ToInt32(txtPage.Text);
bookmanage.Bcase = ddlBCase.SelectedValue;
bookmanage.Storage =Convert .ToInt32(txtStorage.Text) + Convert .ToInt32(bookmanage.FindBookByCode(bookmanage,
"tb_bookinfo" ).Tables[0].Rows[0][9].ToString());
bookmanage.InTime =Convert .ToDateTime(txtInTime.Text);
bookmanage.Oper = txtOper.Text;
bookmanage.UpdateBook(bookmanage);
}
else
{
bookmanage.BookName = txtBName.Text;
bookmanage.Type = ddlBType.SelectedValue;
bookmanage.Author = txtAuthor.Text;
bookmanage.Translator = txtTranslator.Text;
bookmanage.PubName = txtPub.Text;
bookmanage.Price =Convert .ToDecimal(txtPrice.Text);
bookmanage.Page =Convert .ToInt32(txtPage.Text);
bookmanage.Bcase = ddlBCase.SelectedValue;
bookmanage.Storage =Convert .ToInt32(txtStorage.Text);
bookmanage.InTime =Convert .ToDateTime(txtInTime.Text);
bookmanage.Oper = txtOper.Text;
bookmanage.AddBook(bookmanage);
}
Response.Redirect("BookManage.aspx" );
}
protected void btnSave_Click(object sender, EventArgs e)
{
ValidateFun();
bookmanage.BookCode = txtBCode.Text;
bookmanage.BookName = txtBName.Text;
bookmanage.Type = ddlBType.SelectedValue;
bookmanage.Author = txtAuthor.Text;
bookmanage.Translator = txtTranslator.Text;
bookmanage.PubName = txtPub.Text;
bookmanage.Price = Convert .ToDecimal(txtPrice.Text);
bookmanage.Page = Convert .ToInt32(txtPage.Text);
bookmanage.Storage =Convert .ToInt32(txtStorage.Text);
bookmanage.InTime =Convert .ToDateTime(txtInTime.Text);
bookmanage.Oper = txtOper.Text;
bookmanage.UpdateBook(bookmanage);
Response.Redirect("BookManage.aspx" );
}
protected void btnCancel_Click(object sender, EventArgs e)
{
txtInTime.Text = DateTime .Now.ToShortDateString();
txtBName.Text = txtAuthor.Text = txtTranslator.Text = txtPub.Text = txtPrice.Text = txtPage.Text = txtStorage.Text = txtOper.Text = string .Empty;
}
protected void ValidateFun()
{
if (txtBCode.Text == "" )
{
Response.Write("");
return ;
}
if (txtBName.Text == "")
{
Response.Write("");
return ;
}
if (!validate.validateNum(txtPrice.Text))
{
Response.Write("");
return ;
}
if (!validate.validateNum(txtPage.Text))
{
Response.Write("");
return ;
}
if (!validate.validateNum(txtStorage.Text))
{
Response.Write("");
return ;
}
}
4.2.3 借阅图书
图 4-3图书借阅页面
图书借阅代码如下:
public partial class BookBRManage_BorrowBook : System.Web.UI.Page
{
ReaderManage readermanage = new ReaderManage();
RTypeManage rtypemanage = new RTypeManage();
BookManage bookmanage = new BookManage();
BTypeManage btypemanage = new BTypeManage();
BorrowandBackManage borrowandbackmanage = new BorrowandBackManage();
protected void Page_Load(object sender, EventArgs e)
{
this.Title = " 图书借阅页面 ";
if (!IsPostBack)
{
if (Session["role"] == "Reader")
{
txtReaderID.Text = Session["readid"].ToString();
}
gvBInfoBind();
}
}
{
if (txtReaderID.Text == "")
{
Response.Write("");
}
else
{
readermanage.ID = txtReaderID.Text;
DataSet readerds = readermanage.FindReaderByCode(readermanage, "tb_reader");
if (readerds.Tables[0].Rows.Count > 0)
{
txtReader.Text = readerds.Tables[0].Rows[0][1].ToString();
txtSex.Text = readerds.Tables[0].Rows[0][2].ToString();
txtPaperType.Text = readerds.Tables[0].Rows[0][5].ToString();
txtPaperNum.Text = readerds.Tables[0].Rows[0][6].ToString();
txtRType.Text = readerds.Tables[0].Rows[0][3].ToString();
}
else
{
Response.Write("");
return;
}
https://www.doczj.com/doc/e96126802.html, = txtRType.Text;
DataSet rtypeds = rtypemanage.FindRTypeByName(rtypemanage, "tb_readertype");
txtBNum.Text = rtypeds.Tables[0].Rows[0][2].ToString();
gvBRBookBind();
Session["readerid"] = txtReaderID.Text;
}
}
protected void gvBookInfo_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvBookInfo.PageIndex = e.NewPageIndex;
gvBInfoBind();
}
protected void gvBorrowBook_PageIndexChanging(object sender, GridViewPageEventArgs e) {
gvBorrowBook.PageIndex = e.NewPageIndex;
gvBRBookBind();
}
protected void gvBookInfo_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
{
Response.Write("");
}
else
{
readermanage.ID = Session["readerid"].ToString();
DataSet readerds = readermanage.FindReaderByCode(readermanage, "tb_reader");
if (Convert.ToInt32(readerds.Tables[0].Rows[0][13].ToString()) >=
Convert.ToInt32(txtBNum.Text))
{
Response.Write("");
}
else
{
borrowandbackmanage.ID = borrowandbackmanage.GetBorrowBookID();
borrowandbackmanage.ReadID = Session["readerid"].ToString();
borrowandbackmanage.BookCode =
gvBookInfo.DataKeys[e.RowIndex].Value.ToString();
borrowandbackmanage.BorrowTime =
Convert.ToDateTime(DateTime.Now.ToShortDateString());
btypemanage.TypeName = gvBookInfo.Rows[e.RowIndex].Cells[2].Text;
int days = Convert.ToInt32(btypemanage.FindBTypeByName(btypemanage,
"tb_booktype").Tables[0].Rows[0][2].ToString());
TimeSpan tspan = TimeSpan.FromDays((double)days);
borrowandbackmanage.YGBackTime = borrowandbackmanage.BorrowTime + tspan;
borrowandbackmanage.BorrowOper = Session["Name"].ToString();
borrowandbackmanage.AddBorrow(borrowandbackmanage);
gvBRBookBind();
bookmanage.BookCode = gvBookInfo.DataKeys[e.RowIndex].Value.ToString();
DataSet bookds = bookmanage.FindBookByCode(bookmanage, "tb_bookinfo");
bookmanage.BorrowNum = Convert.ToInt32(bookds.Tables[0].Rows[0][12].ToString()) + 1;
bookmanage.UpdateBorrowNum(bookmanage);
readermanage.BorrowNum =
Convert.ToInt32(readerds.Tables[0].Rows[0][12].ToString()) + 1;
readermanage.Num = Convert.ToInt32(readerds.Tables[0].Rows[0][13].ToString()) +
1;
readermanage.UpdateBorrowNum(readermanage);
}
}
}