项目实战_图书管理系统_第1页
项目实战_图书管理系统_第2页
项目实战_图书管理系统_第3页
项目实战_图书管理系统_第4页
项目实战_图书管理系统_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、项目实战2 图书管理系统 2.1 需求描述 图书馆拥有大量的图书,如果依然采用人工管理的方式,会十分繁琐而且容易出错。现在某图书馆打算开发一个图书管理系统实现图书信息的电子化管理。要求具有如下功能: 1、 图书类型管理 ¾ 新增图书类型 ¾ 修改图书类型 ¾ 删除图书类型 2、 图书管理 ¾ 新增图书 ¾ 修改图书 ¾ 删除图书 3、 查询图书类型与图书信息 ¾ 查询所有图书类型信息 ¾ 查询图书类型详细 ¾ 查询所有图书信息 ¾ 查询指定类型的图书信息 ¾ 查询图书信息详细 2.2

2、问题分析 2.2.1 数据库设计 分析以上需求,我们使用数据库来存储相应的数据。我们可以创建一个数据库 bookdb,并设计一张图书类型信息表(booktypeinfo)用于存储图书类型信息与一张图书信息表(bookinfo)用于存储图书信息。图书类型信息表中包含字段与说明见表2-1。 表2-1 booktypeinfo(图书类型信息表) 字段名称 数据类型 说明 booktypeid int 主键 ,自动增长。 booktypename varchar(50) 图书类型名称,非空。 remark varchar(50) 图书类型备注。 图书信息表中包含字段与说明见表2-2。 表2-2 boo

3、kinfo(图书信息表) 字段名称 数据类型 说明 bookid int 主键,自动增长。 bookname varchar(50) 图书名称,非空。 typeid int 图书类型编号,外键引用booktypeinfo表的booktypeid。author varchar(50) 作者,非空。 press varchar(50) 出版社,非空。 puddate datetime 出版时间,非空。 pricing float 定价,check约束大于0。 page int 页数,check约束大于1。 coverimage varchar(50) 图书封面图书,存储图片路径。 summary

4、text 图书简介。 2.2.2 实体类与数据访问类设计 从需求中我们可以抽取出两个对象:图书类型与图书。并根据数据库字段我们可以创建如图2-1所示的图书类型类(booktype)与图书类(book)。 图2-1 图书类型类与图书类类图 类似以上booktype与book这种封装现实对象的数据的类我们可以称为实体类。 booktype 与 book 类只封装了图书类型与图书的属性,那么操作图书类型与图书数据的方法定义在哪里呢?这时我们可以将这些方法单独定义在另一个类中,实现数据与数据操作的分离。 定义一个 booktypedao 类提供处理图书类型数据的方法。booktypedao 类包含的方

5、法如图2-2所示。 图2-2 booktypedao类图 定义一个 bookdao类提供处理图书数据的方法,bookdao类包含的方法如图 2-3所示。 图2-3 bookdao类图 dao 是 data access objects 的缩写,即数据访问对象的缩写。在程序中我们通常定义这种对象用于访问数据库,做相关的操作。一般情况下这种对象只包含方法。 2.3 相关技术与工具 完成项目所用技术: ¾ 面向对象程序设计 ¾ c# winform编程 ¾ ado.net操作数据库 ¾ sql server数据库开发工具:visual studio与sql s

6、erver 2.4 阶段划分 图书管理系统实现阶段划分见表2-3。 表2-3 阶段任务及时间 阶段名称 使用时间 阶段实现 第一阶段 60分钟 创建数据库与表,添加约束,创建表间关系,插入测试数据。第二阶段 30分钟 设计winform窗体。 第三阶段 60分钟 定义实体类,与数据库连接帮助类。 第四阶段 120分钟 定义数据访问类。 第五阶段 120分钟 实现主窗体数据的显示。 第六阶段 60分钟 实现图书类型的新增,修改和删除操作。 第七阶段 60分钟 实现图书的新增,修改和删除操作。 第八阶段 60分钟 实现其他页面功能,并测试程序。 2.4.1 第一阶段 创建数据库与表 创建数据库与表

