基于SSM宝康药房销售管理系统

admin2024-04-03  0

摘要

随着我国市场经济的蓬勃发展和人们对医药产品需求的迅速增加,医药销售行业正处于一个高速发展的时期。行业的快速发展必然导致竞争的加剧,面对药品销售业日益严酷的竟争现实,加强管理、提高工作效率和改善服务质量成了急待解决的问题。而解决这些问题的关键措施之一就是利用计算机等现代信息技术,建立实用、先进、高效的药房销售管理系统,引进创新的经营机制,实现药品销售过程的全面信息化管理,以适应企业生存和发展的新形势。因此,开发一个宝康药房销售管理系统是十分必要的。

根据需求,确定系统采用JSP技术,SSM框架,JAVA作为编程语言,MySQL作为数据库。整个系统要操作方便、易于维护、灵活实用。主要实现了频道维护、新闻维护、药品维护、订单维护、系统管理等功能。

关键词宝康药房销售管理系统; JSP; MYSQL  

系统的详细设计与实现

网站首页页面

基于SSM宝康药房销售管理系统,第1张

用户注册页面 

基于SSM宝康药房销售管理系统,第2张

产品展示页面 

基于SSM宝康药房销售管理系统,第3张

新闻展现页面 

基于SSM宝康药房销售管理系统,第4张

药品管理信息页面 

基于SSM宝康药房销售管理系统,第5张

订单维护信息页面 

基于SSM宝康药房销售管理系统,第6张

开发工具介绍 

SSM框架,是Spring + Spring MVC + MyBatis的缩写,Spring依赖注入DI来管理各层的组件,使用面向切面编程AOP管理事物、日志、权限等。SpringMVC代表了Model(模型)View(视图)Controller(控制)接收外部请求,进行分发和处理。Mybatis是基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来。

JSP它是一种基于文本的程序,它的特点体现在HTML代码与JAVA程序共同存在,在执行的时侯JSP会被Tomcat自动进行编译,在这个编译的过程对于开发者来说是透明的、不需要关注的。只有编译后的JSP才跟HttpServlet一样,都是Javax.Servlet.servlet接口的子类,因此换句话说其实JSP就是另一种形式的Servlet。

在JSP编译过程中,当客户端首先发出请求时,Tomcat首先将请求信息转换为标准Java源代码,将其存储在指定的程序目录中,将源代码编译为类文件,然后编译它。它是与JSP对应的Servlet。编译完成后,运行类文件以响应客户端的请求。在客户端访问已发出的请求之后,服务器不会重新编译JSP文件,而是直接调用类文件以响应客户端请求。

由于JSP只会在客户端首次请求的时候才会编译,因此,第一次请求JSP时会感觉比较慢一些,而之后的请求因为不会编译JSP,所以速度会快很多,如果将Tomcat保存的JSP编译后的Class文件删除,Tomcat也会重新编译JSP。

在开发Web时,通常需要修改JSP。 Tomcat能够自动检测JSP程序的更改。如果它检测到JSP源代码已更改,则它将在下次客户端请求JSP时重新编译JSP,而不重新启动Tomcat。这是默认情况下打开的自动检测功能。当然,检测更改所需的时间更少。

JSP是HTML代码与JAVA 代码的混合体,其中HTML部分遵循的是HTML的语法,JAVA部分则遵循JAVA的语法。JSP中就是由JAVA程序代码和HTML代码编辑而成,之后则使用MyEclipse 工具将项目JSP部署到Tomcat的下面,JSP可以直接嵌套规则的HTML源代码,它的可读性是非常的好,而在Servlet中输出的HTML只能应用out.println。而且JSP程序不需要在WEB.XML中部署。直接使用地址访问即可。

MySQL数据库管理系统是由瑞典的MySQL AB开发的,但经过几次曲折后,它现在已成为Oracle产品。它以“客户端/服务器”模式实现,是一个多用户,多线程,小型数据库服务器。 MySQL是开源数据,任何人都可以获取数据库的源代码来纠正MySQL缺陷。

MySQL具有跨平台的特性,它不仅可以在Windows平台上使用,还可以在UNX、Linux和Mac OS等平台上使用。相对其他数据库而言,MySQL的使用更加方便、快捷,而且MySQL是免费的,运营成本低,因此,越来越多的公司开始使用MySQL。

作为一个成熟的数据库管理系统,该功能将被列为满足各种业务需求的关键参考。 早期版本的MySQL非常简单,只能执行一些非常基本的结构化数据访问操作,但经过多年的改进和改进,它现在具有所有常见数据库管理系统所需的基本功能。

MySQL基本上实现了ANSI SQL92的大多数标准,并且通常不使用这些标准中的一些。 例如,在字段类型支持方面,另一个着名的开源数据库PostgreSQL支持最完整的类型,而Oracle和其他商业数据库(如DB2,Sybese等)与MySQL相比相对较小。这可以在TCX的Crash-me测试套件的测试报告中看到。在事务支持方面,虽然没有提供MySQL自己的存储引擎,但它实现了SQL92标准通过第三方插件存储引擎InnoDB定义的所有四个事务隔离级别,但实现过程中的每个引擎除外。实现可能会有所不同,这在当前的商业数据库管理系统中很少见。 例如,著名的Oracie数据库只实现其中两个(Serializable和Read Commited),而PostgreSQL支持四个隔离级别。

