药品管理系统的设计与实现毕业设计_第1页
药品管理系统的设计与实现毕业设计_第2页
药品管理系统的设计与实现毕业设计_第3页
药品管理系统的设计与实现毕业设计_第4页
药品管理系统的设计与实现毕业设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

药品管理系统的设计与实现目录1绪论 页,共48页1绪论1.1课题研究背景药品管理系统可以为药店管理者提供充足的信息和快捷的查询手段。但一直以来很多中小型药店都使用传统手工的方式进行管理,这种管理方式存在着许多缺点,如效率低、数据易丢失等,容易造成药品积压甚至失效。另外时间一长,将产生大量的纸质版数据,这对于查询、修改都造成很大不便。使用计算机对药品进行管理相对于手工管理而言,具有很多优点。例如:查询方便快捷、数据存储量大等。这些优点能够极大地提高了药品管理的效率,也能更好地保证药品的效期安全,是对消费者负责的态度体现。因此,开发一套适用于中小型药店的药品管理系统管理软件很有必要。1.2系统开发的意义中国现在的医药体系还不成熟,药品管理系统也不成熟。在国内有很多软件公司开发药品管理系统,基本采用进销存模式,系统功能比较完善,但在安全、简捷、性能以及人性化设计方面还存在不足。2需求分析2.1系统功能分析 药店的正常运转货源要得到保证,这就必须有着良好的进货入库管理功能,同时为了药品质量的保证,以及在未知药品销量时可以保证药店不至于积存大量的药品,对一些积存的药品进行合理的退货。作为药店盈利机构,药店的销售是非常重要,同时要求透明化,药店的入库单、销售单、退货信息都必须合理的记录统计。药品的存货是药店进行正常运行的保证同时合理的库存量更好的应对某些药品需求量的变化,同时记录药品出库信息可以更好的反应药品的销售信息。在仓库中药品的储藏出现的损失,通过记录的信息可以精准核对药品量的信息。同时在仓库储存中应设置药品的库存下限,以便及时反映药品的信息,为药品进货提供可靠依据。药品,是药店的资源。药品的管理直接影响药店的经营,药品管理做得不好会引起药品的混乱,容易导致药品失效,造成损失。为了维护消费者的利益和药店本身的信誉以及给药店创造更好的效益,本系统应具有以下功能:

