/***********************************************************
我的信息: *
姓名: 汪建林 生日:1985年2月26日 *
毕业学校: 2007年于成都理工大学 *
家乡地址: 四川渠县望溪乡包山村5组 *
联系QQ: 287307421 联系电话: 13558690869 *
联系Email: wangjianlin1985@126.com 287307421 *
双鱼林程序淘宝店: http://shop34864101.taobao.com *
双鱼林程序拍拍店: http://287307421.paipai.com *
网站: http://www.shuangyulin.com *
*
需要更多程序可以联系我,保证运行! *
***********************************************************/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#define N 20
#define FILENAME "songs.txt"
struct song
{
int num; /*歌曲编号*/
char name[30]; /*歌曲名称*/
char singer[30]; /*歌手姓名*/
char editor[30]; /*专辑名称*/
char type[30]; /*歌曲流派*/
int date; /*出版年份*/
char address[30]; /*发行地区*/
int time; /*歌曲时长*/
int times; /*点唱人数*/
float score; /*评价分数*/
};
/*******************************************************
功能:显示菜单
参数:无
返回值:无
*******************************************************/
void scan()
{
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++*++++++\n");
printf("+ KTV歌曲管理系统 +\n");
printf("+ +\n");
printf("+ 1. 输入信息 +\n");
printf("+ 2. 输出信息 +\n");
printf("+ 3. 按歌曲编号查 +\n");
printf("+ 4. 按歌曲名查 +\n");
printf("+ 5. 按专辑名称查 +\n");
printf("+ 6. 按歌手姓名查 +\n");
printf("+ 7. 添加歌曲信息 +\n");
printf("+ 8. 删除歌曲信息 +\n");
printf("+ 9. 修改歌曲信息 +\n");
printf("+ 10. 点歌功能 +\n");
printf("+ 11. 评价功能 +\n");
printf("+ 12. 按点唱人数排序 +\n");
printf("+ 13. 按评价分数数排序 +\n");
printf("+ 14. 从文件读 +\n");
printf("+ 15. 程序结束 +\n");
printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
/*******************************************************
功能:登陆函数,验证口令
参数:
参数1:n
类型:char []
说明:用户输入口令
返回值:1或0
类型:int
说明:1表示通过验证;0表示没有通过
*******************************************************/
int login(char password[])
{
static char key[20]="123";
if(strcmp(password,key)==0)
return 1;
else
return 0;
}
/*******************************************************
功能:从文件读信息到结构体数组中
参数:
参数1:songs[]
类型:song []
说明:用来存储从文件读到的歌曲信息
返回值:i
类型:int
说明:表示实际读取到的个数
*******************************************************/
int readFromFile(struct song songs[])
{
FILE *fp=NULL;
int i=0;
fp=fopen(FILENAME,"rb"); /*打开文件*/
if(fp!=NULL)
{
while(!feof(fp)) /*从文件中读入歌曲*/
{
if(i>=N)
break;
if(fread(songs+i,sizeof(struct song),1,fp)==1)
i++;
}
fclose(fp);
}
return i;
}
/*******************************************************
功能:判断歌曲是否唯一
参数:
参数1:songs[]
类型:song []
说明:存储歌曲信息的数组
参数2:N
类型:int
说明:表示实际数组的长度
参数2:songsnum
类型:int
说明:要判断的歌曲编号
返回值:1或0(flag)
类型:int
说明:1表示歌曲唯一;0表示歌曲不唯一。
*******************************************************/
int unique(struct song songs[],int n,int songsnum,int cur)
{
int flag=1,i;
for(i=0;i<n;i++)
{
if(songs[i].num==songsnum&&i!=cur)
{
flag=0;
break;
}
}
return flag;
}
/*******************************************************
功能:输入信息到结构体数组中
参数:
参数1:songs[]
类型:song []
说明:用来存储歌曲信息的数组
参数2:N
类型:int
说明:表示实际数组的长度
返回值:i
类型:int
说明:表示增加信息后,实际数组的长度
*******************************************************/
int input(struct song songs[],int n)
{
int i=n;
int endFlag=0;
printf("请输入歌曲信息,以歌曲编号为零结束:\n");
while(i<N)
{
while(1)
{
int flag;
printf ("编号:");
scanf("%d",&songs[i].num);
if(songs[i].num==0)
{
endFlag=1;
break;
}
flag=unique(songs,i,songs[i].num,i);
if(flag) break;
printf("该编号已经存在,请重新输入!\n");
}
if(endFlag==1)
break;
printf ("歌曲名:");
scanf("%s",songs[i].name);
printf ("歌手:");
scanf("%s",songs[i].singer);
printf ("专辑:");
scanf("%s",songs[i].editor);
printf ("流派:");
scanf("%s",songs[i].type);
printf ("发行日期:");
scanf("%d",&songs[i].date);
printf ("发行地区:");
scanf("%s",songs[i].address);
printf("时长: ");
scanf("%d min",&songs[i].time);
i++;
}
return i;
}
/*******************************************************
功能:删除歌曲信息
参数:
参数1:songs[]
类型:song []
说明:用来存储歌曲信息的数组
参数2:N
类型:int
说明:表示实际数组的长度
返回值:i
类型:int
说明:表示删除信息后,实际数组的长度
*******************************************************/
//int N=i;
int del(struct song songs[],int n)
{
int i,j,found=0;
char delname[20];
char choice;
printf("请你输入要删除的歌曲名称:\n"); /*删除的歌曲的信息*/
scanf("%s",delname);
for(i=0;i<n;i++)
{
if(strcmp(songs[i].name,delname)==0)
{ found++;
printf("找到啦!\n");
printf("编号:%d\n",songs[i].num);
printf("歌名:%s\n",songs[i].name);
printf("歌手:%s\n",songs[i].singer);
printf("专辑:%s\n",songs[i].editor);
printf("流派:%s\n",songs[i].type);
printf("发行日期:%d\n",songs[i].date);
printf("发行地区:%s\n",songs[i].address);
printf("时长:%d min\n",songs[i].time);
printf("你确实要删除这首歌吗?(Y/N)");
getchar();
scanf("%c",&choice);
if(choice=='Y'||choice=='y')
{
for(j=i;j<n;j++)
songs[j]=songs[j+1];
n--;
printf("删除成功!\n");
}
i--;
}
}
if(found==0)
printf("\n指定的歌曲不存在!\n");
return n;
}
/*******************************************************
功能:修改歌曲信息
参数1:songs[]
类型:song []
说明:用来存储歌曲信息的数组
参数2:N
类型:int
说明:表示实际数组的长度
返回值:无
*********************************************************/
void changecommunicate(struct song songs[],int n)
{
int i,found=0;
char chcname[20];
int choicecom;
printf("请你输入你要修改的歌曲名称:\n");/*修改的歌曲的信息*/
scanf("%s",chcname);
for(i=0;i<n;i++)
{
if(strcmp(songs[i].name,chcname)==0)
{ found++;
printf("以下为您所要修改的歌曲的信息:\n");
printf("歌曲名称为%s\n",songs[i].name);
printf("歌手姓名%s\n",songs[i].singer);
printf("专辑名称为%s\n",songs[i].editor);
printf("歌曲流派为%s\n",songs[i].type);
printf("出版年份为%d\n",songs[i].date);
printf("发行地区为%s\n",songs[i].address);
printf("歌曲时长为%d min\n",songs[i].time