java SE DVD简易管理系统及简单优化
2018-01-23 12:10
405 查看
前期学习中,java 的语法和C语言还是有很多相似的地方,在写这个DVD管理系统的时候,就想起了当时用C语言有写过(那时候,基本都是从网上荡来几篇功能基本实现的代码。就图个通关。),现在自己重新拿起这东西,还是蛮怀旧的。
首先,来说说这DVD管理系统的基本要求。底层是用数组实现的,在初始化的时候,声明数组,然后给数组静态赋值。接下来就是对它的增删改查操作了,完事之后,加上个界面,在面向对象的时候,界面一般是写在一个方法里的,直接调用就行了。
我们要干什么?
你可能会说,是要管理DVD,那么DVD呢?在哪?
就像是你们家是开超市的,然后你得有东西来卖吧。
所以我们用到的第一个知识点:
声明数组,并且赋初值。DVD有名字,状态(是否借出),借出的日期,借出的次数。
那好我们现在有了DVD了,而且也在我们的管理范围之内了。然后呢?卖东西的话,我们需要知道自己都有些什么东西可以借或者卖。还有就是我们需要知道DVD是不是还在自己这,就可以在这加上一个状态位置,flag来表示DVD是不是已经借出去了。
所以第二项就是查看一下,我们都有哪些东西。也就是学过的数组遍历了。根据数组的下标变化,从0到length。
然后我们再分析,如果没借出的话,应该就能够直接的去借它,这时给这个已经在的DVD的flag初值,我这里是声明了一个State的数组,长度也确定了。
接着就到了该要增加 一个DVD的操作,就是数组的增加,借出一个DVD就是数组的改,把一个DVD彻底丢掉,删除,就是数组的删除了。
如果进行一次操作后,还想继续操作,那就用到了循环语句,这里是一个while的死循环。这里再提一下:最简单的死循环有
上边这2种死循环,用的多的一般是while的死循环。
废话就不多BB了,上代码,不过这是初始版本的,从头写到尾。都是些for循环,while死循环,数组的一些操作,页面的输出。switch case语句的使用。
可以看出,除了输入输出语句,其他的代码与C语言无二。
程序运行的部分结果图:
另附优化:升级版。就是简单的把这些实现好的代码块放到不同的方法体中,然后再调用这些方法。基本代码是没有多少变化的。而且因为输出界面是没有变化的,所以优化过的代码执行的结果截图就和之前是一样的。不同的是,要建2个类,面向对象麻烦点就是一个方法一个类,然后你会发现自己一个简单的系统写完了,有7、8个类,看着就烦,我这里是把方法都放在一个类中了,另一个测试类就只负责实例化那个例的对象,之后调用就行。
测试类
以上就是我的对DVD 管理的认识了,主要是可以练习数组的使用。
首先,来说说这DVD管理系统的基本要求。底层是用数组实现的,在初始化的时候,声明数组,然后给数组静态赋值。接下来就是对它的增删改查操作了,完事之后,加上个界面,在面向对象的时候,界面一般是写在一个方法里的,直接调用就行了。
首先说说这里边所用到的知识点。
首先站在一个“白纸”的位置,想想思路。我们要干什么?
你可能会说,是要管理DVD,那么DVD呢?在哪?
就像是你们家是开超市的,然后你得有东西来卖吧。
所以我们用到的第一个知识点:
声明数组,并且赋初值。DVD有名字,状态(是否借出),借出的日期,借出的次数。
那好我们现在有了DVD了,而且也在我们的管理范围之内了。然后呢?卖东西的话,我们需要知道自己都有些什么东西可以借或者卖。还有就是我们需要知道DVD是不是还在自己这,就可以在这加上一个状态位置,flag来表示DVD是不是已经借出去了。
所以第二项就是查看一下,我们都有哪些东西。也就是学过的数组遍历了。根据数组的下标变化,从0到length。
然后我们再分析,如果没借出的话,应该就能够直接的去借它,这时给这个已经在的DVD的flag初值,我这里是声明了一个State的数组,长度也确定了。
接着就到了该要增加 一个DVD的操作,就是数组的增加,借出一个DVD就是数组的改,把一个DVD彻底丢掉,删除,就是数组的删除了。
如果进行一次操作后,还想继续操作,那就用到了循环语句,这里是一个while的死循环。这里再提一下:最简单的死循环有
package d; import java.util.Scanner; public class For_01 { public static void main(String[] args) { @SuppressWarnings("resource") Scanner input = new Scanner(System.in); for (;;) { // for的死循环,最简 System.out.println("请输入你的名字"); String name = input.next(); System.out.println("名字是:" + name); } // while(true){ // //while的死循环 // System.out.println("请输入你的名字"); // String name =input.next(); // System.out.println("名字是:"+name); // } } }
上边这2种死循环,用的多的一般是while的死循环。
废话就不多BB了,上代码,不过这是初始版本的,从头写到尾。都是些for循环,while死循环,数组的一些操作,页面的输出。switch case语句的使用。
package DVD; import java.util.Scanner; public class DVD { /** * 这是一个DVD管理系统,设定是店每个名字的DVD只有1个 一共只有6个空间存放DVD,当增加的DVD数目大于这一限定时会给出提示 有 * 初始化,新增,查看,删除,借出,归还,退出等功能。 使用一维数组存放DVD的名称,状态(是否被借出),借出的日期,借出的次数 * 选择界面使用了switch,do-while。 */ static Scanner sc = new Scanner(System.in); public static void main(String[] args) { // TODO 自动生成的方法存根 // 初始化 String[] Name = new String[6];// 名字 int[] State = new int[6];// 状态,0表示无书可借。 int[] days = new int[6];// 借出的日期 int[] count = new int[6];// 借出的次数 // 初始2个DVD Name[0] = "天下第一"; State[0] = 0; days[0] = 4; count[0] = 1; Name[1] = "武林"; State[1] = 1; count[1] = 2; // 打印选择界面 int choose = 0; do { System.out.println("欢迎使用迷你DVD管理系统"); System.out.println("------------------------------"); System.out.println("1.新增DVD"); System.out.println("2.查看DVD"); System.out.println("3.删除DVD"); System.out.println("4.借出DVD"); System.out.println("5.归还DVD"); System.out.println("6.退出DVD"); System.out.println("------------------------------"); System.out.println("请选择:"); int num = sc.nextInt(); switch (num) { case 1: System.out.println("-->新增DVD"); // 增加DVD的方法 System.out.println("请输入DVD的名称:"); String name = sc.next(); // if (Name[5] != null) { System.out.println("已经满了"); System.out.print("新增《" + name + "》失败!"); break; } for (int i = 0; i < Name.length; i++) { if (Name[i] == null) { Name[i] = name; State[i] = 1; count[i] = 0; System.out.print("新增《" + Name[i] + "》成功!"); System.out.println(); break; } } System.out. 138c9 println("*****************************"); break; case 2: System.out.println("-->查看DVD"); // 遍历,查看 for (int i = 0; Name[i] != null; i++) { if (State[i] == 0) {// 已借出 System.out.print("第" + (i + 1) + "个DVD的名字是:" + Name[i] + ","); System.out.print("状态是" + "已借出" + ","); System.out.print("借出日期是" + days[i] + ","); System.out.println("借出次数是" + count[i]); } else if (State[i] == 1) { System.out.print("第" + (i + 1) + "个DVD的名字是:" + Name[i] + ","); System.out.print("状态是" + "可借" + ","); System.out.print("借出日期是" + "null" + ","); System.out.println("借出次数是" + count[i]); } } System.out.println("*****************************"); break; case 3: System.out.println("-->删除DVD"); // 删除的方法 System.out.println("请输入要删除的DVD名称:"); name = sc.next(); boolean flag = false; // 三种情况 /** * 1、数组中没有此DVD,无法删除 2、数组中有此DVD,但是状态是借出,无法完成删除操作 * 3.数组中有此DVD,可以删除,使用数组的删除方法。 */ for (int i = 0; i < Name.length; i++) { if (name.equals(Name[i]) && State[i] == 1) { // 第3种情况,可删除。 for (int j = i; j < Name.length - 1; j++) { Name[j] = Name[j + 1]; State[j] = State[j + 1]; days[j] = days[j + 1]; count[j] = count[j + 1]; } Name[Name.length - 1] = null; State[Name.length - 1] = 0; days[Name.length - 1] = 0; count[Name.length - 1] = 0; System.out.println("删除成功!本DVD已经被删除。"); flag = true; break; } else if (name.equals(Name[i]) && State[i] == 0) { // 第2种情况,无法完成删除操作。 System.out.println("本DVD已经被借出,无法完成删除操作!"); flag = true; } } if (!flag) { // 第三种情况,店中无此DVD。 System.out.println("本店无此DVD信息"); break; } System.out.println("*****************************"); break; case 4: System.out.println("-->借出DVD"); // 借出的方法 System.out.println("请输入要借出的DVD名称:"); name = sc.next(); for (int i = 0; i < Name.length; i++) { if (Name[i] == null) { // 没有找到信息 System.out.println("本店无此DVD信息"); break; } else if (name.equals(Name[i]) && State[i] == 1) { // 本店的此DVD没有被借出,可以借。 State[i] = 0; System.out.println("请输入借出日期:"); days[i] = sc.nextInt(); while (days[i] < 1 || days[i] > 30) { System.out.println("重新输入借出时间(1-30)"); days[i] = sc.nextInt(); } System.out.println("借出成功,此DVD已经被借,请爱护它!"); count[i]++; break; } else if (name.equals(Name[i]) && State[i] == 0) { // System.out.println("此DVD已经被借出了!"); break; } } System.out.println("*****************************"); break; case 5: System.out.println("-->归还DVD"); // 归还的方法 System.out.println("请输入要归还的DVD名称:"); name = sc.next(); for (int i = 0; i < Name.length; i++) { if (Name[i] == null) { // 没有找到信息 System.out.println("本店无此DVD信息"); break; } else if (name.equals(Name[i]) && State[i] == 1) { // 没借出,不能还 System.out.println("没借出此DVD,无法完成归还!"); break; } else if (name.equals(Name[i]) && State[i] == 0) { // 可以还 State[i] = 1; System.out.println("输入归还日期:"); int backDay = sc.nextInt(); while (backDay < days[i] || backDay > 30) { if (backDay < days[i]) { System.out.println("归还日期不能小于借出日期!请重新输入!"); } else { System.out.println("归还日期不能大于30!请重新输入!"); } backDay = sc.nextInt(); } System.out.println("归还《" + name + "》成功!"); System.out.println("借出时间:" + days[i] + "天"); System.out.println("归还时间:" + backDay + "天"); System.out.println("应付租金" + (backDay - days[i]) * 2 + "元"); break; } } break; case 6: System.out.println("-->已退出"); System.out.println("谢谢使用!"); System.exit(0);// 参数为0,是正常情况下的强制退出,还可以是其他数字(异常情况)。 // 或者: choose=1; break; default: System.out.println("错误"); choose = 1;// 改变 do-while 循环条件 break; } System.out.println("输入 0 返回!"); int back = sc.nextInt(); if (back != 0) { System.out.println("输入错误"); choose = 1;// 错误时,退出循环 } } while (choose == 0); System.out.println("-->已退出"); System.out.println("谢谢使用!"); } }
可以看出,除了输入输出语句,其他的代码与C语言无二。
程序运行的部分结果图:
另附优化:升级版。就是简单的把这些实现好的代码块放到不同的方法体中,然后再调用这些方法。基本代码是没有多少变化的。而且因为输出界面是没有变化的,所以优化过的代码执行的结果截图就和之前是一样的。不同的是,要建2个类,面向对象麻烦点就是一个方法一个类,然后你会发现自己一个简单的系统写完了,有7、8个类,看着就烦,我这里是把方法都放在一个类中了,另一个测试类就只负责实例化那个例的对象,之后调用就行。
附录
package DVD; import java.util.Scanner; public class Operation { Scanner sc = new Scanner(System.in); String[] Name;// 名字 int[] State;// 状态,0表示无书可借。 int[] days;// 借出的日期 int[] count;// 借出的次数 public void init() { Name = new String[6];// 名字 State = new int[6];// 状态,0表示无书可借 days = new int[6];// 借出的日期 count = new int[6];// 借出的次数 // 初始2个DVD Name[0] = "天下第一"; State[0] = 0; days[0] = 4; count[0] = 1; Name[1] = "武林"; State[1] = 1; count[1] = 2; } public void select() { for (int i = 0; Name[i] != null; i++) { if (State[i] == 0) {// 已借出 System.out.print("第" + (i + 1) + "个DVD的名字是:" + Name[i] + ","); System.out.print("状态是" + "已借出" + ","); System.out.print("借出日期是" + days[i] + ","); System.out.println("借出次数是" + count[i]); } else if (State[i] == 1) { System.out.print("第" + (i + 1) + "个DVD的名字是:" + Name[i] + ","); System.out.print("状态是" + "可借" + ","); System.out.print("借出日期是" + "null" + ","); System.out.println("借出次数是" + count[i]); } } } public void add() { System.out.println("请输入DVD的名称:"); String name = sc.next(); // if (Name[5] != null) { System.out.println("已经满了"); System.out.print("新增《" + name + "》失败!"); return; } for (int i = 0; i < Name.length; i++) { if (Name[i] == null) { Name[i] = name; State[i] = 1; count[i] = 0; System.out.print("新增《" + Name[i] + "》成功!"); System.out.println(); break; } } } public void remove() { System.out.println("请输入要删除的DVD名称:"); String name = sc.next(); boolean flag = false; // 三种情况 /** * 1、数组中没有此DVD,无法删除 2、数组中有此DVD,但是状态是借出,无法完成删除操作 * 3.数组中有此DVD,可以删除,使用数组的删除方法。 */ for (int i = 0; i < Name.length; i++) { if (name.equals(Name[i]) && State[i] == 1) { // 第3种情况,可删除。 for (int j = i; j < Name.length - 1; j++) { Name[j] = Name[j + 1]; State[j] = State[j + 1]; days[j] = days[j + 1]; count[j] = count[j + 1]; } Name[Name.length - 1] = null; State[Name.length - 1] = 0; days[Name.length - 1] = 0; count[Name.length - 1] = 0; System.out.println("删除成功!本DVD已经被删除。"); flag = true; break; } else if (name.equals(Name[i]) && State[i] == 0) { // 第2种情况,无法完成删除操作。 System.out.println("本DVD已经被借出,无法完成删除操作!"); flag = true; } } if (!flag) { // 第三种情况,店中无此DVD。 System.out.println("本店无此DVD信息"); return; } } public void send() { System.out.println("请输入要借出的DVD名称:"); for (int i = 0; i < Name.length; i++) { if (Name[i] == null) { // 没有找到信息 System.out.println("本店无此DVD信息"); break; } else if (sc.next().equals(Name[i]) && State[i] == 1) { // 本店的此DVD没有被借出,可以借。 State[i] = 0; System.out.println("请输入借出日期:"); days[i] = sc.nextInt(); while (days[i] < 1 || days[i] > 30) { System.out.println("重新输入借出时间(1-30)"); days[i] = sc.nextInt(); } System.out.println("借出成功,此DVD已经被借,请爱护它!"); count[i]++; break; } else if (sc.next().equals(Name[i]) && State[i] == 0) { // System.out.println("此DVD已经被借出了!"); break; } } } public void reback() { System.out.println("请输入要归还的DVD名称:"); for (int i = 0; i < Name.length; i++) { if (Name[i] == null) { // 没有找到信息 System.out.println("本店无此DVD信息"); break; } else if (sc.next().equals(Name[i]) && State[i] == 1) { // 没借出,不能还 System.out.println("没借出此DVD,无法完成归还!"); break; } else if (sc.next().equals(Name[i]) && State[i] == 0) { // 可以还 State[i] = 1; System.out.println("输入归还日期:"); int backDay = sc.nextInt(); while (backDay < days[i] || backDay > 30) { if (backDay < days[i]) { System.out.println("归还日期不能小于借出日期!请重新输入!"); } else { System.out.println("归还日期不能大于30!请重新输入!"); } backDay = sc.nextInt(); } System.out.println("归还《" + sc.next() + "》成功!"); System.out.println("借出时间:" + days[i] + "天"); System.out.println("归还时间:" + backDay + "天"); System.out.println("应付租金" + (backDay - days[i]) * 2 + "元"); break; } } } public void exit() { System.out.println("-->已退出"); System.out.println("谢谢使用!"); System.exit(0);// 参数为0,是正常情况下的强制退出,还可以是其他数字(异常情况)。 // 或者: choose=1; } public void show() { System.out.println("欢迎使用迷你DVD管理系统"); System.out.println("------------------------------"); System.out.println("1.新增DVD"); System.out.println("2.查看DVD"); System.out.println("3.删除DVD"); System.out.println("4.借出DVD"); System.out.println("5.归还DVD"); System.out.println("6.退出DVD"); System.out.println("------------------------------"); System.out.println("请选择:"); } public void showSelect() { int choose = 0; do { show(); switch (sc.nextInt()) { case 1: System.out.println("-->新增DVD"); // 增加DVD的方法 add(); System.out.println("*****************************"); break; case 2: System.out.println("-->查看DVD"); // 遍历,查看 select(); System.out.println("*****************************"); break; case 3: System.out.println("-->删除DVD"); // 删除的方法 remove(); System.out.println("*****************************"); break; case 4: System.out.println("-->借出DVD"); // 借出的方法 send(); System.out.println("*****************************"); break; case 5: System.out.println("-->归还DVD"); // 归还的方法 reback(); System.out.println("*****************************"); break; case 6: exit(); break; default: System.out.println("错误"); choose = 1;// 改变 do-while 循环条件 break; } System.out.println("输入 0 返回!"); int back = sc.nextInt(); if (back != 0) { System.out.println("输入错误"); choose = 1;// 错误时,退出循环 } } while (choose == 0); exit(); } }
测试类
package DVD; /** * 测试类,用来调用Operation 中的方法。 * @author Feng * 2018年1月23日上午9:56:02 */ public class TestDVD { public static void main(String[] args) { Operation op = new Operation(); // TODO 自动生成的方法存根 op.init(); op.showSelect(); } }
以上就是我的对DVD 管理的认识了,主要是可以练习数组的使用。
相关文章推荐
- ssm框架创建简单的DVD管理系统(五)页面的实现同时完成controller层
- ssm框架创建简单的DVD管理系统(三)bootstrap的导入和web.xml及spring mvc配置
- SpringMVC(13):使用springmvc优化订单管理系统的示例(登陆和注销的简单实现)
- ssm框架创建简单的DVD管理系统(四)spring的配置与mybatis的配置
- ssm框架创建简单的DVD管理系统(一)项目简介
- Java SE 中swing的简单实例 ( swing实现简单学生管理系统的登录界面)
- java SE 简单的学生信息管理系统
- 简单的车票管理系统
- Log4j日志管理系统简单使用说明
- 基于SSH框架-CRM客户资源管理系统-简单小项目开发记录-CRM系统-03
- 需要复习的:FFmpeg源代码简单分析:结构体成员管理系统-AVClass
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— Angularjs 前端主体结构(五)
- Unity 实现简单的关卡管理系统
- 简易客房管理系统(C++)
- 简易银行管理系统(XML)
- C语言链表实现的简易学生成绩管理系统
- 简单实现了一个学生成绩信息管理系统
- 用python编写简易名片管理系统(增删改查)
- 基于node+koa2+mongodb实现简单的导航管理系统
- 最简易的权限管理模型 和 标准权限管理模块 和 复杂权限系统