良好的人机界面。药品入库及调价管理。药品销售及退货管理。药品报损管理。完善的数据查询。丰富的报表。数据导出到Excel、Word、PDF功能。2.2系统用例分析根据系统功能分析,可以将系统细分出药品信息管理、药店信息管理、修改密码、入库登记、药品调价、销售登记、药品退货、药品效期查询、药品报损、收入统计、支出统计、利润统计以及用户管理13个子模块,管理员应为药店负责人,从药品入库到销售以及中间的业务,管理员都可以使用,收银员可以使用部分功能,管理员用例图如图1所示,收银员用例图如图2所示。图1管理员用例图图2收银员用例图2.3系统E-R图图3系统E-R图2.4运行环境该系统采用了Client/Server模式软件构造技术,页面系统采用VisualStudio2010开发,数据库采用SQLServer2008作为数据库系统,系统平台为Windows7。MicrosoftVisualStudio2010集成化程度高,控件丰富,开发人员可以直接将各种控件拖放到视图设计器,由软件自动生成控件设计以及窗体布局的设计代码,窗体视图设计更加方便高效MicrosoftSQLServer2008能方便地建立数据库对象,并且SQLServer2008结合VisualStudio2010和C#一起使用,能方便地对数据库对象进行数据操作。2.5可行性分析2.5.1技术可行性药店管理的主线是药品,药品从入库到出库以及其它操作即从药店流向消费者的过程,中间不用经过其他部门,没有繁琐的流程。加上到药店的了解,对于药品管理系统的管理流程和管理内容都易于掌握。作为计算机专业的学生,在平时的课程设计的基础上,加上自己的练习以及同学们的帮助,在系统实现上也是可行的。计算机可以安装本系统所需的开发环境SQLServer2008和Visualstudio2010。2.5.2经济可行性本系统主要面向中小型药店,处理的数据量不是很大,属于小型的系统,只需要购买打印机、电脑即可投入使用,成本低。系统投入使用后可以很好地对药品进行管理,在给药店创造更好的效益的同时有效避免药品积压甚至失效的问题,减少药店损失。3系统概要设计 3.1功能模块设计根据系统的需求分析可以将药品管理系统分为如下几个大模块:登录模块基本信息模块、入库管理模块、销售管理模块,以及库存管理模块、利润统计模块和关于我们模块。整个系统以药品的主线,入库管理模块是把药品信息存入库存表,其它药品管理相关模块是从库存表取得数据进行业务处理,系统模块结构图如图3所示。图4系统功能模块结构图3.2概念结构设计3.2.1实体属性图药品实体属性图,如图5所示。药品的属性包括药品的基本信息,如药品编号、药品名称、拼音、药品规格、计量单位、库存低限等。其中药品编号可以唯一标识药品。图5药品实体属性图药店实体属性图,如图6所示。药店实体包含药店名称、固定电话、手机、药店地址4个基本属性,作为药店标识并用于打印小票。图6药店实体属性图药品入库单实体属性图,如图7所示。药品与一般商品稍有不同,很多属性都关系到药品的安全,所以入库单包含很多属性,如入库编号、拼音码、药品名称、药品规格、计量单位、批号、批准文号、入库单价、入库数量、入库总额、入库时间、入库单位、生产厂家、生产日期、失效日期、操作员、备注等17个基本属性。其中入库编号可唯一标识药品入库信息。图7药品入库单实体属性图药品调价单实体属性图,如图8所示。药品调价单包含调价编号、入库编号、拼音码、药品名称、原单价、新单价、经办人、调价时间等基本属性。图8药品调价单实体属性图药品销售单实体属性图,如图9所示。药品销售单包含销售编号、入库编号、拼音码、药品名称、药品规格、计量单位、生产厂家、销售时间、销售单价、销售数量、销售总额、操作员等基本属性。图9药品销售单实体属性图药品退货单实体属性图,如图10所示。药品退货单包含退货编号、入库编号、拼音码、药品名称、进货单位、进货单价、退货原因、退货时间、退货数量、退货总额、操作员等基本属性。图10药品退货单实体属性图药品报损单实体属性图,如图11所示。药品报损单包含报损编号、入库编号、拼音码、药品名称、进货单价、报损原因、报损时间、报损数量、报损总额、操作员等基本属性。图11药品报损单实体属性图用户实体属性图,如图12所示。用户实体包含用户编号、用户名、密码、用户姓名、是否管理员5个基本属性。图12用户实体属性图3.3数据表设计本系统使用SQLServer2008作为后台数据库,在SQLServer2008中创建基本表对象。表对象要根据逻辑设计阶段设计的关系模式来创建。本系统创建的SQL数据库名称为DrugStore。包含以下9张表。Login(用户信息表)用户信息表用于用户信息,该表的结构如表1所示。表1用户信息表字段名数据类型长度备注说明u_idint4Notnull用户编号(自动编号)usernamevarchar50主键用户名pwvarchar50Notnull密码realnamevarchar50Notnull用户姓名adminvarchar50Notnull是否管理员Store(药店信息表)药店信息表用于存储药店的信息,该表的结构如表2所示。表2药店信息表字段名数据类型长度备注说明storenamevarchar50Notnull药店名称telvarchar50Notnull固定电话mobilevarchar50手机addressvarchar50Notnull药店地址Drug(药品信息表)药品信息表用于药品的基本信息,该表的结构如表3所示。表3药品信息表字段名数据类型长度备注说明idint4主键药品编号(自动编号)pinyinmavarchar50Notnull拼音码drugnamevarchar50Notnull药品名称specvarchar50Notnull药品规格unitvarchar50Notnull计量单位lowwarningint4Notnull库存低限Ruku(入库信息表)入库信息表用于存储药品进货入库的各项信息,该表的结构如表4所示。表4入库信息表字段名数据类型长度备注说明IDvarchar20主键入库编号(自动编号)pinyinmavarchar50Notnull拼音码drugnamevarchar50Notnull药品名称pihaovarchar50Notnull批号pizhunwenhaovarchar50Notnull批准文号specvarchar50Notnull药品规格unitvarchar50Notnull计量单位amountint4Notnull进货数量inpricedecimal(18,2)Notnull进货单价allpricedecimal(18,2)Notnull进货总额in_timedatetimeNotnull进货时间in_fromvarchar50Notnull进货单位factoryvarchar50Notnull生产厂家producedatedatetimeNotnull生产日期usefuldatedatetimeNotnull失效日期in_byvarchar50Notnull操作员remarkvarchar50备注Kucun(库存信息表)库存信息表用于存储药品库存的各项信息,该表的结构如表5所示。表5库存信息表字段名数据类型长度备注说明IDvarchar20主键入库编号(自动编号)pinyinmavarchar50Notnull拼音码drugnamevarchar50Notnull药品名称factoryvarchar50Notnull生产厂家specvarchar50Notnull药品规格unitvarchar50Notnull计量单位amountint4Notnull入库数量pihaovarchar50Notnull批号pizhunwenhaovarchar50Notnull批准文号lowwarningint4Notnull库存低限inpricedecimal(18,2)Notnull进货单价sellpricedecimal(18,2)Notnull销售单价in_timedatetimeNotnull入库时间producedatedatetimeNotnull生产日期usefuldatedatetimeNotnull失效日期in_byvarchar50Notnull操作员Sell(销售信息表)销售信息表用于存储售出药品的信息,该表的结构如表6所示。表6销售信息表字段名数据类型长度备注说明pinyinmavarchar50Notnull拼音码drugnamevarchar50Notnull药品名称factoryvarchar50Notnull生产厂家sellpricedecimal(18,2)Notnull销售单价sellamountint4Notnull销售数量allpricedecimal(18,2)Notnull销售总额s_idvarchar20Notnull销售编号(自动编号)selltimedatetimeNotnull销售时间sell_byvarchar50Notnull操作员IDvarchar20Notnull入库编号(自动编号)specvarchar50Notnull药品规格unitvarchar50Notnull计量单位ReturnG(退货信息表)退货信息表用于存储退货的药品的各项信息,该表的结构如表7所示。

