医院药品管理系统是现代化在线医药管理必不可少的基础设施与技术支撑环境。本系统可以实现管理员登录、重置密码,管理员进行药品信息的添加、更新、删除管理,还可以根据药品名称查询供药品信息,以及分页和排序,内置字段有:药品编号、药品名称、价格、厂家、保质期,而药品编号是依据生产日期而形成的。
该medicine类用于药品的属性有药品编号、药品名称、价格、厂家以及保质期,代码实现如下:
import jakarta.persistence.*;
import lombok.Data;
@Data
@Entity
@Table(name = "medicines")
public class Medicine {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "number")
private Long number;//药品编号
@Column(name = "name")
private String name;//药品名称
@Column(name = "price")
private String price;//价格
@Column(name = "manufacturers")
private String manufacturers;//厂家
@Column(name = "date")
private String date;//保质期
}
在数据访问层创建一个MedicineRepository接口,并编写一个查询药品名称的方法,为了能在Web前端以药品名称查询得出药品信息,代码实现如下:
import mm.rr.lmrjava.model.Medicine;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface MedicineRepository extends JpaRepository, Long> {
@Query("select a from Medicine a where a.name like %:name%")
List findByMedicinesName(@Param("name") String name);
}
该MedicineService接口用于封装药品增删改查的方法,代码实现如下:
import mm.rr.lmrjava.model.Medicine;
import org.springframework.data.domain.Page;
import java.util.List;
public interface MedicineService {
//获取所有的药品
List getAllMedicines();
//新增/更新一个药品
void saveMedicine(Medicine medicine);
//获取指定编号的药品
Medicine getMedicineById(long id);
//删除指定编号的药品
void deleteMedicineById(long id);
//查询药品
List findByMedicinesName(String name);
//分页
Page findPaginated(int pagNo, int pageSize, String sortField, String sortDirection);
}
并在service层创建一个实现业务逻辑的MedicineServiceImpl类继承MedicineService,从而实现药品信息的增删改查以及分页,最后通过药品名称查询得出药品信息,代码实现如下:
import mm.rr.lmrjava.model.Medicine;
import mm.rr.lmrjava.repository.MedicineRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class MedicineServiceImpl implements MedicineService {
@Autowired
private MedicineRepository medicineRepository;
@Override
public List getAllMedicines() {return medicineRepository.findAll();}
@Override
public void saveMedicine(Medicine medicine) {this.medicineRepository.save(medicine);}
@Override
public Medicine getMedicineById(long id) {
//调用数据访问层查找指定编号的药品,返回Optional对象
Optional optional = medicineRepository.findById(id);
Medicine medicine = null;
//如果存在指定编号的药品
if (optional.isPresent()) {
//从Optional对象中获取药品对象
medicine = optional.get();
} else {
//否则抛出运行时异常
throw new RuntimeException(" 找不到药品编号 :: " + id);
}
return medicine;
}
@Override
public void deleteMedicineById(long id) {this.medicineRepository.deleteById(id);}
@Override
public Page findPaginated(int pageNo, int pageSize, String sortField, String sortDirection) {
//设置排序参数,升序ASC/降序DESC?
Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name())
? Sort.by(sortField).ascending()
: Sort.by(sortField).descending();
//根据页号/每页记录数/排序依据返回某指定页面数据。
Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort);
return this.medicineRepository.findAll(pageable);
}
@Override
public List findByMedicinesName(String name) {
List optional = medicineRepository.findByMedicinesName((name));
return optional;
}
}
Controller 层主要对用户的请求参数进行处理(校验、转换),然后调用对应的 service 方法处理业务,得到业务结果后封装并返回结果响应给用户,代码实现如下:
import mm.rr.lmrjava.model.Medicine;
import mm.rr.lmrjava.service.MedicineService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Controller
public class MedicineController {
@Autowired
private MedicineService medicineService;
@GetMapping("/")
public String viewHomePage(Model model) {
return findPaginated(1, "name", "asc", model);
}
@GetMapping("/showNewMedicineForm")
public String showNewMedicineForm(Model model) {
// create model attribute to bind form data
Medicine medicine = new Medicine();
model.addAttribute("medicine", medicine);
return "new_medicines";
}
@PostMapping("/saveMedicine")
public String saveMedicine(@ModelAttribute("medicine") Medicine medicine) {
// save medicine to database
medicineService.saveMedicine(medicine);
return "redirect:/";
}
@GetMapping("/showFormForUpdate/{id}")
public String showFormForUpdate(@PathVariable(value = "id") long id, Model model) {
// get medicine from the service
Medicine medicine = medicineService.getMedicineById(id);
// set medicine as a model attribute to pre-populate the form
model.addAttribute("medicine", medicine);
return "update_medicines";
}
@GetMapping("/deleteMedicine/{id}")
public String deleteMedicine(@PathVariable(value = "id") long id) {
// call delete medicine method
this.medicineService.deleteMedicineById(id);
return "redirect:/";
}
@GetMapping("/query{name}")
public String query(@PathVariable(value = "name") String name,Model model){
List listMedicines = medicineService.findByMedicinesName(name);
model.addAttribute("listMedicines",listMedicines);
return "index";
}
//获取分页数据
@GetMapping("/page/{pageNo}")
public String findPaginated(@PathVariable (value = "pageNo") int pageNo,
@RequestParam("sortField") String sortField,
@RequestParam("sortDir") String sortDir,
Model model) {
int pageSize = 5;
Page page = medicineService.findPaginated(pageNo, pageSize, sortField, sortDir);
List listMedicines = page.getContent();
model.addAttribute("currentPage", pageNo);
model.addAttribute("totalPages", page.getTotalPages());
model.addAttribute("totalItems", page.getTotalElements());
model.addAttribute("sortField", sortField);
model.addAttribute("sortDir", sortDir);
model.addAttribute("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc");
model.addAttribute("listMedicines", listMedicines);
return "index";
}
}
编写以下html文件:
"stylesheet" href="resources/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"/>
"stylesheet" href="resources/static/bootstrap-5.1.3-dist/css/bootstrap.min.css"/>
医院药品管理系统演示
本学期我们所学的Java高级课程中涉及到的重要概念包括: Java语言、对象、类、多线程、I/O流、集合、映射表以及泛型编程等。不仅如此,还学习了SpringBoot、Sping、Bean容器、数据访问和视图技术等等,而Java是一种非常强大的编程语言,它的应用领域极其广泛,掌握其极其重要的高级知识点对于我们来说非常有必要。
在学习Java 课程的过程中,我会主动地帮小组成员做一些力所能及的事情,并会积极地寻找合适的时间,向小组成员请教问题。记得有次舍友的电脑出问题,我就积极的帮她去进行查找原因,等问题解决的后,我心里感觉很高兴,因为我的积极主动,巩固了我所学的知识,并且得到了舍友的认可。对我们这样的初学者来说,细心是写好每个程序所必备的基本。如果写的代码很凌乱,敲错字母等,就可能会在一些细小的地方犯错误。所以,我们敲代码过程中是要细心细心在细心的!!!