您的位置:首页 > 其它

文件的输入输出_歌曲管理系统

2015-07-11 11:11 441 查看
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
int i=0;
struct song /*结构体数组*/
{
char writer[20];
char singer[20];
char time[20];
char name[20];
}son[100];

/*以下为输入函数*/
void enter()
{
int j;
char c[2];
FILE *fp;
if((fp=fopen("data.doc","w"))==NULL) /*以写的方式打开,并判断是否将文件读完*/  //w是只写的方式
{
printf("不能打开文件!\n");
exit(0);
}
for(j=0;j<i;j++)
{
fwrite(&son[j],sizeof(struct song),1,fp); /*数据块输出函数,用于将数据输出到磁盘文件中*/
}
while(1)
{
printf("请输入作曲人:\n");
scanf("%s",son[i].writer);
printf("请输入歌曲名:\n");
scanf("%s",son[i].name);
printf("请输入演唱者:\n");
scanf("%s",son[i].singer);
printf("请输入发行年代:\n");
scanf("%s",son[i].time);
if(fwrite(&son[i++],sizeof(struct song),1,fp)!=1)   //写文件  如果操作正确返回值是1
printf("文件写入错误!\n");
else
printf("成功!\n");
printf("是否要继续输入?( 是[y]/否
) \n");
scanf("%s",c);
if(strcmp(c,"n")==0)
break;
}
fclose(fp);
}
int cmp(const void *a, const void *b)
{
return strcmp(((song*)a)->name,((song*)b)->name);
}
void sort()
{
int j,v;
FILE *fp;
fp=fopen("data.doc","rb");    //rb是只读的意思
for(j=0;j<100;j++)
{
if(fread(&son[j],sizeof(struct song),1,fp)!=1)
break;
}
v=j;
fclose(fp);
qsort(son,j,sizeof(son[0]),cmp);
fp=fopen("data.doc","wb");
for(j=0;j<v;j++)    //向一个文件从新写入信息
//for(j=i; j<i+v; j++)
{
fwrite(&son[j],sizeof(struct song),1,fp);
}
fclose(fp);
printf("排序完成!\n");
}
/*以下为删除模块*/
void del()
{
int j,v,c;
char w[20];
FILE *fp;
printf("请输入你想要删除的歌曲名:");
scanf("%s",w);   //
fp=fopen("data.doc","rb");  //rb是只读的意思
for(j=0;;j++)
{
if(fread(&son[j],sizeof(struct song),1,fp)!=1)  //如果是正确的返回值是1
break;
}
v=j;
for(j=0;j<v;j++)
{
if(strcmp(w,son[j].name)==0)
{
c=j;
break;
}
}
fclose(fp);
fp=fopen("data.doc","wb");    //wb是只写的意思
for(j=0;j<v;j++)
{
if(j!=c)
fwrite(&son[j],sizeof(struct song),1,fp);
}
fclose(fp);
printf("删除成功!\n");
i--;
}

/*以下函数用于浏览*/
void scan()
{
int j;
FILE *fp;
fp=fopen("data.doc","rb");    //rb是只读的意思
for(j=0;;j++)
{
if(fread(&son[j],sizeof(struct song),1,fp)==1)
{
printf(" 歌曲名:%s\n",son[j].name);
printf(" 作曲人:%s\n",son[j].writer);
printf(" 演唱者:%s\n",son[j].singer);
printf(" 发行年代:%s\n",son[j].time);
printf("**************************************************************\n");
}
else
break;
}
fclose(fp);
}

/*以下为搜索模块*/
void search()
{
int flag,j,x;
char w[20];
FILE *fp;
char v[20];
printf("1.作曲人\n");
printf("2.演唱者\n");
printf("3.歌曲名\n");
printf("Please choose which you want to search:\n");
scanf("%d",&x);
if(x==3)
{
flag=0;
printf("Please input the song's name:");
scanf("%s",w);
fp=fopen("data.doc","rb");   //rb是只读的意思
for(j=0;;j++)
{
if(fread(&son[j],sizeof(struct song),1,fp)!=1)
break;
if(strcmp(son[j].name,w)==0)
{
printf(" 歌曲名:%s\n",son[j].name);
printf(" 作曲人:%s\n",son[j].writer);
printf(" 演唱者:%s\n",son[j].singer);
printf(" 发行年代:%s\n",son[j].time);
printf("\n*************************************************************\n");
flag=1;

}
}
if(flag==0)
printf("歌曲不存在!\n");
fclose(fp);
}
else if(x==2)
{
flag=0;
printf("请输入演唱者:");
scanf("%s",v);
fp=fopen("data.doc","rb");   //rb是只读的意思
for(j=0;;j++)
{
if(fread(&son[j],sizeof(struct song),1,fp)!=1)
break;
if(strcmp(son[j].singer,v)==0)
{
printf(" 歌曲名:%s\n",son[j].name);
printf(" 作曲人:%s\n",son[j].writer);
printf(" 演唱者:%s\n",son[j].singer);
printf(" 发行年代:%s\n",son[j].time);
printf("***********************************************************************\n");
flag=1;
}
}
if(flag==0)
printf("歌曲不存在!\n");
fclose(fp);
}
else if(x==1)
{
flag=0;
printf("请输入作曲人:");
scanf("%s",w);
fp=fopen("data.doc","rb");
for(j=0;;j++)
{
if(fread(&son[j],sizeof(struct song),1,fp)!=1)
break;
if(strcmp(son[j].writer,w)==0)
{
printf(" 歌曲名:%s\n",son[j].name);
printf(" 作曲人:%s\n",son[j].writer);
printf(" 演唱者:%s\n",son[j].singer);
printf(" 发行年代:%s\n",son[j].time);
printf("*******************************************************************\n");
flag=1;

}
}
if(flag==0)
printf("歌曲不存在!\n");
fclose(fp);
}
else printf("错误!\n");
}
int main()
{
int a;
while(1)
{
printf("\n\n\n\t\t*********************主菜单********************\n\n" ) ;
printf("\t\t\t 1.输入\n");
printf("\t\t\t 2.删除\n");
printf("\t\t\t 3.浏览\n");
printf("\t\t\t 4.搜索\n");
printf("\t\t\t 5.排序\n");
printf("\t\t\t 6.退出\n");
printf("\t\t*************************************************\n");
printf("\n\t\t\t请选择数字以进入系统(1-6):");
scanf("%d",&a);
if(a==0)
break;
switch(a)
{
case 1:enter();break;
case 2:del();break;
case 3:scan();break;
case 4:search();break;
case 5:sort();scan();break;
case 6:return 0;
default:
break;
}
}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: