Java学习案例一:DVD管理器
这是我学习Java写的第一个小案例,总体来说没什么难度,在这边和大家分享一下。首先我们先来看一下
需求:

思路分析:
1. 根据需求,每张DVD都有其属性(名称,状态,日期,借出次数),所以先创建一个DVD类,再写一个方法,用来输出其属性。
2. 然后需要创建一个类对DVD进行操作,并创建一个DVD类型得数组存储每张DVD。
代码实现:
1 public class DvdSet { 2 String name; 3 boolean state; 4 String date; 5 int counts; 6 public void getAllInfo(int num) { 7 //false为借出,true为可借 8 System.out.println((num+1)+"\t"+name+"\t"+(state?"可借":"借出")+"\t"+date+"\t"+counts); 9 } 10 public DvdSet(String name,boolean state,String date,int counts) { 11 this.name=name; 12 this.state=state; 13 this.date=date; 14 this.counts=counts; 15 } 16 }
1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Date; 4 import java.util.Scanner; 5 import java.util.logging.SimpleFormatter; 6 //Dvd管理类 7 public class DvdMgr { 8 Scanner sc=new Scanner(System.in); 9 SimpleDateFormat sd=new SimpleDateFormat("yyyy-mm-dd"); 10 public DvdSet[] dvds=new DvdSet[5]; 11 //初始化方法,先向数组中放入几张DVD 12 public void initial() { 13 dvds[0]=new DvdSet("迪迦",true," ",5); 14 dvds[1]=new DvdSet("戴拿",true," ",2); 15 dvds[2]=new DvdSet("盖亚",true," ",3); 16 } 17 //显示菜单方法 18 public void showMenu() { 19 initial();//调用初始化 20 boolean flag=true; 21 do { 22 System.out.println("***************************"); 23 System.out.println("1.插入\n2.查看\n3.删除\n4.借出\n5.归还\n6.退出\n0.排行榜"); 24 System.out.println("***************************"); 25 System.out.println("请选择:"); 26 int choice=sc.nextInt(); 27 switch(choice) { 28 case 1: 29 System.out.println("插入操作"); 30 System.out.println("请输入待插入的Dvd名称:"); 31 String name1=sc.next(); 32 DvdSet dvd=findByName(name1); 33 if(dvd!=null) { 34 System.out.println("DVD已存在,不可再插入。"); 35 }else { 36 //卡卡卡卡卡卡 37 //这边卡了一下,要注意插入操作的时候,插入的是DVD对象,而不只是它 的名字 38 DvdSet newDvd =new DvdSet(name1,true," ",0); 39 add(newDvd); 40 System.out.println("添加成功"); 41 } 42 break; 43 case 2: 44 System.out.println("查看操作"); 45 lookAll(); 46 break; 47 case 3://删除操作和插入操作的步骤是有点相似的,有些代码可以复制过来 48 //核心的部分就得自己好好想想了 49 System.out.println("删除操作"); 50 System.out.println("请输入待删除的Dvd名称:"); 51 String name3=sc.next(); 52 //findByName方法是在数组中通过名字来找这个对象,找到了返回对象,未找到返回null 53 DvdSet dvd3=findByName(name3); 54 //这里跟插入操作一样,要考虑一些情况,是否存在,以及状态 55 if(dvd3==null) { 56 System.out.println("未找到此Dvd"); 57 }else if(dvd3.state==false) { 58 System.out.println("此DVD已借出,不可删除"); 59 }else { 60 delete(name3); 61 System.out.println("删除成功"); 62 } 63 break; 64 case 4: 65 System.out.println("借出操作"); 66 lend(); 67 break; 68 case 5: 69 System.out.println("归还操作"); 70 back(); 71 break; 72 case 6: 73 System.out.println("退出操作"); 74 System.out.println("已退出"); 75 //可以在退出这里改变标志flag,跳出循环 76 flag=false; 77 break; 78 case 0: 79 System.out.println("排行榜操作"); 80 sort(); 81 break; 82 } 83 if(flag==true) { 84 System.out.println("输入0返回:"); 85 if(sc.nextInt()==0)continue; 86 } 87 }while(flag); 88 } 89 //排行榜没什么,就一个冒泡排序 90 private void sort() { 91 for(int i=0;i<dvds.length-1;i++) { 92 for(int j=0;j<dvds.length-1-i;j++) { 93 //这里要注意判断是否为空 94 if(dvds[j]!=null&&dvds[j+1]!=null) { 95 if(dvds[j].counts<dvds[j+1].counts) { 96 DvdSet temp=dvds[j+1]; 97 dvds[j+1]=dvds[j]; 98 dvds[j]=temp; 99 } 100 } 101 } 102 } 103 lookAll(); 104 } 105 private void back() { 106 System.out.println("请输入归还的DVD名称"); 107 String name=sc.next(); 108 DvdSet dvd=findByName(name); 109 if(dvd==null) { 110 System.out.println("未找到此DVD"); 111 }else if(dvd.state==true) { 112 System.out.println("此DVD为可借状态"); 113 }else { 114 System.out.println("请输入归还日期:"); 115 String backDate=sc.next(); 116 System.out.println("归还成功"); 117 try { 118 Date d1=sd.parse(dvd.date); 119 Date d2=sd.parse(backDate); 120 121 dvd.state=true; 122 //这边用getTime计算毫秒数,就可以算出接触的时间了 123 double money=(double)(1.5*((d2.getTime()-d1.getTime())/(1000*60*60*24))); 124 System.out.println("应付:"+money); 125 } catch (ParseException e) { 126 // TODO Auto-generated catch block 127 e.printStackTrace(); 128 } 129 130 131 } 132 133 } 134 private void lend() { 135 System.out.println("请输入要借的DVD名称"); 136 String name=sc.next(); 137 DvdSet dvd=findByName(name); 138 if(dvd==null) { 139 System.out.println("未找到此DVD"); 140 }else if(dvd.state==false) { 141 System.out.println("此DVD已借出"); 142 }else { 143 System.out.println("借出"+dvd.name+"成功"); 144 System.out.println("请输入借出日期:"); 145 dvd.date=sc.next(); 146 //借出时要改变状态,次数++ 147 dvd.state=false; 148 dvd.counts++; 149 } 150 } 151 152 153 private void delete(String name) { 154 155 int index=findByIndex(name); 156 System.out.println(index); 157 //删除这要注意i知道数组倒数第二的位置 158 for(int i=index;i<dvds.length-1;i++) { 159 dvds[i]=dvds[i+1]; 160 } 161 //将最后一个元素置空 162 dvds[dvds.length-1]=null; 163 164 } 165 //找出要删元素的下标,并返回 166 private int findByIndex(String name) { 167 int index=-1; 168 for(int i=0;i<dvds.length;i++) { 169 if(dvds[i]!=null) { 170 if(dvds[i].name.equals(name)) 171 { 172 index=i; 173 break; 174 } 175 176 } 177 } 178 return index; 179 } 180 private void lookAll() { 181 System.out.println("序号\t名称\t状态\t日期\t次数"); 182 //卡卡卡卡卡 183 for(int i=0;i<dvds.length;i++) { 184 if(dvds[i]!=null) { 185 dvds[i].getAllInfo(i); 186 } 187 } 188 189 } 190 private void add(DvdSet newDvds) { 191 //判断是否满了,满了则扩容 192 if(dvds[dvds.length-1]!=null) { 193 DvdSet[] newDvd=new DvdSet[dvds.length+10]; 194 int i=0; 195 for(;i<dvds.length;i++) { 196 newDvd[i]=dvds[i]; 197 } 198 //更换引用,内存中指向发生改变 199 dvds=newDvd; 200 }else { 201 //卡卡卡卡卡 202 for(int i=0;i<dvds.length;i++) { 203 if(dvds[i]==null) { 204 dvds[i]=newDvds; 205 break; 206 } 207 } 208 } 209 210 } 211 private DvdSet findByName(String name) { 212 DvdSet dvd=null; 213 for(int i=0;i<dvds.length;i++) { 214 if(dvds[i]!=null) { 215 if(dvds[i].name.equals(name)) { 216 dvd=dvds[i]; 217 break; 218 } 219 } 220 } 221 return dvd; 222 223 } 224 }
//测试类 public class Test { public static void main(String[] args) { DvdMgr dm=new DvdMgr(); dm.showMenu(); } }
现在觉得这个案例不难,但是我第一次写的时候写了一个下午,作为一个新手,我觉得能写出来应该也还好吧
不过改bug也给我改的够呛,总的来说还是代码撸少了,继续加油吧,冲了,奥里给!!!!!!!!!!!!

浙公网安备 33010602011771号