C语言课程设计示例:歌曲信息管理系统

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

注:代码运行之前要在 E 盘新建一个 zxx 的文件夹,在文件夹中新建两个文本文件 zxx 和 zxxluru
zxx 为存储全部歌曲信息的文件,可以先为空
zxxluru 内为被录入的信息,即可以将 zxxluru 里的信息都存储到 zxx 中

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语言课程设计不会做?其实各种信息管理系统都一样!相关推荐

  1. Java课程设计-基于Java Swing的学生信息管理系统-版本二

    Java课程设计-基于Java Swing的学生信息管理系统-版本二 1.介绍 2.相关技术 3. 代码仓库 4.所需环境 5.安装教程 6.运行截图 7.相关博客 1.介绍 设计一个简单学生个人信息 ...

  2. c语言课程设老师信息管理,学生和教师信息管理系统C语言课程设计

    学生和教师信息管理系统C语言课程设计 1目 录一.课题内容 -------------------2二.总体设计 -------------------51.系统要求 ---------------- ...

  3. C语言课程设计服装店,《C语言程序设计》课程设计实验报告-服装网店信息管理系统.doc...

    #include #ifndef TYPE_H_INCLUDED #define TYPE_H_INCLUDED #define SCR_ROW 25 /*屏幕行数*/ #define SCR_COL ...

  4. JAVA+MYSQL数据库课程设计“迪士尼票务与信息管理系统“(一)附带详细资源

    目录 背景介绍 需求分析 外部接口需求 系统功能需求 用户需求 性能需求 安全性需求 可行性分析 技术可行性 应用可行性 经济可行性 概念设计 局部E-R图设计 门票信息局部E-R图 游乐项目信息局部 ...

  5. c语言课程设计在哪做,C语言课程设计————写下流程图! 谢谢

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 printf("---You have success read data from file!!!---\n"); return h ...

  6. C语言课程设计:连锁超市会员消费记录管理系统

    3天时间做的,全部都是自己敲的代码 博客原文链接 #include<stdio.h> #include<stdlib.h> #include<string.h> s ...

  7. C语言课程设计题目汇总

    C语言课程设计题目汇总 1.职工信息管理系统 试设计一职工信息管理系统: 1) 职工的信息应尽量详尽. 2) 系统具有的功能应尽量全面. 2.图书信息管理系统 要求与1类似 3.学生信息管理系统 以我 ...

  8. c语言课程设计宠物店,c语言课程设计-宠物店信息管理系统.doc

    c语言课程设计-宠物店信息管理系统 合肥学院 计算机科学与技术系 课程设计报告 2012-2013学年第二学期 课程面向过程综合设计课程设计名称宠物(小动物)店信息管理系统 学生姓名宋俊 学号 专业班 ...

  9. c语言编程票务系统,C语言课程设计票务管理系统

    C语言课程设计票务管理系统 C语言课程设计1西安交通大学城市学院C语言程序设计课程设计报告题目图书信息管理系统专业自动化班级自动化101姓名陈蕾完成日期2012年5月31日C语言课程设计2目录第一章项 ...

最新文章

  1. 简单读!tomcat源码(一)启动与监听
  2. 提升深度学习模型性能及网络调参
  3. Bitcoin0.21版 公链开发(3) 网关PHP windows上安装
  4. iap java md5_苹果应用内支付(iOS IAP)的流程与常用攻击方式
  5. win7系统笔记本电脑开机蓝屏怎么办
  6. python爬取系统_python应用:爬虫框架Scrapy系统学习第四篇——scrapy爬取笔趣阁小说...
  7. java mysql 分页计算公式_关于Java的分页算法,急!
  8. el表达式跟ognl表达式的区别(用法和页面取值)
  9. IE6下绝对定位层不显示
  10. 联想小新触摸板驱动_联想小新潮触摸板驱动_联想小新潮5000电脑触摸板驱动下载 v1.57 稳定版-126g驱动网...
  11. MC9S12XEP100 本地RAM不够用了怎么办
  12. VARCHART XGantt 甘特图用程序应该如何交付
  13. python十六进制转十进制_python实现进制转换(二、八、十六进制;十进制)
  14. 基于控制台的老虎机Java Demo
  15. 实用技巧 teamviewer高清显示
  16. 利用TCGA癌症基因进行差异分析
  17. python数据分析与可视化
  18. 包对象之Oracle如何编译失效包体
  19. AI之NLP:2020年6月21日北京智源大会演讲分享之15:15-15:40黄萱菁教授《自然语言处理中的表示学习》
  20. 计算机cpu的字母,买电脑如何识别CPU后面数字和字母的含义?不被忽悠呢?

热门文章

  1. 手机+ip查询归属地
  2. Maya(玛雅)功能细讨-Ⅱ|缓存 MASH 网络进行渲染
  3. IOS安全测试(资源学习笔记)
  4. 大学计算机模拟系统word第四套,高新技术办公软件高级模拟题第四套题
  5. 实用技巧|AD19快捷键大全
  6. Django安装及环境变量配置
  7. uniapp仿淘宝购物车demo
  8. 自然语言处理(1)深度学习基础及其通用模板
  9. python常见编程题
  10. 【实验技术笔记】细胞表型检测之细胞迁移(细胞划痕实验 + transwell实验)