《数据库原理与应用》课件第8章_第1页
《数据库原理与应用》课件第8章_第2页
《数据库原理与应用》课件第8章_第3页
《数据库原理与应用》课件第8章_第4页
《数据库原理与应用》课件第8章_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章图书管理系统应用开发8.1图书管理系统的需求分析 8.2图书管理系统的概念结构设计8.3图书管理系统的逻辑结构设计8.4图书管理系统的物理结构设计8.5图书管理系统的程序开发

随着计算机的不断发展,计算机已经渗透到各个领域,图书管理也不例外。图书管理在正常运营中总是面对大量的读者信息、图书信息以及两者相互作用产生的借书信息、还书信息,这就需要对读者资源、图书资源、借书信息、还书信息进行管理,及时了解各个环节中信息的变更,以利于提高管理效率。8.1图书管理系统的需求分析

1.业务调查

在图书管理系统中,图书管理员要为每个读者建立借书账户,并给读者发放不同类别的借书证(例如教师身份、学生身份等),账户内存储读者的个人信息和借阅记录信息。持有借书证的读者可以通过图书管理系统借阅、归还图书,不同类别的读者可以借阅图书的范围、数量和期限不同。在图书馆内的终端可查询图书信息和个人借阅情况,以及续借图书(系统审核符合续借条件)。借书过程:读者在图书馆的终端查询图书信息,将选中的图书编号给图书管理人员;图书管理人员从书库中找到图书(对于有权限进库的读者,自己可以从架上选到所需图书后,将图书和借书卡交给管理人员),并将读者编号和图书编号输入系统(或通过码阅读器将图书编码和借书卡上的读者条码读入处理系统);系统根据读者编号查询借阅文件中找到相应记录,确定是否办理借书手续;若读者符合所有借书条件,则予以借出,同时,系统在借阅文件中增加一条记录,记入读者编号、图书编码、借阅日期等内容。如果读者有如下情况之一,将不予办理借书手续:

(1)读者所借阅图书已超过该读者容许的最多借书数目。

(2)读者还有已超过归还日期而仍未归还的图书。

还书过程:还书时读者将书交给图书管理人员,图书管理员将书上的图书编码输入(或通过码阅读器读图书编码读入)系统,系统从借阅文件上找到相应记录,填上还书日期,同时系统对借还书日期进行计算并判断是否超期,若不超期则结束过程,若超期则计算出超期天数、罚款数,并开罚款通知单。

图书管理员定期或不定期地对图书信息进行入库、修改、删除以及注销。

2.功能分析

图书管理系统主要实现图书管理、读者管理和借阅管理等功能。

1)图书管理

图书类别管理:包括图书类别信息的添加、删除和修改等功能。

图书信息管理:包括新书入库,图书购入后由图书管理人员将图书编码和其具体信息录入。管理员按不同方式查询、统计;读者按不同方式查询。

出版社信息管理:包括出版社信息的添加、删除和修改等功能。图书注销管理:某一部分图书因为读者丢失或者图书被损坏,这些图书就要在图书库存信息表中注销,即减少其数量。

2)读者管理

读者类别信息管理:包括读者类别信息的添加、删除、修改等功能。

读者信息管理:办理、挂失、暂停借书、注销、录入、修改、删除读者信息。

3)借阅管理

借书管理:根据读者编号和图书编号,进行借书登记。在借阅信息表中插入一条借书记录,更新该记录的相应数据(图书数量);把超期图书以列表的形式显示出来,并以电子邮件形式或打印成书面单据通知读者;提供读者网上查询自己的借阅情况(包括超期提示)的功能。续借管理:提供读者在符合规定的情况下续借的功能。

还书管理:根据读者编号、图书ID等,在借阅信息表中找到相应的记录;登记还书日期,更新该记录的相应数据(图书数量);根据超期情况计算超期天数并开罚款单。

4)查询

查询。图书管理人员可以查询某个读者情况;查询某本图书借阅的情况;统计图书借阅情况。

图书管理系统的功能图如图8.1所示。

图8.1图书管理系统的功能图

3.图书管理系统的数据流图

