《软件工程》图书管理系统课程设计.docx
《《软件工程》图书管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《《软件工程》图书管理系统课程设计.docx(24页珍藏版)》请在冰点文库上搜索。
《软件工程》图书管理系统课程设计
图书管理系统课程设计报告
1.设计目的
随着计算机技术的不断发展,计算机作为知识经济时代的产物,已被广泛应用于社会各个行业和领域。
目前,我国的科技水平高速发展,计算机作为今天使用最广的现代化工具已深入到各个领域,并且正在成为未来社会—-信息社会的重要支柱。
在这样的大背景下,现代图书馆的管理方式,资源建设等方面都发生了重大变化,这种变化表现在图书馆工作,管理和服务平台发生的变化,图书馆不再是传统的手工操作,人工管理,而是全面实行计算机管理。
图书馆的正常运营中总是面对大量的读者信息,图书信息以及两者相互作用产生的借书信息,因此要对读者资源,图书资源,借书信息进行管理.本系统的开发就是在于提高图书管理的工作效率,加强图书馆的管理,全面实行计算机管理。
2.可行性研究报告
在软件的开发过程中,这一步是十分必要的。
如果在定义阶段及早发现将来可能在开发过程中的问题,及早做出决断,可以避免大量的人力,财力和时间上的浪费。
1.技术可行性:
本组开发成员都具有一定的电脑知识,学习过多种程序开发语言。
特别是在项目确定后对C#和SQLServer数据库的强化学习,使本系统成功开发成为可能。
2.经济可行性:
本系统有其生存空间,成功后有其市场。
并且本小组开发人员基于一种爱好去研究他的,我们有自己的电脑,可以说成本开支极其有限。
3.现阶段各种各样的图书馆越来越多,图书馆的书也越来越多,图书的管理工作也越来越复杂.本系统就是为了减轻图书管理人员的工作而设计的。
4.法律可行性:
本系统为我五人开发小组独立完成,不关他人,开发成功后其所有权归我们五人所有,用户购买后其使用权一同买断,我们将提供技术支持.
5.基于水平和时间有限,我们的系统还不是十分完善。
可扩展的地方很多,现列举如:
建立图书预约机制建立读者反馈机制
建立过期催还机制建立条码扫描机制等.
以现有的人力和时间来衡量,我们只有放弃。
经过以上可行性论证,本系统可以按任务书要求开发.
3.项目开发计划书
开发阶段
时间进度
制定开发计划
两天
需求分析
一周
概要设计
一周
详细设计
两周
系统实现
三周
系统测试
一周
编写课程设计报告
两周
4.系统需求规格说明书
该过程是个不断认识不断细化的过程。
这里所要完成的工作是深入描述软件的功能和性能,确定软件的设计限制和软件同其他系统元素的接口细节,从而奠定软件的开发基础。
1.性能需求:
该系统中,各个模块只有管理人员才能对其进行操作,系统管理人员要进行身分验证才能进入界面操作。
2.功能需求:
我们设计的系统要完成的功能模块如下:
登陆模块管理员管理模块借阅卡管理模块书籍管理模块查询管理模块。
3.环境需求:
电脑需要安装.net框架3。
5,安装SQLServer2008数据库,硬件要求酷睿i3双核以上处理器,100G硬盘空间,1G以上内存,系统应有WindowsXP,Windows7,或Windows8操作系统。
4.界面需求:
本软件是面向大众,界面友好,操作简单灵活,根据界面上的提示便可完成一系列动作。
5.概要设计说明书
5.1系统设计流程
(一)建库;
建立数据库;
(二)设计相应的操作界面;
5。
2功能模块结构图设计
一、软件设计过程
对程序结构、数据结构、过程细节和接口细节逐步细化、评审和编写文档的过程。
从技术角度上,软件设计分成体系结构设计、数据设计、过程设计、接口设计4个方面的工作。
从管理角度上讲,软件设计分为概要设计和详细设计两个阶段。
二、软件设计目标
设计必须实现分析模型中描述的所有显示需求,必须满足用户希望的所有隐式需求;设计必须是可读、可理解的,使得将来易于编程、易于测试、易于维护;设计应从实现角度出发,给出数据、功能、行为相关的软件全貌。
三、基本原理和相关概念
⑴抽象化:
常用的抽象化手段有过程抽象、数据抽象和控制抽象
●过程抽象:
任何一个完成明确动能的操作都可被使用者当做单位的实体看待,尽管这个操作时机上可能由一系列更低级的操作来完成.
●数据抽象:
与过程抽象一样,允许设计人员在不同层次上描述数据对象的细节。
●与过程抽象和数据抽象一样,控制抽象可以包含一个程序控制机制而无须规定其内部细节。
⑵自顶向下,逐步细化:
将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,知道用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。
⑶模块化:
将一个待开发的软件分解成若干个小的简单的部分--模块,每个模块可独立地开发、测试,最后组装成完整的程序。
这是一种复杂问题的“分而治之”的原则.模块化的目的是使程序结构清晰,容易阅读,容易理解,容易测试,容易修改。
⑷控制层次:
表明了程序构件(模块)的组织情况。
控制层次往往用程序的层次结构(树形或网型)来表示。
●深度:
程序结构的层次数,可以反映程序机构的规模和复杂程度。
●宽度:
同一层模块的最大模块个数
●模块的扇出:
一个模块调用(或控制)的其他模块数
●模块的扇入:
调用(或控制)一个给定模块的模块个数
⑸信息屏蔽:
将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少的显露其内部的处理,可以提高软件的可修改性,可测试性和可移植性。
⑹模块独立:
每个模块完成一个相对特定独立的子功能,并且与其他模块之间的联系简单。
衡量度量标准有两个:
模块间的耦合和模块的内聚。
模块独立性强必须做到高内聚低耦合。
●耦合:
模块之间联系的紧密程度,耦合度越高模块的独立性越差。
耦合度从低到高的次序为:
非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。
●内聚是指内部各元素之间联系的紧密程度,内聚度越低模块的独立性越差。
内聚度从低到高依次是:
偶然内聚、逻辑内聚、瞬时内聚、过程内聚、通信内聚、顺序内聚、功能内聚。
结构化设计方法,采用类似于结构化分析的“由大到小"、“自顶向下,逐层分解"的基本思想描述(分解)系统。
结构化设计方法,首先以数据流图为基础导出系统模块(功能)结构图。
在导出系统模块(功能)结构图的过程中,以独立性、低耦合性、高内聚性、公共模块作为模块划分的原则。
先将系统数据流图中的加工转换成模块,再将各大模块继续划分为较小的模块,直到每一模块都是功能单一的模块。
根据系统功能分析和图书馆管理的特点,经过模块化的分析得到如图所示的图书馆管理系统功能模块结构图。
5。
3E—R图
管理员E—R图
学生E—R图
图书E-R图
借阅E—R图
系统整体E—R图
6.详细设计说明书
6.1数据库设计
根据设计好的各实体E—R图创建数据库的逻辑结构,本系统采用了送了SQL Server 2008数据库,数据库名称为BookMgr.数据库BookMgr包含以下6个表:
图书信息表book、图书管理员表admin、图书类别表type、借书卡信息表card、图书借阅表lend.
表的具体结构如下:
1)管理员表:
用于保存管理员信息,结构如下
/******Object:
Table[dbo].[Users]ScriptDate:
04/26/201515:
56:
26******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[Users](
[Name][nvarchar](50)NULL,
[Password][nvarchar](50)NULL,
[Type][int]NULL
)ON[PRIMARY]
GO
2)图书信息表
/******Object:
Table[dbo]。
[Book]ScriptDate:
04/26/201515:
56:
26******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[Book](
[Num][nvarchar](50)NOTNULL,
[Name][nvarchar](50)NULL,
[Author][nvarchar](50)NULL,
[Type][int]NULL,
[ISBN][nvarchar](50)NULL,
[CBS][nvarchar](50)NULL,
[CBRQ][datetime]NULL,
[Status][nvarchar](50)NULL,
CONSTRAINT[PK_Book]PRIMARYKEYCLUSTERED
(
[Num]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
3)借书卡信息表
/******Object:
Table[dbo].[Card]ScriptDate:
04/26/201515:
56:
26******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[Card](
[Num][nvarchar](50)NOTNULL,
[Name][nvarchar](50)NULL,
[Class][nvarchar](50)NULL,
[StartTime][datetime]NULL,
[EndTime][datetime]NULL,
CONSTRAINT[PK_Card]PRIMARYKEYCLUSTERED
(
[Num]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
4)图书借阅表
/******Object:
Table[dbo]。
[Lend]ScriptDate:
04/26/201515:
56:
26******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[Lend](
[CardNum][nvarchar](50)NULL,
[BookNum][nvarchar](50)NULL,
[Time][datetime]NULL,
[Status][nvarchar](50)NULL
)ON[PRIMARY]
GO
5)图书类型表
/******Object:
Table[dbo].[Type]ScriptDate:
04/26/201515:
56:
26******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE[dbo].[Type](
[ID][int]IDENTITY(1,1)NOTNULL,
[Name][nvarchar](50)NULL,
CONSTRAINT[PK_Type]PRIMARYKEYCLUSTERED
(
[ID]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
6。
2系统界面设计
登陆界面
//验证用户
privatevoidokButton_Click(objectsender,System。
EventArgse)
{
if(tB_Name.Text==””)
{
MessageBox。
Show("请输入用户名!
",”提示”);
return;
}
if(cB_Type.SelectedIndex<0)
{
MessageBox.Show("请选择登陆身份!
","提示”);
return;
}
stringstrCommand;
strCommand="selectPasswordfromUserswhereName='”+tB_Name。
Text+"’";
SqlCommandcommand=newSqlCommand(strCommand,DBHelper。
Conn);
SqlDataReaderreader;
reader=command.ExecuteReader();
if(reader。
Read())
{
stringpassword=reader[”Password”].ToString();
//验证用户
if(password==tB_Password.Text)
{
//MainForm。
m_strName=tB_Name.Text;
this。
DialogResult=DialogResult.OK;
this.Close();
}
else
{
MessageBox.Show("用户或口令信息不正确!
",”提示”);
}
}
else
MessageBox。
Show(”用户不存在!
","提示");
reader.Close();
}
主界面
privatevoid图书管理ToolStripMenuItem_Click(objectsender,EventArgse)
{
Bookdlg=newBook();
dlg.MdiParent=this;
dlg。
Show();
}
privatevoid借书卡管理ToolStripMenuItem_Click(objectsender,EventArgse)
{
Carddlg=newCard();
dlg。
MdiParent=this;
dlg。
Show();
}
图书管理
privatevoidBook_Load(objectsender,EventArgse)
{
stringsql=string.Format(@"select[Num]编号,Book。
[Name]书名,[Author]作者
,Type.Name类别,[ISBN],[CBS]出版社,[CBRQ]出版日期,[Status]出借状态fromBookleftjoinTypeonBook.Type=Type.ID");
dataGridView1。
DataSource=DBHelper。
GetDataSet(sql);
}
privatevoidbtnAdd_Click(objectsender,EventArgse)
{
BookAdddlg=newBookAdd("”);
dlg.ShowDialog();
stringsql=string.Format(@"select[Num]编号,Book.[Name]书名,[Author]作者
Type.Name类别,[ISBN],[CBS]出版社,[CBRQ]出版日期,[Status]出借状态fromBookleftjoinTypeonBook。
Type=Type.ID”);
dataGridView1.DataSource=DBHelper。
GetDataSet(sql);
}
借书卡管理
privatevoidCard_Load(objectsender,EventArgse)
{
dataGridView1。
DataSource=DBHelper.GetDataSet(@”select[Num]编号
,[Name]姓名,[Class]班级,[StartTime]开始时间,[EndTime]结束时间FROM[Card]");
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
CardAdddlg=newCardAdd(””);
dlg.ShowDialog();
dataGridView1。
DataSource=DBHelper.GetDataSet(@"select[Num]编号
,[Name]姓名,[Class]班级,[StartTime]开始时间,[EndTime]结束时间FROM[Card]”);
}
借书界面
privatevoidLend_Load(objectsender,EventArgse)
{
CardNum.DataSource=DBHelper.GetDataSet(”select*fromCard”);
CardNum.DisplayMember="Num";
CardNum.ValueMember="Name";
CardName.Text=”";
BookNum.DataSource=DBHelper。
GetDataSet("select*fromBook");
BookNum。
DisplayMember="Num”;
BookNum.ValueMember="Name";
BookName。
Text=””;
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringsql=string。
Format("insertintolendvalues(’{0}’,’{1}',’{2}’,'在借')”,
CardNum.Text,BookNum.Text,DateTime.Now);
DBHelper。
GetCommand(sql);
sql=string。
Format("updateBooksetStatus='已借出'whereNum='{0}'”,BookNum。
Text);
DBHelper.GetCommand(sql);
MessageBox。
Show(”借阅成功!
");
this.Close();
}
还书界面
privatevoidBack_Load(objectsender,EventArgse)
{
CardNum.DataSource=DBHelper.GetDataSet("select*fromCard”);
CardNum。
DisplayMember=”Num";
CardNum.ValueMember="Name";
CardName.Text=”";
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringsql=string。
Format(”updateLendsetStatus=’归还’whereBookNum='{0}'andCardNum='{1}’",
BookNum.Text,CardNum。
Text);
DBHelper。
GetCommand(sql);
sql=string。
Format("updateBooksetStatus=’未借出'whereNum='{0}’",BookNum。
Text);
DBHelper。
GetCommand(sql);
MessageBox。
Show("归还成功!
”);
this.Close();
}
图书查询界面
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringsql=string.Format(@"select[Num]编号,[Name]书名,[Author]作者
,[Type]类别,[ISBN],[CBS]出版社,[CBRQ]出版日期,[Status]出借状态fromBook
whereNumlike'%{0}%'orNamelike’%{0}%'orAuthorlike’%{0}%’orISBNlike’%{0}%'orCBSlike'%{0}%'”,textBox1。
Text);
dataGridView1。
DataSource=DBHelper。
GetDataSet(sql);
}
超期未还图书界面
privatevoidBackTimeout_Load(objectsender,EventArgse)
{
stringsql=string.Format(@”selectC.Num借书卡号,C。
Name姓名,
C。
Class班级,B。
Num书号,B。
Name书名,L.Time借阅时间fromLendLleftjoinBookBonL.BookNum=B.Num
leftjoinCardConL。
CardNum=C.NumwhereL.Status=’在借'andL.Time<’{0}’",DateTime.Now。
AddMonths(—1));
dataGridView1。
DataSource=DBHelper.GetDataSet(sql);
}
用户管理界面
//初始化
privatevoidForm_ManagUser_Load(objectsender,System.EventArgse)
{
stringstrSql=”selectName,PasswordfromUsers";
m_dsUser=newDataSet();
m_adapterUser=newSqlDataAdapter(strSql,DBHelper.Conn);
m_adapterUser。
Fill(m_dsUser,”user