您好,欢迎访问三七文档
阶段项目案例一开发书本信息管理软件问题编写一个书本信息的单机版WinForm界面管理软件,让用户管理书本和杂志。处理有关书本和杂志的详细信息,例如:ISBN、作者、出版社、类别、页数、价格、评论等,为了方便,数据库采用Access,试开发这个软件。指导教师讲解问题说明分析对于这类程序的编写,一般遵循这样的一个步骤。(1)调查分析,画出系统的数据流程图,当程序比较复杂时采用分层画法,即用自顶向下逐层分解的方法逐步细化。(2)设计出如表1.1所示的数据字典并创建数据库。表1.1设计并创建数据库字段数据类型长度主键空外键默认值备注(3)划分出模块并分别设计出界面。(4)编写相应的代码。该题目要求识别用户是要管理书本还是要管理杂志。一般来说,对于这种情况,若是比较复杂的工程可以采用模块方式分别进行管理,为了简化,这里采用一个窗体上面放一个下拉列表让用户选择的方式。该窗体的用户界面如图1.1所示。图1.1类别窗体要对两类信息管理,故至少需要两个窗体用于添加书本和杂志。用户在第一个窗体上选择类别之后,应显示相应的窗体。程序在接受用户输入之后,应将录入信息插入到Access创建的数据库中。要对数据库操作,首先必须连接数据库,然后才可以对数据库进行操作,要连接数据库,要用到Connection对象,要对数据库操作,要用到Connection对象。首先使用以下命名空间:usingSystem.Data;usingSystem.Data.OleDb;使用以下方式创建Connection和Command对象,以便在.NET中操作MSAccess数据库。//Connection对象和Command对象OleDbConnectionobjOleDbConnection=newOleDbConnection(“Provider=Microsoft.Jet.Oledb.4.0;DataSource=D:\\Book.mdb”);OleDbCommandobjOleDbCommand;需要在“添加”按钮的Click事件中初始化Command对象。这是通过将objOleDbConnection连接命令和INSERT命令传递给OleDbcommand对象来完成的,代码如下:objOleDbCommand=newOleDbCommand(InsertCommand,objOleDbConnection);由于是对数据库的添加操作,一般情况不用判断返回值,所以使用Command对象的ExecuteNonQuery()方法执行该命令。用于添加书本和杂志的两个窗体都必须遵循这个过程。解决方案:(1)在MSAccess中创建“Book”数据库。添加一个表名为books的新表,其结构见表1.2,并把ISBN号设为主键。表1.2“books”表的数据库结构列名称数据类型ISBN文本书本名文本出版社文本出版日期日期作者文本价格货币评论备注页数数字类别数字,类别代码(外键)(2)向Access数据库添加新表“bookCategory”,表“bookCategory”的结构有两列:一列为类别代码、另一列为类别名称,把类别代码设为主键。(3)向Access数据库添加新表“magazines”,表“magazines”的结构见表1.3,把刊号和出版日期设为主键。表1.3“magazines”表的数据库结构列名称数据类型刊号文本出版日期文本出刊类型数字,出刊类型代码(外键)价格货币评论备注页数数字(4)向Access数据库添加新表“magazineCategory”,表“magazineCategory”的结构有两列:一列为出刊类型代码、另一列为出刊类型名称,把出刊类型代码设为主键。(5)打开VisualStudio.NET2005IDE并新建一个名为BookManager的Windows应用程序项目,如图1.2所示。图1.2“新建项目”对话框(6)单击“视图”→“解决方案资源管理器”。(7)将Form1.cs文件重命名为frmCategory.cs,这个窗口用来给用户选择类型。(8)选中frmCategory.cs的窗体界面单击“视图”→“属性”,然后将该窗体的Text属性更改为“欢迎来到书本世界”。(9)拖动工具箱中的控件,设计如图1.1所示的窗体。表1.4列出了各个控件的属性。表1.4frmCategory中控件的属性控件名称属性值LabellblCategoryText类别:ComboBoxcboCategoryButtonbtnQueryText查询ButtonbtnRegisterText注册frmBookQobjfrmBookQ;frmBookRobjfrmBookR;frmMagazineQobjfrmMagazineQ;frmMagazineRobjfrmMagazineR;(10)在frmCategory窗体的Load事件中添加以下代码,以便在组合框中加载“书本”和“杂志”项。privatevoidfrmCategory_Load(objectsender,System.EventArgse){cboCategory.Items.Add(书本);cboCategory.Items.Add(杂志);objfrmBookQ=newfrmBookQ();objfrmBookR=newfrmBookR();objfrmMagazineQ=newfrmMagazineQ();objfrmMagazineR=newfrmMagazineR();}(11)在btnQuery的Click事件中添加以下代码。它将根据在cboCategory中选择的项加载相关的查询窗体。privatevoidcboCategory_SelectedIndexChanged(objectsender,System.EventArgse){if(cboCategory.SelectedItem.Equals(书本)newobjfrmBookQ.ShowDialog();elseobjfrmMagazineQ.ShowDialog();}(12)在btnRegister的Click事件中添加以下代码。它将根据在cboCategory中选择的项加载相关的注册窗体。privatevoidcboCategory_SelectedIndexChanged(objectsender,System.EventArgse){if(cboCategory.SelectedItem.Equals(书本))objfrmBookR.ShowDialog();elseobjfrmMagazineR.ShowDialog();}(13)将新的WinForm添加到“解决方案资源管理器”,并将其命名为“frmBookR”。(14)单击“视图”→“属性”,然后将Text属性更改为“注册新的书本”。拖动工具箱中的控件,设计如图1.3所示的窗体。表1.5列出了各个控件的属性。提示:.在实际开发过程中,应该对TextBox等接受用户输入的控件进行验证。.为了便于用户的键盘操作,应该设置各个控件的TabIndex。设置窗体的AccptButton设置为btnAddBook,表示当用户直接敲回车键就添加纪录;窗体的CancelButton设置为btnExit,表示当用户敲Esc键时就关闭该窗口。同时由于该窗口比较小不能布满整个显示屏幕,所以为了美观,让该窗口显示时就居中显示,即设置窗体的StartPosition为CenterScreen,后面的窗体设置相同。图1.3frmBookR窗体表1.5frmBookR中控件的属性控件名称属性值LabellabISBNTextISBN:labBookNameText书本名:labPublishText出版社:labPDateText出版日期:labAuthorText作者:labPriceText价格:labCategoryText类别:labPagesText页数:labCommentsText评论:TextBoxtbxISBNtbxBookNametbxPublishtbxPDatetbxAuthortbxPricetbxPagestbxCommentsMultiLineTrueComboBoxcbxCategoryButtonbtnAddBookText添加(&A)BtnExitText退出(&E)(15)添加注释和以下命名空间以访问和操纵Access数据库。usingSystem.Data;usingSystem.Data.OleDb;(16)初始化Connection对象和Command对象。oleDbConnectionobjOleDbConnection=newOleDbConnection(“Provider=Microsoft.Jet.Oledb.4.0;DataSource=D:\\Book.mdb”);OleDbCommandobjOleDbCommand;(17)在“frmBookR”窗体的构造函数中打开与数据库的连接。publicfrmBookR(){InitializeComponent();//打开连接objOleDbConnection.Open();}(18)在“frmBookR”窗体的Load事件中添加以下代码。它将查询得到的书本类别表绑定到cbxCategory下拉列表框控件上。privatevoidfrmBookR_Load(objectsender,System.EventArgse){….cbxCategory.DataSource=ds.Tables[0];cbxCategory.DisplayMember=类别名称;cbxCategory.ValueMember=类别代码;….}(19)在“添加”按钮的Click事件中添加以下代码。该代码将用户输入的记录插入数据库中。注意:在今后编程中应学会用try…catch…finally结构进行容错处理。privatevoidbtnAddMovie_Click(objectsender,System.EventArgse){//InsertstatementstringinsCmd=CreateInstStr();//InitializingCommandobjectobjOleDbCommand=newOleDbCommand(insCmd,objOleDbConnection);try{objOleDbCommand.ExecuteNonQuery();MessageBox.Show(已添加记录);}//Catchingexceptioncatch(OleDbExceptionex){MessageBox.Show(ex.Message);}}(21)在“退出”按钮的Click事件中添加以下代码。privatevoidbtnExit_Click(Objectsender,System.eventArgse){This.Close();}(22)在资源管理器里,选中工程,右击鼠标,选择“添加新窗体”,并将其命名为“frmMagazineR”。(23)单击“视图”→“属性”,然后将Text属性更改为“注册新杂志”。(24)拖动工具箱中的控件,设计如图1.4所示的窗体。表1.6列出了各个控件的属性。图1.4frmMagazineR窗体表1.6frmMagazineR中控件的属性控件名称属性值LabellabMNameText刊号:labPDateText出版日期:labPriceText价格:labCategoryText出刊类型:labPagesText页数:labCommentsText评论:TextBoxtbxMNametbxPDatetbxPricetbxPagestbxCommentsMultiLineTrueComboBoxcbxCategoryButtonbtnAddBookText添加(&A)BtnExitText退出(&E)(25)添加以下命名空间以访问和操纵MSAccess数据库。usi
本文标题:C#例案
链接地址:https://www.777doc.com/doc-7363419 .html