469 lines
18 KiB
C
469 lines
18 KiB
C
//
|
||
// Created by CC-star on 25-5-9.
|
||
// (1) 管理员功能:
|
||
//歌曲信息管理: 歌曲信息添加,查询,修改,删除,存盘,浏览等。
|
||
//歌曲信息至少包括: 编号,歌手名,歌曲名,歌曲类别等。
|
||
|
||
#include <stdio.h>
|
||
#include <string.h>
|
||
#include <dirent.h>
|
||
#include "../Shear/C3_shear.h"
|
||
|
||
extern int songCount;
|
||
|
||
// 更新歌曲信息功能
|
||
void Update_MusicInfo() {
|
||
Read_MuiscFile();
|
||
if (songCount > 0) {
|
||
FILE *fp = fopen(MUSIC_PATH, "w");
|
||
if (fp == NULL) {
|
||
printf("无法打开文件进行写入:%s\n", MUSIC_PATH);
|
||
return;
|
||
}
|
||
for (int i = 0; i < songCount; i++) {
|
||
// 编号-歌手名-歌曲名-歌曲类别
|
||
fprintf(fp, "%d-%s-%s-%s\n",
|
||
SongList[i].id,
|
||
SongList[i].artist,
|
||
SongList[i].name,
|
||
SongList[i].category);
|
||
}
|
||
fclose(fp);
|
||
printf("歌曲信息更新成功,写入%d首歌\n",songCount);
|
||
} else {
|
||
printf("未找到任何歌曲,不需要写入文件\n");
|
||
}
|
||
}
|
||
|
||
|
||
//歌曲修改
|
||
void Alter_MusicInfo() {
|
||
Read_MuiscFile();
|
||
if (songCount > 0) {
|
||
FILE *fp = fopen(MUSIC_PATH, "r");
|
||
if (fp == NULL) {
|
||
printf("无法打开文件进行写入:%s\n", MUSIC_PATH);
|
||
return;
|
||
}
|
||
int opt,a,b;
|
||
char c1[100],c2[100];
|
||
while (1) {
|
||
printf("\n---------------------👇歌曲信息修改依据👇----------------------\n");
|
||
printf("1:id\n2.歌曲名\n3.歌手名\n4.歌曲类别\n");
|
||
printf("0.返回控制台\n");
|
||
printf("-----------------------👆选择对应数字👆------------------------\n");
|
||
printf("请输入选择:");
|
||
scanf("%d", &opt);
|
||
while(getchar() != '\n');
|
||
switch (opt) {
|
||
case 1:
|
||
printf("请输入需要修改的id(整数):");
|
||
scanf("%d", &a);
|
||
while(getchar() != '\n');
|
||
// 先显示匹配的歌曲信息
|
||
printf("\n---------------------👇匹配的歌曲信息👇----------------------\n");
|
||
int found = 0;
|
||
for (int i = 0; i < songCount; ++i) {
|
||
if (a == SongList[i].id) {
|
||
printf("%d-%s-%s-%s\n", SongList[i].id, SongList[i].artist, SongList[i].name, SongList[i].category);
|
||
found = 1;
|
||
}
|
||
}
|
||
|
||
if (!found) {
|
||
printf("未找到ID为%d的歌曲,无法进行修改操作\n", a);
|
||
break;
|
||
}
|
||
printf("-----------------------👆歌曲信息👆------------------------\n");
|
||
|
||
printf("请输入修改后的id(整数):");
|
||
scanf("%d", &b);
|
||
while(getchar() != '\n');
|
||
for (int i = 0; i < songCount; i++) {
|
||
if (b == SongList[i].id) {
|
||
printf("您输入的修改后的ID:%d,已存在,无法进行修改操作\n", b);
|
||
return;
|
||
}
|
||
}
|
||
|
||
printf("确认修改ID?(1.是,0.否):");
|
||
int confirm;
|
||
scanf("%d", &confirm);
|
||
while(getchar() != '\n');
|
||
if (!confirm) {
|
||
printf("已取消修改操作\n");
|
||
break;
|
||
}
|
||
//开始改
|
||
for (int i = 0; i < songCount; ++i) {
|
||
if (a == SongList[i].id) {
|
||
char old_filename[256], new_filename[256];
|
||
|
||
sprintf(old_filename, "%s/%d-%s-%s-%s.mp3",
|
||
MRES_PATH,
|
||
SongList[i].id,
|
||
SongList[i].artist,
|
||
SongList[i].name,
|
||
SongList[i].category);
|
||
|
||
SongList[i].id = b;
|
||
|
||
sprintf(new_filename, "%s/%d-%s-%s-%s.mp3",
|
||
MRES_PATH,
|
||
SongList[i].id,
|
||
SongList[i].artist,
|
||
SongList[i].name,
|
||
SongList[i].category);
|
||
|
||
if (rename(old_filename, new_filename) == 0) {
|
||
printf("歌曲 %s 的ID修改成功,文件已重命名\n", SongList[i].name);
|
||
} else {
|
||
printf("文件重命名失败,请检查文件是否存在\n");
|
||
}
|
||
fclose(fp);
|
||
printf("歌曲信息自动更新中...\n");
|
||
Update_MusicInfo();
|
||
printf("修改完成,返回控制台\n");
|
||
return;
|
||
}
|
||
}
|
||
break;
|
||
case 2:
|
||
printf("请输入需要修改的歌曲名:");
|
||
scanf("%[^\n]", c1);
|
||
while(getchar() != '\n');
|
||
printf("\n---------------------👇匹配的歌曲信息👇----------------------\n");
|
||
found = 0;
|
||
for (int i = 0; i < songCount; ++i) {
|
||
if (strcmp(c1, SongList[i].name) == 0) {
|
||
printf("%d-%s-%s-%s\n", SongList[i].id, SongList[i].artist, SongList[i].name, SongList[i].category);
|
||
found = 1;
|
||
}
|
||
}
|
||
if (!found) {
|
||
printf("未找到歌曲名为%s的歌曲,无法进行修改操作\n", c1);
|
||
break;
|
||
}
|
||
printf("-----------------------👆歌曲信息👆------------------------\n");
|
||
|
||
|
||
|
||
printf("请输入修改后的歌曲名:");
|
||
scanf("%[^\n]", c2);
|
||
while(getchar() != '\n');
|
||
for (int i = 0; i < songCount; i++) {
|
||
if (strcmp(c2, SongList[i].name) == 0) {
|
||
printf("您输入的修改后的歌曲名:%s,已存在,无法进行修改操作\n", c2);
|
||
return;
|
||
}
|
||
}
|
||
|
||
printf("确认修改歌曲名?(1.是,0.否):");
|
||
scanf("%d", &confirm);
|
||
while(getchar() != '\n');
|
||
if (!confirm) {
|
||
printf("已取消修改操作\n");
|
||
break;
|
||
}
|
||
|
||
for (int i = 0; i < songCount; ++i) {
|
||
if (strcmp(c1, SongList[i].name) == 0) {
|
||
char old_filename[256], new_filename[256];
|
||
|
||
sprintf(old_filename, "%s/%d-%s-%s-%s.mp3",
|
||
MRES_PATH,
|
||
SongList[i].id,
|
||
SongList[i].artist,
|
||
SongList[i].name,
|
||
SongList[i].category);
|
||
|
||
strcpy(SongList[i].name, c2);
|
||
|
||
sprintf(new_filename, "%s/%d-%s-%s-%s.mp3",
|
||
MRES_PATH,
|
||
SongList[i].id,
|
||
SongList[i].artist,
|
||
SongList[i].name,
|
||
SongList[i].category);
|
||
|
||
if (rename(old_filename, new_filename) == 0) {
|
||
printf("歌曲名修改成功,文件已重命名\n");
|
||
} else {
|
||
printf("文件重命名失败,请检查文件是否存在\n");
|
||
}
|
||
fclose(fp);
|
||
printf("歌曲信息自动更新中...\n");
|
||
Update_MusicInfo();
|
||
printf("修改完成,返回控制台\n");
|
||
return;
|
||
}
|
||
}
|
||
break;
|
||
case 3:
|
||
printf("请输入需要修改的歌手名:");
|
||
scanf("%[^\n]", c1);
|
||
while(getchar() != '\n');
|
||
|
||
printf("\n---------------------👇匹配的歌曲信息👇----------------------\n");
|
||
found = 0;
|
||
for (int i = 0; i < songCount; ++i) {
|
||
if (strcmp(c1, SongList[i].artist) == 0) {
|
||
printf("%d-%s-%s-%s\n", SongList[i].id, SongList[i].artist, SongList[i].name, SongList[i].category);
|
||
found = 1;
|
||
}
|
||
}
|
||
|
||
if (!found) {
|
||
printf("未找到匹配的歌手名,无法进行修改操作\n");
|
||
break;
|
||
}
|
||
printf("-----------------------👆歌曲信息👆------------------------\n");
|
||
|
||
|
||
|
||
printf("请输入修改后的歌手名:");
|
||
scanf("%[^\n]", c2);
|
||
while(getchar() != '\n');
|
||
|
||
printf("确认修改所有匹配歌曲的歌手名?(1.是,0.否):");
|
||
scanf("%d", &confirm);
|
||
while(getchar() != '\n');
|
||
if (!confirm) {
|
||
printf("已取消修改操作\n");
|
||
break;
|
||
}
|
||
|
||
for (int i = 0; i < songCount; ++i) {
|
||
if (strcmp(c1, SongList[i].artist) == 0) {
|
||
char old_filename[256], new_filename[256];
|
||
|
||
sprintf(old_filename, "%s/%d-%s-%s-%s.mp3",
|
||
MRES_PATH,
|
||
SongList[i].id,
|
||
SongList[i].artist,
|
||
SongList[i].name,
|
||
SongList[i].category);
|
||
|
||
strcpy(SongList[i].artist, c2);
|
||
|
||
|
||
sprintf(new_filename, "%s/%d-%s-%s-%s.mp3",
|
||
MRES_PATH,
|
||
SongList[i].id,
|
||
SongList[i].artist,
|
||
SongList[i].name,
|
||
SongList[i].category);
|
||
|
||
if (rename(old_filename, new_filename) == 0) {
|
||
printf("歌曲 %s 的歌手名修改成功,文件已重命名\n", SongList[i].name);
|
||
} else {
|
||
printf("歌曲 %s 的文件重命名失败,请检查文件是否存在\n", SongList[i].name);
|
||
}
|
||
}
|
||
}
|
||
fclose(fp);
|
||
printf("歌曲信息自动更新中...\n");
|
||
Update_MusicInfo();
|
||
printf("修改完成,返回控制台\n");
|
||
return;
|
||
|
||
case 4:
|
||
printf("请输入需要修改的歌曲类别:");
|
||
scanf("%[^\n]", c1);
|
||
while(getchar() != '\n');
|
||
printf("\n---------------------👇匹配的歌曲信息👇----------------------\n");
|
||
found = 0;
|
||
for (int i = 0; i < songCount; ++i) {
|
||
if (strcmp(c1, SongList[i].category) == 0) {
|
||
printf("%d-%s-%s-%s\n", SongList[i].id, SongList[i].artist, SongList[i].name, SongList[i].category);
|
||
found = 1;
|
||
}
|
||
}
|
||
|
||
if (!found) {
|
||
printf("未找到匹配的歌曲类别,无法进行修改操作\n");
|
||
break;
|
||
}
|
||
printf("-----------------------👆歌曲信息👆------------------------\n");
|
||
|
||
|
||
printf("请输入修改后的歌曲类别:");
|
||
scanf("%[^\n]", c2);
|
||
while(getchar() != '\n');
|
||
|
||
|
||
printf("确认修改所有匹配歌曲的类别?(1.是,0.否):");
|
||
scanf("%d", &confirm);
|
||
while(getchar() != '\n');
|
||
if (!confirm) {
|
||
printf("已取消修改操作\n");
|
||
break;
|
||
}
|
||
|
||
for (int i = 0; i < songCount; ++i) {
|
||
if (strcmp(c1, SongList[i].category) == 0) {
|
||
char old_filename[256], new_filename[256];
|
||
|
||
|
||
sprintf(old_filename, "%s/%d-%s-%s-%s.mp3",
|
||
MRES_PATH,
|
||
SongList[i].id,
|
||
SongList[i].artist,
|
||
SongList[i].name,
|
||
SongList[i].category);
|
||
|
||
strcpy(SongList[i].category, c2);
|
||
|
||
|
||
sprintf(new_filename, "%s/%d-%s-%s-%s.mp3",
|
||
MRES_PATH,
|
||
SongList[i].id,
|
||
SongList[i].artist,
|
||
SongList[i].name,
|
||
SongList[i].category);
|
||
|
||
if (rename(old_filename, new_filename) == 0) {
|
||
printf("歌曲 %s 的类别修改成功,文件已重命名\n", SongList[i].name);
|
||
} else {
|
||
printf("歌曲 %s 的文件重命名失败,请检查文件是否存在\n", SongList[i].name);
|
||
}
|
||
}
|
||
}
|
||
fclose(fp);
|
||
printf("歌曲信息自动更新中...\n");
|
||
Update_MusicInfo();
|
||
printf("修改完成,返回控制台\n");
|
||
return;
|
||
case 0:
|
||
printf("⚠️返回控制台中...⚠️\n");
|
||
return;
|
||
default:
|
||
printf("⚠️输入有误,请重新输入⚠️\n");
|
||
break;
|
||
}
|
||
}
|
||
|
||
} else {
|
||
printf("未找到任何歌曲,无法修改文件\n");
|
||
}
|
||
}
|
||
|
||
|
||
//删除歌曲
|
||
void Delete_MusicInfo() {
|
||
Read_MuiscFile();
|
||
if (songCount <= 0) {
|
||
printf("曲库为空,无法执行删除操作\n");
|
||
return;
|
||
}
|
||
|
||
FILE *fp = fopen(MUSIC_PATH, "r");
|
||
if (fp == NULL) {
|
||
printf("无法打开文件进行读取:%s\n", MUSIC_PATH);
|
||
return;
|
||
}
|
||
|
||
int a;
|
||
printf("请输入需要删除的歌曲的id(整数):");
|
||
scanf("%d", &a);
|
||
while(getchar() != '\n');
|
||
printf("\n---------------------👇匹配的歌曲信息👇----------------------\n");
|
||
int found = 0;
|
||
int index ; // 删除的歌曲的索引
|
||
for (int i = 0; i < songCount; ++i) {
|
||
if (a == SongList[i].id) {
|
||
printf("%d-%s-%s-%s\n", SongList[i].id, SongList[i].artist, SongList[i].name, SongList[i].category);
|
||
found = 1;
|
||
index = i;
|
||
}
|
||
}
|
||
if (!found) {
|
||
printf("未找到ID为%d的歌曲,无法进行删除操作\n", a);
|
||
fclose(fp);
|
||
return;
|
||
}
|
||
printf("-----------------------👆歌曲信息👆------------------------\n");
|
||
|
||
printf("确认删除此歌曲?(1.是,0.否):");
|
||
int confirm;
|
||
scanf("%d", &confirm);
|
||
while(getchar() != '\n');
|
||
if (!confirm) {
|
||
printf("已取消删除操作\n");
|
||
fclose(fp);
|
||
return;
|
||
}
|
||
char filename[256];
|
||
sprintf(filename, "%s/%d-%s-%s-%s.mp3",
|
||
MRES_PATH,
|
||
SongList[index].id,
|
||
SongList[index].artist,
|
||
SongList[index].name,
|
||
SongList[index].category);
|
||
|
||
if (remove(filename) == 0) {
|
||
printf("歌曲文件删除成功: %s\n", filename);
|
||
} else {
|
||
printf("歌曲文件删除失败,请检查文件是否存在\n");
|
||
}
|
||
|
||
for (int i = index; i < songCount - 1; i++) {
|
||
SongList[i] = SongList[i + 1];
|
||
}
|
||
songCount--;
|
||
|
||
printf("歌曲 %s 已从曲库中删除\n", SongList[index].name);
|
||
fclose(fp);
|
||
|
||
printf("歌曲信息自动更新中...\n");
|
||
Update_MusicInfo();
|
||
printf("删除操作完成,返回控制台\n");
|
||
}
|
||
|
||
int C3_Admin() {
|
||
char password[10];
|
||
printf("请输入管理员密码: ");
|
||
scanf("%s", password);
|
||
if (strcmp(password,"1") == 0) {
|
||
while (1) {
|
||
printf("\n---------------------👇管理员控制面板👇----------------------\n");
|
||
printf("1. 歌曲信息覆盖\n");
|
||
printf("2. 歌曲查询\n");
|
||
printf("3. 歌曲修改\n");
|
||
printf("4. 歌曲删除\n");
|
||
printf("5. 歌曲浏览\n");
|
||
printf("0.返回控制台\n");
|
||
printf("-----------------------👆选择对应数字👆------------------------\n");
|
||
printf("请输入选择:");
|
||
int opt;
|
||
scanf("%d", &opt);
|
||
while(getchar() != '\n');
|
||
switch (opt) {
|
||
case 1://歌曲信息更新
|
||
Update_MusicInfo();
|
||
break;
|
||
case 2://歌曲查询
|
||
Song_query();
|
||
break;
|
||
case 3://歌曲修改
|
||
Alter_MusicInfo();
|
||
break;
|
||
case 4://歌曲删除
|
||
Delete_MusicInfo();
|
||
break;
|
||
case 5://歌曲浏览
|
||
BrowseSongs();
|
||
break;
|
||
case 0:
|
||
printf("⚠️返回主控制台中...⚠️\n");
|
||
return 0;
|
||
default:
|
||
printf("⚠️输入有误,请重新输入⚠️\n");
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|