Thiết kế và Triển khai Hệ Quản Lý Phân Loại Rác Tại Trường Học Dựa Trên Java

Mục lục:

Kiến trúc hệ thống:

Ảnh chụp màn hình khi chạy chương trình:

Tham khảo mã nguồn cốt lõi:

Cơ sở dữ liệu SQL:

Giới thiệu công nghệ dự án:

Giới thiệu Java:

Giới thiệu cơ sở dữ liệu MySQL:

Kiến trúc hệ thống:

Hệ thống được phát triển theo mô hình phân tầng với giao diện người dùng (frontend), logic nghiệp vụ (backend) và cơ sở dữ liệu MySQL, giúp việc bảo trì mã nguồn và mở rộng chức trở nên thuận tiện. Dưới đây là sơ đồ thiết kế kiến trúc hệ thống:

Ảnh chụp màn hình khi chạy chương trình:

Tham khảo mã nguồn cốt lõi:

/**
 * Các chức năng liên quan đến đăng nhập
 */
@RequestMapping("nguoiDung")
@RestController
public class NguoiDungController{
    
    @Autowired
    private NguoiDungService nguoiDungService;
    
    @Autowired
    private TokenService tokenService;
 
    /**
     * Đăng nhập
     */
    @IgnoreAuth
    @PostMapping(value = "/dangNhap")
    public R dangNhap(String tenDangNhap, String matKhau, String vaiTro, HttpServletRequest request) {
        NguoiDungEntity nguoiDung = nguoiDungService.selectOne(new EntityWrapper<NguoiDungEntity>().eq("tenDangNhap", tenDangNhap));
        if(nguoiDung != null){
            if(!nguoiDung.getVaiTro().equals(vaiTro)){
                return R.error("Quyền không hợp lệ");
            }
            if(nguoiDung==null || !nguoiDung.getMatKhau().equals(matKhau)) {
                return R.error("Tên đăng nhập hoặc mật khẩu không chính xác");
            }
            String token = tokenService.generateToken(nguoiDung.getId(), tenDangNhap, "nguoiDung", nguoiDung.getVaiTro());
            return R.ok().put("token", token);
        }else{
            return R.error("Tên đăng nhập, mật khẩu hoặc quyền không đúng");
        }
 
    }
    
    /**
     * Đăng ký
     */
    @IgnoreAuth
    @PostMapping(value = "/dangKy")
    public R dangKy(@RequestBody NguoiDungEntity nguoiDung){
        if(nguoiDungService.selectOne(new EntityWrapper<NguoiDungEntity>().eq("tenDangNhap", nguoiDung.getTenDangNhap())) !=null) {
            return R.error("Người dùng đã tồn tại");
        }
        nguoiDungService.insert(nguoiDung);
        return R.ok();
    }
 
    /**
     * Đăng xuất
     */
    @GetMapping(value = "dangXuat")
    public R dangXuat(HttpServletRequest request) {
        request.getSession().invalidate();
        return R.ok("Đăng xuất thành công");
    }
    
    /**
     * Đặt lại mật khẩu
     */
    @IgnoreAuth
    @RequestMapping(value = "/datLaiMatKhau")
    public R datLaiMatKhau(String tenDangNhap, HttpServletRequest request){
        NguoiDungEntity nguoiDung = nguoiDungService.selectOne(new EntityWrapper<NguoiDungEntity>().eq("tenDangNhap", tenDangNhap));
        if(nguoiDung==null) {
            return R.error("Tài khoản không tồn tại");
        }
        nguoiDung.setMatKhau("123456");
        nguoiDungService.update(nguoiDung,null);
        return R.ok("Mật khẩu đã được đặt lại thành: 123456");
    }
    
