本系统所用知识点:
● 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) {
//注册
System.out.println("请输入用户名:");
String name = 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);
}
String[] userinf = new String[5];
for (String user : list) {
userinf = user.split(",");
if (name.equals(userinf[0])) {
//判断用户名是否存在
System.out.println("该用户名已存在,请重新拟取名称");
break;
} else {
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("请输入您的年龄:");
System.out.println("(年龄必须满10周岁才能注册呦!)");
age = sc.nextInt();
if (age < 10 && age > 0) {
System.out.println("您的年龄太小啦!请让家长使用账号帮您借阅书籍!");
break;
} else if (age <= 0) {
System.out.println("你是魔鬼吗?");
}
}
long phone;
while (true) {
System.out.println("请输入您的电话号码:");
phone = sc.nextInt();
if (phone < 0) {
System.out.println("请输入正确的电话号码!");
} else {
break;
}
}
User u = new User(name, sex, age, phone, password);
file.createNewFile();
FileWriter fw = new FileWriter(file, true);
fw.write(u.toString());
fw.write(System.getProperty("line.separator"));//在段落后添加一个换行符
fw.close();
System.out.println("恭喜您,注册成功!");
break;
}
}
}
}
} 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类的方法使用,获取了当下时间,并记录下来,更加清晰地知道了用户借阅图书与归还图书的时间,为管理员更好地管理用户提供了便捷。
总的来说,这次项目实践是自己受益良多,对于知识的掌握更加有了一个清晰地认知。
此次代码还有许多不完善的地方,还请小可爱们多多指出,共同进步!
一起加油!!!