歌曲信息管理系统[低配版]

这篇具有很好参考价值的文章主要介绍了歌曲信息管理系统[低配版]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 选题背景

1.1 时代背景

随着时代的快速发展, 听歌是人们常见的一种放松的方式. 听歌可以使得我们进入一个属于自己的自由世界.
当然, 不同的歌曲是有不一样的属性. 比如: 激情的歌曲会让人进入一个亢奋的转态, 抒情的歌曲会让人思绪万千… …
所以, 歌曲信息是值得存储的, 尤其是歌手(一般歌手会有自己的一种属性), 歌曲属性, 这样可以使得我们可以快速地找到最属于自己的一份歌单
1.2 程序功能

程序的主要功能就是按照歌曲属性来存储歌曲, 创建一个属于自己的临时歌单
(1) 首先界面出现提示, 选择自己的选项进行操作
(2) 随后就可以进行存储歌曲信息, 修改歌曲信息, 删除歌曲信息… …

2. 设计分析

2.1 menu函数
menu函数 — — 完成选择界面的打印
2.2 MusicEqual函数
MusicEqual函数 — ---- 判断两个歌曲是否相同
2.3 BuyNode函数
BuyNode函数 — — 增加新的结点
2.4 MusicShow函数
MusicShow函数 ---- ---- 歌曲信息的打印
2.5 MusicStorage函数
MusicStorage函数 — — 存储歌曲信息
2.6 MusicFind函数
MusicFind函数 — — 查询歌曲位置
2.7 MusicDele函数
MusicDele函数 ---- ---- 删除歌曲信息
2.8 MusicModify函数
MusicModify函数 ---- ----- 修改歌曲信息

3. 程序说明

结构采用的是用单链表的形式, 其中的存放歌曲数据的data 用的也是一个结构体类型
依托这个单链表的基本结构进行下面的增删查改一系列的操作.

4. 关键代码分析

4.1 MusicEqual && BuyNode
由于歌曲信息是一个结构体, 属于自定义类型, 运算符要进行运算符重载才可以使用
所以, 在此处, 我们用的是strcmp函数来进行比较, 利用strcpy函数来进行拷贝
4.2 MusicDele
结点的删除是使这个结点 和 整个链表结构断开联系, 而不是真正意义上的删除.
所以, 我们要找到这个结点的上一个位置(除非这个链表是空链表 或者是只有一个结点)
4.3 运用枚举使Switch语句更加易懂

5. 心得体会

课程设计是培养学生综合运用所学知识, 发现, 提出, 分析和解决实际问题,锻炼实践能力的重要环节, 是对学生实际工作能力的具体训练和考察过程.
随着科学技术发展的日新日异, C语言已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在.
这次课程设计让我学到了很多, 不仅是巩固了先前学的C语言的理论知识, 而且也培养了我的动手能力, 更令我的创造性思维得到拓展. 在本次的课程设计, 使我对单链表的机构有了更深层次的理解与感悟. 希望我在未来的学习生活中能够更好地应用它.

源码

# define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

typedef struct MusicInfor // 数据里面的内容
{
	char name[20];
	char singer[20];
	char type[20];
}MType;


typedef struct Music // 单链表形式
{
	MType data;
	struct Music* next;
}music;

int MusicEqual(music* x, MType y) // 判断是否相等
{
	if (strcmp(x->data.name, y.name) == 0 && strcmp(x->data.singer, y.singer) == 0 && strcmp(x->data.type, y.type) == 0)
		return 1;

	return 0;
}

music* BuyNode(MType x) // 增加新的节点
{
	music* newnode = (music*)malloc(sizeof(music));
	if (newnode == NULL)
	{
		perror("malloc fail");
		exit(-1);
	}

	memcpy(newnode->data.name, x.name, sizeof(x.name));
	memcpy(newnode->data.singer, x.singer, sizeof(x.singer));
	memcpy(newnode->data.type, x.type, sizeof(x.type));

	newnode->next = NULL;

	return newnode;
}

void MusicShow(music* phead) // 打印数据
{
	if (phead == NULL)
		printf("歌单并没有东西哦, 先去添加一下~~\n");
	else
	{
		music* cur = phead;
		while (cur)
		{
			printf("**********************************\n");
			printf("*歌名:%s                          \n", cur->data.name);
			printf("*歌手:%s                          \n", cur->data.singer);
			printf("*类型:%s                          \n", cur->data.type);

			cur = cur->next;
		}
	}
	printf("**********************************\n");
}

