昨晚上在设计项目数据库遇到点困难,刚好看到Java选修课群里说有个“大作业”。大概的意思就是一张固定的表,使用文件的方式管理这张表的数据,使其可以对数据进行"更删改查"。这不就是一个"数据库"么,当然和实际使用的数据库差很远,不过大体思想差不多是吧→_→(原谅我这个标题党)
题目描述:
利用字符流操作文本文件,实现 学生记录的增加、删除和更新;
记录的格式(学号,姓名,出生年月,专业) 数据项按“,”分割,一条记录为一行
之前可以说没有用过Java的文件操作,只看过Oracle 文档上关于I/O 流的介绍,借此机会练练手。
首先类的设计
- StudentBean: 用户表示学生信息,亦即“数据库”中的表
- DatabaseHelper: 数据库的工具类 实现更删改查(不过我这里将文件操作都扔里边了 耦合性高了点 懒的分出来了)
- Menu: 菜单类 也就是用户操作界面了
- Client: 主类 测试用
这里边最主要的就是 DatabaseHelper 的编写,属于这里边的核心类。
它包含学生记录的 增删改查
增: 向文件末尾写入一条数据
删: 首先查找数据位置,将文件中数据读取出来,删除再写入文件
改: 首先查找数据位置,再删除,修改后再写入
这几步当中,"删"较为复杂一点。开始的时候我是打算直接打开两个文件,一边读一遍写。这样同时操作就不需要
一次性将文件中的所有数据加载到内存了,相对来说对系统内存要求小一些,防止文件过大内存被用光。但是在实际的实现当中,数据产生混乱。数据的删除出现问题,最后还是采用将数据读出来再写进去的方法。这个方法很简单,就不做细节介绍了。删除记录完成了,更改数据就可以在"增"和“删”的基础上进行了。同时数据记录的查找就是上边操作的基础,就是做一个字符串匹配。
下边就贴两段代码,注释都很详细了。
这个程序关注的是核心功能的实现,对数据格式的没做太多限制,异常处理也不是很全面。不过正常的输入测试是没有问题的。代码耦合也没做太多考虑,讲究这看吧。文末会附上完整源码地址。(IntelliJ IDEA 工程)
StudentBean:
package com.mummyding.javacourse;
import java.util.Scanner;
/**
* Created by mummyding on 15-11-25.
*/
public class StudentBean {
private String studentID;
private String studentName;
private String birthDay;
private String major;
public String getStudentID()