医药管理系统

早过忘川 提交于 2019-12-01 02:12:48

github代码:https://github.com/tenglely/baseproject
医药管理系统
1. 目录
2.概述

  1. 项目背景:设计本系统,模拟医药超市的部分管理功能。
  2. 业务描述:药品由专门的采购人员从医药经销商处购进医药超市,并将药品信息记录入库,顾客从超市购买药品需填写相关个人信息,每次售药需登记经办人(医药超市员工,即销售人员)的信息,以及所售药品的信息。
  3. 开发环境:window10,mysql5.8, Eclipse Jee Neon

3.需求分析

  1. 功能模块
    1.“信息查询”功能模块
    1)查询顾客信息
    2)查询经办人信息
    3)查询药品信息
    4)查询订单信息
    注:信息查询可基于单条件查询也可基于多条件复合查询。
    2.“信息录入”功能模块
    1)录入顾客信息
    2)录入经办人信息
    3)录入药品信息
    4)录入订单信息
    注:信息录入时,需要考虑数据信息的完整性、有效性等。
    3.“信息删除”功能模块
    1)删除顾客信息
    2)删除经办人信息
    3)删除药品信息
    4)删除订单信息
    注:可单条记录删除,也可批量删除,执行该项操作时需要考虑删除所需的约束条件(如:为顾客提供服务的经办人信息不能删除,顾客已购买的药品信息不能删除)。
    4.“信息修改”功能模块
    1)修改顾客信息
    2)修改经办人信息
    3)修改药品信息
    注:进行修改操作时,需要保证数据的一致性
    5.“信息浏览”功能模块
    1)浏览顾客信息
    2)浏览经办人信息
    3)浏览药品信息
    4)浏览订单信息
    注:通过系统提供的相关界面对client、agency、medicine等数据表中的内容进行浏览。
    6.“数据报表”功能模块
    1)顾客信息报表
    2)经办人信息报表
    3)药品信息报表
    4)订单信息报表
    注:按照一定的格式在相应的窗口界面上显示顾客、经办人、药品、订单等信息,并提供通过打印机打印输出的功能。
    7.用户管理与用户登陆功能模块
    系统可根据需要添加、删除用户,并可对已有的用户信息进行修改操作;在添加新用户时,可定义其操作权限(查询、更新、浏览、报表等权限);用户密码可进行随时修改;各种不同身份的用户登陆系统后,可享有不同的系统操作权限。

4.概念结构设计
生成基本E-R图

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.逻辑结构设计
在这里插入图片描述

6.主要模块的设计以及代码
1)给出主要模块的设计思路及关键代码,并对代码进行解释
2)详细介绍你采用的前台软件是如何链接后台数据库并操纵数据库,包括链接、前台读取修改数据、后台更新数据库等等(注意:必须结合本系统来介绍)。

  1. 登录模块:不同用户登录,将显示不同的界面。管理员跳去管理界面,经办人跳去经办人界面,录药人员跳去录药界面。
    登录界面:
    在这里插入图片描述
    核心代码:通过用户名和密码,查询一条员工信息,如果不为null则登录,再通过sevlet层对用户类型进行判断,使其跳去相应界面
    public Agency login(String username, String password) {
    String sql="select ano,aname,asex,aphone,aremark,apassword,aclass from agency where aname=? and apassword=? ";
    return super.get(sql, username,password);
    }

管理员界面:
在这里插入图片描述
经办人界面:
在这里插入图片描述
采购人员界面:
在这里插入图片描述

2)录入员工模块:管理员录入员工信息,定义员工用户类型(经办人,录药人员,管理员),不同用户权限功能不同
在这里插入图片描述
public int save(Agency agency) {
String sql=“insert into agency(ano,aname,asex,aphone,aremark,apassword,aclass) values(?,?,?,?,?,?,?)”;
return super.update(sql,agency.getAno(),agency.getAname(),agency.getAsex(),agency.getAphone(),agency.getAremark(),agency.getApassword(),agency.getAclass());
}

