KTV歌曲管理系统

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

[cpp:firstline[0]] view plain copy print ?
  1. #include "stdio.h"   
  2. #include "stdlib.h"   
  3. #include "malloc.h"   
  4. #include "string.h"   
  5. int i=0;  
  6. struct song /*结构体数组*/  
  7. {  
  8.     char writer[20];  
  9.     char singer[20];  
  10.     char time[20];  
  11.     char name[20];  
  12. }son[100];  
  13.   
  14. /*以下为输入函数*/  
  15. void enter()     
  16. {  
  17.     int j;  
  18.     char c[2];  
  19.     FILE *fp;  
  20.     if((fp=fopen("data.txt","w"))==NULL) /*以写的方式打开,并判断是否将文件读完*/  
  21.     {  
  22.         printf("不能打开文件!/n");  
  23.         exit(0);  
  24.     }  
  25.     for(j=0;j<i;j++)    
  26.     {    
  27.         fwrite(&son[j],sizeof(struct song),1,fp); /*数据块输出函数,用于将数据输出到磁盘文件中*/  
  28.     }    
  29.     while(1)  
  30.     {  
  31.         printf("请输入作曲人:/n");  
  32.         scanf("%s",son[i].writer);  
  33.         printf("请输入歌曲名:/n");  
  34.         scanf("%s",son[i].name);  
  35.         printf("请输入演唱者:/n");  
  36.         scanf("%s",son[i].singer);  
  37.         printf("请输入发行年代:/n");  
  38.         scanf("%s",son[i].time);   
  39.         if(fwrite(&son[i++],sizeof(struct song),1,fp)!=1)   //写文件   
  40.             printf("文件写入错误!/n");   
  41.         else  
  42.             printf("成功!/n");  
  43.         printf("是否要继续输入?( 是[y]/否[n]) /n");  
  44.         scanf("%s",c);  
  45.         if(strcmp(c,"n")==0)  
  46.             break;     
  47.     }   
  48.     fclose(fp);  
  49. }  
  50. int cmp(const void *a, const void *b)  
  51. {  
  52.     return strcmp(((song*)a)->name,((song*)b)->name);  
  53. }  
  54. void sort()  
  55. {  
  56.     int j,v;  
  57.     FILE *fp;  
  58.     fp=fopen("data.txt","rb");    
  59.     for(j=0;j<100;j++)    
  60.     {  
  61.         if(fread(&son[j],sizeof(struct song),1,fp)!=1)  
  62.             break;  
  63.     }  
  64.     v=j;  
  65.     fclose(fp);  
  66.     qsort(son,j,sizeof(son[0]),cmp);  
  67.     fp=fopen("data.txt","wb");    
  68.     for(j=0;j<v;j++)    
  69.     {  
  70.         fwrite(&son[j],sizeof(struct song),1,fp);    
  71.     }    
  72.     fclose(fp);  
  73.     printf("排序完成!/n");  
  74. }  
  75. /*以下为删除模块*/  
  76. void del()    
  77. {  
  78.     int j,v,c;  
  79.     char w[20];    
  80.     FILE *fp;  
  81.     printf("请输入你想要删除的文件名:");  
  82.     scanf("%s",w);    
  83.     fp=fopen("data.txt","rb");    
  84.     for(j=0;j<100;j++)    
  85.     {  
  86.         if(fread(&son[j],sizeof(struct song),1,fp)!=1)  
  87.             break;  
  88.     }  
  89.     v=j;  
  90.     for(j=0;j<v;j++)    
  91.     {    
  92.         if(strcmp(w,son[j].name)==0)  
  93.         {  
  94.             c=j;  
  95.             break;  
  96.         }  
  97.     }  
  98.     fclose(fp);  
  99.     fp=fopen("data.txt","wb");    
  100.     for(j=0;j<v;j++)    
  101.     {  
  102.         if(j!=c)    
  103.             fwrite(&son[j],sizeof(struct song),1,fp);    
  104.     }    
  105.     fclose(fp);  
  106.     printf("删除成功!/n");  
  107.     i--;  
  108. }  
  109.   
  110. /*以下函数用于浏览*/  
  111. void scan()    
  112. {    
  113.     int j;    
  114.     FILE *fp;    
  115.     fp=fopen("data.txt","rb");    
  116.     for(j=0;j<100;j++)    
  117.     {    
  118.         if(fread(&son[j],sizeof(struct song),1,fp)==1)  
  119.         {  
  120.             printf(" 歌曲名:%s/n",son[j].name);  
  121.             printf(" 作曲人:%s/n",son[j].writer);  
  122.             printf(" 演唱者:%s/n",son[j].singer);  
  123.             printf(" 发行年代:%s/n",son[j].time);  
  124.             printf("**************************************************************88/n");  
  125.         }  
  126.         else  
  127.             break;  
  128.     }    
  129.     fclose(fp);  
  130. }  
  131.   
  132. /*以下为搜索模块*/  
  133. void search()    
  134. {    
  135.     int flag,j,x;  
  136.     char w[20];  
  137.     FILE *fp;  
  138.     char v[20];    
  139.     printf("1.作曲人/n");    
  140.     printf("2.演唱者/n");  
  141.     printf("3.歌曲名/n");  
  142.     printf("Please choose which you want to search:/n");  
  143.     scanf("%d",&x);    
  144.     if(x==3)    
  145.     {    
  146.         flag=0;  
  147.         printf("Please input the song's name:");    
  148.         scanf("%s",w);    
  149.         fp=fopen("data.txt","rb");    
  150.         for(j=0;j<100;j++)    
  151.         {    
  152.             if(fread(&son[j],sizeof(struct song),1,fp)!=1)  
  153.                 break;    
  154.             if(strcmp(son[j].name,w)==0)    
  155.             {    
  156.                 printf(" 歌曲名:%s/n",son[j].name);  
  157.                 printf(" 作曲人:%s/n",son[j].writer);  
  158.                 printf(" 演唱者:%s/n",son[j].singer);  
  159.                 printf(" 发行年代:%s/n",son[j].time);  
  160.                 printf("/n*************************************************************/n");  
  161.                 flag=1;  
  162.   
  163.             }    
  164.         }    
  165.         if(flag==0)  
  166.             printf("歌曲不存在!/n");    
  167.         fclose(fp);  
  168.     }  
  169.     else if(x==2)    
  170.     {    
  171.         flag=0;  
  172.         printf("请输入演唱者:");    
  173.         scanf("%s",v);  
  174.         fp=fopen("data.txt","rb");    
  175.         for(j=0;j<100;j++)    
  176.         {    
  177.             if(fread(&son[j],sizeof(struct song),1,fp)!=1)  
  178.                 break;    
  179.             if(strcmp(son[j].singer,v)==0)    
  180.             {    
  181.                 printf(" 歌曲名:%s/n",son[j].name);  
  182.                 printf(" 作曲人:%s/n",son[j].writer);  
  183.                 printf(" 演唱者:%s/n",son[j].singer);  
  184.                 printf(" 发行年代:%s/n",son[j].time);  
  185.                 printf("***********************************************************************/n");  
  186.                 flag=1;  
  187.             }    
  188.         }    
  189.         if(flag==0)  
  190.             printf("歌曲不存在!/n");    
  191.         fclose(fp);  
  192.     }    
  193.     else if(x==1)    
  194.     {  
  195.         flag=0;  
  196.         printf("请输入作曲人:");    
  197.         scanf("%s",w);    
  198.         fp=fopen("data.txt","rb");    
  199.         for(j=0;j<100;j++)    
  200.         {    
  201.             if(fread(&son[j],sizeof(struct song),1,fp)!=1)  
  202.                 break;    
  203.             if(strcmp(son[j].writer,w)==0)    
  204.             {    
  205.                 printf(" 歌曲名:%s/n",son[j].name);  
  206.                 printf(" 作曲人:%s/n",son[j].writer);  
  207.                 printf(" 演唱者:%s/n",son[j].singer);  
  208.                 printf(" 发行年代:%s/n",son[j].time);  
  209.                 printf("*******************************************************************/n");  
  210.                 flag=1;  
  211.   
  212.             }    
  213.         }    
  214.         if(flag==0)  
  215.             printf("歌曲不存在!/n");    
  216.         fclose(fp);  
  217.     }  
  218.     else printf("错误!/n");  
  219. }    
  220. int main(void)  
  221. {  
  222.     int a;  
  223.     while(1)  
  224.     {  
  225.         printf("/n/n/n/t/t*********************主菜单*********************/n/n" ) ;     
  226.         printf("/t/t/t 1.输入/n");  
  227.         printf("/t/t/t 2.删除/n");  
  228.         printf("/t/t/t 3.浏览/n");  
  229.         printf("/t/t/t 4.搜索/n");  
  230.         printf("/t/t/t 5.排序/n");  
  231.         printf("/t/t/t 6.退出/n");  
  232.         printf("/t/t*************************************************/n");  
  233.         printf("/n/t/t/t请选择数字以进入系统(1-6):");  
  234.         scanf("%d",&a);  
  235.         if(a==0)  
  236.             break;  
  237.         switch(a)  
  238.         {  
  239.         case 1:enter();break;  
  240.         case 2:del();break;  
  241.         case 3:scan();break;  
  242.         case 4:search();break;  
  243.         case 5:sort();scan();break;  
  244.         case 6:return 0;  
  245.         default:  
  246.             break;  
  247.         }  
  248.     }  
  249.     system("pause");  
  250.     return 0;  
  251. }  

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值