    /**
     * Danh sách
     */
    @RequestMapping("/trang")
    public R trang(@RequestParam Map<String, Object> params, NguoiDungEntity nguoiDung){
        EntityWrapper<NguoiDungEntity> ew = new EntityWrapper<NguoiDungEntity>();
        PageUtils page = nguoiDungService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, nguoiDung), params), params));
        return R.ok().put("data", page);
    }
 
    /**
     * Thông tin
     */
    @RequestMapping("/thongTin/{id}")
    public R thongTin(@PathVariable("id") String id){
        NguoiDungEntity nguoiDung = nguoiDungService.selectById(id);
        return R.ok().put("data", nguoiDung);
    }
 
    /**
     * Lấy thông tin người dùng từ session
     */
    @RequestMapping("/session")
    public R layThongTinNguoiDung(HttpServletRequest request){
        Integer id = (Integer)request.getSession().getAttribute("userId");
        NguoiDungEntity nguoiDung = nguoiDungService.selectById(id);
        return R.ok().put("data", nguoiDung);
    }
 
    /**
     * Lưu
     */
    @PostMapping("/luu")
    public R luu(@RequestBody NguoiDungEntity nguoiDung){
        if(nguoiDungService.selectOne(new EntityWrapper<NguoiDungEntity>().eq("tenDangNhap", nguoiDung.getTenDangNhap())) !=null) {
            return R.error("Người dùng đã tồn tại");
        }
        nguoiDungService.insert(nguoiDung);
        return R.ok();
    }
 
    /**
     * Cập nhật
     */
    @RequestMapping("/capNhat")
    public R capNhat(@RequestBody NguoiDungEntity nguoiDung){
        nguoiDungService.updateById(nguoiDung);
        return R.ok();
    }
 
    /**
     * Xóa
     */
    @RequestMapping("/xoa")
    public R xoa(@RequestBody Integer[] ids){
        nguoiDungService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

Cơ sở dữ liệu SQL:

DROP TABLE IF EXISTS `nguoiDung`;

CREATE TABLE `nguoiDung` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Khóa chính',
  `tenDangNhap` varchar(100) NOT NULL COMMENT 'Tên đăng nhập',
  `matKhau` varchar(100) NOT NULL COMMENT 'Mật khẩu',
  `vaiTro` varchar(100) DEFAULT 'Quản trị viên' COMMENT 'Vai trò',
  `thoiGianThem` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Thời gian thêm',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='Bảng người dùng';

/*Data for the table `nguoiDung` */

insert  into `nguoiDung`(`id`,`tenDangNhap`,`matKhau`,`vaiTro`,`thoiGianThem`) values (1,'admin','admin','Quản trị viên','2022-05-01 00:00:00');

Giới thiệu công nghệ dự án:

Giới thiệu Java:

Java có các đặc điểm chính là đơn giản, hướng đối tượng, phân tán, mạnh mẽ, bảo mật và khả năng di động. Mục đích thiết kế của Java là cho phép lập trình viên viết các chương trình phức tạp một cách thanh lịch. Java hỗ trợ phát triển ứng dụng Internet và có sẵn giao diện lập trình ứng dụng mạng, giúp rất nhiều cho việc phát triển ứng dụng mạng. Đồng thời, cơ chế kiểu mạnh và xử lý ngoại lệ của Java đảm bảo tính mạnh mẽ của chương trình. Java được chia thành ba phiên bản chính: Java SE (Standard Edition), chủ yếu được sử dụng để phát triển ứng dụng máy tính để bàn; Java EE (Enterprise Edition), để phát triển ứng dụng doanh nghiệp; và Java ME (Micro Edition), chuyên cho phát triển hệ thống nhúng và thiết bị di động. Các phiên bản này cho phép Java đáp ứng các nhu cầu phát triển khác nhau. Nhìn chung, Java nhờ phạm vi ứng dụng rộng và hiệu suất ổn định, có cộng đồng nhà phát triển lớn và hỗ trợ trên toàn cầu, các dự án mã nguồn mở cũng cung cấp nguồn lực và sự tiện lợi lớn cho phát triển Java. Điều này không chỉ giúp Java giữ vị thế quan trọng trong Internet và ứng dụng doanh nghiệp mà còn được ứng dụng rộng rãi trong dữ liệu lớn và phát triển di động Android.

Giới thiệu cơ sở dữ liệu MySQL:

MySQL chủ yếu được sử dụng để lưu trữ và quản lý dữ liệu trên nhiều nền tảng hệ điều hành phổ biến, hoạt động theo mô hình client/server. Kiến trúc này hỗ trợ thao tác và quản lý dữ liệu hiệu quả, khiến MySQL được sử dụng rộng rãi trong ứng dụng web, ứng dụng doanh nghiệp và ứng dụng di động. MySQL sử dụng ngôn ngữ truy vấn có cấu trúc (SQL), đây là ngôn ngữ tiêu chuẩn để truy cập và bảo trì cơ sở dữ liệu. Do tính chất mã nguồn mở, MySQL miễn phí cho hầu hết người dùng cá nhân và dễ dàng tải xuống và cài đặt. Điều này khiến nó trở thành hệ thống cơ sở dữ liệu được lựa chọn của nhiều doanh nghiệp vừa và nhỏ và nhà phát triển.

MySQL có nhiều ưu điểm đáng kể. Đầu tiên, nó hỗ trợ hoạt động đa luồng, có thể tận dụng tối đa tài nguyên CPU, nâng cao hiệu suất. Thứ hai, MySQL cung cấp nhiều API, hỗ trợ nhiều ngôn ngữ lập trình như C, C++, Python, Java, v.v., giúp nó dễ dàng tích hợp vào các ứng dụng khác nhau. Ngoài ra, MySQL còn hỗ trợ nhiều bộ lưu trữ như InnoDB và MyISAM, đáp ứng các nhu cầu ứng dụng khác nhau.

Thẻ: Java mysql Hệ thống quản lý Phân loại rác Lập trình ứng dụng

Đăng vào ngày 11 tháng 6 lúc 18:10