使用IO完善快递管理系统

还记得之前的快递管理吗?我们将数据存储在集合中,在程序被关闭后,存储的数据就丢失了。下面我们来学习 IO,学习了 IO 以后,就可以使用 IO 技术将快递数据存储到文件中了。文件存储快递信息后,可以在每次启动应用时读取文件中的内容,从而实现程序数据的一直存在。 通过简单的思考与分析,以下是我的代码与思路。

欢迎与再见:

public void welcome() {System.out.println("欢迎使用dbg快递柜");
}public void bye() {System.out.println("欢迎您的下次使用");
}

各种操作界面

初始菜单

//初始菜单
public int menu() {System.out.println("请根据提示输入序号");System.out.println("1、管理员登录");System.out.println("2、普通用户登录");String text = input.nextLine();int num = -1;try {num = Integer.parseInt(text);} catch (NumberFormatException e) {}if (num < 0 || num > 2) {System.out.println("输入错误请重新输入");return menu();}return num;
}

管理员操作界面

//管理员操作界面
public int aMenu() {System.out.println("请根据提示输入序号");System.out.println("1、快递录入");System.out.println("2、删除快递");System.out.println("3、查看所有快递");System.out.println("0、返回上一级");String text = input.nextLine();int num = -1;try {num = Integer.parseInt(text);} catch (NumberFormatException e) {}if (num < 0 || num > 3) {System.out.println("输入错误请重新输入");return aMenu();}return num;
}

用户操作界面

//用户操作界面
public int uMenu() {System.out.println("请根据提示输入序号");System.out.println("1、取出快递");System.out.println("0、返回上一级");String text = input.nextLine();int num = -1;try {num = Integer.parseInt(text);} catch (NumberFormatException e) {}if (num < 0 || num > 1) {System.out.println("输入错误请重新输入");return uMenu();}return num;
}

创建快递相关信息并将其录入

