您的位置:首页 > 其它

DVD管理系统:为某音像店开发一个迷你DVD管理器,实现DVD碟片的管理,包括如下功能:

2017-12-08 16:07 926 查看

package com.sxt.oop.dvd;

/**

 * DVD类

 * @author ty

 *

 */

public class Dvd implements Comparable<Dvd>{

 //存放DVD名

 private String dvdNames ;

 //存放借出状态的数组,false为可借,true为不可借

 private boolean status ;

 //存放借DVD日期

 private String loanDates ;

 //DVD借出次数

 private int count;

 /**

  * 构造方法

  */

 public Dvd(){

  

 }

 public Dvd(String dvdNames) {

  this.dvdNames = dvdNames;

 }

 public Dvd(String dvdNames, boolean status, String loanDates) {

  super();

  this.dvdNames = dvdNames;

  this.status = status;

  this.loanDates = loanDates;

 }

 /**

  * set get方法

  * @return

  */

 public String getDvdNames() {

  return dvdNames;

 }

 public void setDvdNames(String dvdNames) {

  this.dvdNames = dvdNames;

 }

 public boolean isStatus() {

  return status;

 }

 public void setStatus(boolean status) {

  this.status = status;

 }

 public String getLoanDates() {

  return loanDates;

 }

 public void setLoanDates(String loanDates) {

  this.loanDates = loanDates;

 }

 

 public int getCount() {

  return count;

 }

 public void setCount(int count) {

  this.count = count;

 }

 @Override

 public int hashCode() {

  final int prime = 31;

  int result = 1;

  result = prime * result

    + ((dvdNames == null) ? 0 : dvdNames.hashCode());

  result = prime * result

    + ((loanDates == null) ? 0 : loanDates.hashCode());

  result = prime * result + (status ? 1231 : 1237);

  return result;

 }

 @Override

 public boolean equals(Object obj) {

  if (this == obj)

   return true;

  if (obj == null)

   return false;

  if (getClass() != obj.getClass())

   return false;

  Dvd other = (Dvd) obj;

  if (dvdNames == null) {

   if (other.dvdNames != null)

    return false;

  } else if (!dvdNames.equals(other.dvdNames))

   return false;

  if (loanDates == null) {

   if (other.loanDates != null)

    return false;

  } else if (!loanDates.equals(other.loanDates))

   return false;

  if (status != other.status)

   return false;

  return true;

 }

 @Override

 public String toString() {

  return   (status?"已借出":"可借")+"\t\t<<"+dvdNames+">>\t\t\t"+(loanDates==null?"":loanDates)+"\t\t"+count+"\n";

 }

 /**

  * 比较借出次数的方法

  */

 @Override

 public int compareTo(Dvd o) {

  return o.count-this.count;

 }

 /**

  * 借出次数自增方法

  */

 public void increment(){

  count++;

 }

 

}

package com.sxt.oop.dvd;

import java.text.ParseException;

import java.util.Arrays;

import java.util.Date;

/**

 * DVD商店类

 * @author ty

 *

 */

public class DvdShop {

 //存放多个dvd对象

 private  Dvd[] dvds;

 private  String name;

 //记录元素的位置 :top的位置是有内容的

 private int top=-1;

 /**

  * 构造方法

  */

 public DvdShop(){

  dvds = new Dvd[50];

 }

 public DvdShop(String name){

  this();

  this.name = name;

    }

 /**

  * 用户自定义数组的大小

  * @param capacity

  */

 public DvdShop(int capacity,String name){

  if(capacity<=0){

   throw new RuntimeException("容量不能小于等于0");

  }

  dvds = new Dvd[capacity];

  this.name = name;

 }

 public String getName() {

  return name;

 }

 public void setName(String name) {

  this.name = name;

 }

 @Override

 public int hashCode() {

  final int prime = 31;

  int result = 1;

  result = prime * result + Arrays.hashCode(dvds);

  result = prime * result + ((name == null) ? 0 : name.hashCode());

  result = prime * result + top;

  return result;

 }

 @Override

 public boolean equals(Object obj) {

  if (this == obj)

   return true;

  if (obj == null)

   return false;

  if (getClass() != obj.getClass())

   return false;

  DvdShop other = (DvdShop) obj;

  if (!Arrays.equals(dvds, other.dvds))

   return false;

  if (name == null) {

   if (other.name != null)

    return false;

  } else if (!name.equals(other.name))

   return false;

  if (top != other.top)

   return false;

  return true;

 }

 @Override

 public String toString() {

  return "DvdShop [dvds=" + Arrays.toString(dvds) + ", name=" + name

    + ", top=" + top + "]";

 }

 /**

  * 根据名字查找dvd的位置

  * @param name

  * @return

  */

