在百度上学的,你们自己看看吧!歌曲top 10排行榜!!!

本文描述了一个基于C语言实现的音乐排行榜管理系统,包括菜单选择、歌曲信息输入、投票、排行榜等功能,以及相应的操作流程和注意事项。
摘要由CSDN通过智能技术生成

#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("*----------------------------------------------------\n");    
    printf("*               歌曲排行榜管理系统                  *\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  101         《童年》       罗大佑           0  \n");
    printf("\n  102        《起风了》    买辣椒也用券       0  \n");
    printf("\n  103         《水手》       郑智化           0  \n");
    printf("\n  104       《纸短情长》     烟把儿           0  \n");
    printf("\n  105        《生僻字》      陈珂宇           0  \n"); 
    printf("\n  106       《海阔天空》     黄家驹           0  \n");
    printf("\n  107     《当爱已成往事》   李宗盛           0  \n");
    printf("\n  108      《贝加尔湖畔》     李健            0  \n");
    printf("\n  109      《父亲的散文诗》   许飞            0  \n");
    printf("\n  110         《成都》        赵雷            0  \n");
    printf("\n  111         《吻别》       张学友           0  \n");
    printf("\n  112     《失恋阵线联盟》    草蜢            0  \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<10;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: 《坐在马桶上学c》是一本以幽默并极具创意的方式,介绍了一位程序员的学习经历和经验的书籍。这本书的主角将学习c语言的过程搬到了马桶上,用幽默的笔法和故事讲述了他在学习过程中的困惑和收获。 马桶作为一个平凡而特殊的学习场所,令人意想不到地成为了主角的心灵寄托所和思考的源泉。作者通过在马桶上学习的方式,让读者在轻松愉快的阅读中,感受到学习的乐趣和探索的精神。 这本书并非只有幽默笑话和冷笑话,而是通过一系列有趣的故事,将复杂的c语言概念和知识点娓娓道来。作者通过潜移默化的方式,使读者在轻松的阅读中掌握c语言的基础知识,并且能够灵活运用于实际的编程中。 这本书不仅仅是一本技术书籍,更是一部寓教于乐的作品。通过幽默的故事和不拘一格的写作风格,书中穿插了作者对学习的思考和感悟,给读者带来了对学习和工作的启示。 细心的读者还会发现,这本书中间散落着一些关于人生和价值观的思考,使读者能够从中获得更多的启示和思考。通过这种方式,作者成功地将技术和人文融为一体,使得这本书不仅是一本学习c语言的工具,更是一本关于成长和思考的书籍。 总的来说,《坐在马桶上学c》通过幽默的故事和细腻的描写,展现了一位程序员学习c语言的过程和经验,让读者在轻松和愉快的阅读中,获得专业知识的同时,也带来了对人生和价值观的思考。无论是已经掌握c语言的程序员,还是对编程感兴趣的非专业人士,都可以从中获得乐趣和启示。 ### 回答2: 《坐在马桶上学C》是一本有趣而又富有创意的学习编程的指南。这本书的作者采用了一种非传统的方法,让读者在学习C语言的同时感到愉快和轻松。 为什么要坐在马桶上学习C语言呢?这是因为马桶是人们随时随地能够找到宁静和专注的地方。作者通过生动的描述和幽默的语言,以马桶为载体,将抽象的编程概念与我们日常生活中的情景联系起来。无论是初学者还是有经验的程序员,都能够轻松理解和掌握其中的知识。 这本书以故事的形式展开,讲述了一个名叫小明的主角,他在使用厕所时突然接到了一个神秘的电话,电话的另一头是一位机器人。机器人以一种幽默而又风趣的方式,带领小明进入了计算机世界。通过与机器人的互动,小明逐渐学会了基本的C语言编程知识。 《坐在马桶上学C》不仅仅是一本教你编程的书,更是一本富有哲理和思考的作品。作者通过故事中创造的情节和对话,让读者思考编程背后的逻辑和原则。通过解决问题和面对挑战,小明成长为一名有才华的程序员,同时也给读者带来了启示和思考。 总的来说,《坐在马桶上学C》以幽默风趣的方式教授C语言编程知识,使学习过程更加有趣和轻松。无论是编程初学者还是寻找新鲜编程视角的老手,都能够从中受益。这本书不同于传统的编程教材,它通过生活化的描述和创意的情节,将抽象的编程概念变得更加亲近和易懂。我们不妨坐在马桶上,挥舞起键盘,用这种独特的方式学习和掌握C语言编程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值