圖書管理系統:
本系統所用知識點:
● java基本語法
● 使用流程控制
● 面向物件思想
● 封裝,繼承,多型
● 使用集合
● I/o流相關操作
模塊類別:
本系統功能分為讀者資訊管理模塊、圖書資訊管理模塊、圖書借閱管理模塊、基礎資訊維護模塊和用戶管理模塊,
模塊結構:

本系統需建立的類:

注:Test為主類,內含主方法,其他類別下面會一一列出,
Test類:
import Library.Library;
import java.io.IOException;
import java.text.ParseException;
public class Test {
public static void main(String[] args) throws IOException, ParseException {
Library library = new Library();
library.Interface();
}
}
圖書管理系統面向管理員和用戶兩類人員,但是他們需要先登錄,下面列出登錄、注冊功能模塊及管理員與用戶的功能模塊:
登錄、注冊:
package Library;
import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
import User.User;
import User.Admin;
public class Library {
Scanner sc = new Scanner(System.in);
private String operator;
//用戶注冊登錄
public void Interface() throws IOException, ParseException {
boolean a = true;
File file = new File("用戶資訊.txt");
try {
while (a) {
System.out.println("==================圖書管理系統==================");
System.out.println("請登錄:1.普通用戶 2.管理員登錄 3.注冊 4.退出系統");
int i = sc.nextInt();
if (i < 1 || i > 4) {
System.out.println("到底能不能行?能不能看明白了再輸!");
} else if (i == 4) {
a = false;
} else if (i == 1) {
//普通用戶登錄
System.out.println("請輸入您的用戶名:");
operator = sc.next();
//寫日志
File journal = new File("日志.txt");
Date nowDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String borrowTime = sdf.format(nowDate);
FileWriter jfw = new FileWriter(journal, true);
jfw.write(borrowTime + " " + operator + "登錄系統" + "\n");
jfw.write("--------------------------------");
jfw.write(System.getProperty("line.separator"));//在段落后添加一個換行符
jfw.close();//流的關閉
System.out.println("請輸入您的密碼:");
String password = sc.next();
FileInputStream intput = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
String tempString;
List<String> list = new ArrayList<>();
while ((tempString = reader.readLine()) != null) {
list.add(tempString);
}
//判斷輸入的用戶名是否存在
boolean flag = false;
String[] userinf = new String[5];
for (String user : list) {
userinf = user.split(",");
if (operator.equals(userinf[0])) { //判斷用戶名是否存在
flag = true;
break;
}
}
//如果存在,判斷密碼是否正確
if (flag == true) {
if (password.equals(userinf[1])) {
System.out.println("登陸成功");
//登錄
try {
User user = new User();
user.operation(userinf, operator);
} catch (Exception e) {
System.out.println("到底能不能行?能不能看明白了再輸!");
User user = new User();
user.operation(userinf, operator);
}
} else {
System.out.println("密碼錯誤");
}
} else {
System.out.println("用戶名不存在");
}
intput.close();
reader.close();
} else if (i == 2) {
//管理員登錄
System.out.println("請輸入管理員密碼!");
String rootPassword = sc.next();
if (rootPassword.equals("88888888")) {
//管理員登錄成功
System.out.println("管理員登陸成功!");
try {
Admin admin = new Admin();
admin.admin();
} catch (Exception e) {
System.out.println("到底能不能行?能不能看明白了再輸!");
Admin admin = new Admin();
admin.admin();
}
} else {
System.out.println("你是不是管理員心里沒個ACD數嗎?");
}
} else if (i == 3) {
//注冊
String[] userinf = new String[5];
FileInputStream intput = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
String tempString;
List<String> list = new ArrayList<>();
while ((tempString = reader.readLine()) != null) {
list.add(tempString);
}
System.out.println("請輸入您的用戶名:");
String name = sc.next();
//查找是否有同名用戶
boolean flag = false;
for (String user1 : list) {
userinf = user1.split(",");
if (name.equals(userinf[0])) { //判斷用戶名是否存在
System.out.println("該用戶名已存在,請重新擬取名稱");
flag = true;
break;
}
}
if (flag == false) {
System.out.println("請設定您的密碼:");
String password = sc.next();
String sex;
while (true) {
System.out.println("請輸入您的性別:");
sex = sc.next();
if (sex.equals("男") || sex.equals("女")) {
break;
} else {
System.out.println("別鬧!認真點,輸入正確的性別!");
}
}
int age;
while (true) {
System.out.println("請輸入您的年齡:");
age = sc.nextInt();
if (age < 10 && age > 0) {
System.out.println("您的年齡太小啦!請讓家長使用賬號幫您借閱書籍!");
break;
} else if (age <= 0) {
System.out.println("你是魔鬼嗎?");
}else{
break;
}
}
long phone;
while (true) {
System.out.println("請輸入該您的電話號碼:");
phone = sc.nextInt();
if (phone < 0) {
System.out.println("您是真的陰間人!");
} else {
break;
}
}
User user = new User(name, sex, age, phone, password);
file.createNewFile();
FileWriter fw = new FileWriter(file, true);
fw.write(user.toString());
fw.write(System.getProperty("line.separator"));//在段落后添加一個換行符
fw.close();
System.out.println("恭喜您,注冊成功!");
}
}
}
} catch (Exception e) {
System.out.println("到底能不能行?能不能看明白了再輸!");
Library library = new Library();
library.Interface();
return;
}
}
}
管理員:
package User;
import Book.AddBook;
import Book.DeleteBook;
import Book.FindBook;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Admin {
public Admin() {
}
public void admin() throws IOException {
File adminBook = new File("書籍.txt");
File adminUser = new File("用戶資訊.txt");
FindBook fb = new FindBook();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("===============圖書管理員操作界面===============");
System.out.println("1.查詢書籍 2.添加書籍 3.洗掉書籍 4.增/刪用戶 5.查看用戶操作 6.回傳");
int choice = scanner.nextInt();
if (choice < 1 || choice > 6) {
System.out.println("到底能不能行?能不能看明白了再輸!");
} else if (choice == 6) {
return;
} else if (choice == 1) {
//查詢書籍
fb.adminFindBook();
} else if (choice == 2) {
//添加書籍
AddBook ab = new AddBook();
ab.addBook();
} else if (choice == 3) {
//洗掉書籍
DeleteBook db = new DeleteBook();
db.deleteBook();
} else if (choice == 4) {
//增刪用戶
System.out.println("==========增/刪用戶==========");
System.out.println("1.增加用戶 2.洗掉用戶 3.回傳");
int decision = scanner.nextInt();
if (decision == 3){
//回傳
break;
}else if (decision == 1){
//增加用戶
AddUser au = new AddUser();
au.addUser();
}else if (decision == 2){
//洗掉用戶
DeleteUser du = new DeleteUser();
du.deleteUser();
}
}else if (choice == 5){
//查看用戶操作
File file = new File("日志.txt");
FileInputStream intput = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
String tempString;
List<String> list = new ArrayList<>();
while ((tempString = reader.readLine()) != null) {
System.out.println(tempString);
}
while (true) {
int a;
System.out.println("是否清空操作記錄:");
System.out.println("1、是 2、否");
a = scanner.nextInt();
if (a > 2 || a < 1) {
System.out.println("白內障,看不清,莎普愛思滴眼睛!");
break;
} else if (a == 1) {
File file1 = new File("日志.txt");
FileWriter fr = new FileWriter(file1,false);
fr.write(" ");
fr.close();
break;
}else if (a == 2){
break;
}
}
}
}
}
}
用戶(父類為Person):
package User;
import Book.BorrowBook;
import Book.FindBook;
import Book.ReturnBook;
import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class User extends Person {
//用戶屬性
private long Uphone;
private String Upassword;
public User() {
}
public User(String name, String sex, int age, long Uphone, String Upassword) {
super(name, sex, age);
this.Uphone = Uphone;
this.Upassword = Upassword;
}
public long getUphone() {
return Uphone;
}
public void setUphone(int uphone) {
Uphone = uphone;
}
public String getUpassword() {
return Upassword;
}
public void setUpassword(String upassword) {
Upassword = upassword;
}
public String toString() {
return name + "," + Upassword + "," + sex + "," + age + "," + Uphone;
}
public void operation(String[] userinf,String operator) throws IOException, ParseException {
File bookFile = new File("書籍.txt");
FindBook fb = new FindBook();
while (true) {
System.out.println("===============普通用戶操作界面===============");
System.out.println("1.查詢書籍 2.借閱書籍 3.歸還書籍 4.修改密碼 5.回傳");
Scanner sc = new Scanner(System.in);
int j = sc.nextInt();
if (j < 1 || j > 5) {
System.out.println("到底能不能行?能不能看明白了再輸!");
} else if (j == 5) {
File journal = new File("日志.txt");
Date nowDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String borrowTime = sdf.format(nowDate);
FileWriter jfw = new FileWriter(journal, true);
jfw.write(borrowTime +" "+ operator + "退出了登錄"+"\n");
jfw.write("--------------------------------");
jfw.write(System.getProperty("line.separator"));//在段落后添加一個換行符
jfw.close();
return;
} else if (j == 1) {//查詢書籍
fb.findBook(operator);
} else if (j == 2) {//借閱書籍
BorrowBook bb = new BorrowBook();
bb.borrowBook(operator);
} else if (j == 3) {//歸還書籍
ReturnBook gbb = new ReturnBook();
gbb.returnBook(operator);
} else if (j == 4) {//修改密碼
String filePath = "用戶資訊.txt";
User modifyFile = new User();
File journal = new File("日志.txt");
Date nowDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String borrowTime = sdf.format(nowDate);
FileWriter jfw = new FileWriter(journal, true);
jfw.write(borrowTime +" "+ operator + "修改了密碼"+"\n");
jfw.write("--------------------------------");
jfw.write(System.getProperty("line.separator"));//在段落后添加一個換行符
jfw.close();
System.out.println("請輸入原密碼:");
String oldString = sc.next();
//如果輸入的原密碼不正確,無法進行修改,如果正確,才能進行修改
if (oldString.equals(userinf[1])) {
System.out.println("請輸入新密碼:");
String newString = sc.next();
boolean result = modifyFile.writeFile(filePath, modifyFile.readFileContent(userinf, filePath, oldString, newString));// 修改檔案中密碼
// 如果修改結果為true,進行修改成功提示,否則提示修改失敗
if (result == true){
System.out.println("修改成功,請重新登錄!");
return;
}else {
System.out.println("修改錯誤,請檢查后重新修改!");
}
} else {
System.out.println("輸入錯誤,請檢查后重新進行修改!");
}
}
}
}
// 讀檔案
public String readFileContent(String[] userinf, String filePath, String oldString, String newString) {
Scanner sc = new Scanner(System.in);
BufferedReader br = null;
String line = null;
StringBuffer bufAll = new StringBuffer();// 保存修改過后的所有內容
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF-8"));
while ((line = br.readLine()) != null) {
StringBuffer buf = new StringBuffer();
// 修改內容核心代碼
String[] userinf2 = line.split(",");
if (userinf2[0].equals(userinf[0])) {//判斷條件根據自己的要求修改
buf.append(line);
int indexOf = line.indexOf(oldString);
buf.replace(indexOf, indexOf + oldString.length(), newString);// 修改內容
buf.append(System.getProperty("line.separator"));// 添加換行
bufAll.append(buf);
} else {
buf.append(line);
buf.append(System.getProperty("line.separator"));
bufAll.append(buf);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (Exception e) {
br = null;
}
}
}
return bufAll.toString();
}
// 寫檔案
public boolean writeFile(String filePath, String content) {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "UTF-8"));
bw.write(content);
bw.flush();
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
bw = null;
}
}
}
return true;
}
}
Person類:
package User;
public class Person {
public String name;
public String sex;
public int age;
public Person(){
}
public Person(String name,String sex, int age){
this.name = name;
this.sex = sex;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setSex(String sex){
this.sex = sex;
}
public String getSex(){
return sex;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
book類:
package Book;
public class Book {
private String bookName; //書名
private String author; //作者
public double price; //價格
private String category; //分類
public String press;//出版社
private String state; //狀態 true-已借出 false-未借出
private String borrowName;
private String borrowTime;
public Book(){
}
public Book(String bookName,String author,double price,String category,String press,String state,String borrowName,String borrowTime){
this.bookName = bookName;
this.author = author;
this.price = price;
this.category = category;
this.press = press;
this.state = state;
this.borrowName = borrowName;
this.borrowTime = borrowTime;
}
public String getName() {
return bookName;
}
public void setName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getBorrowName() {
return borrowName;
}
public void setBorrowName(String borrowName) {
this.borrowName = borrowName;
}
public String getBorrowTime() {
return borrowTime;
}
public void setBorrowTime(String borrowTime) {
this.borrowTime = borrowTime;
}
@Override
public String toString() {
return bookName +","+author+","+price+","+category+","+press+","+state+","+borrowName+","+borrowTime;
}
}
下面優先列出管理員的操作功能模塊:
查詢書籍:
package Book;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
public class FindBook {
Scanner scanner = new Scanner(System.in);
File bookFile = new File("書籍.txt");
public void findBook(String operator) throws IOException {
FileInputStream intput = new FileInputStream(bookFile);
BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
String tempString = null;
List<String> list = new ArrayList<>();
while ((tempString = reader.readLine()) != null) {
list.add(tempString);
}
boolean flag = false;
String[] bookinf = new String[8];
String[] bookinf1 = new String[8];
System.out.println("==========當前書籍有==========");
for (String book : list) {
bookinf1 = book.split(",");
System.out.print(bookinf1[0] + " ");
}
System.out.println(" ");
System.out.println("請輸入查找的書籍名稱:");
String bookName = scanner.next();
for (String user : list) {
bookinf = user.split(",");
if (bookName.equals(bookinf[0])) { //判斷書籍是否存在
flag = true;
System.out.println("書名:" + bookinf[0] + ",作者:" + bookinf[1] + ",價格:" + bookinf[2] +
",型別:" + bookinf[3] + ",出版社:" + bookinf[4] + ",是否被借出:" + bookinf[5]);
File journal = new File("日志.txt");
Date nowDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String borrowTime = sdf.format(nowDate);
FileWriter jfw = new FileWriter(journal, true);
jfw.write(borrowTime +" "+ operator + "查看了" + bookinf[0] + "\n");
jfw.write("--------------------------------");
jfw.write(System.getProperty("line.separator"));//在段落后添加一個換行符
jfw.close();
break;
}
}
if (flag == false) {
System.out.println("沒有查找到該書籍,請重新確認后再進行查找!");
}
}
public void adminFindBook() throws IOException {
FileInputStream intput = new FileInputStream(bookFile);
BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
String tempString = null;
List<String> list = new ArrayList<>();
while ((tempString = reader.readLine()) != null) {
list.add(tempString);
}
boolean flag = false;
String[] bookinf = new String[8];
String[] bookinf1 = new String[8];
System.out.println("==========當前書籍有==========");
for (String book : list) {
bookinf1 = book.split(",");
System.out.print(bookinf1[0] + " ");
}
System.out.println(" ");
System.out.println("請輸入查找的書籍名稱:");
String bookName = scanner.next();
for (String user : list) {
bookinf = user.split(",");
//判斷書籍是否存在
if (bookName.equals(bookinf[0])) {
flag = true;
System.out.println("書名:" + bookinf[0] + ",作者:" + bookinf[1] + ",價格:" + bookinf[2] + ",型別:" + bookinf[3] +
",出版社:" + bookinf[4] + ",是否被借出:" + bookinf[5] + ",借書人:" + bookinf[6] + ",借出日期:" + bookinf[7]);
break;
}
}
if (flag == false) {
System.out.println("沒有查找到該書籍,請重新確認后再進行查找!");
}
}
}
添加書籍:
package Book;
import User.User;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class AddBook {
String[] bookinf = new String[8];
public void addBook() throws IOException {
Scanner sc = new Scanner(System.in);
File file1 = new File("書籍.txt");
FileInputStream intput = new FileInputStream(file1);
BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
String tempString;
List<String> list = new ArrayList<>();
while ((tempString = reader.readLine()) != null) {
list.add(tempString);
}
String[] bookinf1 = new String[8];
System.out.println("==========當前書籍有==========");
for (String book : list) {
bookinf1 = book.split(",");
System.out.print(bookinf1[0] + " ");
}
System.out.println(" ");
System.out.println("請輸入書籍名稱:");
String bookName = sc.next();
boolean flag = false;
for (String user1 : list) {
bookinf = user1.split(",");
if (bookName.equals(bookinf[0])) { //判斷書名是否存在
System.out.println("該書籍名稱已存在,請重新輸入書籍名稱");
flag = true;
break;
}
}
if (flag == false) {
System.out.println("請輸入作者:");
String author = sc.next();
double price;
while (true) {
System.out.println("請輸入書籍價格:");
price = sc.nextDouble();
if (price > 0) {
break;
} else {
System.out.println("好家伙,虧死了!");
}
}
System.out.println("請輸入書籍型別:");
String category = sc.next();
System.out.println("請輸入書籍的出版社:");
String press = sc.next();
String state = "false";
String borrowName = "無";
String borrowTime = "null";
Book book = new Book(bookName, author, price, category, press, state, borrowName, borrowTime);
file1.createNewFile();
FileWriter fw = new FileWriter(file1, true);
fw.write(book.toString());
fw.write(System.getProperty("line.separator"));//在段落后添加一個換行符
fw.close();
System.out.println("恭喜您,添加書籍成功!");
return;
}
}
}
借閱書籍:
package Book;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
public class BorrowBook {
Scanner scanner = new Scanner(System.in);
public void borrowBook(String operator) throws IOException {
String filePath = "書籍.txt";
BorrowBook modifyFile = new BorrowBook();
File bookFile = new File("書籍.txt");
// if (bookFile[5] == "false")
System.out.println("請輸入要借閱的書籍名稱:");
String bookName = scanner.next();
//根據書籍名稱查詢到需要修改的書籍資料
FileInputStream intput = new FileInputStream(bookFile);
BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
String tempString = null;
List<String> list = new ArrayList<>();
while ((tempString = reader.readLine()) != null) {
list.add(tempString);
}
boolean flag = false;
String[] bookinf = new String[8];
for (String user : list) {
bookinf = user.split(",");
if (bookName.equals(bookinf[0])) { //判斷書籍是否存在
flag = true;
System.out.println("書名:" + bookinf[0] + ",作者:" + bookinf[1] + ",價格:" + bookinf[2] +
",型別:" + bookinf[3] + ",出版社:" + bookinf[4] + ",是否被借出:" + bookinf[5]);
break;
}
}
if (flag == false) {
System.out.println("沒有查找到該書籍,請重新確認后再進行查找!");
return;
}
//修改書籍資料后,重新寫入檔案
if (bookName.equals(bookinf[0]) && bookinf[5].equals("false")) {
boolean result = modifyFile.writeFile(filePath, modifyFile.readFileContent(bookinf, filePath, "false", "true"));
// 修改檔案中借閱狀態
if (result == true) {
//獲取借書人后寫入“無”
modifyFile.writeFile(filePath, modifyFile.readFileContent(bookinf, filePath, "無", operator));
//獲取時間后寫入最后一位
Date nowDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String borrowTime = sdf.format(nowDate);
modifyFile.writeFile(filePath, modifyFile.readFileContent(bookinf, filePath, "null", borrowTime));
System.out.println("借閱成功!");
System.out.println("借閱時間:" + borrowTime + ",最多可借閱7天,請記得按時歸還!");
//寫入日志
File journal = new File("日志.txt");
FileWriter jfw = new FileWriter(journal, true);
jfw.write(borrowTime +" "+ operator + "借閱了" + bookinf[0] + "\n");
jfw.write("--------------------------------");
jfw.write(System.getProperty("line.separator"));//在段落后添加一個換行符
jfw.close();
return;
}
} else {
System.out.println("該書已被借出或不存在,請重新查詢后再進行借閱!");
}
}
// 讀檔案
public String readFileContent(String[] bookinf, String filePath, String oldString, String newString) {
Scanner sc = new Scanner(System.in);
BufferedReader br = null;
String line = null;
StringBuffer bufAll = new StringBuffer();// 保存修改過后的所有內容
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF-8"));
while ((line = br.readLine()) != null) {
StringBuffer buf = new StringBuffer();
// 修改內容核心代碼
String[] bookinf2 = line.split(",");
if (bookinf2[0].equals(bookinf[0])) {//判斷條件根據自己的要求修改
buf.append(line);
int indexOf = line.indexOf(oldString);
buf.replace(indexOf, indexOf + oldString.length(), newString);// 修改內容
buf.append(System.getProperty("line.separator"));// 添加換行
bufAll.append(buf);
} else {
buf.append(line);
buf.append(System.getProperty("line.separator"));
bufAll.append(buf);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (Exception e) {
br = null;
}
}
}
return bufAll.toString();
}
// 寫檔案
public boolean writeFile(String filePath, String content) {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "UTF-8"));
bw.write(content);
bw.flush();
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
bw = null;
}
}
}
return true;
}
}
歸還書籍:
package Book;
import java.io.*;
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 ReturnBook {
Scanner scanner = new Scanner(System.in);
public void returnBook(String operator) throws IOException, ParseException {
String filePath = "書籍.txt";
ReturnBook modifyFile = new ReturnBook();
File bookFile = new File("書籍.txt");
System.out.println("請輸入要歸還的書籍名稱:");
String bookName = scanner.next();
//根據書籍名稱查詢到需要修改的書籍資料
FileInputStream intput = new FileInputStream(bookFile);
BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
String tempString = null;
List<String> list = new ArrayList<>();
while ((tempString = reader.readLine()) != null) {
list.add(tempString);
}
int flag = 0;
String[] bookinf = new String[8];
for (String user : list) {
bookinf = user.split(",");
if (bookName.equals(bookinf[0]) && operator.equals(bookinf[6])) {
//判斷書籍是否存在,且為本人所借出
//若屬實則輸出書籍完整資訊
flag = 1;
System.out.println("書名:" + bookinf[0] + ",作者:" + bookinf[1] + ",價格:" + bookinf[2] + ",型別:" + bookinf[3] +
",出版社:" + bookinf[4] + ",是否被借出:" + bookinf[5] + ",借書人:" + bookinf[6] + ",借出日期:" + bookinf[7]);
//判斷是否超時,超時需付罰金
long charge = 0;//兩個時間相差的毫秒數
long charge1 = 0;//兩個時間相差的毫秒數
Date nowDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String returnTime = sdf.format(nowDate);//獲取歸還時間
Date d1 = sdf.parse(bookinf[7]);//借出時間
Date d2 = sdf.parse(returnTime);//歸還時間
charge = (d2.getTime() - d1.getTime()) / (24 * 60 * 60 * 1000);
charge1 = (d2.getTime() - d1.getTime()) / (1000);
if (charge1 <= 7) {
System.out.println("該書籍被您借出" + charge + "天"+charge1+"秒,"+"感謝您規范用書!");
} else if (charge1 > 7) {
System.out.println("該書籍被您借出" + charge + "天"+charge1+"秒,"+"您已逾期" + (charge1 - 7) + "天,需交罰金:" + (charge1 - 7) * 5 + "元,謝謝配合!");
}
break;
} else if (bookName.equals(bookinf[0]) && !operator.equals(bookinf[6]) && bookinf[5].equals("true")) {
//判斷書籍是否存在,且為本人所借出
//若存在該書籍且被借出,但不是本人所借出,只輸出該書籍基本資訊
flag = 2;
System.out.println("書名:" + bookinf[0] + ",作者:" + bookinf[1] + ",價格:" + bookinf[2] +
",型別:" + bookinf[3] + ",出版社:" + bookinf[4] + ",是否被借出:" + bookinf[5]);
break;
} else if (bookName.equals(bookinf[0]) && bookinf[5].equals("false")) {
//判斷書籍是否存在,且為本人所借出
//若存在該書籍但并未被借出,只輸出該書籍基本資訊
flag = 3;
System.out.println("書名:" + bookinf[0] + ",作者:" + bookinf[1] + ",價格:" + bookinf[2] +
",型別:" + bookinf[3] + ",出版社:" + bookinf[4] + ",是否被借出:" + bookinf[5]);
break;
}
}
if (flag == 0) {
System.out.println("沒有查找到該書籍,請重新確認后再進行查找!");
} else if (flag == 2) {
System.out.println("該書不是由您所借出,請查證后再輸入歸還的書籍!");
} else if (flag == 3) {
System.out.println("該書并未被借出,請查證后再輸入歸還的書籍!");
}
//修改書籍資料后,重新寫入檔案
else if (flag == 1) {
if (bookName.equals(bookinf[0]) && bookinf[5].equals("true") && operator.equals(bookinf[6])) {
modifyFile.writeFile(filePath, modifyFile.readFileContent(bookinf, filePath, "true", "false"));
// 修改檔案中借閱狀態
modifyFile.writeFile(filePath, modifyFile.readFileContent(bookinf, filePath, operator, "無"));
modifyFile.writeFile(filePath, modifyFile.readFileContent(bookinf, filePath, bookinf[7], "null"));
File journal = new File("日志.txt");
Date nowDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String borrowTime = sdf.format(nowDate);
FileWriter jfw = new FileWriter(journal, true);
jfw.write(borrowTime +" "+ operator + "歸還了" + bookinf[0] + "\n");
jfw.write("--------------------------------");
jfw.write(System.getProperty("line.separator"));//在段落后添加一個換行符
jfw.close();
System.out.println("歸還成功!");
return;
}
}
}
// 讀檔案
public String readFileContent(String[] bookinf, String filePath, String oldString, String newString) {
Scanner sc = new Scanner(System.in);
BufferedReader br = null;
String line = null;
StringBuffer bufAll = new StringBuffer();// 保存修改過后的所有內容
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF-8"));
// System.out.println("請確認您的用戶名:");
// String username = sc.next();
while ((line = br.readLine()) != null) {
StringBuffer buf = new StringBuffer();
// 修改內容核心代碼
String[] bookinf2 = line.split(",");
if (bookinf2[0].equals(bookinf[0])) {//判斷條件根據自己的要求修改
buf.append(line);
int indexOf = line.indexOf(oldString);
buf.replace(indexOf, indexOf + oldString.length(), newString);// 修改內容
buf.append(System.getProperty("line.separator"));// 添加換行
bufAll.append(buf);
} else {
buf.append(line);
buf.append(System.getProperty("line.separator"));
bufAll.append(buf);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (Exception e) {
br = null;
}
}
}
return bufAll.toString();
}
// 寫檔案
public boolean writeFile(String filePath, String content) {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "UTF-8"));
bw.write(content);
bw.flush();
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
bw = null;
}
}
}
return true;
}
}
洗掉書籍:
package Book;
import User.DeleteUser;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class DeleteBook {
private String bookDelete;
String[] bookinf = new String[8];
String[] bookinf1 = new String[8];
String[] bookinf2 = new String[8];
String[] bookinf3 = new String[8];
public void deleteBook() throws IOException {
File file = new File("書籍.txt");
FileInputStream intput = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
String tempString;
List<String> list = new ArrayList<>();
while ((tempString = reader.readLine()) != null) {
list.add(tempString);
}
System.out.println("==========當前書籍有==========");
for (String book : list) {
bookinf = book.split(",");
System.out.print(bookinf[0] + " ");
}
System.out.println("");
System.out.println("請輸入要洗掉的書籍名稱:");
Scanner scanner = new Scanner(System.in);
bookDelete = scanner.next();
boolean bookflag = false;//書名是否存在的標志量; true--存在 false--不存在
boolean bookflag1 = false;
for (String book : list) {
bookinf1 = book.split(",");
if (bookDelete.equals(bookinf1[0])) { //判斷書名是否存在
bookflag = true;
break;
}
}
if (bookflag == true) {
for (String book : list) {
bookinf3 = book.split(",");
if (bookDelete.equals(bookinf3[0]) && bookinf3[5].equals("false")) {
bookflag1 = true;
list.remove(book);
FileWriter fd = new FileWriter(file, false);
fd.write("");
fd.close();
break;
} else if (bookDelete.equals(bookinf3[0]) && bookinf3[5].equals("true")) {
System.out.println("此書已經被借出,請用戶歸還書后再進行洗掉操作!");
bookflag1 = false;
break;
}
}
}else{
System.out.println("無法找到該書籍,請重新確認后再進行操作!");
return;
}
if (bookflag1 == true) {
for (String book : list) {
bookinf2 = book.split(",");
FileWriter fw = new FileWriter(file, true);
fw.write(bookinf2[0] + "," + bookinf2[1] + "," + bookinf2[2] + "," + bookinf2[3] +
"," + bookinf2[4] + "," + bookinf2[5] + "," + bookinf2[6] + "," + bookinf2[7]);
fw.write(System.getProperty("line.separator"));//在段落后添加一個換行符
fw.close();
}
System.out.println("洗掉成功!");
}
}
public static void main(String[] args) throws IOException {
DeleteBook db = new DeleteBook();
db.deleteBook();
}
}
添加用戶:
package User;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
@SuppressWarnings({"all"})
public class AddUser {
String[] userinf = new String[5];
public void addUser() throws IOException {
Scanner sc = new Scanner(System.in);
File file = new File("用戶資訊.txt");
FileInputStream intput = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
String tempString;
List<String> list = new ArrayList<>();
while ((tempString = reader.readLine()) != null) {
list.add(tempString);
}
System.out.println("請輸入要添加的用戶名:");
String name = sc.next();
//查找是否有同名用戶
boolean flag = false;
for (String user1 : list) {
userinf = user1.split(",");
if (name.equals(userinf[0])) { //判斷用戶名是否存在
System.out.println("該用戶名已存在,請重新擬取名稱");
flag = true;
break;
}
}
if (flag == false) {
System.out.println("請設定該用戶的密碼:");
String password = sc.next();
String sex;
while (true) {
System.out.println("請輸入該用戶的性別:");
sex = sc.next();
if (sex.equals("男") || sex.equals("女")) {
break;
} else {
System.out.println("別鬧!認真點,輸入正確的性別!");
}
}
int age;
while (true) {
System.out.println("請輸入該用戶的年齡:");
age = sc.nextInt();
if (age < 10) {
System.out.println("身為管理員,你擱這兒干啥捏,連個年齡都輸不對!");
} else {
break;
}
}
long phone;
while (true) {
System.out.println("請輸入該用戶的電話號碼:");
phone = sc.nextInt();
if (phone < 0) {
System.out.println("身為管理員,你擱這兒干啥捏,連個電話號碼都輸不對!");
} else {
break;
}
}
User user = new User(name, sex, age, phone, password);
file.createNewFile();
FileWriter fw = new FileWriter(file, true);
fw.write(user.toString());
fw.write(System.getProperty("line.separator"));//在段落后添加一個換行符
fw.close();
System.out.println("成功添加用戶:" + name);
return;
}
}
}
洗掉用戶:
package User;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class DeleteUser {
private String userDelete;
String[] userinf = new String[5];
String[] userinf1 = new String[5];
String[] userinf2 = new String[5];
String[] bookinf = new String[8];
public void deleteUser() throws IOException {
File file = new File("用戶資訊.txt");
FileInputStream intput = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(intput));
String tempString;
List<String> list = new ArrayList<>();
while ((tempString = reader.readLine()) != null) {
list.add(tempString);
}
System.out.println("==========當前用戶有==========");
for (String user : list) {
userinf = user.split(",");
System.out.print(userinf[0] + " ");
}
System.out.println("");
System.out.println("請輸入要洗掉資訊的用戶名:");
Scanner scanner = new Scanner(System.in);
userDelete = scanner.next();
File file1 = new File("書籍.txt");
FileInputStream intput1 = new FileInputStream(file1);
BufferedReader reader1 = new BufferedReader(new InputStreamReader(intput1));
List<String> list1 = new ArrayList<>();
String tempString1;
while ((tempString1 = reader1.readLine()) != null) {
list1.add(tempString1);
}
boolean flag = false;
boolean flag1 = false;
for (String book : list1) {
bookinf = book.split(",");
if (userDelete.equals(bookinf[6])) {
System.out.println("此用戶還有書籍尚未歸還,請勿洗掉!");
flag = true;
break;
}
}
if (flag == false) {
for (String user : list) {
userinf1 = user.split(",");
if (userDelete.equals(userinf1[0])) {//判斷用戶名是否存在
flag1 = true;
list.remove(user);
FileWriter fd = new FileWriter(file, false);
fd.write("");
fd.close();
break;
}
}
}
if (flag1 == true) {
for (String user : list) {
userinf2 = user.split(",");
FileWriter fw = new FileWriter(file, true);
fw.write(userinf2[0] + "," + userinf2[1] + "," + userinf2[2] + "," + userinf2[3] + "," + userinf2[4]);
fw.write(System.getProperty("line.separator"));//在段落后添加一個換行符
fw.close();
}
System.out.println("洗掉成功!");
} else if (flag == false && flag1 == false) {
System.out.println("無法找到該用戶,請重新確認后再進行操作!");
return;
}
}
}
查看日志的模塊在admin類中有顯示;
總結:
本次代碼實踐專案中隨未使用資料庫(是因為沒學呢!),但是通過I/O流把書籍和用戶資訊以及用戶操作的記錄都保存到了檔案中,加深了自己對于I/O流及其使用方法的理解,本代碼中通過對Date類的方法使用,獲取了當下時間,并記錄下來,更加清晰地知道了用戶借閱圖書與歸還圖書的時間,為管理員更好地管理用戶提供了便捷,
總的來說,這次專案實踐是自己受益良多,對于知識的掌握更加有了一個清晰地認知,
此次代碼還有許多不完善的地方,還請小可愛們多多指出,共同進步!
一起加油!!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/278576.html
標籤:其他
