图书管理系统从需求分析到设计完成_第1页
图书管理系统从需求分析到设计完成_第2页
图书管理系统从需求分析到设计完成_第3页
图书管理系统从需求分析到设计完成_第4页
图书管理系统从需求分析到设计完成_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

第5章 图书管理系统 本章对数据库的连接主要采用Windows自带的ODBC来完成,在应用程序中使用了TDatabase控件。5.1 摘要与关键字5.1.1 摘要 图书资料管理系统主要是针对高校的图书馆作为使用对象而开发的,作为一个典型的信息管理系统(MIS),其系统开发任务主要包括数据库的设计与维护、客户端应用程序的开发等两个方面。对于前者要求建立起的数据库具有完整性和一致性,且具有一定的数据安全性如用户需要密码才能使用等,而对于后者则要求程序界面友好、功能完备等特点。经过详细的分析,选用Borland公司的Delphi作为前端开发工具,利用其提供的集成开发环境及各种控件,尤其是对数据库的支持完成对数据库的各种操作,达到对图书资料管理的目的。首先建立系统应用原型,然后对原型系统进行需求迭代,不断修正和改进,直到形成用户满意的实际可行系统。5.1.2 关键词 图书、管理、设计、实现、SQL Server。5.2 引言 图书资料的管理是高校图书馆都必须切实面对的工作,但一直以来人们使用传统的人工方式管理图书资料,这种管理方式存在着许多缺点,如:效率低、保密性差且较为烦琐,另外随着图书资料数量的增加,其工作量也将大大增加,这必然增加图书资料管理者的工作量和劳动强度,这将给图书资料信息的查找、更新和维护都带来了很多困难。 经过我们详细的调查,目前我国各类高等院校中有相当一部分单位图书资料管理还停留在人工管理的基础上,尤其是中、小学的图书资料的管理更是如此,这样的管理机制已经不能适应时代的发展,其管理方法将浪费许多人力和物力。随着科学技术的不断提高,这种传统的手工管理方法必然被以计算机为基础的信息管理方法所取代。 图书资料管理作为计算机应用的一个分支,有着手工管理所无法比拟的优点,如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高图书资料管理的效率。因此,开发一套能够为用户提供充足的信息和快捷的查询手段的图书资料管理系统,将是非常必要的,也是十分及时的。因此可以把图书资料管理作为毕业设计的题目,正好可以充分利用几年在校所学的各种专业知识开发一个图书管理系统来帮助相关部门进行有效的管理。5.3 需求分析5.3.1 功能需求 高等院校的图书管理涉及图书信息、系统用户信息、读者信息、图书借阅信息等多种数据管理。从管理的角度出发可将图书管理分为3类:图书信息管理、系统用户管理和读者数据管理。图书信息管理包括图书征订、编目、典藏、借还和查询操作,系统用户管理包括系统用户类别和用户数据管理,读者数据管理包括读者类别管理和读者个人数据的录入、修改、删除。 典型的高校图书管理系统主要应具有以下功能:l 图书征订:包括图书征订数据的录入、修改、删除等功能。l 图书编目:包括图书编目信息的录入、修改等功能。l 图书典藏:包括新书分配、库室调配等功能。l 图书流通:包括图书借阅、续借,图书返还,图书书目查询等功能。l 系统用户管理:包括系统用户数据的录入、修改、删除等功能。l 读者数据管理:包括读者类别管理,读者个人数据的录入、修改、删除等功能。 再进行详细调查,绘制出数据流图,如图5-1所示。图5-1 系统数据流图5.3.2 开发与运行环境 本例的高校图书管理系统开发与运行环境如下: 开发环境:Windows XP 开发工具:Delphi 8 数据库管理系统:SQL Server 2000 运行环境:Windows 98/ME/2000/XP5.4 系统设计5.4.1 系统模块设计 根据系统功能分析和高校图书管理的特点,经过模块化的分析得到如图5-2所示的系统功能模块结构图。图5-2 系统功能模块图5.4.2 数据库设计1. 数据字典 根据系统功能模块结构图和高校图书管理流程,以及典型高校图书管理系统的需求,总结出如下的数据字典:l 系统用户数据:图书馆内部人员使用图书管理系统的身份数据,包含的数据项有用户编号、登录口令、权限代码。l 读者类别数据:借阅图书读者的类别数据,包含的数据项有读者类别编号、类别名称、借书数量、借书期限、有效期限。l 读者个人数据:读者个人与图书借阅有关的身份数据,包含的数据项有借阅证编号、读者类别编号、姓名、部门名称、办证时间。l 图书书目数据:用于图书编目使用的书目数据,包含的数据项有索书号、图书条码、书名、作者、出版社、出版日期、字数、页数、内容简介、关键词。l 新书书目数据:图书编目产生的书目数据,包含的数据项与图书书目数据相同。l 馆藏书目数据:新书书目经典藏之后形成馆藏图书书目数据,包含的数据项有索书号、图书条码、书名、作者、出版社、出版日期、字数、页数、内容简介、关键词、入馆日期、复本数、可借数、库室名。l 图书征订数据:征订图书的相关数据,包含的数据项有书名、作者、出版社、出版日期、数量、征订日期。l 图书借阅数据:包含的数据项有图书条码、借阅证编号、借阅日期、还书日期、图书所在库室编号。l 操作日志数据:包含的数据项有用户名、操作时间、操作动作。2. 数据库结构设计 根据系统需求,分析出实体关系图,如图5-3所示。图5-3 实体关系图 根据实体关系图和数据字典,设计出高校图书管理系统数据库中的各个数据表。根据用户使用要求得到系统用户数据表,根据读者实体得到读者个人数据表,根据数据字典对读者的要求得到读者类别数据表,根据图书实体得到图书书目数据表,根据新书实体得到新书书目数据表,根据馆藏图书实体得到馆藏书目数据表,根据征订关系得到图书征订数据表,根据借阅关系得到图书借阅数据表,根据系统要求记录操作日志得到操作日志数据表。数据表名称与结构如下: 系统用户数据表:表名“t_user”,结构见表5-1。表5-1 t_user表结构字段名类型大小索引说明BhChar5是编号PasswdChar6密码LimitTinyint权限 读者个人数据表:表名“t_dzb”,结构见表5-2。表5-2 t_dzb表结构字段名类型大小索引说明ZhChar5是证号LxdmTinyint类型代码XmChar20姓名BmChar20部门RqDatetime日期 读者类别数据表:表名“t_lxdm”,结构见表5-3。表5-3 t_lxdm表结构字段名类型大小索引说明LxdmTinyint是类型代码LxmcChar10类型名称JslTinyint借书量JsqTinyint借书期YxqTinyint有效期 图书书目数据表:表名“t_tsb”,结构见表5-4。表5-4 t_tsb表结构字段名类型大小索引说明IdBigint是自动增长TmChar7条码SyhVarchar30索引号SmVarchar60书名ZzVarchar30作者CbsVarchar60出版社CbrqDatetime出版日期ZsInt字数YsInt页数NrjjVarchar200内容简介GjzVarchar100关键字 新书书目数据表:表名“t_xsb”,结构同上。 馆藏书目数据表:表名“t_csb”,结构见表5-5。表5-5 t_csb表结构字段名类型大小索引说明TmChar7条码SyhVarchar30索引号SmVarchar60书名ZzVarchar30作者CbsVarchar60出版社CbrqDatetime出版日期ZsInt字数YsInt页数NrjjVarchar200内容简介GjzVarchar100关键字RgrqDatetime入馆日期JbsSmallint基本数KjsSmallint可借数KsmChar20库室名 图书征订数据表:表名“t_dgb”,结构见表5-6。表5-6 t_dgb表结构字段名类型大小索引说明SmVarchar60书名ZzVarchar30作者CbsVarchar60出版社CbrqDatetime出版日期SlInt数量DgrqDatetime定购日期 图书借阅数据表:表名“t_jyb”,结构见表5-7。表5-7 t_jyb表结构字段名类型大小索引说明TmChar7是条码ZhChar6证号JsrqDatetime借书日期HsrqDatetime还书日期YhTinyint已还KhTinyint库号 操作日志数据表:表名“t_log”,结构见表5-8。表5-8 t_log表结构字段名类型大小索引说明NameChar10是用户名CzsjDatetime操作时间CzlogVarchar200操作动作5.5 系统实现5.5.1 建立数据库 本例数据库使用SQL Server 2000,数据库名为TSGL。在SQL Server 2000数据库服务器上建立数据库以及各数据表的过程,在这里不作介绍,有关内容参阅SQL Server相关书籍。5.5.2 建立连接 本例使用ODBC数据源连接数据库,数据源名为mybase。建立过程可参阅第四章内容。5.5.3 程序设计1. 主窗体 主窗体保存为main.pas。主窗体界面如图5-4所示,包含一个Database组件、一个MainMenu组件和一个StatusBar组件。图5-4 主窗体 窗体主要组件属性设置见表5-9。表5-9 主窗体组件属性设置组件属性值Form1Name=MainForm FormStyle=fsMDIForm Caption=高校图书管理系统MainMenu1Database1DatabaseName=mybase LoginPrompt=FalseStatusBar1 其中Database1的Params属性添加两项USER NAME和PASSWORD分别设置为SQL Server的登录用户名和密码。 主窗体中定义全局变量dlname,用于保存登录的用户名。编写一个过程addlog完成日志记录,和一个函数getnettime用来取得服务器时间,保证系统时间的一致性。过程和函数的代码如下:/ 取得服务器时间函数function TMainForm.getnettime:string;begin with TQuery.Create(nil) do begin try Close; SessionName:=MainForm.Database1.SessionName; DatabaseName:=MainForm.Database1.DatabaseName; SQL.Clear; SQL.Add(select getdate() as aa); Open; result:=FieldByName(aa).AsString; finally Free; end; end;end;/日志记录过程procedure TMainForm.addlog(var name,czsj,czlog:string);var sqlstr:string;begin / 生成将参数传递的信息写入日志数据表的SQL语句 sqlstr:=insert into t_log (name,czsj,czlog) values (+name+,+czsj+,+czlog+); with TQuery.Create(nil) do begin try Close; SessionName:=MainForm.Database1.SessionName; DatabaseName:=MainForm.Database1.DatabaseName; SQL.Clear; SQL.Add(sqlstr); ExecSQL; finally Free; end; end;end;2. 用户登录窗体 用户登录功能是在启动系统后,要求用户登录,只有输入合法的用户名和密码,系统才分配具体的功能模块。 用户登录窗体保存为login.pas。界面如图5-5所示,包含一个Panel组件、两个Label组件、两个Edit组件和两个Button组件。图5-5 用户登录窗体 主要组件属性设置见表5-10。表5-10 用户登录窗体主要组件属性组件属性值Form2FormStyle=fsMDIChild BorderStyle=bsSingle BorderIcons=biSystemMenuName=LoginForm Caption=用户登录窗口Panel1Caption= BevelOuter=bvLoweredLabel1(Panel1)Caption=用户名Label2(Panel1)Caption=密 码Edit1(Panel1)Text= Name=Name_EditEdit2(Panel1)PasswordChar=* Text= Name=Password_EditButton1Caption=确定Button2Caption=取消 主要代码如下:uses main;/ 确定按钮单击事件procedure TLoginForm.Button1Click(Sender: TObject);var aname,apassword,sqlstr:string; a,b:integer;begin / 有输入时,从数据库中检验用户信息 if (Length(Trim(Name_Edit.Text) 0) or (Length(Trim(Password_Edit.Text) 0) then begin aname:=Trim(Name_Edit.Text); apassword:=Trim(Password_Edit.Text); sqlstr:=select * from t_user a, t_qxb b where (=+aname+) and (a.passwd=+apassword+) and (=) order by b.cdx; with TQuery.Create(nil) do try Close; SessionName:=MainForm.Database1.SessionName; DatabaseName:=MainForm.Database1.DatabaseName; SQL.Clear; SQL.Add(sqlstr); Open; if RecordCount 0 then / 验证通过,根据权限设置菜单项的可访问性 begin First; while not Eof do begin a:=StrToInt(Copy(FieldByName(cdx).AsString,1,1); b:=StrToInt(Copy(FieldByName(cdx).AsString,2,2); MainForm.MainMenu1.Items.Itemsa.Visible:=True; MainForm.MainMenu1.Items.Itemsa.Itemsb.Visible:=True; Next; end; / 关闭登录窗口 LoginForm.Close; / 主窗体状态栏显示登录用户名 MainForm.StatusBar1.Panels0.Text:=aname; MainForm.dlname:=aname; end else / 验证不通过,提示错误信息 begin ShowMessage(请确认登录的用户名和密码是否正确!); Name_Edit.SetFocus; Name_Edit.SelectAll; end; finally Free; end; end else / 无输入,提示错误信息 begin ShowMessage(请输入登录用户名和密码!); Name_Edit.SelectAll; end;end;3. 用户管理窗体设计 用户管理需要根据不同的用户类型,分配不同的权限,便于系统的维护。主要功能包括用户数据(包括编号、密码和权限)的添加、删除和浏览等操作。高级管理员可以管理系统中所以的用户数据,而普通用户则只能修改自己的密码。图5-6 用户管理窗体设计 用户管理窗体保存为usergl.pas,界面设计如图5-6所示,包含一个PopupMenu组件、一个Query组件、一个DataSource组件和一个DBGrid组件。 窗体的主要组件属性设置见表5-11。表5-11 用户管理窗体主要组件属性组件属性值Form3FormStyle=fsMDIChild Name=usergl_Form Caption=用户管理PopupMenu1MenuItem1 Name=N11 Caption=添加用户MenuItem2 Name=N12 Caption=修改用户MenuItem3 Name=N13 Caption=删除用户Query1DataSource1DataSet=Query1DBGrid1DataSource=DataSource1 PopupMenu=PopupMenu1 用户管理窗体主要代码如下: public modi:Boolean;/ 用于标识添加/修改用户 xx:string;/ 用于设置添加/修改用户窗体标题栏 end;procedure Tusergl_Form.FormCreate(Sender: TObject);begin Query1.SessionName:=MainForm.Database1.SessionName; Query1.DatabaseName:=MainForm.Database1.DatabaseName; modi:=False;end;/ 数据网格双击事件procedure Tusergl_Form.DBGrid1DblClick(Sender: TObject);begin / 相当于修改用户操作 N12.Click;end;procedure Tusergl_Form.FormShow(Sender: TObject);var sqlstr:string;begin sqlstr:=select * from t_user order by yhm; Query1.SQL.Clear; Query1.SQL.Add(sqlstr); Query1.Open; / 根据数据查询结果,设置弹出菜单项的可访问性 if Query1.RecordCount 0 then begin N12.Enabled:=True; N13.Enabled:=True; end else begin N12.Enabled:=False; N13.Enabled:=False; end;end;/ “添加用户”弹出菜单单击事件procedure Tusergl_Form.N11Click(Sender: TObject);begin / 设置标识 modi:=False; xx:=添加用户; / 打开添加/修改用户窗体 Application.CreateForm(Tmodiuser_Form, modiuser_Form); modiuser_Form.ShowModal;end;/ “修改用户”弹出菜单单击事件procedure Tusergl_Form.N12Click(Sender: TObject);begin / 设置标识 modi:=True; xx:=修改用户; / 打开添加/修改用户窗体 Application.CreateForm(Tmodiuser_Form, modiuser_Form); modiuser_Form.ShowModal;end;/ “删除用户”弹出菜单单击事件procedure Tusergl_Form.N13Click(Sender: TObject);var name,id:string;begin try name:=Query1.FieldByName(name).AsString; / 弹出确认删除对话框 if MessageDlg(确认要删除选中的记录码?, mtConfirmation, mbYes, mbNo, 0) = mrYes then begin id:=Query1.FieldByName(id).AsString; with TQuery.Create(nil) do begin try Close; SessionName:=MainForm.Database1.SessionName; DatabaseName:=MainForm.Database1.DatabaseName; SQL.Clear; / 删除用户表数据 SQL.Add(delete from t_user where id=+id+); ExecSQL; SQL.Clear; / 删除权限表数据 SQL.Add(delete from t_qxb where yhm=+name+); ExecSQL; finally Free; end; end; end; except end;end;4. 添加/修改用户窗体 添加/修改用户窗体设计如图5-7所示,包含两个LabeledEdit组件、一个CheckListBox组件、一个Query组件、一个Panel组件、一个GroupBox组件和两个SpeedButton组件。图5-7 添加/修改用户窗体设计 窗体的主要组件属性设置见表5-12。表5-12 添加/修改用户窗体主要组件属性组件属性值Form4FormStyle=fsMDIChild Name=usergl_Form Caption=添加/修改用户信息Panel1Caption= Align=alTopLabeledEdit1(Panel1)Name=yhm_LEdit EditLabel.Caption=用户名LabeledEdit2(Panel1)Name=mm_LEdit EditLabel.Caption=密码SpeedButton1(Panel1)Caption=确定SpeedButton2(Panel1)Caption=取消GroupBox1Caption=功能权限列表 Align=alClientCheckListBox1(GroupBox1)Align=alClientQuery1 添加/修改用户窗体主要代码如下:/ 窗体创建事件,将系统的所有功能模块列表procedure Tmodiuser_Form.FormCreate(Sender: TObject);var yhm,cdbh,cdmc,sqlstr:string;begin / 设置窗体标题栏 Caption:=usergl_Form.xx; Query1.SessionName:=MainForm.Database1.SessionName; Query1.DatabaseName:=MainForm.Database1.DatabaseName; with TQuery.Create(nil) do begin try Close; SessionName:=MainForm.Database1.SessionName; DatabaseName:=MainForm.Database1.DatabaseName; sqlstr:=select * from t_cdx order by cdx; SQL.Clear; SQL.Add(sqlstr); Open; First; while not Eof do begin cdbh:=FieldByName(cdx).AsString; cdmc:=FieldByName(cdm).AsString; / 复选列表框添加菜单项的列表 CheckListBox1.Items.Add(cdbh+&+cdmc); /根据用户权限设置复选列表 if usergl_Form.modi then begin yhm:=usergl_Form.Query1.FieldByName(yhm).AsString; sqlstr:=select * from t_qxb where(yhm=+yhm+)and(cdx=+cdbh+); Query1.Close; Query1.SQL.Clear; Query1.SQL.Add(sqlstr); Query1.Open; if Query1.RecordCount 0 then CheckListBox1.CheckedCheckListBox1.Count-1:=True; end; Next; end; finally Free; end; end;end;/ 确定按钮单击事件,根据用户需求,分配具体权限给用户procedure Tmodiuser_Form.SpeedButton1Click(Sender: TObject);var id,sqlstr1,sqlstr,cdbh,yhm,mm:string; i:integer;begin /先验证用户密码 if usergl_Form.modi then id:=usergl_Form.Query1.FieldByName(id).AsString; yhm:=Trim(yhm_LEdit.Text); if (Length(yhm)20) then begin ShowMessage(用户名由3-20个字符组成!); exit; end; mm:=Trim(mm_LEdit.Text); if (Length(mm)20) then begin ShowMessage(密码由3-20个字符组成!); exit; end; sqlstr1:=select * from t_user where (yhm=+yhm+) and (id+id+); / 根据添加/修改用户,生成相应的SQL语句 if usergl_Form.modi then sqlstr:=update t_user set yhm=+yhm+,mm=+mm+ where (id=+id+) else sqlstr:=insert into t_user (yhm,mm) values (+yhm+,+mm+); / 执行SQL语句 with TQuery.Create(nil) do begin try SessionName:=MainForm.Database1.SessionName; DatabaseName:=MainForm.Database1.DatabaseName; SQL.Clear; SQL.Add(sqlstr1); Open; / 根据用户存在与否,执行不同操作 if RecordCount 0 then begin ShowMessage(该用户名已经存在,请改用其他用户名!); exit; end; SQL.Clear; SQL.Add(sqlstr); ExecSQL; / 根据复选列表框设置用户权限 for i:=0 to CheckListBox1.Count-1 do begin if usergl_Form.modi then begin cdbh:=copy(CheckListBox1.Items.Stringsi,0,3); if CheckListBox1.Checkedi then begin sqlstr:=select * from t_qxb where (yhm=+yhm+) and (cdx=+cdbh+) order by cdx; SQL.Clear; SQL.Add(sqlstr); Open; if RecordCount = 0 then begin sqlstr1:=insert into t_qxb (yhm,cdx) values (+yhm+,+cdbh+); SQL.Clear; SQL.Add(sqlstr1); ExecSQL; end; end else begin sqlstr:=delete from t_qxb where (yhm=+yhm+) and (cdx=+cdbh+); SQL.Clear; SQL.Add(sqlstr); ExecSQL; end; end else begin cdbh:=copy(CheckListBox1.Items.Stringsi,0,3); if CheckListBox1.Checkedi then begin sqlstr1:=insert into t_qxb (yhm,cdx) values (+yhm+,+cdbh+); SQL.Clear; SQL.Add(sqlstr1); ExecSQL; end; end; end; finally Free; end; end; Close;end;procedure Tmodiuser_Form.FormShow(Sender: TObject);begin / 如果为修改用户,初始化显示组件 if usergl_Form.modi then begin yhm_LEdit.Text:=usergl_Form.Query1.FieldByName(name).AsString; mm_LEdit.Text:=usergl_Form.Query1.FieldByName(passwd).AsString; end;end;5. 修改密码窗体设计 用户登录后可以自己修改密码,这样既能保证系统的安全性,同时又减少了系统管理员的工作量。 修改密码窗体保存为ModiMM.pas,界面设计如图5-8所示,包含三个Label组件、三个Edit组件和两个Button组件。图5-8 修改密码窗体设计 窗体主要组件属性设置见表5-13。表5-13 修改密码窗体主要组件属性组件属性值Form5FormStyle=fsMDIChild BorderStyle=bsSingle BorderIcons=biSystemMenuName=ModiMMForm Caption=修改密码Edit1Text= PasswordChar=*Edit2Text= PasswordChar=*Edit3Text= PasswordChar=* 修改密码窗体主要代码如下:/ 确定按钮单击事件procedure TModiMM

温馨提示

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

评论

0/150

提交评论