需求分析是数据库设计首先要做的工作,通过需求分析,可以得出图书管理系统的各层数据流图,图8.2~图8.8给出了图书管理系统的部分数据流图。

图8.2图书管理顶层数据流图

图8.3图书管理第一层数据流图

图8.4图书管理第二层数据流图

图8.5注销图书第三层数据流图

图8.6读者和借阅第二层数据流图

图8.7借书第三层数据流图

图8.8还书第三层数据流图

4.图书管理系统数据字典

在数据流图的基础上,定义数据字典。数据字典是关于数据库中数据的描述,它的作用是在软件分析和设计过程中为有关人员提供关于数据描述信息的查询,以保证数据的一致性。下面举例说明数据字典的定义。

1)数据项

以“读者编号”为例,可以描述如下:

·数据项名:读者编号。

·别名:读者条码或借书证号。

·含义:唯一标识每个读者。

·类型:字符型。

·取值范围:00000000至99999999。

·取值含义:按编码顺序编。

2)数据结构

以“读者”为例,可以描述如下:

·数据结构名:读者信息。

·含义说明:是图书管理系统的数据结构之一,定义了一个读者的有关信息。

·组成:读者编号、读者姓名、性别、电话号码、办证日期、读者状态。

3)数据流

以“借阅信息”为例,可描述如下:

·数据流名:借阅记录。

·说明:读者的借书记录。

·数据来源:办理借阅手续。

·数据去向:借阅信息。

·数据结构:读者编号、图书编号、借阅日期、还书日期。

4)数据存储

以“借阅信息”为例,可以描述如下:

·数据存储名:借阅信息。

·说明:记录读者的借书情况。

·流出数据流:借阅记录。

·流入数据流:借阅记录。

·数据描述:读者编号、图书编号、借阅日期、还书日期。

·数据量:每年100000条以上。

·存取方式:随机存取。

5)处理过程

以“判断能否借书”为例,可描述如下:

·处理过程:“判断能否借书”。

·说明:根据读者的已借书情况和被借图书的馆藏情况判断读者能否借书。

·输入:借还记录、读者信息、被借图书信息。

·输出:能否借书的标志。

·处理:读者提出借书请求后,先判断该读者以前的借书量是否超过限定数量,如果超过,则不能再借书;如果没有超过,则再判断读者要借的图书的库存数量是否为0,如果不为0,则该书可以借出。

根据数据流图,我们可以得出图书管理系统的实体有:读者类别、读者、图书类别、图书及出版社等。具体如下所述:

·读者类别实体的属性有:读者类别编号、读者类别名称、借书数量、借书期限。

·读者实体的属性有:读者编号、读者姓名、性别、电话号码、办证日期、读者状态。

·图书类别实体的属性有:图书类别编号、图书类别名称。8.2图书管理系统的概念结构设计

·图书实体的属性有:图书编号、图书名称、作者姓名、出版社编号、价格、ISBN、登记日期。

·出版社实体的属性有:出版社编号、出版社名称、出版社地址、邮政编码、联系电话。

实体之间的关系有:

·读者类别与读者之间存在联系,一个读者只能有一个类别,一种读书类别可以有多个读者,所以它们之间存在一对多联系。

·图书类别与图书之间存在联系,一种图书只能有一个类别,一种图书的类别可以有多本图书,所以它们之间存在一对多联系。

·出版社与图书之间存在联系,一个出版社可以出版多种图书,可从一个出版社购买多种图书或多本图书,所以它们之间存在多对多联系。

·读者与图书之间存在联系,一个读者可以借多本图书,一本书可被多个读者借阅,所以它们之间存在多对多联系。

其各个实体之间联系的描述如图8.9的E-R图所示。

图8.9图书管理系统的E-R图使用数据库建模工具PowerDesigner进行图书管理系统的概念模型设计,得出的概念数据模型如图8.10所示。

图8.10图书管理系统的概念数据模型

根据关系规范化理论和E-R图转换成关系模型的规则,图8.9所示的E-R图可转换得到下列关系模式:

·读者类别(类别编号、类别名称、借书数量、借书期限)。

