KTV点歌程序

简介: KTV点歌程序

简述    

             这个程序主要用到了链表,结构体,包含链表的增删查改以及对链表内容的排序,此程序还构建了多个函数,让主函数更加简单。

程序的要求

  1. 设计并实现一个KTV点歌程序,实现点歌功能。要求实现二级菜单:
  1. 初始化歌曲库。(包括歌曲的名称、演唱者)
  1. 已点歌曲
  2. 点歌

       2. 点歌,显示二级菜单:

  1. 按照歌曲的拼音字母排序显示;
  2. 按照演唱者的名字排序显示

选择歌曲后将歌曲添加到已点列表。

选择3.已选歌曲,显示二级菜单:

  1. 显示已点歌曲
  2. 查询已点歌曲
  3. 删除已点歌曲
  4. 置顶
  5. 上移一位

头文件和全局变量

              首先引用头文件,然后再写出需要的全局变量。

结构体构建

               用到了两个结构体如下:

主函数

主函数较长,需要参考可以访问

主函数.txt · Steventom/大作业 - Gitee.com

菜单

显示出一级菜单二级菜单,然后选择需要哪一项功能并对其进行合法性判断

初始化歌曲库

可以访问初始化歌曲库.txt · Steventom/大作业 - Gitee.com

       此过程可以对歌曲库多次输入分为添加过和未添加过两种情况。未添加过时就是正常尾插过程用两个变量struct libary* tail,* p,已经有head,让head指向空,tail指向空,对于添加过的情况利用while循环让tail和head的next指向空。下面的操作两种情况相同,输入song建立尾插链表利用while循环利用p = (struct libary*)malloc(sizeof(struct libary))给链表开辟空间,然后对p->song和p->next以及p->name进行赋值,对head进行判断对其是否指向空为判断条件,指向空时head = p,tail = p;指向的不是空时tail->next = p,tail = p;再输入song,为下一个做准备,最后返回head.

展示歌曲库

根据得到的指针head进行访问利用while循环打印出来

按歌曲名进行排序

主要用到一个冒泡排序

先利用head != NULL && p->next != NULL排除只有一个歌曲的情况,写一个冒泡排序利用中间变量tempsong,temoname为中间变量。由于歌曲是汉字所以使用了strcmp函数进行比较如果strcmp(p->song, (p->next)->song) > 0利用strcpy函数进行替换name和song,对于序号,我们可以让其保持不变,选择让歌曲和演唱者进行变换可以让序号容易得到,最后返回head.

按姓名进行排序

这一过程和按歌曲进行排序类似,只是改变了strcmp函数的比较内容,让其从比较歌曲改为比较演唱者,其余都相同。

点歌

可以访问点歌.txt · Steventom/大作业 - Gitee.com

点歌分为第一次点歌和多次点歌,此过程就是建立第二个链表,head是参数。第一次点歌时Heads指向空并让标志choose_libarycount = 0,多次点歌时由于Heads指向的不是空,利用循环让Heads->next指向空,下面的操作两种情况相同,输入song,先对其进行判断看song是否在歌曲中,在继续进行,不在从新输入。输入song建立尾插链表利用while循环利用ps = (struct choose_libary*)malloc(sizeof(struct choose_libary))给链表开辟空间,然后对ps->song和ps->next以及ps->name进行赋值,对Heads进行判断对其是否指向空为判断条件,指向空时Headss,tailss;指向的不是空时tails->nexts,tails= ps;再输入song对其进行合法性判断,为下一个做准备,最后如果choose_libarycount == 0返回Heads让choose_libarycount++,否则返回heads.

显示已点歌曲

根据指针heads利用while循环进行遍历,打印出序号,歌曲名,演唱者。

查询已点歌曲

根据指针指针heads进行遍历,利用for循环,如果歌曲在点的歌曲中打印出歌曲的序号和歌曲,否则就会输出为点播此歌曲

删除已点歌曲

可以访问删除已点歌曲.txt · Steventom/大作业 - Gitee.com

根据指针heads,先输入你想要删除的序号,对序号进行合理性判断,再利用while循环进行删除,在进行分类,删除的是第一个时和删除的不是第一个时。当删除的是第一个时需要对头指针进行移动让heads = p->next,再利用while循环调整序号;当删除的不是第一个时需要两个指针p和q,让p=heads,q=p->next,对q进行判断当q->number == number时p->next = q->next将节点断开再连接,最后调整序号返回heads。

