医院药房信息管理系统的设计与开发_第1页
医院药房信息管理系统的设计与开发_第2页
医院药房信息管理系统的设计与开发_第3页
医院药房信息管理系统的设计与开发_第4页
医院药房信息管理系统的设计与开发_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊安徽大学毕业设计(论文)说明书共55页第系统详细设计6.1系统界面设计界面设计是为了满足软件专业化标准化的需求而产生的对软件的使用界面进行美化优化规范化的设计分支。具体包括软件启动封面设计,软件框架设计,按钮设计,面板设计,菜单设计,标签设计,图标设计,滚动条及状态栏设计,安装过程设计,包装及商品化。在设计的过程中有较多注意的关键问题。这是一个越来越注重包装的社会,一切具有魅力的事物总让人无法抗拒。这就是为什么出色的外观设计对于服装、电子、日用品、食品等等几乎所有商品的销售与推广,都起着举足轻重的作用的原因。软件行业也不例外,外观靓丽,用户浏览起来赏心悦目,这对软件产品的销售无疑起着巨大的推动作用。世界上成功的软件公司都非常重视软件界面的美化设计,因此,他们深刻了解在激烈的市场竞争中,仅仅有强大的功能是远远不够的,好的界面设计和用户体验会为产品增色不少,我们看微软的win2000,winXP等等哪一个不是界面设计精良,易用;我们再看看国内做得很成功的金山词霸的界面,从金山词霸3.0到金山词霸2001的界面设计变化堪称经典。我们在界面设计保持了界面的一致性,既包括实用实用标准的控件,也指实用相同的信息表现方法,如在字体、标签风格、颜色、术语、显示错误信息等方面保持了一致。我们应尽量做到界面美观实用,人性化,富有创造性。美丽的界面能够让用户比较容易接受我们的软件,对我们的软件实施和推广带来了极大的方便。本着友好、易用的原则,本系统的主界面由菜单和工作区组成,在屏幕的上方为主菜单区,显示本系统功能模块的主菜单。图示如下:图6.1菜单当用户通过菜单选择了所要进行的工作后,系统进入相应的处理功能,这时整个处理活动将在屏幕的中间区域——工作区进行。当用户的需求得到满足并将信息处理完毕后,系统将自动返回到进入处理之前的原始菜单显示状态。有以下几点设计原则:1、界面友好,对输入的信息一目了然,对错误的输入有提示信息。2、应尽量增加键盘快捷键,便于用户的操作,加强可操作性。6.2系统的模块描述6.2.1用户登入模块主要完成用户登录的功能,将用户名录入登陆口中。如果医护人员想要查看医院药品的基本信息,就必须登录。登录时必须正确填写用户名和密码。如果没有用户名或密码不正确,则不能完成登录界面与主界面之间的连接。输入已经存在的用户名和正确的密码,点击确定按钮,就会连接到数据库,如果数据正确,就会连接到系统的主界面,如果输入有误,则不能完成与主界面的连接。单击“退出”按钮,则会退出本系统。图6.2.1用户登录界面连接数据库的具体代码实现如下://指定连接字符串stringsqlstr="DataSource=XP-200910122019;InitialCatalog=Hospital_EMR2005;UserID=sa;Password=123456";//实例化SqlConnection对象并进行返回SqlConnectionmyconn=newSqlConnection(sqlstr);returnmyconn;6.2.2修改密码模块主要的用途就是:医护人员可以修改自己的密码,使用户根据需要设置简便易记忆的密码,同时能防止因密码泄露而对系统的安全性带来危害和影响,这在一定程度上对系统的安全性加以了保护。图6.2.2修改密码更新用户登入表中用户登入密码的具体代码实现如下:stringstr="UpdateSys_Userloginsetpassword='"+textRealPassWord.Text.Trim()+"'whereUserid='"+textUserId.Text.Trim()+"'";myoperate.getcom(str);//执行Update语句6.2.3增加用户的模块实现主要思想:在主窗口的基本信息栏中,用户管理的下拉框下选择增加用户来实现,该增加用户窗口最主要的功能是用来登录入药品管理系统时,管理员可根据需要添加新的登录用户并设置其基本信息,同时也方便我们查询已存在医护人员的一些基本登录信息,图示如下:图6.2.3增加用户对用户登入表操作增加用户部分代码实现如下:SqlDataReadersqlread=myoperate.getread("selectUserId用户编号,Userename用户登入名,Username用户姓名,Password密码,UserRole用户权限,DepartName所属部门fromSys_Userlogin"+"whereUserename='"+TxtUserename.Text.Trim()+"'");//读取SqlDataReadersqlread.Read();查询并显示已存在医护人员信息的部分代码实现如下://获取医护人员信息DataSetmydataset=myoperate.getds("selectUserId用户编号,Userename用户登入名,Username用户姓名,Password密码,UserRole用户权限,DepartName所属部门fromSys_UserloginwhereUserenamelike'"+"%"+TxtUserName.Text.Trim()+"%"+"'orUsernamelike'"+"%"+TxtUserName.Text.Trim()+"%"+"'","用户信息表");this.DGVUser.DataSource=mydataset.Tables[0];6.2.4医护人员信息查询模块的实现主要功能是根据输入医护人员的编号或者姓名对其一些基本信息进行查询,同时在表格中显示其相应的具体信息。图示如下:图6.2.4医护人员信息查询查询医护人员信息的部分代码实现如下://获取医护人员信息DataSetmydataset=myoperate.getds("selectDoctorId医护编号,DoctorName医护姓名,sex性别,Certification身份证,BirthDay出生日期,WorkTime工作时间,DepartName科室,Phone联系方式,Rank医护职称fromSys_DoctorwhereDoctorIdlike'"+"%"+textDoctorId.Text.Trim()+"%"+"'orDoctorNamelike'"+"%"+textDoctorId.Text.Trim()+"%"+"'","医护人员信息表");this.DGVDoc.DataSource=mydataset.Tables[0];5.2.5药品类别设置模块的实现药品类别设置模块的主要功能是具体查看药品的总类别,以及各类别下的子类别,它以树形和图表的形式显示出来,简明清晰。同时还可以根据需要增加或者删除某些药品类别。图示如下:图6.2.5药品类别设置查询药品分类信息的部分代码实现如下:stringsqll="SelectDrugClassIdfromDrug_ClasswhereDrugClassNamelike'"+textDrugClassId.Text+"'";SqlDataReadersqlread=myoperate.getread(sqll);sqlread.Read();//读取SqlDataReaderif(sqlread.HasRows){stringsqlsr="selectDrugClassName药品类别fromDrug_Classwhere(DrugClassIdlike'"+sqlread["DrugClassId"].ToString()+"___"+"')";DataSetmyds1=myoperate.getds(sqlsr,"药品名称");DGVDrugClass.DataSource=myds1.Tables["药品名称"];}6.2.6药品设置模块实现药品设置的实现:根据树形目录中所选择的药品的类别,可以查询其所对应的药品详细信息。同时根据用户输入的药品名,可以查看该药品的详细信息。同时可以使用户根据需要新增某类别下的药品,也可以删除某类别中的药品。图示如下:图6.2.6药品设置查询药品信息的部分代码实现如下:stringsqll="selectDrugCode编码,DrugName药品名称,DrugClass药品类别,DrugKind规格,Unit单位,MedicareType医保类别,MinEndAmount最小库存量,Maker录入者,MakeDate录入日期fromDrugwhereDrugCodelike'"+textDrugCode.Text.Trim()+"'orderbyDrugClassId,DrugCode";DataSetmyds1Drug=myoperate.getds(sqll,"Drug");dGVDrug.DataSource=myds1Drug.Tables["Drug"];保存药品信息的部分代码实现如下://先删除后增加//删除myoperate.getcom("deleteDrugwhereDrugClass='"+dGVDrug.CurrentRow.Cells["药品类别"].Value.ToString().Trim()+"'");//增加for(inti=0;i<dGVDrug.RowCount-1;i++{myoperate.getcom("insertintoDrug(DrugCode,DrugName,DrugClass,DrugClassId,DrugKind,Unit,MedicareType,MinEndAmount,Maker,MakeDate)"+"values('"+dGVDrug.Rows[i].Cells["编码"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["药品名称"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["药品类别"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["药品类别"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["规格"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["单位"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["医保类别"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["最小库存量"].Value+"','"+dGVDrug.Rows[i].Cells["录入者"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["录入日期"].Value.ToString().Trim()+"')");}5.2.7药房药品库存统计模块的实现药品设置的实现:根据树形目录中所选择的药品的类别,可以查询其所对应的药房库存药品的详细信息。同时也可根据用户输入的药品名称和批号,可以查看库存中国该药品的详细信息。图示如下:图6.2.7药房药品库存统计查询库存药品信息的部分代码实现如下://标记有效期if(DataGridView1.Rows[i].Cells["有效期"].Value!=DBNull.Value){DateTimedt=newDateTime();dt=Convert.ToDateTime(DataGridView1.Rows[i].Cells["有效期"].Value.ToString().Trim());TimeSpants=dt-DateTime.Now;if(DateTime.Compare(dt,DateTime.Now)<0){DataGridView1.Rows[i].DefaultCellStyle.BackColor=Color.Red;}elseif(ts.Days<90){DataGridView1.Rows[i].DefaultCellStyle.BackColor=Color.Yellow;}}6.2.8药品购买信息录入模块的实现根据用户需要选择药品去向、销售公司,用户可以输入药品名称来检索药品,选中要录入的药品按回车键或双击后相应的信息,会自动填入入库药品录入栏中对于的各项,同时也根据用户需要填写数量、有效期等信息。同时可根据入库单号来查询已入库的药品信息。图示如下:图6.2.8药品购买信息录入在本模块和后面的药品调拨模块中,涉及到了对数据库的更新,删除等一系列操作,在此我主要用到了一些存储过程来帮我们完成这些相应操作。存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是SQL语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。它存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。因此采用存储过程这种方式来解决问题是由它的一些优点决定的:1.建立过程不会很耗系统资源,因为过程只是在调用才执行。2.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。3.存储过程可以用于降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。4.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。5.存储过程可以重复使用,可减少数据库开发人员的工作量6.可维护性高,更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。7.代码精简一致,一个存储过程可以用于应用程序代码的不同位置。8.增强安全性:a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问;b、提高代码安全,防止SQL注入(但未彻底解决,例如,将数据操作语言--DML,附加到输入参数);下面介绍本模块一些主要存储过程的实现代码:实现退库UpdateDrugIn的存储过程主要代码如下所示:declarecurcursorforselectDrugCode,DrugKind,PiHao,InAmount,DrugId,DrugName,DrugeName,Unit,InPrice,Ratio,OutPrice,Producer,SupName,DrugClass,MedicareType,ApprovalNo,GMP,InDate,ExpiryDate,PharmacyNamefromDrug_InwhereInvoiceNo=ltrim(rtrim(@invoiceno))orderbyDrugCode,DrugKind,PiHaoopencur/*逐一获取药品编号、规格、批号、数量...*/fetchnextfromcurinto@drugcode,@drugkind,@pihao,@sumsl,@drugid,@drugname,@drugename,@unit,@inprice,@ratio,@outprice,@producer,@supname,@drugclass,@medicaretype,@approvalno,@gmp,@intime,@expirydate,@pharmacynamewhile@@fetch_status=0beginset@drugcode=ltrim(rtrim(@drugcode))set@drugkind=ltrim(rtrim(@drugkind))set@pihao=ltrim(rtrim(@pihao))set@outprice=ltrim(rtrim(@outprice))set@approvalno=ltrim(rtrim(@approvalno))set@supname=ltrim(rtrim(@supname))ifexists(selectDrugCode,DrugKind,PiHao,ApprovalNofromDrug_StockwhereDrugCode=ltrim(rtrim(@drugcode))andDrugKind=ltrim(rtrim(@drugkind))andPiHao=ltrim(rtrim(@pihao))andOutPrice=ltrim(rtrim(@outprice))andApprovalNo=ltrim(rtrim(@approvalno))andSupName=ltrim(rtrim(@supname)))/*更新结存*/beginupdateDrug_StocksetEndAmount=EndAmount+@sumslwhereDrugCode=ltrim(rtrim(@drugcode))andDrugKind=ltrim(rtrim(@drugkind))andPiHao=ltrim(rtrim(@pihao))andOutPrice=ltrim(rtrim(@outprice))andApprovalNo=ltrim(rtrim(@approvalno))andSupName=ltrim(rtrim(@supname))endelseifnotexists(selectDrugCode,DrugKind,PiHao,ApprovalNofromDrug_StockwhereDrugCode=ltrim(rtrim(@drugcode))andDrugKind=ltrim(rtrim(@drugkind))andPiHao=ltrim(rtrim(@pihao))andOutPrice=ltrim(rtrim(@outprice))andApprovalNo=ltrim(rtrim(@approvalno))andSupName=ltrim(rtrim(@supname)))/*新增条目*/begin/*通过参数提取当前游标所在行的值,添加到库存表*/INSERTINTODrug_Stock(DrugId,DrugCode,DrugName,DrugeName,DrugKind,PiHao,Unit,InPrice,Ratio,OutPrice,EndAmount,Producer,Supname,DrugClass,MedicareType,ApprovalNo,GMP,InTime,ExpiryDate,PharmacyName)values(@drugid,@drugcode,@drugname,@drugename,@drugkind,@pihao,@unit,@inprice,@ratio,@outprice,@sumsl,@producer,@supname,@drugclass,@medicaretype,@approvalno,@gmp,@intime,@expirydate,@pharmacyname)end/*获取下一药品编号、规格、批号、数量...*/ endclosecurdeallocatecur6.2.9药品调拨模块的实现首先点击录入按钮,将会生成本次出库的药品单号,可选择领料部门,在药品名称方框中输入要查询的库存药品,同时键入回车键,将在库存药品中显示库存中药品的一些详细信息,选中所要调拨的药品按下回车或是双击该药品,此药品讲进入出库药品栏中,填写该药品的数量,按回车将会自动生成此次出库的总金额,同时在出库药品框的下方药费合计方框中,将显示此次出库药品的总金额,点击保存此药品讲进入出库表中,出库状态表中的状态字段设置为出库,同时执行减药品库存表中减库存数量操作。也可以点击删除按钮删除此出库药品栏中选中的药品,或者是在保存进入出库表后,点击退药按钮,将此次出库药品从出库表中的状态字段设置为退库,同时执行加库存操作。图示如下:图6.2.9药品调拨实现退药TuiYao的存储过程主要代码如下所示:declarecurcursorforselectDrugCode,DrugKind,PiHao,ApprovalNo,OutAmountfromDrug_OutwhereBillId=ltrim(rtrim(@billid))orderbyDrugCodeopencurfetchnextfromcurinto@drugcode,@drugkind,@pihao,@approvalno,@sumsl/*逐一获取药品编号、批号、数量*/while@@fetch_status=0beginset@drugcode=ltrim(rtrim(@drugcode))set@drugkind=ltrim(rtrim(@drugkind))set@pihao=ltrim(rtrim(@pihao))set@approvalno=ltrim(rtrim(@approvalno))/*更新结存*/updateDrug_StocksetEndAmount=EndAmount-@sumslwhereDrugCode=ltrim(rtrim(@drugcode))andDrugKind=ltrim(rtrim(@drugkind))andPiHao=ltrim(rtrim(@pihao))andApprovalNo=ltrim(rtrim(@approvalno))fetchnextfromcurinto@drugcode,@drugkind,@pihao,@approvalno,@sumsl/*获取下一药品编号、批号、数量*/endclosecurdeallocatecur实现更新库存UpdateDrugStock的存储过程主要:declarecurcursorforselectDrugCode,DrugKind,PiHao,ApprovalNo,OutAmountfromDrug_OutwhereBillId=ltrim(rtrim(@billid))orderbyDrugCodeopencurfetchnextfromcurinto@drugcode,@drugkind,@pihao,@approvalno,@sumsl/*逐一获取药品编号、批号、数量*/while@@fetch_status=0beginset@drugcode=ltrim(rtrim(@drugcode))set@drugkind=ltrim(rtrim(@drugkind))set@pihao=ltrim(rtrim(@pihao))set@approvalno=ltrim(rtrim(@approvalno))/*更新结存*/updateDrug_StocksetEndAmount=EndAmount-@sumslwhereDrugCode=ltrim(rtrim(@drugcode))andDrugKind=ltrim(rtrim(@drugkind))andPiHao=ltrim(rtrim(@pihao))andApprovalNo=ltrim(rtrim(@approvalno))fetchnextfromcurinto@drugcode,@drugkind,@pihao,@approvalno,@sumsl/*获取下一药品编号、批号、数量*/endclosecurdeallocatecur6.2.10药品有效期模块的实现可选择查看失效药品的种类,同时可选择查看到某个日期截止的失效药品信息。图示如下:图6.2.10失效药品查询6.2.11月出库药品数量统计模块对于某年每月的药品出库数量进行统计并以折线图形界面的形式显示出来。主要研究目的是:通过对各月份某种药品的出库数量,我们可以研究某些疾病如流感的发病高峰期,及时做好预防和库存药品补充的工作。其界面图如下:图6.2.11月出库金额统计具体使用到得一些画图函数如下所示:Bitmapbmap=newBitmap(500,500)/定义图像大小;

