歌曲管理系统---实现读、写文件中的歌曲信息、浏览、排序、查找、删除歌曲等功能。
- #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.txt","w"))==NULL) /*以写的方式打开,并判断是否将文件读完*/
- {
- 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) //写文件
- printf("文件写入错误!/n");
- else
- printf("成功!/n");
- printf("是否要继续输入?( 是[y]/否[n]) /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.txt","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.txt","wb");
- for(j=0;j<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.txt","rb");
- for(j=0;j<100;j++)
- {
- if(fread(&son[j],sizeof(struct song),1,fp)!=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.txt","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.txt","rb");
- for(j=0;j<100;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("**************************************************************88/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.txt","rb");
- for(j=0;j<100;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.txt","rb");
- for(j=0;j<100;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.txt","rb");
- for(j=0;j<100;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(void)
- {
- 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;
- }