5、判断、循环、数组综合练习案例(迷你DVD)
迷你dvd代码如下:
package com.manager;
import java.util.Scanner;
public class DVDManage {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
//1.定义dvd相关数组
String[] name=new String[6]; //DVD名称
int[] state=new int[6]; //状态 ,0借出, 1未借
int[] days=new int[6]; //借出日期(1-31) 31不能借阅,(当月借当月还)
int[] count=new int[6]; //借出次数
//2.初始化操作给数组赋值(3个)...
//2.1 第一个dvd初始化
name[0]="罗马假日";
state[0]=0;
days[0]=1;
count[0]=15;
//2.2 第2个dvd初始化
name[1]="西游记";
state[1]=1;
count[1]=15;
//2.3 第3个dvd初始化
name[2]="浪漫满屋";
state[2]=1;
count[2]=30;
//3.控制菜单循环变量初始化
boolean isMenu=false;
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.print("请选择:");
int menuNum=input.nextInt();
switch(menuNum){
case 1:
//1.1 新增,给数组赋值
System.out.println("-->新增DVD");
System.out.print("请输入DVD名称:");
String dvdName=input.next();
//1.2.定义判断dvd是否已经加满货架的标识符变量(false没有)
boolean flag1=false;
//1.3.循环数组找到第一个空位置进行添加
for (int i = 0; i < name.length; i++) {
//1.3.1找到要添加的空位置
if(name[i]==null){
name[i]=dvdName;
System.out.println("新增《"+dvdName+"》成功!");
flag1=true; //该空间已经添加dvd
break;
}
}
//1.4.判断货架是否已满
if(!flag1){
System.out.println("抱歉,新增《"+dvdName+"》失败!货架已满!");
}
System.out.println("******************************************");
break;
case 2:
//2.1 查看(循环)
System.out.println("-->查看DVD");
System.out.println("序号\t状态\t名称\t借出日期\t借出次数");
//2.2 循环打印dvd信息
for (int i = 0; i < name.length; i++) {
//2.2.1 只打印有内容的dvd盒子信息,不打印空dvd盒子内容
if(name[i]!=null){
//2.2.1.1 定义是否可借出的标识符变量
String dvdState=(state[i]==1?"可借阅":"已借出");
//2.2.1.2 定义可以借阅多少天的标识符变量
String dvdDays=(days[i]==0?"":(days[i]+"号"));
//2.2.1.3 打印DVD信息
System.out.println((i+1)+"\t"+dvdState+"\t"
+name[i]+"\t"+dvdDays+"\t"+count[i]+"次数");
}
}
break;
case 3:
//3.1删除(移位)
System.out.println("-->删除DVD");
System.out.print("请输入要删除的DVD名字:");
String delete=input.next();
//3.2定义是否根据控制台输入的名字找到匹配项的标识符变量,默认没找到
boolean flag=false;
//3.3定义要删除DVD的位置
int index=-1;
//3.4循环找到删除的位置
for (int i = 0; i < name.length; i++) {
if(name[i]!=null && delete.equals(name[i]) && state[i]==1){
flag=true; //根据名字找到匹配DVD
index=i; //找到删除的位置
System.out.println("DVD删除成功!");
break;
}else if(name[i]!=null && delete.equals(name[i]) && state[i]==0){
flag=true;//根据名字找到匹配DVD
System.out.println("该DVD已被借出,目前无法删除!");
break;
}
}
//3.5根据找到的位置删除
if(index!=-1){
//循环将删除位置之后的所有元素前移一位
for (int j = index; j < name.length; j++) {
//如果删除的是最后一个索引位置则元素不进行移动
if(j!=name.length-1){
name[j]=name[j+1];
state[j]=state[j+1];
days[j]=days[j+1];
}
//如果删除的是最后一位,则将最有一位置空null
name[name.length-1]=null;
}
}
//3.6 没有找到匹配的DVD名字项
if(!flag){
System.out.println("没有根据名字找到匹配的DVD信息!!");
}
System.out.println("******************************************");
break;
case 4:
//借出(改变dvd的状态0)
System.out.println("-->借出DVD");
System.out.print("请输入DVD名称:");
String want=input.next();
//循环判断要借阅的DVD是否存在
for (int i = 0; i < name.length; i++) {
if(name[i]==null){
System.out.println("没有找到匹配的DVD信息!!");
}else if(want.equals(name[i]) && state[i]==1){
//找到匹配可借
//改变DVD借阅状态为已借阅
state[i]=0;
System.out.print("请输入要借阅的日期:");
days[i]=input.nextInt();
//循环判断用户输入的借阅天数,只能借阅1-31天,r
//如果不满足条件则让用户循环输入天数直到正确为止
while(days[i]<1 || days[i]>31){
System.out.print("必须输入大于等于1且小于等于31的数字,请重新输入:");
days[i]=input.nextInt();
}
System.out.println("借出《"+want+"》成功!");
//借出次数累加
count[i]++;
break;
}else if(want.equals(name[i]) && state[i]==0){
//找到匹配已被借出
System.out.println("《"+want+"》已被借出!");
break;
}
}
System.out.println("******************************************");
break;
case 5:
//归还(改变dvd的状态1)
System.out.println("-->归还DVD");
//定义借阅租金
int charge=0;
System.out.print("请输入DVD的名称:");
want=input.next();
for (int i = 0; i < name.length; i++) {
if(name[i]==null){
System.out.println("没有找到DVD匹配数据!");
}else if(want.equals(name[i]) && state[i]==0){
state[i]=1;
System.out.print("请输入归还时日期:");
int redate =input.nextInt();
//循环判断归还日期不能小于借出日期,也不能大于31,否则重新输入
while(redate<days[i] || redate>31){
if(redate<days[i]){
System.out.print("归还日期不能小于借出日期,请重新输入:");
}else{
System.out.print("一个月只能有31天,请重新输入:");
}
//循环输入正确归还日期(1-31)
redate=input.nextInt();
}
//计算出借阅的租金
charge=redate-days[i];
System.out.print("归还《"+want+"》成功!");
System.out.print("借出的日期为:"+days[i]+"号");
System.out.println("归还日期为:"+redate+"号");
System.out.println("应付租金(元):"+charge);
//归还后借阅的日期清零
days[i]=0;
break;
}else if(want.equals(name[i]) && state[i]==1){
//找到匹配项但是没借出
System.out.println("该《"+want+"》DVD没有被借出!无法进行归还操作!");
break;
}
}
System.out.println("******************************************");
break;
case 6:
//退出(系统退出)
System.exit(1);
break;
default:
System.out.println("菜单数字选择错误!!");
}
//改变do-while循环条件
System.out.print("输入0返回:");
int num=input.nextInt();
if(num==0){
isMenu=true;
}else{
System.out.println("菜单编号输入错误!!");
}
}while(isMenu);
}
}
5、判断、循环、数组综合练习案例(迷你DVD)的更多相关文章
- 深入理解循环队列----循环数组实现ArrayDeque
我们知道队列这种数据结构的物理实现方式主要还是两种,一种是链队列(自定义节点类),另一种则是使用数组实现,两者各有优势.此处我们将要介绍的循环队列其实是队列的一种具体实现,由于一般的数组实现的队列结构 ...
- JS基础-分支结构-循环-数组
1.分支结构 1.if结构 语法: if(条件){ 语句块: } 注意: 1.条件尽量是boolean的,如果不是boolean的,以下条件值,会当做f ...
- C#实现如何判断一个数组中是否有重复的元素
如何判断一个数组中是否有重复的元素 实现判断数组中是否包含有重复的元素方法 这里用C#代码给出实例 方法一:可以新建一个hashtable利用hashtable的Contains方法进行查找 /// ...
- 判断js数组/对象是否为空
/** * 判断js数组/对象是否为空 * isPrototypeOf() 验证一个对象是否存在于另一个对象的原型链上.即判断 Object 是否存在于 $obj 的原型链上.js中一切皆对象,也就是 ...
- [转]php判断一个数组是另一个数组的子集
FROM : http://blog.csdn.net/lcion/article/details/8985220 今天完成一个算法的过程中,有几个需求模块,其中就有判断$a数组是否是$b数组的子集, ...
- php判断一个数组是另一个数组的子集
需求最少的时间复杂度判断$a数组是否是$b数组的子集 // 快速的判断$a数组是否是$b数组的子集$a = array(135,138);$b = array(135,138,137); 实现方法 这 ...
- Python 类的三大特性的综合运用 案例
# --------------------- 类的三大特性的综合运用 案例 ------------------------- # 定义三个类:小狗,小猫,人 # 小狗:姓名,年龄(默认1岁) 吃饭 ...
- Python 循环的综合应用
# 循环综合应用1. # str = "hello,world" 把字符串给反转显示 str = "hello,world" temp = "&quo ...
- C#实现如何判断一个数组中是否有重复的元素 返回一个数组升序排列后的位置信息--C#程序举例 求生欲很强的数据库 别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework
C#实现如何判断一个数组中是否有重复的元素 如何判断一个数组中是否有重复的元素 实现判断数组中是否包含有重复的元素方法 这里用C#代码给出实例 方法一:可以新建一个hashtable利用hasht ...
随机推荐
- SSH 一些错误的解决办法
1.主动访问的机器需要创建私钥和公钥 (client) #cd ~#mkdir .ssh#chmod 700 .ssh#cd .ssh#ssh-keygen -t rsa //一路回车,各种提示按默认 ...
- typeJavaScript笔记----字符串,参数,函数,表达式,循环
一.字符串新特性--双丿(撇)号声明字符串 .多行字符串 var myName = `fang my hao li jsk c sdf` //这样不会报错. .字符串模板 console.log(`q ...
- Egret 显示容器
1,显示容器:所有的容器都继承自DisplayObjectContainer , DisplayObjectContainer 又继承自DisplayObject: 2,想定义一个容器只要创建一个类, ...
- Git提交到多个远程仓库
在已经习惯使用git同步写代码,github无疑是最的托管平台,但是国内由于"你懂的"原因,速度很慢,有时无法访问,于是想把自己的代码同步到多个不同的远程仓库备份. 我的主要仓库: ...
- Chapter 21_4 捕获
捕获功能在很多地方都在使用,就是从目标字符串中抽出匹配于该模式的内容,在指定捕获时,应将模式中需要捕获的部分写到一对圆括号内. 对于具有捕获的模式,函数match会将所有捕获到的值作为单独的结果返回. ...
- Python3 md5加密
import hashlibuser = 'jointwisdom'pwd = 'zhonghui123'm2 = hashlib.md5()m2.update(pwd.encode("ut ...
- javascriptDOM对象之scrollTo()方法,滚动到页面指定位置
scrollTo是一个神奇的方法,常用于篇幅过长的页面,制作一个回顶部的按钮,我这里简单的实现以下 当然没有一个过渡的js效果 scrollTo(xpos,ypos) 参数 描述 xpos 必需.要在 ...
- box-sizing的不同属性值间的区别
box-sizing:值为 border-box时,其含义为:表示元素的宽度与高度包括内部补白区域(指border和padding)与边框的宽度与高度:值为content-box时,其含义正其前者相反 ...
- ActiveMQ in Action(7) - Wildcards
关键字: activemq 2.6.7 Wildcards Wildcards用来支持联合的名字分层体系(federated name hierarchies).它不是JMS规范的一部分,而是A ...
- c++中宽字节表示
1.C++语言中_T Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候 ...