bmap.Save(stream,imagecodecinfo)/将图像保存到指定的输出流;

Graphicsgph/定义或创建gdi绘图对像;

PointFcpt/定义二维平面中x,y坐标;

DrawString(string,font,brush,ponitf)/用指定的brush和font对像在指定的矩形或点绘制指定的字符串;

DrawLine(pen,ponit,ponit)/用指定的笔(pen)对像绘制指定两点之间直线;

DrawPolygon(pen,ponit[])/用指定的笔(pen)对像绘制指定多边形,比如三角形,四边形等等;

FillPolygon(brush,ponit[])/用指定的刷子(brush)对像填充指定的多边形;

DrawEllipse(pen,x,y,width,height)/用指定的笔绘制一个边框定义的椭圆;

FillEllipse(brush,x,y,width,height)/用指定的刷子填充一个边框定义的椭圆;

DrawRectangle(pen,x,y,width,height)/用指定的笔绘制一个指定坐标点、宽度、高度的矩形;DrawPie(pen,x,y,width,height,startangle,sweepangle)/用指定的笔绘制一个指定坐标点、宽度、高度以及两条射线组成的扇形;6.2.12月出库药品金额统计模块对于某年每月的药品出库金额总数进行统计并以折线图形界面的形式显示出来。其界面图如下:图6.2.12月出库金额统计7软件测试和维护7.1软件测试7.1.1软件测试的概念随着软件应用领域越来越广泛,其质量的优劣也日益受到人们的重视。质量保证也是软件开发的重要关卡,软件测试工作是软件质量保证的基本手段之一。软件测试就是在软件交付用户使用或投入运行前,对软件需求规格说明、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。软件测试是为了发现错误而执行程序的过程。软件测试在软件生命周期中横跨两个阶段:通常在编写出每一个模块之后就需要对它做必要的测试(称为单元测试)。编码和单元测试属于软件生命周期中的同一个阶段。在结束这个阶段后对软件系统还要进行各种综合测试,如集成测试、系统测试、性能测试和配置测试等,这是软件生命周期的另一个独立阶段,即测试阶段。软件测试的基本原则:(1)尽早地、不断地进行软件测试。(2)设计测试用例时,要给出测试的预期结果。(3)开发小组和测试小组分开。(4)要设计非法输入的测试用例。(5)在对程序修改之后要进行回归测试。(6)程序中尚未发现的错误的数量往往与在该段程序中已发现的错误的数来那个成正比。7.1.2软件测试的目的1、测试的最终目的是为了避免错误的发生,确保应用程序能够正常高效的运行; 2、好的测试用例在于发现至今未发现的错误; 3、成功的测试是发现了至今未发现的错误的测试;4、好的测试工程师应该做到不仅发现问题,还能够帮助开发人员分析问题.换言之,测试的目的是想以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷。如果我们成功地实施了测试,我们就能够发现软件中的错误。测试的附带收获是,它能够证明软件的功能和性能与需求说明相符合。实施测试收集到的测试结果数据为可靠性分析提供了依据。测试不能表明软件中不存在错误,它只能说明软件中存在错误。大量统计资料表明,软件测试的目的是为了发现尽可能多的缺陷,不是为了说明软件中没有缺陷。其次成功的测试在于发现了迄今尚未发现的缺陷。所以测试人员的职责是设计这样的测试用例,它能有效地揭示潜伏在软件里的缺陷。7.1.3软件测试的方法黑盒测试:黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。黑盒测试方法主要有等价类划分、边值分析、因—果图、错误推测等,主要用于软件确认测试。“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。白盒测试:白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。7.1.4项目测试的过程黑盒测试过程运行程序后进入登录窗体,输入用户名和密码以后进入主界面,在主界面中点击菜单栏进入各功能模块,对其的一些查看、修改、增加、删除等功能按钮进行测试,经测试各模块基本功能均能实现要求。。白盒测试过程在这么多测试当中,选取药品信息模块的测试来进行具体分析。在测试的过程中出现保存错误,错误提示如下所示:分析可能出错的原因有数据库连接错误、SQL语句出错、字符转换出错。通过对代码设置中断,查看SQL语句,将其放于数据库中执行,看结果是否正确,发现SQL语句出错,通过修改SQL语句,保存成功。如下所示:经过反复测试,系统完成后运行添加、修改、查询等功能均正常。此系统仍存在许多缺陷,但是通过该系统设计达到了系统设计目的意义,基本掌握了软件开发的主要步骤,了解了各环节在开发时要注意的问题,从方便用户的角度出发,去考虑开发出好的软件。另外,在设计过程中也逐渐提高了软件开发技能和编程技能。因此本设计虽然较粗糙,但是从学习的角度上看,非常有意义。7.2系统的维护维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。通常有四类维护活动:改正性维护,也就是诊断和改正在使用过程中发现的软件错误。适应性维护,即修改软件以适应环境的变化。完善性维护,即根据用户的要求改进或扩充软件使它更完善。预防性维护,即修改软件为将来的维护活动预先做准备。结束语毕业设计是我们将所学理论知识形成系统的一个锻炼的好机会,也是学校和老师检验我们学习成果的一个方法。通过这几个月的学习和实践,在老师的指导下设计并基本实现了药品信息管理系统的功能,期间我查阅了大量的资料,学到了不少知识。在此过程中我掌握了程序设计的步骤,同时也对C#.NET和SQL有了更深的了解和掌握。根据指导老师提出的对毕业设计的具体要求,在老师的指导下,终于编写完坊县医院药品管理系统这个小应用程序,但由于实践经验不足、对药品信息管理的了解还不够充分,本系统还有许多的不足之处。如只能实现简单的统计功能,药品信息管理中的一些详细的细节还不够完整。在设计的过程中,我也遇到了很多的困难,一开始对数据库的一系列操作还不够清楚,通过老师指导以及上网查询一些资料最终得到解决,同时在入出库单号的自动生存,树形目录的生成,数据的折线显示,以及实现库存药品动态变化的一些存储过程的编写时也遇到了一定的困难。通过编写这个程序让我学会了很多以前不会的东西,也让我对所学的知识有了更深一步的了解,同时更重要的是让我大学四年来所学的东西得到了最充分的运用。在这次次软件过程中,让我感受最深的是:要作好一个软件,开发者除了必须具备优秀的编程理论知识外,还应具有很强的实践能力,要能充分了解系统需求,优化设计,最终实现。并且要有很好的人际沟通能力,这样才能集思广益,将自己和他人的看法意见很好的融合在一起,从而使系统更加的符合人们的要求。在整个过程中,我学到了新知识,增长了见识。在今后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。致谢通过这次毕业设计,我从中受到了很大的教育和启迪,在系统设计过程中用到了很多以前上课时学的知识,尤其是老师上课教给我们的一些分析问题、解决问题的方法和思路,在这次项目中都得到了很好的运用,使我在这些方面能够很快有所领会。首先我衷心感谢我的指导老师,我从老师身上学到了很多东西。季老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我获益非浅。他无论在理论上还是在实践中,都给与我无私帮助和悉心的教导,使我的毕业设计得以顺利地按时完成。整个毕业设计的完成凝聚着导师的辛勤汗水,导师严谨的治学态度和求实、进取的工作作风无不鞭策着作者不断努力探索,奋发向上,他敏锐的洞察力和孜孜不倦的教诲使作者受益匪浅,并将受益终身。值此论文即将完成之际,作者谨向导师致以衷心的感谢和崇高的敬意!由于本人水平有限,文中难免会有不尽人意之处,在此希望各位老师和读者给予批评指正,不胜感激!参考文献[1]刘韬,骆娟,何旭洪编著.Sql2005数据库系统开发实例导航.北京:人民邮电出版社,2007[2]王晟.《数据库开发经典案例解析》.北京:清华大学出版社,2005[3]闪四清.《SQLSERVER实用简明教程》.北京:清华大学出版社,2007.[4]萨师煊,王珊.数据库系统概论(第三版).北京:高等教育出版社,2008[5]李代平.软件工程(2版),北京:清华大学出版社,2008[6]王小科.C#开发实战宝典,北京:清华大学出版社,

