5、判断、循环、数组综合练习案例(迷你DVD)

迷你dvd代码如下:

  1 package com.manager;
  2
  3 import java.util.Scanner;
  4
  5 public class DVDManage {
  6     public static void main(String[] args) {
  7         Scanner input=new Scanner(System.in);
  8
  9         //1.定义dvd相关数组
 10         String[] name=new String[6]; //DVD名称
 11         int[] state=new int[6]; //状态 ,0借出,    1未借
 12         int[] days=new int[6]; //借出日期(1-31) 31不能借阅,(当月借当月还)
 13         int[] count=new int[6]; //借出次数
 14
 15         //2.初始化操作给数组赋值(3个)...
 16         //2.1 第一个dvd初始化
 17          name[0]="罗马假日";
 18         state[0]=0;
 19          days[0]=1;
 20         count[0]=15;
 21
 22         //2.2 第2个dvd初始化
 23          name[1]="西游记";
 24         state[1]=1;
 25         count[1]=15;
 26
 27         //2.3 第3个dvd初始化
 28          name[2]="浪漫满屋";
 29         state[2]=1;
 30         count[2]=30;
 31
 32         //3.控制菜单循环变量初始化
 33         boolean isMenu=false;
 34         do{
 35             System.out.println("欢迎使用迷你DVD管理器");
 36             System.out.println("----------------------");
 37             System.out.println("1.新增DVD");
 38             System.out.println("2.查看DVD");
 39             System.out.println("3.删除DVD");
 40             System.out.println("4.借出DVD");
 41             System.out.println("5.归还DVD");
 42             System.out.println("6.退出DVD");
 43             System.out.println("----------------------");
 44             System.out.print("请选择:");
 45             int menuNum=input.nextInt();
 46             switch(menuNum){
 47             case 1:
 48                 //1.1 新增,给数组赋值
 49                 System.out.println("-->新增DVD");
 50                 System.out.print("请输入DVD名称:");
 51                 String dvdName=input.next();
 52
 53                 //1.2.定义判断dvd是否已经加满货架的标识符变量(false没有)
 54                 boolean flag1=false;
 55
 56                 //1.3.循环数组找到第一个空位置进行添加
 57                 for (int i = 0; i < name.length; i++) {
 58                     //1.3.1找到要添加的空位置
 59                     if(name[i]==null){
 60                         name[i]=dvdName;
 61                         System.out.println("新增《"+dvdName+"》成功!");
 62                         flag1=true; //该空间已经添加dvd
 63                         break;
 64                     }
 65                 }
 66
 67                 //1.4.判断货架是否已满
 68                 if(!flag1){
 69                     System.out.println("抱歉,新增《"+dvdName+"》失败!货架已满!");
 70                 }
 71                 System.out.println("******************************************");
 72                 break;
 73             case 2:
 74                 //2.1 查看(循环)
 75                 System.out.println("-->查看DVD");
 76                 System.out.println("序号\t状态\t名称\t借出日期\t借出次数");
 77
 78                 //2.2 循环打印dvd信息
 79                 for (int i = 0; i < name.length; i++) {
 80                     //2.2.1 只打印有内容的dvd盒子信息,不打印空dvd盒子内容
 81                     if(name[i]!=null){
 82                         //2.2.1.1 定义是否可借出的标识符变量
 83                         String dvdState=(state[i]==1?"可借阅":"已借出");
 84
 85                         //2.2.1.2 定义可以借阅多少天的标识符变量
 86                         String dvdDays=(days[i]==0?"":(days[i]+"号"));
 87
 88                         //2.2.1.3 打印DVD信息
 89                         System.out.println((i+1)+"\t"+dvdState+"\t"
 90                          +name[i]+"\t"+dvdDays+"\t"+count[i]+"次数");
 91                     }
 92                 }
 93                 break;
 94             case 3:
 95                 //3.1删除(移位)
 96                 System.out.println("-->删除DVD");
 97                 System.out.print("请输入要删除的DVD名字:");
 98                 String delete=input.next();
 99
100                 //3.2定义是否根据控制台输入的名字找到匹配项的标识符变量,默认没找到
101                 boolean flag=false;
102
103                 //3.3定义要删除DVD的位置
104                 int index=-1;
105
106                 //3.4循环找到删除的位置
107                 for (int i = 0; i < name.length; i++) {
108                     if(name[i]!=null && delete.equals(name[i]) && state[i]==1){
109                         flag=true; //根据名字找到匹配DVD
110                         index=i; //找到删除的位置
111                         System.out.println("DVD删除成功!");
112                         break;
113                     }else if(name[i]!=null && delete.equals(name[i]) && state[i]==0){
114                         flag=true;//根据名字找到匹配DVD
115                         System.out.println("该DVD已被借出,目前无法删除!");
116                         break;
117                     }
118                 }
119
120                 //3.5根据找到的位置删除
121                 if(index!=-1){
122                     //循环将删除位置之后的所有元素前移一位
123                     for (int j = index; j < name.length; j++) {
124                         //如果删除的是最后一个索引位置则元素不进行移动
125                         if(j!=name.length-1){
126                             name[j]=name[j+1];
127                             state[j]=state[j+1];
128                             days[j]=days[j+1];
129                         }
130                         //如果删除的是最后一位,则将最有一位置空null
131                         name[name.length-1]=null;
132                     }
133                 }
134                 //3.6 没有找到匹配的DVD名字项
135                 if(!flag){
136                     System.out.println("没有根据名字找到匹配的DVD信息!!");
137                 }
138                 System.out.println("******************************************");
139                 break;
140             case 4:
141                 //借出(改变dvd的状态0)
142                 System.out.println("-->借出DVD");
143                 System.out.print("请输入DVD名称:");
144                 String want=input.next();
145
146                 //循环判断要借阅的DVD是否存在
147                 for (int i = 0; i < name.length; i++) {
148                     if(name[i]==null){
149                         System.out.println("没有找到匹配的DVD信息!!");
150                     }else if(want.equals(name[i]) && state[i]==1){
151                         //找到匹配可借
152                         //改变DVD借阅状态为已借阅
153                         state[i]=0;
154                         System.out.print("请输入要借阅的日期:");
155                         days[i]=input.nextInt();
156
157                         //循环判断用户输入的借阅天数,只能借阅1-31天,r
158                         //如果不满足条件则让用户循环输入天数直到正确为止
159                         while(days[i]<1 || days[i]>31){
160                             System.out.print("必须输入大于等于1且小于等于31的数字,请重新输入:");
161                             days[i]=input.nextInt();
162                         }
163
164                         System.out.println("借出《"+want+"》成功!");
165
166                         //借出次数累加
167                         count[i]++;
168                         break;
169                     }else if(want.equals(name[i]) && state[i]==0){
170                         //找到匹配已被借出
171                         System.out.println("《"+want+"》已被借出!");
172                         break;
173                     }
174                 }
175                 System.out.println("******************************************");
176                 break;
177             case 5:
178                 //归还(改变dvd的状态1)
179                 System.out.println("-->归还DVD");
180                 //定义借阅租金
181                 int charge=0;
182                 System.out.print("请输入DVD的名称:");
183                 want=input.next();
184                 for (int i = 0; i < name.length; i++) {
185                     if(name[i]==null){
186                         System.out.println("没有找到DVD匹配数据!");
187                     }else if(want.equals(name[i]) && state[i]==0){
188                         state[i]=1;
189                         System.out.print("请输入归还时日期:");
190                         int redate =input.nextInt();
191                         //循环判断归还日期不能小于借出日期,也不能大于31,否则重新输入
192                         while(redate<days[i] || redate>31){
193
194                             if(redate<days[i]){
195                                 System.out.print("归还日期不能小于借出日期,请重新输入:");
196                             }else{
197                                 System.out.print("一个月只能有31天,请重新输入:");
198                             }
199                             //循环输入正确归还日期(1-31)
200                             redate=input.nextInt();
201                         }
202                         //计算出借阅的租金
203                         charge=redate-days[i];
204                         System.out.print("归还《"+want+"》成功!");
205                         System.out.print("借出的日期为:"+days[i]+"号");
206                         System.out.println("归还日期为:"+redate+"号");
207                         System.out.println("应付租金(元):"+charge);
208                         //归还后借阅的日期清零
209                         days[i]=0;
210                         break;
211                     }else if(want.equals(name[i]) && state[i]==1){
212                         //找到匹配项但是没借出
213                         System.out.println("该《"+want+"》DVD没有被借出!无法进行归还操作!");
214                         break;
215                     }
216                 }
217                 System.out.println("******************************************");
218                 break;
219             case 6:
220                 //退出(系统退出)
221                 System.exit(1);
222                 break;
223             default:
224                 System.out.println("菜单数字选择错误!!");
225             }
226
227            //改变do-while循环条件
228           System.out.print("输入0返回:");
229           int num=input.nextInt();
230           if(num==0){
231               isMenu=true;
232           }else{
233               System.out.println("菜单编号输入错误!!");
234           }
235         }while(isMenu);
236
237
238     }
239
240 }
时间: 2024-09-29 05:39:19

