#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Song_Ranking
{
int ID; //歌曲编号
char Sname[20]; //歌曲名称
char singer[20]; //歌手名字
long ticket; //票数
struct Song_Ranking *next;
};
int option; //选项
struct Song_Ranking *head,*tail,*move; //head是头指针,tail是尾指针,move是代替head移动的指针
int n=0; //记录歌曲的数量
void function(); //各项功能函数
void choose(); //是否查看管理系统
void menu(); //菜单
void information(); //所有歌曲信息
void help(); //使用帮助
void input(); //输入歌曲信息
void write(); //歌曲信息写入文件
void look(); //浏览歌曲信息
void vote(); //对歌曲进行投票
void rank(); //top10排行榜
void quit(); //退出
int main()
{
head=(struct Song_Ranking *)malloc(sizeof(struct Song_Ranking));
if(!head)
{
printf("错误,结束!\n");
exit(0);
}
head->next=NULL;
menu();
return 0;
}
void choose()
{
printf("\n是否查看系统功能菜单:\n");
printf("\n1、是,0、否\n");
printf("\n输入:");
int t; //用来是否查看管理系统
scanf("%d",&t);
if(t==1) menu();
}
void function()
{
printf("请输入你要做的选项:");
scanf("%d",&option);
switch(option)
{
case 1:menu();break;
case 2:information();break;
case 3:help();break;
case 4:input();break;
case 5:look();break;
case 6:vote();break;
case 7:rank();break;
case 8:quit();
default:printf("\n已退出系统!!!\n");
}
}
void menu()
{
printf("\n\n");
printf("*---------------------2024.1.1-----------------------\n");
printf("* 歌曲排行榜管理系统 2.中有推荐歌曲,歌手 *\n");
printf("*****************************************************\n");
printf("********************系统功能菜单*********************\n");
printf("---------------------- --------------------------\n");
printf("*****************************************************\n");
printf("** 1、菜单 * 2、所有参赛歌曲信息 **\n");
printf("*****************************************************\n");
printf("** 3、使用说明 * 4、输入歌曲信息 **\n");
printf("*****************************************************\n");
printf("** 5、浏览歌曲信息 * 6、对歌曲进行投票 **\n");
printf("*****************************************************\n");
printf("** 7、TOP10排行榜 * 8、退出 **\n");
printf("*****************************************************\n");
printf("---------------------- --------------------------\n");
printf("\n\n");
system("pause");
function();
}
void information()
{
printf("所有歌曲信息如下:\n");
printf("\n歌曲编号 歌曲名称 歌手 票数\n");
printf("\n 001 《离别开出花》 就是南方凯 0 \n");
printf("\n 002 《我期待的不是雪》 张妙格 0 \n");
printf("\n 003 《圣诞星》 周杰伦 0 \n");
printf("\n 004 《我想念》 汪苏泷 0 \n");
printf("\n 005 《句号》 邓紫棋 0 \n");
printf("\n 006 《虚拟》 陈粒 0 \n");
printf("\n 007 《all my people》 0 \n");
printf("\n 作者:Alexandra Stan.Manill Maniacs \n");
printf("\n 008 《迟来的爱》 金润吉 0 \n");
printf("\n 009 《直到你降临》 阿肆 0 \n");
printf("\n 010 《姑娘别哭泣》 柯柯柯啊 0 \n");
printf("\n 酷狗:top500 前十 更新日期2024.1.1\n");
printf("\n 推荐歌曲 \n");
printf("\n s1 《刚好遇见你》 李玉刚 \n");
printf("\n s2 《我的纸飞机》 GooGoo 王之睿 \n");
printf("\n s3 《其实都没有》 于冬然 \n");
printf("\n s4 《向云端》 小霞 海洋Bo \n");
printf("\n s5 《Midnight City》 M83 \n");
printf("\n s6 《我会的》 承恒 \n");
printf("\n st1 《再次与你同行》 熊大熊二光头强 \n");
printf("\n st2 《盗墓笔记.十年人间》 李常超 \n");
printf("\n -推荐歌手- \n");
printf("\n t1 告五人 \n");
printf("\n t2 周杰伦 \n");
printf("\n t3 于冬然 \n");
printf("\n t4 周深 \n");
printf("\n t5 程响 \n");
printf("\n");
system("pause");
choose();
function();
}
void help()
{
printf("\n这是一个歌曲排行榜的菜单化信息管理程序,为了您能更快的去了解使用它,请您仔细阅读以下注意事项:\n");
printf("\n\t\t注意事项:\n");
printf("\n\t1、当您第一次使用该系统时,建议您先输出歌曲的信息并存储!\n");
printf("\n\t2、如果想要使用TOP10这个功能,必须先进行歌曲投票后方可使用。\n");
printf("\n\t3、在您使用完某一功能时,建议你保存到文件中!\n");
printf("\n\t4、使用遇到任何问题请与我们联系\n");
printf("\n\t5、最后感谢您的使用!\n");
printf("\n");
system("pause");
choose();
function();
}
void input()
{
tail=head;
move=head;
struct Song_Ranking *p; //p是新创建的区域,存放输入的数据,然后与head连接起来
p=(struct Song_Ranking*)malloc(sizeof(struct Song_Ranking));
if(!p)
{
printf("错误,结束!\n");
exit(0);
} //判断是否成功开辟
printf("\n当所有的数据输入都为0时,结束输入!\n");
printf("请输入歌曲的信息:\n");
printf("歌曲编号:");
scanf("%d",&p->ID);
printf("歌曲名称:");
scanf("%s",p->Sname);
printf("歌手:");
scanf("%s",p->singer);
printf("票数(所有的人的票数在输入时都为零):");
scanf("%ld",&p->ticket);
while(p->ID!=0) //输入的歌曲编号为零时结束输入
{
n++;
p->next=tail->next;
tail->next=p;
tail=p;
p=(struct Song_Ranking*)malloc(sizeof(struct Song_Ranking));
if(!p)
{
printf("错误,结束!\n");
exit(0);
}
printf("请输入歌曲的信息:\n");
printf("歌曲编号:");
scanf("%d",&p->ID);
printf("歌曲名称:");
scanf("%s",p->Sname);
printf("歌手:");
scanf("%s",p->singer);
printf("票数(所有的人的票数在输入时都为零):");
scanf("%ld",&p->ticket);
}
int check; //检查信息是否输入有误
printf("\n请选择是否检查输入的歌曲信息(输入1是,0为否):");
scanf("%d",&check);
if(check)
{
while(move->next!=NULL)
{
printf(" %d \t%s \t%s \t%ld\n",move->next->ID,move->next->Sname,move->next->singer,move->next->ticket);
if(move->next->next==NULL) printf("\n歌曲信息输出完毕\n");
move=move->next;
}
}
write();
system("pause");
choose();
function();
}
void write()
{
FILE *fp;
struct Song_Ranking *p;
p=head;
if((fp=fopen("Song-Ranking.dat","w"))==NULL)
{
printf("\n无法打开此文件\n");
exit(0);
}
while(p->next!=NULL)
{
p=p->next;
fprintf(fp,"%d %s %s %ld\n",p->ID,p->Sname,p->singer,p->ticket);
}
fclose(fp);
}
void look()
{
move=head;
while(move->next==NULL)
{
printf("\n没有歌曲的信息,请添加后再来浏览!\n");break;
}
while(move->next!=NULL)
{
printf("%d\t %s\t %s\t %ld\n",move->next->ID,move->next->Sname,move->next->singer,move->next->ticket);
if(move->next->next==NULL) printf("\n歌曲信息输出完毕\n");
move=move->next;
}
printf("\n");
system("pause");
choose();
function();
}
void vote()
{
move=head;
while(move->next==NULL)
{
printf("\n无任何歌曲的信息,请在更新后重新使用此功能!\n");break;
}
int ball; //ball是每次投票的歌曲编号
printf("\n当输入-1时结束投票\n");
printf("请输入要投的歌曲的编号:");
scanf("%d",&ball); //当输入的编号为-1时,投票结束
while(ball!=-1)
{
while(move->next!=NULL)
{
if(ball==move->next->ID)
{
move->next->ticket=move->next->ticket+1;
break;
}
move=move->next;
}
move=head; //进行完一次投票后,move回到head指针的位置,进行下一次投票,知道编号为-1结束
while(move->next==NULL)
{
printf("\n无任何歌曲的信息,无法进行投票。\n");break;
}
printf("请输入要投的歌曲的编号:");
scanf("%d",&ball); //当输入的编号为-1时,投票结束
}
write();
system("pause");
choose();
function();
}
void rank()
{
move=head;
tail=head->next;
while(move->next==NULL)
{
printf("\n无任何歌曲信息,请在更新歌曲信息后再做此处理。\n");break;
}
int i,j,k;
int temp_ID; //歌手编号交换中间变量
char temp_Sname[20]; //歌曲名称交换中间变量
char temp_singer[20]; //歌手姓名交换中间变量
long temp_ticket; //票数交换中间变量
//用冒泡交换各个区域内的所有值
for(i=0;i<n;i++)
{
for(j=1;j<n-i;j++)
{
if(move->next->ticket < move->next->next->ticket)
{
temp_ID=move->next->ID;
move->next->ID=move->next->next->ID;
move->next->next->ID=temp_ID;
strcpy(temp_Sname,move->next->Sname);
strcpy(move->next->Sname,move->next->next->Sname);
strcpy(move->next->next->Sname,temp_Sname);
strcpy(temp_singer,move->next->singer);
strcpy(move->next->singer,move->next->next->singer);
strcpy(move->next->next->singer,temp_singer);
temp_ticket=move->next->ticket;
move->next->ticket=move->next->next->ticket;
move->next->next->ticket=temp_ticket;
}
move=move->next;
}
move=head;
}
move=head;
printf("\nTOP10排行榜信息如下:\n");
for(k=0;k<100;k++)
{
printf("%d %s %s %ld\n",move->next->ID,move->next->Sname,move->next->singer,move->next->ticket);
move=move->next;
}
printf("\nTOP10排行榜信息输入完毕!\n");
write();
system("pause");
choose();
function();
}
void quit()
{
}
歌曲管理系统1.0 选项二中:有推荐歌手及歌曲(作者自评)和2024年的酷狗top500排行榜(2024第一期1.1)前十。有推荐歌手及歌曲评论区聊。后续会更新!!!
于 2024-02-21 20:00:52 首次发布