7、。 创建数据库bookdb,并创建图书类型信息表(booktypeinfo)与相关约束,并插入测试数据如图2-4所示。 图2-4 booktypeinfo表 在数据库 bookdb 中创建图书信息表(bookinfo)与相关约束,并插入测试数据如图 2-5所示。 图2-5 booktypeinfo表 2.4.2 第二阶段 设计 winform 窗体 新建项目并设计winform窗体。 新建windows应用程序bookmanage,修改默认窗体名称为frmmain。窗体设计如图2-6所示。 图2-6 frmmain设计视图 frmmain 窗体主要实现信息的显示并提供相应的菜单栏与工具栏。主要

8、控件功能如下: ¾ 窗体使用treeview控件显示所有图书类型,当选中某个图书类型时,在图书列表中显示相应类型的图书信息,当选中listview控件中某本图书时,显示图书的封面图片与图书简介。 ¾ 窗体左边的工具栏实现对图书类型的新增、修改与删除操作和图书类型管理菜单下的三个菜单项对应。右边的工具栏实现对图书的新增、修改与删除操作和图书管理菜单下的三个菜单项对应。 ¾ 视图菜单项下包含“大图标”与“详细信息”两个菜单项,用于指定图书列表的显示模式。 ¾ 窗体中还包含了一个imagelist控件,用于存放图书的封面图片。 新建窗体frmbooktype用

9、于实现图书类型的新增与修改操作,窗体设计如图2-7所示。 图2-7 frmbooktype设计视图 新建窗体frmbook用于实现图书类型的新增与修改操作,窗体设计如图2-8所示。 图2-8 frmbook设计视图 2.4.3 第三阶段 定义实体类与连接帮助类 定义实体类与连接帮助类。 在项目中新建一个文件夹 model,用于存放实体类与数据访问类。根据前面的类图我们定义图书类型类,主要代码如下所示。 / <summary> / 图书类型类 / </summary> public class booktype private int booktypeid; /类型编号

10、private string booktypename; /图书类型名称 private string remark; /备注 /封装属性,代码省略 定义图书类book,主要代码如下所示。 / <summary> / 图书类,封装图书的相关信息 / </summary> public class book private int _bookid; /图书编号 private string _bookname; /图书名称 private booktype _booktype; /图书类型,booktype的引用 private string _author; /作者 p

11、rivate string _press; /出版社 private datetime _pubdate; /出版时间 private float _pricing; /定价 private int _page; /页数 private string _coverimage; /封面图片路径 private string _summary; /图书简介 /封装属性,代码省略 /构造函数,初始化图书类型 public book() this._booktype = new booktype(); 定义数据库连接帮助类,代码如下所示。 / <summary> / 数据库连接帮助类 /

12、</summary> class dbconnection /静态方法,用于获得数据库连接对象 public static sqlconnection getconn() return new sqlconnection("server=.;database=bookdb;uid=sa;pwd=123456"); 2.4.4 第四阶段 定义数据访问类 定义数据访问类。 在model文件夹下定义图书类型数据访问类booktypedao,代码如下所示。 / <summary> / 图书类型数据访问类 / </summary> class bo

13、oktypedao / 查询所有图书信息,返回图书类型集合 public list<booktype> selectbooktype() /代码省略. / 根据图书类型编号查询图书类型,返回图书类型对象 public booktype selectbooktype(int typeid) /代码省略. / 添加图书类型的编号,返回是否添加成功 public bool addbooktype(booktype type) /代码省略. / 修改图书类型信息,返回是否修改成功 public bool updatebooktype(booktype type) /代码省略. / 删除图书

14、类型信息,返回是否删除成功 public bool deletebooktype(int typeid) /代码省略. 在model文件夹下定义图书数据访问类bookdao,代码如下所示。 / <summary> / 图书数据访问类 / </summary> class bookdao /查询所有图书信息,返回图书集合 public list<book> selectbook() /代码省略. / 根据图书编号查询图书信息,返回图书对象 public book selectbook(int bookid) /代码省略. / 根据图书类型查询图书信息,返回图书