void MusicStorage(music** pphead) // 存储新的数据
{
	MType x;
	printf("请输入你要添加的歌曲>\n");
	scanf("%s", x.name);
	printf("请输入这首歌的歌手>\n");
	scanf("%s", x.singer);
	printf("请输入这首歌的类型>\n");
	scanf("%s", x.type);

	music* newnode = BuyNode(x);


	if (*pphead == NULL)
	{
		*pphead = newnode;
		printf("添加成功\n");
	}
	else
	{
		// 找尾
		music* tail = *pphead;
		while (tail->next != NULL)
		{
			tail = tail->next;
		}

		tail->next = newnode;

		printf("添加成功\n");
	}

}

void MusicFind(music* phead) // 查找, 有,返回位置; 没有, 返回一段话
{
	MType x;
	if (phead == NULL)
	{
		printf("该歌单是空的, 请添加歌曲\n");
		return;
	}

	printf("你想查询的歌曲>\n");
	scanf("%s", x.name);
	printf("这首歌的歌手是>\n");
	scanf("%s", x.singer);
	printf("这首歌的类型是>\n");
	scanf("%s", x.type);

	music* cur = phead;
	int len = 0;
	while (cur)
	{
		len++;
		if (MusicEqual(cur, x))
		{
			printf("该歌单有这首歌,这首歌的位置在%d\n", len);
			return;
		}

		cur = cur->next;
	}

	printf("该歌单没有此项目\n");
	return;

}

void MusicDele(music** pphead) // 删除
{
	MType x;
	if (*pphead == NULL)
		printf("亲,歌单里没有东西了,不要再删了~\n");

	printf("你想删除的歌曲>\n");
	scanf("%s", x.name);
	printf("这首歌的歌手是>\n");
	scanf("%s", x.singer);
	printf("这首歌的类型是>\n");
	scanf("%s", x.type);

	music* cur = *pphead;

	if (MusicEqual(cur, x))
	{
		*pphead = cur->next;
		free(cur);
		cur = NULL;
		printf("删除成功\n");

	}
	else
	{
		while (cur != NULL && !MusicEqual(cur->next, x))
		{
			cur = cur->next;
		}

		music* tem = cur->next;
		cur->next = tem->next;
		free(tem);
		tem = NULL;
		printf("删除成功\n");

	}
}

void MusicModify(music** pphead) //修改
{
	if (*pphead == NULL)
	{
		printf("该歌单里空落落的,不能修改哦~\n");
		return;
	}

	MType x;
	printf("请输入你要修改的原数据>\n");
	printf("歌名>\n");
	scanf("%s", x.name);
	printf("歌手\n");
	scanf("%s", x.singer);
	printf("类型>\n");
	scanf("%s", x.type);

	music* cur = *pphead;
	while (cur != NULL && !MusicEqual(cur, x))
	{
		cur = cur->next;
	}

	if (cur == NULL)
	{
		printf("该歌单里面并没有你要修改的数据, 请仔细检查之后再输入\n");
		return;
	}
	else
	{
		printf("修改后的歌名>\n");
		scanf("%s", cur->data.name);
		printf("修改后的歌手>\n");
		scanf("%s", cur->data.singer);
		printf("修改后的类型>\n");
		scanf("%s", cur->data.type);

		printf("修改成功\n");
	}

}

void menu()
{
	printf("+————————————————————————————————————————————————————————————+\n");
	printf("|    +———————————————————————————————————————+               |\n");
	printf("|    |            欢迎来到存歌环节           |               |\n");
	printf("|    |  0.exit                 1.storage     |               |\n");
	printf("|    |  2.find                 3.show        |               |\n");
	printf("|    |  4.modify               5.delete      |               |\n");
	printf("|    +———————————————————————————————————————+               |\n");
	printf("+————————————————————————————————————————————————————————————+\n");

}

int main()
{
	music* head = NULL;
	int input = 0;

	do
	{
		menu();
		enum Option
		{
			exit,
			storage,
			find,
			show,
			modify,
			delete
		};

		printf("请做出你的选选择> (0,1,2,3... ...)\n");
		scanf("%d", &input);

		switch (input)
		{
		case exit:
			break;
		case storage:
			MusicStorage(&head);
			break;
		case find:
			MusicFind(head);
			break;
		case show:
			MusicShow(head);
			break;
		case modify:
			MusicModify(&head);
			break;
		case delete:
			MusicDele(&head);
			break;
		default:
			printf("你输入的选项是错误的, 请重新输入>\n");
			break;
		}

	} while (input);

	return 0;

}

