文件的输入输出_歌曲管理系统
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; }
相关文章推荐
- 相关资料网站
- iOS 8 Xcode6 设置Launch Image 启动图片
- leetcode136 Single Number
- LeetCode---(102)Binary Tree Level Order Traversal
- LeetCode Summary Ranges
- linux 常用命令
- IoC以及Bean概念
- MySQL concat函数的使用
- MySQL备份还原——mysqldump工具介绍
- excel导出、导入功能
- installation of package ‘rgeos’ had non-zero exit status
- Android ListView图片错误问题
- static关键字
- Android开源库SlideMenu如何实现沉浸式效果
- 图的m着色问题
- java 抽象类和接口的区别
- 程序识别MySQL数据库中文的问题
- java对象创建过程 笔记
- 接口和抽象类有什么区别
- SurfaceView学习遇到常见问题