图书馆管理系统(数据库版)
目录:
- 图书馆管理系统(数据库版)
- 项目框架
- 项目分包
- 数据库列表
- 代码分析
- 工具包
- 所用到的接口:
- 分享一波:
- 总结:
项目框架
项目分包
上面为本次项目的分包建包示意图,大概的内容分类便是如此(dao为数据访问层,entity为实体类包,service为业务逻辑层,util为工具类包,view为UI界面包)
数据库列表
代码分析
工具包
在本次项目中,用到一些可以通用的代码,这里把它们编写为了工具类(即util包中的类)
BookUtils类:
import dao.LogDao;
import dao.impl.LogDaoImpl;
import entity.Book;
import entity.Log;
import entity.User;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;//书籍工具类
public class BookUtils {User user = new User();LogDao logDao = new LogDaoImpl();//罚金方法public void cost(int book_id,String type) throws ParseException {Date nowDate = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String borrow_time = logDao.viewBorrowTime(book_id);//获取借书时间String return_time = sdf.format(nowDate);//获取归还时间Date d1 = sdf.parse(borrow_time);//借出时间Date d2 = sdf.parse(return_time);//归还时间long charge = (d2.getTime() - d1.getTime()) / (24 * 60 * 60 * 1000);if (charge <= 7){System.out.println("该书籍被您借出" + charge + "天,"+"感谢您规范用书!");}else {if (type.equals("学生")){System.out.println("该书籍被您借出"+ charge + "天,"+"已逾期"+(charge-7)+"天,您需要缴纳罚金:"+(charge-7)*5+"元,谢谢配合!");}else {System.out.println("该书籍被您借出"+ charge + "天,"+"已逾期"+(charge-7)+"天,您需要缴纳罚金:"+(charge-7)*3+"元,谢谢配合!");}}}//书籍Id限定public int idLimit(List<Book> books) {Scanner scanner = new Scanner(System.in);List<Integer> borrowedId = new ArrayList<>();//存放id的集合int book_id = 0;//id输入boolean flag = true;//增强for,遍历集合取出id存放在borrowedIdfor (Book book: books){borrowedId.add(book.getBook_id());//借阅书籍Id集合}while (flag){book_id = scanner.nextInt();//增强for,遍历并对比输入的idfor (Integer e : borrowedId){if (book_id == e){flag = false;}}if (flag){System.out.println("书籍Id输入错误,请重新输入:");}}return book_id;}
}
InputUtils类:对于输入的内容进行类型和范围的判断
package util;import java.util.Scanner;public class InputUtils {Scanner scanner = new Scanner(System.in);@SuppressWarnings({"all"})//int类型输入判断public int input() {while (!scanner.hasNextInt()) {//没有这一行的话会导致无限循环String input = scanner.next();System.out.println("不是数字,重新输入");}//当是数字时循环结束int inputNum = scanner.nextInt();return inputNum;}//double类型输入判断public double inputDouble() {while (!scanner.hasNextDouble()) {//没有这一行的话会导致无限循环String input = scanner.next();System.out.println("不是数字,重新输入");}//当是数字时循环结束double inputNum = scanner.nextDouble();return inputNum;}//double范围判断public double scopeDouble(double inputNum) {InputUtils inputUtils = new InputUtils();while (true) {if (inputNum < 0) {System.out.println("请输入正确的数字");inputNum = inputUtils.inputDouble();}else {break;}}return inputNum;}//int范围判断public int scope(int inputNum,int scope) {InputUtils inputUtils = new InputUtils();while (true) {if (inputNum > scope || inputNum < 1) {System.out.println("请输入正确的数字");inputNum = inputUtils.input();}else {break;}}return inputNum;}
}
ModifyUtils类:用户修改电话号码的类
package util;import java.util.Scanner;import static util.RegisterUtils.validateMobilePhone;public class ModifyUtils {//修改电话public String modifyPhone(){Scanner scanner = new Scanner(System.in);System.out.println("请输入新的电话号码:");String newPhone = scanner.next();while (!validateMobilePhone(newPhone)){System.out.println("输入错误,请重新输入(电话号码为11位)");newPhone = scanner.next();}return newPhone;}public String modifyPassword(){Scanner scanner = new Scanner(System.in);System.out.println("请输入新密码:");String newPassword = scanner.next();return newPassword;}}
RegisterUtils类:对于用户名、性别、电话、类型的判断
package util;import dao.impl.AdminDaoImpl;
import dao.impl.UserDaoImpl;import java.util.Scanner;
import java.util.regex.Pattern;public class RegisterUtils {//用户用户名判断public boolean nameProve(String user_name) {UserDaoImpl userDao1 = new UserDaoImpl();if (null != userDao1.nameProve(user_name)) {return false;} else {return true;}}//管理员用户名判断public boolean adminNameProve(String admin_name) {AdminDaoImpl adminDao1 = new AdminDaoImpl();if (null != adminDao1.nameProve(admin_name)) {return false;} else {return true;}}//性别判断public String sexProve(String sexNum) {String sex = null;if (sexNum.equals("1")) {sex = "男";return sex;} else if (sexNum.equals("2")) {sex = "女";return sex;} else {System.out.println("输入错误,请重新输入(1、男 | 2、女)");return null;}}//电话判断public static boolean validateMobilePhone(String in) {Pattern pattern = Pattern.compile("^[1]\\d{10}$");return pattern.matcher(in).matches();}//类型判断public String typeProve ( String typeNum){String type = null;if (typeNum.equals("1")) {type = "学生";return type;} else if (typeNum.equals("2")) {type = "教师";return type;} else {System.out.println("输入错误,请重新输入(1、学生 | 2、教师)");return null;}}
}
上面便是这次使用到的工具类,把他们封装成方法,使用起来更加的快捷与方便。
所用到的接口:
上图所示接口为数据访问层的连接接口,是与数据库相连的,对于数据库数据进行操作的接口,他连接着数据访问层的代码与业务逻辑层的代码。
这两个接口是连接UI层与业务逻辑层代码的枢纽。
分享一波:
链接:https://pan.baidu.com/s/10jCeuEIRaiUR5cbjgz3g3Q
提取码:klmn
总结:
以前写过一次没有用到数据库的图书馆管理系统,在以往的作品中,这次写的是连接数据库后所编写的图书馆管理系统,是自己对于三层架构与数据库的项目练习,通过这次项目的编写,是自己对于三层架构与数据库相关知识拥有了一个相对透彻的理解。