设计-设计报告

设计-设计报告

ID:43716372

大小:1.47 MB

页数:54页

时间:2019-10-13

上传者:U-7604
设计-设计报告_第1页
设计-设计报告_第2页
设计-设计报告_第3页
设计-设计报告_第4页
设计-设计报告_第5页
资源描述:

《设计-设计报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

课程设计报告项目名称:学号:姓名:班级:完成日期:第一章引言1.1图书借阅管理系统的开发意义一直以来人们使用传统的人工方式管理图书馆的日常工作。在计算机尚未在图书馆广泛使用之前,借书和还书过程主要依靠手工。随着计算机技术的不断发展,计算机作为知识经济时代的产物,己被广泛应用于社会各个行业和领域。并且随着图书管理信息量的增大,传统的人工方式管理图书借阅已经无法满足当前社会的要求。在这样的大背景下,有必要充分利用计算机技术开发图书借阅管理系统以取代传统的图书借阅管理模式。全面实行计算机管理图书馆的日常借阅工作。图书借阅管理系统将大量的读者信息,图书信息以及两者相互作用产生的借书信息,通过计算机操作进行有效的管理,目的在于提高图书借阅管理的工作效率,加强图书馆的日常管理。1.2图书借阅管理系统的任务和目标图书借阅管理系统要从根本上改变过去复杂、低效的手工管理方式,使工作规范化,即管理工作基于工作流程,完全采用计算机技术处理图书管理工作。使借阅者与图书管理人员能方便快捷地共享、交流信息。同时乂能实现迅速、全方位的信息采集、信息处理,为使人们对图书借阅能有效地进行。1.3设计开发及运行的软硬件环境图书借阅管理系统是基于C#开发语言和SQLServer2008数据库进行设计和开发的。其运行环境为Windows2000及以后的Windows操作系统运行。 第二章系统分析与设计1.1系统需求分析1.1.1需求信息的收集对学校图书馆的调查了解图书馆的日常处理借阅过程。对图书管理系统有一个深刻得了解。1)调查方式:通过到学校图书馆借书,对图书管理人员进行访问、对信息进行收集。2)调查目的:首先,了解了组织的机构设置,主耍管理活动和职能。其次,要确定了组织的目标,大致管理流程和任务范围划分。3)调查的内容:外部要求、信息的性质、响应的时间、频度和如何发生的规则,以及图书管理的要求,安全性及完整性要求。4)管理的现状:图书管理信息的种类,信息流程,信息的处理方式,各种图书服务工作过程。5)组织机构:获得图书管理高层的、内部的管理需求以及图书管理的管理目标、未来图书管理发展变化趋势和长远规划的有关信息。2.1.2需求信息的整理对新的图书处理流程进行整理。1)借书过程整理:借阅者从图书馆选到所需图书后,将图书和借书卡交给管理人员,管理人员用码阅读器将图书信息和借书卡上的借阅者信息条码读入处理系统。系统根据借阅者信息条码登录该借阅者借阅账号;根据图书上的条码从查询窗口找到相应的记录;并自动进行借阅处理,在系统数据库借阅文件中增加一条记录,记入借阅者的借阅号、图书编码、图书名称、作者、借阅日期。2)还书过程整理:还书时借阅者只要将书交给管理人员,管理员将书上的图书条码读入系统,系统从借阅文件上找到相应记录,并从借阅文件上删去相应记录。3)查询书籍整理:借阅者在图书馆里可以用自己的借阅账号登录图书借阅系统,并点击查询窗口进行图书的检索。4)借阅者账号操作:借阅者如果忘记图书借阅管理系统的账号密码,可以上报管理员修改密码。对于违规操作的借阅者,管理员还可将其借阅帐号删除。 2.1.3功能需求木系统功能方面相应的需求有:1)能够存储大量的图书信息,并能实时地对书籍信息进行操作和管理。主要包括:A.图书信息的录入、删除及修改。B.图书信息的多关键字检索查询。C.图书的借岀和返还。2)能够对一定数量的借阅者借阅帐号进行相应的信息存储与管理,这其中包括:A.借阅者帐号信息的添加、删除及修改。B.借阅者借阅情况的统计与查询。C.能够基于角色分配相应的用户权限。3)系统数据的保存:需要长期保存在数据库的系统数据有:A.图书信息:图书的基本信息;B.借阅信息:图书的借阅信息;C.帐号信息:图书管理员和借阅者的登录帐号信息;4)系统用户:图书管理员、读者。A.图书管理员:对图书和读者数据可执行添加、修改、删除以及查询等操作。B.借阅者:可查询图书、查询与木人相关的借阅信息、借阅图书。2.1.4后台数据库分析根据对需求信息的收集和整理,以及功能需求的分析,在数据库管理系统的支持下,进行信息的收集、整理、存储、检索、更新、加工、统计等操作。1.关联图2•数据流图 图书名/类别图书信息查询的图书信息借阅记录登陆信息厂借阅者登录2•数据字典数据流借阅者借阅者信息二用户名+密码+借阅号数据流图书图书信息二书名+作者+所屈类别+价格+书号数据流管理员管理员信息二用户名+密码+权限数据流借阅记录借阅记录信息二书号+借阅号+借阅时间3•数据库的创建新建数据库并建立3个表:userinfo(用户信息)、bookinfo(图书信息)、borrowinfo(图书借阅信息)ii•部分代码如下:USE[BookLibrary]GO/******Object:Table[dbo].[bookinfo]ScriptDate:12/14/201119:34:31******/SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOSETANSI_PADDINGONGOCREATETABLE[dbo].[bookinfo]([id][bigint]IDENTITY(1,1)NOTNULL,[booknamQ][varchar](50)NOTNULL,[author][varchar](50)NOTNULL, [booktype][varchar](50)NOTNULL,[price][smallmoney]NOTNULL,[bookid][bigint]NOTNULL,CONSTRAINT[PK_BookInfo]PRIMARYKEYCLUSTERED[id]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS==ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY],CONSTRAINT[bookid_l]UNIQUENONCLUSTERED[bookid]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS==ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])ON[PRIMARY]GOSETANSI_PADDINGOFFGO2•数据库关系模式如图: 2.1.5前台用例分析1.前台用例分析iii.前台系统主要分四大模块,如图:基本数据维护模块包括的主要功能模块:1)添加借阅者帐户2)修改更新借阅者帐户信息3)添加书目4)修改和更新书II信息5)添加书籍6)删除书籍如图: 修改和更新书目信息基本业务模块包含的功能:1)借书2)还书如图:(from曲女凝手…系统官理员借阅者数据库模块的功能:1)借阅信息管理2)书籍信息管理3)帐户信息管理如图: 书霜信息管理w严信息管理事帐户信息管理系统管理员(fromSt花迄扎・信息查询模块主要是查询数据库中的相关信息:1)查询书籍信息2)查询借阅者信息如图: 1.对象模型类图:图书官理员♦处理借书信息()•处理还书信息()3•顺序图1)借阅者借书查询的顺序图:图书至纟盍啓录霁面借闻者用户名、注码登录验证失败<借阅、查询 2)添加修改借阅者信息的顺序图甲户图书管理乏纟盍畀面至编管理员用户名、密码登录>验证成功验证失败<……nu:…3)添加修改书籍信息的顺序图:an囹书管理至统弄面至纟盍管理员w验证成功验证失败増加、修改或删除>4.协作图1)借阅者查询或借书协作图 2)借阅者述书的协作图:3)图书管理员更新书籍信息的协作图:囹书登录畀面系统管理员书躇 第三章系统开发及实现1.1前台系统窗体规划3.1.1系统主窗体的设计主窗体的设计用一个menustrip控件来显示菜单项,并添加一个toolstrip控件显示一些快捷按钮操作,如登录,图书查询,图书更新等操作。设计如图:3.1.2登陆窗体的设计登陆窗体直接在主窗体有调用的按钮控件,触发单击事件后弹出登录窗体,添加了两个TEXTBOX控件供用户输入登陆信息,另外用一个combox控件下拉供用户选择登陆者的角色:学生或者管理员。设计如图: 查询窗体也在主窗体中有调用按钮。这里用了连个groupbox对查询窗体划分,左边填入检索的信息:书名或者类别。在右边的groupbox中停靠了一个Datagridvicw控件,用來显示用户的检索结果。设计如图:3.1.4图书借阅窗体的设计借阅窗体也在主窗体有按钮调用。同查询窗体类似,用三个groupbox控件将整个窗体分为三块区域。左边显示当前借阅者的借阅号,以及一些textbox用來输入书籍信息和当前的时间。右上方的groupbox里添加了一个Datagridview控件,用来显示当前借阅者在图书馆的借阅记录;右下方的groupbox里添加了一个Datagridview用来显示当前图书馆的书籍信息,可方便借阅者直接选取借阅。设计如图: 1.1.5图书更新窗体的设计系统仅为管理员提供图书更新功能。其窗体被两个groupbox控件划分为两个区域,左边的groupbox里添加了一个Datagridview控件显示当前的书籍信息,可供管理员选取;右边添加了一系列的tcxtbox控件用來显示所要修改或者删除的书籍信息。设计如图:3.1.6图书入库窗体的设计系统仅为管理员提供图书入库执行权限。此窗体与图书更新窗体类似,设计如图: 3.1.7借阅信息窗体的设计借阅窗体也是仅供管理员查看的功能窗体,设计仅添加了一个datagridview来显示当前的所有借阅记录信息。下方还有个删除的功能按钮,可供管理员删除某些已经还书的借阅者的借阅记录。设计如图:3.1.8用户管理窗体的设计管理员可以在用户管理窗体对系统的借阅用户进行添加、修改和删除操作。左边添加了一系列控件显示操作的用户信息和功能按钮:添加、修改、删除、取消。右边用一个Datagridview来显示当前系统的全部借阅者信息,可供管理员直接选取某一用户修改。设计如图: 3.2.1数据库连接类的创建鉴于系统大部分操作都需要连接数据库进行修改更新,为了代码的重用,i.所以专门创建了一个DataConnection类来实现对数据库的增删改查操作。首先在项目中添加数据源后,项目中会自动生成一个APP.config的配置文件,里面存放与数据库连接所需的Datasourceo所以在DataConnection类中声明了一个静态私有的String类型成员变量用来获取App.config中得数据连接字符串。代码如下:privatestaticstringConnectString=System.Configuration.ConfigurationManager.Connectionstrings[^connectstrz,].ToString();App.config配置文件的代码如下:然后,分析各个功能窗体设计,基本形式都是用Datagridview来显示查询相应数据表的信息。所以在数据库连接类里写了一个返回DataSet类型的公有的方法publicstaticDataSetGetdatasetbysql(stringsql)形参为字符串,主要供各个功能窗体里调用。其代码内容如下:publicstaticDataSetGetdatasetbysql(stringsql){using(SqlConnectioncon=newSqlCormcction(ConncctString)){try{SqlDataAdaptcradapter=newSq1DataAdaptcr(sq1,con);DataSetda=newDataSet();adapter・Fill(da);returnda;}catch(SqlExccptionex)thrownewException(ex.Message);}}) Getdatasetbysql的方法中用了using语句,实参是创建了一个sqlconnetction对象,在结尾using语句会自动将对象释放。首先实例化一个SqlDataAdapter的对象,执行传来的sql语句。然后定义一个dataset对象,并把执行取出的数据用fill方法填充到Dataset对象中,并最后返冋。为了控制异常,用try{}catch检测异常。鉴于有些操作只是对数据库进行修改、删除和添加操作,只需要提示用户操作成功与否即可,故在数据库连接类用乂写了一个方法,该方法返iHlBool类型,可根据返回类型的真假来判断并向用户提示操作是否成功。其代码如下:publicstaticboolUpdatatable(stringsql){using(SqlConnectioncon=newSqlConnection(ConnectString)){try{con.Opcn();SqlCommandcmd=newSqlCommand(sql,con);if(cmd.ExecuteNonQuery()>0){returntrue;}elsereturnfalse;}catch(SqlExceptionex){thrownewIsxccption(cx.Mcssagc);}Updatatable方法中也是只接受传来的SQL语句,并实例化一个SQLCOMMAND对彖來执行。Z后判断cmd.ExecuteNonQuery0>0即执行后所受影响的行数。如果返回的受影响行数大于零,则表示语句执行成功,返回true。反之,执行失败,返回false.至此,DataConnection类中的两个方法已经满足系统功能的实现。之后各个功能模块可以根据操作性质调用DataConnection类中相应的方法来对数据库进行操作。DataConnection类的创建是代码得到了很大的优化。 3.3.1主窗体功能代码分析主窗体设置的多文档格式,上方两个菜单栏,toolstrip控件屮添加了许多按钮控件来供用户单击调用其他的功能窗体。运行系统初始化时,由于用户没有登录,所以将一些按钮控件和菜单列表的属性enabled默认为False,即用户无法使用这些控件。如图:-9匱书管理粟统口回西二用户昔理畫刃兰岂一一_-二登陆■图书查询c图书更新、图书倩阅用户注链像图书管理菜单,图书更新,图书借阅,用户注销,在未登录状态下都无法使用:当登录者为学生吋,将学生权限之内的使用控件提供给学生使用。如图: 因为学生只能进行查询和借阅操作,故将图书借阅按钮的enabled重新设置为true。当管理员登录时,管理员可以使用系统的任何功能操作控件。如图:在toolstrip的最右边添加了个用户注销的button,用来实现用户注销操作。具体就是设置一些按钮的enabled属性。用户注销单击事件代码如下:privatevoidtoolSb_cxit_Click(objectsendor,EventArgsc)this.toolSmbookmanage.Enabled二false;this.toolSbjJsermemage.Enabled=false;this.toolSb_update.Eneiblcd二false;this.toolSb_borrow.Enabled=false;this.toolSblogin.Enabled=true;this.toolSbexit.Enabled二false;this.toolSb_8dminlogirLEnabled=true;this.toolSm_uscrmanagc.Enabled二true;}~特别说明,为了防止同一个功能窗口被同时打开多次,在主窗体中写了一个方法来判断子窗体的状态是否己打开。代码如下:publicboolTsChi1dFrmOpen(stringefrmname){foreach(Formchildfrminthis.MdiChildren)if(childfrm.Name二二efrmname)if(childfrm.WindowState==FormWindowState.Minimized)childfrm.WindowState二FormWindowState.Normal;return true;}}returnfalse;}TsChiIdFrmOpen方法,形参传入窗体的名称,然后用foreach遍历各个窗体,查看它们的状态。如果窗体当前是打开的,状态是最小化,则将窗体设置正常状态,返回true.反之,返回false。然后在主窗体的每个窗体调用按钮代码里都做一个判断。代码如下:privatevoidtoolSbsearchClick(objectsender,EventArgse){if(IsChildFrmOpcn("Scai'chFmT)==true)return;SearchFrmsearch=newSearchFrmO;search.MdiParent=this;search.Show();}上面的代码是查询书籍按钮的单击事件代码。首先调用IsCh订dFrmOpen方法将查询书籍窗体的名字作为实参,检测查询窗体是否已经打开,如果返回真值,则return,即不用执行下面的实例化窗体操作。反之,重新实例化一个查询书籍类的对象,并将其显示给用户。在主窗体中还声明了三个成员变量:publicstaticDialogResultresult(用來标识用户是否登录成功);publicstaticstringCurrUscr(用來存放当前用户的用户名);publicstaticinttype(用来标识登录用户的角色:管理员或者学生)3.3.2登陆窗体功能代码分析在登录窗体中主耍写登录按钮的单击事件代码。首先获取用户填写的用户名和密码,并且判断用户名和密码是否不为空。这里写了一个方法判断用户名和密码输入是否合法,如果合法返回true,反之,返回false.方法的代码如下:privateboolVaiidate(){if(this.text_uname.Text!=string.Empty&&this.textupwd.Text!=string.Empty){if(this.comboBox_ustate.Text!二string.Empty)returntrue;elseMessageBox.ShowC身份不能为空!〃);returnfalse;else{McssagcBox.Show(,z用户名或密码不能为空!”);returnfalse;}}然后在登录按钮的单击事件调用上面的方法,判断合法与否。如果合法再判断用 户的角色,根据comboxH拉菜单,判断登录者是学生还是管理员。然后生成SQL语句,并到数据库做查询操作。登录按钮的单击事件代码如下:privatevoidbuttonloginClick(objectsender,EventArgse){""if(VaiidateO){stringtype=this・comboBox_ustate.Text;intutype;if(type.Equals(,z管理员〃)){utype=1;}elseutype=2;stringsql二string.Format("select*fromuserinfowhereuname=,{0}'andupwd=,{1}'andutype二'{2}'",this・tcxt_uneinic.Text・Trim(),this・tcxt_upwd・Text・Trim(),utype);DataSetda=DataConnection.Getdatasetbysql(sql);if(da.Tables[0].Rows.Count>0){McssagcBox.Show("登录成功!”);MainFrni.result=DialogResult・0K;MainFrm.type=utype;MainFnn.CuiTUser二this.text_uname.Text;this.Close();}elseMessageBox.Show(z,用户名或密码错误!“);}}登录操作调用了前面建立的数据库连接类DataConnection里的Getdatasetbysql方法,并将SQL语句传给此方法。并定义了个DataSet对彖接收返回的数据。然后判断返回数据表中的元组行数是否大于0(即判断数据库中相应的表中是否有匹配用户登录信息的数据),如果用户输入的信息与数据库用户表中有兀配的元组,则像用户弹出消息标识登录成功,然后对主窗体的公有成员变量进行赋值。并关闭登录窗口,返冋到主窗体,如果不匹配,则返冋“用户 名或密码错误”消息。3.3.3图书查询窗体功能代码分析在主窗体可以单击图书查询按钮调用查询窗体,进行图书查询操作,如图:首先要加载查询窗体,即在用户调用查询窗口时,右边默认显示当前全部的图书信息,查询窗体的加载代码如下:privatevoidSearchFrm_Load(objectsender,EventArgse)this.bookInfoTablcAdapter.Fill(this.bookLibraryDateiSct.bookInfo);DataSetds^DataConnection.Getdatasetbysql("selectdistinctbooktypefrombookinfo〃);DataTabledtable二ds.Tables[0];for(inti二0;i〈dtable.Rows.Count;i++)this.comboBox_booktype.Items.Add(dtable.Rows[i][0].ToStting()・TrimO)comboBox_booktype.Selcctcdlndex二0;comboBox_or.Selectedlndex=0;}_首先向datagridview添加数据源,显示数据库中的书籍信息。然后还要对“图书类别”标识的combox进行初始化,即定义了一个DataSet对象,调用数据库连接类中的Getdatasetbysql方法,传入SQL语句,查询图书的所有类别。并用for循环添加到combox_booktype的元素索引上。然后设置两个combox中默认显示索引号为0的元素。然后写检索按钮的单击事件代码,如下: privatevoidbutton_scarch_Click(objectsendor,EventArgsc){"-stringbookname=this.textBoxbookname.Text;stringor二this.comboBoxor.Text;stringbooktype二this.comboBoxbooktype.Text;stringsql=string.Format("select*frombookinfowherebooknamelike'%{0}%'{1}booktype二'⑵'bookname,or,booktype);DataSetda=DataConnection.Getdatasetbysql(sql);DataTabledt二da.Tables[0];this.dataGridViewsearch.DataSource二dt;}"同样,先获取用户选取或输入在左边控件里的值,并生成一条SQL查询语句,调用数据库连接类中的Getdatasetbysql方法执行,然后把执行返回的数据表填充到右边的datagridview中,向用户显示查询的图书信息。3.3.4图书借阅窗体功能代码分析仅当用户登录后才能在主窗体中进行图书借阅操作,如图:正如上图所示,左边区域为借阅信息,借阅证号在窗体加载时通过用户名从数据库查到。右边有两个datagridview,上面显示当前用户的借阅记录信息。下面的显示图书馆的全部图书信息。窗体加载代码如下:privatevoidBorrowFrmLoad(objectsender,EventArgse)//TODO:这行代码将数据加载到表“bookLibraryDataSet.bookinfo”中。您可以根据需要移动或删除它。this.booklnfoTablcAdaptcr.Fill(this.bookLibrar^^DataSct.booklnfo);DataSetda=DataConnection.Getdatasetbysql("select bookname,bookid,authorfrombookinfo");this,dataGridView_book.DataSource二da.Tables[0];DataSetds=DateiConnection.Getdatasetbysql("selectborrowidfromuserinfowhereunamc^'"+MainFrm.CurrUscr+“,“);DataTabledt=ds.Tables[0];this.textBoxborrowid.Text=dt.Rows[0][0].ToString().Trim();}代码屮tcxtbox_borrowid即标识借阅号的控件,默认设置属性readonly为trueo根据主窗体的公有成员变量curruser所记录的当前用户名从数据库中查询此用户的借阅号。右下方的用来显示图书信息的datagridview控件还支持用户点击其中一项来快捷借阅。实现代码如下;privatcvoidcbtaGridVicw_book_Cc11ContcntClick(objcctsender,DataGridViewCellEventArgse){intindex二this.deitaGridView_book.CurrentCell.RowTndex;this.tcxtBox_bookname.Text二this・dataGridView_book・Rows[index]・Cells[0]・Value.ToString()・Trim();this.textBoxbookid.Text二this.dataGridViewbook.Rows[index].Cells[1].Value.ToString().Trim();this.textBox_author.Text二this・dataGridView_book.Rows[index]・Cclls[2]・Value・ToString()・Trim();}首先方法中声明了一个int型的变量,用来获取当前用户点击的行号。然后分别把当前行的每一列的值赋值到左边的textbox控件的text中。然后最主要的功能还是借阅提交按钮。其单击事件代码如下:privatcvoidbutton_submit_Click(objcctsender,EventArgsc){stringborrowid=textBox_borrowid.Text;stringbookid二textBoxbookid.Text;DateTimedeitime=Convert.ToDatcTimcSatetime_borrowtime.Text);stringsql=string.Format(“insettintoborrowinfovalues({0},{1},,{2}>),z,bookid,borrowid,datime);if(DataConnection.Updatatable(sql))MessageBox.ShowC借阅提交成功!〃);elseMessageBox.Show(,z提交失败!“);stringsql2=〃selectbookinfo.bookneimc,bookinfo.author,bookinfo.bookid,borrowinfo,borrowid,borrowinfo,datefrombookinfo,borrowinfowherebookinfo.bookid=borrowinfo.bookidandborrowinfo.borrowid=(selectborrowidfromuserinfowhereuname二'〃+MainFrm.CurrUser+〃')〃; DataSetds=DataConnection.Getdeitasetbysql(sql2);this.dataGridVicw_borrow.DataSourcc二ds.Tables[0];}~代码中首先定义了一系列的string型变量来取得控件中的text值,这里还要对日期进行类型转换。然后牛成一条SQL语句,调用DataConnection.Updatatable方法,并通过方法的返冋值来向用户显示借阅操作的成功与否。然后再调用Gctdatasctbysql方法将当前用户的借阅记录信息取出填充到右上方的datagridview中,显示给用户。借阅操作显示如图: 3.3.5图书更新窗体功能代码分析图书更新窗体只有管理员有使用权限,当管理员登录后可以在该窗体对图书信息进行删改操作。如图:左边显示当前的图书信息。主要在窗体加载时向从数据库查询书籍信息数据表,并把返回的数据表填充到datagridviewDatagridvicw同样也写了内容单击事件,与图书查询窗体类似,当点击其中的一行时,直接把该行所有列的值赋值到右边textbox控件的text中显示。如图: 右下方有三个按钮,更新按钮的单击事件代码如下:privatevoidbutton_update_Click(objectsender,EventArgse){""stringbookname=this.textBoxbooknmne.Text;stringauthor二this.tcxtBox_author.Text;stringbooktype=this.textBox_booktype.Text;stringbookprice=this.textBoxbookprice.Text;stringbookid二this.textBoxbookid.Text;stringsql=string.Format(z/updatebookinfosetbooknanic二'{0}',booktypc二'{1}author二'{2}J,pricc={3}wherebookid二{4}〃,bookname,booktype,author,bookprice,bookid);if(DataConnection.Updatatable(sql)){MesseigeBox.Show(“更新成功!〃,“提示:〃,McssagcBoxButtons.OK);DataSetclatas=DataConnection.Getdatasetbysql("selectbookname,booktype,author,price,bookidfrombookinfo");this.dataGridViewbook.DataSource二datas.Tables[0];}~else{MessageBox.Show(,z更新失败!",”提示:",MessageBoxButtons.OK);}}在右边控件中图书编号是不允许改变的,设置readonly为true。更新操作时,生成的SQL语句就是跟军bookid图书编号来进行更新修改操作。调用的数据库连接类中的Updatatable方法,通过改方法返回的bool值向管理员提示更新操作是否执行成功。删除按钮的单击事件代码如下:privatevoidbutton_delete_Click(objectsender,EventArgse){""stringid二this.textBoxbookid.Text;DataSetda=DataCorrncction.Gctdatasctb)rsql(string.Format(^select*fromborrowinfowherebookid={0}id));if(da.Tables[0].Rows.Count>0){MessageBox.Show(z,此书已被借阅!不能删除!“);return;}else{stringsql=string.Format(z/deletefrombookinfowherebookid二{0}",id);if(DataConnection.Updatatable(sql)){ MessageBox.ShowC删除成功!“);}else{MessageBox.ShowC删除失败!“);}this.textBox_duthor.Text二〃“;this.textBox_bookid.Text=〃“;this.textBoxbookname.Text=〃“;this.textBoxbookprice.Text二〃“;this.textBox_booktype.Text二〃“;}}删除按钮单击事件代码基本上与更新按钮的类似,不同之处就是SQL语句前者是update,后者是delete。另外,iv.图书删除前还应该在借阅记录信息中检索被删除的书籍是否还有借阅记录。如果有,提示管理员〃此书已被借阅!不能删除!〃,如图: 如果该图书没有借阅记录,可以执行删除操作,删除成功后,还将右边textbox控件中的text清空。如图: 3.3.6图书入库窗体功能代码分析管理员可以届时地向系统中添加新的图书信息。如图:这里肓接将右边的datagridview控件与数据源中的图书信息数据表绑定,向管理员显示当前的全部图书信息。当管理员输入完添加的图书信息后,点击插入按钮,系统转到执行插入按钮 的单击事件代码:privatevoidbutton_insertClick(objectsender,EventArgse){""stringbooknonic二this.textBox_booknomc.Tcxt;stringauthor=this.textBox_author.Text;stringbooktype=this.textBox_type.Text;stringbookprice=this.textBox_price.Text;stringbookid=this.textBoxbookid.Text;stringsql二string.FormatCinsortintobookinfovaluesC{0}'/{1}'/{2}',{3},⑷):bookname,author,booktype,bookprice,bookid);if(DataConnection.Updatatable(sql)){McssagcBox.Show(z,插入成功!〃);}elseMessageBox.Show(,z插入失败!“);DataSetda二DataConnection.Getdatasetbysql(''Select*frombookinfo,z);this.dataGridVicw_book.DataSourcc二da.Tables[0];}~同样先获取管理员输入的图书信息,生成插入的SQL语句。调用Updatatable方法执行插入。插入成功后,还应再到数据库取一次图书信息表并填充到datagridview里,对datagridview进行刷新。3.3.7借阅信息窗体功能代码分析管理员不仅可以对书目进行增删改查,还可以查看图书的借阅情况,并根据需要删除某些借阅记录信息。如图:♦In9图予百遅炙沅1=>g用户善理图书管理退岀刚圉书更新•圉书借阐农用户注销UpdateBorrowFrm|o芥回学生借阅信息bookidborrowiddate4►9001200921022011/11/279007200921022011/11/28三9003200921012011/11/299006200921012011/11/299007200921012011/11/299001200921012011/11/29onn?onnooino■关闭刪除对学生借阅信息中的datagridview添加了内容单击事件,代码如下:privatevoiddataGridView_borrow_CellContentClick(objectsender,DataGridViewCellEventArgse)intindex二this.dataGridView_borrow.CurrentCell.Rowindex;bookid= this.dataGridViewborrow.Rows[index].Cells[0].Value.ToStringO.TrimO}其屮bookid为该窗体类设置的成员变量,用來获取当前点击所在行的借阅号。之后点击删除操作,触发删除单击事件,代码如下:privatevoidbuttondeleteClick(objectsender,EventArgse){""if(bookid二二null){MessageBox.Show(“请选取需要删除的记录!“);}else{DialogRcsultresult=MessageBox.Show(z,确认删除?"、"提示",MessageBoxButtons・YesNo);if(result==DialogResult.Yes){if(DataConnection.Updatatable(z,deletefromborrowinfowherebookid二"+bookid+"〃)){MessageBox.ShowC删除成功!“);this.dataGridViewborrow.DataSource二DataConnection.Getdatasetbysql("selectbookid,borrowid,datefromborrowinfo")・Tables[0];}else{MessageBox.Show(〃删除失败!〃);}当管理员点击删除某项借阅记录时,再次弹出提示:确认删除。当管理员单击“是”才进行删除操作,以防管理员执行了误删操作。如图: 3.3.8用户管理窗体功能代码分析在主窗体的主菜单项下拉有用户管理菜单,提供对系统用户的增删改操作。如图: 主要分析添加和删除按钮的单击事件代码。右边的datagridview显示当前系统的所有用户信息。管理员可以在左边textbox中输入用户信息,并选定用户身份(管理员或学生)进行添加用户操作,添加按钮的单击事件代码如下:privatevoidbutton_odd_Click(objectsendor,EventArgsc){""stringuname=this.textBoxuname.Text;stringupwd二this.textBoxupwd.Text;stringuid=this.textBox_borrowid.Text;stringutypc二this.comboBox_utypc.Text;intnum;if(utype.Equals("管理员")){num二1;}elsenum=2;if(Validate()){stringsql二string.Format("insertintouserinfovalues(J{0}','{1}',{2},{3})",unamc,upwd,num,uid);if(DataConnection.Updatatable(sql)){MessageBox.Show(“添加成功!〃);this.dataGridViewuser.DataSource二DataConnection.Gctdatasctbysql("selectunamc,upwd,utypc,borrowidfromuserinfo").Tables[0];this.textBoxuname.Text二〃“;this.textBoxupwd.Text二〃“;this.textBoxborrowid.Text二〃”;}"else{MessageBox.Show(“添加失败!〃);}}}首先声明一系列的变量获取到用户信息后,进行判断用户信息是否合法,这里与登录窗体中一样写了一个方法validateO来检测用户信息是否符合规定。如果输入的信息合法,则调用Updatatable()连接数据库并执行添加用户的SQL语句。并向用户提示“添加成功”。最后更新datagridview中的数据。删除按钮的单击事件代码如下:privatevoidbuttondeleteClick(objectsender,EventArgse)stringuname=this・textBox_uname.Text;if(uname==null) {MessageBox.Show(〃请选取需要删除的用户!“);}else{stringborrowid二this.textBoxborrowid.Text;DataSetda二DataConncction.Getdatasctbysql(string.Format(''select*fromborrowinfowhereborrowid={0}borrowid));if(da.Tables[0].Rows.Count>0){MessageBox.Show(〃该用户有借阅记录!不能删除!“);rcturn;}else{DialogResultresult二MessageBox.Show(z,确认删除?"、"提示",McssagcBoxButtons.YcsNo);if(result==DialogResult.Yes){if(DataConnection.Updatatable(string.Format(z,deletefromuserinfowhereuname=,{0}'",uname))){MessageBox.ShowC删除成功!“);this.dataGridView_user.DataSource二DataConnection.Getdatasetbysql("selectuname,upwd,utype,borrowidfromuserinfo")・Tables[0];this.textBox_uname.Text=this・textBoxupwd.Text=〃“;this.textBoxborrowid.Text二〃“;}"else{MessageBox.ShowC删除失败!“);}}}}}删除操作执行前应当先调用Getdatasetbysql方法查询数据库的借阅记录数据表中是否有当前用户的借阅记录,如果有,则不允许删除,并向管理员提示〃该 用户有借阅记录!不能删除!反之,才可以继续执行删除操作。并向用户返回操作执行的结果,更新datagridview中的数据。如图(用户有借阅记录人添加用户,如图: 对于修改按钮的单击事件,基本上与前面的图书更新修改窗体的修改按钮功能代码类似,在这里就不多做介绍了。至此,系统的全部功能窗体的设计以及代码分析完成。 第四章总结4.1系统开发期间的收获系统开发的最开始的系统需求分析,让我确实收获了不少知识。首先我深刻地认识到一个项目的开发,前期的需求分析十分重要,并且还接触了一些建模工具,女UIBM的rationalrose>Sybase的powerdesigner,利用这些工具极大地方便了我前期对数据库和系统功能模块的设计。系统开发中期,让我熟悉了许多C#的控件使用方法,特别是连接数据库的方法。以及让我思考并尽量地优化代码,避免产生不必要的冗余。当然,由于我个人水平有限,代码的优化还待以后进一步完善。系统开发期间,遇到错误是不可避免的,正是因为这些错误,让我熟练地掌握了如何通过调试,设置相应的断点来找出错误所在并改正的技巧。最后我还通过看书,学会了项目的打包,安装界面的设计等技术。4.2系统开发期间遇到的问题一个项目的开发期间会遇到许多不同层面的问题。我把开发期间所遇到的问题以及解决方案都记录了下来。数据库添加外码问题:当时我在给一个表中字段添加外码约束时,提示错误,最后才明口,引用约束的字段应该设置成uniqueo如果被引用的外码是主码,主码属性原本就是唯一。解决方法:先把被引用的字段添加unique约束。再到相应表中添加外码约束。系统程序问题:添加Datagridview的内容单击事件后,测试过程中有时候点击其中的一行后,系统不能获取到所点的该行信息。但有时候又能获取到所点击的该行内容。解决方法:在操作执行前,先判断用來获取datagridview点击某行内容的变量是否为空,如果为空则提示用户重新选取。之后又向老师请教,老师提出的解决方案是可以写个datagridview_cellclick方法。注销功能问题:刚开始不能根据用户角色实现注销。解决方法:仔细分析了不同角色所能执行的操作,在用户注销按钮里分别设置各个控件的enabled属性值。 参考文献:i.作者:耿肇英耿炎炎书名:C#应用程序设计教程出版社:人民邮电出版社出版吋间:2009年11月11.作者:王珊萨师煩书名:数据库系统概论出版社:高等教育出版社出版时间:2007年01月iii.作者:肖汉石彦芳书名:软件工程出版社:国防工业出版社出版时间:2009年01月iv.作者:黄胜忠书名:C#4.0从入门到精通出版社:机械工业出版社出版时间:2011年01月 附录1主窗体源代码usingSystem;usingSystem.Collections.Generic;usingSystem.ComponcntModcl;usingSystem.Data;usingSystem.Draving;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceBookLibrary{publicpartialclassMoinFnn:Form{publicstaticDialogResultresult;publicstaticstringCurrUser;publicstaticinttype;publicMoinFrm(){InitializeComponent();}publicboolIsChildFrmOpen(stringefrmname){forcach(Formchildfrminthis.MdiChildrcn){if(childfrm.Name二二efrmname){if(chi1dfrm.WindowState二二FormWindowStatc.Minimized)childfrm.WindowState=FormWindowState.Normal;returntrue;}}returnfalse;}privatevoidtoolSb_adniinlogin_Click(objectsender,EventArgse){if(IsChildFrmOpcn("LoginFoT)二二true)return;LoginFrmLoginl=newLoginFrmO;Loginl.ShowDialogO;if(result二二DialogResult.OK)if(type==1){ toolSmbookmanage.Enabled二true;toolSbjjpdate.Enabled=true;toolSb_borrow.Enablcd二true;toolSb_usermanage.Enabled=true;toolSbadminlogin.Enabled=false;toolSblogin.Enabled二false;}"else{toolSbborrow.Enabled=true;toolSblogin.Enabled二false;toolSmusermanage.Enabled=false;}"toolSb_exit.Enabled=true;}"}privatevoidtoolSb_login_Click(objectsendor,EventArgsc){if(IsChildFrmOpen("LoginFriiT)二二true)return;LoginFrmLogini二newLoginFrmO;Logini.ShowDialogO;if(result==DialogRcsult.OK){if(type==1){toolSmbookmanage.Enabled=true;toolSb_updeitc・Enablcd二true;toolSb_borrow.Enabled=true;toolSblogin.Enabled=false;}"else{toolSb_borrow.Enabled=true;toolSblogin.Enabled=false;toolSmusermanage.Enabled二false;}"toolSb_cxit.Eneiblcd二true;}"elsereturn;privatevoidtoolSb_search_Click(objectsender,EventArgse)if(TsChi1dFrmOpen(〃SearchFrm〃)==true)return;ScarchFrmsearch二newScarchFrmO;search.MdiParent=this;search.Show();}privatevoidtoolSm_cxit_Click(objectsendor,EventArgsc){Application.Exit();} privatevoidtoolSb_cxit_Click(objectsendor,EventArgsc)this.toolSmbookmanage.Enabled二false;this.toolSb—Usermanage.Enabled=false;this.toolSb_updatc.Eneiblcd二false;this.toolSb_borrow.Enabled=false;this.toolSblogin.Enabled=true;this.toolSbexit.Enabled二false;this.toolSb_3dminlogin・Enabled=true;this.toolSm_uscrmaneigc.Eneiblcd二true;}_privatevoidtoolSbborrowClick(objectsender,EventArgse){""if(IsChildFrmOpcn("BorrowFoT)二二true)rcturn;BorrowFrmborrow=newBorrowFrmO;borrow.MdiParent=this;borrow.Show();}privatevoid图书入库ToolStrip'lenuItem_Click(objectsender,EventArgse){if(TsChi1dFrmOpen(〃TnsertFrm〃)二二true)return;InsertFnninser二newInscrtFrmO;inser.MdiParent=this;inser.Show();privatevoid借阅信息ToolStrip'lenuItem_Click(objectsender,EventArgse){if(TsChiIdFrmOpen(zzUpdateBorrowFrmz/)==true)return;UpdatcBorrowFrmupdate二newUpdatcBorrowFrm();update.MdiParent=this;update.Show();}privatevoid图书更新ToolStripMcnuItcm_Click(objcctsendor,EventArgse){if(IsChildFrmOpen(〃UpdataFmT)二二true)return;UpdateFrmupdate=newUpdateFrmO;updatc.MdiPeircnt二this;update.Show();} privatevoidtoolSb_usermanage_Click(objectsender,EventArgse){if(IsChiIdFrmOpen(z/UserManageFrm/z)二二true)return;UserManageFrmusermanage二newUserManageFrm();usermanage.MdiParent二this;usermaneigc.Show();}privatevoidtoolSbupdateClick(objectsender,EventArgse){""if(IsChildFrmOpcn("UpdataFnir)二二true)return;UpdateFrmupdate=newUpdateFnn();update.MdiParent=this;update.Show();附录2数据库连接类DataConnection源代码usingSystem;usingSystem.Collections.Gencric;usingSystem.Linq;usingSystem.Text;usingSystem.Configuration;usingSystem.Data;usingSystem.Data.SqlClient;namespaceBookLibrary{classDataCorrncction{privatestaticstringConnectString=System.Configuration.ConfigurationManager.ConnectionStrings[〃connectstr〃]・ToStringO;publicstaticDataSctGetdatasctbysql(stringsql){using(SqlConnectioncon=newSqlConnection(ConnectString)){try{SqlDataAdapteradapter=newSqlDataAdapter(sql,con);DataSetda=newDataSet();adapter.Fill(da);returnda; }catch(SqlExceptionex){thrownewExccption(ex.Message);}}}publicstaticboolUpdatatable(stringsql){using(SqlConnectioncon=newSqlConnection(ConnectString))try{con.Open();SqlCommandemd二newSqlCommand(sql,con);if(cmd.ExecuteNonQuery()>0)returntrue;}elsereturnfalse;}catch(SqlExceptionex)thrownewException(ex.Message);附录3登录窗体源代码usingSystem;usingSystem.Collections.Generic;usingSystem・ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem・Windows.Forms;namespaceBookLibrary{publicpartialclassLoginFrm:Form {publicLoginFrm(){InitializcComponcnt();privatevoidbutton_login_Click(objectsender,EventArgse){""if(ValidateO){stringtype=this.comboBoxustate.Text;intutype;if(type.Equals(,z管理员〃)){utype=1;}elseutype二2;stringsql=string.Format(,zselect*fromuserinfowhereuname="{0}'andupwd」{1}'andutype="{2}'this.text_uname.Text.Trim(),this.text_upwd.Text.Trim(),utype);DataSetda二DataConnection•Getdatasetbysql(sql);if(da.Tables[0].Rows.Count>0)MessageBox.Show(”登录成功!“);MainFrm.result二DialogResult.OK;MainFrm.type=utype;MainFrm.CurrUser二this•tcxt_unamc.Text;this.Close();}elseMessageBox.Show(,z用户名或密码错误!〃);}}privateboolValidate(){if(this.text_uname.Text!二string.Empty&&this•text_upwd.Text!二string.Empty){if(this.comboBox_ustate.Text!=string.Empty)returntrue;else{MessageBox.Show("身份不能为空!〃);returnfalse;}}else{MessageBox.Show(z,用户名或密码不能为空!“);returnfalse; }}privatevoidbutton_c3nccl_Click(objectsendor,EventArgsc){""MainFrm.result=DialogResult.No;this.Close();}privatevoidLoginFrm_Load(objectsender,EventArgse){"this.comboBoxustate.SelectedIndex二0;附录4查询窗体源代码usingSystem;usingSystem.Collections.Generic;usingSystem.ComponcntModcl;usingSystem.Data;usingSystem.Draving;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceBookLibrary{publicpartialclassSearchFrm:Form{publicSearchFrm(){InitializeComponent();}privatevoidSearchFrmLoad(objectsender,EventArgse)this.booklnfoTablcAdaptcr.Fill(this.bookLibrar^^DataSct.booklnfo);DataSetds^DataConnection.Getdatasetbysql("selectdistinctbooktypefrombookinfo");DataTabledtable二ds.Tables[0];for(inti二0;i〈dtable.Rows.Count;i++){this.comboBoxbooktype.Items.Add(dtable.Rows[i][0].ToString().Trim()) }comboBox_booktypc.Sclcctcdlndcx二0;comboBox_or.Selectedlndex=0;}"privatevoidbutton_search_Click(objectsender,EventArgse){""stringbookname=this.textBox_bookname.Text;stringor=this.comboBoxor.Text;stringbooktype二this.comboBoxbooktype.Text;stringsql=string.Format(z,select*frombookinfowherebooknamelike'%{0}%'{1}booktype=,{2}'bookname,or,booktype);DataSetda二DataConnection.Getdatasetbysql(sql);DataTabledt二da.Tables[0];this.dataGridView_search.DataSource=dt;privatevoidbutton_cancel_Click(objectsender,EventArgse){""this.CloseO;附录5图书借阅窗体源代码usingSystem;usingSystem・Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namcspaccBookLibrory{publicpartialclassBorrowFrm:Form{publicBorrowFrm(){InitializeComponent();}privatevoidbutton_submit_Click(objectsender,EventArgse) {""stringborrowid=textBox_borrovid.Text;stringbookid=textBoxbookid.Text;DateTimedatime二Convert.ToDateTime(datetime_borrowtime.Text);stringsql二string.Format("insortintoborrowinfovalues({0},{1}/{2},)z,,bookid,borrowid,datime);if(DataConnection.Updatatable(sql))MessageBox.Show(〃借阅提交成功!“);elseMessageBox.Show(,z提交失败!“);//stringsql3二〃selectbookinfo,bookname,bookinfo,author,bookinfo,bookid,borrowinfo,borrowid,borrowinfo,deitcfrombookinfo,borrowinfowherebookinfo,bookid二borrowinfo.bookicT;stringsql2="selectbookinfo,bookname,bookinfo,author,bookinfo,bookid,borrowinfo,borrowid,borrowinfo,datefrombookinfo,borrowinfowherebookinfo.bookid=borrowinfo,bookidandborrowinfo,bonrowid二(sclcctborrowidfromuserinfowhereuname=,,z+MainFrm.CurrUser+〃,)〃;DataSetds二DataConnection.Getdatasetbysql(sql2);this.dataGridViewborrow.DataSource二ds.Tables[0];}~privatevoidBorrowFrmLoad(objectsender,EventArgse){"//TODO:这行代码将数据加载到表"bookLibraryDataSet.bookinfo”中。您可以根据需要移动或删除它。this.booklnfoTableAdapter.Fill(this.bookLibraryDataSet.bookinfo);DataSetda=DataConnection.Getdatasetbysql("selectbookname,bookid,authorfrombookinfo〃);this.dataGridView_book.DataSource=da.Tables[0];DataSetds二DataConncction.Getdatasctbysql(〃sclcctborrowidfromuserinfowhereuname=,"+MainFrm.CurrUser+“);DataTabledt=ds.Tables[0];this.textBoxborrowid.Text二dt.Rows[0][0].ToStringO.Trim();}privatevoiddataGridView_book_CellContentClick(objectsender, DataGridViewCellEventArgse){intindex二this.dataGridVicw_book.CurrcntCclLRowIndex;this.textBox_bookname.Text=this・dataGridViewbook.Rows[index]・Cells[0].Value.ToString()・TrimO;this.textBoxbookid.Text二this,dataGridViewbook.Rows[index].Cells[l].Value.ToStringO.Trim();this.textBox_duthor.Text二this.dataGridView_book・Rows[index]・Cells[2]・Value.ToString()・TrimO;privatevoidbutton_cancel_Click(objectsender,EventArgse){""this.Close();}附录6用户管理窗体源代码usingSystem;usingSystem.Collections.Gencric;usingSystem.ComponentModel;usingSystem・Datn;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceBookLibrary{publicpartialclassUscrManagcFnn:Form{publicUserManageFrmO{TnitializeComponent();}privatevoidUserManageFrmLoad(objectsender,EventArgse){"DataSetda=DateiConnection.Getdatasetbysql("selectunamc,upwd,ut}^pc,borrowidfromuserinfo〃); this.dataGridView_user・DataSource=da.Tables[0];this.comboBoxutype.Selectedlndex=0;}"privatevoidbutton_odd_Click(objectsendor,EventArgsc){""stringuname=this.textBoxuname.Text;stringupwd二this.textBoxupwd.Text;stringuid=this.textBox_borrowid.Text;stringutypc二this.comboBox_utypc.Text;intnum;if(utype.Equals("管理员"))elsenum=2;if(ValidateO){stringsql二string.Format(〃inscrtintouscrinfovalues(,{0}','⑴’,{2},{3})",uname,upwd,num,uid);if(DataConnection.Updatatable(sql)){MessageBox.ShowC添加成功!“);this.dataGridView_uscr.DataSource二DataConnection.Getdatasetbysql("selectuname,upwd,utype,borrowidfromuserinfo")・Tables[0];this.textBox_uname.Text二〃〃;this.textBox_upwd.Text二〃“;this.textBox_borrowid.Text二〃“;}~else{MessageBox.Show("添加失败!〃);}privateboolVaiidate(){if(this.textBox_uname-Text!=string.Empty&&this.textBoxupwd.Text!=string.Empty)if(this.comboBox_utype-Text!=string.Empty)returntrue;else{MessageBox.ShowC身份不能为空!“);returnfalse;}} else{MessageBox.Show(〃用户名或密码不能为空!“);returnfalse;privatevoidbutton_delete_Click(objectsender,EventArgse)stringuname=this.textBoxuname.Text;if(uname==null){McssagcBox.Show(,z请选取需要删除的用户!”);}else{stringborrowid=this.textBox_borrowid.Text;DataSetda二DataConnection.Getdatasetbysql(string.Format("select*fromborrowinfowhereborrowid={0}/z,borrowid));if(da.Tables[0].Rows.Count>0){MessageBox.Show(z,该用户有借阅记录!不能删除!”);return;}else{DialogRcsultresult=MessageBox.Show(〃确认删除?〃提示〃,MessageBoxButtons.YesNo);if(result二二DialogResult.Yes){if(DataConncction.Updatatoblc(string.Format(,zdclctcfromuserinfowhereuname="{Of:uname))){MessageBox.ShowC删除成功!“);this.dataGridView_user.DataSource二DataCorrncction.Getdatasetbysql("selectuname,upwd,utypc,borrowidfromuserinfo,z).Tables[0];this.textBoxuname.Text=〃“;this.textBox_upwd.Text二〃“;this.textBox_borrowid.Text二〃“;}"else{ MessageBox.ShowC删除失败!“); privatevoiddataGridView_user_Ce1IContentClick(objectsender,DataGridViewCe11EventArgse){intindex=this.dataGridView_user.CurrentCel1.RowTndex;this.textBox_uname.Text二this.dataGridView_user・Rows[index]・Cells[0]・Value.ToString()・TrimO;this.textBoxupwd.Text=this,dataGridView_user.Rows[index].Cells[1].Value.ToString().Trim();inttype二Convcrt.Tolnt32(this.dataGridVicw_uscr.Rows[index]•Cells[2]•Value.ToString()・TrimO);if(type==1){this.comboBoxutype.Text二〃管理员〃;}else{this.comboBoxutype.Text二〃学牛〃;}"this.textBox_borrowid.Text二this.dataGridView_user・Rows[index]・Cells[3]・Value.ToString()・TrimO;}"privatevoidbutton_update_Click(objectsender,EventArgse){stringuname=this,textBoxjjnanie.Text;stringupwd=this.textBoxupwd.Text;stringuid二this.textBox_borrowid.Text;stringutype=this.comboBox_utype.Text;intnum;if(utype.Equals管理员〃)){num=1;}elsenum二2;if(ValidateO){stringsql二string.Format(〃upda.teuserinfosetuname=,{0}',upwd=,{1}utype={2}whereborrowid={3}/z,uname,upwd,num,uid);if(DataConnection.Updatatable(sql))MessageBox.Show(,z修改成功!〃);this.dataGridViewuser.DataSourceDataConnection.Getdatasetbysql ("selectuname,upwd,utype,borrowidfromuserinfo")・Tables[0];this.textBox_uname.Text二〃“;this.textBox_upwd.Text二〃“;this.textBox_borrowid.Text二〃“;}~else{MessageBox.ShowC修改失败!“);1jprivatevoidbutton_close_Click(objectsender,EventArgse){""this.Close();}}}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