音乐管理系统

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "conio.h"
typedef struct msg
{

char name[20]; //歌名
char singer[20]; //演唱者
char author[20]; //作词
char time[15]; //出版时间
struct msg *next;

}music;
music *head;
int sum;//计算输入歌曲数量
void cunruwenjian(music *p)//存入文件
{
FILE*fp;
fp=fopen("yinyue.txt","w");
if(fp==NULL)
{
printf("\n打开文件失败!");
return ;
}
p=head;
while(p->next!=NULL)
{
p=p->next;
fwrite(p,sizeof(music),1,fp);
}
fclose(fp);
}
void lianbiao(music *q)//生成链表
{
FILE *fp;
music *p;
fp=fopen("yinyue.txt","r");
if(fp==NULL)
{
printf("打开文件失败。\n");
return ;
}
p=(music *)malloc(sizeof(music));
while(fread(p,sizeof(music),1,fp)!=0)
{
p->next=q->next;
q->next=p;
q=p;
p=(music *)malloc(sizeof(music));
}
fclose(fp);
}
void mycreat()
{
FILE *fp;
music *p,*last;
sum=0;
fp=fopen("yinyue.txt","a");
head=(music *)malloc(sizeof(music));
last=head;
printf("\n =========请输入歌曲信息:==========\n");
while(1)
{
p=(music *)malloc(sizeof(music));
printf("请输入歌曲名: ");
scanf("%s",p->name);
if(strcmp(p->name,"0")==0)
break;
printf("\n");
printf("请输入歌曲演唱者:");
scanf("%s",p->singer);
printf("\n");
printf("请输入歌曲词作者:");
scanf("%s",p->author);
printf("\n");
printf("请输入歌曲发行时间: ");
scanf("%s",p->time);
printf("\n\n");
fwrite(p,sizeof(music),1,fp);
last->next=p;
last=p;
sum++;
}

fclose(fp);
last->next=NULL;

}
void mydisplay()
{
music *p;
int i;
p=head;

i=1;
if(p==NULL)
{
printf("未创建任何记录!\n");

return;
}
printf("\n编号 歌曲名 演唱者 词作者 发行时间\n");
while(p->next!=NULL)
{
p=p->next;
printf("%d%15s%17s%17s%17s\n",i,p->name,p->singer,p->author,p->time);
i++;
}
sum=i;
getch();
}
void myinsert()
{
int num,i;
music *p,*q;
p=head;

printf("请输入你要插入位置:\n ");
scanf("%d",&num);
if(num>sum)
{
printf("找不到要插入的位置\n");
return ;
}
else
{

q=(music *)malloc(sizeof(music)); //输入歌曲信息
printf("请输入要插入的歌曲信息:\n");
printf("歌曲名:\n");
getchar();
scanf("%s",q->name);
printf("演唱者:\n");
getchar();
scanf("%s",q->singer);
printf("词作者:\n");
getchar();
scanf("%s",q->author);
printf("发行时间:\n");
getchar();
scanf("%s",q->time);
while(p!=NULL)
{
if(strcmp(

p->name,q->name)==0)
{
printf("该歌曲已经存在,无法插入!\n");
return ;
}
p=p->next;
}
p=head;
for(i=0;ip=p->next;
q->next=p->next;
p->next=q;
sum++;
printf("插入成功!\n");

return ;
}

}
void mydelete()
{
char name[20];
music *p,*q;
q=head;
p=head->next;
printf("\n请输入要删除的歌曲名:");

scanf("%s",name);
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
q->next=p->next;
free(p);
printf("删除成功!\n");
return;
}
p=p->next;
q=q->next;
sum--;
}
if(p==NULL)
{
printf("找不到要删除的歌曲!\n");
return;
}

}