 public int indexOf(String name){

  int index=-1;

  for(int i=0;i<=top;i++){

   if(name.equals(dvds[i].getDvdNames())){

    index= i;

    break;

   }

   

  }

  return index;

 }

 

 /**

  * 查:存储空间是否已满

  * @return

  */

 public boolean isFull(){

  return  top==dvds.length-1;

 }

 /**

  * 查:存储空间是否已空

  * @return

  */

 public boolean isEmpty(){

  return top==-1;

 }

 

 public boolean  rent(String name){

  int index= indexOf(name);

  if(index==-1){

   throw new RuntimeException("此 dvd不存在,借出失败");

  }

  if(dvds[index].isStatus()){

   throw new RuntimeException("此 dvd已借出,借出失败");

  }

  Dvd  dvd =dvds[index];

  dvd.setStatus(true);

  dvd.setLoanDates(DateHelper.getDateStr());

  //dvd.setCount(dvd.getCount()+1);

  dvd.increment();

  return true;

  

 }

 

 /**

  * 将index位置的dvd取出

  * @param index

  * @return

  */

 public  Dvd  get(int index){

  if(index<0 ||index>top){

   throw new RuntimeException("位置不存在");

  }

  return dvds[index];

 }

 /**

  * 返回dvd的数量

  * @return

  */

 public int size(){

  return top+1;

 }

 /**

  * 新增DVD

  */

 public boolean add(String name){

  //如果满了抛出异常

  if(isFull()){

   throw new RuntimeException("存储空间已满");

  }

  //index为新输入dvd的位置,如果>=0,则dvd存在

  int index = indexOf(name);

  if(index>=0){

   throw new RuntimeException("此dvd已存在");

  }

  //top为-1,所以要先++

  dvds[++top] = new Dvd(name);

  return true;

  

 }

 /**

  * 删除DVD

  */

 public boolean delete(String name){

  //如果为空抛出异常

  if(isEmpty()){

   throw new RuntimeException("存储空间为空,无法删除");

  }

  //找dvd的位置

  int index = indexOf(name);

  //如果不存在,返回false

  if(index==-1){

   throw new RuntimeException("此 dvd不存在,借出失败");

  }

  //如果存在 通过移位来覆盖被删除的元素

  for(int i=index;i<=top;i++){

   dvds[i] =dvds[i+1];

  }

  //改变top

   top--;

   return true;

 }

 /**

  * 借出DVD  loan

  */

 public boolean loan(String name) {

  //如果为空抛出异常

  if(isEmpty()){

   throw new RuntimeException("存储空间为空,无法借出");

  }

  //找dvd的位置

  int index = indexOf(name);

  //如果不存在,返回false

  if(index==-1){

   throw new RuntimeException("此 dvd不存在,借出失败");

  }

  if(dvds[index].isStatus()){

   throw new RuntimeException("此 dvd已借出,借出失败");

  }

  //如果存在 将dvd的借出状态改为true

  dvds[index].setStatus(true);

  //得到借出日期

  dvds[index].setLoanDates(DateHelper.getDateStr());

  //借出次数加1

  dvds[index].increment();

  return true;

 }

 /**

  * 归还DVD  back

  */

 public  int back(String name) throws ParseException {

  //如果满了抛出异常

  if(isFull()){

   throw new RuntimeException("存储空间已满");

  }

  //找dvd的位置

  int index = indexOf(name);

  //如果不存在

  if(index==-1){

   throw new RuntimeException("此 dvd不存在,归还失败");

  }

  if(dvds[index].isStatus()==false){

   throw new RuntimeException("此 dvd未借出,归还失败");

  }

  

  //把借出状态改为可借

  dvds[index].setStatus(false);

  //保存日期的字符串,先先原来的数据copy一下,再传新数据

  String loanDates_bak = dvds[index].getLoanDates();

  //把借出日期改为null

  dvds[index].setLoanDates(null);

  Date  date1 = DateHelper.getStrDate(loanDates_bak);

  Date  date2  = new Date();

  int days=DateHelper.getDays(date1, date2);

  //计算租金  :租金=日期差*(租金/每天)

  int rent = days*1;

  return rent; 

 }

 

 public void sort(){

  Arrays.sort(dvds,0,top+1);

 }

}

package com.sxt.oop.dvd;

/**

 * DVDUI

 */

import java.text.ParseException;

import java.util.Scanner;

public class DvdUI {

 private static DvdShop  shop =null;

 static Scanner  input =new Scanner(System.in);

 

 

 public DvdUI(String name){

  shop = new DvdShop(name);

 }

 

 public void init(){

  shop.add("猎场");

  shop.add("77天");

  shop.add("正义联盟"); 

 }