不过在可编程支持方面,MySQL和其他数据库相比还有一定的差距,虽然最新版的MySQL已经开始提供一些简单的可编程支持,如开始支持Procedure、Function、Trigger等,但是所支持的功能还比较有限,和其他几大商用数据库管理系统相比,还存在较大的不足。如Oracie有强大的PL/SQL,SQL Server有T-SQL,PostgreSQL也有功能很完善的PL/PGSQL的支持。

整体来说,虽然在功能方面MySQL数据库作为一个通用的数据库管理系统暂时还无法和PostgreSQL相比。但是其功能完全可以满足我们的通用商业需求,提供足够强大的服务。而且无论哪种数据库都不能声称它比任何其他商业数据库管理系统更好,甚至不敢声称具有某种类型的数据库产品的所有功能。由于每个数据库管理系统都有自己的优势,但也有其自身的局限性,这意味着每个产品的关键服务方向是不同的。

架构软件

(1)维护和升级方法很简单。目前,软件系统的改进和升级正变得越来越频繁,B/S架构产品显然表现出更加便利的特性。对于稍大的单元,如果系统管理员需要在数百甚至数千台计算机之间来回运行,可以想象效率和工作量,但B/S架构软件只需要管理服务器。所有客户端都只是浏览器,根本不需要任何维护。无论用户多大,多少分支都不会增加维护和升级的工作量,所有操作只需要服务器;如果是远程的,只需要将服务器连接到专用网络即可实现远程维护和升级。并分享。结果,客户变得更“瘦”,服务器变得更“胖”,这是未来信息发展的主流。将来,软件升级和维护将变得更加容易和易用,节省的人力,物力,时间和成本将是显而易见的。因此,维护和升级革命的方式是“瘦”客户端,“胖”服务器。

(2)降低成本,选择更多。 每个人都知道Windows几乎统一在桌面计算机,浏览器已成为标准配,但Windows在服务器操作系统中没有绝对的优势。 目前的趋势是使用B/S架构的应用程序管理软件可以安装在高度安全的Linux服务器上。 因此,服务器操作系统有很多选择。无论您选择哪种操作系统,大多数人都可以将Windows用作桌面操作系统计算机。这使得除了Linux操作之外,最流行的免费Linux操作系统得以迅速发展。系统是免费的,甚至数据库都是免费的。这个选项很受欢迎。

例如,很多人每天都去“新浪”网络,只要安装浏览器,您就不需要知道“新浪”服务器使用的操作系统。实际上,大多数网站并不使用Windows操作系统,而是大多数用户,计算机本身都由Windows操作系统安装的。

(3)应用程序服务器在运行时期间负载很重。 由于B/S架构管理软件仅安装在服务器上,因此网络管理员只需要管理服务器。用户界面的主要事务逻辑完全由服务器端WWW浏览器实现,并且事务逻辑非常小。在前端(浏览器)实现中,所有客户端只有一个浏览器,网络管理员只需要硬件维护。但是,应用程序服务器在较重的数据负载上运行。一旦服务器“崩溃”,后果是不可想象的。因此,许多组织都有数据库存储服务器来防止意外。

部分代码

package org.dao;

import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.entity.Orders;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import com.sun.org.apache.commons.beanutils.PropertyUtils;

@Repository
public class OrdersDao extends HibernateDaoSupport {

	@Autowired
	protected void initDao(SessionFactory sessionFactory) {
		super.setSessionFactory(sessionFactory);
	}

	public Orders findById(java.lang.String id) {
		return getHibernateTemplate().get(Orders.class, id);
	}

	public List<Orders> findList(Orders entity, int start, int limit) {
		DetachedCriteria criteria = DetachedCriteria.forClass(entity.getClass());
		if (entity != null) {
			/**********************************************************************/
			//MatchMode.ANYWHERE
			
			if (StringUtils.isNotEmpty(entity.getProduct())) {
				criteria.add(Restrictions.eq("product", entity.getProduct()));
			}

			
			if (StringUtils.isNotEmpty(entity.getId())) {
				criteria.add(Restrictions.eq("id", entity.getId()));
			}

			
			if (StringUtils.isNotEmpty(entity.getProductName())) {
				criteria.add(Restrictions.eq("productName", entity.getProductName()));
			}

					
						
			if(entity.getAmount()!=null){
				criteria.add(Restrictions.eq("amount", entity.getAmount()));
			}
			
						
			if(entity.getPrice()!=null){
				criteria.add(Restrictions.eq("price", entity.getPrice()));
			}
			
						
			/**********************************************************************/
		}
		criteria.addOrder(Order.desc("createtime"));
		return getHibernateTemplate().findByCriteria(criteria, start, limit);
	}