15、集合 public list<book> selectbookbytype(int typeid) /代码省略. / 添加图书的方法,返回是否添加成功 public bool addbook(book book) /代码省略. /删除图书的方法,返回是否删除成功 public bool deletebook(int bookid) /代码省略. / 修改图书的方法,返回是否修改成功 public bool updatebook(book book) /代码省略. 2.4.5 第五阶段 实现主窗体数据显示 实现主窗体数据显示。在程序运行时,主窗体的treeview控件需显示所有的图书

16、类如图2-9所示。 图2-9 显示图书类型 在选中根节点时,在listview中显示所有图书列表。如选中图书类型节点则显示指定类型的图书列表。如图2-10与2-11所示。运行程序,测试图书信息的显示,如图2-10与2-11所示。 图2-10 显示所有的图书信息 图2-11 显示指定类型的图书信息 选中listview控件中图书时,显示图书的封面图片与简介,如图2-12所示。 图2-12 显示图书封面与图书简介 要实现数据的显示,需要为窗体添加 load 事件,调用 showbooktype()方法显示图书类型,并为listview添加列标题,代码如下所示。 private void frmma

17、in_load(object sender, eventargs e) /初始化列标题 this.lvwbook.columns.add("书名"); this.lvwbook.columns.add("类型"); this.lvwbook.columns.add("作者"); this.lvwbook.columns.add("出版社"); this.lvwbook.columns.add("出版时间"); this.lvwbook.columns.add("定价"); t

18、his.lvwbook.columns.add("页数"); this.showbooktype();/显示图书类型 方法showbooktype()用于在treeview中显示所有的图书类型。代码如下所示。 /在treeview中显示所有图书类型的方法 public void showbooktype() this.tvwbooktype.nodes.clear(); /创建根节点 treenode rootnode = this.tvwbooktype.nodes.add("所有图书"); /查询数据库中,所有的图书类型 booktypedao ty

19、pedao = new booktypedao(); list<booktype> lst = typedao.selectbooktype(); /遍历集合 foreach (booktype type in lst) /创建类型节点 treenode node = rootnode.nodes.add(type.booktypename); node.tooltiptext = type.remark; /设置节点的tag指向当前类型对象 node.tag = type; this.tvwbooktype.selectednode = rootnode; this.tvwboo