//创建快递柜坐标 //录入快递信息
public int size = 1;//总快递数
private Random random = new Random();//随机数
public boolean add() throws IOException {System.out.println("请根据提示输入快递信息");while (true) {System.out.println("快递单号:");String number = input.nextLine();System.out.println("快递公司:");String company = input.nextLine();//随机生成两个下标int x = random.nextInt(10);int y = random.nextInt(10);int code = code();                                                            //获取随机取件码if (x == 0 || y == 0) {                                                       //随即单号不能为0continue;}if (findByNumber(number) == false || findByAxis(x, y) == false) {            //判断单号与位置不重复if (Full() == true) {                                                    //判断快递是否存满System.out.println("快递已满");} else {String d = String.valueOf(x);                                        //将获取的数值转换为String方便存储String e = String.valueOf(y);String f = String.valueOf(code);Properties p = new Properties();FileReader r = new FileReader("d://express.properties");             //读取文件夹p.load(r);                                                           //写入pif (p.get("Size") != null) {size = (Integer.parseInt((String) p.get("Size"))) + 1;           //快递数++}FileWriter fw = new FileWriter("d://express.properties");String g = String.valueOf(size);p.put("Number" + size, number);                                      //分别存储数据p.put("Company" + size, company);p.put("xAxis" + size, d);p.put("yAxis" + size, e);p.put("Code" + size, f);p.put("Size", g);p.store(fw, "");fw.close();                                                           //关闭流return false;}} else {System.out.println("您输入的单号已存在,请重新输入");continue;//结束本次循环重新输入。}}
}

查询快递信息

//查询所有快递 //显示快递信息
public void printAll() throws IOException {FileReader r = new FileReader("d://express.properties");Properties p = new Properties();p.load(r);                                                                        //读取文档信息if (Empty() != true) {                                                            //判断是否为空for (int i = 1; i <= Integer.parseInt((String) p.get("Size")); i++) {        //遍历输出System.out.println("第" + (p.get("xAxis" + i)) + "排, 第" + (p.get("yAxis" + i)) + "列快递,");System.out.println("快递信息如下");System.out.println("快递公司:" + p.get("Company" + i) + ", 快递单号:" + p.get("Number" + i) + ", 取件码:" + p.get("Code" + i));}} else {System.out.println("无快递");}}

判断快递是否存在

public boolean Empty() throws IOException {                                    //判断是否为空FileReader r = new FileReader("d://express.properties");Properties p = new Properties();p.load(r);if (p.get("Size") != null) {                                               //文件为空if (Integer.parseInt((String) p.get("Size")) == 0) {                   //快递数为0return true;}return false;}return true;
}

判断快递是否存满

public boolean Full() throws IOException {                                        //判断是否存满FileReader r = new FileReader("d://express.properties");Properties p = new Properties();p.load(r);if (p.get("Size") != null) {                                                  //文件数据不为空if (Integer.parseInt((String) p.get("Size")) == 0) {                      //快递存在return false;}if (p.get("Size").equals(100)) {                                          //数值100return true;}}return false;
}

生成取件码

//生成一个不重复的取件码
private int code() throws IOException {while (true) {//随机100000-999999int code = random.nextInt(900000) + 100000;if (findByCode(code) == false) {                                    //生成的取件码不重复return code;}System.out.println("取件码:" + code);}
}

根据坐标遍历查询

//根据坐标遍历查询
public boolean findByAxis(int x, int y) throws IOException {FileReader r = new FileReader("d://express.properties");Properties p = new Properties();p.load(r);for (int i = 1; i <= ((int) p.get("Size")); i++) {                        //遍历输出if (p.get("xAxis" + i).equals(x) && p.get("yAxis" + i).equals(y)) {   //x,y重复坐标存在return false;}}return true;
}

根据取件码查询快递

//根据取件码查询快递
public boolean findByCode(int code) throws IOException {FileReader r = new FileReader("d://express.properties");Properties p = new Properties();p.load(r);if (Empty() == false) {for (int i = 1; i <= Integer.parseInt((String) p.get("Size")); i++) { //遍历输出int c = Integer.parseInt((String) p.get("Code" + i));if (c == code) {                                                  //取件码重复return true; }}}return false;
}

根据单号查询快递

public boolean findByNumber(String number) throws IOException {FileReader r = new FileReader("d://express.properties");Properties p = new Properties();p.load(r);if (Empty() == false) {if (p.get("Size") != null) {for (int i = 1; i <= Integer.parseInt((String) p.get("Size")); i++) {    //遍历输出if (p.get("Number" + i).equals(number)) {                            //单号重复return true;}}}}return false;
}

根据单号操作快递

public String operate() {System.out.println("请输入要操作的快递信息");System.out.println("请输入快递单号");String number = input.nextLine();return number;//返回单号
}

用取件码取出快递

//根据取件码遍历数组并删除
public void uCode() throws IOException {System.out.println("请输入取件码");int code = Integer.parseInt(input.nextLine());if (findByCode(code) == true) {                                               //取件码存在//遍历取出快递FileReader r = new FileReader("d://express.properties");Properties p = new Properties();p.load(r);for (int i = 1; i <= Integer.parseInt((String) p.get("Size")); i++) {     //遍历输出int c = Integer.parseInt((String) p.get("Code" + i));if (c == code) {delete(i);System.out.println("快递以取出");break;}}} else {System.out.println("快递不存在");}
}

管理员删除单号相关快递信息

//根据单号查找并删除
public boolean deleteNumber() throws IOException {String number = operate();if (findByNumber(number) == true) {                                             //单号存在FileReader r = new FileReader("d://express.properties");Properties p = new Properties();p.load(r);if (Empty() == false) {for (int i = 1; i <= Integer.parseInt((String) p.get("Size")); i++) {   //遍历删除if (p.get("Number" + i).equals(number)) {if (sure() == 1) {delete(i);System.out.println("快递已删除");}break;}}}} else {System.out.println("查无此快递");return false;}return true;
}

询问是否删除快递信息

public int sure() {System.out.println("请确认是否删除");System.out.println("1、确认删除");System.out.println("0、取消");int sure = Integer.parseInt(input.nextLine());return sure;
}

删除快递

//删除快递的方法public void delete(int i) throws IOException {                            FileReader r = new FileReader("d://express.properties");Properties p = new Properties();p.load(r);String g = String.valueOf((Integer.parseInt((String) p.get("Size")) - 1));p.remove("Code" + i);//删除快递p.remove("Number" + i);p.remove("Company" + i);p.remove("xAxis" + i);p.remove("yAxis" + i);p.remove("Code" + i);p.put("Size", g);FileWriter fw = new FileWriter("d://express.properties");p.store(fw, "");fw.close();}
}

PS:

在将快递信息存入文件时,如果不对键进行处理那么会出现相同的键存在不同的值的情况。针对这种问题,我是将size信息与原来的键相结合,每存入一个快递,键就会发生改变,这样的方式还存在很大的缺陷。

使用IO完善快递管理系统相关推荐

  1. [附源码]java毕业设计校园快递管理系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  2. javaweb的校园快递管理系统

    <javaweb的校园快递管理系统>该项目采用技术:jsp +servlet +mysql+jdbc+css+js+jQuery等相关技术,项目含有源码.文档.配套开发软件.软件安装教程. ...

  3. 快递管理系统 v2.0

    在前面的文章里,我阐述过自己使用Java编写简易的快递管理系统的过程,这一次的更新算是一个跨度较大的更新,包含了全新的内容.对此有兴趣的伙伴可以继续往下阅读了解: 2.0版本新加入的特性: 使用链表存 ...

  4. (附源码)springboot零接触校园快递管理系统 毕业设计 654153

    零接触校园快递管理系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时尚潮流,人类发展 ...

  5. Java面向对象和MVC模式设计练习——快递管理系统

    快递管理系统 一.任务概述 二.MVC设计模式 1.定义 2.优点 a.低耦合 b.复用性强 三.思路梳理 1.MVC架构设计 a.Controller b.Model c.View 2.流程控制 3 ...

  6. 基于javaweb+jsp的校园快递管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax)

    基于javaweb+jsp的校园快递管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax) JavaWeb JavaBean JSP ...

  7. 基于android的快递管理系统app

    21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确.快速. ...

  8. 基于springboot框架的校园跑腿快递管理系统的设计与实现.rar(论文+项目源码)

    摘要:本校园跑腿快递管理系统是针对目前校园跑腿快递管理的实际需求,从实际工作出发,对过去的校园跑腿快递管理系统存在的问题进行分析,完善用户的使用体会.采用计算机系统来管理信息,取代人工管理模式,查询便 ...

  9. 快递管理系统 java_快递管理基于java物流快递管理系统设计.doc

    快递管理基于java物流快递管理系统设计 快递管理系统 毕业设计论文 题 目 快递管理系统 姓 名 王敏雪 所 属 系 数学与计算机科学 专 业 计算机科学与技术 班 级 07级计科三班 指导教师 张 ...

最新文章

  1. SAP 作业类型主数据
  2. Spark远程调试配置,在IDEA中的配置
  3. 使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务
  4. 已经导入依赖,但是Cannot resolve symbol“registerFunction“
  5. Ios17个常用代码整理
  6. 【计算机网络复习 数据链路层】3.2 封装成帧和透明传输
  7. Luogu P3521 [POI2011]ROT-Tree Rotations
  8. 解决Error: Protected multilib versions:
  9. java的constructor怎么用,Java Constructor getDeclaringClass()用法及代码示例
  10. 今天遇到了一个很坑爹的问题....
  11. hduoj-----(2896)病毒侵袭(ac自动机)
  12. ubuntu安装微信
  13. 【大数据】Linkis是什么呢
  14. [每日一氵] linux 批量删除某个名字的文件夹
  15. 网页外挂技术浅谈(入门篇)
  16. 快速检查局域网内网络延迟
  17. binutils工具集——ld的用法
  18. IP地址更改小工具(bat命令)
  19. wan端口未连接怎么弄_wan口未连接是什么意思?
  20. Unable to prepare *** iPhone for development

热门文章

  1. PHP电子商城需求分析,网站(电子商城)设计与实现[原创]
  2. html思维导图word版,(完整word版)非谓语动词练习及思维导图
  3. 周鸿祎给360员工的一份信:不做打工者
  4. WinSCP(5.11.2)绿色便携版,开源SCP/SFTP客户端
  5. Swift 3.0 语法
  6. [转贴]电脑使用者的眼睛保护须知
  7. 计算机开机硬盘扫描,电脑开机出现磁盘扫描故障的原因及解决妙招
  8. Krpano 热点箭头动画
  9. 【java毕业设计】基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码)——推箱子游戏
  10. Flask实现Json数据存库和收藏功能