2010[7]李佳,付强,丁宁等编著.C#开发技术大全,北京:清华大学出版社,2009[8]SimonRobinson,OllieCornes著,康博译.《C#高级编程》,北京:清华大学出版社.2006.[9]JamesA.OBrien.IntroductiontoInformationSystems,北京:高等教育出版社,2002附录查询药品信息的部分代码实现如下:stringsqll="selectDrugCode编码,DrugName药品名称,DrugClass药品类别,DrugKind规格,Unit单位,MedicareType医保类别,MinEndAmount最小库存量,Maker录入者,MakeDate录入日期fromDrugwhereDrugCodelike'"+textDrugCode.Text.Trim()+"'orderbyDrugClassId,DrugCode";DataSetmyds1Drug=myoperate.getds(sqll,"Drug");dGVDrug.DataSource=myds1Drug.Tables["Drug"];保存药品信息的部分代码实现如下://先删除后增加//删除myoperate.getcom("deleteDrugwhereDrugClass='"+dGVDrug.CurrentRow.Cells["药品类别"].Value.ToString().Trim()+"'");//增加for(inti=0;i<dGVDrug.RowCount-1;i++{myoperate.getcom("insertintoDrug(DrugCode,DrugName,DrugClass,DrugClassId,DrugKind,Unit,MedicareType,MinEndAmount,Maker,MakeDate)"+"values('"+dGVDrug.Rows[i].Cells["编码"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["药品名称"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["药品类别"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["药品类别"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["规格"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["单位"].Value.ToString().Trim()+"','"+dGVDrug.Rows[i].Cells["医保类别

温馨提示

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

评论

0/150

提交评论