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

下载本文档

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

文档简介

C语言课程设计一 题目要求制作一个歌曲信息管理系统功能:1) 歌曲信息包括歌曲名,作者,演唱者,发行年月等)2) 可以对歌曲信息进行输入,删除,浏览。3) 可以查询根据歌曲名,作者,演唱者歌曲信息。4) 可以提供按作者分组显示功能。5) 用文件存储信息。二需求分析根据题目要求,由于歌曲信息数据以文本文件的方式存放,所以应提供文件的输入、输出等操作;在程序中需要浏览歌曲的信息,应提供显示、查询等操作(其中查询方式可以按歌曲名、作者、演唱者或日期进行查询)。并且要提供可以按作者进行分组的方法;另外还应提供键盘式选择菜单以实现功能选择。三 总体设计分析一下整个系统,根据上面的需求分析,可以将系统设计分为以下七大模块。退出添加分组查找浏览删除输入歌曲信息管理四 详细设计1 主函数主函数一般设计比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。流程图 根据n的值调用各功能模块函数输入n,判断n是否是1-7显示一系列功能选项 NYY 程 序void menu() /*主界面*/int k,w1; do puts(tt*MENU*nn); puts(tttt 1.enter); puts(tttt 2.delete); puts(tttt 3.browse); puts(tttt 4.search); puts(tttt 5.devide); puts(tttt 6.add); puts(tttt 7.exit); puts(nntt*n); printf(choice your number(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); main() /*主函数*/menu();2. 各功能模块设计(1)输入模块分析数据信息存放在文件中,一条记录对应一个歌曲,即符合习惯也方便管理。现在要考虑的问题是一条歌曲的记录从文件读进来后以什么形式存放? 我们很容易知道存放若干个歌曲就用结构体数组。struct song char name20; /*歌曲名*/ char creater20; /*作者*/ char singer20; /*演唱者*/ char date6; /*日期*/soN;注意 soN中的N为歌曲数目,程序中采用宏定义方式,可以随时对N进行修改。本程序宏定义#define N 100流程图 输入用户要输入歌曲的个数ni从0到n-1调用函数input(i)i!=0保存调用函数save(n)程序enter() /*输入模块*/int i,n;printf(How many songs (0-%d)?:,N-1);scanf(%d,&n); /*要输入的歌曲数目*/printf(n Enter data nownn); for(i=0;in;i+) printf(n input %dth song record.n,i+1); input(i); /*调用输入函数*/ if(i!=0) save(n); /*调用保存函数*/ printf_back(); /*返回*/(2)删除模块分析 功能是在显示所有歌曲信息后,用户输入要删除歌曲的名字,根据歌名查找记录并删除。删除的一般做法是将数据从文件中删除,删除位置后面的记录往前挪。流程图是否找到此歌曲记录输入要删除的歌曲名显示所有歌曲记录,看用户需要删除哪个 Y N 显示找到的记录,调用删除函数显示没有找到 Y询问是否继续删除返回主菜单 N【程序】void delet() /*删除模块*/struct song s;int i,n,k,w0=1,w1,w2=0;n=load(); /*调用加载函数*/ do k=-1; printf_face(); /*调用显示数据结构项目函数*/ for(i=0;in;i+) if(i!=0)&i%10=0) printf(nnRemember which needed delete.pass any key to contiune); getchar(); puts(nn); printf_one(i); /*调用显示一个记录函数*/ do printf(nnEnter Name.that you want to delete!Name:); scanf(%s,&); for(i=0;in;i+) if(strcmp(,)=0) k=i; s=soi; break; if(k=-1) printf(nnNO exit! Are you again?nnt1).again 2).no and back! bb); scanf(%d,&n); if(n=1)delet(); else menu(); while(k=-1); printf_face(); /*调用显示数据结构项目函数*/ printf_one(k); /*调用显示一个记录函数*/ w1=delete_data(i,n); /*调用显示删除数据函数*/ if(w1=1) printf(nSuccessful -.nn Are you again?nnt1).again 2).no and back! bb); scanf(%d,&w0); w2=1; else w0=0; if(w2=1)sok=s; while(w0=1); menu();(3)浏览模块分析该模块功能是显示所以歌曲记录信息。流程图按任意键显示下一屏按任意键返回主菜单显示歌曲记录信息(10个一屏) 程序void browse() /*浏览模块*/int i,n;n=load(); /*调用加载函数*/ printf_face(); /*调用显示数据结构项目函数*/for(i=0;inn 1).name 2).creater 3).singer 4).date 5).all 6).back);printf(Which you need?: bb);do scanf(%d,&c); if(c5|c1) printf(nChoice error!Please again!); m=1; while(m!=0); switch(c) case 1:fname();break; / *根据歌曲名查找*/ case 2:fcreater();break; / *根据作者名查找*/ case 3:fsinger();break; / *根据演唱者查找*/ case 4:fdate();break; / *根据日期查找*/ case 5:fall();break; / *根据歌曲详细信息查找*/ printf(nn Searching is over!); printf_back();其中查找模块调用了具体查找的5个函数。根据歌曲名查找fname() 【说明】 流程图与总的查找模块流程图一致。【程序】 fname()int i,n; int k=-1;char name20;printf(nn name :);scanf(%s,&name); n=load(); for(i=0;in;i+) if(strcmp(,name)=0) k=i; printf_one(k); if(k=-1) printf(nNot Foundn); printf(nnAre you again?nt1).again 2).no and back bb); scanf(%d,&n); if(n=1)fname(); else menu(); 根据作者名查找fcreater() 【说明】 流程图与总的查找模块流程图一致。【程序】 fcreater()int i,n; int k=-1;char creater20;n=load();printf(nn creater:);scanf(%s,&creater);for(i=0;in;i+) if(strcmp(soi.creater,creater)=0) k=i; printf_one(k); if(k=-1) printf(nNot Foundn); printf(nnAre you again?nt1).again 2).no and back bb); scanf(%d,&n); if(n=1)fcreater(); else menu(); 根据演唱者查找fsinger() 【说明】 流程图与总的查找模块流程图一致。【程序】 fsinger()int i,n; int k=-1;char singer20; n=load();printf(nn singer :);scanf(%s,&singer);for(i=0;in;i+) if(strcmp(soi.singer,singer)=0) k=i; printf_one(k); if(k=-1) printf(nNot Foundn); printf(nnAre you again?nt1).again 2).no and back bb); scanf(%d,&n); if(n=1)fsinger(); else menu(); 根据日期查找fdate() 【说明】 流程图与总的查找模块流程图一致。【程序】 fdate()int i,n; int k=-1;char date8; n=load(); printf(nn date :); scanf(%s,&date); for(i=0;in;i+) if(strcmp(soi.date,date)=0) k=i; printf_one(k); if(k=-1) printf(nNot Foundn); printf(nnAre you again?nt1).again 2).no and back bb); scanf(%d,&n); if(n=1)fdate(); else menu(); 根据歌曲详细信息查找fall() 【说明】 流程图与总的查找模块流程图一致。【程序】 fall()int i,n; int k=-1; char name20; char creater20; char singer20; char date8;struct song s;n=load();printf(nname: ); scanf(%s,&); printf(ncreater: ); scanf(%s,&s.creater); printf(nsinger: ); scanf(%s,&s.singer); printf(ndate: ); scanf(%s,&s.date); for(i=0;in;i+) if(strcmp(,)=0)&(strcmp(soi.creater,s.creater)=0)&(strcmp(soi.singer,s.singer)=0)&(strcmp(soi.date,s.date)=0) k=i; printf_one(k); if(k=-1) printf(nNot Foundn); printf(nnAre you again?nt1).again 2).no and back bb); scanf(%d,&n); if(n=1)fall(); else menu(); (5)分组模块 【分析】 该模块的功能是将所有歌曲信息按照作者名一样的进行分组,然后从新显示分组后的所有歌曲信息。 【流程图】输入歌曲作者名字 显示分组后的所有歌曲信息将所有歌曲的作者进行比较,一致的分组放在一起【程序】 fz(int i,int n)int j;struct song s;for (j=i+1;jn;j+)if(strcmp(soi.creater,soj.creater)=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);devide()int i=0,n;n=load();fz(i,n);printf(nn);browse();(6)添加模块 【分析】 该模块的功能是用户需要增加新的歌曲信息,用户通过键盘逐条写 到原来的输入文件中,注意是添加新的歌曲信息而不能覆盖原有歌曲信息。 【流程图】调用加载函数n=load();并计算可以记录个数n 保存添加的记录I从n到k调用输入函数input(i)K=m+n输入用户要添加歌曲记录的个数m【程序】 void add()int i,n,m,k;FILE *fp;n=load();printf(How many songs do you want to add(0-%d)?:,N-1-n);scanf(%d,&m);k=m+n;for(i=n;ik;i+) printf(n Input %dth song record.n,i-n+1); input(i);if(fp=fopen(song.txt,w)=NULL) printf(nCannot open filen); for(i=0;ik;i+) fprintf(fp,%s %s %s %sn,,soi.creater,soi.singer,soi.date); fclose(fp); printf_back(); 【注意】问题的整个程序还要用到文件包含命令和宏定义 #include#include#include#include#define N 1003.公共函数 下面是在每个功能模块中都有可能用到的一些公共函数。(1) 显示一个记录函数 void printf_one(int i) printf(n%s %s %s %sn,,soi.creater,soi.singer,soi.date); (2) 输入一个完整记录函数input(int i) printf(nname: ); scanf(%s,); printf(ncreater: ); scanf(%s,soi.creater); printf(nsinger: ); scanf(%s,soi.singer); printf(ndate: ); scanf(%s,soi.date);(3) 保存函数save(int n)FILE *fp;int i;if(fp=fopen(song.txt,w)=NULL)printf(nCannot open filen); exit(1);for(i=0;in;i+) fprintf(fp,%s %s %s %sn,,soi.creater,soi.singer,soi.date); fclose(fp); (4)返回上一级函数printf_back() void browse();void menu();int w;printf(nntSuccessful.-nn);printf(What do you want to do?nnt1).Browse all nowt2).Back: bb);scanf(%d,&w);if(w=1)browse();else menu(); (5)加载函数int load()FILE *fp;int i;if(fp=fopen(song.txt,r)=NULL)printf(nCannot open filen); return 0; for(i=0;!feof(fp);i+) fscanf(fp,%s %s %s %s ,,soi.creater,so

温馨提示

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

最新文档

评论

0/150

提交评论