IO实现快递存储的思路:
    一、先读取:
    先判断在文档中是否已经存在信息,如果存在就读取进来,(根据写入的规则,每次写入的时候每条信息之间换行写入,一条信息的中的不同部分用逗号隔开)每次读取一行数据,并根据逗号的位置将读进来的数据保存为String数组(用split方法)再赋值给快递对象并加入Arraylist数组。

    二、登录注册
    调用welcome加载欢迎界面,然后用户进行选择
    选择项有1.登录 2.注册,0.退出,默认设置了一个管理员账号和密码,如果用户的登录的账号是管理员的账号,也就是输入的账号是admin并且密码没有错误,就进入管理员界面,否则提示错误信息并让用户重新选择。
    如果是选择了注册,那就提示用户输入用户名和密码,并保存,没问题就提示注册成功再返回初始界面让用户选择,用户可以用刚刚创建的账号登录,账号与密码输入无误就进入用户界面,否则提示错误信息并让用户重新选择。
    如果选择了退出则调用bye方法,加载退出界面并退出程序。

    三、管理员操作
    管理员界面有可选项目1.增加2.修改3.删除4.查看所有0.返回
    如果选择了1.增加,则先调用view中的增加界面,提示管理员输入要添加的信息(六位取件码由随机函数随机生成),如果没有找到则返回错误信息,找到了就将快递类中的信息同步设置,返回设置好的快递对象给ExpressDao类并将该对象存入到Arraylist中保存,调用写入方法将数据写入到文档中,(写入的信息包括快递单号,快递公司,快递取件码并且中间都用逗号隔开方便读取形成数组),提示成功信息。
    如果选择了2.修改则调用view中的修改界面,提示管理员输入快递单号,如果没有找到就返回错误信息,找到了就调用通过快递单号找到快递的方法查找到对应的快递,找到后直接删了,删了之后在调用添加的方法,让管理员重新添加上快递,更新ArrayList中的数据和文档数据,提示成功信息。
    如果选择了3.删除操作,调用view中的删除界面,提示用户输入快递单号找到对应快递,如果没有找到则返回错误信息,找到了就询问是否确认删除,如果确认删除则将该快递信息在ArrayList中移除,同时更新文档数据,提示成功信息。
    如果选择了4.查看所有,调用view中的查看所有界面,显示所有的快递信息,如果没有信息就提示空列表信息。
    如果选择了0。退出管理员操作界面,返回上一级。

    四、用户操作
    用户界面可选项目1.取件0.退出
    如果用户选了1.取件则调用view中的取件界面,提示用户输入取件码,再调用根据取件码找快递的方法找到对应快递,如果没有找到则返回错误信息,找到了就调用delete方法删除快递信息,提示成功信息。
    如果选择了0.则退出用户界面,返回上一级。

    可以通过序列化和反序列化方法来完成文件的输入和输出
    插入成功后,文件删除之后,修改成功之后插入序列化方法
    查询前,读取全部数据前插入反序列化方法