实现代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>struct Song {int time;//播放次数char name [30];//歌名char author [36];//作者char content [1200];//歌词struct Song * next;//指向下一首歌曲地址
} song;struct Song * current = NULL; //存放新歌曲地址
struct Song * head = NULL; //存放第一首歌曲地址
struct Song * tail = NULL; //存放最后一首歌曲地址/*** 添加歌曲** @author GaoHuanjie*/
void add() {printf("当前操作:添加歌曲\n");current = malloc(sizeof(struct Song));//动态生成新的、待加入链表的歌曲printf("请输入歌名\n");scanf("%s", (*current).name);printf("请输入作者\n");scanf("%s", current->author);printf("请输入歌词\n");scanf("%s", (*current).content);(*current).time = 0;if(head == NULL) {head = current;//head为NULL,意味着当前歌曲是首节点;} else {tail->next = current;//把当前歌曲地址“挂到”链表最后一个节点的next成员;}tail = current;//将已加入链表的当前节点“变”为链表最后一个节点;tail->next = NULL;printf("数据添加成功!\n");
}/*** 删除歌曲** @author GaoHuanjie*/
void drop() {printf("当前操作:删除歌曲\n");struct Song * point = head;if(point != NULL) {printf("请输入歌名\n");char name [30];//歌名scanf("%s", name);while(point != NULL) {if(strcmp(name, point->name) == 0) {break;}point = point->next;//当遍历“完”链表最后一个元素时,point指针变量的值为NULL}if(point != NULL) {if(point == head) { //删除第一首歌if(head->next == NULL) { //当前系统只保存一首歌曲head = NULL;} else {head = head->next;}} else {struct Song * previous = head;//point所指歌曲的前一首歌曲while(previous != NULL) {if(previous->next == point) {break;}previous = previous->next;//当遍历“完”链表最后一个元素时,point指针变量的值为NULL}previous->next = point->next;}free(point);printf("数据删除成功!\n");} else {printf("系统没有找到歌名为%s的歌曲,无法删除!\n", name);}} else {printf("当前系统没有保存歌曲,无法删除!\n");}
}/*** 修改歌曲** @author GaoHuanjie*/
void update() {printf("当前操作:修改歌曲\n");struct Song * point = head;if(point != NULL) {printf("请输入歌名\n");char name [30];//歌名scanf("%s", name);while(point != NULL) {if(strcmp(name, point->name) == 0) {break;}point = point->next;//当遍历“完”链表最后一个元素时,point指针变量的值为NULL}if(point != NULL) {printf("请输入新歌名\n");scanf("%s", (*point).name);printf("请输入新作者\n");scanf("%s", point->author);printf("请输入新歌词\n");scanf("%s", (*point).content);printf("数据修改成功!\n");} else {printf("系统没有找到歌名为%s的歌曲,无法修改!\n", name);}} else {printf("当前系统没有保存歌曲,无法修改!\n");}
}/*** 点播歌曲** @author GaoHuanjie*/
void select() {printf("当前操作:点播歌曲\n");struct Song * point = head;if(point != NULL) {printf("请输入歌名\n");char name [30];//歌名scanf("%s", name);while(point != NULL) {if(strcmp(name, point->name) == 0) {break;}point = point->next;//当遍历“完”链表最后一个元素时,point指针变量的值为NULL}if(point != NULL) {printf("歌名:%s\n作者:%s\n播放:%d\n", point->name, point->author, point->time);printf("歌词:\n");char content [1200];strcpy(content,point->content);split(content);point->time = point->time + 1;} else {printf("系统没有找到歌名为%s的歌曲,无法点播!\n", name);}} else {printf("当前系统没有保存歌曲,无法点播!\n");}
}void split(char * content){char * subContent = strtok(content, "\\n");printf("%s\n", subContent);while(subContent = strtok(NULL, "\\n")){printf("%s\n", subContent);}
}int main() {printf("************************************\n");printf("*                                  *\n");printf("*      欢迎使用雷石KTV点歌系统     *\n");printf("*                                  *\n");printf("************************************\n");for(;;) {printf("\n");printf("1、添加歌曲\n");printf("2、删除歌曲\n");printf("3、修改歌曲\n");printf("4、点播歌曲\n");printf("5、退出系统\n");printf("请输入菜单编号,按回车键结束:\n");int option;scanf("%d", &option);switch(option) {case 1:add();break;case 2:drop();break;case 3:update();break;case 4:select();break;case 5:printf("成功退出系统\n");exit(0);default:printf("%d系统不支持该操作\n", option);}}return 0;
}

测试数据:

歌名:传奇
作者:李健
演唱:王菲
歌词:
只是因为在人群中多看了你一眼\n再也没能忘掉你容颜\n梦想着偶然能有一天再相见\n从此我开始孤单思念\n想你时你在天边\n想你时你在眼前\n想你时你在脑海\n想你时你在心田\n宁愿相信我们前世有约\n今生的爱情故事不会再改变\n宁愿用这一生等你发现\n我一直在你身旁从未走远\n只是因为在人群中多看了你一眼\n再也没能忘掉你容颜\n梦想着偶然能有一天再相见\n从此我开始孤单思念\n想你时你在天边\n想你时你在眼前\n想你时你在脑海\n想你时你在心田\n宁愿相信我们前世有约\n今生的爱情故事不会再改变\n宁愿用这一生等你发现\n我一直在你身旁从未走远歌名:逍遥叹
作者:陈宇任
演唱:胡歌
歌词:
岁月难得沉默秋风厌倦漂泊\n夕阳赖着不走挂在墙头舍不得我\n昔日伊人耳边话已和潮声向东流\n再回首往事也随枫叶一片片落\n爱已走到尽头恨也放弃承诺\n命运自认幽默想法太多由不得我\n壮志凌云几分愁知己难逢几人留\n再回首却闻笑传醉梦中\n笑叹词穷古痴今狂终成空\n刀钝刃乏恩断义绝梦方破\n路荒已叹饱览足迹没人懂\n多年望眼欲穿过红尘滚滚我没看透\n自嘲墨尽千情万怨英杰愁\n曲终人散发花鬓白红颜殁\n烛残未觉与日争辉图消瘦\n当泪干血隐狂涌白雪纷飞都成红\n爱已走到尽头恨也放弃承诺\n命运自认幽默想法太多由不得我\n壮志凌云几分愁知己难逢几人留\n再回首却闻笑传醉梦\n笑叹词穷古痴今狂终成空\n刀钝刃乏恩断义绝梦方破\n路荒已叹饱览足迹没人懂\n多年望眼欲穿过红尘滚滚我没看透\n自嘲墨尽千情万怨英杰愁\n曲终人散发花鬓白红颜殁\n烛残未觉与日争辉图消瘦\n当泪干血隐狂涌白雪纷飞都成红\n笑叹词穷古痴今狂终成空\n刀钝刃乏恩断义绝梦方破\n路荒已叹饱览足迹没人懂\n多年望眼欲穿过红尘滚滚我没看透\n自嘲墨尽千情万怨英杰愁\n曲终人散发花鬓白红颜殁\n烛残未觉与日争辉图消瘦\n当泪干血隐狂涌白雪纷飞都成红歌名:半壶纱
作者:刘珂矣&百慕三石
演唱:刘珂矣
歌词:
墨已入水渡一池青花\n揽五分红霞采竹回家\n悠悠风来 埋一地桑麻\n一身袈裟 把相思放下\n十里桃花待嫁的年华\n凤冠的珍珠 挽进头发\n檀香拂过玉镯弄轻纱\n空留一盏 芽色的清茶\n倘若我心中的山水\n你眼中都看到\n我便一步一莲花祈祷\n怎知那浮生一片草\n岁月催人老\n风月花鸟 一笑尘缘了\n十里桃花待嫁的年华\n凤冠的珍珠 挽进头发\n檀香拂过玉镯弄轻纱\n空留一盏 芽色的清茶\n倘若我心中的山水\n你眼中都看到\n我便一步一莲花祈祷\n怎知那浮生一片草\n岁月催人老\n风月花鸟 一笑尘缘了\n倘若我心中的山水 你眼中都看到\n我便一步一莲花祈祷\n怎知那浮生一片草 岁月催人老\n风月花鸟 一笑尘缘了\n怎知那浮生一片草 岁月催人老\n风月花鸟 一笑尘缘了

C语言动态链表实现KTV点歌系统相关推荐

  1. 对大一C语言的课程设计——KTV点歌系统的介绍(链表)

    写此博客的目的:一是为了让自己对链表的思考方式更加的清晰,二是对不清楚链表实现方式的讲解! 所有的菜单都没有进行讲解,太简单.另外建议写这种比较大的程序的时候,不要着急先写菜单,要先把每一个功能实现完 ...

  2. C语言课程设计-KTV点歌系统

    需求分析: 1.设计题目:KTV点歌系统模拟(该系统是一个常用的ktv点歌系统,可以让用户根据自己的喜好进行添加.查看.删除等操作.系统应该具有便捷.稳定.功能齐全的特点.) 2.系统功能需求分析: ...

  3. 大一课设ktv点歌系统c语言

    先给出要求: 设计一个KTV点歌系统,该系统的主要功能是管理员对歌曲进行管理.统计等操作.以及用户根据关键字或风格等对歌曲进行查询等操作 程序主函数:系统入口,监控程序运行. 系统界面要求:接收键盘输 ...

  4. 【计算机毕业设计】KTV点歌系统

    一.系统截图(需要演示视频可以私聊) 摘 要 本论文主要论述了如何使用JAVA语言开发一个KTV点歌系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发. ...

  5. KTV点歌系统数据库设计文档

    KTV点歌系统数据库设计文档 前台e-r图 后台 E-R 3.数据库字典 SwanInfo(歌星表) 中文名 英文名 数据类型 大小 约束 备注 歌星编号 SwanID varchar 20 主键, ...

  6. 星梦小组KTV点歌系统简介

    班 级:19级青鸟3班 组 名:星梦小组 班主任:王欣欣老师 指导老师:穆雄雄老师 组 长:刘娜 副组长:王宝兴.汪杰 小组成员:汪杰.方传森.王宝兴.赵燕涵.云善辉.丁长琨.翟选浩.蔺广兴.王建业. ...

  7. java毕业设计KTV点歌系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计KTV点歌系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计KTV点歌系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S架构 ...

  8. 管理系统之KTV点歌系统

    管理系统之KTV点歌系统 KTV点歌系统主要包括两部分,管理者界面和用户界面.管理者可以实现歌曲的录入,增加,删除,修改查找.而用户则可以实现歌曲的查找和将歌曲加入到歌单里以及删除或置顶.系统现在还不 ...

  9. 音创a55怎么安装系统_音创ktv点歌系统_音创点歌机怎么样_音创ktv点歌系统a55

    音创KTV点歌系统是一款非常易用的电脑KTV点歌软件.本软件能够帮助KTV经营商非常方便地大点KTV点歌管理系统,同时也很适合家庭个人用户使用,支持海量的视频.音频格式,拥有全面的点歌功能. 1.点歌 ...

  10. 毕业设计源码Java基于ssm的KTV点歌系统的实现

    毕业设计源码从哪找 毕业设计源码下载网站推荐 开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工 ...

最新文章

  1. 一步一图,带你走进 Netty 的世界!
  2. makefile 基础用法
  3. tomcat中间件的默认端口号_等保2.0涉及的Apache Tomcat中间件(下)
  4. when will ifm open?
  5. 曾隐姓埋名28年,两弹一星元勋于敏逝世
  6. python基础元组和列表区别(六)
  7. gateway配置mysql_使用Gateway配置路由以及动态路由
  8. 从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧
  9. iPhone不送充电器?工信部发话了
  10. 【世界精品宝珀腕表win7主题】
  11. python如何识别中文_python 判断是否为中文
  12. 神经网络之输出层设计
  13. mac 苹果系统安装pygame环境插件
  14. c++的一些小知识点
  15. 记一次重装系统后恢复EFS加密文件过程
  16. 杭州学军中学信友队趣味网络邀请赛 总结
  17. 实验三 面向对象(二)(预习报告)
  18. 微信小程序解密出来是乱码的问题
  19. 树莓派3B+ 安装 `ReSpeaker 4-Mics Pi HAT` 声卡,录音与播放
  20. bili—Excel零基础入门进阶到函数

热门文章

  1. 【优化】如何检测移动端 CPU 以及内存占用率
  2. 51nod 更难的矩阵取数问题 + 滚动数组优化
  3. “读心术”再升级,数字识别准确率可达90%
  4. PHP 判断常量,变量和函数是否存在
  5. 详解 Spring 3.0 基于 Annotation 的依赖注入实现
  6. Shell账户管理,用户和组管理
  7. 关于对网络学习方法的一点见解
  8. 如何让普通人了解网络隐私的重要性
  9. 2.UML2 软件建模入门与提高 --- UML入门基础
  10. 2.Dockerfile