	public List<Orders> findAllList(Orders entity) {
		DetachedCriteria criteria = DetachedCriteria.forClass(entity.getClass());
		if (entity != null) {
			/**********************************************************************/
			
			
			if (StringUtils.isNotEmpty(entity.getProduct())) {
				criteria.add(Restrictions.eq("product", entity.getProduct()));
			}

			
			if (StringUtils.isNotEmpty(entity.getId())) {
				criteria.add(Restrictions.eq("id", entity.getId()));
			}

			
			if (StringUtils.isNotEmpty(entity.getProductName())) {
				criteria.add(Restrictions.eq("productName", entity.getProductName()));
			}

					
						
			if(entity.getAmount()!=null){
				criteria.add(Restrictions.eq("amount", entity.getAmount()));
			}
			
						
			if(entity.getPrice()!=null){
				criteria.add(Restrictions.eq("price", entity.getPrice()));
			}
			
						
			/**********************************************************************/
		}
		criteria.addOrder(Order.desc("createtime"));
		return getHibernateTemplate().findByCriteria(criteria);
	}
	
	public List findAllListByUserid(String userid) {
		DetachedCriteria criteria = DetachedCriteria.forClass(Orders.class);
		if (StringUtils.isNotEmpty(userid)) {
			/**********************************************************************/
			criteria.add(Restrictions.eq("userId", userid));		
			/**********************************************************************/
		}
		ProjectionList projectionList = Projections.projectionList();
		projectionList.add(Projections.groupProperty("product"));
		criteria .setProjection(projectionList);
		return getHibernateTemplate().findByCriteria(criteria);
	}

	public int countList(Orders entity) {
		DetachedCriteria criteria = DetachedCriteria.forClass(entity.getClass());
		if (entity != null) {
			/**********************************************************************/
			
			
			if (StringUtils.isNotEmpty(entity.getProduct())) {
				criteria.add(Restrictions.eq("product", entity.getProduct()));
			}

			
			if (StringUtils.isNotEmpty(entity.getId())) {
				criteria.add(Restrictions.eq("id", entity.getId()));
			}

			
			if (StringUtils.isNotEmpty(entity.getProductName())) {
				criteria.add(Restrictions.eq("productName", entity.getProductName()));
			}

					
						
			if(entity.getAmount()!=null){
				criteria.add(Restrictions.eq("amount", entity.getAmount()));
			}
			
						
			if(entity.getPrice()!=null){
				criteria.add(Restrictions.eq("price", entity.getPrice()));
			}
			
						
			/**********************************************************************/
		}
		ProjectionList projList = Projections.projectionList();
		projList.add(Projections.count("id"));
		criteria.setProjection(projList);
		HibernateTemplate hibernateTemplate = getHibernateTemplate();
		List<?> countList = hibernateTemplate.findByCriteria(criteria);
		if (!countList.isEmpty()) {
			return Integer.parseInt(countList.get(0) + "");
		}
		return 0;
	}

	public boolean delete(String id) {
		if (StringUtils.isNotEmpty(id)) {
			Orders entity = findById(id);
			if (entity != null) {
				getHibernateTemplate().delete(entity);
				return true;
			}
		}
		return false;
	}

	public boolean update(Orders entity) {
		try {
			if (entity != null && StringUtils.isNotEmpty(entity.getId())) {
				Orders updateEntity = findById(entity.getId());
				entity.setCreatetime(updateEntity.getCreatetime());
				PropertyUtils.copyProperties(updateEntity, entity);
				getHibernateTemplate().update(updateEntity);
			} else {
				entity.setCreatetime(new Date());
				getHibernateTemplate().save(entity);
			}
			return true;
		} catch (DataAccessException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}
		return false;
	}
}

测试 

软件在设计后必须进行测试,调试过程中使用的方法是软件测试方法。在开发新软件时,系统测试是检查软件是否合格的关键步骤,以及是否符合设计目标的参考。测试主要是查看软件中数据的准确性,正确的操作与否,以及操作的结果,还有哪些方面需要改进。

软件测试分为两个阶段,第一个阶段是对编程代码和模块功能的检测,然后是整个系统的调试。

软件测试的复杂性高于程序调试,在整个软件开发过程中,在投入市场之前,在各个方向进行严格的测试,正式使用。

软件测试和开发过程是一样的,必须符合软件工程的形式原则,符合管理理论。但是目前国内的软件测试已经积累了大量的经验和方法,步骤比较成熟,软件测试的效率也越来越高。

系统测试是验证所需的系统的实现过程,系统软件和硬件对应的测试是否有违反了手册,及时保护系统的分析和设计问题,测试是集成的软件和系统的各个部分的协调和测试操作环境以发现问题尚未发现和实现non-abnormal操作。测试如下:

恢复测试:在软件实现错误发生时,软件的测试是否恢复初始状态的步骤,在有效的时间内快速纠正错误并减少经济损失。

安全测试:系统具有良好的内部保护功能,防止黑客入侵系统。测试使用各种黑客技术攻击系统,看系统是否能抵御黑客攻击。

压力测试:这个测试是测试的情况下过多的访问系统是否可以接受大量用户访问,而同一用户多个访问系统测试系统是否可以及时处理,该系统请求会出错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!