5、判断、循环、数组综合练习案例(迷你DVD)的相关文章

Smarty教程1.引擎定义2.主要优点3.简明教程4.使用判断5.循环数组6.常见问题8.解释程序

Smarty是一个php模板引擎.更准确的说,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法.可以描述为应用程序员和美工扮演了不同的角色,因为在大多数情况下 ,他们不可能是同一个人.例如,你正在创建一个用于浏览新闻的网页,新闻标题,标签栏,作者和内容等都是内容要素,他们并不包含应该怎样去呈现.在Smarty的程序里,这些被忽略了.模板设计者们编辑模板,组合使用html标签和模板标签去格式化这些要素的输出(html表格,背景色,字体大小,样式表,等等).有一天程序员想要改变文章检索的方式(

C语言——结构体数组的使用案例(如何判断两个矩形是否相交,其中一个是否包含在另外一个里面,点是否在矩形中)

Rect.h struct CPoint { float x; float y; }; typedef struct CPoint CPoint; struct CSize { float width; float height; }; typedef struct CSize CSize; struct CRect { CPoint origin; CSize size; }; typedef struct CRect CRect; //判断两个矩形是否相交 BOOL isIntersecti

基于循环数组的无锁队列

在之前的两篇博客(线程安全的无锁RingBuffer的实现,多个写线程一个读线程的无锁队列实现)中,分别写了在只有一个读线程.一个写线程的情况下,以及只有一个写线程.两个读线程的情况下,不采用加锁技术,甚至原子运算的循环队列的实现.但是,在其他的情况下,我们也需要尽可能高效的线程安全的队列的实现.本文实现了一种基于循环数组和原子运算的无锁队列.采用原子运算(compare and swap)而不是加锁同步,可以很大的提高运行效率.之所以用循环数组,是因为这样在使用过程中不需要反复开辟内存空间,可

【队列】基于循环数组的实现

Description 请完成以下队列类的实现:(请注意数组实现应该为循环数组) enum ErrorCode { success, underflow, overflow }; const int maxQueue = 100; template <class QueueEntry> class MyQueue { public: MyQueue(); bool empty() const;  // 判断队列是否为空 ErrorCode append(const QueueEntry &am

循环数组查找一个数

网上看了有些代码有些错误,这里重新更正了下 思想:循环数组有一边是有序的,首先先判断哪一边有序(通过将当前mid点与最左边节点比较),然后查看是否在有序边上 代码如下 #include<iostream> #include<assert.h> using namespace std; int Binary_Search(int *a,int low,int high,int value) { int mid=(low+high)/2; if(a[mid] == value) ret

angular js 综合笔记案例

AngularJS 表达式  (1.{{}}   2.ng-bind(单项绑定)) AngularJS 表达式写在双大括号内:{{ expression }} AngularJS 使用表达式把数据绑定到 HTML,这与 ng-bind 指令有异曲同工之妙. AngularJS 将在表达式书写的位置"输出"数据. AngularJS 表达式 很像 JavaScript 表达式:它们可以包含文字.运算符和变量. 表达式{{}} 案例 ng-init 初始化数据一般会用ng-controll

Python 循环的综合应用

# 循环综合应用1. # str = "hello,world" 把字符串给反转显示 str = "hello,world" temp = "" for c in str: temp = c + temp else: print("字符串反转完毕:",temp) # 循环综合应用2 # 打印1..100之间的偶数 # 通过while num = 2 while num <= 100: print(num) num +=

区间型动态规划的记忆化搜索实现与环形动态规划的循环数组实现

区间型动态规划的典型例题是石子归并,同时使用记忆化搜索实现区间动归是一种比较容易实现的方式,避免了循环数组实现的时候一些边界的判断 n堆石子排列成一条线,我们可以将相邻的两堆石子进行合并,合并之后需要消耗的代价为这两堆石子的质量之和,问最小的合并代价 状态转移方程很容易给出: f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+sum[i][j]) 因为要计算区间和,考虑前缀和进行预处理 然后我们给出用记忆化搜索形式实现的代码,这里的记忆化搜索形式可以作为后续问题的一个模

delphi 判断一个数组的长度用 Length 还是 SizeOf ?

判断一个数组的长度用 Length 还是 SizeOf ?最近发现一些代码, 甚至有一些专家代码, 在遍历数组时所用的数组长度竟然是 SizeOf(arr); 这不合适! 如果是一维数组.且元素大小是一个字节, 这样用看不出错误, 譬如:  -------------------------------------------------------------------------------- vararr1: array[0..9] of Char;arr2: array[0..9] o