歌曲信息管理系统.docx

上传人:b****6 文档编号:6757857 上传时间:2023-01-10 格式:DOCX 页数:31 大小:144.13KB
下载 相关 举报
歌曲信息管理系统.docx_第1页
第1页 / 共31页
歌曲信息管理系统.docx_第2页
第2页 / 共31页
歌曲信息管理系统.docx_第3页
第3页 / 共31页
歌曲信息管理系统.docx_第4页
第4页 / 共31页
歌曲信息管理系统.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

歌曲信息管理系统.docx

《歌曲信息管理系统.docx》由会员分享,可在线阅读,更多相关《歌曲信息管理系统.docx(31页珍藏版)》请在冰豆网上搜索。

歌曲信息管理系统.docx

歌曲信息管理系统

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%

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1