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也给我改的够呛,总的来说还是代码撸少了,继续加油吧,冲了,奥里给!!!!!!!!!!!!

 

posted @ 2020-09-20 15:50  StephenTy  阅读(393)  评论(0)    收藏  举报