 public void mainMenu() throws ParseException{

  System.out.println("欢迎使用<<"+shop.getName()+">>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.归还排行榜");

  System.out.println("7.退        出");

  System.out.println("---------------------");

  System.out.print("请选择 :");

  int choice = input.nextInt();

  switch(choice) {

  case 1:

   add();

   break;

  case 2:

   show();

   break;

  case 3:

   delete();

   break;

  case 4:

   loan();

   break;

  case 5:

   back();

   break;

  case 6:

   sort();

   break;

  case 7:

   System.out.println("感谢您的使用,程序将在3秒后关闭.....");

   try {

    Thread.sleep(3000);

   } catch (InterruptedException e) {

    e.printStackTrace();

   }

   System.exit(0);

   break;

  }

  System.out.print("输入任意键返回:");

  input.next();

  mainMenu();

  

 }

 /**

  * 添加dvd

  */

 public  void add(){

  System.out.println("---->添加dvd");

  //1.提示用户输入dvd的名字

  System.out.print("请输入需要入库的dvd名称:");

  String name = input.next();

  

  //3.将dvd的名字放进去

  try{

  shop.add(name);

  //4.提示成功

  System.out.println("添加<<"+name+">>成功");

  }catch (RuntimeException e) {

   System.out.println(e);

  }

  System.out.println("***************************");

 }

 /**

  * 查询dvd

  */

 public  void show(){

  System.out.println("--->查看dvd");

  if(shop.isEmpty()){

   System.out.println("没有任何dvd信息");

   return;

  }

  System.out.println("序号\t状态\t\t名称\t\t\t借出日期\t\t\t借出次数");

  //循环输出信息

  for(int i=0;i<shop.size();i++){

      System.out.println(i+"\t"+shop.get(i));

  }

  System.out.println("***************************");

 }

 /*

  * 删除DVD delete

  */

 public static void delete() {

  System.out.println("------>删除DVD");

  System.out.println();

  System.out.print("请输入DVD名称:");

  String name = input.next();

  //3.将dvd的名字放进去

  try{

  shop.delete(name);

  //4.提示成功

  System.out.println("删除《"+name+"》成功!");

  }catch (RuntimeException e) {

   System.out.println(e);

  }

  System.out.println("***************************");

 }

 /*

  * 借出DVD  loan

  */

 public static void loan() {

  System.out.println("------>借出DVD");

  System.out.println();

  System.out.print("请输入DVD名称:");

  String name = input.next();

  try{

   shop.loan(name);

   //4.提示成功

   System.out.println("借出《"+name+"》成功!");

   }catch (RuntimeException e) {

    System.out.println(e);

   }

  System.out.println("***************************");

 }

 /*

  * 归还DVD  back

  */

 public static void back() throws ParseException {

  System.out.println("------>归还DVD");

  System.out.println();

  System.out.print("请输入DVD名称:");

  String name = input.next();

  try{

   int rent = shop.back(name);

   System.out.println("租金为:"+rent);

   //4.提示成功

   System.out.println("归还《"+name+"》成功!");

   }catch (RuntimeException e) {

    System.out.println(e);

   }

  System.out.println("***************************");

 }

 /**

  * 排序

  */

 public  void sort(){

  System.out.println("排序DVD");

  shop.sort();

  show();

  System.out.println("***************************");

 }

}

package com.sxt.oop.dvd;

/**DVD客户端

*/

import java.text.ParseException;

public class Start {

  public static void main(String[] args) throws ParseException {

  DvdUI  ui =new DvdUI("伪装者");

  ui.init();

  ui.mainMenu();

 }

}

package com.sxt.oop.dvd;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

/**

 * 时间帮助类

 * @author ty

 *

 */

public class DateHelper {

 /**

  * 将系统时间变成字符串格式

  * @return

  */

 public static String getDateStr() {

  //得到系统当前时间

  Date  date =new Date();

  //构建日期格式化对象,用于将字符串转成日期对象

  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

  String str = sdf.format(date);

  return str;

 }

 /**

  * 将字符串格式的时间变成系统时间

  * @param strDate 字符串格式的时间

  * @return 转化的时间

  * @throws ParseException

  */

 public static Date getStrDate(String strDate) throws ParseException{

  //构建日期格式化对象,用于将字符串转成日期对象

  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

  Date date = sdf.parse(strDate);

  return date;

 }

 /**

  * 计算两个时间的差值

  * @param date1

  * @param date2

  * @return 两个天数差

  */

 public static int getDays(Date date1,Date date2){

  //获取日期对应的毫秒数(1970-01-01 0点开始记录的毫秒数) ,相减得到毫秒差

  long mills= Math.abs(date2.getTime()-date1.getTime());

  //将毫秒转成天

  int days=(int)(mills/1000/60/60/24);

  return days;

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  管理 DVD 日期类
相关文章推荐