·读者(读者编号、读者姓名、读者类别、性别、电话号码、办证日期、读者状态)。

·图书类别信息(类别编号、类别名称)。8.3图书管理系统的逻辑结构设计

·图书(图书编号、图书名称、图书类别、作者姓名、出版社编号、价格、ISBN、登记日期)。

·出版社(出版社编号、出版社名称、出版社地址、邮政编码、联系电话)。

·借还(读者编号、图书编号、借书日期、还书日期)。

·图书库存(购书信息)(出版社编号,图书编号,数量)。

说明:带下划线的为主键,斜体的为外键。

图书管理系统数据库中各个表的设计如表8.1~表8.7所示。8.4图书管理系统的物理结构设计表8.1读者类别表(readtype)表8.2图书类别表(booktype)表8.3出版社表(publishinfo)表8.4读者表(readinfo)表8.5图书表(bookinfo)表8.6借阅表(borrow_returninfo)表8.7图书库存表(bookstockinfo)

按图8.1所示的图书管理系统功能图,利用delphi工具设计的系统总界面如图8.11所示。8.5图书管理系统的程序开发

图8.11图书管理系统界面下面只给出系统实现借阅功能和查询功能的部分代码,其他请读者自行补充。

1.借阅功能

实现对数据库的增加、删除、修改等功能,运行界面如图8.12所示。

图8.12借书管理设计界面

1)窗体建立事件

procedureTborrow_Form.FormCreate(Sender:TObject);

begin

ADOConnection1.Connected:=true;

ADOQ_borrow_returninfo.Active:=true;

ADOQuery_readno.Active:=true;

ADOQuery_bookno.Active:=true;

ifADOQ_borrow_returninfo.Recordset.RecordCount=0then

begin

BBinsert.Enabled:=false;

BBupdate.Enabled:=false;

BBdelete.Enabled:=false;

BBsave.Enabled:=true;

BBcancel.Enabled:=true;

ADOQ_borrow_returninfo.Insert;

DBEdit3.Text:=datetostr(date());

end;

end;

2)新增按钮

procedureTborrow_Form.BBInsertClick(Sender:TObject);

begin

BBinsert.Enabled:=false;

BBupdate.Enabled:=false;

BBdelete.Enabled:=false;

BBsave.Enabled:=true;

BBcancel.Enabled:=true;

ADOQ_borrow_returninfo.Last;

ADOQ_borrow_returninfo.Insert;

DBLookupComboBox1.SetFocus;

DBEdit3.Text:=datetostr(date());

end;

3)修改按钮

procedureTborrow_Form.BBupdateClick(Sender:TObject);

begin

BBinsert.Enabled:=false;

BBupdate.Enabled:=false;

BBdelete.Enabled:=false;

BBsave.Enabled:=true;

BBcancel.Enabled:=true;

ADOQ_borrow_returninfo.edit;

ADOQ_borrow_returninfo.Fields.Fields[0].FocusControl;

end;

4)删除按钮

procedureTborrow_Form.BBdeleteClick(Sender:TObject);

var

I:integer;

begin

I:=application.MessageBox('确定要删除吗?','警告',1);

ifI=1then

begin

ADOQ_borrow_returninfo.Delete;

end

else

begin

exit;

end;

ifADOQ_borrow_returninfo.Recordset.RecordCount=0then

begin

BBupdate.Enabled:=false;

BBdelete.Enabled:=false;

end

end;

5)保存按钮

procedureTborrow_Form.BBsaveClick(Sender:TObject);

varsql_str:string;

begin

BBupdate.Enabled:=true;

BBdelete.Enabled:=true;

BBinsert.Enabled:=true;

BBsave.Enabled:=false;

BBcancel.Enabled:=false;

try

ADOQuery_bookstockinfo.Close;

ADOQuery_bookstockinfo.SQL.Clear;

sql_str:='select*frombookstockinfowherequantity<>0andbookno='+''''+DBLookupComboBox2.Text+'''';

ADOQuery_bookstockinfo.SQL.Add(sql_str);

ADOQuery_bookstockinfo.Open;

ifADOQuery_bookstockinfo.Recordset.RecordCount=1then

begin