表7退货信息表字段名数据类型长度备注说明r_idvarchar20主键退货编号(自动编号)ramountint4Notnull退货数量totalpricedecimal(18,2)Notnull退货总额rtimedatetimeNotnull退货时间return_byvarchar50Notnull操作员reasonvarchar50Notnull退货原因pinyinmavarchar50Notnull拼音码drugnamevarchar50Notnull药品名称IDvarchar20Notnull入库编号(自动编号)inpricedecimal(18,2)Notnull入库单价factoryvarchar50Notnull进货单位Breakage(报损信息表)报损信息表用于存储已报损的药品的各项信息,该表的结构如表8所示。表8报损信息表字段名数据类型长度备注说明b_idvarchar20主键报损编号bamountint4Notnull报损数量btimedatetimeNotnull报损时间breakage_byvarchar50Notnull操作员reasonvarchar50Notnull报损原因IDvarchar20Notnull入库编号pinyinmavarchar50Notnull拼音码drugnamevarchar50Notnull药品编号inpricedecimal(18,2)Notnull入库单价allpricedecimal(18,2)Notnull报损总额Adjustprice(调价信息表)调价信息表用于存储药品调价的记录,该表的结构如表9所示。

表9调价信息表字段名数据类型长度备注说明adjust_idvarchar20主键调价编号IDvarchar20Notnull入库编号pinyinmavarchar50Notnull拼音码drugnamevarchar50Notnull药品名称oldpricedecimal(18,2)Notnull原单价newpricedecimal(18,2)Notnull新单价adjust_timedatetimeNotnull调价时间adjust_byvarchar50Notnull操作员4系统详细设计与实现4.1功能模块的具体实现4.1.1登录模块为保证信息安全,设置必须进行识别用户才可进入系统主界面。用户名及密码其中任一个错误都会有相应的提示信息,并自动清空用户名和密码。只有两者全部正确后方可进入管理系统主界面。用户登录模块流程图如图13所示。图13用户登录模块流程图