3)信息操作模块:管理员可以在此模块对顾客信息,员工信息,药品信息,订单信息进行查询、修改、删除操作
右侧列表:
在这里插入图片描述
顾客信息操作:点击详细查询会下滑出查询项(模糊、多值查询),右侧可进行单项删除、修改操作。点击编号可查询该用户所有订单。
在这里插入图片描述

查询顾客信息语句代码:
public List getNameList(String cname) {
String sql=“select cno,cname,csex,cage,caddress,cphone,cremark from client where 1=1”;
sql=sql+" and cname=’"+cname+"’";
return super.getList(sql);
}

@Override
public List<Client> find(String csex, String cage) {
	String sql="select cno,cname,csex,cage,caddress,cphone,cremark from client where 1=1";
	if(csex!=null && !"".equals(csex)){
			sql=sql+" and csex='"+csex+"'";
		}
	if(cage!=null && !"".equals(cage)){
		int a=Integer.parseInt(cage);
			sql=sql+" and cage="+a;
		}
	return super.getList(sql);
}

修改顾客信息语句代码:
public int updateUserById(Client client) {
String sql=“update client set cname=?,csex=?,cage=?,caddress=?,cphone=?,cremark=? where cno=?;”;
return super.update(sql,client.getCname(),client.getCsex(),client.getCage(),client.getCaddress(),client.getCphone(),client.getCremark(),client.getCno());
}
删除顾客信息语句代码:
public int deleteUserById(int id) {
String sql=“delete from client where cno=?;”;
return super.update(sql, id);
}

员工信息操作:点击详细查询会下滑出查询项(模糊、多值查询),右侧可进行单项删除、修改操作
在这里插入图片描述
查询员工信息语句代码:
public Agency get(int ano) {
String sql=“select ano,aname,asex,aphone,aremark,apassword,aclass from agency where ano=?”;
return super.get(sql, ano);
}
public List getAll() {
String sql=“select ano,aname,asex,aphone,aremark,apassword,aclass from agency”;
return super.getList(sql);
}
public List find(String aname, String aphone) {
String sql=“select ano,aname,asex,aphone,aremark,apassword,aclass from agency where 1=1”;
//记得空格
if(aname!=null && !"".equals(aname)){
sql=sql+" and aname like ‘%"+aname+"%’";
}
if(aphone!=null && !"".equals(aphone)){
sql=sql+" and aphone like ‘%"+aphone+"%’";
}
System.out.println(sql);
return super.getList(sql);
}

修改员工信息语句代码
public int updateUserById(Agency agency) {
String sql=“update agency set aname=?,asex=?,aphone=?,aremark=?,apassword=?,aclass=? where ano=?;”;
return super.update(sql,agency.getAname(),agency.getAsex(),agency.getAphone(),agency.getAremark(),agency.getApassword(),agency.getAclass(),agency.getAno());
}
删除员工信息语句代码
public int deleteUserById(int id) {
String sql=“delete from agency where ano=?;”;
return super.update(sql, id);
}

药品信息操作:点击详细查询会下滑出查询项(模糊、多值查询),右侧可进行单项删除、修改操作(已用过的药品无法删除,点击删除会显示提示信息)
在这里插入图片描述
查询药品信息语句代码:
public Medicine get(int mno) {
String sql=“select mno,mname,mmode,mefficacy,mprice,mcount from medicine where mno=?”;
return super.get(sql,mno);
}

public List getAll() {
String sql=“select mno,mname,mmode,mefficacy,mprice,mcount from medicine”;
return super.getList(sql);
}

public List find(String mname) {
String sql=“select mno,mname,mmode,mefficacy,mprice,mcount from medicine where 1=1”;
if(mname!=null&& !"".equals(mname)){
sql=sql+" and mname like ‘%"+mname+"%’";
}
return super.getList(sql);
}
修改药品信息语句代码:
public int updateUserById(Medicine medicine) {
String sql=“update medicine set mname=?,mmode=?,mefficacy=?,mprice=?,mcount=? where mno=?;”;
return super.update(sql,medicine.getMname(),medicine.getMmode(),medicine.getMefficacy(),medicine.getMprice(),medicine.getMcount(),medicine.getMno());
}
删除药品信息语句代码:
public int deleteUserById(int id) {
String sql=“delete from medicine where mno=?;”;
return super.update(sql, id);
}