sql_str:='updatebookstockinfosetquantity=quantity-1wherebookno='+''''+DBLookupComboBox2.Text+'''';

ADOConnection1.Execute(sql_str)

end

else

begin

application.MessageBox('没有此书,请另行选择需要的书','Look',MB_OK);

DBLookupComboBox2.SetFocus;

BBupdate.Enabled:=false;

BBdelete.Enabled:=false;

BBinsert.Enabled:=false;

BBsave.Enabled:=true;

BBcancel.Enabled:=true;

exit;

end;

ADOQ_borrow_returninfo.post;

except

application.MessageBox('借书没有成功','Look',MB_OK);

end;

end;

6)取消

procedureTborrow_Form.BBcancelClick(Sender:TObject);

begin

BBinsert.Enabled:=true;

ifADOQ_borrow_returninfo.Recordset.RecordCount=0then

begin

BBupdate.Enabled:=false;

BBdelete.Enabled:=false;

end

else

begin

BBupdate.Enabled:=true;

BBdelete.Enabled:=true;

end;

BBsave.Enabled:=false;

BBcancel.Enabled:=false;

ADOQ_borrow_returninfo.Cancel;

ADOQ_borrow_returninfo.Open;

end;

7)退出按钮

procedureTborrow_Form.BBexitClick(Sender:TObject);

begin

borrow_Form.Close;

end;

8)首记录按钮

procedureTborrow_Form.BitBtn_firstClick(Sender:TObject);

begin

ADOQ_borrow_returninfo.First;

end;

9)上一条记录按钮

procedureTborrow_Form.BitBtn_priorClick(Sender:TObject);

begin

ifnot(ADOQ_borrow_returninfo.Bof)then

ADOQ_borrow_returninfo.Prior;

end;

10)下一条记录按钮

procedureTborrow_Form.BitBtn_nextClick(Sender:TObject);

begin

ifnot(ADOQ_borrow_returninfo.Eof)then

ADOQ_borrow_returninfo.Next;

end;

11)尾记录按钮

procedureTborrow_Form.BitBtn_lastClick(Sender:TObject);

begin

ADOQ_borrow_returninfo.Last;

end;

12)窗体退出按钮

procedureTborrow_Form.FormClose(Sender:TObject;

varAction:TCloseAction);

begin

ADOConnection1.Connected:=false;

action:=cafree;

main_form.Enabled:=true;

main_form.show;

end;

13)退出学号输入需要判断该学生借的书是否已经超出给定的数量

procedureTborrow_Form.DBLookupComboBox1Exit(Sender:TObject);

varsql_str:string;

begin

try

ADOQuery_booknumber.Close;

ADOQuery_booknumber.SQL.Clear;

sql_str:='select*fromread_infowherereadno='+''''+DBLookupComboBox1.text+'''';

ADOQuery_booknumber.SQL.Add(sql_str);

ADOQuery_booknumber.Open;

ADOQuery_borrowbooknumber.Close;

ADOQuery_borrowbooknumber.SQL.Clear;

sql_str:='SELECTreadno,COUNT(*)ASbooknumberFROMborrow_returninfowherereadno='+''''+DBLookupComboBox1.text+''''+'GROUPBYreadno';

ADOQuery_borrowbooknumber.SQL.Add(sql_str);

ADOQuery_borrowbooknumber.Open;

ifADOQuery_borrowbooknumber.FindField('booknumber').Value>=ADOQuery_booknumber.FindField('booknumber').Valuethen

begin

application.MessageBox('你不能再借书,借书数量超出要求借的书','请注意',MB_OK);

exit;

end;

ADOQuery_borrowbooknumber.Close;

ADOQuery_borrowbooknumber.SQL.Clear;

sql_str:='SELECTreadno,COUNT(*)ASbooknumberFROMcouputer_daywheredays>0andreadno='+''''+DBLookupComboBox1.text+''''+'GROUPBYreadno';

ADOQuery_borrowbooknumber.SQL.Add(sql_str);

ADOQuery_borrowbooknumber.Open;

ifADOQuery_borrowbooknumber.Recordset.RecordCount>=1then

begin

