第五天:用前几天的知识完成一个简单的DVD管理系统吧!

Java实现简单DVD管理系统
我们要完成的功能有:
查看 增加 删除 借出 归还并计算租金 显示借出次数排行
代码如下(自己试试吧!):
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Scanner;

public class Dvd{
    public static void main(String[] args) {
        setDVDS();
        menu();
    }
    static int[] indexs=new int[50];
    static int[] times = new int[50];
    static String[] states=new String[50];
    static String[] names=new String[50];
    static String[] dates=new String[50];
    static Scanner input=new Scanner(System.in);
    //DVD数据初始化:
    public  static void setDVDS(){
        indexs[0]=1;
        times[0]=11;
        states[0]="已借出";
        names[0]="罗马假日";
        dates[0]="2010-7-1";

        indexs[1]=2;
        times[1]=21;
        states[1]="可借";
        names[1]="风声鹤唳";
        dates[1]=" ";

        indexs[2]=3;
        times[2]=31;
        states[2]="可借";
        names[2]="浪漫满屋";
        dates[2]=" ";
    }

    //创建菜单方法:
    public static void menu(){
        System.out.println("欢迎使用迷你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.查看DVD借出排行");
        System.out.println("7、退\t出");
        System.out.println("-----------------------------");
        System.out.print("请选择\t");
        int num=input.nextInt();
        if(num==1){
            addDVD();
        }else if(num==2){
            queryDVD();
        }else if(num==3){
            deleteDVD();
        }else if(num==4){
            lendDVD();
        }else if(num==5){
            backDVD();
        }else if (num==6){
            ranking();
        }
        else if(num>=7 || num<=0){
            System.out.println("感谢使用,再见!");
            return ;
        }
        System.out.println("*********************");
        System.out.println("输入0返回");
        int  index=input.nextInt();
        if(index==0){
            menu();
        }
    }

    //查看DVD
    public static void queryDVD(){
        System.out.println("---> 查看DVD\n");
        System.out.println("序号\t状态\t名称\t借出日期");
        for (int i = 0; i <names.length ; i++) {
            if(names[i]!=null){
                System.out.println(indexs[i]+"\t"+states[i]+"\t"+names[i]+"\t"+dates[i]);
            }else{
                break;
            }
        }
    }

    //新增DVD
    public static void addDVD(){
        System.out.println("---> 新增DVD\n");
        System.out.println("请输入DVD 名称:");
        String name=input.next();
        for (int i = 0; i <names.length ; i++) {
            if(names[i]==null){
                names[i]=name;
                indexs[i]=i+1;
                states[i]="可借";
                dates[i]=" ";
                times[i] = 0;
                System.out.println("新增《"+name+"》成功");
                break;
            }
        }
    }
    //删除DVD
    public static void deleteDVD(){
        System.out.println("---> 删除DVD\n");
        System.out.println("请输入dvd名称");
        String name=input.next();
        //1.判断DVD是否存在:
        int index=-1;
        for (int i = 0; i <names.length ; i++) {
            if(names[i]!=null && name.equals(names[i])){
                index=i;
                break;
            }
        }
        //2.存在的情况下,先判断状态是否为”可借“,再执行删除操作
        if(index==-1){
            System.out.println("《"+name+"》不存在,无法删除!");
        }else{
            if(states[index].equals("已借出")){
                System.out.println("《"+name+"》已借出,不可以删除!");
            }else{
                int maxIndex=-1;
                for (int i = 0; i <names.length ; i++) {
                    if(names[i]==null){
                        maxIndex=i;
                    }
                }
                for (int i = index; i <maxIndex ; i++) {
                    names[i]=names[i+1];
                    //indexs[i]=indexs[i+1];
                    states[i]=states[i+1];
                    dates[i]=dates[i+1];
                }
                System.out.println("《"+name+"》删除成功!");
            }
        }
    }

