1、歌曲信息管理系统 通用完整版中 国 地 质 大 学本科生课程论文封面C语言课程设计课程名称 计算机高级语言课程设计(C)教师姓名 刘 刚 本科生姓名 本科生学号 20121003009 本科生专业 机械设计制造及其自 所在院系 机械电子信息学院 类别: C. 本科生 日期: 2013.07.11 课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总 成 绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。1题目要求制作一个歌曲信息管理系统,要求提供以下功能。1) 歌曲信息包括歌曲名,作者,演唱者
2、,发行年月等。2) 可以对歌曲信息进行输入,删除,浏览。3) 可以查询根据歌曲名,作者,演唱者歌曲信息。4) 可以提供按作者分组显示功能。5) 用文件存储信息。2需求分析根据题目要求,由于歌曲信息数据以文本文件的方式存放,所以应提供文件的输入、输出等操作;在程序中需要浏览歌曲的信息,应提供显示、查询等操作(其中查询方式可以按歌曲名、作者、演唱者或日期进行查询)。并且要提供可以按作者进行分组的方法;另外还应提供键盘式选择菜单以实现功能选择。3总体设计根据整个系统的需求分析可知要实现本系统的功能,需要有以下七个模块。 4详细设计【主函数】:主函数一般设计比较简洁,只提供输入,处理和输出部分的函数调
3、用。,本系统主函数只起到一个将系统载入到主菜单的作用。至于系统内其他功能的实现,则是通过主函数下的主菜单来实现的例如int main() /*主函数*/ menu(); return 0;下面是菜单栏实现系统功能的流程图 继续时【菜单界面】:本系统中,主菜单是实现系统功能的主要媒介,同样也是整个系统的核心所在,进入系统是首先进入菜单界面,然后根据菜单上的提示进行功能的选取从而进行正常使用。【程序】:/*主界面*/void menu() int k,w1; do system(cls); puts(tt*主菜单*n); puts(tt*n); puts(tt 欢迎来到歌曲信息管理系统 n); p
4、uts(tt*n); puts(tttt 1.歌曲录入); puts(tttt 2.歌曲删除); puts(tttt 3.歌曲浏览); puts(tttt 4.歌曲查找); puts(tttt 5.作者分组显示); puts(tttt 6.添加新歌); puts(tttt 7.退出); puts(ntt*n); puts(tt 开发人:赵彦斌 n); printf(请选择您所需要的功能(1-7): bb); scanf(%d,&k); if(k7) /对选择的数字作判断*/ w1=1; getchar(); else w1=0; while(w1=1); switch(k) case 1:en
5、ter();break; /输入模块 case 2:delet();break; /删除模块 case 3:browse();break; /浏览模块 case 4:search();break; /查找模块 case 5:devide();break; /分组模块 case 6:add();break; /添加模块 case 7:exit(0); 【输入模块】:数据信息存放在文件中,一条记录对应一个歌曲,即符合习惯也方便管理。现在要考虑的问题是一条歌曲的记录从文件读进来后以什么形式存放?这里选择应用下面的结构体struct song char name20; /歌曲名*/ char auth
6、or20; /作者*/ char singer20; /演唱者*/ char up_date10; /日期*/soN;需要注意的是: soN中的N为歌曲数目,程序中采用宏定义方式,可以随时对N进行修改。本程序宏定义#define N 100特别注意!song.txt文件中若已经有文件,再次输入时,文件内容将被清空,若仍要使用,请选择歌曲添加!【流程图】 存入歌曲数不为0时 【程序】: /*输入模块*/void enter() int i,n; system(cls); printf(您想要输入多少首歌? (0-%d)?:,N-1); scanf(%d,&n); /要输入的歌曲数目 printf
7、(n 现在起请您开始输入!nn); for(i=0;in;i+) printf(n 请输入第 %d 首歌的记录.n,i+1); input(i); /调用输入函数 if(i!=0) save(n); /调用保存函数 printf_back(); /返回 【删除模块】:其功能是在显示所有歌曲信息后,用户输入要删除歌曲的名字,根据歌名查找记录并删除。删除的一般做法是将数据从文件中删除,删除位置后面的记录往前挪。从而达到删除效果。【流程图】 Y N YN 【程序】:/*删除模块*/void delet() struct song s; int i,n,k,w0=1,w1,w2=0; n=load()
8、; /调用加载函数 system(cls); do k=-1; printf_face(); /调用显示数据结构项目函数 for(i=0;in;i+) printf_one(i); /调用显示一个记录函数 do printf(nn请输入您所要删除歌曲的名字。 歌名:); scanf(%s,&s.name); for(i=0;in;i+) if(strcmp(s.name,soi.name)=0) k=i; s=soi; break; for(;in;i+) soi=soi+1; save(n-1); if(k=-1) printf(nn不存在! 您想要继续么?nnt1).继续 2).不,返回。
9、 bb); scanf(%d,&n); if(n=1)delet(); else menu(); while(k=-1); printf_face(i); /调用显示数据结构项目函数 printf_one(k); /调用显示一个记录函数 w1=delete_data(i,n); /调用显示删除数据函数 if(w1=1) printf(n恭喜,歌曲已成功删除nn您想要继续么? nnt1).继续 2).不,返回。 bb); scanf(%d,&w0); w2=1; else w0=0; if(w2=1) sok=s; while(w0=1); menu(); 【浏览模块】:浏览模块功能是显示全部歌
10、曲信息 【流程图】: 【程序】 /*浏览模块*/void browse() int i,n; n=load(); /调用加载函数 printf_face(); /调用显示数据结构项目函数 system(cls); for(i=0;i5|c1) printf(n选择错误!请重新选择!); m=1; while(m!=0); switch(c) case 1:fname();break; /根据歌曲名查找 case 2:fauthor();break; /根据作者名查找 case 3:fsinger();break; /根据演唱者查找 case 4:fup_date();break; /根据日期查
11、找 case 5:fall();break; /根据歌曲详细信息查找 printf(nn 查找完成!); printf_back();1.根据歌曲名查找fname()void fname() /根据歌曲名查找 int i,n; int k=-1; char name20; printf(nn 歌名 :); scanf(%s,&name); n=load(); for(i=0;in;i+) if(strcmp(soi.name,name)=0) k=i; printf_one(k); if(k=-1) printf(n抱歉,没有找到所找歌曲n); printf(nn您想要继续么?nt1).继续
12、2).不,返回 bb); scanf(%d,&n); if(n=1)fname(); else menu(); 2.按作者名查找fcreater()void fauthor() /根据作者名查找 int i,n; int k=-1; char author20; n=load(); printf(nn 作者:); scanf(%s,&author); for(i=0;in;i+) if(strcmp(soi.author,author)=0) k=i; printf_one(k); if(k=-1) printf(n抱歉,没有找到所找歌曲n); printf(nn您想要继续么?nt1).继续
13、2).不,返回 bb); scanf(%d,&n); if(n=1)fauthor(); else menu(); 3.根据演唱者查找fsinger()void fsinger() /根据演唱者查找 int i,n; int k=-1; char singer20; n=load(); printf(nn 演唱者 :); scanf(%s,&singer); for(i=0;in;i+) if(strcmp(soi.singer,singer)=0) k=i; printf_one(k); if(k=-1) printf(n抱歉,没有找到所找歌曲n); printf(nn您想要继续么?nt1)
14、.继续 2).不,返回 bb); scanf(%d,&n); if(n=1)fsinger(); else menu(); 4.根据日期查找fdate()void fup_date() /根据日期查找 int i,n; int k=-1; char up_date8; n=load(); printf(nn 发行年月 :); scanf(%d,&up_date); for(i=0;in;i+) if(strcmp(soi.up_date,up_date)=0) k=i; printf_one(k); if(k=-1) printf(n抱歉,没有找到所找歌曲n); printf(nn您想要继续么
15、?nt1).继续 2).不,返回 bb); scanf(%d,&n); if(n=1)fup_date(); else menu(); 5.根据歌曲详细信息查找fall()void fall() /根据歌曲详细信息查找 int i,n; int k=-1; struct song s; n=load(); printf(n歌名: ); scanf(%s,&s.name); printf(n作者: ); scanf(%s,&s.author); printf(n演唱者: ); scanf(%s,&s.singer); printf(n发行年月: ); scanf(%s,&s.up_date);
16、for(i=0;in;i+) if(strcmp(soi.name,s.name)=0)&(strcmp(soi.author,s.author)=0)&(strcmp(soi.sing er,s.singer)=0)&(strcmp(soi.up_date,s.up_date)=0) k=i; printf_one(k); if(k=-1) printf(n抱歉,没有找到所找歌曲n); printf(nn您想要继续么?nt1).继续 2).不,返回 bb); scanf(%d,&n); if(n=1)fall(); else menu(); 【作者分组显示模块】:本模块的作用是将歌曲按作者分
17、类,然后显示出来。 【流程图】: 【程序】 /*作者分组显示模块*/void fz(int i,int n) int j; struct song s; system(cls); for (j=i+1;jn;j+) if(strcmp(soi.author,soj.author)=0) if(j=i+1) i+; fz (i,n); else s=soi+1; soi+1=soj; soj=s; else if(j=n-1) i+; fz(i,n); save(n); void devide() int i=0,n; n=load(); fz(i,n); printf(nn); browse(
18、); 【添加模块】:本模块的作用是在已有歌曲的基础上,用户通过键盘输入新的歌曲。且不对以前歌曲产生影响。 【流程图】: 【程序】/*添加模块*/void add() int i,n,m,k; FILE *fp; n=load(); printf(请问您想要添加多少首歌?(0-%d)?:,N-1-n); scanf(%d,&m); k=m+n; for(i=n;ik;i+) printf(n 请输入第 %d 首歌的记录.n,i-n+1); input(i); if(fp=fopen(song.txt,w)=NULL) printf(n无法打开文件n); for(i=0;ik;i+) fprint
19、f(fp,%s %s %s %sn,soi.name,soi.author,soi.singer,soi.up_date); fclose(fp); printf_back();【注意】问题的整个程序还要用到文件包含命令和宏定义 #include#include#include#include#define N 100【公共函数】 下面是一些通用的公共函数储存函数:void save(int n) FILE *fp; int i; if(fp=fopen(song.txt,w)=NULL) printf(n无法打开文件n); exit(1); for(i=0;in;i+) fprintf(fp
20、,%s %s %s %sn,soi.name,soi.author,soi.singer,soi.up_date); fclose(fp);显示记录函数: void printf_one(int i) printf(n%-20s%-10s%-10s%-6sn,soi.name,soi.author,soi.singer,soi.up_date);输入函数:void input(int i) printf(n歌名: ); scanf(%s,soi.name); printf(n作者: ); scanf(%s,soi.author); printf(n演唱者: ); scanf(%s,soi.si
21、nger); printf(n发行年月: ); scanf(%s,soi.up_date);数据结构项目函数: void printf_face() printf(n歌名tt 作者 演唱者 发行年月 n);void printf_back() void browse(); void menu(); int w; printf(nnt恭喜您,输入成功成功!nn); printf(请问您想要做什么nnt1).浏览全部文件t2).返回: bb); scanf(%d,&w); if(w=1)browse(); else menu();载入函数模块:int load() FILE *fp; int i; if(f
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2