C语言开发-C语言课程设计-歌曲信息管理系统
小职 2021-12-01 来源 : 阅读 545 评论 0

摘要:本篇主要介绍了C语言开发-C语言课程设计-歌曲信息管理系统,通过具体的内容展现,希望对C语言的学习有一定的帮助。

本篇主要介绍了C语言开发-C语言课程设计-歌曲信息管理系统,通过具体的内容展现,希望对C语言的学习有一定的帮助。

C语言开发-C语言课程设计-歌曲信息管理系统

 

我们在学习C语言时,最终都会面临这个“大项目”:课程设计,而知识的整合与庞大的代码量总会让许多初学者手足无措。还记得我当时的课程设计,真的是挑灯夜战好几天,最终才算是整合成功。希望这个示例可以给还没有头绪的同学一点启发。我会在代码的注释中帮助大家理解。

 

注:代码运行之前要在 E 盘新建一个 zxx 的文件夹,在文件夹中新建两个文本文件 zxx 和 zxxluru

zxx 为存储全部歌曲信息的文件,可以先为空

zxxluru 内为被录入的信息,即可以将 zxxluru 里的信息都存储到 zxx 中

 C语言开发-C语言课程设计-歌曲信息管理系统

 

zxxluru 文件内格式为:歌曲名 演唱者 作词者 作曲者 发行时间 中间用空格隔开

  

 

下面是完整代码:

#include<stdio.h>    //头文件就不多说了

#include<stdlib.h>

#include<string.h>

 

#define N 10000      //最大可以存储的歌曲数量

 

struct song    //定义一个歌曲信息的结构体

{

  char name[20];     //歌曲名

  char singer[20];   //演唱者

  char authors[20];  //作词者

  char compose[20];  //作曲者

  char time[20];     //发行日期

}so[N];

 

//声明函数

void menu();         //菜单函数

void display();      //查看函数

void create();       //录入函数

void search();       //查找函数

void modify();       //修改函数

void delete();       //删除函数

void input1(int i);  //键盘录入

void input2();       //文件录入

void save(int n);    //储存函数

int back();          //返回函数

 

//主函数

int main()

{

    system("color 9f"); //主菜单的颜色美化

    menu();             //进入菜单函数

    return 0;

}

 

//菜单函数

void menu()

{

    system("cls");      //每次进入菜单都清屏

    printf("|_**__**__**__**__**__**__**__**__**__**_|\n");

    printf("**                                      **\n"); //这里装饰框在编译器中会对齐

    printf("||          406舞厅歌曲管理系统         ||\n");

    printf("**           1、 显示歌曲信息           **\n");

    printf("||           2、 录入歌曲信息           ||\n");

    printf("**           3、 查找某首歌曲           **\n");

    printf("||           4、 修改歌曲信息           ||\n");

    printf("**           5、 删除某首歌曲           **\n");

    printf("||           0、 退出系统               ||\n");

    printf("**                                 -ZXX **\n");

    printf("|_**__**__**__**__**__**__**__**__**__**_|\n");

    printf("请选择相应的功能:\n");

    int n;

    scanf("%d", &n);

    switch(n)           //根据功能选择跳转到相应函数

    {

        case 0:exit(0);

        case 1:display();break;

        case 2:create();break;

        case 3:search();break;

        case 4:modify();break;

        case 5:delete();break;

        default:        //输入上面以外的数字会响铃并再次显示菜单

            printf("\a");

            menu();

            break;

    }

}

 

//信息显示函数

void display()

