目录

前言

功能流程

心得体会


前言

在学习完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; //读者idString readerName = null;//读者姓名int bookId = 0;//图书idString bookName = null;//图书名字int count = 0;//借书次数 limitString 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;}}}}}}

实践项目2 图书管理系统相关推荐

  1. javaWeb项目之图书管理系统(附视频讲解)

    javaWeb项目之图书管理系统(附视频讲解) 视频播放地址:javaWeb图书系统 本系统为"Swing项目之图书管理系统"(此源码已共享)的Web版,网页框架用采用EasyUI ...

  2. 项目挂到iis 点击导入 未将对象引用设置到对象的实例_【WPF on .NET Core 3.0】 Stylet演示项目 简易图书管理系统(2)...

    上一章<[WPF on .NET Core 3.0] Stylet演示项目 - 简易图书管理系统(1)>中我们完成了一个简单的登录功能, 这一章主要演示如何对Stylet工程中的ViewM ...

  3. 我的第一个项目----Java图书管理系统

    项目参考自:http://www.java1234.com/a/yuanchuang/swing2/ 项目视频及代码下载地址:链接:http://pan.baidu.com/s/1pLpQw2J 密码 ...

  4. c语言项目实战 —— 图书管理系统

    图书管理系统 目的 总体功能分析 各模块功能简要分析 1,图书借出模块 2,图书归还模块 3,图书上架模块 4,图书下架模块 5,查找图书模块 6,退出系统模块 功能实现 1,建立相关类及属性 2,系 ...

  5. java swing实训项目(图书管理系统)

    1.项目布局(供新手参考) 学校老师任务,因为我也是新手所以写的不是特别的好,所以可以提供参考. package GUI_Object.GUI;import GUI_Object.mysql.Data ...

  6. Java小项目--小型图书管理系统(含完整代码及工具)

    写在前面 对于一个java项目来说,我理解的整个流程是这样的: (1)进行需求分析 (2)设计数据库(重要) (3)编写java代码 注:数据库设计非常重要,特别是数据类型的定义,表与表之间的关系,如 ...

  7. 网络编程项目:图书管理系统

    1.运行结果 1.1-1管理员登陆 1.1-2管理员添加书籍信息 1.1-3查询所有书籍信息 1.1-4指定查询某种书籍信息 1.1-5修改书籍信息 1.1-6删除书籍信息 1.1-7会员登陆 1.1 ...

  8. 用SSM框架实现简单的项目-《图书管理系统》

    一.项目环境环境搭建 参考我的博客[跟项目配套的] 二.功能模块介绍及要求 图书信息新增 1.1 基本信息添加 1.2 图片上传及回显功能 图书信息删除 2.1 单个删除 2.2 批量删除 图书信息修 ...

  9. java小项目图书管理系统_Java小项目迷你图书管理系统

    package迷你图书管理系统;importjava.util.Scanner;public classBookMgr {public static voidmain(String[] args) { ...

  10. 项目1 图书管理系统

    图书管理系统 """ ------图书管理系统------ 1.首先要求学生登录或者注册(1.登录 2.注册), 2.注册: 输入用户名和密码,确认密码 则注册成功 3. ...

最新文章

  1. Eclipse将android 类编译为jar类库
  2. PHP 基础 自动类型转换之比较运算符
  3. JAVA入门级教学之(方法-调用-5)
  4. 原来在首席架构眼里MySQL果然如此不一样!
  5. testTry-catch和catch中的应用程序恢复
  6. Prompt范式,真香
  7. java.lang.NoClassDefFoundError: org/springframework/dao/support/DaoSupport ...
  8. access mysql odbc驱动程序_access odbc驱动程序
  9. 条码打印软件如何制作二维码
  10. Chrome 清除网站图标缓存,更新网站图标
  11. 飘云QQ宣布终止后续开发 称不懂游戏规则玩不起
  12. 格林酒店2020年第三季度营收为2.67亿元,恢复至同期91.4%
  13. arcgis runtime for android 100.13.0 入门系列,三、加载shp,kml,tpk文件,图层定位,toolkit工具
  14. 云之家定位拍照怎么破解
  15. ipados 蓝牙 android,iPadOS 体验:走出 iOS,iPad 终于能取代 PC 了?
  16. 爬虫——bs4测试——test.html
  17. flowchart流程图编程语言下载_流程图(flowchart)
  18. Linux 主机网络接入配置
  19. 下载好看的壁纸,这五个网站就够了
  20. 不只是电商,苏宁打通全供应链的野望

热门文章

  1. arm-none-linux-gnueabi-gcc:未找到命令,arm-none-linux-gnueabi-gcc编译标准库引用
  2. 循环map 取得键和值_Java 从 Map 到 HashMap 的一步步实现
  3. oracle快速解析,教你用Oracle解析函数快速检查序列间隙
  4. java经常用到的英文_Java中用到的英文单词,你知道多少?
  5. java获取动态输入_java-如何在Spring中以bean形式接收动态生成的输入值
  6. 不小心将.gitignore中标记忽略类型的文件提交到了远端仓库,怎么办?
  7. CRC校验的问题(c语言实现CRC校验和)
  8. 在linux上安装svn
  9. 接口测试简单介绍、及jmeter的简单使用
  10. UART接口基本知识