目录
前言
在学习完Java容器集合和文件IO流的内容后,迎来了又一个实践项目<图书管理系统>;这次与项目1不同的是,得用IO流知识实现项目。接下来,让我们一起来看看项目的需求及目标......
有一说一,当看到项目2的需求文档时,真的是一脸茫然啊。就这?就这?一张图,几段需求说明就把我打发了?我该怎么下手,从哪个角度下手?这可真的是个大难题,在徘徊惆怅了几个小时后,终究是像社会低下了头。我便在博客看看别人写过的此篇文章,像身边的大佬咨询......万事开头难,但我们得迈出第一步!接下来,迈入主题。冲冲冲!!!
功能流程
仔细揣摩文档给出的需求图后,我们其实最好不要按着给出的顺序依次写(不然后面太麻烦),因为读者和图书里面包含了相应的类别,图书借阅与归还也和读者、图书(读者类型、图书类型)相关联。
鄙人实现项目流程:
- 用户管理
- 基本信息维护
- 读者信息管理
- 图书信息管理
- 图书借阅管理
在写项目时,我们首先就得弄明白需要怎么构建起来该项目的框图。我这里参考项目一框架,一个界面显示区(view),一个实体类区域(domain),一个功能实现区(service);因为该项目用到的是IO流知识,得用一个包来装文件内容。
心得体会
【1】因为IO流实现代码,必然涉及到文件读写操作,我是用的对象序列化完成的,用Properties集合也同样可以完成 。但因为类里面涉及的属性太多,我对split分割不能熟练应用,最后选择序列化。既然文件需要反复读写,可以把它封装到工具类!还有获取时间什么的也可以封装进去。
//反序列化
public static ArrayList deserialization(File f) throws IOException, ClassNotFoundException {
ArrayList<Object> o = null;
if (!f.exists()) {
f.createNewFile();
} else {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
Object obj = ois.readObject();
o = (ArrayList) obj;
ois.close();
}
return o;
}
//序列化
public static void serialization(ArrayList<Object> r, File f) throws IOException {
if (!f.exists()) {
f.createNewFile();
} else {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f));
oos.writeObject(r);
oos.close();
}
}
//当前时间
public static String currentTime() {
Date time = new Date();
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
return ft.format(time);
}
//判断性别
public static char isSex() {
char c;
for (; ; ) {
String str = readKeyBoard(1, false).toUpperCase();
c = str.charAt(0);
if (c == '男' || c == '女') {
break;
} else {
System.out.print("选择错误,请重新输入:");
}
}
【2】在写读者和图书相关内容时,定义实体类时,属性不要定义为基本数据类型,不然之后内容存不了文件,不能实现项目需求。
【3】该项目大部分都是增删改查,写出来一个,另一个对应的类,代码实现都差不多,可以Ctrl+C、Ctrl+V。
其实,该项目最难的地方就是图书的借阅与归还,还有罚金的设置等,这些得好好想。我因为不怎么会用循环嵌套,在写借书时,for循环,while循环把我脑阔都绕晕了,实在是遭不住。这里给出借书的相关代码。
private static File file = new File("project2\\src\\file\\borrowInfo.txt");
//借书
public static void borrowBooks() throws IOException, ClassNotFoundException {
int readerId = 0; //读者id
String readerName = null;//读者姓名
int bookId = 0;//图书id
String bookName = null;//图书名字
int count = 0;//借书次数 limit
String typeName = null; //读者类型
int maxborrownum = 0; //最大借书天数
int limit = 0;
boolean flag = true;
while (flag) {
File file1 = new File("project2\\src\\file\\readerInfo.txt");
ArrayList readerArray = TSUtility.deserialization(file1);
System.out.println("读者id\t姓名\t 性别 年龄\t 电话\t\t所在院系\t\t类别\t 可借阅数量\t 可借阅天数");
for (int i = 0; i < readerArray.size(); i++) {
Readers readers = (Readers) readerArray.get(i);
System.out.println(readers.getReaderId() + "\t\t" + readers.getName() + "\t" + readers.getSex() + "\t" + readers.getAge() + "\t" + readers.getPhoneNumber() + "\t" + readers.getFaculty() + "\t\t" + readers.getRt().getName() + "\t\t" + readers.getRt().getLimit() + "\t\t" + readers.getRt().getMaxborrownum());
}
boolean flags = true;
while (flags) {
System.out.println("请输入你要选择的读者id:");
readerId = TSUtility.readBookBorrowInt();
for (int i = 0; i < readerArray.size(); i++) {
Readers r = (Readers) readerArray.get(i);
if (readerId == r.getReaderId()) {
readerName = r.getName();
typeName = r.getRt().getName(); //读者类别
count = r.getRt().getLimit(); //可借阅数量
maxborrownum = r.getRt().getMaxborrownum(); //最大借书天数
flags = false;
break;
}
}
if (flags) {
System.out.println("无此读者id,请重新输入!");
}
}
if (count == 0) {
System.out.println("该读者的借书数量已使用完,请先归还图书");
flag = false;
} else {
File file2 = new File("project2\\src\\file\\bookInfo.txt");
ArrayList bookArray = TSUtility.deserialization(file2);
System.out.println("图书id\t 图书编号\t \t书籍名称 作者\t 图书单价\t 出版社\t\t出版日期");
for (int j = 0; j < bookArray.size(); j++) {
Books books = (Books) bookArray.get(j);
/*int id = books.getBt().getId();
String name = books.getBt().getName();*/
System.out.println(books.getBookId() + "\t\t" + books.getISBN() + "\t" + books.getBookName() + "\t " + books.getAuthor() + "\t " + books.getMoney() + "\t " + books.getPublisher() + "\t\t" + books.getPublishDate());
}
boolean flagss = true;
while (flagss) {
boolean f1 = true; //是否借阅此书
System.out.println("请输入你选择的图书id:");
bookId = TSUtility.readBookBorrowInt();
for (int i = 0; i < bookArray.size(); i++) {
Books books = (Books) bookArray.get(i);
if (bookId == books.getBookId()) {
bookId = books.getBookId();
bookName =books.getBookName();
flagss = false;
break;
}
}
if (flagss) {
System.out.println("无此图书id,请重新输入!");
}
ObjectInputStream oos2 = new ObjectInputStream(new FileInputStream("project2\\src\\file\\borrowInfo.txt"));
Object obj = oos2.readObject();
ArrayList array2 = (ArrayList) obj;
for (int i = 0; i < array2.size(); i++) {
BorrowBook bb = (BorrowBook) array2.get(i);
if (bb.getReaderId() == readerId && bb.getBookId() == bookId) {
f1 = false;
flagss = true;
System.out.println("该读者已经借阅该书!");
break;
}
}
if (f1) {
//借书时间
String borrowTime = TSUtility.currentTime();
if (file.length() == 0) {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("project2\\src\\file\\borrowInfo.txt"));
ArrayList<BorrowBook> array = new ArrayList<>();
BorrowBook bb = new BorrowBook(readerId, readerName, bookId, bookName, borrowTime);
array.add(bb);
// count--;
oos.writeObject(array);
System.out.println("借阅成功");
flag = false;
flagss = false;
} else if (file.length() != 0) {
ArrayList array1 = TSUtility.deserialization(file);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("project2\\src\\file\\borrowInfo.txt"));
BorrowBook bb = new BorrowBook(readerId, readerName, bookId, bookName, borrowTime);
array1.add(bb);
oos.writeObject(array1);
System.out.println("*****************************************");
System.out.println();
System.out.println("该读者的借书情况如下:");
System.out.println("读者id\t读者姓名\t图书id\t图书名称\t借阅时间");
System.out.println(readerId + "\t\t" + readerName + "\t\t" + bookId + "\t" + bookName + "\t" + borrowTime);
for (int i = 0; i < readerArray.size(); i++) {
Readers r = (Readers) readerArray.get(i);
if (readerId == r.getReaderId()) {
count--;
System.out.println("你还可以借" + count + "本书~·");
r.setRt(new ReaderType(typeName, count, maxborrownum));
break;
}
}
ObjectOutputStream oos1 = new ObjectOutputStream(new FileOutputStream("project2\\src\\file\\readerInfo.txt"));
oos1.writeObject(readerArray);
flag = false;
flagss = false;
}
}
}
}
}
}