医药销售管理系统软件说明书样本_第1页
医药销售管理系统软件说明书样本_第2页
医药销售管理系统软件说明书样本_第3页
医药销售管理系统软件说明书样本_第4页
医药销售管理系统软件说明书样本_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

医药销售管理系统1系统分析 31.1开发背景 31.2需求分析 32系统设计 32.1系统目的 32.2系统功能构造 42.3系统流程图 43软件架构 63.1逻辑分层构造设计 63.2系统文献夹组织构造 73.3实体对象设计 73.4定义ActionForm 83.5持久层构造设计 83.6业务层构造设计 103.7页面构造设计 114配备文献 114.1配备web.xml 114.2配备struts-config.xml 124.3配备hibernate.cfg.xml 125实体及映射 125.1药物实体映射 125.2药物类别实体映射 135.3销售明细实体映射 135.4顾客实体映射 146公共类设计 146.1Hibernate过滤器 146.2SupperDao类 166.3BaseAction类 176.4DeleteAction类 186.5字符串工具类 187国际化 187.1国际化资源文献 187.2国际化实现 198系统登陆模块 198.1查询顾客 198.2登陆祈求 198.3登录页面 199药物类别信息管理 209.1药物类别持久层设计 209.2药物类别添加 219.2.1类别添加、修改祈求解决 219.2.2类别添加页面 219.3分页查看类别信息 219.3.1查询与删除祈求解决 229.3.2类别信息列表页面 229.4类别修改与删除 229.5药物类别记录 229.5.1JFreeChat工具类 239.5.2Action祈求 239.5.3显示报表 2310药物信息管理 2310.1药物对象持久层设计 2410.2药物信息添加与修改 2410.2.1药物添加祈求解决 2410.2.2药物添加页面 2510.3分页查看所有药物 2510.4查看药物详细信息 2510.5模糊查询药物 2610.5.1药物模糊查询祈求解决 2610.5.2药物模糊查询页面 2610.6高档查询 2710.7查看库存 2710.8药物批量删除 2710.8.1批量删除祈求解决 2810.8.2映射JSP页面中按钮 2811购买药物 2811.1选购药物 2811.2结账 2912销售管理 2912.1明细信息查询 2912.2销售排行记录 3013进货/需求管理 3014系统管理 3114.1添加管理员 3114.2修改密码 3214.3系统初始化 3215运营项目 321系统分析随着计计算机技术不断发展,应用软件迅速普及,大到厂矿校企,小到图书、餐饮、医药管理等,随处都可看到它身影。在以往依托人工为主医药销售管理方面,计算机和计算机系统逐渐唱起了主角,凭借省时、省力、低误差等长处,从主线上变化了医药管理老式模式,节约了物理资源,提高了工作效率。1.1开发背景XX医药抄手坐落于XX社区内,近年来本着经济、实惠、高质量服务宗旨,赢得了社区百姓信赖,药物供应量非常大。面对庞大信息量,经常浮现记录失误、药量供应局限性状况,医药超市经理决定使用一套合理、有效、使用管理系统,对医药超市进行统一管理。笔者受医药超市经理委托,开发一种医药销售管理系统,其宗旨是实现医药超市管理系统化、规范化、实用化,对药物进行统一管理。1.2需求分析在寻常医药管理中,面对众多药物和众多不同需求顾客,每天都会产生大量数据信息。以老式手工方式来解决这些信息,操作比较繁琐,且效率低下。此时,一套合理、有效、实用医药销售管理系统就显得十分必要。运用其提供药物查询、记录功能,可以进行高效管理,更好地为顾客服务。笔者通过对医药超市实地考察,从经营者和消费者角度出发,以高效管理、迅速满足消费者为原则,规定本系统具备如下特点。★具备良好系统性能、和谐顾客界面。★较高解决效率,便于顾客使用。★采用成熟技术开发,全系统具备较高技术水平和较长生命周期。★对销售信息进行记录排行★尽量地简化药物管理员重复工作,提高工作效率。2系统设计2.1系统目的依照医药超市管理规定,指定医药销售管理系统目的如下。★灵活人机交互界面,操作简朴以便、界面简洁美观。★系统提供中、英文语言,实现国际化★药物分类管理,并提供类别记录功能。★实现各种查询,如多条件查询、模糊查询等。★提供创立管理员账户及修改口令功能。★可对系统销售信息进行记录分析。★系统运营稳定、安全可靠。2.2系统功能构造医药销售管理系统提供了四大功能,分别为“基本信息管理”、“进货/需求管理”、“药物管理”、“系统管理”,详细构造如图1.1所示医药销售管理系统医药销售管理系统基本信息管理进货/需求管理药物销售管理系统管理药物信息管理药物类别管理库存信息查看药物需求管理药物进货管理销售明细管理销售排行记录销售时间记录系统初始化管理员帐号管理图1.1医药销售管理系统功能构造图2.3系统流程图医药销售管理系统流程如图1.2所示。管理员登录医药销售管理系统管理员登录医药销售管理系统管理员进货/需求管理基本信息管理药物销售管理系统管理药物信息管理删除药物药物类别管理查询药物修改药物添加药物修改类别查询类别删除类别添加类别修改需求查询需求删除需求添加需求销售排行记录查询销售明细当天销售明细库存修改系统初始化查询管理员密码修改添加管理员类别记录图1.2医药销售管理系统流程图3软件架构在开发项当前,一方面要对软件构造进行设计,也称之为软件架构。此过程是对软件整体构造设计,如软件逻辑分层构造、构造实现、数据库等,特别是在Java大型项目中,还需要设计出程序中包构造及接口等,非常复杂,需要程序员进行全面考虑。对于医药销售管理系统整体涉及如下:3.1逻辑分层构造设计医药销售管理系统由4层构造构成,并遵循MVC构造进行设计。4层构造分别为表达层、业务逻辑层、持久层与数据库层,如图1.3所示。医药销售管理系统医药销售管理系统表达层(Struts框架)业务逻辑层(Struts框架)持久层(Hibernate框架)数据库层(MySQL数据库)图1.3逻辑分层其中,表达层与业务逻辑层均由Struts框架构成,表达层用于提供程序与顾客交互界面,项目中重要通过JSP、ActionForm及Struts标签库进行呈现;业务逻辑层用于解决程序中各种业务逻辑,项目中通过Struts框架中央控制器及Action对象对业务祈求进行解决;持久层由Hibernate框架构成,负责应用程序与关系型数据库之间操作;数据库层为应用程序所使用数据库,本实例中为MySQL数据库。对于4层构造详细实现如图1.4所示。医药销售管理系统医药销售管理系统视图JSP、ActionForm、Struts标签控制器Action、struts-config.xml持久化HibernateAPI、Hibernate.cfg.xmlMySQL数据图1.4逻辑分层实现3.2系统文献夹组织构造规范系统整体架构是一种项目开发原则,特别是在团队开发项目中,在编写代码之前,必要定制好项目系统文献夹组织构造,以使程序条理清晰,利于后期项目整合。在Java项目中可以将不同作用、功能相类似文献放置于同一种包中,这样既可以保证团队开发一致性,又可以将系统整体构造规范化。创立完系统中也许用到文献夹或Java包之后,在开发时只需将所创立类文献或资源文献保存到相应文献夹即可。医药销售管理系统文献夹组织构造如图1.5所示。图1.5医药销售管理系统文献夹组织构造3.3实体对象设计在应用Hibernate框架项目中,实体对象确立是其中核心。实体对象与数据库中数据表相相应,并通过O/R映射建立实体与数据库联系,Hibernate完全通过操作实体来操作数据库,因此一方面要拟定项目中实体对象。在医药销售管理系统中,实体对象及关系如图1.6所示。图1.6医药销售管理系统中实体对象及其关系从图1.6中可以看到,药物实体对象为Medicine类,药物类别实体对象为Category类,销售明细实体为SellDetail类,操作顾客实体为User类,这4个实体对象为医药销售管理系统核心实体对象,它们所相应映射文献均为“类名+hbm.xml”文献。其中,药物信息与药物类别为多对一关联关系,一种类别中包括各种药物对象;药物信息与销售明细为一对多关联关系,各种销售明细相应一种药物对象;销售明细与顾客之间为多对多关联关系,各种销售明细信息相应各种操作顾客。3.4定义ActionFormActionForm是简朴JavaBean,重要用来保存顾客所输入表单数据,Action要获取这些数据需要通过ActionForm对象进行传递。ActionForm对表单数据进行了封装,在JSP页面与Action对象中提供了交互访问办法。在使用过程中,可通过继承org.apache.struts.action.ActionForm对象来创立需要ActionForm对象,项目中所涉及到ActionForm对象如图1.7所示。图1.7项目中所涉及到ActionForm对象3.5持久层构造设计持久层构造通过Hibernate框架进行设计。由于Hibernate对不同对象增、删、改、查等操作具备一定共性,如添加数据使用save()办法、删除数据使用delete()办法等,项目中将这些具备共性操作抽取出来,封装成一种类,其她数据库操作对象可继承此类来拥有这些办法,从而减少程序中多余代码,如图1.8所示。图1.8持久层构造SupperDao类为所有数据库操作对象父类,在此类中定义了对数据库进行操作惯用办法,详细办法及阐明如表1.1所示。表1.1SupperDao办法及阐明办法阐明save()用于保存一种对象saveOrUpdate()用于保存或更新一种对象delete(Objectobj)用于删除一种对象,入口参数为Object类型findByHQL()通过HQL语句查询数据,入口参数为String类型HQL语句deleteByHQL()通过HQL语句删除数据,入口参数为String类型HQL语句uniqueResult()单值检索数据,入口参数hql为HQL查询语句、where为查询条件findPaging()分页查询数据,入口参数hql为HQL查询语句、offset为成果集起始位置、length为返回成果集条目数、where为查询条件这些办法均为数据库操作惯用办法,因此将其封装在单独一种类中,对于各个对象数据库有关操作,可通过继承此类来获取这些惯用办法。其子类对象有CategoryDao类、MedicineDao类、SellDao类、UserDao类,其功能分别简介如下。CategoryDao类:药物类别数据库操作对象,用于封装与药物类别有关数据库操作办法。MedicineDao类:药物信息数据库操作对象,用于封装与药物信息有关数据库操作办法。SellDao类:药物销售数据库操作对象,用于封装与药物销售有关数据库操作办法。UserDao类:顾客数据库操作对象,用于封装与管理员及系统有关数据库操作办法。3.6业务层构造设计业务层构造重要通过Struts框架进行设计,由Struts中央控制器对各种操作祈求进行控制,并通过相应Action对其进行业务解决,项目中所用到Action对象及关系如图1.9所示。图1.9Action对象及关系Action、DispatchAction与LookUpDispatchAction为Struts封装Action对象,具备不同特点及作用,项目中通过继承这几种对象实现对不同业务祈求解决。除这3个对象外,图1.9中别的Action对象均为自定义Action对象。在这些自定义Action对象中,LanguageAction与LoginAction用于解决国际化语言及顾客登录操作。由于两者不涉及过多业务逻辑,它们都直接继承于Action对象。BaseAction对象与DeleteAction对象为重要Action对象,两者都继承了DispatchAction对象。项目中封装这两个对象目在于简化程序中业务逻辑、提高程序安全性。在这两个对象中均对顾客登录身份做出了严格验证,其子类对象通过继承不必再考虑顾客登录安全问题,而更专注于业务逻辑,同步通过继承还可以减少程序代码量。其中BaseAction对象子类及作用如表1.2所示。表1.2BaseAction对象子类及其作用子类作用SellAction封装药物销售有关操作,解决封装药物销售祈求SystemAction封装系统有关操作,解决系统级祈求CategoryAction封装药物类别有关操作,解决药物类别有关操作MedicineAction封装药物信息有关操作,解决封装药物信息有关祈求RequireAction封装药物需求及库存有关操作,解决药物需求有关祈求DeleteAction对象继承了LookUpDispatchAction对象,此类通过重写getKeyMethodMap()办法对数据进行批量删除操作,其子类对象及其作用如表1.3所示。表1.3DeleteAction对象子类及其作用子类作用DeleteMedicineAction封装药物信息删除操作,用于批量删除药物信息DeleteReqMedAction封装药物需求信息删除操作,用于批量删除药物需求信息3.7页面构造设计医药销售管理系统页面构造采用框架进行设计,通过HTML语言中<frameset>标签及<frame>标签将页面提成3个某些,分别为页面头部、页面导航及内容页面,如图1.10所示。图1.10页面布局此种布局方式将每一种页面单独置于一种框架之中,其中“页面头部”和“页面导航”在登录之后是固定不变,对于顾客操作将在“内容页面”显示成果。使用这种方式有点在于:(1)避免了JSP页面中大量引用<include>动作标签。(2)避免浏览器重复加载“页面头部”及“页面导航”等同样内容,加快浏览器速度。4配备文献在编写代码之前,需要做某些准备工作,如项目环境搭建、项目所涉及到第三方类库支持、web.xml配备等。在医药销售管理系统中,重要涉及到Struts框架、Hibernate框架及JFreeChart组件应用,因而在项目开发之前,需要添加其类库支持。4.1配备web.xmlweb.xml文献是Web项目配备文献,在医药销售管理系统中,此文献需要配备Struts框架、JFreeChart组件和过滤器等信息。4.2配备struts-config.xmlStruts框架实现了MVC模式,web.xml和struts-config.xml文献是其两个重要配备文献,其中web.xml文献实现了Struts初始化加载,而struts-config.xml是它核心配备文献。Struts-config.xml所做工作比较多,涉及ActionForm对象定义、顾客祈求和Action之间映射、异常解决等重要配备。其中<form-beans>标签用于注册实例中所涉及到ActionForm对象,<global-forwards>标签用于设立全局跳转,<action-mappings>标签配备顾客祈求Action对象映射。4.3配备hibernate.cfg.xmlHibernate.cfg.xml文献是Hibernate配备文献,在项目中,此文献配备了数据库方言、数据库链接信息、自动建表属性和打印SQL语句等属性。5实体及映射Hibernate是一种ORM产品,它完全可以操作对象方式进行数据库操作,其实体对象与数据表之间通过映射文献建立映射关系。因而,在医药销售管理系统中需要建立实体对象与数据表之间映射。5.1药物实体映射药物实体对象持久化类为Medicine类,此类封装了药物有关属性提供相应getXX()和setXXX()办法。药物对象与药物类别对象为多对一关联关系,因此在Medicine类中加入了药物类别属性category,其关联关系通过映射文献Medicine.hbm.xml进行映射。映射文献Medicine.hbm.xml将实体对象Medicine映射为tb_medicine表,主键生成方略采用自动生成方式。此映射文献中,对于数据表某些字段还通过not-null、length、unique等属性映射字段属性,其中not-null用于映射字段非空属性、length用于映射字段长度、unique用于映射字段与否唯一。映射后数据表如图1.11所示。图1.11tb_medicine表5.2药物类别实体映射药物类别实体用于封装药物类别属性信息,其持久化类为Category类,与药物对象存在一对多关联关系。药物对象与药物类别对象为多对一关联关系,但从药物类别一端来看,药物类别对象与药物对象又是一对多关系,因此程序中采用了多对一双向关联进行映射。药物类别实体对象映射文献为Category.hbm.xml。Category类所映射数据表为tb_category,其中<ser>标签用于映射药物类别实体与药物实体间一对多关联关系,此种映射方式将在药物数据表中添加categoryId字段。映射后数据表tb_category如图1.12所示。图1.12tb_categoy表5.3销售明细实体映射销售明细用于描述药物销售时详细状况,如销售时间、销售人员、销售数量等。这些信息十分重要,需要记录到数据库中,实例中将其封装为SellDetail类。为了以便查看销售明细总额信息,在SellDetail类中加入了sellTotal()属性,此属性并不进行数据表映射,它只有一种与之相应get()办法,在此办法中通过单价与数量运算对sellTotal进行赋值,并将其返回。销售明细实体映射文献为SellDetail.hbm.xml,此映射文献中映射了两个多对一关联关系,分别为与药物对象多对一关系及操作顾客间多对一关系。销售明细实体映射数据表为tb_selldetail。在映射文献SellDetail.hbm.xml中,通过两个<many-to-one>标签分别映射与药物对象及操作顾客多对一关联关系,并配备了级联操作类型为save-update。映射后数据表构造如图1.13所示。图1.13tb_selldetail表5.4顾客实体映射在医药销售管理系统中,顾客实体用于封装管理员基本信息,如登录顾客名、密码等属性,其类名为User。User类中属性相对较少,其映射过程也相对简朴。其映射文献为User.hbm.xml。顾客实体所映射数据表为tb_user,其构造如图1.14所示。图1.14tb_user表6公共类设计在Java程序开发中,如果一种功能重复被调用,则可将该功能抽取出来封装为一种类作为公共类,在需要此功能地方通过此类进行实现。公共类实质是代码重用一种方式,在面向对象开发模式中经常使用它来简化程序中代码,提高程序可读性。下面是医药销售管理系统找那个公共类设计。6.1Hibernate过滤器在没有使用Spring管理Hibernate状况下,对Hibernate管理依然存在一定难度,特别是在J2EE开发中,线程安全、SessionFactory对象、Session对象、Hibernate缓存及延迟加载等是程序设计中难题,管理不当将会对程序导致极为严重影响。在医药销售管理系统中,将SessionFactory对象、Session对象置于过滤器中,由过滤器对其进行管理,从而解决了这些问题。在Web项目中,以普通方式使用Hibernate将无法解决Hibernate延迟加载,如图1.15所示。当有一种业务祈求查询数据时,一方面要启动Session对象,然后Hibernate对数据进行查询。在关闭Session对象,最后通过JSP页面来显示数据。在这一过程中,如果查询数据时使用了延迟加载,当JSP页面显示数据信息时,Hibernate将抛出异常信息,由于此时Session对象已经关闭,Hibernate不能再对数据进行操作。启动Session启动Session查询数据(Lazy)关闭SessionJSP页面业务祈求图1.15普通方式通过过滤器管理HibernateSession对象则可以避免此问题,其实现过程如图1.16所示。业务祈求业务祈求Init()办法初始化SessionFactorydoFilter()过滤解决业务解决destroy()办法销毁SessionFactoryJSP页面SessinFactory关闭SessionResponseResponseRequestRequest图1.16Hibernate过滤器在Web容器启动时,过滤器被初始化,它将执行init()办法,在后续操作中不会再次被执行;而当容器关闭时,过滤器将执行destroy()办法。这两个办法正好符合SessionFactory对象生命周期,在运营期间只执行一次操作,可用于实例化及销毁SessionFactory对象。对于Session对象关闭操作,可以在业务逻辑解决结束后、response祈求转发大View层之迈进行。实例将其封装在HibernateFilter类中,此类继承了Filter类,它是一种过滤器。为了保证线程安全性,实例中将Session对象存储与ThreadLocal对象中,当用到一种Session对象时,一方面从ThreadLocal中获取,在无法获取状况下才会启动一种新Session对象。同步,为了保证Session对象能在resopnse祈求转发到View层之前被关闭,实例采用了try…finally语句对Session对象进行关闭。6.2SupperDao类SupperDao类为项目中所有数据库操作类父类,此类封装了数据库操作惯用办法。在此类中,由于Hibernate对数据操作都需要用到Session接口,类中定义了一种protected类型Session对象,为其子类提供了以便。save()办法及savaOrUpdate()办法都用于保存一种对象,其入口参数均为Object类型。其中saveOrUpdate()办法比save()办法更智能某些,可以依照实体对象中标记值来判断保存还是更新操作。SupperDao类中使用这两个办法对实体对象进行保存及更新操作。删除操作办法为delete(),入口参数为Object类型,此办法通过Session接口delete()办法进行实现。SupperDao类为项目中所有数据库操作类父类,在设计时应当考虑全面。HibernateHQL查询语言提供了更为灵活查询方式,在这个超类之中应当加入HQL操作办法,其中findByHQL()办法用于依照指定HQL查询语句查询成果集,deleteByHQL()办法用于依照指定HQL查询语句进行删除操作。Hibernate单值检索在查询后返回单个对象,当返回成果包括多条数据时,Hibernate将抛出异常。此种操作可用于查询单条数据,如聚合函数count()等。在SupperDao类中,单值检索办法为uniqueResult()。此办法入口参数为HQL查询语句及查询条件,其中查询条件为Object[]数组类型,用于装载查询语句中参数。例如HQL语句“fromMedicinemwherem.id=?”,此时即可通过参数where对其进行动态赋值。分页查询在程序开发中经惯用到,不但以便查看,还可以减少成果集返回数量,提高数据访问效率。使用Hibernate分页查询办法极为简朴,只需要传入几种参数即可,但在SupperDao类中对其进行了扩展,加入了HQL语句动态赋值,其办法名为findPaging()。此办法入口参数有4个,其中参数hql为HQL查询语句,它容许传入参数中带有占位符“?”HQL语句;参数offset为查询成果集对象起始位置;参数length为查询成果偏移量,也是返回数据条目数;参数where为查询条件,属于Object[]数组类型,用于装载HQL语句中参数。通过上述这几种参数基本可以满足项目中所有分页查询,固然遇到特殊状况时,可以通过子类对象重写此办法。6.3BaseAction类BaseAction类是业务层,有一种超类对象,它继承了StrutsDispatchAction类,同步还为子类对象提供公用办法。此类一方面定义了3个protected类型变量,分别用于设立每页记录数、本地语言信息及国际化消息资源。StrutsDispatchAction类继承了Action类,此类解决祈求时一方面要执行execute()办法,然后通过控制器再转发到相应办法进行业务解决。依照这一分析,可以在execute()办法中对顾客身份作出验证,其实现过程如图1.17所示。业务祈求一业务祈求一业务祈求三业务祈求二业务祈求四业务解决二业务解决三业务解决一业务解决四Execute()办法验证顾客身份错误解决验证失败验证成功验证成功图1.17顾客身份验证如果对系统中涉及到Action均编写一种验证办法,则程序代码重复性太高,不能体现出面向对象设计模式,因此需将其单独封装在BaseAction类中,此类通过重写Action类execute()办法对顾客身份进行验证。由于分页查询应用比较多,因此在业务层将其封装在BaseAction类中,通过getPage()办法进行实现,子类对象可以通过继承来获取此办法。getPage()办法返回一种Map集合对象,该集合用于装载成果集及分页条。其中,成果集对象为一页中所有数据集合,它是一种List对象;分页条为分页查询后在JSP页面所显示分页信息,如记录数、页码、上一页、下一页超链接等,它是一种String类型字符串。getPage()办法入口参数有四个,其中参数hql为分页查询HQL语句,此语句不可以涉及select子句,它从from子句开始,可以传入带有占位符HQL,但需要通过查询条件参数where传递占位符值,当HQL语句没有参数时,where参数可以设立为null;参数recPerPage为每一页记录数;currPage为当前页码;action为分页所祈求Action地址。getPage()办法提供这些参数目在于提高程序代码重用性,由于在医药销售管理系统中,通过这些参数,getPage()办法已满足所有分页查询,用到分页查询地方都调用了此办法。此外,在其她项目中此办法重用价值也是非常高。分页查询在业务层实现比较繁琐,由于在分页条中要考虑到国际化实现,因此在分页条中所有文字信息均通过MessageResources对象读取国际化资源文献来获取。MessageResources对象是Struts中对象,此对象依照Locale信息读取相应国际化消息资源文献。6.4DeleteAction类公共类DeleteAction重要用于对项目中LookupDispatchAction祈求进行解决。它继承了LookupDispatchAction类,重写了execute()办法对顾客身份作出验证,当顾客身份验证失败时将进行错误解决;同步,此类还重写了LookupDispatchAction类中getKeyMethodMap()办法,添加了两个按钮对象key。6.5字符串工具类在一种Web项目中,字符串是经常被操作对象。为了简化程序代码及提高程序可读性,对于经惯用到字符串解决办法,可以封装一种字符串工具类对其进行操作。例如JSP页面多选框,它提交参数值为数组类型,在数据库操作过程中需要将其转换为字符串类型;在超链接中,如果加入中文参数将不能被浏览器解析,需要对其进行一定解决才可以使用。类似于这种操作在程序中使用非常频繁,将其封装为一种公共类无疑是一种较好解决方案。在医药销售管理系统中,封装了一种名为StringUtil字符串工具类,用于对字符特殊解决。此类中均为静态办法。在HQL语句中,如果删除各种对象可以使用whereidin(1,2,3)方式进行删除。arr2Str()办法用于将数组转换为字符串,可以将JSP表单传递id值转换为此种方式;encodeURL()办法可对字符串进行URL编码,重要用于对具有中文超链接进行解决;encodeZh()办法用于对字符串中中文乱码进行解决。7国际化国际化是Struts一项强大功能,它以不同国家语言构建本地化页面,以便不同国家、不同语言顾客浏览访问。在医药销售管理系统中,分别构建了中文和英文两种语言环境,依照使用者浏览器默认语言环境呈现不同语言显示方式。7.1国际化资源文献医药销售管理系统对所有涉及到语言信息地方均进行了国际化设立,涉及JSP页面文字信息及JS脚本提示信息等。重要包括3个国际化资源文献,其中属性文献为MessageRperties为默认资源文献,实例中将其设立为中文;属性文献MessageResources_en_US.properties为英文国际化资源文献;MessageResources_zh_CN.properties为中文国际化资源文献。在编写属性文献时应当注意,属性文献以Unicode编码,在解决中文时应当对其进行转码。Java提供了将中文转换为Unicode编码格式工具,在命令窗口中直接输入“native2ascii”,再输入中文,然后按回车键,将输出中文相应Unicode码。7.2国际化实现实例中除了对顾客浏览器语言自动匹配外,还为使用者提供了中文和英文语言链接,顾客在使用过程中可对语言进行自动切换。此祈求由LanguageAction类进行解决。本地语言信息存储在Session会话中Globals.LOCALE_KEY值中,它是Struts默认配备,可以通过StrtusAPI协助文档和源码得到。对于中、英文两种祈求,实例中分别创立了中、英文所相应Locale对象,并将其设立到Globals.LOCALE_KEY值中,实现了语言自动切换。8系统登陆模块系统登录是一种顾客身份验证过程,只有登录成功顾客才可以对系统进行操作,否则不能对系统进行管理维护。形象地说,它就是系统一道安全门。8.1查询顾客创立名为UserDao类,封装对顾客及系统级数据操作。在此类中编写login()办法,用于依照顾客名及密码查询顾客对象。在顾客登录过程中,需要判断数据库顾客对象与否存在,当顾客提交登录信息时,调用此办法可返回查询后顾客对象,如果查询不到将返回null值。8.2登陆祈求顾客登录祈求由LoginAction类进行解决,此类继承了Action对象,它重写execute()办法对顾客登录祈求进行验证。UserForm对象为顾客ActionForm对象,Struts自动将JSP页面表单信息封装在此对象中,因此可以直接获取ActionForm对象中属性信息。LoginAction类通过UserForm中顾客名和密码属性,调用UserDao对象中login()办法对顾客信息进行查询,当数据库中存在与之匹配数据,则登录成功,否则登录失败。8.3登录页面在Web文献夹根目录中创立login.jsp文献,即系统中顾客登录页面,在其中放置顾客登录表单。在此页面中,一方面通过<logic:notEmpty>标签判断与否存在error值,如果存在即表达顾客登录发生错误,将在登录页面显示错误信息。Login.jsp页面运营成果如图1.21所示。图1.21系统登录页面9药物类别信息管理药物超市经营药物众多,为以便产看、记录,需要对其进行分类。药物类别信息管理模块重要是对药物类别信息进行统一管理,其中涉及对药物类别添加、查看、记录等操作。9.1药物类别持久层设计CategoryDao类是药物类别数据库操作类,它继承了SupperDao类,提供对药物类别数据库操作办法。其中loadCategory()办法用于查询指定id药物类别信息,其入口参数为int型药物id。在添加药物信息时,需要添加与之相应类别信息,因此还需要提供一种查询所有药物类别信息办法——findAllCategory()。为以便药物类别数据记录,实例中对药物类别中药物数量进行记录操作被定义在findCategoryAndCount(),由HQL语句内连接查询进行实现。findCategoryAndCount()办法中hql属性为内连接查询语句,可对药物数量按药物类别进行分组记录,查询后返回其成果集对象。9.2药物类别添加药物类别添加是指将药物类别信息写入数据库,实现过程如下。9.2.1类别添加、修改祈求解决实例中将药物类别有关祈求封装在CategoryAction类中,此类继承了BaseAction对象,因此在对类别信息进行解决时,不必考虑顾客与否登录安全问题。此类中解决添加类别信息祈求办法为add(),由于CategoryAction类是一种DispatchAction对象,因此当祈求参数为add时,将由此办法进行解决。此办法调用了CategoryDao对象saveOrUpdate()办法,因此药物类别信息添加与修改操作均可通过此办法进行实现;当传递CategoryForm对象具有id值时,则进行修改操作。9.2.2类别添加页面类别添加页面即category_add.jsp文献,此页面中重要放置了类别添加表单。此页面中使用Struts<html:hidden>标签设立药物类别id属性值,如果此属性不为空,则意味着操作为修改操作。类别添加页面运营成果如图1.22所示。图1.22类别添加页面9.3分页查看类别信息在添加药物信息后,系统将跳转到类别信息列表页面。在此页面中将对类别信息进行分页显示,此外还提供了药物类别修改与删除超链接,如图1.23所示。图1.23类别信息列表页面9.3.1查询与删除祈求解决在CategoryAction类中,药物类别信息分页查询办法为paging(),由于此类继承于BaseAction类,因此调用其父类中getPage()办法就可以实现。它将返回成果集与分页条对象。在此办法中,currPage属性为祈求页码;action对象为JSP页面祈求action地址;hql为查询语句,由于它不具有占位符参数,因此getPage()办法条件参数设立为null.9.3.2类别信息列表页面category_list.jsp是类别信息列表页面,在此页面中使用Struts标签对药物类别信息进行迭代输出。在程序开发过程中,应尽量减少程序中bug。例如,category_list.jsp页面中,在输出request对象中属性时,一方面使用<logic:present>标签判断其属性与否存在。Category_list.jsp页面中“修改”与“删除”超链接使用Struts<html:link>标签进行设立,此标签功能十分强大,它可以设立超链接中参数。实例中使用paramName属性用于设立所迭代对象,paramId属性用于设立参数名称,paramProperty属性用于设立参数值,href属性用于指定链接地址。9.4类别修改与删除在CategoryAction类中,类别修改与删除相对简朴某些,其中解决删除类别祈求办法为delete(),可依照指定药物类别id删除药物类别对象。解决修改类别信息祈求办法为edit(),此办法通过类别id加载药物类别对象将类别信息保存到CategoryForm对象中,最后转发到编辑页面。此办法在加载类别信息后,会将页面转到类别添加页面,由于类别添加祈求解决办法调用了HibernatesaveOrUpdate()办法,因此会对其进行自动更新。9.5药物类别记录为了以便查看、管理药物记录信息,实例中使用了报表组件JFreeChat对药物分类进行记录。其实现过程如下:9.5.1JFreeChat工具类创立名为ChartUtil类,用于生成制图对象JFreeChat。其中categoryChart()办法用于生成药物类别记录饼形图对象,其入口参数为装载成果集List集合对象。此办法中,通过传递List集合对象生成DefaultPieDataset数据集合,然后使用制图工厂ChartFactory创立饼形图JFreeChart对象,并将其返回。9.5.2Action祈求药物类别记录祈求由CategoryAction类findCategoryAndCound()办法进行解决,此办法一方面通过CategoryDao对象记录药物类别信息,获取成果集对象后,通过ChartUtil类categoryChart()办法生成制图对象,最后将生成图片途径放置到request中。9.5.3显示报表药物类别记录信息通过category_graph.jsp页面进行显示,此页面通过<bean:write>标签获取所生成图片途径。为避免空指针错误,category_graph.jsp页面使用<logic:notEmpty>标签判断生成图片途径与否存在,其运营成果如图1.24所示。图1.24category_graph.jsp页面10药物信息管理药物信息管理重要是对药物基本信息维护,其中涉及对药物信息添加、删除、修改、查询等操作。10.1药物对象持久层设计MedicineDao类是药物对象数据库操作类,它继承了SupperDao类,此类重要包括3个办法,分别为loadMedicine()、loadMedicineCategory()、findMedicineByMedNo()。其中,loadMedicine()办法与findMedicineByMedNo()办法用于依照药物id及药物编码查询药物信息;loadMedicineAndCategory()办法用于查询药物信息与药物类别信息。loadMedicineAndCategory()办法使用内连接对药物信息表与药物类别表进行联合查询,可以减少SQL语句数量。药物实体与药物类别实体存在多对一关联关系,当同步查看药物信息与药物类别信息时,Hibernate将发出两条SQL语句,分别为查询药物信息SQL语句与查询药物类别SQL语句,因此实例中采用内连接将药物信息与药物类别信息一次加载出来,减少了SQL语句,提高了数据库性能。10.2药物信息添加与修改药物编码是药物对象一种标记,当添加一种药物信息时,需要判断此药物与否已经在数据库中存在,如果存在则只需更新药物数量即可,其添加流程如图1.25所示。添加药物添加药物保存到数据库更新药物数量判断与否存在不存在存在图1.25药物添加流程10.2.1药物添加祈求解决药物管理Action类为MedicineAction,它继承于BaseAction类,是一种DispatchAction对象。此类findMedicineByMedNo()办法用于依照药物编码查询药物信息与否存在,当所添加药物编码存在时,将跳转到药物更新页面,否则跳转到药物添加页面。MedicineAction类add()办法用于添加或修改药物信息。此办法所做工作比较多,包括了判断药物信息与否存在、图片上传、保存药物以及更新药物等操作。此办法调用了MedicineDao类中saveOrUpdate()办法,因而合用于药物对象添加与修改操作。其中上传文献命名采用日期时间格式,为防止重复实例中加入时间毫秒;上传文献保存在Web目录upload文献夹中。10.2.2药物添加页面药物添加有3个页面,其中med_add.jsp页面提供输入药物编号表单;当添加药物信息在数据库中不存在时,将通过med_save.jsp录入药物详细信息;当所添加药物信息存在与数据库中时,经通过med_update.jsp页面更新药物数量,如图1.26所示。图1.26更新药物数量10.3分页查看所有药物在添加药物信息后,祈求转发到查看所有药物信息,对所有药物信息进行分页显示。此操作通过MedicineAction类paging()办法进行解决。此办法通过调用MedicineAction类继承getPage()办法进行分页查询,在查询后分别将成果集与分页条放置到request中,并转发到med_list.jsp页面进行显示,如图1.27所示。图1.27med_list.jsp页面10.4查看药物详细信息在药物列表中提供了查看药物详细超链接,此链接作用于药物名称上,单击此链接将进入药物查看祈求中,该祈求由MedicineAction类view()办法进行解决。在view()办法中,一方面通过传递药物id值查询药物对象,然后将查询到药物信息放置于request对象中,转发到med_view.jsp页面进行显示,如图1.28所示。图1.28med_view.jsp页面在med_view.jsp页面中,通过<logic:empty>标签及<logic:notEmpty>标签对药物图片与否存在进行逻辑判断,当药物图片存在时,通过<bean:write>标签输出图片途径,否则输出提示信息。10.5模糊查询药物为以便顾客查询药物,药物信息管理模块还提供了药物模糊查询功能,即依照顾客所输入核心字信息,对药物名称、药物描述等各种药物属性进行模糊匹配,并分页显示模糊查询后成果集。10.5.1药物模糊查询祈求解决药物模糊查询通过MedicineAction类blurQuery()办法进行解决。此办法依照提交核心词keyWord组合HQL语句,调用getPage()办法获取查询后成果信息对象与分页条对象。HQL模糊查询使用like作为核心字,此办法中分别对药物名称、药物编码、出厂地址及药物描述进行了模糊匹配。10.5.2药物模糊查询页面药物模糊查询页面为med_list.jsp,此页面包括输入药物信息表单。为简化程序中代码,此表单并没有使用Struts标签中form表单,而采用了普通<form>标签进行定义。此段代码在项目中是一段可以重用代码,涉及到模糊查询时可通过更改表单中action来实现。当在此表单中输入模糊核心词时,单击“查询”按钮,系统将进行模糊查询。例如,查询核心词为“感冒”,其查询成果如图1.29所示。图1.29模糊查询药物10.6高档查询使用模糊查询返回数据成果集也许比较复杂,不以便寻找某一确切药物。此时高档查询便派上了用场,此查询可以依照药物各种属性信息来查询一种确切药物对象,例如输入一种药物名称、药物编码及其她属性,可进行更为详细查询。实例中通过MedicineAction类query()办法对高档查询祈求进行解决,此办法通过MedicineForm对象构造查询条件,并调用getPage()办法对查询后成果集进行分页显示。10.7查看库存为了以便操作人员理解药物库存数量,本系统中提供了对库存数量检索功能,即通过比较运算符查询相应库存数量,如图1.30所示。图1.30查看库存MedicineAction类QueryMedCount()办法用于解决库存数量查询祈求,此办法通过参数type判断其查询类型,并构造相应HQL查询语句。10.8药物批量删除药物批量删除操作使用LookUpDispatchAction对象进行解决,此操作通过Struts资源文献,映射JSP页面与LookUpDispatchAction对象之间祈求关系,其实现原理如图1.31所示。业务办法业务办法业务办法MapKeyvalueLookupDispatchAction“删除所有”按钮“删除所选”按钮JSP页面Struts资源文献Button.delete.allButton.delete.selected图1.31LookUpDispatchAction实现批量删除Struts资源文献中定义了两个key,它们所相应值分别为“删除所选”、“删除全选”,两者将映射至JSP页面中按钮;同步两者还相应LookUpDispatchAction对象中Map集合,此集合中key相应资源文献中key值,value相应LookUpDispatchAction对象中业务办法,当单击页面中一种按钮时,将触发LookUpDispatchAction对象相应办法。10.8.1批量删除祈求解决解决批量删除祈求类为DeleteMedicineAction类,它继承与DeleteAction类,是一种LookUpDispatchAction对象,此类通过all()办法与selected()办法解决药物批量删除操作。此类父类对象DeleteAction重写了LookUpDispatchAction对象getKeyMethodMap()办法,它已经与Struts资源文献中key值进行匹配,因此此类只需要对业务祈求进行相应解决即可。10.8.2映射JSP页面中按钮在药物信息列表页面med_list.jsp中,添加批量删除表单与按钮,其中“删除所选”与“删除所有”按钮通过<htnl:submit>标签添加。11购买药物购买药物模块重要对购买药物祈求进行解决。对于顾客购买药物,实例中使用了购物车模式。当顾客拟定购买一种药物时,先将其添加到购物车中;接下来可以继续选购其她药物,在选购药物结束后对其进行统一结账。这种做法不但可以以便顾客选购药物,且能减少程序中所发出SQL语句,提高数据库性能。11.1选购药物在程序中,对于顾客所选购药物一方面将其加到一种List集合中,然后再将其保存到Session会话中;当顾客所购买药物发生变化时,将对Session会话中对象进行操作,该操作通过SellAction类canSellMeds()办法进行祈求。为了安全起见,程序中对于每一种购买药物都要进行数据查询,判断其库存与否满足顾客需求,如果库存数量不大于顾客所需求数量,程序将对其进行一定错误

温馨提示

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

评论

0/150

提交评论