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

来源:互联网 发布:cms监控软件手机版安卓 编辑:程序博客网 时间:2024/05/17 03:52


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;
 }
}

原创粉丝点击