点歌台管理系统
当今社会生活节奏快,压力大,需要唱唱歌来放松,现有一ktv点歌设备公司拟使用C话言开
发一款ktv点歌管理系统,功能包括但不限于如下:
1.该系统可以有管理员,管理员登录之后可以新增,删除,查找,修改歌曲的信息。2.该系统可以由管理员启动点歌模式,可以设置本次消费时长,可以延长本次消费时间3.客户可根据歌曲的风格,拼音首字母,歌手名字等相关信息进行点歌
4.已点歌曲列表可以进行歌曲置顶,删除等操作5.可以提供热歌榜,新歌榜等相关内容方便客户进行点歌6.所有的相关数据都应使用文件进行持文化保存
https://blog.csdn.net/qq_35960743/article/details/122408272
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 歌曲结构体
typedef struct Song {
char name[100];
char artist[100];
char style[100];
struct Song* next;
} Song;
// 歌曲列表结构体
typedef struct SongList {
Song* head;
int count;
} SongList;
// 初始化歌曲列表
SongList* initSongList() {
SongList* list = (SongList*)malloc(sizeof(SongList));
list->head = NULL;
list->count = 0;
return list;
}
// 添加歌曲
void addSong(SongList* list, const char* name, const char* artist, const char* style) {
Song* song = (Song*)malloc(sizeof(Song));
strcpy(song->name, name);
strcpy(song->artist, artist);
strcpy(song->style, style);
song->next = NULL;
if (list->head == NULL) {
list->head = song;
}
else {
Song* current = list->head;
while (current->next != NULL) {
current = current->next;
}
current->next = song;
}
list->count++;
}
// 删除歌曲
void deleteSong(SongList* list, const char* name) {
if (list->head == NULL) {
return;
}
if (strcmp(list->head->name, name) == 0) {
Song* temp = list->head;
list->head = list->head->next;
free(temp);
list->count--;
return;
}
Song* current = list->head;
while (current->next != NULL) {
if (strcmp(current->next->name, name) == 0) {
Song* temp = current->next;
current->next = current->next->next;
free(temp);
list->count--;
return;
}
current = current->next;
}
}
// 查找歌曲
Song* findSong(SongList* list, const char* name) {
Song* current = list->head;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
return current;
}
current = current->next;
}
return NULL;
}
// 修改歌曲信息
void modifySong(Song* song, const char* name, const char* artist, const char* style) {
strcpy(song->name, name);
strcpy(song->artist, artist);
strcpy(song->style, style);
}
// 显示歌曲列表
void displaySongList(SongList* list) {
Song* current = list->head;
printf("歌曲列表:\n");
while (current != NULL) {
printf("歌曲名称:%s\n", current->name);
printf("歌手:%s\n", current->artist);
printf("风格:%s\n", current->style);
printf("-------------------\n");
current = current->next;
}
}
// 保存歌曲列表到文件
void saveSongListToFile(SongList* list, const char* filename) {
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件\n");
return;
}
Song* current = list->head;
while (current != NULL) {
fprintf(file, "%s,%s,%s\n", current->name, current->artist, current->style);
current = current->next;
}
fclose(file);
printf("歌曲列表保存成功\n");
}
// 从文件加载歌曲列表
SongList* loadSongListFromFile(const char* filename) {
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("无法打开文件\n");
return NULL;
}
SongList* list = initSongList();
char line[300];
while (fgets(line, sizeof(line), file)) {
char* name = strtok(line, ",");
char* artist = strtok(NULL, ",");
char* style = strtok(NULL, "\n");
addSong(list, name, artist, style);
}
fclose(file);
printf("歌曲列表加载成功\n");
return list;
}
int main() {
SongList* songList = initSongList();
char filename[100] = "songlist.txt";
songList = loadSongListFromFile(filename);
int choice;
while (1) {
printf("请选择操作:\n");
printf("1. 添加歌曲\n");
printf("2. 删除歌曲\n");
printf("3. 查找歌曲\n");
printf("4. 修改歌曲信息\n");
printf("5. 显示歌曲列表\n");
printf("6. 保存歌曲列表到文件\n");
printf("0. 退出\n");
scanf("%d", &choice);
if (choice == 1) {
char name[100], artist[100], style[100];
printf("请输入歌曲名称:");
scanf("%s", name);
printf("请输入歌手:");
scanf("%s", artist);
printf("请输入风格:");
scanf("%s", style);
addSong(songList, name, artist, style);
printf("歌曲添加成功\n");
}
else if (choice == 2) {
char name[100];
printf("请输入要删除的歌曲名称:");
scanf("%s", name);
deleteSong(songList, name);
printf("歌曲删除成功\n");
}
else if (choice == 3) {
char name[100];
printf("请输入要查找的歌曲名称:");
scanf("%s", name);
Song* song = findSong(songList, name);
if (song != NULL) {
printf("歌曲名称:%s\n", song->name);
printf("歌手:%s\n", song->artist);
printf("风格:%s\n", song->style);
}
else {
printf("未找到该歌曲\n");
}
}
else if (choice == 4) {
char name[100], artist[100], style[100];
printf("请输入要修改的歌曲名称:");
scanf("%s", name);
Song* song = findSong(songList, name);
if (song != NULL) {
printf("请输入新的歌曲名称:");
scanf("%s", name);
printf("请输入新的歌手:");
scanf("%s", artist);
printf("请输入新的风格:");
scanf("%s", style);
modifySong(song, name, artist, style);
printf("歌曲信息修改成功\n");
}
else {
printf("未找到该歌曲\n");
}
}
else if (choice == 5) {
displaySongList(songList);
}
else if (choice == 6) {
saveSongListToFile(songList, filename);
}
else if (choice == 0) {
break;
}
else {
printf("无效的选择\n");
}
}
return 0;
}
最近怎么这么多C语言编程题,都还是稍微有点复杂度的,是不是期末课题作业啊?
https://blog.csdn.net/qq_35960743/article/details/125130464
项目四 KTV点歌系统 题目背景 ⚫ 模拟一个KTV点歌系统 主界面参考 需要实现的功能 ⚫ 管理员功能: ⚫ 管理员登录、退出,密码修 改等 ⚫ 歌曲信息查询 ⚫ 歌曲增加、修改、删除 ⚫ 歌曲排行 ⚫ 用户功能: ⚫ 点歌(歌星姓名,歌曲名等) ⚫ 查看已点歌曲 ⚫ 歌曲置顶、删除、切歌等 ⚫ 歌曲评分 管理员功能简介 管理员界面参考 管理员登录与注销 ⚫ 需检查管理员ID和密码的正确性 (可以设定一个固定的ID和密码) 设定账号输入次数,比如失败三次, 自动锁定系统。密码修改时,需要 输入一次旧密码、两次新密码,若 两次新密码不一致,或新密码和旧 密码一样,则修改失败 歌曲信息查询 注意:在曲库中存在唯一一个 表示每首歌曲的信息,如:ID 歌曲状态0表示正在 播放,1表示未播放 歌曲信息的增加、删除和修改 ⚫ 在系统中增加新的歌曲 ⚫ 添加歌曲时,如果歌曲存在则添加失败;否则添加新的歌曲(序号递增,e.g. 7 + 1 → 8) ⚫ 批量添加歌曲 ⚫ 在系统中删除不需要的并且未在播放的歌曲(删除后对剩余歌曲按照当前顺序重新编号) ⚫ 歌曲排序,可以按照播放量或者用户评分或者其他方式对歌曲进行排 序 用户功能简介 用户界面参考 歌曲搜索 ⚫ 用户点歌 ⚫ 歌星点歌 ⚫ 歌曲名点歌(歌曲拼音查找, 精确查找等) (a)歌星点歌 (b)歌曲名点歌 (c)歌曲名点歌 查看已点歌曲 ⚫ 查看已点歌曲 ⚫ 歌曲评分 ⚫ 歌曲置顶、移除、切歌等 附加说明 注意事项 ⚫ 提供的文件列表(提供txt文件),txt中分隔符为\t以及\n。 ⚫ 歌曲清单文件(系统中歌曲分页展示, 每页歌曲列表不超过10个) ⚫ 批量导入的歌曲清单文件 ⚫ 管理员ID 不超过20个字符,只能由大小写字母或数字组成 ⚫ 密码 不超过12个字符,必须同时包括大小写字母和数字,登陆时,应检查管理 员ID和密码格式 ⚫ 用户评分:评分范围为1-5星,初始歌单所有歌曲评分默认为0 ⚫ 禁用条目 ⚫ 禁止使用其他编程语言,只能使用C/C++语言。 ⚫ 禁止使用SQL或MySQL等数据库软件。 时间节点 ⚫ 设计文档(满分30分):5月31日10点满分提交截止(作业提交功能开放, 以提交时间作为依据),要求和项目一、项目二一致。 ⚫ 基本程序代码(满分100分):6月7日10点截止(作业提交功能开放,以提 交时间作为依据) ⚫ 完成管理员和用户的基本功能,并通过测试,可以获得70分。 ⚫ 实现良好的展示界面,可以获得30分。 ⚫ 实验报告(满分30分): 6月7日10点截止(作业提交功能开放,以提交时 间作为依据),要求和项目一、项目二一致。 ⚫ 创新功能实现(满分40分):额外实现项目说明中没有列出的创新功能,1 个功能10分。创新功能必须在实验报告中说明体现。 ———————————————— 版权声明:本文为CSDN博主「_程序设计_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
查看更多项目功能和描述,以及程序代码下载