需求:
前4章的一个总结性练习
为某音像店开发一个迷你DVD管理器,最多可存6张DVD,实现碟片的管理。迷你DVD管理器具备的功能主要包括以下内容
输入相对应的数字,进入相对应的操作
分析:
1、查看DVD信息,有几个字段,每个字段定义6位的数组,我们需要定义 状态、名称、借出日期 这3个数组,目前掌握的知识,就是一一对应的关系
2、每一次都会有一个菜单,不管符不符合条件都有一个菜单,首先想到do{}while();
3、、输入的固定数据,代表1个操作,那么我们想到switch(){case}
4、、case 1:新增:
找出能加进去的数组下标位置:定义了数组长度是6,但我们初始化数据的时候,可以先初始化3个位置,那么为空的位置,就是要增加的
当为空的填满了后,是要告诉用户,数组已满,不能再添加了
同样的,添加名称后,要把状态、借出日期 都要赋值为 未借阅 日期留空
5、case2:查看:
遍历数组,遍历这3个数组,这里要注意的是没借过的日期要为空,不能输入0,
本来数组中有3个的,如果新增,那就有多个,这个循环次数要加个判断 if(names[i]==null)的时候就直接退出循环
.......
代码如下:
这个代码有一些问题:
import java.util.Scanner; /** * @author Administrator *初始化数据 *新增 */ public class MyDVDMgr { public static void main(String[] args) { Scanner input=new Scanner(System.in); //DVD名称 String[] names=new String[6]; //DVD的借阅状态 0:可借阅,1:已借出 int[] states=new int[6]; //借出日期 int[] dates=new int[6]; //借出次数 int[] counts=new int[6]; //初始化数据 names[0]="浪漫满屋"; states[0]=1; dates[0]=8; counts[0]=10; names[1]="罗马假日"; states[1]=0; dates[1]=0; counts[1]=5; names[2]="乾隆秘史"; states[2]=0; dates[2]=0; counts[2]=100; int choose=0; int num2=-1;//接收0,是否返回 //程序主体编写:DVD管理功能 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"); int num=input.nextInt(); switch(num){ case 1: //新增 System.out.println("********************新增DVD*******************"); System.out.print("请输入新增的DVD名称:"); String name=input.next(); int flag=0;//货架还空着,大于0代表满 for(int i=0;i<names.length;i++){ //如果找着为空的位置,插入进去 if(names[i]==null){ //如果为空且不等于原来数组中的DVD名称,才插入进去 if(names[i]!=name){ names[i]=name; flag++; break; } } } if(flag>0){ System.out.println("新增"+"《"+name+"》"+"DVD成功"); }else{ System.out.println("货架已满,不能新增!"); } break; case 2: //查看 System.out.println("***********************查看DVD***********************"); System.out.println("序号 状态 名称 借出日期 借出次数"); for(int i=0;i<names.length;i++){ if(names[i]!=null){ int xuHao=i+1; String state=(states[i]==0)?"可借阅":"已借出"; String jieChuDate=(dates[i]==0)?"":dates[i]+"日"; String jieChuCount=counts[i]+"次"; System.out.println(xuHao+" "+names[i]+" "+state+" "+jieChuDate+" "+jieChuCount); } } break; case 3: //借出 System.out.println("******************借出DVD************"); System.out.print("请输入你要借的DVD名称:"); String want=input.next(); int flag2=0; for(int i=0;i<names.length;i++){ if(want.equals(names[i])&&states[i]==0){ //存在,且未借阅,可借 flag2++; //可借阅,状态要改为可借阅,日期要输入,且次数要加1 System.out.print("请输入日期:"); dates[i]=input.nextInt(); while(dates[i]<1 || dates[i]>30){ System.out.println("输入日期错误,日期在1-30之间,麻烦重新输入:"); dates[i]=input.nextInt(); } states[i]=1; counts[i]++; }else if(want.equals(names)&& states[i]==1){ //存在,但已借阅,不可再借 System.out.println("对不起,此书已借阅,不可再借!"); break; } } System.out.println(flag2); //作最后的判断,如果不存在的书 if(flag2>0){ System.out.println("借阅成功"); }else{ System.out.println("对不起,此书不存在,不可借阅"); } break; case 4: //删除 //找到要删除的下标 System.out.println("******************删除DVD************"); System.out.print("请输入要删除的DVD名称:"); String name1=input.next(); int index=-1;//要删除的下标 //以下这一步只是找下标 for(int i=0;i<names.length;i++){ if(name1.equals(names[i])&&states[i]==0){ //有,未借出 index=i; break; }else if(name1.equals(names[i])&&states[i]==1){ //有,但已借出 System.out.println("对不起,"+"《"+name1+"》"+"已借出,不能删除!"); break; } } //找出要删除的下标后,删除的操作 //这里要有条件,就是必须得找出下标的时候,即找着存在名称且index=i后才可以执行删除,条件我给了>0,因为数组下标是>=0 if(index>=0){ for(int j=names.length-1;j>index;j--){ names[j-1]=names[j]; states[j-1]=states[j]; dates[j-1]=dates[j]; counts[j-1]=counts[j]; } //补位后,最后一位,要赋空值,不然与倒数第1位重复 names[names.length-1]=null; states[states.length-1]=0; dates[dates.length-1]=0; counts[counts.length-1]=0; System.out.println("删除成功!!"); }else{ System.out.println("对不起,"+"《"+name1+"》"+"不存在,所以不能删除!"); } break; case 5: //归还 System.out.println("******************删除DVD************"); System.out.print("请输入要归还的DVD名称:"); String name2=input.next(); int flag3=0; int sum=0; for(int i=0;i<names.length;i++){ if(name2.equals(names[i])&&states[i]==1){ //有此书,且是借阅状态 flag3++; //更新日期 System.out.print("请输入归还日期:"); int backDate=input.nextInt(); while(backDate<dates[i] || backDate>31){ if(backDate<dates[i]){ System.out.println("归还日期要大于借出日期,请重新输入:"); }else if(backDate>31){ System.out.println("归还日期不能大于31天,请重新输入:"); } //不符合条件就一直循环直到输入正确的日期 backDate=input.nextInt(); } //更新状态 states[i]=0; //计算租金:1天1块钱 int jiechudays=backDate-dates[i]; if(jiechudays==0){ sum=1; System.out.println("你今天借,今天还,请付租金1天的钱"+sum); }else if(jiechudays>=1){ sum=jiechudays*1; System.out.println("请付租金:"+sum); } }else if(name2.equals(names[i])&&states[i]==0){ //有此书,但是是未借阅状态 System.out.println("此书未被借阅!请重新检查是否正确"); } } if(flag3>0){ System.out.println("归还成功"); //算价格啦! }else{ System.out.println("不存在此书!"); } break; case 6: //退出 choose++; break; default: //正确数字以外的结果 choose++; break; } if(choose>0){ break; }else{ //不退出,再次进入主菜单 System.out.println("请输入0继续:"); num2=input.nextInt(); } }while(num2==0); //程序退出结束 System.out.println("谢谢使用!"); } }
修改后:
package DVD; import java.util.Scanner; public class DvdDemo1 { public static void main(String[] args) { Scanner input=new Scanner(System.in); //定义数组 String[] names=new String[4]; int[] states=new int[4];//状态,0代表可借阅,1代表已借出 int[] dates=new int[4];//借阅日期 int[] counts=new int[4];//借阅交数 //初始化数据 names[0]="罗马假日"; states[0]=1; dates[0]=6; counts[0]=1; names[1]="神么东西"; states[1]=0; dates[1]=0; counts[1]=0; names[2]="跑男跑男"; states[2]=1; dates[2]=9; counts[0]=8; int flag=0; do{ System.out.println("欢 迎 使 用 迷 你 DVD 管 理 系 统"); System.out.println("--------------------------------"); System.out.println("1、新增"); System.out.println("2、查看"); System.out.println("3、删除"); System.out.println("4、借出"); System.out.println("5、归还"); System.out.println("6、退出"); System.out.println("--------------------------------"); System.out.print("请输入想要进行的操作:"); int want=input.nextInt(); switch(want){ case 1: //新增DVD int flag2=0; //int ii=0; while(flag2==0){ System.out.print("请输入你要新增的DVD名称:"); String name=input.next(); int flag1=0; for(int i=0;i<names.length;i++){ if(!name.equals(names[i]) && names[i]==null){ names[i]=name; flag1++; break; }else if(name.equals(names[i])){ flag1=-1; break; } } if(flag1>0){ System.out.println("新增DVD成功!"); System.out.print("继续新增还是退出新增?(y/n)"); String yes=input.next(); if("n".equals(yes)){ flag2++; } }else if(flag1==-1){ System.out.println("已存在"+"《"+name+"》"+"名称的DVD,不能再插入了!"); System.out.print("继续新增还是退出新增?(y/n)"); String yes1=input.next(); if("n".equals(yes1)){ flag2++; } } else if(flag1==0){ System.out.println("没有位置了"); flag2++; } } break; case 2: //查看DVD信息 System.out.println("序号 名称 借阅状态 借阅日期 借阅次数"); for(int i=0;i<names.length;i++){ if(names[i]!=null){ String state=""; if(states[i]==0){ state="可借阅"; }else{ state="已借出"; } String date=""; if(dates[i]==0){ date=""; }else{ date=dates[i]+"日"; } System.out.println((i+1)+" "+names[i]+" "+state+" "+date+" "+counts[i]); } } break; case 3: //删除DVD System.out.print("请输入你要删除的DVD名称:"); String name1=input.next(); int flag3=0; int index=-1; //先找出我输入的是哪本书,再判断此书有没有 for(int i=0;i<names.length;i++){ if(names[i]!=null && states[i]==0 && name1.equals(names[i])){ index=i; flag3++; break; }else if(states[i]==1 && name1.equals(names[i])){ System.out.println("不能删除"+"《"+name1+"》,状态已借阅"); flag3=-1; break; } } //移位 if(flag3>0){ System.out.println("删除成功!"); //System.out.println("index="+index); for(int i=index+1;i<names.length-1;i++){ names[i-1]=names[i]; states[i-1]=states[i]; dates[i-1]=dates[i]; counts[i-1]=counts[i]; } }else if(flag3==0){ System.out.println("没有找着此书!"); } break; case 4: //借出 System.out.print("请输入要借阅的DVD名称:"); String name4=input.next(); //先遍历,找出有没有,或已借出 int flag5=0; int index1=-1; for(int i=0;i<names.length;i++){ if(names[i]!=null && name4.equals(names[i]) && states[i]==0){ index1=i; flag5++; break; }else if(name4.equals(names[i]) && states[i]==1){ flag5=-1; System.out.println("《"+name4+"》"+"已借出!不能再借!"); break; } } if(flag5>0){ System.out.print("请输入借出日期:"); dates[index1]=input.nextInt(); states[index1]=1; counts[index1]++; System.out.println("借阅成功"); }else if(flag5==0){ System.out.println("此书不存在!"); } break; case 5: //归还 状态要改,要有归还时间 System.out.print("请输入要归还的DVD名称:"); String huanname=input.next(); //先遍历,找出有没有,或已借出 int flag6=0; int index3=-1; int huandate=0; for(int i=0;i<names.length;i++){ //有且是已借出状态,可还 if(names[i]!=null && huanname.equals(names[i]) && states[i]==1){ index3=i; flag6++; break; }else if(huanname.equals(names[i]) && states[i]==0){//有但是未借出状态 flag6=-1; System.out.println("《"+huanname+"》"+"已还!"); break; } } if(flag6>0){ System.out.print("请输入归还日期:"); huandate=input.nextInt(); int money=(huandate-dates[index3])*1; dates[index3]=huandate; states[index3]=0; counts[index3]++; System.out.println("归还成功"); System.out.println("请付租金:"+money); }else if(flag6==0){ System.out.println("此书不存在!"); } break; case 6: flag++; break; default: flag++; break; } }while(flag==0); System.out.println("程序结束!"); } }