顶置

可以访问置顶.txt · Steventom/大作业 - Gitee.com

根据指针heads先输入想要置顶的序号,对序号进行合理性判断,当置顶的不是第一个时利用for循环先让q=p->next再根据q = q->next, p = p->next进行移动让p=heads,当q->number==a时利用strcpy函数进行复制,让p->next = q->next进行断开处的连接,q->next = heads进行需要顶置处的连接; heads = q修改头指针的位置;再利用for循环修改序号,最后返回heads.

上移一位

可以访问上移一位.txt · Steventom/大作业 - Gitee.com

根据指针heads先输入想要移动的序号,对序号进行合理性判断,当移动的不是第一个时利用for循环q=p->next再根据q = q->next, p = p->next进行移动让p=heads,当a == q->number时利用strcpy函数和中间变量tempname和tempsong让替换歌曲名和演唱者,最后返回heads.

到这里此程序已经结束,希望大家一键三连

目录
相关文章
|
SQL 运维 搜索推荐
《揭秘,阿里开源自研搜索引擎Havenask的在线检索服务》
Havenask是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎,深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内几乎整个阿里的搜索业务。本文针对性介绍了Havenask的在线检索服务,它具备高可用、高时效、低成本的优势,帮助企业和开发者量身定做适合业务发展的智能搜索服务。
85890 138
|
JavaScript
使用nodejs连接ftp上传下载
使用nodejs连接ftp,进行ftp的操作,包括列表、上传、下载以及速率等。
使用nodejs连接ftp上传下载
ToC和ToB有啥区别
ToC(Consumer)面向普通用户服务,ToB(business)是面向企业用户服务。对公司的营销体系和商业模式而言,定位客户群体,决定产品设计、运营管理、市场营销等系列操作。 1.1 业务形态不同
15572 2
|
前端开发 数据库 微服务
JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)
JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)
2799 0
JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)
|
11月前
|
传感器 监控 网络协议
【开源源码】基于 STM32智能温度监控系统 | 一个支持远程监控与告警的嵌入式实践项目
本项目基于STM32与μC/OS实时操作系统,结合LWIP协议栈,实现支持远程监控与告警的智能温度系统。通过多任务协同,完成温度采集、网络通信与阈值告警,支持手机App实时查看与配置。系统具备高实时性、稳定性与扩展性,是RTOS与物联网技术融合的典型嵌入式实践案例,开源可学,适用于工业、智能家居等场景。
【开源源码】基于 STM32智能温度监控系统 | 一个支持远程监控与告警的嵌入式实践项目
|
7月前
|
人工智能 安全 JavaScript
# 本地离线可用!Windows OpenClaw AI 数字员工安装全攻略
本教程详解Windows 10/11下零代码、图形化部署OpenClaw本地AI数字员工,全程离线运行、隐私安全,10分钟一键安装,支持文件整理、自动化办公等任务,小白友好、无踩坑。
|
11月前
|
Apache
Excel工具-HUTOOL-读取Excel
基于Hutool和Apache POI,封装Excel读取工具,支持xls/xlsx格式。可读取为List、Map或Bean,提供Sax模式(Excel03SaxReader/Excel07SaxReader)高效处理大文件,避免内存溢出,适用于海量数据流式读取。
|
12月前
|
JSON 前端开发 文件存储
开源项目,全网音乐免费听,太牛逼啦,XiaoMusic 无限点歌机~~~~
XiaoMusic 是一款开源的小爱音箱音乐增强工具,支持全网音乐免费听。通过 NAS 或电脑部署,结合 yt-dlp 下载与本地音乐管理,实现语音点歌、搜索播放、多设备控制,让小爱变身家庭音乐中枢。
3803 2
|
小程序 安全 数据安全/隐私保护
微信小程序项目实例——密码管理器
微信小程序项目实例——密码管理器
微信小程序项目实例——密码管理器
|
存储 机器学习/深度学习 数据挖掘
数据湖与数据仓库:初学者的指南
数据湖与数据仓库:初学者的指南
1093 4