void mysearch()
{
int n;
char mingzi[20];
music *p=head->next;
printf("请选择查询的方式:\n");
printf("1、按歌名查询\n2、按演唱者查询\n3、按作者查询\n");
scanf("%d",&n);
if(n==1)
{
printf("您需要查询的歌曲名为:");
/*getchar();*/
scanf("%s",mingzi);
while(p!=NULL)
{
if(strcmp(p->name,mingzi)==0)
{
printf("您查询的歌曲信息为:\n");
printf("歌曲名:");
printf("%s\n",p->name);
printf("演唱者:");
printf("%s\n",p->singer);
printf("作词:");
printf("%s\n",p->author);
printf("发行时间:");
printf("%s\n\n",p->time);

}
p=p->next;
}
return;
if(p==NULL)
printf("没有这首歌的记录!\n");
}
else if(n==2)
{
printf("您需要查询的歌演唱者为:");
getchar();
scanf("%s",mingzi);
while(p!=NULL)
{
if(strcmp(p->singer,mingzi)==0)
{
printf("您查询的歌曲信息为:\n");
printf("歌曲名:");
printf("%s\n",p->name);
printf("演唱者:");
printf("%s\n",p->singer);
printf("作词:");
printf("%s\n",p->author);
printf("发行时间:");
printf("%s\n\n",p->time);

}
p=p->next;
}
return;
if(p==NULL)
printf("没有这首歌的记录!\n");
}
else if(n==3)
{
printf("您需要查询的歌曲词作者为:\n");
getchar();
scanf("%s",mingzi);
while(p!=NULL)
{
if(strcmp(p->author,mingzi)==0)
{
printf("您查询的歌曲信息为:\n");
printf("歌曲名:");
printf("%s\n",p->name);
printf("演唱者:");
printf("%s\n",p->singer);
printf("作词:");
printf("%s\n",p->author);
printf("发行时间:");
printf("%s\n\n",p->time);

}
p=p->next;
}
return;
if(p==NULL)
printf("没有这首歌的记录!\n");
}
else printf("Error!\n");
}
void mysort_name()
{
music *p,*q;
char ch[20];
for(p=head->next;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{

if(strcmp(p->name,q->name)>0)
{
strcpy(ch,p->n

ame);
strcpy(p->name,q->name);
strcpy(q->name,ch);

strcpy(ch,p->singer);
strcpy(p->singer,q->singer);
strcpy(q->singer,ch);

strcpy(ch,p->author);
strcpy(p->author,q->author);
strcpy(q->author,ch);

strcpy(ch,p->time);
strcpy(p->time,q->time);
strcpy(q->time,ch);
}
}

}
cunruwenjian(head);
mydisplay();
}
void mysort_author()
{
music *p,*q;
char ch[20];
for(p=head->next;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{

if(strcmp(p->author,q->author)>0)
{
strcpy(ch,p->name);
strcpy(p->name,q->name);
strcpy(q->name,ch);

strcpy(ch,p->singer);
strcpy(p->singer,q->singer);
strcpy(q->singer,ch);

strcpy(ch,p->author);
strcpy(p->author,q->author);
strcpy(q->author,ch);

strcpy(ch,p->time);
strcpy(p->time,q->time);
strcpy(q->time,ch);
}
}
}
cunruwenjian(head);
mydisplay();
}
void mymodify()
{
music *p=head->next;
char name[20];
printf("\n请输入要修改的歌名:");
getchar();
scanf("%s",name);
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
printf("\n修改前,歌名为%s的歌曲信息如下:",name);
printf("\n歌曲名 演唱者 词作者 发行时间\n\n");
printf("%s%15s%17s%17s\n",p->name,p->singer,p->author,p->time);
printf("请输入修改信息:\n");
printf("新歌曲名:");
getchar();
scanf("%s",p->name);
printf("\n新演唱者:");
getchar();
scanf("%s",p->singer);
printf("\n新词作者:");
getchar();
scanf("%s",p->author);
printf("\n新发行时间:");
getchar();
scanf("%s",p->time);
printf("\n修改成功!\n");
printf("\n修改后,歌名为%s的歌曲信息如下:\n",name);
printf("\n歌曲名 演唱者 词作者 发行时间\n\n");
printf("%s%18s%19s%18s\n",p->name,p->singer,p->author,p->time);
return;
}
p=p->next;
}
if(p==NULL)
{
printf("该歌曲不存在!\n");
return;
}
cunruwenjian(head);
}
void mymenu()
{
printf("\n\n");
printf(" *************** 欢迎使用音乐管理系统 ****************\n");
printf("\n\n");
printf(" -----------------------------------------------------------\n");
printf(" | ---------------------------------------------------- |\n");
printf(" | | 请输入选项编号(0-8): | |\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(" | | 0--退出 | |\n");
printf(" | ----------------------------------------------------- |\n");
printf(" -----------------------------------------------------------\n");

}
void main()
{
char choose;
head=(music*)malloc(sizeof(music));
head->next=NULL;
lianbiao(head);
while(1)
{
mymenu();
printf(" 请输入您要操作的选项:");
choose=getch();
switch(choose)
{
case'1': mycreat(); break;
case'2': mydelete(); cunruwenjian(head); break;
case'3': mydisplay(); break;
case'4': mysearch(); break;
case'5': mysort_name(); break;
case'6': mysort_author();break;
case'7': mymodify(); break;
case'8': myinsert(); cunruwenjian(head);break;
case'0': break;
default:printf("\n %c为无效选项!\n",choose);

}
if(choose=='0')
break;
getch();
}
}










相关文档
最新文档