// // Created by CC-star on 25-5-9. // (1) 管理员功能: //歌曲信息管理: 歌曲信息添加,查询,修改,删除,存盘,浏览等。 //歌曲信息至少包括: 编号,歌手名,歌曲名,歌曲类别等。 #include #include #include #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; } } } }