Java-模拟KTV点歌(控制台程序)

简介: Java-模拟KTV点歌(控制台程序)

一:程序框架


在这里插入图片描述

①:添加歌曲流程图
在这里插入图片描述

②:歌曲置顶
在这里插入图片描述
③:歌曲前移
在这里插入图片描述
④:退出系统
在这里插入图片描述


二:程序代码


public class KTVByLinkedList {
    //创建用户存储歌曲列表的集合
    private static LinkedList<String> linkedList=new LinkedList<String>();
    //获取用户输入信息
    private static  int acceptnum;
            public static void main(String[] args) {
                //提示面板
                System.out.println("------------欢迎来到点歌系统--------------");
                testview();
                //添加一部分歌曲列表中
                   InintMusicList(linkedList);
                //获取用户输入符合要求的数字
                 acceptnum=getScannernum(0,3);
                if (acceptnum==-1) {
                    acceptnum=getScannernum(0,3);
                }
                //接受用户输入数字,并进行相应操作
                inpuuserInfo();
            }
            
            //系统核心部分,接受用户输入数字,并进行相应操作
            private static void inpuuserInfo() {
                // TODO Auto-generated method stub
                while (true) {
                    switch (acceptnum) {
                    case 0:
                        //添加歌曲
                        addMusic();
                        break;
                    case 1:
                        //将歌曲置顶
                        setTop();
                        break;
                    case 2:
                        //将歌曲前移一位
                       setBefore();
                        break;
                    case 3:
                        exit();
                         break;
                    default:
                        //返回错误提示信息,一般不会引发;
                        System.out.println("用户系统出现异常");
                        break;
                    }
                    System.out.println("------------------------");
                    testview();
                    //再次获取用户输入
                     acceptnum=getScannernum(0,3);
                         if (acceptnum==-1) {
                             acceptnum=getScannernum(0,3);
                         }
                }
            }
            
            //置顶歌曲
             private static void setTop() {
                // TODO Auto-generated method stub
                boolean signtop=true;
                int position;
                while(signtop){
                    System.out.println("当前歌曲信息:"+linkedList);
                    System.out.println("请输入,你想将那一首歌曲置顶");    
                    @SuppressWarnings("resource")
                    String input=new Scanner(System.in).nextLine();
                    position=linkedList.indexOf(input);
                    //判断当前歌曲是否存在
                    if (position==-1) {
                        System.out.println("当前歌曲不存在!");
                    }else{
                        //判断当前歌曲是否在首位
                        if (position==0) {
                            System.out.println("当前歌曲已置顶!");    
                        } else {
                            //移除当前歌曲
                            linkedList.remove(input);
                            //将歌曲置顶
                            linkedList.add(0,input);
                            System.out.println("已将歌曲置顶:"+linkedList);
                            System.out.println("你想继续置顶歌曲吗?");
                            System.out.println("0:是 1:不是");
                            if(getScannernum(0,1)==1)
                            {
                                 System.out.println("你已经返回主界面");
                                 signtop=false;
                                 break;
                            }
                        }
                    }
                    
                }
            }

            //前移歌曲
            private static void setBefore() {
                // TODO Auto-generated method stub
                boolean  signbefore=true;
                int position;
                while(signbefore){
                System.out.println("当前歌曲信息:"+linkedList);
                System.out.println("请输入,你想将那一首歌曲前移");    
                @SuppressWarnings("resource")
                String input=new Scanner(System.in).nextLine();
                position=linkedList.indexOf(input);
                if (position==-1) {
                //判断当前歌曲是否存在
                 System.out.println("当前歌曲不存在!");
                }else
                {
                    //判断当前歌曲是否在首位
                    if (position==0) {
                        System.out.println("当前歌曲已经置顶!");
                    }else {
                        //移除当前歌曲
                        linkedList.remove(input);
                        //将歌曲前移
                        linkedList.add(position-1,input);
                        System.out.println("已将歌曲前移:"+linkedList);
                        System.out.println("你想继续前移歌曲吗?");
                        System.out.println("0:是 1:不是");
                        if(getScannernum(0,1)==1)
                        {
                             System.out.println("你已经返回主界面");
                             signbefore=false;
                             break;
                        }
                    }
                }
                }
            }

            //添加歌曲
            private static void addMusic() {
                // TODO Auto-generated method stub
                System.out.println("当前歌曲信息:"+linkedList);
                String inputstr;
                boolean addsign=true;
                while (addsign) {
                     System.out.println("请输入歌曲名称:");
                       @SuppressWarnings("resource")
                    String input1=new Scanner(System.in).nextLine();
                        inputstr=input1;
                    //判断用户输入歌曲是否在当前歌曲中已经存在
                    if (linkedList.indexOf(inputstr)!=-1) {
                        //存在
                        System.out.println("当前歌曲已经存在!");
                        System.out.println("请重新输入歌曲名称:");
                        @SuppressWarnings("resource")
                        String input2=new Scanner(System.in).nextLine();
                        inputstr=input2;
                    }
                    linkedList.add(inputstr);
                    System.out.println("歌曲  ["+inputstr+"] 添加成功!");
                    System.out.println("当前歌曲信息:");
                    System.out.println(linkedList);
                    System.out.println("你是否继续添加歌曲");
                    System.out.println("0:是  1:不是");
                    if(getScannernum(0,1)==1)
                    {
                        addsign=false;
                    }
                }
                System.out.println("你已经返回主界面");
            }
            
            //提示面板
            private static void testview() {
                // TODO Auto-generated method stub
                //提示面板            
                System.out.println("0:添加歌曲至列表");
                System.out.println("1:将歌曲置顶");
                System.out.println("2:将歌曲前移一位");
                System.out.println("3:退出");
            }