登录界面如图14所示。图14登录界面主要代码如下:publicstaticstringflagUsername=null;publicstaticstringflagPassword=null;publicstaticstringflagAdmin=null;privatevoidbtnLogin_Click(objectsender,EventArgse){stringstrUsn=this.userName.Text;stringstrPsw=this.txtpsw.Text;try{SqlConnectionsc=newSqlConnection(@"server=.\SQLEXPRESS;database=DrugStore;Trusted_Connection=true");stringsqlstring="select*fromLoginwhereusername='"+strUsn+"'";SqlCommandcmd=newSqlCommand(sqlstring,sc);sc.Open();SqlDataReaderdr=cmd.ExecuteReader();if(dr.Read()){if(dr["pw"].ToString()==strPsw){this.DialogResult=DialogResult.OK;flagUsername=strUsn;//取得登录用户名flagPassword=strPsw;//取得登录密码,用于修改密码时对比flagAdmin=dr["admin"].ToString();//取得用户类型,是否管理员}else{MessageBox.Show("密码错误!");}dr.Dispose();sc.Close();}else{if(userName.Text==""){MessageBox.Show("请输入用户名");}else{MessageBox.Show("该用户名不存在");}dr.Dispose();sc.Close();}}catch(Exceptionex){MessageBox.Show("点击按钮事件异常:\n"+ex.ToString());}this.userName.Text=null;this.txtpsw.Text=null;}4.1.2系统主界面设计系统主界面中,点击左侧的不同按钮会在右侧的panel容器中显示不同的窗体,点击按钮时,会判断是否有权限,并且文字颜色会以红色突出显示,十分美观友好,系统功能都有很明显的入口。单击各功能按钮,会进入相应子窗口。如图15所示。图15系统主界面把窗体显示到panel容器的代码(以利润统计按钮为例):privatevoidbtnReport_Click(objectsender,EventArgse)//只有管理员有权限{if(frm_Login.flagAdmin=="管理员"){ if(panel3.Tag!=null&&panel3.TagisForm){((Form)panel3.Tag).Close();}frm_Reportform5=newfrm_Report();form5.TopLevel=false;form5.Parent=panel3;panel3.Tag=form5;form5.Show();}else{MessageBox.Show("没有这个权限!");}}按钮的文字颜色会以红色突出显示的代码(以利润统计按钮为例):privatevoidbtnReport_Enter(objectsender,EventArgse){this.label6.Visible=true;btnReport.ForeColor=Color.Red;}privatevoidbtnReport_Leave(objectsender,EventArgse){this.label6.Visible=false;btnReport.ForeColor=Color.Blue;}4.1.3用户管理模块用户管理仅限管理员使用。用户管理模块中,在添加用户时,需填写用户名和姓名以及选择用户类型,用户编号自动生成,初始密码自动设为123456,如果添加的用户名已存在,则提示用户名已存在,不能添加,否则添加成功。另外,选定某一用户后,右键菜单有删除用户、重置密码、设为管理员、设为收银员四个选项,每个操作都设有相应提醒,以防误操作。用户管理模块流程图如图16所示。图16用户管理模块流程图用户管理界面如图17所示。图17用户管理界面主要代码如下:privatevoidbtnAdd_Click(objectsender,EventArgse){stringstr2=txtUsername.Text;stringstr3=txtRealname.Text;stringstr4=radioButtonAdmin.Text;stringstr5=radioButtonCashier.Text;SqlConnectionconn=GetConnection();stringstrSelect="selectcount(*)fromLoginwhereusername=@username";SqlCommandcommSelect=newSqlCommand(strSelect,conn);commSelect.Parameters.Add("@username",SqlDbType.VarChar).Value=str2;conn.Open();if(Convert.ToInt32(commSelect.ExecuteScalar())==0){stringsqlstring=@"insertintoLogin(username,pw,realname,admin)values(@username,@pw,@realname,@admin)";SqlCommandcomn=newSqlCommand(sqlstring,conn);comn.Parameters.Add("@username",SqlDbType.VarChar).Value=str2;comn.Parameters.Add("@pw",SqlDbType.VarChar).Value=123456;comn.Parameters.Add("@realname",SqlDbType.VarChar).Value=str3;if(radioButtonAdmin.Checked==true){comn.Parameters.Add("@admin",SqlDbType.VarChar).Value=str4;}if(radioButtonCashier.Checked==true){comn.Parameters.Add("@admin",SqlDbType.VarChar).Value=str5;}comn.ExecuteNonQuery();Binddgv();}else{MessageBox.Show("该用户名已存在!");}Clear();conn.Close();}4.1.4修改密码模块修改密码时为了安全起见,需要输入登录密码。另外,新密码需要输入两次,两次输入相同则修改成功,以免用户输入出错而丢失密码。如图18所示。图18修改密码界面主要代码如下:privatevoidbtnSave_Click(objectsender,EventArgse){stringstrNew=txtConfirm.Text;SqlConnectionconn=GetConnection();try{if(txtOldpsw.Text==""||txtOldpsw.Text!=frm_Login.flagPassword){MessageBox.Show("原密码错误!");}else{if(txtNewpsw.Text==""||txtConfirm.Text==""){MessageBox.Show("密码不能为空!");}else{if(txtNewpsw.Text!=txtConfirm.Text){MessageBox.Show("两次密码不一致!");txtNewpsw.Text=null;txtConfirm.Text=null;}else{SqlCommandcmd=newSqlCommand(@"updateLoginsetpw=@pwwhereusername=@username",conn);conn.Open();cmd.Parameters.Add("@username",SqlDbType.VarChar).Value=frm_Login.flagUsername;cmd.Parameters.Add("@pw",SqlDbType.VarChar).Value=strNew;cmd.ExecuteNonQuery();MessageBox.Show("修改成功!");conn.Close();txtOldpsw.Text=null;txtNewpsw.Text=null;txtConfirm.Text=null;}}}}catch(Exceptionex){MessageBox.Show("点击按钮事件异常:\n"+ex.ToString());}}4.1.5药品信息管理模块药品信息管理模块可进行药品信息的增、删、改,存储药品的基本信息,添加药品时编号以及拼音码自动生成。输入药品名称后,系统会自动获得由首字母组成的拼音码。计量单位选择框在窗体加载时会查询药品信息表里所有的计量单位以供选择,用户也可自行录入。查询选择药品后,如果要删除已经入库的商品,为了保证数据完善性,系统提示阻止删除,但可以修改库存低限。药品信息管理模块流程图如图19所示。图19药品信息管理模块流程图药品管理界面如图20所示。图20药品信息管理界面窗体加载时会查询显示药品信息表里所有的计量单位的代码如下:SqlConnectionconn=GetConnection();conn.Open();//根据数据库里的数据绑定到计量单位选择框********************this.cboUnit.DataSource=null;this.cboUnit.Items.Clear();stringsqlstring=@"selectunitfromDruggroupbyunit";SqlDataAdaptersda=newSqlDataAdapter(sqlstring,conn);DataSetds=newDataSet();sda.Fill(ds);cboUnit.DataSource=ds.Tables[0];cboUnit.DisplayMember="unit";cboUnit.ValueMember="unit";ds.Dispose();//**********************************************************系统自动获得拼音码的代码如下://usingMicrosoft.International.Converters.PinYinConverter;//引用微软相关类库后会有GetFirstPinyin(stringstr)方法publicstaticstringGetFirstPinyin(stringstr){stringr=string.Empty;foreach(charobjinstr){try{ChineseCharchineseChar=newChineseChar(obj);stringt=chineseChar.Pinyins[0].ToString();r+=t.Substring(0,1);}catch{r+=obj.ToString();}}returnr;}privatevoidtxtName_Leave(objectsender,EventArgse){//txtPYM.Text=Components.HZPY.Convert(txtName.Text);txtPYM.Text=GetFirstPinyin(txtName.Text).ToUpper();}4.1.6入库登记模块入库登记是系统的重要组成部分。进入入库登记窗口后,需填写必要信息。入库编号、入库时间和操作员由系统提取生成。进货单位下拉框自动查询显示之前的进货单位记录。填写药品拼音码后,则把药品信息表里存在的相应药品信息显示到辅助录入区,同时把可能的生产厂家绑定到生产厂家下拉框。填写相关信息后,入库总额由系统自动计算。保存时利用事务处理把相关信息保存到入库信息表以及库存表中,保存后如果发现信息有误,在已入库药品尚未发生业务前可以删除相应记录并重新录入。入库登记模块流程图如图21所示。图21入库登记模块流程图入库登记界面如图22所示。图22入库登记界面自动编号的存储过程proc_AutoID如下:USE[DrugStore]GOSETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOALTERproc[dbo].[proc_AutoID](@newIDvarchar(20)output)asdeclare@idvarchar(20)set@id=(selectMAX(ID)fromRuku)if(@idisnullORsubstring(@id,5,8)!=substring(convert(varchar,getdate(),112),1,8))set@id=(select'RKBH'+(substring(convert(varchar,getdate(),112),1,8)+'0000'))set@newID=(select'RKBH'+(substring(convert(varchar,getdate(),112),1,8)+(selectSTUFF(CONVERT(int,10000+(substring(@id,13,4)+1)),1,1,''))))调用存储过程proc_AutoID的代码如下:privatevoidAutoID(){SqlConnectionconn=GetConnection();//实例化数据库连接类对象conn.Open();//打开数据库连接Binddgv();SqlCommandsqlcmd=newSqlCommand("proc_AutoID",conn);//实例化SqlCommand对象sqlcmd.CommandType=CommandType.StoredProcedure;//指定执行存储过程//为存储过程添加参数SqlParameteroutValue=sqlcmd.Parameters.Add("@newID",SqlDbType.VarChar,20);outValue.Direction=ParameterDirection.Output;//定义存储过程输出参数sqlcmd.ExecuteNonQuery();//执行存储过程conn.Close();//关闭数据库连接txtInid.Text=outValue.Value.ToString();}点击保存按钮的代码如下:stringstrSql=null;List<string>strSqls=newList<string>();//插入到入库表strSql="……";//省略部分代码strSqls.Add(strSql);//将执行的SQL语句添加到List泛型集合中//插入到库存表strSql="……";//省略部分代码strSqls.Add(strSql);//将执行的SQL语句添加到List泛型集合中//如何输入的拼音码在药品信息表找不到记录,则插入到药品信息表stringsqlstring1=@"selectcount(*)fromDrugwherepinyinma='"+txtPYM.Text+"'";SqlCommandcomn=newSqlCommand(sqlstring1,conn);if(Convert.ToInt32(comn.ExecuteScalar())==0)//所输入的拼音码在药品信息表找不到记录{strSql="insertintoDrug(pinyinma,drugname,spec,unit,lowwarning)values('"+txtPYM.Text+"','"+txtDName.Text+"','"+txtSpec.Text+"','"+txtUnit.Text+"',"+Convert.ToInt32(txtLowwaning.Text)+")";strSqls.Add(strSql);}try{if(Tran.ExecDataBySqls(strSqls))//调用事务{MessageBox.Show("添加成功!","软件提示");}else{MessageBox.Show("添加失败!","软件提示");}}catch(Exceptionex){MessageBox.Show(ex.Message,"软件提示");}4.1.7销售登记模块销售登记是系统的重要组成部分。考虑到销售药品应简单快捷,在药品销售登记窗体,只需填写药品拼音码、销售数量以及实收金额,其它信息则只需从辅助录入区选择或由系统自动生成。同时设置各种提醒,如:销售数量大于库存数时提醒。同一笔销售的销售单号相同,在结算前都可以选中相应药品点击鼠标右键菜单移除,结算时利用事务处理把相关信息保存到销售信息表以及更新库存信息,并利用报表打印小票。销售登记模块流程图如图23所示。图23药品销售登记模块流程图销售登记界面如图24所示,打印小票设计如图25所示。图24销售登记界面图25小票设计点击结算按钮后打印小票的代码如下://传值到报表打印小票stringsqlstr1=@"selectdrugnameas药品名称,sellamountas数量,sellpriceas单价,allpriceas金额fromSellwheres_id='"+txtSellid.Text.ToString()+"'";SqlDataAdaptersda1=newSqlDataAdapter(sqlstr1,conn);DataTabledt1=newDataTable();sda1.Fill(dt1);table=dt1;//取得单笔销售的药品信息sellid=txtSellid.Text.ToString();printdate=DateTime.Now.ToString("yyyy-MM-dd");//取得当前日期格式:2008-09-04printtime=DateTime.Now.ToShortTimeString().ToString();//取得当前时间格式:20:16sellby=txtSellby.Text.ToString();moneyYF=txtYF.Text.ToString();//取得应付金额moneySS=txtSS.Text.ToString();//取得实收金额moneyZL=txtZL.Text.ToString();//取得找零金额frm_Printf=newfrm_Print();//小票打印窗体f.Owner=this;f.ShowDialog();f.Dispose();conn.Close();dt.Clear();//清空datatableds.Clear();//清空datasetthis.dgvDetail.DataSource=ds.Tables[0];//清空销售明细datagridviewtxtYF.Text="";txtSS.Text="";txtZL.Text="";AutoID();//自动生成下一笔销售的单号4.1.8药品退货模块进入药品退货窗口后,退货时间、编号和操作员自动生成,填写药品拼音码后,则把库存表里的相应药品信息显示出来,选择需要退货的药品并填写退货数量以及退货原因后点击确认退货即可成功录入到退货信息表,同时更新药品库存数量。药品退货模块流程图如图26所示。图26药品退货模块流程图药品退货界面如图27所示。图27药品退货界面4.1.9药品报损模块药品报损的流程和药品退货流程相似,进入药品报损窗口后,报损时间、编号和操作员自动生成,填写药品拼音码后,则把库存表里的相应药品信息显示出来,选择需要报损的药品并填写报损数量以及报损原因后点击确认报损即可成功录入到报损信息表,同时更新药品库存数量。药品报损模块流程图如图28所示。图28药品报损模块流程图药品报损界面如图29所示图29药品报损界面4.1.10药品调价模块药品调价在药品管理系统里是很有必要的。进入药品调价窗口后,调价时间、编号和操作员自动生成,填写药品拼音码后,则把库存表里的相应药品信息显示出来,选择需要调价的药品并填写新价格后点击更新价格即可即调价成功并把调价记录保存到调价信息表,同时更新药品库存中的销售单价。药品调价模块流程图如图30所示。图30药品调价模块流程图药品调价界面如图31所示。图31药品调价界面4.1.11报表中心界面报表中心界面可以显示入库明细、调价记录、销售明细、药品库存以及利润统计等12个表,在显示入库明细表时可以选定相应记录点击鼠标右键菜单进行删除(如果该药品已经发生其它业务则提示不能删除)。界面上方的按钮对应主界面的各个按钮,每个按钮实现的功能都分为管理员和收银员两种权限。同时提供多种查询方式,例如按拼音码、按药品名称、按编号、按时间查询。更多入口更方便更安全。点击生成报表按钮会取得当前显示的表信息传到报表预览窗口,只有管理员才能预览报表,在报表预览窗口可以实现数据导出到Word、Excel、PDF,也可以连接打印机直接打印。报表中心界面如图32所示,.RDLC报表设计相关的DataTable如图33所示。图32报表中心界面图33.RDLC报表设计相关的DataTable实现多条件查询的关键代码如下:privatevoidSearch(stringstrSQL,stringstrIdColumn,stringstrPYMColumn,stringstrNameColumn,stringstrTimeColumn,stringstrOther){stringstr1=txtKeywords.Text;stringstr2=dateBegin.Value.ToString("yyyy-MM-dd");stringstr3=dateEnd.Value.ToString("yyyy-MM-dd");if(checkBoxKey.Checked==true&&checkBoxTime.Checked==true){if(cboKeywords.Text=="编号"){stringsqlstr=@""+strSQL+"where"+strIdColumn+"='"+str1+"'and"+strTimeColumn+"between'"+str2+"'and'"+str3+"'"+strOther+"";Binddgv(sqlstr);}if(cboKeywords.Text=="拼音码"){stringsqlstr=@""+strSQL+"where"+strPYMColumn+"='"+str1+"'and"+strTimeColumn+"between'"+str2+"'and'"+str3+"'"+strOther+"";Binddgv(sqlstr);}if(cboKeywords.Text=="药品名称"){stringsqlstr=@""+strSQL+"where"+strNameColumn+"='"+str1+"'and"+strTimeColumn+"between'"+str2+"'and'"+str3+"'"+strOther+"";Binddgv(sqlstr);}}elseif(checkBoxKey.Checked==true&&checkBoxTime.Checked==false){if(cboKeywords.Text=="编号"){stringsqlstr=@""+strSQL+"where"+strIdColumn+"='"+str1+"'"+strOther+"";Binddgv(sqlstr);}if(cboKeywords.Text=="拼音码"){stringsqlstr=@""+strSQL+"where"+strPYMColumn+"='"+str1+"'"+strOther+"";Binddgv(sqlstr);}if(cboKeywords.Text=="药品名称"){stringsqlstr=@""+strSQL+"where"+strNameColumn+"='"+str1+"'"+strOther+"";Binddgv(sqlstr);}}elseif(checkBoxKey.Checked==false&&checkBoxTime.Checked==true){stringsqlstr=@""+strSQL+"where"+strTimeColumn+"between'"+str2+"'and'"+str3+"'"+strOther+"";Binddgv(sqlstr);}}实现报表预览的关键代码如下:privatevoidbtnCreate_Click(objectsender,EventArgse){if(frm_Login.flagAdmin=="管理员"){table=dgvShow.DataSourceasDataTable;frm_Reportsrf=newfrm_Reports();rf.Owner=this;rf.ShowDialog();rf.Dispose();}else{MessageBox.Show("没有这个权限!");}}//strPath为相应的报表privatevoidBindReportViewer(stringstrPath,stringstrDataSet){frm_AllReportfm=(frm_AllReport)this.Owner;//this.reportViewer1.LocalReport.ReportPath=@"H:\DrugStore\DrugStore\DrugStore\"+strPath+"";//用绝对路径//取相对路径stringpath=System.Windows.Forms.Application.StartupPath+@"../../../";System.IO.Directory.SetCurrentDirectory(path);stringstrFilePath=System.IO.Directory.GetCurrentDirectory()+@"\"+strPath+"";//用相对路径this.reportViewer1.LocalReport.ReportPath=strFilePath;this.reportViewer1.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout);this.reportViewer1.LocalReport.DataSources.Clear();this.reportViewer1.LocalReport.DataSources.Add(newReportDataSource(""+strDataSet+"",fm.table));this.reportViewer1.RefreshReport();}privatevoidfrm_Reports_Load(objectsender,EventArgse){switch(frm_AllReport.tag1){case1:{BindReportViewer("ReportIn.rdlc","DataSet1");break;}case2:{BindReportViewer("ReportAdjust.rdlc","DataSet2");break;}case3:{BindReportViewer("ReportSell.rdlc","DataSet3");break;}case4:{BindReportViewer("ReportReturnG.rdlc","DataSet4");break;}case5:{BindReportViewer("ReportKucun.rdlc","DataSet5");break;}case6:{BindReportViewer("ReportKcDetail.rdlc","DataSet6");break;}case7:{BindReportViewer("ReportBreakage.rdlc","DataSet7");break;}case8:{BindReportViewer("ReportXiaoqi.rdlc","DataSet8");break;}case9:{BindReportViewer("ReportWarning.rdlc","DataSet9");break;}case10:{BindReportViewer("ReportEarn.rdlc","DataSet10");break;}case11:{BindReportViewer("ReportExpense.rdlc","DataSet11");break;}case12:{BindReportViewer("ReportProfit.rdlc","DataSet12");break;}}}4.1.12系统部分公有类或方法的设计与实现连接数据库publicSqlConnectionGetConnection(){returnnewSqlConnection(@"server=.\SQLEXPRESS;database=DrugStore;Trusted_Connection=true");}事务处理publicboolExecDataBySqls(List<string>strSqls)//事务处理{SqlConnectionconn=GetConnection();SqlCommandcomn=newSqlCommand();boolbooIsSucceed;if(conn.State==ConnectionState.Closed){conn.Open();}SqlTransactionsqlTran=conn.BeginTransaction();try{comn.Connection=conn;comn.Transaction=sqlTran;foreach(stringiteminstrSqls){comn.CommandType=CommandType.Text;comn.CommandText=item;comn.ExecuteNonQuery();}sqlTran.Commit();booIsSucceed=true;}catch{sqlTran.Rollback();booIsSucceed=false;}finally{conn.Close();strSqls.Clear();}returnbooIsSucceed;}//事务处理5系统测试5.1测试目标登录功能:当用户输入的用户名和密码为空或不相符时是否有相关提示,输入正确时能成功登录系统,且登录成功后能正确判断其用户权限。添加药品记录的功能:正确输入药品的各项信息后能成功向数据库添加新记录,输入的信息为空时有出错提示。修改药品信息的功能:修改药品信息时能正确判断该记录的业务状况并成功修改相应内容。删除药品记录的功能:删除药品记录时能正确判断该记录的业务状况来判断该记录能否被修改,对于不能被删除的记录有相应提示,对于能删除的记录能成功删除。药品入库登记的功能:正确填写药品入库登记所需的各项信息后,能成功地向数据库写入相应的入库记录。药品调价的功能:选择药品并正确填写药品新价格后,能成功地修改药品的售价。药品退货的功能:选择药品并正确填写药品退货的各项信息后,能成功地退货并更新该药品的库存数量。药品报损的功能:选择药品并正确填写药品报损的各项信息后,能成功地报损该药品并更新该药品的库存数量。药品销售的功能:选择药品并正确填写药品销售各项信息后,能成功地售出药品并更新该药品的库存数量。生成销售小票的功能:售出药品结算时能正确地生成销售小票。查询销售明细记录的功能:查询销售明细记录时能否进行单条件查询和多条件查询并查询出正确的记录生成利润统计报表的功能:能正确计算收入和支出并得出利润,生成报表5.2测试大纲登录功能Case1:输入正确的用户名和密码Case2:输入错误的用户名或密码Case3:不输入用户名或密码添加药品记录的功能Case1:所有信息填写正确Case2:信息填写不完整修改药品信息的功能Case1:修改已发生业务的药品信息Case2:修改未发生业务的记录删除药品记录的功能Case1:删除已发生业务的记录Case2:删除未发生业务的记录药品入库登记的功能药品调价的功能药品退货的功能药品报损的功能药品销售的功能生成销售小票的功能查询销售明细记录的功能Case1:只按编号或拼音码或药品名称查询Case2:只按时间查询Case3:多条件查询生成利润统计报表的功能5.3测试结果及截图登录功能Case1:输入正确的用户名和密码结果:成功登录,进入系统主界面,与预期效果相符。Case2:输入错误的用户名或密码结果:提示用户名不存在或提示密码错误,与预期效果相符。图34用户名或密码输入错误时系统提示截图Case3:不输入用户名或密码结果:提示请输入用户名或提示密码错误,与预期效果相符。图35用户名或密码为空时系统提示截图添加药品记录的功能Case1:所有信息填写正确结果:信息成功添加,与预期效果相符。图36成功添加药品记录的截图Case2:信息填写不完整结果:记录未添加,提示输入所有信息,与预期效果相符。图37未完整输入所有信息时的系统提示截图修改药品信息的功能Case1:修改已发生业务的记录结果:判断出该记录已经发生业务,只能修改与业务无关的信息,与预期效果相符。图38已发生业务的药品只能修改库存低限的截图Case2:修改未发生业务的记录结果:判断出该记录未发生业务,可以修改所有信息,与预期效果相符。图39未发生业务的药品可以修改所有信息的截图删除药品记录的功能Case1:删除已发生业务的记录结果:判断出该记录已经发生业务,提示不可删除,与预期效果相符。图40不能删除已发生业务的药品的提示截图Case2:删除未发生业务的记录结果:判断出该记录未发生业务,提示删除成功,与预期效果相符。图41成功删除未发生业务的药品记录的截图药品入库登记的功能结果:成功把相应药品入库,与预期效果相符。图42成功进行入库登记的截图药品调价的功能结果:成功更新药品价格,与预期效果相符。图43药品调价成功的截图药品退货的功能结果:成功对药品进行退货,与预期效果相符。图44退货成功的截图药品报损的功能结果:成功对药品进行报损,与预期效果相符。图45药品报损成功的截图药品销售的功能结果:

温馨提示

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

评论

0/150

提交评论