    //借出DVD
    public static void lendDVD(){
        System.out.println("---> 借出DVD");
        System.out.println("请输入DVD名称:");
        String name=input.next();
        //1.DVD是否存在
        int index=-1;
        for (int i = 0; i <names.length ; i++) {
            if(names[i]!=null && name.equals(names[i])){
                index=i;
                break;
            }
        }
        //2.如果存在,进一步查看状态是否可以借出
        if(index==-1){
            System.out.println("《"+name+"》不存在,无法借出!");
        }else{
            if(states[index].equals("可借")){ //执行借出操作
                System.out.println("请输入借出日期:");
                String date=input.next();
                states[index]="已借出";
                dates[index]=date;
                times[index]++;
                System.out.println("《"+name+"》借出成功!");
            }else{
                System.out.println("《"+name+"》已经借出,不可再借!");
            }
        }
    }
    //归还DVD并计算租金
    public static void backDVD(){
        System.out.println("---> 归还DVD\n");
        System.out.println("请输入归还DVD名称:");
        String name=input.next();
        //1.判断是否存在:
        int index=-1;
        for (int i = 0; i <names.length ; i++) {
            if(names[i]!=null && name.equals(names[i])){
                index=i;
                break;
            }
        }
        //2.存在后,判断状态是否为“已借出” 再执行归还操作
        if(index==-1){
            System.out.println("《"+name+"》不存在, 无法归还!");
        }else{
            if(states[index].equals("可借")){
                System.out.println("《"+name+"》未借出, 无需归还!");
            }else{//执行归还操作:
                System.out.println("请输入归还日期(年-月-日):");
                String date=input.next();
                System.out.println("《"+name+"》归还成功!");
                System.out.println("借出日期为:"+dates[index]);
                System.out.println("归还日期为:"+date);
                System.out.println("应付租金(元)"+getMoney(dates[index],date));
                states[index]="可借";
                dates[index]=" ";
            }
        }
    }

    //结算租金:
    /**
     * 计算两个日期之间的天数差
     * @param lendDate 借出日期,格式为"yyyy-MM-dd"
     * @param backDate 归还日期,格式为"yyyy-MM-dd"
     * @return 两个日期之间的天数差(若日期格式错误则返回-1)
     */
    public static int getMoney(String lendDate, String backDate) {
        // 创建日期格式化对象,指定格式为"yyyy-MM-dd"
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        try {
            // 将字符串日期转换为Date对象
            Date parse = sdf.parse(lendDate);
            Date parse1 = sdf.parse(backDate);

            // 计算两个日期的时间差(毫秒数),并转换为天数
            // 1秒=1000毫秒,1分钟=60秒,1小时=60分钟,1天=24小时
            int day = (int) ((parse1.getTime() - parse.getTime()) / (1000 * 60 * 60 * 24));

            return day;
        } catch (ParseException e) {
            // 如果日期格式不正确,打印异常堆栈信息
            e.printStackTrace();
        }

        // 日期解析失败时返回-1
        return -1;
    }
//借出次数排行
    public static void ranking() {
        System.out.println("---> 借出次数排行");
        System.out.println("次数\tDVD名称");
        // 使用冒泡排序按借出次数降序排列
        for (int i = 0; i < times.length - 1; i++) {
            for (int j = 0; j < times.length - 1 - i; j++) {
                if (times[j] < times[j + 1]) {

                    int time = times[j];
                    times[j] = times[j + 1];
                    times[j + 1] = time;

                    String name = names[j];
                    names[j] = names[j + 1];
                    names[j + 1] = name;

                    int index=indexs[j];
                    indexs[j] = indexs[j + 1];
                    indexs[j + 1] = index;

                    String date = dates[j];
                    dates[j] = dates[j + 1];
                    dates[j + 1] = date;

                    String state = states[j];
                    states[j] = states[j + 1];
                    states[j + 1] = state;
                }
            }
        }
        for (int i = 0; i < names.length; i++) {
            if (names[i] != null) {
                System.out.println(times[i] + "\t" + names[i]);
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值