歌曲管理系统

歌曲管理系统---实现读、写文件中的歌曲信息、浏览、排序、查找、删除歌曲等功能。

#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; }

转载于:https://www.cnblogs.com/newthing/archive/2011/06/29/2157480.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值