您的位置:首页 > 编程语言 > Java开发

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的死循环。这里再提一下:最简单的死循环有

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 管理的认识了,主要是可以练习数组的使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息