469 lines
18 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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("1id\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;
}
}
}
}