《图书管理系统》设计指导书(最完整版) 下载本文

《图书管理系统》C# 设计指导书 V2.0 2013.8.1 — 9.20 LSH

3. 用例:借书证的办理、变更、挂失、解除、补办与注销 –frmReader窗体

借书证相关用例有:办理借书证、变更借书证、挂失借书证、解除挂失、补办借书证、注销借书证等。分析发现第一个步骤都相同,即借书证查询操作;办理新借书证、变更借书证有界面操作,然后再分别做插入和修改操作;而其它的挂失、解除挂失、补办、注销等没有界面操作,可以直接进行各自的业务操作。

方案一 设计3个窗口:

(1)查询窗口,并设计6个按钮控件:办理新证、变更、挂失、解除挂失、补办、注销等。 其中办理新证、变更在点击后分别转入下面2个窗口;另外4个按钮可调用相应业务逻辑方法直接完成。

(2)办理新借书证窗口,从查询窗口传入相关的信息(参见其用例),完成读者表记录的插入操作。

(3)变更借书证窗口,从查询窗口传入原借书证对象,完成读者表记录的修改操作。 此方案的设计与实现比较简单,用户操作简易、流畅。

设计改变了系统主菜单,frmMain类及其窗体的修改工作如下:

将主窗体菜单(6.8.2节)中的4个菜单项“2.1办理借书证”至“2.4注销借书证”去掉3个,仅保留一个菜单项,改其名为“借书证管理”,并添加其点击事件,事件的实现代码为:

方案二 设计1个窗口,如下:

29 / 47

《图书管理系统》C# 设计指导书 V2.0 2013.8.1 — 9.20 LSH

此操作界面的控制较复杂,下面详细介绍其设计思想与实现技术。 (1)窗口界面设计

将界面设计成3个部分:

? 查询条件 工具栏(ToolStrip toolStrip1),其中控件:查找(ToolStripButton

btnQuery),Excel(ToolStripButton btnToExcel)。 ? 查询结果 组控件(GroupBox groupBox1),其中控件:网格控件(DataGridView

dgvReader,设置ReadOnly=true),办理借书证(Button btnNewDoc)、变更借书证(Button btnChangeDoc)、挂失(Button btnLossDoc)、解除挂失(Button btnUnlossDoc)、注销(Button btnCancelDoc)、退出(Button btnClose);另外,借阅信息(Label lblBorrowInfo)可用于显示读者的历史借阅记录数和未归还图书数量。

? 读者信息 组控件(GroupBox groupBox2),其中控件:确认办证(Button

btnAddReader)、确认变更(Button btnUpdateReader)、撤销(Button btnCancelChange);另外,图片控件(PictureBox picboxPhoto,设置BorderStyle= FixedSingle,SizeMode= StretchImage)、打开图片文件(Button btnLoadPictureFile)。 (2)界面操作状态的控制

添加枚举类型opStatus,表示3种窗口操作状态,参见下列代码。并在frmReader类中添加成员对象,其中:

DataTable dt -存放查询结果,并给DataGridView dgvReader提供数据。

Reader reader –存放读者信息,与读者信息组控件内的各控件进行数据交换,并与BLL、

30 / 47

《图书管理系统》C# 设计指导书 V2.0 2013.8.1 — 9.20 LSH Model层进行数据传递。 opStatus ops –记录当前操作状态。 代码如下:

然后添加窗口类成员函数SetStatus(),代码如下:

在几个需要进行状态切换的按钮Click点击事件中调用此函数,如下: 办理借书证(Button btnNewDoc) 调用 SetStatus(opStatus.inNew);

变更借书证(Button btnChangeDoc) 调用 SetStatus(opStatus.inChange); 撤销(Button btnCancelChange) 调用 SetStatus(opStatus.inSelect); 思考:确认办证、确认变更的Click事件该如何切换状态? (3)窗口初始化

在窗口类frmReader的构造函数public frmReader()中添加代码:

31 / 47

《图书管理系统》C# 设计指导书 V2.0 2013.8.1 — 9.20 LSH

在BLL类ReaderAdmin中添加成员函数:

在DAL类ReaderTypeDAL中添加成员函数:

在窗口类frmReader中添加成员函数:

在实体类Reader中添加成员函数:

(4)查询操作的实现

32 / 47