20、ktype.expandall(); 定义一个方法showbook(),将list<book>中的数据显示到listview控件中,代码如下所示。 private void showbook(list<book> list) if (list != null) /清空listview的项 this.lvwbook.items.clear(); /清空imagelist中的图片 this.imglst.images.clear(); /遍历集合 foreach (book book in list) /为listview添加项,代码省略. try /*使用image.fr

21、omfile()方法得到指定路径的图片 *并添加到imagelist中 */ this.imglst.images.add(image.fromfile(book.coverimage); catch /触发异常则使用项目资源中的默认图片 this.imglst.images.add(global:bookmanage.properties.resources.noimg); /设置项对应的imagelist中的图片 item.imageindex = this.imglst.images.count-1; 为treeview添加afterselect事件,当选择根节点时在listview中显

22、示所有图书信息,当选择类型节点时在listview中显示对应类型的图书信息,代码如下所示。 private void tvwbooktype_afterselect(object sender, treevieweventargs e) treenode cnode = this.tvwbooktype.selectednode; if (cnode = null) return; bookdao dao = new bookdao(); list<book> list= new list<book>(); if (cnode.level = 0) /选中根节点 lis

23、t = dao.selectbook(); /查询所有图书 else if (cnode.level = 1) /选中类型节点 booktype type = (cnode.tag as booktype); int typeid = convert.toint32(type.booktypeid); list = dao.selectbookbytype(typeid);/根据图书类型查询图书 this.showbook(list); /将查询出图书信息显示到listview中 为listview控件添加selectedindexchanged事件。实现选择某本图书时,显示选中图书的封面图片

24、与图书简介,事件定义如下所示。 private void lvwbook_selectedindexchanged(object sender, eventargs e) /判断是否选中项 if (this.lvwbook.selecteditems.count > 0) /代码省略 else this.txtsummary.clear(); this.piccoverimage.image = null; 2.4.6 第六阶段 实现图书类型的新增、修改和删除 实现图书类型的新增、修改和删除功能。 我们可以利用frmbooktype窗体同时实现新增与修改功能。我们可以在窗体类中声明一个全

25、局的booktype对象,并通过构造函数进行初始化。当在主窗体选择修改操作时,可以将被修改的图书类型传递到frmbooktype中。在frmbooktype的确定按钮的click事件中判断booktype对象是否为空,如果为空执行新增操作,否则执行修改操作。 为frmmain窗体左边菜单的“新增”与“修改”菜单项添加click事件,调用不同参数的构造方法创建对象frmbooktype窗体对象并显示。代码如下所示。 private void tsbaddbooktype_click(object sender, eventargs e) /创建frmbooktype窗体对象 frmbooktyp

26、e frm = new frmbooktype(this); frm.showdialog(); private void tsbupdatebooktype_click(object sender, eventargs e) treenode cnode = this.tvwbooktype.selectednode; if (cnode != null && cnode.level = 1) booktype type = (cnode.tag as booktype); /创建frmbooktype窗体对象 frmbooktype frm = new frmbooktyp

27、e(this,type); frm.showdialog(); 图2-13为新增图书类型时的frmbooktyep窗体,输入信息单击确定添加图书类型。 图2-13 新增图书类型 选中一个图书类型,单击窗体左边工具栏的“修改”工具项,显示修改图书类型窗体,输入信息单击“确定”按钮后修改相应的图书类型信息。如图2-14所示 图2-14 修改图书类型 编写窗体frmbooktype后台代码,实现图书类型的新增与修改操作。主要代码如下所示。 public partial class frmbooktype : form /声明一个全局的frmmain对象与一个全局的booktype对象 private

28、 frmmain _frm; private booktype _type; /构造方法用于初始化frmmain对象 public frmbooktype(frmmain frm) this._frm = frm; initializecomponent(); /构造方法用于初始化frmmain对象和booktype方法 public frmbooktype(frmmain frm,booktype type) this._frm = frm; this._type = type; initializecomponent(); /窗体加载事件 private void frmbooktype_

29、load(object sender, eventargs e) if (this._type = null) this.text = "新增图书类型" else /显示被修改图书类型的信息 this.txtbooktypename.text = this._type.booktypename; this.txtremark.text = this._type.remark; this.text = "修改图书类型" /确定按钮click事件 private void btnok_click(object sender, eventargs e) /如果

30、图书类型为空 if (this._type = null) this.addbook(); /执行添加操作 else this.updatebook(); /执行修改操作 / 添加图书类型的方法 private void addbook() /代码省略. /修改图书类型的方法 private void updatebook() /代码省略. 为frmmain窗体右边菜单的“删除”菜单项添加click事件实现删除图书类型的操作,删除后应刷新显示的数据。 2.4.7 第七阶段 实现图书的新增、修改和删除 实现图书的新增、修改和删除功能。 使用frmbook窗体实现图书的新增与修改操作与图书类型的新

31、增、修改类似。单击主窗体右边工具栏的“新增”工具项时显示新增图书窗体如图2-15所示。 图2-15 新增图书 在主窗体中选中某本图书后,单击“修改”工具项将显示要修改的图书信息,如图2-16所示。 图2-16 修改图书 为frmmain窗体右边工具栏的“新增”与“修改”工具项添加click事件,调用不同参数的构造方法创建对象frmbook窗体对象并显示。代码如下所示。 private void tsbaddbook_click(object sender, eventargs e) frmbook frm = new frmbook(this); frm.showdialog(); private void tsbupdatebook_click(object sender, eventargs e) if (this.lvwbook.selecteditems.count > 0) listviewitem item = this.lvwbook.selecteditems0; book book = (item.tag as book); /将修改的图书传到frmbook中 frmbook frm = new frmbook(this, bo

温馨提示

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

评论

0/150

提交评论