C语言程序设计报告—歌曲信息管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《高级语言程序设计》课程设计
说明书
设计题目:歌曲信息管理系统设计
目录
1、设计题目 (3)
2、主函数 (4)
3、输入模块 (4)
4、删除模块 (5)
5、浏览模块 (6)
6、查找模块 (6)
7、各被调函数 (7)
8、设计小结 (8)
9、源程序代码 (8)
歌曲信息管理系统设计
1、需求分析:用文件存储信息,因而要提供文件的输入输出操作;可对歌曲信息进行输入、删除、浏览,因而要提供文件的输入、删除和信息显示操作;查询歌曲信息要提供查找操作;实现按作者分组显示功能则要提供排序功能;另外要提供键盘式选择菜单以实现功能选择。
2、总体设计:整个管理系统可以被设计为数据输入模块、数据删除模块、信息浏览模块、信息查询模块和信息分组显示模块。
3、详细设计
数据结构采用结构体,建立歌曲信息结构体:
Struct SongInfo
{ Char name[20]; //歌曲名
Char author[20]; //作者
Char singer[20]; //演唱者
Char pub_date[6]; //发行年月(yyyymm)
}SI;
(1) 数据输入模块把歌曲信息写入文件。
(2) 数据删除模块采用基本的查找算法,查找歌曲信息文件,如果是要删除的歌曲,则舍弃改信息。否则重新写入文件。
(3) 信息浏览模块读歌曲信息文件,显示输出。
(4) 信息查询模块通过菜单选择查询字段:歌曲名作者演唱者。然后采用基本查找算法在歌曲信息文件中查找,如果找到,则输出;否则输出“对不起,没有您要找的歌曲信息!。”
(5) 信息分组显示模块选择按作者分组显示歌曲信息,用fread 或fscanf 把歌曲信息文件中的信息读取到临时变量中(临时变量数据结构可以采用歌曲信息结构体数组),采用排序算法(冒泡、插入、选择等)把歌曲信息按照作者排序,然后输出。
一:详细设计
1主函数
主函数的设计提供数据输入、数据处理和数据输出以及各种函数的调用。其中各功能模块用菜单方式选择;另外,部分菜单也可以写成函数。
[程序]
void main()
{
void menu();
void function1();
void function2();
void function3();
void function4();
menu();
return;
}
2 各功能模块设计
(1)输入模块
信息输入时直接按顺序结构(如图2)输入:
void input()
{ char ch;
n=0;
if((fp=fopen("song.txt","a"))==NULL)
{
printf("can't open file song.txt");
exit(0);
}
printf("Please input a record:");
for(n=0;n<=50;)
{
printf("\nrecord %d:\n歌名:",n+1);
gets(song[n].name);
printf("\n时间:");
gets(song[n].year);
printf("\n作者:");
gets(song[n].author);
printf("\n歌手:");
gets(song[n].singer);
n++;
printf("继续输入吗?(y/n)\n");
ch=getchar();getchar();
if(ch=='n')
break;
}
fwrite(song,sizeof(song[0]),n,fp);
fclose(fp);
}
2删除模块:
用户输入要删除的信息,如输入歌曲名,根据歌曲名找到其他记录并删除。
[程序]
/******************删除模块*************************/
void del()
{
int m,k=0;
long a;
char namekey[8];
printf("\n请输入您要删除的歌曲名:");
scanf("%s",namekey);
if((fp=fopen("song.txt","r+"))==NULL)
{
printf("\n不能打开该文件!");
exit(0);
}
while(!feof(fp))
a=ftell(fp);
fscanf(fp,"%6s %5s %5s %10s\n",song[n].name,song[n].year,song[n].author,song[n].s inger);
if(strcmp(namekey,song[n].name)==0)
{
k=1;
break;
}
}
if(k==1)
{
printf("\n已查到,记录为");
printf("\n%6s %5s %5s %10s\n",song[n].name,song[n].year,song[n].author,song[n].si nger);
printf("\n确实要删除,按1;不删除,按0:");
scanf("%d",&m);
if(m==1)
{
fseek(fp,a,0);
fprintf(fp,"%s %s %s %s\n"," " ," "," "," ");
}
}
else
printf("\n对不起,查无此人。");
fclose(fp);
}
3·浏览模块:
在用户按下菜单后直接显示出所有歌曲信息。
void xianshi()
{ n=0;
if((fp=fopen("song.txt","rb"))==NULL)
{
printf("can't open the file song.txt");
exit(0);
}
printf(" 歌名\t 作者\t 歌手时间\n");
while(fread(&song[n],sizeof(song[n]),1,fp)==1)
{
printf("%6s %5s %10s %5s\n",song[n].name,song[n].author,song[n].singer,song[n]. year);
n++;