订单信息操作:点击详细查询会下滑出查询项(模糊、多值查询),右侧可进行单项删除操作。点击经办人编号会显示操作该订单的经办人信息,点击顾客编号会显示该订单顾客信息,点击药品编号会显示该订单所购药品信息。(当删除一个顾客所有的订单后,该顾客信息也会删除)
在这里插入图片描述
查询订单信息语句代码:
public List getAll() {
String sql=“select sno,ano,cno,mno,csymptom,num,price,date from buy”;
return super.getList(sql);
}

public List find(int ano) {
String sql=“select sno,ano,cno,mno,csymptom,num,price,date from buy where 1=1”;
sql=sql+" and ano="+ano;
return super.getList(sql);
}

public List findByCno(int cno) {
String sql=“select sno,ano,cno,mno,csymptom,num,price,date from buy where 1=1”;
sql=sql+" and cno="+cno;
return super.getList(sql);
}

public List findByMno(int mno) {
String sql=“select sno,ano,cno,mno,csymptom,num,price,date from buy where 1=1”;
sql=sql+" and mno="+mno;
return super.getList(sql);
}

public List findBySno(int sno) {
String sql=“select sno,ano,cno,mno,csymptom,num,price,date from buy where 1=1”;
sql=sql+" and sno="+sno;
return super.getList(sql);
}

public Buy get(int sno) {
String sql=“select sno,ano,cno,mno,csymptom,num,price,date from buy where sno=?”;
return super.get(sql, sno);
}

删除订单信息语句代码:
public int deleteUserById(int id) {
String sql=“delete from buy where sno=?;”;
return super.update(sql, id);
}

4)批量删除模块:管理员对顾客信息、员工信息、药品信息、订单信息进行批量删除(勾选删除项(可全选),然后点击删除勾选项)

批量删除顾客信息界面:
在这里插入图片描述
核心代码:获取勾选的顾客信息的编号的数组,一一删除
private void delemore(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
String[] moreC=req.getParameterValues(“moreC”);
int[] a=new int[100];
for(int i=0;i<moreC.length;i++){
a[i]=Integer.parseInt(moreC[i]);
System.out.println(a[i]);
}
int q=0;
for(int j:a){
q=0;
q=clientService.deleteUserById(j);
}
if(q==0){
req.getRequestDispatcher("/seetable?table=client").forward(req, resp);
}else{
resp.sendRedirect(req.getContextPath()+"/error.jsp");
}
}

批量删除员工信息界面:
在这里插入图片描述
核心代码:获取勾选的员工信息的编号的数组,一一删除
private void delemore(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
String[] moreA=req.getParameterValues(“moreA”);
int[] a=new int[100];
for(int i=0;i<moreA.length;i++){
a[i]=Integer.parseInt(moreA[i]);
System.out.println(a[i]);
}
int q=0;
for(int j:a){
q=0;
q=agencyService.deleteUserById(j);
}
if(q==0){
req.getRequestDispatcher("/seetable?table=agency").forward(req, resp);
}else{
resp.sendRedirect(req.getContextPath()+"/error.jsp");
}
}

批量删除药物信息界面:
在这里插入图片描述
批量删除订单信息界面:
在这里插入图片描述
核心代码:获取勾选的订单信息的编号的数组,一一删除
private void delemore(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
String[] moreB=req.getParameterValues(“moreB”);
int[] a=new int[100];
for(int i=0;i<moreB.length;i++){
a[i]=Integer.parseInt(moreB[i]);
System.out.println(a[i]);
}
int q=0;
for(int j:a){
q=0;
q=buyService.deleteUserById(j);
}
if(q==0){
req.getRequestDispatcher("/seetable?table=buy").forward(req, resp);
}else{
resp.sendRedirect(req.getContextPath()+"/error.jsp");
}
}