{

    FILE *fp = fopen("E:\\zxx\\zxx.txt","r"); //打开存储信息的文件

    int i, a, n, j, k;

    if(fp == NULL)      //判断文件是否存在

    {

        printf("\n无法打开此文件!\n\a");

        exit(0);

    }

    system("cls");

    printf("\n\n请选择排序方式:\n");

    printf("1、按歌名排序\n");

    printf("2、按演唱者排序\n");

    scanf("%d", &a);

    for(i = 0; !feof(fp); i++) //将文件中的内容按格式存储到程序中的结构体中

    {

        fscanf(fp,"%s %s %s %s %s",so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

        if(feof(fp)) break;

    }

    fclose(fp);     //关闭文件

    n = i - 1;      //歌曲数量的记录

    struct song tmp;

    switch(a)       //根据用户选择对歌曲进行排序显示

    {

        case 1:

            for(j = 0; j < n; j++)

                for(k = 0; k < n; k++)

                    if(strcmp(so[k].name, so[k+1].name) > 0) //根据歌曲名字排序

                    {

                        tmp = so[k];

                        so[k] = so[k+1];

                        so[k+1] = tmp;

                    }

            printf("\n\n歌名    歌手    作词    作曲    发行日期\n");

            printf("****************************************\n");

            for(i = 0; i <= n; i++)

                printf("%s  %s  %s  %s  %s\n", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

        break;

        

        case 2:

            for(j = 0; j < n; j++)

                for(k = 0; k < n; k++)

                    if(strcmp(so[k].singer, so[k+1].singer) > 0) //根据歌手名字排序

                    {

                        tmp = so[k];

                        so[k] = so[k+1];

                        so[k+1] = tmp;

                    }

            printf("\n\n歌名    歌手    作词    作曲    发行日期\n");

            printf("****************************************\n");

            for(i = 0; i <= n; i++)

                printf("%s  %s  %s  %s  %s\n", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

        break;

        

        default:

            printf("\n输入错误!\a");

        break;

    }

    back(); //返回函数

}

 

//录入函数

void create()

{

    system("cls");

    int n, a, i;

    printf("\n    请选择录入方式:  \n");

    printf("**********************\n");

    printf(" 1、 键盘录入歌曲信息 \n");

    printf(" 2、 文件录入歌曲信息 \n");

    scanf("%d", &a);

    switch(a)  //根据选择跳转到不同的录入函数

    {

        case 1:

            printf("\n你想录入几首歌?\n");

            scanf("%d", &n);

            printf("\n开始录入歌曲信息!\n");

            for(i = 0; i < n; i++)

            {

                printf("\n请输入第%d首歌曲信息:\n\n",i+1);

                input1(i); //键盘录入函数

            }

            if(i != 0)

            {

                save(n); //保存函数

                printf("\n存储成功!\a\n");

            }

        break;

        

        case 2:

            input2();  //文件录入函数

            printf("\n存储成功!\a\n");

        break;

        

        default:

            printf("\n输入错误!\a");

            back();

        break;

    }

    back();

}

 

//查找函数

void search()

{

    system("cls");

    FILE *fp;

    int n = 100, k, ch, i, j = 0;

    char c[20];

    if((fp = fopen("E:\\zxx\\zxx.txt","r")) == NULL)

    {

        printf("\n\n无法打开此文件!\n\n\a");

        back();

    }

    for(i = 0; !feof(fp); i++)

    {

        fscanf(fp,"%s%s%s%s%s", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

        if(feof(fp)) break;

    }

    fclose(fp);

    n = i; //记录歌曲数量

    printf("\n请选择查询的方式:\n");

    printf("*****************\n");

    printf("1、按歌名查询\n");

    printf("2、按演唱者查询\n");

    scanf("%d", &ch);

    switch(ch)

    {

        case 1:

            printf("\n请输入歌名:\n");

            scanf("%s", c);

            for(i = 0; i < n; i++)   //strcmp函数匹配字符串查找歌曲

                if(strcmp(c, so[i].name) == 0)

                 break;

        break;

        

        case 2:

            printf("\n请输入演唱者:\n");

            scanf("%s", c);

            for(i = 0; i < n; i++)

                if(strcmp(c, so[i].singer) == 0)

                 break;

        break;

        

        default:

            j = 1;

            printf("\n输入错误!\n\a");

            back();

        break;

    }

    k = i;

    if(k == n && j == 0)

    {

        printf("\n\n没有这首歌曲的信息!\n\a");

        back();

    }

    else

    {

        printf("\n\n歌名    歌手    作词    作曲    发行日期\n");

        printf("****************************************\n");

        printf("%s  %s  %s  %s  %s\n",so[k].name, so[k].singer, so[k].authors, so[k].compose, so[k].time);

        back();

    }

}

 

//修改函数

void modify()

{

    char name[20];

    char singer[20];

    char authors[20];

    char compose[20];

    char time[20];

    FILE *fp = fopen("E:\\zxx\\zxx.txt","r");

    int n, i, c, j = 0;

    system("cls");  //修改信息时首先展示全部的歌曲信息

    printf("\n\n所有歌曲记录如下:\n");

    printf("\n\n歌名    歌手    作词    作曲    发行日期\n");

    printf("****************************************\n");

    for(i = 0; !feof(fp); i++)

    {

        fscanf(fp,"%s %s %s %s %s", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

        if(feof(fp)) break;

        printf("%s  %s  %s  %s  %s\n", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

    }

    n = i;

    fclose(fp);

    printf("\n请输入要修改信息的歌名:\n");

    scanf("%s", name);

    system("cls");

    for(i = 0; i < n; i++)

        if(strcmp(so[i].name, name) == 0)

        {

            j = 1;

            printf("\n原始信息为:\n");

            printf("\n歌名    歌手    作词    作曲    发行日期\n");

            printf("****************************************\n");

            printf("%s  %s  %s  %s  %s\n", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

            printf("\n需要进行修改的选项:\n\n1.歌曲名 2.演唱者 3.作词 4.作曲 5.发行日期\n");

            printf("\n请输入你需要修改的那一项的序号:\n");

            scanf("%d", &c);

            if(c > 5 || c < 1)

            {

               printf("\n选择错误,请重新选择!\n\a");

               back();

            }

            break;

        }

    fp = fopen("E:\\zxx\\zxx.txt","w");

    if(j == 0)

    {

         printf("\n对不起,没有此歌!\n\a");

         for(i = 0; i < n; i++)   //没有这首歌时,全部信息直接写入文件

        {

            fprintf(fp, "%s %s %s %s %s", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

            fprintf(fp, "\n");

        }

    }

    else //当有此歌时修改相应的数据

    {

        j = i;

        for(i = 0; i < n; i++)

            if(i != j) //未修改的数据写入文件

                fprintf(fp,"%s %s %s %s %s \n", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

            else       //新修改的数据写入文件

                switch(c)

                {

                    case 1:

                        printf("\n歌曲名改为:\n");

                        scanf("%s", name);

                        fprintf(fp,"%s %s %s %s %s \n", name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

                    break;

                    

                    case 2:

                        printf("演唱者改为:");

                        scanf("%s", singer);

                        fprintf(fp,"%s %s %s %s %s \n", name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

                    break;

                    

                    case 3:

                        printf("作词改为:");

                        scanf("%s",authors);

                        fprintf(fp,"%s %s %s %s %s \n", name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

                    break;

                    

                    case 4:

                        printf("作曲改为:");

                        scanf("%s",compose);

                        fprintf(fp,"%s %s %s %s %s \n", name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

                    break;

                    

                    case 5:

                        printf("发行时间改为:");

                        scanf("%s",time);

                        fprintf(fp,"%s %s %s %s %s \n", name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

                    break;

                    

                    default:

                    break;

                }

    printf("\n修改成功!\n\a");

    }

    fclose(fp);

    back();

}

 

//删除函数

void delete()

{

    char s[20];

    int i, n, j, k = 0;

    FILE *fp = fopen("E:\\zxx\\zxx.txt","r");

    if(fp == NULL)

    {

        printf("\n无法打开此文件!\n\a");

        exit(0);

    }

    system("cls");

    printf("\n\n所有歌曲记录如下:\n\n");

    printf("\n\n歌曲名 演唱者 作词 作曲 发行日期\n");

    printf("****************************************\n");

    for(i = 0; !feof(fp); i++)

    {

        fscanf(fp, "%s %s %s %s %s", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

        if(feof(fp)) break;

        printf("%s %s %s %s %s\n", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

    }

    fclose(fp);

    n = i;

    printf("\n请输入你要删除的歌名:\n");

    scanf("%s", s);

    for(i = 0; i < n; i++)

        if(strcmp(s, so[i].name) == 0)   //通过strcmp函数匹配到歌曲

        {

            k = 1;       //k=1表示查找到了这首歌                

            break;

        }

    if(k == 0)       //k=0即表示没有这首歌

        printf("\n输入错误!\n\a");

    else

    {

        j = i;

        fp = fopen("E:\\zxx\\zxx.txt","w");

        for(i = 0; i < n; i++)

        if(i != j)          //将除了这首歌之外的数据存储到文件中

        {

            fprintf(fp, "%s %s %s %s %s", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

            fprintf(fp, "\n");

        }

        printf("\n删除成功!\n\a");

    }

    fclose(fp);

    back();

}

 

//键盘输入函数

void input1(int i)

{

    printf("请输入音乐的歌名、演唱者、作词、作曲、发行时间:\n");

    scanf("%s %s %s %s %s", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

}

 

//文件输入函数

void input2()

{

    FILE *fq = fopen("E:\\zxx\\zxxluru.txt","r");//此文件里为即将录入的信息

    FILE *fp = fopen("E:\\zxx\\zxx.txt","a"); //此文件为存储数据的文件

    int i;

    if(fq == NULL)

    {

        printf("\n无法打开此文件!\n\a");

        exit(0);

    }

    for(i = 0; !feof(fq); i++)

    {

        fscanf(fq, "%s %s %s %s %s", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

        fprintf(fp, "%s %s %s %s %s", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

        fprintf(fp, "\n");

        if(feof(fp)) break;

    }

    fclose(fp);

    fclose(fq);

}

 

//保存函数

void save(int n)

{

    FILE *fp = fopen("E:\\zxx\\zxx.txt","a");

    int i;

    for(i = 0; i < n; i++)

    {

        fprintf(fp, "%s %s %s %s %s", so[i].name, so[i].singer, so[i].authors, so[i].compose, so[i].time);

        fprintf(fp, "\n");

    }

    fclose(fp);

}

 

//返回函数

int back()

{

    int n;

    printf("\n\n是否返回主菜单?\n");

    printf("***************\n");

    printf("1、返回主菜单\n");

    printf("2、退出程序\n");

    scanf("%d", &n);

    switch(n)

    {

        case 1: menu(); break;

        case 2: return 0; break;

        default:

            printf("\n\a");

            system("cls");

            back();

            break;

    }

    return 0;

}

 

最后哪里有不妥或者可以改善的也欢迎大家一起来讨论,希望大家的C语言课程设计都可以顺利完成!


✅  扫码免费获取基础课程·答疑解惑·职业测评

C语言开发-C语言课程设计-歌曲信息管理系统

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程