立志趁早点,上路轻松点,目光放远点,苦累看淡点,努力多一点,奋斗勇一点,胜利把名点,祝你折桂冠,成功新起点,幸福多一点,笑容亮一点.文章来源地址https://www.toymoban.com/news/detail-454146.html

到了这里,关于歌曲信息管理系统[低配版]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言点歌台歌曲信息管理

    20.点歌台歌曲信息管理(难度系数:4级) (1)任务描述 设计一个点歌台歌曲信息管理程序。 (2)功能要求 1.设计程序,使得有特殊密码的管理员可以完成点歌台上歌曲信息的输入、修改和删除。 2.为顾客提供按歌曲编号点播歌曲的功能,如果所输入编号没有,则提示出错,再次输入。

    2024年02月03日
    浏览(10)
  • 前后端分离的计算机毕设之基于springboot+vue的课程设计选题管理系统(内含源码+文档+教程)

    博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅 由于篇幅限制,想要获取完整文章或者源码,或者代做,拉到文章底部即可看到个人VX。 🍅 2023年

    2024年02月07日
    浏览(35)
  • qt实现信息管理系统(学生信息管理系统)功能更完善

    信息系统代码地址:https://gitee.com/dxl96/StdMsgSystem 本学生信息管理系统同升级改造的幅度较大,涉及到的东西对于初学者来说,可能稍显复杂,可以先移步到 https://blog.csdn.net/IT_CREATE/article/details/82027462 查看简易的系统。 本系统引入日志管理,数据库选择支持sqllite、mysql,自

    2024年02月13日
    浏览(35)
  • 健身房信息管理系统/健身房管理系统

    21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。 论文

    2023年04月27日
    浏览(27)
  • 驾校管理系统的设计与实现/驾校信息管理系统

    摘  要随着社会的发展,车辆也越来越多,计算机的优势和普及使得驾校管理系统的开发成为必需。驾校管理系统主要是借助计算机,通过对信息进行管理。减少管理员的工作,同时也方便广大学员对个人所需信息的及时查询以及管理,其次是大量信息的管理,最后是高度安

    2024年02月07日
    浏览(34)
  • 信息系统项目管理师:配置管理

    配置管理指的是在一个系统或软件中对配置项的管理,包括对配置项的定义、存储、跟踪和修改等一系列活动。配置项可以是硬件设备、软件组件、系统设置、网络配置等,配置管理旨在确保在不同时间点或环境下系统或软件的配置项的正确性和一致性。通过配置管理,可以

    2024年02月16日
    浏览(43)
  • 超市商品信息管理系统/超市管理系统的设计与实现

    摘  要 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多国家的之中,随之就产生了“超市商品信息管理系统”,这样就让超市商品信息管理系统更加方便简单。 对于本超市商品信息管理系统的设计来说,系统开发主要是采用j

    2024年02月02日
    浏览(30)
  • 信息系统项目管理师-项目沟通管理

    1.信息系统项目管理师-项目整合管理 2.信息系统项目管理师-项目范围管理 3.信息系统项目管理师-项目进度管理 4.信息系统项目管理师-项目成本管理 5.信息系统项目管理师-项目质量管理 6.信息系统项目管理师-项目资源管理 7.信息系统项目管理师-项目沟通管理 8.信息系统项目

    2023年04月16日
    浏览(34)
  • 社区老人健康信息管理系统|基于springboot社区老人健康信息管理系统设计与实现(源码+数据库+文档)

    社区老人健康信息管理系统目录 目录 基于springboot社区老人健康信息管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、健康信息管理 2、预约管理 3、公告管理 4、公告类型管理 四、数据库设计 1、实体ER图  五、核心代码  六、论文参考 七、最新计算机毕设

    2024年02月20日
    浏览(32)
  • 电影信息管理系统

    软件环境:IDEA+MySQL+Tomcat+Maven 项目技术:Spring+SpringMVC+MyBatis+Ajax+Shiro+layui+JSP 项目介绍:项目分为普通用户和管理员登录,用户登录后可以浏览热映的电影信息,或者下载相关视频,项目实时更新电影院数据,管理员可以在工作中查阅和管理信息,为了方便管理员更好的管理电

    2024年02月10日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包