5)数据报表模块:管理员点击相应表,打印输出成.xml文件
在这里插入图片描述
核心代码:修改jsp头为以下,然后在内传入需导出值
<%@ page language=“java” import=“java.util.,java.io.” pageEncoding=“UTF-8”%>
<%@ page contentType=“application/msexcel” %>
<%
response.setHeader(“Content-disposition”,“attachment; filename=test.xls”);
%>

6)登记模块:经办人帮顾客选择其要购买药品及数量,填写顾客信息及症状,提交
登记顾客界面:
在这里插入图片描述
核心代码:获取页面信息,生成一条顾客信息,和一条或多条订单信息(购买的一种药品为一个订单),还需减去相应药品的库存数量
private void AgencyAdd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
String cname=req.getParameter(“cname”);
int cage=Integer.valueOf(req.getParameter(“cage”));
String Csex=req.getParameter(“csex”);
String caddress=req.getParameter(“caddress”);
String cphone=req.getParameter(“cphone”);
String csymptom=req.getParameter(“csymptom”);
int ano=Integer.valueOf(req.getParameter(“ano”));
String cremark=req.getParameter(“cremark”);
HttpSession session=req.getSession();
String num[]=(String[])session.getAttribute(“num”);
Client client=new Client();
System.out.println(client.getCno());
client.setCname(cname);
client.setCage(cage);
client.setCsex(Csex);
client.setCaddress(caddress);
client.setCphone(cphone);
client.setCremark(cremark);
clientService.save(client);
int cno = 0;
List clients=clientService.getAll();
for(Client cc:clients)
cno=cc.getCno();
System.out.println(cno);
List list=(List)session.getAttribute(“mlist”);
int j=0,i=0;
for(Medicine m:list)
{
if(num[i]!=null&&num[i]!=""){
j=0;
System.out.println(num[i]);
Buy buy=new Buy();
buy.setCno(cno);
buy.setCsymptom(csymptom);
buy.setMno(m.getMno());
buy.setAno(ano);
buy.setNum(Integer.valueOf(num[i]));
Date date=new Date();
buy.setDate(date);
buy.setPrice(Integer.valueOf(num[i])*m.getMprice());
System.out.println(buy);
//当前库存=原来-购买的
Medicine medicine=medicineService.get(m.getMno());
int count=medicine.getMcount()-Integer.valueOf(num[i]);
medicine.setMcount(count);
int row=medicineService.updateUserById(medicine);
j=buyService.save(buy);
}
i++;
}
if(j>0){
req.getRequestDispatcher("/findBySno.bdo?ano="+ano+"&use=‘use’").forward(req, resp);
}else{
resp.sendRedirect(req.getContextPath()+"/error.jsp");
}

}

选择需买药品界面(勾选需购药品及数量,可多选):
在这里插入图片描述
7)订单记录模块:经办人可于此查看、删除自己登记过的订单信息。点击顾客编号会显示该订单顾客信息,点击药品编号会显示该订单所购药品信息。

8)录药模块:采购人员于此录入药品信息
在这里插入图片描述
录药语句代码:
public int save(Medicine medicine) {
String sql=“insert into medicine(mno,mname,mmode,mefficacy,mprice,mcount) values(?,?,?,?,?,?)”;
return super.update(sql,medicine.getMno(),medicine.getMname(),medicine.getMmode(),medicine.getMefficacy(),medicine.getMprice(),medicine.getMcount());
}

9)管理药品模块:采购人员对药品进行删除、修改操作
在这里插入图片描述

10)员工修改信息模块:点击修改个人信息,经办人或采购人员对自身信息进行修改(用户类型不可修改,只有管理员可修改)
在这里插入图片描述
修改员工信息语句代码:
public int updateUserById(Agency agency) {
String sql=“update agency set aname=?,asex=?,aphone=?,aremark=?,apassword=?,aclass=? where ano=?;”;
return super.update(sql,agency.getAname(),agency.getAsex(),agency.getAphone(),agency.getAremark(),agency.getApassword(),agency.getAclass(),agency.getAno());
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!