一.写在main方法中
1 import java.util.*; 2 3 public class MyDVDMgr { 4 public static void main(String[] args){ 5 Scanner input=new Scanner(System.in); 6 //是否退出系统,false代表退出系统 7 boolean flag=true; 8 //DVD相关信息,最多只能存储6个DVD信息 9 String[] name=new String[6]; //DVD名称 10 int[] state=new int[6]; //借阅状态,0:可借阅 ;1:已借出 11 int[] date=new int[6]; //借出日期 12 int[] count=new int[6]; //借出次数 13 14 /* 15 * 初始化三个DVD 16 * */ 17 name[0]="罗马假日"; 18 state[0]=1; 19 date[0]=1; 20 count[0]=15; 21 22 name[1]="风声鹤唳"; 23 state[1]=0; 24 count[1]=12; 25 26 name[2]="浪漫满屋"; 27 state[2]=0; 28 count[2]=30; 29 30 int num=-1; 31 //循环操作 32 do{ 33 //输出欢迎菜单 34 System.out.println("欢迎使用迷你DVD管理器"); 35 System.out.println("-------------------------"); 36 System.out.println("1.新增DVD"); 37 System.out.println("2.查看DVD"); 38 System.out.println("3.删除DVD"); 39 System.out.println("4.借出DVD"); 40 System.out.println("5.归还DVD"); 41 System.out.println("6.退出DVD"); 42 System.out.println("-------------------------"); 43 System.out.println("请选择:"); 44 int choose=input.nextInt(); 45 switch(choose){ 46 case 1: 47 //新增DVD 48 System.out.println("-->新增DVD "); 49 System.out.println("请输入DVD名称:"); 50 String dvdName=input.next(); 51 boolean flag2=false; 52 for(int i=0;i<name.length;i++){ 53 if(name[i]==null){ 54 name[i]=dvdName; 55 System.out.println("新增《"+dvdName+"》成功!"); 56 flag2=true; 57 break; 58 } 59 } 60 if(!flag2){ 61 System.out.println("抱歉,新增《"+dvdName+"》失败!货架已满!"); 62 } 63 System.out.println("*****************************************"); 64 break; 65 case 2: 66 //查看DVD 67 System.out.println("-->查看DVD "); 68 System.out.println("序号 状态 名称 借出日期 借出次数"); 69 for(int i=0;i<name.length;i++){ 70 if(name[i]!=null){ 71 String dvdState=(state[i]==0)?"可借阅":"已借出"; 72 String dateStr=(date[i]==0)?"":(date[i]+"日"); 73 System.out.println((i+1)+" "+dvdState+" " 74 +name[i]+" "+dateStr+" "+count[i]+"次"); 75 } 76 } 77 System.out.println("*****************************************"); 78 break; 79 case 3: 80 //删除DVD 81 System.out.println("-->删除DVD "); 82 System.out.println("请输入要删除DVD的名称:"); 83 String delete=input.next(); 84 boolean flag3=false; 85 int index=-1; //记录要删除DVD的位置 86 for(int i=0;i<name.length;i++){ 87 if(name[i]!=null && delete.equals(name[i]) && state[i]==0){ 88 flag3=true; 89 index=i; 90 System.out.println("DVD删除成功!"); 91 break; 92 }else if(name[i]!=null && delete.equals(name[i]) && state[i]==1){ 93 flag3=true; 94 System.out.println("该DVD已被借出,目前无法删除!"); 95 break; 96 } 97 } 98 //根据记录下来的删除DVD的位置进行删除工作 99 if(index!=-1){ 100 for(int j=index;j<name.length;j++){ 101 if(j!=name.length-1){ 102 name[j]=name[j+1]; 103 state[j]=state[j+1]; 104 date[j]=date[j+1]; 105 } 106 name[name.length-1]=null; 107 108 } 109 } 110 if(!flag3){ 111 System.out.println("没有找到匹配信息!"); 112 } 113 System.out.println("*****************************************"); 114 break; 115 case 4: 116 //借出DVD 117 System.out.println("-->借出DVD "); 118 System.out.print("请输入DVD名称:"); 119 String want=input.next(); //要借出的DVD名称 120 for(int i=0;i<name.length;i++){ 121 if(name[i]==null){ //无匹配 122 System.out.println("没有找到匹配信息!"); 123 break; 124 }else if(want.equals(name[i]) && state[i]==0){ //找到匹配可借 125 state[i]=1; //将此DVD置于借出状态 126 System.out.print("请输入借出日期:"); 127 date[i]=input.nextInt(); 128 while(date[i]<1 || date[i]>31){ //当输入借出的日期不满足1-31时 129 System.out.println("必须输入大于等于1且小于等于31的数字,请重新输入:"); 130 date[i]=input.nextInt(); 131 } 132 System.out.println("借出《"+want+"》成功!"); 133 count[i]++; 134 break; 135 }else if(want.equals(name[i]) && state[i]==1){ //找到匹配已被借出 136 System.out.println("《"+want+"》已被借出!"); 137 break; 138 } 139 } 140 System.out.println("*****************************************"); 141 break; 142 case 5: 143 //归还DVD 144 System.out.println("-->归还DVD "); 145 int charge=0; //租金 146 System.out.print("请输入归还DVD名称:"); 147 want=input.next(); 148 for(int i=0;i<name.length;i++){ 149 if(name[i]==null){ //无匹配 150 System.out.println("没有找到匹配信息!"); 151 break; 152 }else if(want.equals(name[i]) && state[i]==1){//找到匹配 153 state[i]=0; //将借阅状态修改为可借阅 154 System.out.print("请输入归还日期:"); 155 int redate=input.nextInt(); 156 while(redate<date[i] || redate>31){ //归还日期不能小于借出日期,也不能大于31 157 if(redate<date[i]){ 158 System.out.println("归还日期不能小于借出日期,请重新输入:"); 159 }else{ 160 System.out.println("一个月只有31天,请重新输入:"); 161 } 162 redate=input.nextInt(); 163 } 164 charge=redate-date[i]; 165 166 System.out.println(" 归还《"+want+"》成功!"); 167 System.out.println("借出日期为:"+date[i]+"日"); 168 System.out.println("归还日期为:"+redate+"日"); 169 System.out.println("应付租金(元):"+charge); 170 date[i]=0; 171 break; 172 }else if(want.equals(name[i]) && state[i]==0){//找到匹配但没有借出 173 System.out.println("该DVD没有被借出!无法进行归还操作。"); 174 break; 175 } 176 } 177 System.out.println("*****************************************"); 178 break; 179 case 6: 180 //退出DVD 181 flag=false; 182 break; 183 default: 184 flag=false; 185 break; 186 } 187 if(flag){ 188 System.out.println("输入0返回:"); 189 num=input.nextInt(); 190 }else{ 191 break; 192 } 193 }while(num==0); 194 System.out.println("谢谢使用!"); 195 } 196 }
二.抽分方法写在不同类
1.初始化使用数组类DVDSet.java
1 package com.jb.minidvd; 2 3 public class DVDSet { 4 String[] name = new String[50]; //数组1存储DVD名称数组 5 int[] state = new int[50]; //数组2存储DVD借出状态:0已借出/1可借 6 String[] date=new String[50]; //数组3存储DVD借出日期 7 int[] count=new int[50]; //借出次数 8 9 }
2.DVD业务类DVDMgr.java
1 package com.jb.minidvd; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.*; 6 public class DVDMgr { 7 /** 8 * 创建DVD对象 9 */ 10 DVDSet dvd = new DVDSet(); 11 /** 12 * 初始三个DVD 13 */ 14 public void initial() { 15 16 dvd.name[0] = "罗马假日"; 17 dvd.state[0] = 0; 18 dvd.date[0]="2013-7-1"; 19 dvd.count[0]=15; 20 21 dvd.name[1] = "风声鹤唳"; 22 dvd.state[1] = 1; 23 dvd.count[1]=12; 24 25 dvd.name[2] = "浪漫满屋"; 26 dvd.state[2] = 1; 27 dvd.count[2]=30; 28 } 29 /** 30 * 开始菜单 31 */ 32 public void startMenu(){ 33 System.out.println("欢 迎 使 用 迷 你 DVD 管 理 器"); 34 System.out.println("-------------------------------------"); 35 System.out.println("0. 借出排行榜"); 36 System.out.println("1. 新 增 DVD"); 37 System.out.println("2. 查 看 DVD"); 38 System.out.println("3. 删 除 DVD"); 39 System.out.println("4. 借 出 DVD"); 40 System.out.println("5. 归 还 DVD"); 41 System.out.println("6. 退 出 "); 42 43 System.out.print("-------------------------------------- "); 44 45 System.out.print("请选择: "); 46 Scanner input = new Scanner(System.in); 47 int choice = input.nextInt(); 48 switch(choice){ 49 case 0: 50 list(); 51 break; 52 case 1: 53 add(); 54 break; 55 case 2: 56 search(); 57 break; 58 case 3: 59 delete(); 60 break; 61 case 4: 62 lend(); 63 break; 64 case 5: 65 returnDvd(); 66 break; 67 case 6: 68 System.out.println(" 谢谢 使 用!"); 69 break; 70 } 71 } 72 /** 73 * 返回主菜单 74 */ 75 public void returnMain(){ 76 Scanner input = new Scanner(System.in); 77 System.out.print("输入0返回:"); 78 if(input.nextInt() == 0){ 79 startMenu(); 80 }else{ 81 System.out.println("输入错误, 异常终止!"); 82 } 83 } 84 /** 85 * 查看DVD 86 */ 87 public void search(){ 88 System.out.println("---> 查看DVD "); 89 System.out.println("序号 状 态 名称 借出日期"); 90 for(int i = 0 ; i < dvd.name.length; i++){ 91 if(dvd.name[i]==null){ 92 break; 93 }else if(dvd.state[i] == 0){ 94 System.out.println((i+1)+" 已借出 "+"<<"+ dvd.name[i]+ ">> " + dvd.date[i]); 95 }else if(dvd.state[i] == 1){ 96 System.out.println((i+1)+" 可 借 "+"<<"+dvd.name[i]+">>"); 97 } 98 } 99 System.out.println("**************************"); 100 returnMain(); 101 } 102 /** 103 * 新增DVD 104 */ 105 public void add(){ 106 Scanner input = new Scanner(System.in); 107 System.out.println("---> 新增DVD "); 108 System.out.print("请输入DVD名称: "); 109 String name = input.next(); 110 for(int i = 0; i < dvd.name.length; i++){ 111 if(dvd.name[i] == null){ //查询最后一个空位置插入 112 dvd.name[i]=name; 113 dvd.state[i]=1;//置新增的DVD可借状态 114 System.out.println("新增《"+name+"》成功!"); 115 break; 116 } 117 } 118 System.out.println("**************************"); 119 returnMain(); 120 } 121 /** 122 * 删除DVD 123 */ 124 public void delete(){ 125 Scanner input = new Scanner(System.in); 126 boolean flag=false;//标识删除成功与否 127 System.out.println("---> 删除DVD "); 128 System.out.print("请输入DVD名称: "); 129 String name = input.next(); 130 //遍历数组,查找匹配信息 131 for(int i = 0 ; i < dvd.name.length; i++){ 132 //查找到,每个元素前移一位 133 if(dvd.name[i]!=null &&dvd.name[i].equalsIgnoreCase(name)&&dvd.state[i]==1){ 134 int j=i; 135 while(dvd.name[j+1]!=null){ 136 dvd.name[j]=dvd.name[j+1]; 137 dvd.state[j]=dvd.state[j+1]; 138 dvd.date[j]=dvd.date[j+1]; 139 j++; 140 } 141 //最后一个不为空的元素置空 142 dvd.name[j]=null; 143 dvd.date[j]=null; 144 System.out.println("删除《"+name+"》成功!"); 145 flag=true;//置位,表示删除成功 146 break; 147 }else if(dvd.name[i]!=null &&dvd.name[i].equalsIgnoreCase(name)&&dvd.state[i]==0){ 148 System.out.println("《"+name+"》为借出状态,不能删除!"); 149 flag=true;//置位 150 break; 151 } 152 } 153 if(!flag){ 154 System.out.println("没有找到匹配信息!"); 155 } 156 System.out.println("**************************"); 157 returnMain(); 158 } 159 /** 160 * 借出DVD 161 */ 162 public void lend(){ 163 System.out.println("---> 借出DVD "); 164 165 Scanner input = new Scanner(System.in); 166 System.out.print("请输入DVD名称: "); 167 String want = input.next(); //要借出的DVD名称 168 for(int i = 0; i < dvd.name.length; i++){ 169 if(dvd.name[i] == null){ //无匹配 170 System.out.println("没有找到匹配信息!"); 171 break; 172 }else if(dvd.name[i].equals(want)&& dvd.state[i]==1){ //找到匹配可借 173 dvd.state[i] = 0; 174 System.out.print("请输入借出日期(年-月-日):"); 175 dvd.date[i]=input.next(); 176 System.out.println("借出《"+want+"》成功!"); 177 dvd.count[i]++; 178 break; 179 }else if(dvd.name[i].equals(want)&& dvd.state[i]==0){ //找到匹配已被借出 180 System.out.println("《"+want+"》已被借出!"); 181 break; 182 } 183 } 184 System.out.println("**************************"); 185 returnMain(); 186 } 187 /** 188 * 归还DVD并计算租金 189 */ 190 public void returnDvd(){ 191 System.out.println("---> 归还DVD "); 192 193 Scanner input = new Scanner(System.in); 194 long loan=0;//租金 195 System.out.print("请输入DVD名称: "); 196 String want = input.next(); 197 for(int i = 0; i < dvd.name.length; i++){ 198 if(dvd.name[i] == null){ //无匹配 199 System.out.println("没有找到匹配信息!"); 200 break; 201 }else if(dvd.name[i].equals(want) && dvd.state[i]==0){ //找到匹配 202 dvd.state[i] = 1; 203 System.out.print("请输入归还日期(年-月-日):"); 204 String redate=input.next(); 205 //计算租金 206 loan=charge(dvd.date[i],redate); 207 System.out.println(" 归还《"+want+"》成功!"); 208 System.out.println("借出日期为:"+dvd.date[i]); 209 System.out.println("归还日期为:"+redate); 210 System.out.println("应付租金(元):"+loan); 211 break; 212 } else if(dvd.name[i].equals(want) && dvd.state[i]==1){ //找到匹配但没有借出 213 System.out.println("该DVD没有被借出!无法进行归还操作。"); 214 break; 215 } 216 } 217 System.out.println("**************************"); 218 returnMain(); 219 } 220 /** 221 * 计算日期差 222 * @param dstr1 第一个日期 223 * @param dstr2 第二个日期 224 * 225 */ 226 public long charge(String dstr1,String dstr2){ 227 long charge=0; 228 SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd"); 229 try { 230 Date d1=sd.parse(dstr1); 231 Date d2=sd.parse(dstr2); 232 charge=(d2.getTime()-d1.getTime())/(24*60*60*1000); 233 } catch (ParseException e) { 234 e.printStackTrace(); 235 } 236 return charge; 237 } 238 /** 239 * 借出排行榜 240 */ 241 public void list(){ 242 //定义新数组,用来存放排序后DVD信息 243 String[] newname = new String[50]; // 244 int[] newcount=new int[50]; 245 for(int k=0;k<dvd.name .length;k++){ 246 newname[k]=dvd.name[k]; 247 newcount[k]=dvd.count[k]; 248 } 249 250 //利用冒泡排序算法进行排序 251 for(int i=0;i<newname.length;i++){ 252 for(int j=i+1;j<newname.length;j++){ 253 if(newcount[i]>newcount[j]){ 254 int tempc=newcount[i]; 255 newcount[i]=newcount[j]; 256 newcount[j]=tempc; 257 String tempn=newname[i]; 258 newname[i]=newname[j]; 259 newname[j]=tempn; 260 } 261 } 262 } 263 System.out.println("---> 排行榜 "); 264 System.out.println("**************************"); 265 System.out.println("次数 名称"); 266 //显示排行榜信息 267 for(int i=newname.length-1;i>=0;i--){ 268 if(newname[i]!=null){ 269 System.out.println(newcount[i]+" <<"+ newname[i]+ ">>" ); 270 } 271 } 272 System.out.println("**************************"); 273 returnMain(); 274 } 275 }
3.功能测试类Start.java
1 package com.jb.minidvd; 2 3 public class Start { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 DVDMgr dm=new DVDMgr(); 10 dm.initial(); 11 dm.startMenu(); 12 13 } 14 15 }
三、运行效果图