目录
3.3.1 此项目中在dal层运用到了dao层的impl中的单例对象,代码如下
前言
根据对数据库、JDBC和设计模式的学习,对图书管理系统进行重构。
一、项目说明
长期以来,人们使用传统的人工方式管理图书馆的日常业务,其操作流程比较烦琐。在借书时,读者首先将要借的书和借阅证交给工作人员,然后工作人员将每本书的信息卡片和读者的借阅证放在一个小格栏里,最后在借阅证和每本书贴的借阅条上填写借阅信息。在还书时,读者首先将要还的书交给工作人员,工作人员根据图书信息找到相应的书卡和借阅证,并填好相应的还书信息。太过于繁琐了!所以,我们需求设计一个图书管理系统来方便学生的借书和图书馆管理书籍。
二、项目功能流程结构图
三、项目实现用到的软件以及依赖的jar包和设计模式
3.1 项目依赖的jar包
3.2 项目用到的软件
DEA+SQLyog;
3.3 项目用到的开发模式以及设计模式
三层架构+单例模式+代理模式。
3.3.1 此项目中在dal层运用到了dao层的impl中的单例对象,代码如下
3.3.2 此项目中在view层运用到了代理对象,代码如下
3.4项目分包
3.5数据库表
创建七张表
book表
booktype表
borrowbook表
manager表
operator表
reader表
readertype表
四、各功能简介
4.1 登录功能
说明:登录功能展示在用户首页,包含管理员登录和操作员登录以及他们各自的忘记密码功能。
4.1.1 首页运行界面如下
4.1.2 登录功能运行界面展示如下
4.2员工工作日志记录
效果如下:
代码为:
public void readWorkLogs() {
Properties pro = new Properties();
try {
BufferedReader bw = new BufferedReader(new FileReader("src\\view\\workLogs.txt"));
pro.load(bw);
TreeMap<Object, Object> treeMap = new TreeMap<>();
treeMap.putAll(pro);
treeMap.forEach((a,b)-> System.out.println(a.toString()+b.toString()));
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
4.3设置借阅罚金
public void setBorrowBookFine() {
int count = 0;
System.out.println("请输入读者类型名:");
String readerTypeName = TSUtility.readKeyBoard(20, false);
List<ReaderType> readerTypes = readerTypeDaoImp.listType(conn);
for (ReaderType r : readerTypes) {
if (readerTypeName.equals(r.getTypeName())) {
count++;
System.out.println("设置该读者类型逾期一天所需要的罚金为:");
double dayFine = TSUtility.readDouble();
if (dayFine>0){
readerTypeDaoImp.updateType(conn, new ReaderType(r.getId(), r.getTypeName(), r.getMaxBorrowNum(), r.getLimit(), dayFine));
}else {
System.out.println("罚金不能为负,设置失败!");
}
}
}
if (count == 0) {
System.out.println("没有此读者类型,设置失败!");
}
}
4.4借阅归还图书
//借阅图书
public void borrowBook() throws ParseException {
int readerCount = 0;
int bookCount = 0;
int borrowBookCount = 0;
List<Reader> readers = readerDaoImp.listReader(conn);
System.out.println("读者信息有:");
readers.forEach(System.out::println);
System.out.println("请输入读者编号:");
int readerId = TSUtility.readInt();
for (Reader r : readers) {
if (readerId == r.getReaderid()) {
readerCount++;
List<Book> books = bookDaoImp.listBook(conn);
System.out.println("图书信息有:");
books.forEach(System.out::println);
System.out.println("请输入图书编号ISBN:");
String bookISBN = TSUtility.readKeyBoard(10, false);
for (Book b : books) {
if (bookISBN.equals(b.getISBN())) {
bookCount++;
List<BorrowBook> borrowBooks = borrowBookDaoImp.listBRInfo(conn);
for (BorrowBook bb : borrowBooks) {
if (readerId == bb.getReaderId() && bookISBN.equals(bb.getISBN()) && bb.getReturnDate() == null) {
borrowBookCount++;
}
}
if (borrowBookCount == 0) {
System.out.println("借阅时间默认为当前日期!");
borrowBookDaoImp.borrowBook(conn, new BorrowBook(readerId, bookISBN, new java.sql.Date(System.currentTimeMillis())));
} else {
System.out.println("同一个人不能借阅同一本书籍,借阅失败!");
}
}
}
if (bookCount == 0) {
System.out.println("没有该图书,借阅失败!");
}
}
}
if (readerCount == 0) {
System.out.println("没有该读者,借阅失败!");
}
}
//归还图书
public void returnBook() throws ParseException {
int readerCount = 0;
int bookCount = 0;
List<BorrowBook> borrowBooks = borrowBookDaoImp.listBRInfo(conn);
if (borrowBooks != null) {
System.out.println("借阅信息有:");
}
for (BorrowBook b : borrowBooks) {
if (b.getReturnDate() == null) {
System.out.println(b);
}
}
for (BorrowBook bb : borrowBooks) {
if (bb.getReturnDate() == null) {
System.out.println("请输入归还的读者编号:");
int readerId = TSUtility.readstock();
if (readerId == bb.getReaderId()) {
readerCount++;
System.out.println("请输入归还的图书编号:");
String bookISBN = TSUtility.readKeyBoard(10, false);
if (bookISBN.equals(bb.getISBN())) {
bookCount++;
System.out.println("请输入归还日期:");
String returnDate = TSUtility.readKeyBoardMust(10, false);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date returnDate1 = sdf.parse(returnDate);
java.sql.Date returnDate2 = new java.sql.Date(returnDate1.getTime());
List<ReaderType> readerTypes = readerTypeDaoImp.listType(conn);
List<Reader> readers = readerDaoImp.listReader(conn);
for (Reader r : readers) {
if (bb.getReaderId() == r.getReaderid()) {
for (ReaderType rt : readerTypes) {
if (r.getType() == rt.getId()) {
if (returnDate2.after(bb.getBorrowDate())) {
borrowBookDaoImp.returnBook(conn, new BorrowBook(bb.getReaderId(), bb.getISBN(), bb.getBorrowDate(), returnDate2, bb.getFine()));
BorrowBook bob = borrowBookDaoImp.selectInfoByIDAndISBN(conn, readerId, bookISBN);
borrowBookDaoImp.Fine(conn, bob, rt.getLimit(), rt.getDayFine());
return;
}
else {
System.out.println("日期错误!!!!");
return;
}
}
}
}
}
}
}
}
}
if (readerCount == 0) {
System.out.println("没有该读者的借阅记录!");
return;
}
if (bookCount == 0) {
System.out.println("没有该读者的借阅此图书的信息!");
}
}