github代码:https://github.com/tenglely/baseproject
医药管理系统
1. 目录
2.概述
- 项目背景:设计本系统,模拟医药超市的部分管理功能。
- 业务描述:药品由专门的采购人员从医药经销商处购进医药超市,并将药品信息记录入库,顾客从超市购买药品需填写相关个人信息,每次售药需登记经办人(医药超市员工,即销售人员)的信息,以及所售药品的信息。
- 开发环境:window10,mysql5.8, Eclipse Jee Neon
3.需求分析
- 功能模块
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)详细介绍你采用的前台软件是如何链接后台数据库并操纵数据库,包括链接、前台读取修改数据、后台更新数据库等等(注意:必须结合本系统来介绍)。
- 登录模块:不同用户登录,将显示不同的界面。管理员跳去管理界面,经办人跳去经办人界面,录药人员跳去录药界面。
登录界面:
核心代码:通过用户名和密码,查询一条员工信息,如果不为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());
}
来源:CSDN
作者:Teng_is_a_littlebird
链接:https://blog.csdn.net/Teng_is_a_littlebird/article/details/85013728