application.MessageBox('你不能再借书,有超期的书','请注意',MB_OK);

exit;

end;

except

application.MessageBox('执行失败','请注意',MB_OK);

end;

end;

2.查询功能

运行界面如图8.13所示。

图8.13查询界面

1)读者信息单选按钮(其他单选按钮程序略)

procedureTquery_Form.RadioButton1Click(Sender:TObject);

begin

Edit1.Enabled:=true;

edit1.Color:=clWindow;

Edit3.Enabled:=true;

edit3.Color:=clWindow;

Edit2.Enabled:=false;

edit2.Color:=clScrollBar;

Edit4.Enabled:=false;

edit4.Color:=clScrollBar;

Edit5.Enabled:=false;

edit5.Color:=clScrollBar;

Edit6.Enabled:=false;

edit6.Color:=clScrollBar;

end;

2)查询按钮

procedureTquery_Form.BitBtn_chaxunClick(Sender:TObject);

varsql_str:string;

sql_where:string;

begin

sql_where:='';

ifRadioButton1.Checked=truethen

begin

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

ifedit1.Text<>''thensql_where:='wherereadno='+''''+edit1.Text+'''';

ifedit3.Text<>''then

begin

ifsql_where<>''thensql_where:=sql_where+'andreadname='+''''+edit3.Text+''''

elsesql_where:='wherereadname='+''''+edit3.Text+'''';

end;

sql_str:='selectReadnoas读者编号,readnameas读者姓名,readtypenoas读者类别,readsexas读者性别,readphoneas电话号码,regdateas办证日期fromreadinfo';

ifsql_where<>''thensql_str:=sql_str+sql_where;

ADOQuery1.SQL.Add(sql_str);

ADOQuery1.Open;

end;

ifRadioButton2.Checked=truethen

begin

ifedit2.Text<>''thensql_where:='wherebookno='+''''+edit2.Text+'''';

ifedit4.Text<>''then

begin

ifsql_where<>''thensql_where:=sql_where+'andbookname='+''''+edit4.Text+''''

elsesql_where:='wherebookname='+''''+edit4.Text+'''';

end;

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

sql_str:='selectbooknoas图书编号,booknameas图书名称,booktypenoas图书类别,bookauthoras图书作者,publishnoas出版社编号,bookpriceas价格,bookisbnasisbn,bookindateas登记日期frombookinfo';

ifsql_where<>''thensql_str:=sql_str+sql_where;

ADOQuery1.SQL.Add(sql_str);

ADOQuery1.Open;

end;

ifRadioButton3.Checked=truethen

begin

ifedit2.Text<>''thensql_where:='wherebookno='+''''+edit2.Text+'''';

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

sql_str:='selectBooknoas图书编号,publishnoas出版社编号,quantityas数量frombookstockinfo';

ifsql_where<>''thensql_str:=sql_str+sql_where;

ADOQuery1.SQL.Add(sql_str);

ADOQuery1.Open;

end;

ifRadioButton4.Checked=truethen

begin

ifedit5.Text<>''thensql_where:='wherepublishno='+''''+edit5.Text+'''';

ifedit6.Text<>''then

begin

ifsql_where<>''thensql_where:=sql_where+'andpublishname='+''''+edit6.Text+''''

elsesql_where:='wherepublishname='+''''+edit6.Text+'''';

end;

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

sql_str:='selectPublishnoas出版社编号,publishnameas出版社名称,publishaddreas出版社地址,publishzipcodeas出版社邮编,publishphoneas出版社电话frompublishinfo';

ifsql_where<>''thensql_str:=sql_str+sql_where;

ADOQuery1.SQL.Add(sql_str);

ADOQuery1.Open;

end;

ifRadioButton5.Checked=truethen

begin

ifedit1.Text<>''thensql_where:='borrow_returninfo.readno='+''''+edit1.Text+'''';

ifedit3.Text<>''then

begin

ifsql_where<>''thensql_where:=sql_where+'andreadname='+''''+edit3.Text+''''

elsesql_where:='readname='+''''+edit3.Text+'''';

end;

ADOQuery1.Close;

ADOQuery1.SQL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论