歌曲信息管理系统.docx
- 文档编号:6757857
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:31
- 大小:144.13KB
歌曲信息管理系统.docx
《歌曲信息管理系统.docx》由会员分享,可在线阅读,更多相关《歌曲信息管理系统.docx(31页珍藏版)》请在冰豆网上搜索。
歌曲信息管理系统
C程序设计实习报告
题目:
歌曲信息管理系统
需求分析
根据题目要求,由于歌曲信息是存放在文件中,所以应提供文件的输入﹑输出等操作;在程序中需要浏览歌曲的信息,应提供显示,查找等操作;另外还应提供键盘式选择菜单实现功能选择。
概要设计
`
详细设计
歌曲管理流程图
主函数
主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
其流程图如图2所示。
[程序]
/***********主函数**********/
main()
{intn;
printf("\t****************************菜单****************************\n\n");
printf("\t\t\t1.输入歌曲\n");
printf("\t\t\t2.删除歌曲\n");
printf("\t\t\t3.按作者分组显示歌曲\n");
printf("\t\t\t4.查询歌曲信息\n");
printf("\t\t\t5.读取歌曲\n");
printf("\t\t\t6.退出\n");
printf("\n\n\t*********************************************************\n");
printf("\n请选择数字(1-6):
");
scanf("%d",&n);
if(n<1||n>6)
{printf("您输入的数据不符合要求,请重新输入!
!
!
");exit(0);}
switch(n)
{
case1:
enter();break;
case2:
del();break;
case3:
group();break;
case4:
search();break;
case5:
read();break;
case6:
exit(0);
}
}
以上是最初的想法。
但经过自己的考虑后,发现这个主函数的容错功能有点缺点:
就是当用户输入不符合要求的数字时(如输入数字7),这时就会退出程序,给用户带来不便,不符合程序设计的要求。
同时发现将主函数搞成一个独立函数,可以为自己在后面调用函数时更直观的检查程序,从而不易出错;故作了如下修改,修改后的程序:
menu()//输入菜单
{intn,m;
do{
printf("\t****************************菜单****************************\n\n");
printf("\t\t\t1.输入歌曲\n");
printf("\t\t\t2.删除歌曲\n");
printf("\t\t\t3.按作者分组显示歌曲\n");
printf("\t\t\t4.查询歌曲信息\n");
printf("\t\t\t5.读取歌曲\n");
printf("\t\t\t6.退出\n");
printf("\n\n\t*********************************************************\n");
printf("\n请选择数字(1-6):
");
scanf("%d",&n);
if(n<1||n>6)/**对选择的数字做判断**/
{m=1;printf("您输入的数据不符合要求,请重新输入!
!
!
\n\n");getchar();}
elsem==0;}
while(m==1);
switch(n)
{
case1:
enter();break;
case2:
del();break;
case3:
group();break;
case4:
search();break;
case5:
read();break;
case6:
exit(0);
}
}
/***********主函数**********/
main()
{
menu();
}
各功能模块要求
(1)输入模块
【分析】把歌曲信息存放在文件中,一条记录对应一首歌曲,这样做既符合习惯也方便信息管理。
把歌曲的歌曲名,作者,歌手,发行年月作为结构体的成员。
要存放歌曲信息就用结构体
structsong
{
charname[25];
charwriter[25];
charsinger[25];
charyear[25];
}s[N];s[N]中的N为歌曲数目,程序中采用宏定义的方式,可以随时在源程序宏定义中修改,本程序采用#defineN100,输入模块的流程图如下图
所示:
·
【程序】
voidenter()
{inti,m;
printf("输入歌曲名:
\n");
scanf("%s",s[i].name);
printf("输入作者:
\n");
scanf("%s",s[i].writer);
printf("输入歌手:
\n");
scanf("%s",s[i].singer);
printf("输入年分:
\n");
scanf("%s",s[i].year);
printf("----------------------------------------------------\n");
printf("%s,%s,%s,%s\n",s[i].name,s[i].writer,s[i].singer,s[i].year);
printf("----------------------------------------------------\n");
printf("是否保存?
(1/0):
");
scanf("%d",&m);
switch(m)
{case0:
break;
case1:
save();break;
}
menu();
}
其中需要调用的save函数如下:
voidsave()
{inti;
FILE*fp;
if((fp=fopen("歌曲4.txt","a+"))==NULL)
{
printf("不能打开文件\n");
exit(0);
}
fprintf(fp,"\n%s%s%s%s\n",s[i].name,s[i].writer,s[i].singer,s[i].year);
fclose(fp);
printf("**********保存成功**********\n");
}
(2)删除歌曲模块
流程图如下:
【程序】
voiddel()
{inti,p,j,m,n,k,l;
FILE*fp;
n=load();
printf("\n要删除的内容:
\n");
printf("\n1.歌曲名");
printf("\n2.作者");
printf("\n3.歌手");
printf("\n4.发行年月");
printf("\n5.返回\n");
do
{
printf("请选择数字(1-5):
");
scanf("%d",&p);
}
while(p<1||p>5);
switch(p)
{
case1:
printf("请输入要删除的歌曲名:
");
scanf("%s",s3.name);
for(i=0;i {if(strcmp(s3.name,s[i].name)==0) {printf("----------------------------------------------------\n"); printf("%s,%s,%s,%s\n",s[i].name,s[i].writer,s[i].singer,s[i].year); printf("----------------------------------------------------\n");break;}} printf("\n你确定要删除吗? (1/0): "); scanf("%d",&m); if(m==1) { if((fp=fopen("歌曲4.txt","r+"))==NULL) { printf("不能打开文件\n"); exit(0); } for(j=0;j fscanf(fp,"\n%s%s%s%s\n",s[j].name,s[j].writer,s[j].singer,s[j].year); fclose(fp); for(k=i+1;k { strcpy(s[k-1].name,s[k].name); strcpy(s[k-1].writer,s[k].writer); strcpy(s[k-1].singer,s[k].singer); strcpy(s[k-1].year,s[k].year); } printf("信息已删除"); } elsebreak; if((fp=fopen("歌曲4.txt","w+"))==NULL) { printf("不能打开文件\n"); exit(0); } for(l=0;l fprintf(fp,"\n%s%s%s%s\n",s[l].name,s[l].writer,s[l].singer,s[l].year); fclose(fp); printf("**********保存成功**********\n"); break; case2: printf("请输入要删除的作者: "); scanf("%s",s3.writer); for(i=0;i {if(strcmp(s3.writer,s[i].writer)==0) {printf("----------------------------------------------------\n"); printf("%s,%s,%s,%s\n",s[i].name,s[i].writer,s[i].singer,s[i].year); printf("----------------------------------------------------\n");break;}} printf("\n你确定要删除吗? (1/0): "); scanf("%d",&m); if(m==1) { if((fp=fopen("歌曲4.txt","r+"))==NULL) { printf("不能打开文件\n"); exit(0); } for(j=0;j fscanf(fp,"\n%s%s%s%s\n",s[j].name,s[j].writer,s[j].singer,s[j].year); fclose(fp); for(k=i+1;k { strcpy(s[k-1].name,s[k].name); strcpy(s[k-1].writer,s[k].writer); strcpy(s[k-1].singer,s[k].singer); strcpy(s[k-1].year,s[k].year); } printf("信息已删除");} elsebreak; if((fp=fopen("歌曲4.txt","w+"))==NULL) { printf("不能打开文件\n"); exit(0); } for(l=0;l fprintf(fp,"\n%s%s%s%s\n",s[l].name,s[l].writer,s[l].singer,s[l].year); fclose(fp); printf("**********保存成功**********\n"); break; case3: printf("请输入要删除的歌手: "); scanf("%s",s3.singer); for(i=0;i {if(strcmp(s3.singer,s[i].singer)==0) {printf("----------------------------------------------------\n"); printf("%s,%s,%s,%s\n",s[i].name,s[i].writer,s[i].singer,s[i].year); printf("----------------------------------------------------\n");break;}} printf("\n你确定要删除吗? (1/0): "); scanf("%d",&m); if(m==1) { if((fp=fopen("歌曲4.txt","r+"))==NULL) { printf("不能打开文件\n"); exit(0); } for(j=0;j fscanf(fp,"\n%s%s%s%s\n",s[j].name,s[j].writer,s[j].singer,s[j].year); fclose(fp); for(k=i+1;k { strcpy(s[k-1].name,s[k].name); strcpy(s[k-1].writer,s[k].writer); strcpy(s[k-1].singer,s[k].singer); strcpy(s[k-1].year,s[k].year);} printf("信息已删除");} elsebreak; if((fp=fopen("歌曲4.txt","w+"))==NULL) { printf("不能打开文件\n"); exit(0); } for(l=0;l fprintf(fp,"\n%s%s%s%s\n",s[l].name,s[l].writer,s[l].singer,s[l].year); fclose(fp); printf("**********保存成功**********\n"); break; case4: printf("请输入要删除的歌曲发行年月: "); scanf("%s",s3.year); for(i=0;i {if(strcmp(s3.year,s[i].year)==0) {printf("----------------------------------------------------\n"); printf("%s,%s,%s,%s\n",s[i].name,s[i].writer,s[i].singer,s[i].year); printf("----------------------------------------------------\n");break;}} printf("\n你确定要删除吗? (1/0): "); scanf("%d",&m); if(m==1) { if((fp=fopen("歌曲4.txt","r+"))==NULL) { printf("不能打开文件\n"); exit(0); } for(j=0;j fscanf(fp,"\n%s%s%s%s\n",s[j].name,s[j].writer,s[j].singer,s[j].year); fclose(fp); for(k=i+1;k { strcpy(s[k-1].name,s[k].name); strcpy(s[k-1].writer,s[k].writer); strcpy(s[k-1].singer,s[k].singer); strcpy(s[k-1].year,s[k].year);} printf("信息已删除");} elsebreak; if((fp=fopen("歌曲4.txt","w+"))==NULL) { printf("不能打开文件\n"); exit(0); } for(l=0;l fprintf(fp,"\n%s%s%s%s\n",s[l].name,s[l].writer,s[l].singer,s[l].year); fclose(fp); printf("**********保存成功**********\n"); break; case5: break;} menu(); } (3)按作者分组显示 流程图如下: 【程序】 voidgroup() {inti,n; n=load();printf("请输入作者: "); scanf("%s",s3.writer); for(i=0;i {if(strcmp(s3.writer,s[i].writer)==0) { printf("----------------------------------------------------\n"); printf("%s,%s,%s,%s\n",s[i].name,s[i].writer,s[i].singer,s[i].year); printf("----------------------------------------------------\n");} } menu(); } (4)查询模块 流程图如下: [程序] voidsearch() {inti,p,j,m,n; n=load(); printf("\n要查询的内容: \n"); printf("\n1.歌曲名"); printf("\n2.作者"); printf("\n3.歌手"); printf("\n4.发行年月"); printf("\n5.返回\n"); do { printf("请选择数字(1-5): "); scanf("%d",&p); } while(p<1||p>5); switch(p) { case1: printf("请输入要查询的歌曲名: "); scanf("%s",s3.name); for(i=0;i {printf("\n----------------------------------------------------\n\n"); printf("%s,%s,%s,%s\n",s[i].name,s[i].writer,s[i].singer,s[i].year); printf("\n----------------------------------------------------\n");}} break; case2: printf("请输入要查询的作者: "); scanf("%s",s3.writer); for(i=0;i {printf("\n----------------------------------------------------\n\n"); printf("%s,%s,%s,%s\n",s[i].name,s[i].writer,s[i].singer,s[i].year); printf("\n----------------------------------------------------\n");}} break; case3: printf("请输入要查询的歌手: "); scanf("%s",s3.singer); for(i=0;i {if(strcmp(s3.singer,s[i].singer)==0) {printf("\n----------------------------------------------------\n\n"); printf("%s,%s,%s,%s\n",s[i].name,s[i].writer,s[i].singer,s[i].year); printf("\n----------------------------------------------------\n");}} break; case4: printf("请输入要删除的歌曲发行年月: "); scanf("%s",s3.year); for(i=0;i {if(strcmp(s3.year,s[i].year)==0) {printf("\n----------------------------------------------------\n\n"); printf("%s,%s,%s,%s\n",s[i].name,s[i].writer,s[i].singer,s[i].year); printf("\n----------------------------------------------------\n");}} break; case5: break; } menu(); } (5)浏览模块 流程图如下: [程序]: intread() {inti; FILE*fp; if((fp=fopen("歌曲4.txt","r"))==NULL) { printf("不能打开文件\n"); returnNULL; } printf("\n歌曲名作者歌手发行年月\n"); printf("\n----------------------------------------------------\n"); for(i=0;! feof(fp);i++) { fscanf(fp,"%s%s%s%s\n",&s[i].name,&s[i].writer,&s[i].singer,&s[i].year); printf("\n\n%s%s%s%
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 歌曲 信息管理 系统