最佳歌手排行榜数据结构课实训报告.docx
《最佳歌手排行榜数据结构课实训报告.docx》由会员分享,可在线阅读,更多相关《最佳歌手排行榜数据结构课实训报告.docx(16页珍藏版)》请在冰豆网上搜索。
最佳歌手排行榜数据结构课实训报告
数据结构实训报告
题目:
流行歌手排行榜
一、课程设计题目:
流行歌手排行榜
二、问题描述:
建立一个流行歌手排行榜。
三、问题分析
1、输入的形式:
整型数字(范围:
0-100),字符型(歌手姓名及歌曲名称)
2、输出的形式:
字符型
3、程序所达到的功能:
(1)输入歌手信息
(2)显示歌手信息
(3)投票
(4)显示前十名
4、算法涉及的基本理论分析:
(1)定义结构体singer;
(2)switch语句;
(3)while语句;
(4)for语句;
(5)break语句。
5、题目研究和实现的价值:
通过这个简单的程序初步认识到编程这项工作在将来的程序开发中的作用和价值。
四、算法设计
1、概要设计
各程序模块之间的层次(调用)关系:
2、详细设计
(1)所有函数的算法描述;
①主函数程序:
intmain()
{
SINGERa[N];
intn,choice;
do{
choice=choiceItem();
switch(choice){
case1:
n=input(a);break;
case2:
browse(a,n);break;
case3:
Top10(a,n);break;
case4:
vote(a,n);break;
}
}while(choice!
=0);
printf("\n\nBye!
!
");
return0;
}
②显示主菜单程序:
voiddisplayMenu()
{
printf("\n============主菜单============\n");
printf("\n1..........输入信息\n");
printf("\n2..........显示信息\n");
printf("\n3..........显示前十名\n");
printf("\n4..........投票\n");
printf("\n0..........返回\n");
printf("\n选择:
");
}
intchoiceItem()
{
intchoice;
charline[80];
do{
displayMenu();
gets(line);
choice=atoi(line);
}while(choice<0||choice>4);
returnchoice;
}
③输入信息程序:
intinput(SINGERs[])
{
charbuf[256];
inti=0;
while
(1)
{
printf("\nPleaseInputNoSinger_NameSong_Name\n");
gets(buf);
if(buf[0]=='\0')break;
sscanf(buf,"%d%s%s",&s[i].No,s[i].singer_name,s[i].name);
s[i++].num=1;
}
returni;
}
④显示信息程序:
voidbrowse(SINGERs[],intn)
{
inti;
printf("\nNum\tSinger_Name\tSong_Name\n");
for(i=0;iprintf("%d\t%s\t%s\n",s[i].No,s[i].singer_name,s[i].name);
}
⑤显示前十名程序:
voidTop10(SINGERs[],intn)
{
inti,j,k;
SINGERtemp[N],t;
for(i=0;itemp[i]=s[i];
for(i=0;i{
k=i;
for(j=j+1;jif(temp[k].numif(k!
=i)
{
t=temp[i];
temp[i]=temp[k];
temp[k]=t;
}
}
printf("\nSinger_Name\tSong_Name\n");
for(i=0;i<10&&iprintf("%s\t\t%s\n",temp[i].singer_name,temp[i].name);
}
⑥投票程序:
voidvote(SINGERs[],intn)
{
inti;
charbuf[80];
printf("\nEntersinger'No:
");
gets(buf);
for(i=0;iif(s[i].No==atoi(buf))
{
s[i].num++;
printf("\nVoteOK\n");
break;
}
if(i==n)
printf("ErrorNo.\n");
}
流程图
五、算法实现
#include
#include
#defineN100
typedefstructsinger{
intNo;
charsinger_name[32];
charname[16];
intnum;
}SINGER;
voiddisplayMenu();
intchoiceItem();
intinput(SINGERs[]);
voidbrowse(SINGERs[],intn);
voidTop10(SINGERs[],intn);
voidvote(SINGERs[],intn);
intmain()
{
SINGERa[N];
intn,choice;
do{
choice=choiceItem();
switch(choice){
case1:
n=input(a);break;
case2:
browse(a,n);break;
case3:
vote(a,n);
break;
case4:
Top10(a,n);break;
}
}while(choice!
=0);
printf("\n\nBye!
!
");
return0;
}
voiddisplayMenu()
{
printf("\n================Menu================\n");
printf("\n1============录入歌手信息============\n");
printf("\n2=========显示流行歌手排行榜=========\n");
printf("\n3===============投票=================\n");
printf("\n4==========显示人气歌手排行==========\n");
printf("\n0===============退出=================\n");
printf("\n请选择:
");
}
intchoiceItem()
{
intchoice;
charline[80];
do{
displayMenu();
gets(line);
choice=atoi(line);
}while(choice<0||choice>4);
returnchoice;
}
intinput(SINGERs[])
{
charbuf[256];
inti=0;
while
(1)
{
printf("\n请输入序号歌手姓名歌曲名称\n");
gets(buf);
if(buf[0]=='\0')break;
sscanf(buf,"%d%s%s",&s[i].No,s[i].singer_name,s[i].name);
s[i++].num=1;
}
returni;
}
voidbrowse(SINGERs[],intn)
{
inti;
printf("\n序号\t歌手姓名\t歌曲姓名\n");
for(i=0;iprintf("%d\t%5s\t%12s\n",s[i].No,s[i].singer_name,s[i].name);
}
voidvote(SINGERs[],intn)
{
inti;
charbuf[80];
printf("\n请输入你想投给的歌手序号:
");
gets(buf);
for(i=0;iif(s[i].No==atoi(buf))
{
s[i].num++;
printf("\nVoteOK\n");
break;
}
if(i==n)
printf("ErrorNo.\n");
}
voidTop10(SINGERs[],intn)
{
inti,k,j=0;
SINGERtemp[N],t;
for(i=0;itemp[i]=s[i];
for(i=0;i{
k=i;
for(j=j+1;jif(temp[k].numif(k!
=i)
{
t=temp[i];
temp[i]=temp[k];
temp[k]=t;
}
}
printf("\n歌手姓名\t歌曲姓名\n");
for(i=0;i<10&&iprintf("%s\t\t%s\n",temp[i].singer_name,temp[i].name);
}
六、软件测试
具体情况见截屏或运行程序。
歌手排行榜.c
日志.doc
七、技术讨论
根据题目要求的功能实现,首先应该要考虑整个程序的结构,继而写出整个程序界面的主菜单,根据菜单列出的各项功能,编出相应的算法其中应用到for循环,while循环语句以及switch选择分支语句,定义歌手的信息,必然要用到结构体类型,而且为了实现程序功能,还必须写出主函数以及对主函数进行调用。
八、收获与体会
通过一周的实践周,我们颇有收获。
在分组时我们认识到了要学会团结分工合作,任务不是个人的,而是我们每个人都应尽力去做的。
同时在编译算法的时候,我们学会了运用书本上的知识以及来自互联网的各种信息,从中采取一些相关知识得以运用。
当然编译时常常会出现错误,我们在一起纠正错误同时找到了一些窍门得以提高效率。
在撰写实训报告时我们相互帮助分工合作。
总之,在工作过程中让我们在提高专业技能的同时互相交流增进友谊。
九、软件运行的部分截图及说明
1主菜单显示截图:
2录入歌手信息截图:
3显示流行歌手排行榜截图
4为歌手投票截图
5显示人气歌手排行榜截图
6退出截图
参考文献
C程序设计教程——潭浩强
数据结构(C语言描述)——徐孝凯贺桂英
网络