C 程序设计实习报告
题目:歌曲信息管理系统
目录
目录
需求分析 ............................................................................................................................................ 3
概要设计 ............................................................................................................................................ 3
详细设计 ............................................................................................................................................ 4
主函数....................................................................................................................................5
各功能模块要求....................................................................................................................7
(1)输入模块..................................................................................................................7
(2)删除歌曲模块..........................................................................................................9
(3)按作者分组显示....................................................................................................14
(4)查询模块................................................................................................................15
(5)浏览模块................................................................................................................17
(6).公共函数...............................................................................................................18
运行结果 .......................................................................................................................................... 19
(1)主菜单函数:............................................................................................................19
(2)输入模块:................................................................................................................19
(3)删除模块....................................................................................................................21
(4)按作者分组显示歌曲................................................................................................26
(5)浏览所有歌曲............................................................................................................26
(6)退出............................................................................................................................27
总结 .................................................................................................................................................. 28
参考文献 .......................................................................................................................................... 28
附录 .................................................................................................................................................. 29
2
需求分析
根据题目要求,由于歌曲信息是存放在文件中,所以应提供文件的输入﹑输出等操作;在
程序中需要浏览歌曲的信息,应提供显示,查找等操作;另外还应提供键盘式选择菜单实
现功能选择。
概要设计
`
歌曲信息管理系统
数据输入
数据删除
数据显示
数据查询
数据读取
3
详细设计
歌曲管理流程图
输入歌曲界面
主界面
删除歌曲界面
连接数据库
按作者分组显示界面
退出主界面
查询歌曲界面
按键选择
浏览所有歌曲界面
N
图 2
开始
显示一系列功能选项
输入 n,判断是否
是 1~6?
Y
根据 n 的值调用
个功能模块
结束
4
主函数
主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能
模块用菜单方式选择。其流程图如图 2 所示。
[程序]
/***********主函数**********/
main()
{int n;
printf("\t****************************菜单****************************\n\n");
printf("\t\t\t 1.输入歌曲\n");
printf("\t\t\t 2.删除歌曲\n");
printf("\t\t\t 3.按作者分组显示歌曲\n");
printf("\t\t\t 4.查询歌曲信息\n");
printf("\t\t\t 5.读取歌曲\n");
printf("\t\t\t 6.退出\n");
printf("\n\n\t*********************************************************\n");
printf("\n 请选择数字(1-6):");
scanf("%d",&n);
if(n<1||n>6)
{printf("您输入的数据不符合要求,请重新输入!!!");exit(0);}
switch(n)
{
case 1:enter();break;
case 2:del();break;
case 3:group();break;
case 4:search();break;
case 5:read();break;
case 6:exit(0);
}
}
以上是最初的想法。但经过自己的考虑后,发现这个主函数的容错功能有点缺点:就
是当用户输入不符合要求的数字时(如输入数字 7),这时就会退出程序,给用户带来不
便,不符合程序设计的要求。同时发现将主函数搞成一个独立函数,可以为自己在后面调
用函数时更直观的检查程序,从而不易出错;故作了如下修改,修改后的程序:
menu( )
{int n,m;
// 输入菜单
5
do{
printf("\t****************************菜单****************************\n\n");
printf("\t\t\t 1.输入歌曲\n");
printf("\t\t\t 2.删除歌曲\n");
printf("\t\t\t 3.按作者分组显示歌曲\n");
printf("\t\t\t 4.查询歌曲信息\n");
printf("\t\t\t 5.读取歌曲\n");
printf("\t\t\t 6.退出\n");
printf("\n\n\t*********************************************************\n");
printf("\n 请选择数字(1-6):");
scanf("%d",&n);
if(n<1||n>6)
{m=1;printf("您输入的数据不符合要求,请重新输入!!!\n\n");getchar();}
else m==0;}
/**对选择的数字做判断**/
while(m==1);
switch(n)
{
case 1:enter();break;
case 2:del();break;
case 3:group();break;
case 4:search();break;
case 5:read();break;
case 6:exit(0);
}
}
/***********主函数**********/
main()
{
menu();
}
6
各功能模块要求
(1)输入模块
【分析】把歌曲信息存放在文件中,一条记录对应一首歌曲,这样做既符合习惯也方便信
息管理。
把歌曲的歌曲名,作者,歌手,发行年月作为结构体的成员。要存放歌曲信息就用结构体
struct song
{
char name[25];
char writer[25];
char singer[25];
char year[25];
s[N];s[N]中的 N 为歌曲数目,程序中采用宏定义的方式,可以随时在源程序宏
}
定义中修改,本程序采用#define N 100,输入模块的流程图如下图
所示:
开始
按提示输入歌曲
信息
是否保存(1/0)
1
调 用 保 存 函 数
save()
主菜单
0
·
7
【程序】
void enter()
{ int i,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)
{case 0:break;
case 1:save();break;
}
menu();
}
其中需要调用的 save 函数如下:
void save()
{
int i;
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");
}
8