歌曲信息管理系统Word格式文档下载.docx
《歌曲信息管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《歌曲信息管理系统Word格式文档下载.docx(30页珍藏版)》请在冰点文库上搜索。
scanf("
%d"
&
k);
if(k<
1||k>
7)
(w1=1;
getchar();
}
elsew1=0;
}while(w1==1);
switch(k)
(case1:
enter();
break;
case2:
delet();
/*主界面*/
/*对选择的数字作判断*/
/*输入模块*/
/*删除模块*/
case3:
browse();
/*浏览模块*/
case4:
search();
case5:
devide();
case6:
add();
case7:
exit(0);
/*查找模块*//*分组模块*//*添加模块*/
main()
(
menu();
/*主函数*/
2.各功能模块设计
(1)输入模块
[分析]
数据信息存放在文件中,一条记录对应一个歌曲,即符合习惯也方便管理。
现在要考虑的问题是一条歌曲的记录从文件读进来后以什么形式存放?
我们很容易知道存放若干个歌曲就用结构体数组。
structsong
charname[20];
/*歌曲名*/
charcreater[20];
/*作者*/
charsinger[20];
/*演唱者*/
chardate[6];
/*日期*/
}so[N];
[注意]so[N]中的N为歌曲数目,程序中采用宏定义方式,可以随时对N进行修
改。
本程序宏定义#defineN100
[流程图]
[程序]
enter()/*输入模块*/
inti,n;
Howmanysongs(0-%d)?
:
"
N-1);
n);
/*要输入的歌曲数目*/
\nEnterdatanow\n\n"
for(i=0;
i<
n;
i++)
\ninput%dthsongrecord.\n"
i+1);
input(i);
/*调用输入函数*/
if(i!
=0)save(n);
/*调用保存函数*/
printf_back();
/*返回*/
}—
(2)删除模块
[分析]
功能是在显示所有歌曲信息后,用户输入要删除歌曲的名字,根据歌名查找记录并删除。
删除的一般做法是将数据从文件中删除,删除位置后面的记录往前挪。
【程序】
voiddelet()/*删除模块*/
structsongs;
inti,n,k,w0=1,w1,w2=0;
n=load();
/*调用加载函数*/
k=-1;
printf_face();
/*调用显示数据结构项目函数*/
if((i!
=0)&
&
i%10==0)
\n\nRememberwhichneededdelete.passanykeytocontiune"
\n\n"
printf_one(i);
/*调用显示一个记录函数*/
}—
\n\nEnterName.thatyouwanttodelete!
Name:
%s”,&
s.name);
if(strcmp(s.name,so[i].name)==0)
k=i;
s=so[i];
if(k==-1)
\n\nNOexit!
Areyouagain?
\n\n\t1).again2).noandback!
[]\b\b"
if(n==1)delet();
elsemenu();
while(k==-1);
printf_one(k);
/*调用显示一个记录函数*/w1=delete_data(i,n);
/*调用显示删除数据函数*/if(w1==1)(
\nSuccessfulA-A.\n\nAreyouagain?
w0);
w2=1;
}else(
w0=0;
if(w2==1)so[k]=s;
while(w0==1);
(3)浏览模块
该模块功能是显示所以歌曲记录信息
voidbrowse()/*浏览模块*/
(i%10==0))
\n\nPassanykeytocontinue\n"
\tThereare%drecord.\n"
n);
\nPassanykeytoback\n"
(4)查找模块
该模块的功能是根据输入的歌曲名、作者、演唱者、日期或四者全部查找相应的歌曲记录,找到后问是否继续查找还是返回主菜单。
search()
intc,m=0;
\n\nsearchby=>
\n\n1).name2).creater3).singer4).date5).all6).back"
Whichyouneed?
%d”,&
c);
if(c>
5||c<
1)
\nChoiceerror!
Pleaseagain!
m=1;
}while(m!
=0);
switch(c)
case1:
fname();
/*根据歌曲名查找*/
fcreater();
/*根据作者名查找*/
fsinger();
/*根据演唱者查找*/
fdate();
/*根据日期查找*/
fall();
/*根据歌曲详细信息查找*/
\n\nSearchingisover!
其中查找模块调用了具体查找的5个函数。
①根据歌曲名查找fname()
【说明】
流程图与总的查找模块流程图一致。
fname()
intk=-1;
\n\nname:
name);
if(strcmp(so[i].name,name)==0)
\nNotFound\n"
\n\nAreyouagain?
\n\t1).again2).noandback[]\b\b"
if(n==1)fname();
②)根据作者名查找fcreater()
fcreater()
\n\ncreater:
%s"
creater);
if(strcmp(so[i].creater,creater)==0)
(k=i;
if(n==1)fcreater();
3)根据演唱者查找fsinger()
fsinger()
\n\nsinger:
singer);
if(strcmp(so[i].singer,singer)==0)
if(n==1)fsinger();
④根据日期查找fdate()
fdate()
chardate[8];
\n\ndate:
date);
if(strcmp(so[i].date,date)==0)
if(n==1)fdate();
◎根据歌曲详细信息查找fall()
fall()
\nname:
\ncreater:
s.creater);
\nsinger:
s.singer);
\ndate:
s.date);
if((strcmp(so[i].name,s.name)==0)&
(strcmp(so[i].creater,s.creater)==0)&
strcmp(so[i].singer,s.singer)==0)&
(strcmp(so[i].date,s.date)==0))
\n\t1).again2).noandback
[]\b\b"
if(n==1)fall();
(5)分组模块
【分析】
该模块的功能是将所有歌曲信息按照作者名一样的进行分组,然后从新显示分组后的所有歌曲信息。
【流程图】
输入歌曲作者名字
将所有歌曲的作者进行比较,
致的分组放在一起
显示分组后的所有歌曲信息
fz(inti,intn)
intj;
for(j=i+1;
j<
j++)
if(strcmp(so[i].creater,so[j].creater)==0)
if(j==i+1)
i++;
fz(i,n);
else
s=so[i+1];
so[i+1]=so[j];
so[j]=s;
if(j==n-1)
i++;
fz(i,n);
save(n);
}devide()
inti=0,n;
fz(i,n);
(6)添加模块
该模块的功能是用户需要增加新的歌曲信息,用户通过键盘逐条写到原来的输入文件中,注意是添加新的歌曲信息而不能覆盖原有歌曲信息。
voidadd()
inti,n,m,k;
FILE*fp;
Howmanysongsdoyouwanttoadd(0-%d)?
N-1-n);
m);
k=m+n;
for(i=n;
k;
\nInput%dthsongrecord.\n"
i-n+1);
input(i);
if((fp=fopen("
song.txt"
"
w"
))==NULL)
(printf("
\nCannotopenfile\n"
fprintf(fp,"
%s%s%s%s\n"
so[i].name,so[i].creater,so[i].singer,so[i].date);
fclose(fp);
【注意】问题的整个程序还要用到文件包含命令和宏定义
#include<
stdio.h>
#include<
stdlib.h>
string.h>
malloc.h>
#defineN100
3.公共函数
下面是在每个功能模块中都有可能用到的一些公共函数。
(1)显示一个记录函数
voidprintf_one(inti)
{—
\n%s%s%s%s\n"
so[i].name,so[i].creater,so[i].singer,so[i].date);
(2)输入一个完整记录函数
input(inti)
{
so[i].name);
so[i].creater);
so[i].singer);
so[i].date);
(3)保存函数
save(intn)
inti;
exit
(1);
so[i].name,so[i].creater,so[i].singer,so[i].date);
(4)返回上一级函数
printf_back()
voidbrowse();
voidmenu();
intw;
\n\n\tSuccessful.A-A\n\nH);
Whatdoyouwanttodo?
\n\n\t1).Browseall
now\t2).Back:
w);
if(w==1)browse();
(5)加载函数
intload()
r"
return0;
!
feof(fp);
fscanf(fp,"
%s%s%s%s"
return(i);
(6)显示数据结构项目函数
printf_face()
{—
\nnamecreatersingerdate\n"
(7)显示删除数据函数
intdelete_data(intj,intn)
=j)
return1;
五.上机操作
1.数据源
程序经过编译、运行后,由用户经键盘输入歌曲信息
2.编译、链接和运行
3.结果
下面是各个模块的界面图
(2)输入模块
在主界面出现后输入1按回车看到下图:
C:
MC\TC,EKB
1234567
enterdeletebrowseseai^clideuideaddexit
choiceyournumber<
l-?
>
:
113
Hownanusonas<
0-99>
?
(3)输入要输入的歌曲记录数然后逐条增加,如下图:
hoiceyoui*numbepCl-75:
11Jlounanysongrs<
0—?
=3
Enterdatanou
inputl^hsonsFCGord-
lAne=qqq[
reat&
y:
q(f
late=1
input2fchsanyi*eeai'
dl_
lane-uwvj
i'
eatep:
uu
ii«
ger=u
late-2
input3thsonsrecordl-
lane*eee
ir&
ater:
ee
m土n.套e
late"
3
GiiccessFuilwA
dououuanctodo?
(4)返回主菜单后输入2进入删除模块
bhoiceyoupnunhev<
l-7^:
[2J
name
epeater
singei*
<
late
qq
q
1
l-H-JUJ
IHJ
u
2
bee
ee
e
3
Entei^Name.thatyouvanttodel«
te!
Nane:
eeenameCPeatei*singerdateeeeeee2EuccessfulA—A_fireyouagain?
|1〉_己ggizln2〉*ni)andbad?
[_]
(5)输入2后返回主菜单再输入3进入浏览模块
choiceyaupnunfcer<
[3]
lamecpestersingerd就t”
邮aaq1
叫hhhu2
ThereaiEe2reccrd.
Passanykeytohack
MKMMKMMMMMXMKMMKMMWflliHUKNHWMHKMKMMKMKKKKMKKMH
1_ente^
2-delet#
3-hx。
叩雪酷
4.scareli
5.djeuide
6.Md
7,exit
JtKUKJtJtJCJtJtKZKJtJ(3t