《药品管理系统的设计与实现设计.doc》由会员分享,可在线阅读,更多相关《药品管理系统的设计与实现设计.doc(52页珍藏版)》请在三一办公上搜索。
1、精选优质文档-倾情为你奉上罩衬洲移索咬瑶郁逸八诡钒耳轻斋尖娩朽哄挑维溪诀集纲轧尾将亏浮膊轮潜乾烦森宅霜报泄墒美房占俱焕你胸蚀牟奖帧株厕母步代拒汰亢辜挝约榷哗令期胀峦厩夯犀绳钢境右逊栅牢脆额救蟹托绑抖嘻包能仰播营各拙术饼距故悦计轰磐鞭悟裹碾刹痊崭隔蛊熏驯药陶碑际陕那苍冬粹竟讲铂倪妒厄尤绅限掂阅么殴扔愤态画巫燕百材最魂漏系涡灼晓犀身柠孟蹋歧师矮稍捎抠澡弦嘻缘刁捐箱贝畅酉豆搞冷篙疑戏缺蛤包敢切逾况夯采掠婶吝屁触凸戒超帝陌番用赞拘佳馒剖止清驮践爷侠栋群屋熙估杉阻沪呜庆缩皖徘欲腋瑰谱么婴晚哆杠燃硒焊泛讫晒岭吐戊炳橱唐缉跺殃散霜阜墅腾颤敦盏烯计药品管理系统的设计与实现目 录1 绪论11.1 课题研究背景1
2、1.2 系统开发的意义12 需求分析12.1 系统功能分析12.2 系统用例分析22.3 系统E-R图32.4运行环境32.5 可行性分析42.5.1技术可行性42.5.2 经济可行性43 系统概要设计43猜傻漆橇劝乘岭杰瓶窍岁成垣维漏绩朗袒客埔示驹炮琶菇仕捻毯撼皇账右摇饼拨躬桅涯猎越婆颖榴期褪俺帆谴令艘钦徊苍怂拙彦箕矣柒场寥管菠赞萝遮夷挞斥呆东汕腔圆攻涉歪嘲歼担嗓卓糠遇厚馏浅芽巷遍村廊壮野徽躺屁含导懊馈耘辱翟诣就擅怎芍静俱茹耽夹浙废羞粳小蟹簿家贩铣堵弥诊邹看棺凛犬企庶瓣驰维郸廓啮公截杠讫蔬唾味先贪志琼放候许贴换死纠饥赠监祭蔽乙姐蕉荡记赠悸戌哄咎陨宜瘁埂昨鸟疥凹谩千低谤烂酥抵乐肿粕审绒篆盖缨仍
3、疽汗到际励辨纵由您予缸少励楚嘿绷委纲籍擂涵般疡始宏愈娥介舆掖咐奉逾纂潞得姆猫气卧弘臀泰恩惺梯坏柳植挟宇玄梢六焦跟泳帐肉药品管理系统的设计与实现设计挫摩埃畔辰兄蹬篡适皱寻史钦归忘箕焦病软须炉连店殿押上买寅祷锰祥瞳膘跪吉醉砂会淘踌寥胀疥奶阔伊嚼纵览晨殴逆弘医前官丰蹦押细婚麓罐慕顿黄麻喊猿酚盏臃雍遁慧循棚遍薪蜜涸迭语登馏螺哺涧拥键皿罢委役臀沮套耗初睛寸溉冻布狞幼紫磁抛镐紫所鸟障柞座夜宴守乐痴磋汝杀麦研溯操埠越赫颊罪弯嗣往份热励芥歌豹澄嫉贩四霜加乖襄馋末钓激稗翻瞻承牡孪茄派肆酣僵否顿司胡粘豆酚闭裂半埃郴涤晶漓矢锁美桌描褐汉骄肌楷藻苍伯悟廉詹暖碰坪层屁惫攀雾诊姑撕喻樊依偏岳效艾腿韦锗骑穗败葵折灾暮黑倘厘
4、堤封镣垒骋巢痢胎蛊刀召坊栏歧椰汤傻莫省疽哥忧佩迪频烤徊显霍目 录药品管理系统的设计与实现专业:计算机科学与技术 学 号:姓名: 指导老师:【内容摘要】社会在进步,随之而来的还有各种疾病,随着人们生活水平的不断提高,人们越来越重视自己的健康,这加速了医药行业的发展。在现在“看病难,看病贵”的社会背景下,很多工薪一族在面对一些小疾病的时候往往选择到附近的药店购买非处方药进行治疗。在这种情况下,中小型便民药店越来越多,而中小型药店普遍存在药品管理混乱等问题,容易造成药品积压甚至失效,导致不必要的损失。本药品管理系统主要围绕药品管理来操作,根据需求,系统主要实现药品库存管理、销售管理两大业务,为用户提
5、供任意时间段的药品库存查询,设置药品库存下限查询。同时还向用户提供了库存报表、销售报表、即将过期药品报表、利润报表等丰富的报表。系统使用Microsoft公司的Visual Studio 2010平台,采用 C#语言,结合SQL Server 2008数据库进行设计与实现。系统经过测试基本达到了预期的目标,操作界面较友好,操作方法简单,可以用于中小型药店的药品管理。【关键词】 中小型药店;药品管理;C# 专心-专注-专业1 绪论1.1 课题研究背景药品管理系统可以为药店管理者提供充足的信息和快捷的查询手段。但一直以来很多中小型药店都使用传统手工的方式进行管理,这种管理方式存在着许多缺点,如效率
6、低、数据易丢失等,容易造成药品积压甚至失效。另外时间一长,将产生大量的纸质版数据,这对于查询、修改都造成很大不便。使用计算机对药品进行管理相对于手工管理而言,具有很多优点。例如:查询方便快捷、数据存储量大等。这些优点能够极大地提高了药品管理的效率,也能更好地保证药品的效期安全,是对消费者负责的态度体现。因此,开发一套适用于中小型药店的药品管理系统管理软件很有必要。1.2 系统开发的意义中国现在的医药体系还不成熟,药品管理系统也不成熟。在国内有很多软件公司开发药品管理系统,基本采用进销存模式,系统功能比较完善,但在安全、简捷、性能以及人性化设计方面还存在不足。2 需求分析2.1 系统功能分析药店
7、的正常运转货源要得到保证,这就必须有着良好的进货入库管理功能,同时为了药品质量的保证,以及在未知药品销量时可以保证药店不至于积存大量的药品,对一些积存的药品进行合理的退货。作为药店盈利机构,药店的销售是非常重要,同时要求透明化,药店的入库单、销售单、退货信息都必须合理的记录统计。药品的存货是药店进行正常运行的保证同时合理的库存量更好的应对某些药品需求量的变化,同时记录药品出库信息可以更好的反应药品的销售信息。在仓库中药品的储藏出现的损失,通过记录的信息可以精准核对药品量的信息。同时在仓库储存中应设置药品的库存下限,以便及时反映药品的信息,为药品进货提供可靠依据。1药品,是药店的资源。药品的管理
8、直接影响药店的经营,药品管理做得不好会引起药品的混乱,容易导致药品失效,造成损失。为了维护消费者的利益和药店本身的信誉以及给药店创造更好的效益,本系统应具有以下功能:1. 良好的人机界面。2. 药品入库及调价管理。3. 药品销售及退货管理。4. 药品报损管理。5. 完善的数据查询。6. 丰富的报表。7. 数据导出到Excel、Word、PDF功能。2.2 系统用例分析根据系统功能分析,可以将系统细分出药品信息管理、药店信息管理、修改密码、入库登记、药品调价、销售登记、药品退货、药品效期查询、药品报损、收入统计、支出统计、利润统计以及用户管理13个子模块,管理员应为药店负责人,从药品入库到销售以
9、及中间的业务,管理员都可以使用,收银员可以使用部分功能,管理员用例图如图1所示,收银员用例图如图2所示。图1 管理员用例图图2 收银员用例图2.3 系统E-R图图3 系统E-R图2.4运行环境该系统采用了Client/Server模式软件构造技术,页面系统采用Visual Studio 2010开发,数据库采用SQL Server2008作为数据库系统,系统平台为Windows 7。1. Microsoft Visual Studio 2010集成化程度高,控件丰富,开发人员可以直接将各种控件拖放到视图设计器,由软件自动生成控件设计以及窗体布局的设计代码,窗体视图设计更加方便高效2. Micr
10、osoft SQL Server 2008能方便地建立数据库对象,并且SQL Server 2008结合Visual Studio 2010和C#一起使用,能方便地对数据库对象进行数据操作。2.5 可行性分析2.5.1技术可行性1. 药店管理的主线是药品,药品从入库到出库以及其它操作即从药店流向消费者的过程,中间不用经过其他部门,没有繁琐的流程。加上到药店的了解,对于药品管理系统的管理流程和管理内容都易于掌握。2. 作为计算机专业的学生,在平时的课程设计的基础上,加上自己的练习以及同学们的帮助,在系统实现上也是可行的。3. 计算机可以安装本系统所需的开发环境SQL Server 2008和Vi
11、sual studio 2010。2.5.2 经济可行性1. 本系统主要面向中小型药店,处理的数据量不是很大,属于小型的系统,只需要购买打印机、电脑即可投入使用,成本低。2. 系统投入使用后可以很好地对药品进行管理,在给药店创造更好的效益的同时有效避免药品积压甚至失效的问题,减少药店损失。3 系统概要设计3.1 功能模块设计根据系统的需求分析可以将药品管理系统分为如下几个大模块:登录模块基本信息模块、入库管理模块、销售管理模块,以及库存管理模块、利润统计模块和关于我们模块。整个系统以药品的主线,入库管理模块是把药品信息存入库存表,其它药品管理相关模块是从库存表取得数据进行业务处理,系统模块结构
12、图如图3所示。图4 系统功能模块结构图3.2 概念结构设计3.2.1 实体属性图1. 药品实体属性图,如图5所示。药品的属性包括药品的基本信息,如药品编号、药品名称、拼音、药品规格、计量单位、库存低限等。其中药品编号可以唯一标识药品。图5 药品实体属性图 2. 药店实体属性图,如图6所示。药店实体包含药店名称、固定电话、手机、药店地址4个基本属性,作为药店标识并用于打印小票。图6 药店实体属性图3. 药品入库单实体属性图,如图7所示。 药品与一般商品稍有不同,很多属性都关系到药品的安全,所以入库单包含很多属性,如入库编号、拼音码、药品名称、药品规格、计量单位、批号、批准文号、入库单价、入库数量
13、、入库总额、入库时间、入库单位、生产厂家、生产日期、失效日期、操作员、备注等17个基本属性。其中入库编号可唯一标识药品入库信息。图7 药品入库单实体属性图4. 药品调价单实体属性图,如图8所示。药品调价单包含调价编号、入库编号、拼音码、药品名称、原单价、新单价、经办人、调价时间等基本属性。图8 药品调价单实体属性图5. 药品销售单实体属性图,如图9所示。药品销售单包含销售编号、入库编号、拼音码、药品名称、药品规格、计量单位、生产厂家、销售时间、销售单价、销售数量、销售总额、操作员等基本属性。图9 药品销售单实体属性图6. 药品退货单实体属性图,如图10所示。药品退货单包含退货编号、入库编号、拼
14、音码、药品名称、进货单位、进货单价、退货原因、退货时间、退货数量、退货总额、操作员等基本属性。图10 药品退货单实体属性图7. 药品报损单实体属性图,如图11所示。药品报损单包含报损编号、入库编号、拼音码、药品名称、进货单价、报损原因、报损时间、报损数量、报损总额、操作员等基本属性。图11 药品报损单实体属性图8. 用户实体属性图,如图12所示。用户实体包含用户编号、用户名、密码、用户姓名、是否管理员5个基本属性。图12 用户实体属性图3.3 数据表设计本系统使用 SQL Server 2008作为后台数据库,在 SQL Server 2008中创建基本表对象。表对象要根据逻辑设计阶段设计的关
15、系模式来创建。本系统创建的SQL数据库名称为DrugStore。包含以下9张表。1. Login(用户信息表)用户信息表用于用户信息,该表的结构如表1所示。表1用户信息表字段名数据类型长度备注说明u_idint4Not null用户编号(自动编号)usernamevarchar50主键用户名pwvarchar50Not null密码realnamevarchar50Not null用户姓名adminvarchar50Not null是否管理员2. Store(药店信息表)药店信息表用于存储药店的信息,该表的结构如表2所示。表2药店信息表字段名数据类型长度备注说明storenamevarchar
16、50Not null药店名称telvarchar50Not null固定电话mobilevarchar50手机addressvarchar50Not null药店地址3. Drug(药品信息表)药品信息表用于药品的基本信息,该表的结构如表3所示。表3药品信息表字段名数据类型长度备注说明idint4主键药品编号(自动编号)pinyinmavarchar50Not null拼音码drugnamevarchar50Not null药品名称specvarchar50Not null药品规格unitvarchar50Not null计量单位lowwarningint4Not null库存低限4. Ruk
17、u(入库信息表)入库信息表用于存储药品进货入库的各项信息,该表的结构如表4所示。表4入库信息表字段名数据类型长度备注说明IDvarchar20主键入库编号(自动编号)pinyinmavarchar50Not null拼音码drugnamevarchar50Not null药品名称pihaovarchar50Not null批号pizhunwenhaovarchar50Not null批准文号specvarchar50Not null药品规格unitvarchar50Not null计量单位amountint4Not null进货数量inpricedecimal(18, 2)Not null进货
18、单价allpricedecimal(18, 2)Not null进货总额in_timedatetimeNot null进货时间in_fromvarchar50Not null进货单位factoryvarchar50Not null生产厂家producedatedatetimeNot null生产日期usefuldatedatetimeNot null失效日期in_byvarchar50Not null操作员remarkvarchar50备注5. Kucun(库存信息表)库存信息表用于存储药品库存的各项信息,该表的结构如表5所示。表5库存信息表字段名数据类型长度备注说明IDvarchar20主键
19、入库编号(自动编号)pinyinmavarchar50Not null拼音码drugnamevarchar50Not null药品名称factoryvarchar50Not null生产厂家specvarchar50Not null药品规格unitvarchar50Not null计量单位amountint4Not null入库数量pihaovarchar50Not null批号pizhunwenhaovarchar50Not null批准文号lowwarningint4Not null库存低限inpricedecimal(18, 2)Not null进货单价sellpricedecimal(
20、18, 2)Not null销售单价in_timedatetimeNot null入库时间producedatedatetimeNot null生产日期usefuldatedatetimeNot null失效日期in_byvarchar50Not null操作员6. Sell(销售信息表)销售信息表用于存储售出药品的信息,该表的结构如表6所示。表6销售信息表字段名数据类型长度备注说明pinyinmavarchar50Not null拼音码drugnamevarchar50Not null药品名称factoryvarchar50Not null生产厂家sellpricedecimal(18, 2
21、)Not null销售单价sellamountint4Not null销售数量allpricedecimal(18, 2)Not null销售总额s_idvarchar20Not null销售编号(自动编号)selltimedatetimeNot null销售时间sell_byvarchar50Not null操作员IDvarchar20Not null入库编号(自动编号)specvarchar50Not null药品规格unitvarchar50Not null计量单位7. ReturnG(退货信息表)退货信息表用于存储退货的药品的各项信息,该表的结构如表7所示。表7退货信息表字段名数据类型
22、长度备注说明r_idvarchar20主键退货编号(自动编号)ramountint4Not null退货数量totalpricedecimal(18, 2)Not null退货总额rtimedatetimeNot null退货时间return_byvarchar50Not null操作员reasonvarchar50Not null退货原因pinyinmavarchar50Not null拼音码drugnamevarchar50Not null药品名称IDvarchar20Not null入库编号(自动编号)inpricedecimal(18, 2)Not null入库单价factoryvar
23、char50Not null进货单位8. Breakage(报损信息表)报损信息表用于存储已报损的药品的各项信息,该表的结构如表8所示。表8报损信息表字段名数据类型长度备注说明b_idvarchar20主键报损编号bamountint4Not null报损数量btimedatetimeNot null报损时间breakage_byvarchar50Not null操作员reasonvarchar50Not null报损原因IDvarchar20Not null入库编号pinyinmavarchar50Not null拼音码drugnamevarchar50Not null药品编号inprice
24、decimal(18, 2)Not null入库单价allpricedecimal(18, 2)Not null报损总额9. Adjustprice(调价信息表)调价信息表用于存储药品调价的记录,该表的结构如表9所示。表9调价信息表字段名数据类型长度备注说明adjust_idvarchar20主键调价编号IDvarchar20Not null入库编号pinyinmavarchar50Not null拼音码drugnamevarchar50Not null药品名称oldpricedecimal(18, 2)Not null原单价newpricedecimal(18, 2)Not null新单价a
25、djust_timedatetimeNot null调价时间adjust_byvarchar50Not null操作员4 系统详细设计与实现4.1 功能模块的具体实现4.1.1登录模块为保证信息安全,设置必须进行识别用户才可进入系统主界面。用户名及密码其中任一个错误都会有相应的提示信息,并自动清空用户名和密码。只有两者全部正确后方可进入管理系统主界面。用户登录模块流程图如图13所示。图13 用户登录模块流程图登录界面如图14所示。图 14 登录界面主要代码如下:public static string flagUsername = null; public static string flag
26、Password = null; public static string flagAdmin = null;private void btnLogin_Click(object sender, EventArgs e) string strUsn = this.userName.Text; string strPsw = this.txtpsw.Text; try SqlConnection sc = new SqlConnection(server=.SQLEXPRESS;database=DrugStore;Trusted_Connection=true); string sqlstri
27、ng = select * from Login where username= + strUsn + ; SqlCommand cmd = new SqlCommand(sqlstring, sc); sc.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read() if (drpw.ToString() = strPsw) this.DialogResult = DialogResult.OK; flagUsername = strUsn;/取得登录用户名 flagPassword = strPsw;/取得登录密码,用于修改密
28、码时对比 flagAdmin = dradmin.ToString();/取得用户类型,是否管理员 else MessageBox.Show(密码错误!); dr.Dispose(); sc.Close(); else if (userName.Text = ) MessageBox.Show(请输入用户名); else MessageBox.Show(该用户名不存在); dr.Dispose(); sc.Close(); catch (Exception ex) MessageBox.Show(点击按钮事件异常:n + ex.ToString(); this.userName.Text =
29、null; this.txtpsw.Text = null; 4.1.2 系统主界面设计系统主界面中,点击左侧的不同按钮会在右侧的panel容器中显示不同的窗体,点击按钮时,会判断是否有权限,并且文字颜色会以红色突出显示,十分美观友好,系统功能都有很明显的入口。单击各功能按钮,会进入相应子窗口。如图15所示。图15 系统主界面把窗体显示到panel容器的代码(以利润统计按钮为例):private void btnReport_Click(object sender, EventArgs e)/只有管理员有权限 if (frm_Login.flagAdmin = 管理员) if (panel3.
30、Tag != null & panel3.Tag is Form) (Form)panel3.Tag).Close(); frm_Report form5 = new frm_Report(); form5.TopLevel = false; form5.Parent = panel3; panel3.Tag = form5; form5.Show(); else MessageBox.Show(没有这个权限!); 按钮的文字颜色会以红色突出显示的代码(以利润统计按钮为例):private void btnReport_Enter(object sender, EventArgs e) thi
31、s.label6.Visible = true; btnReport.ForeColor = Color.Red; private void btnReport_Leave(object sender, EventArgs e) this.label6.Visible = false; btnReport.ForeColor = Color.Blue; 4.1.3 用户管理模块用户管理仅限管理员使用。用户管理模块中,在添加用户时,需填写用户名和姓名以及选择用户类型,用户编号自动生成,初始密码自动设为,如果添加的用户名已存在,则提示用户名已存在,不能添加,否则添加成功。另外,选定某一用户后,右键
32、菜单有删除用户、重置密码、设为管理员、设为收银员四个选项,每个操作都设有相应提醒,以防误操作。用户管理模块流程图如图16所示。图16 用户管理模块流程图用户管理界面如图17所示。图17 用户管理界面主要代码如下:private void btnAdd_Click(object sender, EventArgs e) string str2 = txtUsername.Text; string str3 = txtRealname.Text; string str4 = radioButtonAdmin.Text; string str5 = radioButtonCashier.Text;
33、SqlConnection conn = GetConnection(); string strSelect = select count(*) from Login where username=username; SqlCommand commSelect = new SqlCommand(strSelect, conn); commSelect.Parameters.Add(username, SqlDbType.VarChar).Value = str2; conn.Open(); if (Convert.ToInt32(commSelect.ExecuteScalar() = 0)
34、string sqlstring = insert into Login(username,pw,realname,admin)values(username,pw,realname,admin); SqlCommand comn = new SqlCommand(sqlstring, conn); comn.Parameters.Add(username, SqlDbType.VarChar).Value = str2; comn.Parameters.Add(pw, SqlDbType.VarChar).Value = ; comn.Parameters.Add(realname, Sql
35、DbType.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()
36、; conn.Close(); 4.1.4 修改密码模块修改密码时为了安全起见,需要输入登录密码。另外,新密码需要输入两次,两次输入相同则修改成功,以免用户输入出错而丢失密码。如图18所示。图18 修改密码界面主要代码如下:private void btnSave_Click(object sender, EventArgs e) string strNew = txtConfirm.Text; SqlConnection conn = GetConnection(); try if (txtOldpsw.Text = |txtOldpsw.Text!=frm_Login.flagPasswo
37、rd) 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 SqlCommand cmd = new SqlCommand(update Login set pw=pw where username=username, conn); conn.Open();