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 安全 JavaScript
基于JavaWeb的电影院在线选座订票管理系统
基于JavaWeb的电影院在线选座订票管理系统
690 0
基于JavaWeb的电影院在线选座订票管理系统
|
4月前
|
存储 安全 前端开发
上门按摩预约系统开发指南与功能丨方案需求
开发上门按摩预约系统涵盖需求分析、用户界面设计、后端开发等关键环节。需明确目标用户与核心功能,选择技术平台;设计友好界面,确保流畅体验;后端需构建数据库,支持用户与服务管理,集成支付与反馈系统;实现预约时间管理及用户提醒;整合安全支付流程;并进行数据分析以优化服务。
|
5月前
模拟KTV点歌系统
模拟KTV点歌系统
56 0
|
6月前
|
小程序 JavaScript Java
奶茶点餐|奶茶店自助点餐系统|基于微信小程序的饮品点单系统的设计与实现(源码+数据库+文档)
奶茶点餐|奶茶店自助点餐系统|基于微信小程序的饮品点单系统的设计与实现(源码+数据库+文档)
363 1
|
5月前
|
小程序 前端开发 JavaScript
微信小程序|大学寝室报修小程序的设计与实现
微信小程序|大学寝室报修小程序的设计与实现
|
6月前
|
移动开发 小程序 NoSQL
上门家政按摩H5小程序源码
1、服务器环境:CentOS7 + 宝塔 + Nginx + php 2、环境:PHP7.2+ MySQL5.6 3、安装扩展:fileinfo、redis
133 2
上门家政按摩H5小程序源码
|
6月前
|
小程序 JavaScript Java
影院购票|电影院订票选座小程序|基于微信小程序的电影院购票系统设计与实现(源码+数据库+文档)
影院购票|电影院订票选座小程序|基于微信小程序的电影院购票系统设计与实现(源码+数据库+文档)
219 0
|
6月前
|
小程序 JavaScript Java
口腔助手|口腔挂号预约小程序|基于微信小程序的口腔门诊预约系统的设计与实现(源码+数据库+文档)
口腔助手|口腔挂号预约小程序|基于微信小程序的口腔门诊预约系统的设计与实现(源码+数据库+文档)
87 0
|
6月前
|
Windows
十分钟搭建自己的在线书库随时随地看小说,Kindle不再盖泡面!
十分钟搭建自己的在线书库随时随地看小说,Kindle不再盖泡面!
359 0
|
运维 算法 安全
相亲交友/婚恋交友/红娘相亲/社交软件/语音视频聊天平台系统开发指南详细丨源码版
系统设计:设计系统的数据库结构、用户界面、算法等。需要考虑用户友好性、安全性和灵活性。