歌曲信息管理系统 通用完整版.doc_第1页
歌曲信息管理系统 通用完整版.doc_第2页
歌曲信息管理系统 通用完整版.doc_第3页
歌曲信息管理系统 通用完整版.doc_第4页
歌曲信息管理系统 通用完整版.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中 国 地 质 大 学本科生课程论文封面C语言课程设计课程名称 计算机高级语言课程设计(C)教师姓名 刘 刚 本科生姓名 本科生学号 20121003009 本科生专业 机械设计制造及其自 所在院系 机械电子信息学院 类别: C. 本科生 日期: 2013.07.11 课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总 成 绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。目 录1题目要求12需求分析13总体设计14详细设计15上机操作16总结27致谢2参考文献21题目要求制作一个歌曲信息管理系统,要求提供以下功能。1) 歌曲信息包括歌曲名,作者,演唱者,发行年月等。2) 可以对歌曲信息进行输入,删除,浏览。3) 可以查询根据歌曲名,作者,演唱者歌曲信息。4) 可以提供按作者分组显示功能。5) 用文件存储信息。2需求分析根据题目要求,由于歌曲信息数据以文本文件的方式存放,所以应提供文件的输入、输出等操作;在程序中需要浏览歌曲的信息,应提供显示、查询等操作(其中查询方式可以按歌曲名、作者、演唱者或日期进行查询)。并且要提供可以按作者进行分组的方法;另外还应提供键盘式选择菜单以实现功能选择。3总体设计歌曲信息管理系统根据整个系统的需求分析可知要实现本系统的功能,需要有以下七个模块。 输入模块退出添加模块分组模块查找模块浏览模块删除模块4详细设计【主函数】:主函数一般设计比较简洁,只提供输入,处理和输出部分的函数调用。,本系统主函数只起到一个将系统载入到主菜单的作用。至于系统内其他功能的实现,则是通过主函数下的主菜单来实现的例如int main() /*主函数*/menu();return 0; 运行系统,进入系统菜单栏下面是菜单栏实现系统功能的流程图 由菜单提示输入1-7功能选项,调用相应的函数 完成指定功能,决定继续或退出 继续时【菜单界面】:本系统中,主菜单是实现系统功能的主要媒介,同样也是整个系统的核心所在,进入系统是首先进入菜单界面,然后根据菜单上的提示进行功能的选取从而进行正常使用。【程序】:/*主界面*/void menu() int k,w1;dosystem(cls);puts(tt*主菜单*n);puts(tt*n); puts(tt 欢迎来到歌曲信息管理系统 n);puts(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:enter();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 author20; /作者*/ char singer20; /演唱者*/ char up_date10; /日期*/soN;需要注意的是: soN中的N为歌曲数目,程序中采用宏定义方式,可以随时对N进行修改。本程序宏定义#define N 100特别注意!song.txt文件中若已经有文件,再次输入时,文件内容将被清空,若仍要使用,请选择歌曲添加!【流程图】输入用户要输入歌曲的个数i从0到n-1调用函数input(i) 存入歌曲数不为0时 保存调用函数save(n)【程序】: /*输入模块*/void enter() int i,n; system(cls); printf(您想要输入多少首歌? (0-%d)?:,N-1); scanf(%d,&n); /要输入的歌曲数目 printf(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(); /调用加载函数 system(cls);dok=-1;printf_face(); /调用显示数据结构项目函数 for(i=0;in;i+)printf_one(i); /调用显示一个记录函数 doprintf(nn请输入您所要删除歌曲的名字。 歌名:);scanf(%s,&);for(i=0;in;i+) if(strcmp(,)=0) k=i;s=soi;break;for(;in;i+)soi=soi+1;save(n-1);if(k=-1)printf(nn不存在! 您想要继续么?nnt1).继续 2).不,返回。 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;elsew0=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; /根据日期查找 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(,name)=0) k=i;printf_one(k); if(k=-1) printf(n抱歉,没有找到所找歌曲n); printf(nn您想要继续么?nt1).继续 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).继续 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).继续 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您想要继续么?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,&);printf(n作者: );scanf(%s,&s.author);printf(n演唱者: );scanf(%s,&s.singer);printf(n发行年月: );scanf(%s,&s.up_date);for(i=0;in;i+)if(strcmp(,)=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();【作者分组显示模块】:本模块的作用是将歌曲按作者分类,然后显示出来。 【流程图】:输入歌曲作者名字) 将所有歌曲的作者进行比较,一致的分组放在一起 显示分组后的所有歌曲信息 【程序】 /*作者分组显示模块*/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(); 【添加模块】:本模块的作用是在已有歌曲的基础上,用户通过键盘输入新的歌曲。且不对以前歌曲产生影响。 【流程图】: 调用加载函数n=load();并计算可以记录个数n) 输入用户要添加歌曲记录的个数m K=m+nI从n到k调用输入函数input(i) 显示分组后的所有歌曲信息 【程序】/*添加模块*/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+)fprintf(fp,%s %s %s %sn,,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,%s %s %s %sn,,soi.author,soi.singer,soi.up_date);fclose(fp);显示记录函数: void printf_one(int i) printf(n%-20s%-10s%-10s%-6sn,,soi.author,soi.singer,soi.up_date);输入函数:void input(int i) printf(n歌名: ); scanf(%s,); printf(n作者: ); scanf(%s,soi.author); printf(n演唱者: ); scanf(%s,soi.singer); 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(fp=fopen(song.txt,r)=NULL) printf(n无法打开文件n); return 0; for(i=0;!feof(fp);i+) fscanf(fp,%s %s %s %s,,soi.author,soi.singer,soi.up_date); fclose(fp); return(i);删除写入函数:int delete_data(int j,int n) FILE *fp; int i; if(fp=fopen(song.txt,w)=NULL) printf(n无法打开文件n); exit(1); for(i=0;in;i+) if(i!=j) fprintf(fp,%s %s %s %sn,,soi.author,soi.singer,soi.up_date); fclose(fp); return 1; 5上机操作 1【数据源】:第一次时,数据来自于用户的键盘输入,当用户第二次使用时,数据来自于保存的源文件song.txt2.编译、链接和运行3.结果【主菜单】函数界面 (1) 输入模块在主界面出现后输入1按回车看到下图: (2) 下面是输入时的样子 (3)输入完成后会有图示提示 根据选择有不同结果。 (4)选择一浏览全部歌曲如下图所示 (5)返回主菜单后输入2进入删除模块 (6)删除后结果 曲目惠元华已经被删除 (7)第一次输入后,选择浏览选项(8)输入4进入查找模块1按歌曲名查找2按作者查找3按演唱者查找 (9)返回菜单输入5进入作者分组模块 (10)返回菜单,输入6进入歌曲添加模块(11)添加后进行浏览 添加已经成功!进入源文件song.txt添加成功写入文件!6总结通过这段时间的实习,我学到了一些c语言课本上所没有的东西,比如怎样编译一个系统,同时对课本上知识的了解接更加的透彻了。在这次实习当中,我发现了在学习中一些掌握不太牢靠的地方,并且得到了一定程度的加强。以前在c语言课上机时,我总是模仿书本上的程序,照样画葫芦,没太大进步。这次由于所编译的系统与课本上的实例不太一样,我通过向老师请教,向同学请教以及上网查看有关资料才完成了任务,这对我本身已是一种锻炼、一种提高!十分感谢所有帮助过我的人!这次实习我也发现了课本上一个错误,由于课本结构体发行日期定义的太小,程序运行时老是出错,思来想去想不明白,还好在老师的帮助下发现了这个问题。7致谢 感谢教务处为我们安排了这次实习,更加巩固了我们对c语言程序的了解,掌握能力。在这里,我尤其要感谢我的任课老师刘刚老师和陈文姬老师。没有他们的帮助,我不可能在这么短的时间内发现自己程序的不足,并作出改进,圆满的完成任务。同时也要感谢所有帮助过我的同学们。谢谢!参考文献1 谭浩强. C程序设计(第三版)M. 北京: 清华大学出版社, 2005.2 张冬梅, 刘远兴, 陈晶, 等. 基于PBL的C语言课程设计及学习指导M. 北京: 清华大学出版社, 2011.3 附录程序源代码:#include #include #include #define N 100struct song char name20; /歌曲名*/ char author20; /作者*/ char singer20; /演唱者*/ char up_date10; /日期*/soN;void menu(); void printf_face();void enter(); void delet(); void browse(); void search();void fname();void fauthor();void fsinger();void fup_date();void fall();void fz(int i,int n);void devide();void add();void printf_one(int i);void input(int i);void save(int n);void printf_back(); int load();int delete_data(int j,int n);void menu(); void delet(); void browse(); void add();int load();int main() /主函数 menu();return 0;/*主界面*/void menu() int k,w1;dosystem(cls);puts(tt*主菜单*n);puts(tt*n); puts(tt 欢迎来到歌曲信息管理系统 n);puts(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:enter();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); /*输入模块*/void enter() int i,n;system(cls);printf(您想要输入多少首歌? (0-%d)?:,N-1);scanf(%d,&n); /要输入的歌曲数目 printf(n 现在起请您开始输入!nn);for(i=0;in;i+)printf(n 请输入第 %d 首歌的记录.n,i+1);input(i); /调用输入函数 if(i!=0) save(n); /调用保存函数 printf_back(); /返回 /*删除模块*/void delet() struct song s;int i,n,k,w0=1,w1,w2=0;n=load(); /调用加载函数 system(cls);dok=-1;printf_face(); /调用显示数据结构项目函数 for(i=0;in;i+) printf_one(i); /调用显示一个记录函数 doprintf(nn请输入您所要删除歌曲的名字。 歌名:);scanf(%s,&);for(i=0;in;i+) if(strcmp(,)=0) k=i;s=soi;break;for(;in;i+)soi=soi+1;save(n-1);if(k=-1)printf(nn不存在! 您想要继续么?nnt1).继续 2).不,返回。 bb);scanf(%d,&n);if(n=1)delet();else menu();while(k=-1);printf_face(i); /调用显示数据结构项目函数 pr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论