            //初始时添加歌曲名称
            private static void InintMusicList(LinkedList<String> linkedList) {
                // TODO Auto-generated method stub
                linkedList.add("稻香");
                linkedList.add("夜曲");
                linkedList.add("夜的第七章");
                linkedList.add("听妈妈的话");
                linkedList.add("龙卷风");
                System.out.println("初始歌曲列表:"+linkedList);
            }
            
            //退出系统
            private static void exit() {
                // TODO Auto-generated method stub
                System.out.println("你是否要退出系统?");
                System.out.println("0:退出  1:不退出");
                if(getScannernum(0,1)==1)
                {
                     System.out.println("你已经返回主界面");
                }else{
                    System.out.println("你已经退出系统,拜拜!");
                    System.exit(0);    
                }
            }

            //获取用户输入指定数字
            private static int  getScannernum(int min,int max) {
                //获取用户输入信息
                System.out.println("请输入选项数字!");
                try{
                    @SuppressWarnings("resource")
                    int acceptnum=new Scanner(System.in).nextInt();
                    //判断用户输入情况,是否满足系统要求
                    while (!(acceptnum>=min&&acceptnum<=max)) {
                         System.out.println("请重新输入选项数字!");
                         acceptnum=new Scanner(System.in).nextInt();
                    }
                    return acceptnum;
                }catch(Exception exception)
                {
                    //用户没有按要求输入信息
                    System.out.println("请按要求输入信息");
                    //返回错误标识
                    return -1;
                }
            }
}

三:程序调试


①:添加歌曲效果
在这里插入图片描述
②:歌曲置顶
在这里插入图片描述
③:歌曲前移
在这里插入图片描述
④:退出
在这里插入图片描述


⑤:四个模块的相互切换


在这里插入图片描述
在这里插入图片描述


相关API
LinkedList 集合API

相关文章
|
2天前
|
监控 负载均衡 Java
如何设计高可用性的Java Web应用程序
如何设计高可用性的Java Web应用程序
|
10天前
|
存储 Java C++
Java虚拟机(JVM)在执行Java程序时,会将其管理的内存划分为几个不同的区域
【6月更文挑战第24天】Java JVM管理内存分7区:程序计数器记录线程执行位置;虚拟机栈处理方法调用,每个线程有独立栈;本地方法栈服务native方法;Java堆存储所有对象实例,垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息;运行时常量池存储常量;直接内存不属于JVM规范,通过`java.nio`手动管理,不受GC直接影响。
20 5
|
10天前
|
算法 Java
垃圾回收机制(Garbage Collection,GC)是Java语言的一个重要特性,它自动管理程序运行过程中不再使用的内存空间。
【6月更文挑战第24天】Java的GC自动回收不再使用的内存,关注堆中的对象。通过标记-清除、复制、压缩和分代等算法识别无用对象。GC分为Minor、Major和Full类型,针对年轻代、老年代或整个堆进行回收。性能优化涉及算法选择和参数调整。
22 3
|
14天前
|
Java 应用服务中间件 Apache
安装和配置Apache Tomcat是部署Java Web应用程序的常见任务
安装和配置Apache Tomcat是部署Java Web应用程序的常见任务
41 7
|
10天前
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
22 2
|
14天前
|
监控 算法 Java
Java虚拟机(JVM)使用多种垃圾回收算法来管理内存,以确保程序运行时不会因为内存不足而崩溃。
【6月更文挑战第20天】Java JVM运用多种GC算法,如标记-清除、复制、标记-压缩、分代收集、增量收集、并行收集和并发标记,以自动化内存管理,防止因内存耗尽导致的程序崩溃。这些算法各有优劣,适应不同的性能和资源需求。垃圾回收旨在避免手动内存管理,简化编程。当遇到内存泄漏,可以借助VisualVM、JConsole或MAT等工具监测内存、生成堆转储,分析引用链并定位泄漏源,从而解决问题。
25 4
|
15天前
|
Java
在Java中,你可以创建一个简单的四则运算程序来执行小学级别的加减乘除操作
【6月更文挑战第19天】Java程序实现简单四则运算,接收用户输入的两个数字和运算符,根据运算符调用相应函数进行计算。包含加、减、乘、除功能,其中除法操作检查了除数是否为零,避免运行时错误。
23 5
|
15天前
|
Java 调度
【实战指南】Java多线程高手秘籍:线程生命周期管理,掌控程序命运的钥匙!
【6月更文挑战第19天】Java多线程涉及线程生命周期的五个阶段:新建、就绪、运行、阻塞和死亡。理解这些状态转换对性能优化至关重要。线程从新建到调用`start()`变为就绪,等待CPU执行。获得执行权后进入运行状态,执行`run()`。遇到阻塞如等待锁时,进入阻塞状态。完成后或被中断则死亡。管理线程包括合理使用锁、利用线程池、处理异常和优雅关闭线程。通过控制这些,能编写更高效稳定的多线程程序。
|
16天前
|
存储 安全 Java
告别低效!Java Queue与LinkedList的完美结合,让你的程序更高效!
【6月更文挑战第18天】Java的`LinkedList`作为`Queue`实现,提供高效并发队列。利用双向链表,它在头部和尾部操作有O(1)复杂度,适合大量数据和高并发。通过`Collections.synchronizedList`可使其线程安全,用于任务调度等场景,展现灵活性和高性能。
|
3天前
|
Java
【Java】程序练习1(数组)
【Java】程序练习1(数组)