当前位置:   article > 正文

【C语言】软件开发基础篇--CL音乐_c语言 音乐

c语言 音乐

作为基础篇,实现软件的那些功能呢?

a.构建基本框架

b.围绕歌曲信息的增删查改进行的

c.将内容通过文件操作存进文档

d.整理歌曲内容(排序)

e.实现简单的歌曲播放功能

有人可能就会问了,需要掌握C语言那些知识才能实现这些功能呢?

主要是 :数组,函数,指针,结构体,文件操作等知识即可.

接下来,带大家一起实操

首先,为了让部分功能分工明确,我们可以建立三个cpp文件,(播放音乐需要在c++的环境下)一个头文件,将他看成一个盖房子的过程:

CL-music.h 头文件(建筑图纸)

Basic struct.cpp 用来构建框架,地基

Function interface.cpp 功能界面(给建筑上色,标明门牌号)

play.cpp 实现各部分功能(家具)

首先从创建好的Basic struct.cpp开始实现

想象一下

在我们登录类似于QQ音乐,网易音乐的时候刚开始是不是都有一个登录界面,然后显示音乐logo

这里我们可以分装两个函数

  1. //初始化界面 
  2. Init_picture();
  3. //登录
  4. Lojin();

接着在CL-music.h实现函数声明(可以把所有需要引用的头文件都写入CL-music.h,其他文件只需要引用一下此头文件即可,例如#include"CL-music.h")

这两项都不需要返回值,所以写成void即可

  1. //初始化加载界面
  2. void Init_picture();
  3. //登录/注册
  4. void Lojin();

接下来在Basic struct.cpp里实现

初始化界面就不展示啦,大家可以根据自己的创意来设计logo~

登录如何实现呢?

想象一下

大家刚开始在使用这个软件的时候是不是都没账号,所以要有注册界面,然后再登录(已有账号可以直接跳过注册),账号通过两个数组来维护,一个是注册时输入的,一个是登录时确定的,通过比较即可确定是否输入正确,密码也是如此,账号或密码输入需要重新输入.

下面是登录代码:

  1. //登录
  2. void Lojin()
  3. {
  4. printf("|-----------------------------------------|\n");
  5. printf(" 请登录 \n");
  6. printf("|-----------------------------------------|\n");
  7. char account[10] = { 0 };
  8. char password[10] = { 0 };
  9. char account_1[10] = { 0 };
  10. char password_1[10] = { 0 };
  11. while (1)
  12. {
  13. printf("请输入账号(如果您还没有账号请输入\"*\"注册账号) :");
  14. scanf("%s", account_1);
  15. if (account_1[0] == '*')
  16. {
  17. printf("\n请输入您要注册的账号:");
  18. scanf("%s", account);
  19. printf("\n请输入您要注册的密码:");
  20. scanf("%s", password);
  21. printf("注册成功\n");
  22. }
  23. else
  24. {
  25. if (strcmp(account, account_1) == 0)
  26. {
  27. printf("请输入密码:");
  28. scanf("%s", &password_1);
  29. if (strcmp(password, password_1) == 0)
  30. {
  31. printf("登录成功\n");
  32. printf("正在为您加载...\n");
  33. Sleep(4000);
  34. system("cls");
  35. return;
  36. }
  37. else
  38. {
  39. printf("密码错误,请重新输入!\n");
  40. }
  41. }
  42. else
  43. {
  44. printf("账户错误,请重新输入!\n");
  45. }
  46. }
  47. }
  48. }

成功登录进入后,是不是因该转入功能界面了呢?

大家可以自己想象设计一下功能界面,比如热门歌曲选项,主页,搜索,等等

由于是基础篇,不需要考虑网络搭建,有些界面只需要一个形式即可

下面是功能界面代码实现:

  1. //加载功能界面--主界面
  2. int Func_picture()
  3. {
  4. printf("|-----------------------------------------|\n");
  5. printf("| 搜索(1): |\n");
  6. printf("|-----------------------------------------|\n");
  7. printf("| 热门(2) | 歌单(3) | 主页(4) |\n");
  8. printf("|-----------------------------------------|\n");
  9. printf("|-----------------------------------------|\n");
  10. printf("| |\n");
  11. printf("| |\n");
  12. printf("| 欢迎您来到 |\n");
  13. printf("| |\n");
  14. printf("| CL |\n");
  15. printf("| 海报 海报 |\n");
  16. printf("| musci |\n");
  17. printf("| |\n");
  18. printf("| ... |\n");
  19. printf("| |\n");
  20. printf("| 关闭程序(0) |\n");
  21. printf("| |\n");
  22. printf("|-----------------------------------------|\n");
  23. printf("请输入您要进行操作的序号:");
  24. int input = 0;
  25. scanf("%d", &input);
  26. system("cls");
  27. return input;
  28. }

以上各功能只需输入对应的序号即可执行操作,并通过system("cls");清除界面,实现界面跳转

补充一点,system函数来源于stdlib.h文件,登录界面的字符串比较函数来自string.h因此需要在头文件里包含

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

int Func_picture();这个功能界面为什么需要返回值呢?

接下来看主体框架

  1. int main()
  2. {
  3. //初始化加载界面
  4. Init_picture();
  5. int input1 = 0;
  6. Lojin();//登录
  7. do
  8. {
  9. switch (input1 = Func_picture())
  10. {
  11. case 1:
  12. break;
  13. case 2:
  14. break;
  15. case 3:
  16. break;
  17. case 4:
  18. break;
  19. case 5:
  20. break;
  21. case 0:
  22. printf("退出音乐\n");
  23. return 0;
  24. default:
  25. printf("输入非法,请重新输入!\n");
  26. break;
  27. }
  28. } while (input1);
  29. return 0;
  30. }

通过 Func_picture();的返回值来判断进入哪个case语句,并实现相应功能

既然是歌曲库,那么何来的库呢?

这里通过结构来创建歌曲库

结构体放入.h文件即可

  1. typedef struct Songinfo //歌曲相关信息
  2. {
  3. char Charname[NAME_MAX];
  4. char Charauthor[AUTHOR_MAX];
  5. char Charsinger[SINGER_MAX];
  6. char Charpub_date[DATE_MAX];
  7. }Songinfo;

这里的数量我用的#define定义的,可以方便后期维护和修改

  1. #define NAME_MAX 20
  2. #define AUTHOR_MAX 20
  3. #define SINGER_MAX 20
  4. #define DATE_MAX 11

可是我们总不可能写入一个歌曲信息就去手动创建一个

可以另外创建一个结构体,实现真正的歌曲库,里面包含一个结构体数组和一个计数器,每添加一个歌曲信息就将计数器加1,这样不仅实现了多信息的存储,也记录了信息的存储数量

  1. typedef struct Song_library //歌曲库
  2. {
  3. Songinfo arr[MUSIC_MAX];//添加进的歌曲
  4. int sz;//记录当前有效信息数
  5. }Song_library

创建歌曲库,命名为son

  1. //歌曲库
  2. Song_library son;

下一步,将结构体数据初始化,写入play.cpp

注意这里传址

  1. //初始化库存音乐
  2. void Init_library(Song_library* son)
  3. {
  4. son->sz = 0;
  5. memset(son->arr, 0, sizeof(son->arr));
  6. }

接下来就可以一步一步实现功能界面部分功能啦

既然是实现功能,不妨将这些功能分装成不同的函数,放在play.cpp中

注意:不要忘记将这些函数声明哦~

首先是

搜索歌曲功能

通过搜索歌曲名,展示出歌曲相应信息

如何实现呢

可以通过遍历数组,用字符串比较函数的方法来查询

下面是搜索代码实现

  1. //查找信息
  2. static int Find_song(const Song_library* son, char name[NAME_MAX])
  3. {
  4. assert(son != NULL);
  5. int i = 0;
  6. for (i = 0; i < son->sz; i++)
  7. {
  8. if (0 == strcmp(name, son->arr[i].Charname))
  9. {
  10. return i;
  11. }
  12. }
  13. return -1;
  14. }

注:assert(son != NULL);保证指针有效性

细心的小伙伴可能就发现了,

这里的static是干什么的?

const又是干什么的?

第一个问题:想象一下,如果在未来的公司里,每个文件分别实现不同功能,当代码量特别大的时候,在两个不同的文件下定义了两个同名的函数,但是要实现不同的功能,这时代码就会出现冗余的现象,为了避免,加上static关键字,将其修饰为静态变量,使其函数功能的实现只能在本文件里使用,就有效防止了代码的冗余.

第二个问题:搜索功能不需要去修改什么,const是为了防止Song_library* son被修改,这样加强了代码,未来实现一个大的工程,不是只有你一个人在完成这个项目,别人可能并不知道这个变量不能被修改!

第二个模块:

热门选项:

  1. //热门
  2. void Hot()
  3. {
  4. printf("|-----------------------------------------|\n");
  5. printf("| 热门 |\n");
  6. printf("|-----------------------------------------|\n");
  7. printf("| 今日榜单 |\n");
  8. printf("| |\n");
  9. printf("| 说好不哭 周杰伦 试听(1) |\n");
  10. printf("| |\n");
  11. printf("| 不为谁而作的歌 林俊杰 试听(2) |\n");
  12. printf("| |\n");
  13. printf("| 七里香 周杰伦 试听(3) |\n");
  14. printf("| |\n");
  15. printf("| ... |\n");
  16. printf("| 返回(0) |\n");
  17. printf("| |\n");
  18. printf("|-----------------------------------------|\n");
  19. int input = 0;
  20. printf("请选择:");
  21. scanf("%d", &input);
  22. switch (input)
  23. {
  24. case 1:
  25. system("cls");
  26. Music(input);
  27. break;
  28. case 2:
  29. system("cls");
  30. Music(input);
  31. break;
  32. case 3:
  33. system("cls");
  34. Music(input);
  35. break;
  36. case 0:
  37. system("cls");
  38. break;
  39. default:
  40. printf("输入非法,请重新输入!\n");
  41. break;
  42. }
  43. system("cls");

一个简易的播放界面,作为试听歌曲

第三个模块:

歌单界面:

  1. int Playlist_menu()
  2. {
  3. printf("|-----------------------------------------|\n");
  4. printf("| *** LC *** |\n");
  5. printf("| |-------------------------| |\n");
  6. printf("| | 添加歌曲(1) | |\n");
  7. printf("| |-------------------------| |\n");
  8. printf("| | 删除歌曲(2) | |\n");
  9. printf("| |-------------------------| |\n");
  10. printf("| | 查询歌单(3) | |\n");
  11. printf("| |-------------------------| |\n");
  12. printf("| | 修改歌曲(4) | |\n");
  13. printf("| |-------------------------| |\n");
  14. printf("| 返回(0) |\n");
  15. printf("|-----------------------------------------|\n");
  16. printf("请输入您要进行操作的序号:");
  17. int input = 0;
  18. scanf("%d", &input);
  19. system("cls");
  20. return input;
  21. }

这就是整个信息管理系统的核心部分,对歌曲信息进行增删查改功能

因此,我们因该在Basic struct.cpp这个基础框架中添加选项,如下代码:

  1. do
  2. {
  3. switch (input1 = Func_picture())
  4. {
  5. case 1:
  6. Search(&son);
  7. break;
  8. case 2:
  9. Hot();
  10. break;
  11. case 3:
  12. do
  13. {
  14. switch (input2 = Playlist_menu())//歌单
  15. {
  16. case 1:
  17. //增加歌曲
  18. Add_song(&son);
  19. Bubble_sort(&son);
  20. break;
  21. case 2:
  22. //删除歌曲
  23. Delete(&son);
  24. break;
  25. case 3:
  26. //查询歌曲
  27. Show_list(&son);
  28. break;
  29. case 4:
  30. //修改信息
  31. Modify(&son);
  32. break;
  33. case 0:
  34. break;
  35. default:
  36. printf("输入非法,请重新输入\n");
  37. break;
  38. }
  39. } while (input2);
  40. break;
  41. case 4:
  42. Home_page();
  43. break;
  44. case 5:
  45. Music(input1);
  46. break;
  47. case 0:
  48. printf("退出音乐\n");
  49. return 0;
  50. default:
  51. printf("输入非法,请重新输入!\n");
  52. break;
  53. }
  54. } while (input1);

先来看看添加歌曲

  1. //增加歌曲
  2. void Add_song(Song_library* son)
  3. {
  4. assert(son != NULL);
  5. if (son->sz == MUSIC_MAX)
  6. {
  7. printf("歌曲库已满,无法添加\n");
  8. }
  9. else
  10. {
  11. FILE* write = NULL;
  12. if (son->sz == 0)
  13. {
  14. write = fopen("歌曲库.txt", "w");
  15. if (write == NULL)
  16. {
  17. return;
  18. }
  19. }
  20. else
  21. {
  22. write = fopen("歌曲库.txt", "a");
  23. if (write == NULL)
  24. {
  25. return;
  26. }
  27. }
  28. printf("请输入歌曲名:");
  29. scanf("%s",&(son->arr[son->sz].Charname));
  30. printf("请输入作者:");
  31. scanf("%s", &(son->arr[son->sz].Charauthor));
  32. printf("请输入演唱者:");
  33. scanf("%s", &(son->arr[son->sz].Charsinger));
  34. printf("请输入发行时间:");
  35. scanf("%s", &(son->arr[son->sz].Charpub_date));
  36. //写入歌曲库
  37. fprintf(write, "%-10s\t", son->arr[son->sz].Charname);
  38. fprintf(write, "%-10s\t", son->arr[son->sz].Charauthor);
  39. fprintf(write, "%-10s\t", son->arr[son->sz].Charsinger);
  40. fprintf(write, "%-10s\t\n", son->arr[son->sz].Charpub_date);
  41. son->sz++;
  42. printf("添加成功!\n");
  43. fclose(write);
  44. write = NULL;
  45. }
  46. }

想象一下,进入此模块,首先因该想到该歌曲库是否已经被填满

       接下来,要注意,不能只是简单的进行"w"操作,"w"为只写,我们每次往文件里添加歌曲的时候都会覆盖上一个创建的文件,如果没有文件,则会重新创建一个,所以这首先因该判断,如果歌曲库的歌曲个数为零,则可以通过"w"创建一个txt文件,倘若歌曲个数不为零,我们则可以通过"a"来追加

下一个功能:

删除歌曲

  1. //删除歌曲
  2. void Delete(Song_library* son)
  3. {
  4. assert(son != NULL);
  5. char name[NAME_MAX] = { 0 };
  6. printf("请输入要删除的歌曲的名字:");
  7. scanf("%s", name);
  8. int ret = Find_song(son, name);//查找
  9. if (ret == -1)
  10. {
  11. printf("对不起,没有您要找的歌曲信息!\n");
  12. }
  13. else
  14. {
  15. int i = 0; //从后向前覆盖
  16. for (i = ret; i < son-> sz - 1; i++)
  17. {
  18. son->arr[i] = son->arr[i + 1];
  19. }
  20. son->sz--;
  21. //重新写入文件
  22. FILE* write = fopen("歌曲库.txt", "w");
  23. if (write == NULL)
  24. {
  25. return;
  26. }
  27. for (i = 0; i < son->sz; i++)
  28. {
  29. fprintf(write, "%-10s\t", son->arr[i].Charname);
  30. fprintf(write, "%-10s\t", son->arr[i].Charauthor);
  31. fprintf(write, "%-10s\t", son->arr[i].Charsinger);
  32. fprintf(write, "%-10s\t\n", son->arr[i].Charpub_date);
  33. }
  34. printf("删除成功!\n");
  35. fclose(write);
  36. write = NULL;
  37. }
  38. system("pause");
  39. system("cls");
  40. }

       输入的歌曲名通过数组存放,再用之前的查找函数Find_song进行搜索,没找到输出提示,找到了进行删除歌曲信息操作,如何删除呢,由于歌曲库未添加歌曲的地方被初始化成全0,所以通过从后向前覆盖的方式进行删除

下一个功能:

查找歌曲信息

  1. //歌单列表
  2. void Show_list(const Song_library* son)
  3. {
  4. assert(son != NULL);
  5. FILE* read = fopen("歌曲库.txt", "r");
  6. if (read == NULL)
  7. {
  8. return;
  9. }
  10. int i = 0;
  11. for (i = 0; i < son->sz; i++)
  12. {
  13. fscanf(read, "%s", &(son->arr[i].Charname));
  14. fscanf(read, "%s", &(son->arr[i].Charauthor));
  15. fscanf(read, "%s", &(son->arr[i].Charsinger));
  16. fscanf(read, "%s", &(son->arr[i].Charpub_date));
  17. }
  18. printf("|------------------------------------------------------------|\n");
  19. printf(" %-18s\t%-8s\t%-8s\t%-11s\n", "歌曲名", "作词人", "演唱者", "日期");
  20. for (i = 0; i < son->sz; i++)
  21. {
  22. if (i % 10 == 0 && i != 0)
  23. {
  24. system("pause");
  25. }
  26. printf(" %-18s\t%-8s\t%-8s\t%-11s\n",
  27. son->arr[i].Charname,
  28. son->arr[i].Charauthor,
  29. son->arr[i].Charsinger,
  30. son->arr[i].Charpub_date);
  31. }
  32. printf("|------------------------------------------------------------|\n");
  33. system("pause");
  34. system("cls");
  35. fclose(read);
  36. read = NULL;
  37. }

     通过fscanf函数从歌曲库中获取信息,再通过printf进行打印,分屏输出,每次10条歌曲信息

注意:

  1. for (i = 0; i < son->sz; i++)
  2. {
  3. if (i % 10 == 0 && i != 0)
  4. {
  5. system("pause");
  6. }

这里的 i = 0 时进入 i % 10 = 0 依然成立,所以这里要注意并且的条件

下一个功能:

修改歌曲信息

  1. //修改
  2. void Modify(Song_library* son)
  3. {
  4. assert(son != NULL);
  5. char name[NAME_MAX] = { 0 };
  6. printf("请输入您要修改信息的歌曲名:");
  7. scanf("%s", name);
  8. int ret = Find_song(son, name);
  9. if (ret == -1)
  10. {
  11. printf("对不起,没有您要找的歌曲信息!\n");
  12. }
  13. else
  14. {
  15. FILE* modif = fopen("歌曲库.txt", "a");
  16. if (modif == NULL)
  17. {
  18. return;
  19. }
  20. printf("请输入歌曲名:");
  21. scanf("%s", &(son->arr[ret].Charname));
  22. printf("请输入作者:");
  23. scanf("%s", &(son->arr[ret].Charauthor));
  24. printf("请输入演唱者:");
  25. scanf("%s", &(son->arr[ret].Charsinger));
  26. printf("请输入发行时间:");
  27. scanf("%s", &(son->arr[ret].Charpub_date));
  28. //重新写入文件
  29. FILE* write = fopen("歌曲库.txt", "w");
  30. if (write == NULL)
  31. {
  32. return;
  33. }
  34. int i = 0;
  35. for (i = 0; i < son->sz; i++)
  36. {
  37. fprintf(write, "%-10s\t", son->arr[i].Charname);
  38. fprintf(write, "%-10s\t", son->arr[i].Charauthor);
  39. fprintf(write, "%-10s\t", son->arr[i].Charsinger);
  40. fprintf(write, "%-10s\t\n", son->arr[i].Charpub_date);
  41. }
  42. printf("修改成功!\n");
  43. fclose(write);
  44. write = NULL;
  45. }
  46. system("pause");
  47. system("cls");
  48. }

     首先,通过查找歌曲函数先找到歌曲信息,然后对歌曲重新写入,覆盖之前的歌曲信息,最后修改成功并给予反馈

增删查改功能到这里就完成啦,为了让歌曲信息直观有序,继续创建一个模块

排序功能

  1. //排序
  2. void Bubble_sort(Song_library* son)
  3. {
  4. assert(son != NULL);
  5. char tmp_name[NAME_MAX] = { 0 };
  6. //写入结构体数组
  7. int i = 0;
  8. for (i = 0; i < son->sz - 1; i++)
  9. {
  10. int j = 0;
  11. for (j = 0; j < son->sz - i - 1; j++)
  12. {
  13. if (strcmp(son->arr[j].Charname, son->arr[j + 1].Charname) > 0)
  14. {
  15. //名字
  16. strcpy(tmp_name, son->arr[j].Charname);
  17. strcpy(son->arr[j].Charname, son->arr[j + 1].Charname);
  18. strcpy(son->arr[j + 1].Charname, tmp_name);
  19. //作者
  20. strcpy(tmp_name, son->arr[j].Charauthor);
  21. strcpy(son->arr[j].Charauthor, son->arr[j + 1].Charauthor);
  22. strcpy(son->arr[j + 1].Charauthor, tmp_name);
  23. //演唱者
  24. strcpy(tmp_name, son->arr[j].Charsinger);
  25. strcpy(son->arr[j].Charsinger, son->arr[j + 1].Charsinger);
  26. strcpy(son->arr[j + 1].Charsinger, tmp_name);
  27. //发行日期
  28. strcpy(tmp_name, son->arr[j].Charpub_date);
  29. strcpy(son->arr[j].Charpub_date, son->arr[j + 1].Charpub_date);
  30. strcpy(son->arr[j + 1].Charpub_date, tmp_name);
  31. }
  32. }
  33. }
  34. //重新写入文件
  35. FILE* write = fopen("歌曲库.txt", "w");
  36. if (write == NULL)
  37. {
  38. return;
  39. }
  40. for (i = 0; i < son->sz; i++)
  41. {
  42. fprintf(write, "%-10s\t", son->arr[i].Charname);
  43. fprintf(write, "%-10s\t", son->arr[i].Charauthor);
  44. fprintf(write, "%-10s\t", son->arr[i].Charsinger);
  45. fprintf(write, "%-10s\t\n", son->arr[i].Charpub_date);
  46. }
  47. printf("修改成功!\n");
  48. fclose(write);
  49. write = NULL;
  50. }

            比较首元素ASCII码值的大小,由小到大进行排序,创建一个临时数组    char tmp_name[NAME_MAX] = { 0 };  用来临时存放歌曲信息,方便交换,相当于你要交换一个油瓶和一个醋瓶中的液体一样,肯定是需要一个空瓶来临时存放的,这里的临时数组就相当于空瓶,最后重新写入文件,注意这里因该覆盖掉之前的文件内容;此功能可以放在增添歌曲功能的后面

如下代码:

  1. case 1:
  2. //增加歌曲
  3. Add_song(&son);
  4. Bubble_sort(&son);
  5. break;
  6. case 2:

最后一个模块

音乐播放

这里首先要保证是在cpp环境下进行,并且需要修改字符集,修改为使用多字节字符集,如下图

下一步,需要引用一些头文件

  1. //加载音乐需要的头文件
  2. #include<Windows.h>
  3. #include<mmsystem.h>//包含多媒体设备接口头文件
  4. #pragma comment (lib,"winmm.lib")//加载静态库

接着,将需要播放的音乐下载好,(注意:网易音乐不行,有加密),放在当前路径下

 接着如下代码

  1. mciSendString("open 说好不哭.mp3 alias a", 0, 0, 0);// alias 是重命名
  2. mciSendString("play a", 0, 0, 0);//播放刚刚被命名的a音乐

如果需要暂停音乐,可以用如下代码

mciSendString("close a", 0, 0, 0);

模仿音乐播放功能,就有了如下代码

  1. //音乐播放
  2. void Music(const int ret)
  3. {
  4. int input = 0;
  5. if (ret == 1)
  6. {
  7. A:
  8. printf("|-----------------------------------------|\n");
  9. printf(" 正在为您播放“说好不哭”\n");
  10. mciSendString("close a", 0, 0, 0);
  11. mciSendString("close b", 0, 0, 0);
  12. mciSendString("close c", 0, 0, 0);
  13. mciSendString("open 说好不哭.mp3 alias a", 0, 0, 0);
  14. mciSendString("play a", 0, 0, 0);
  15. printf(" 播放(1) 关闭播放(2) 单曲循环(3)\n");
  16. printf(" 返回(0)\n");
  17. printf("|-----------------------------------------|\n");
  18. }
  19. else if (ret == 2)
  20. {
  21. B:
  22. printf("|-----------------------------------------|\n");
  23. printf(" 正在为您播放“不为谁而作的歌”\n");
  24. mciSendString("close a", 0, 0, 0);
  25. mciSendString("close b", 0, 0, 0);
  26. mciSendString("close c", 0, 0, 0);
  27. mciSendString("open 不为谁而作的歌.mp3 alias b", 0, 0, 0);
  28. mciSendString("play b", 0, 0, 0);
  29. printf(" 播放(1) 关闭播放(2) 单曲循环(3)\n");
  30. printf(" 返回(0)\n");
  31. printf("|-----------------------------------------|\n");
  32. }
  33. else if (ret == 3)
  34. {
  35. C:
  36. printf("|-----------------------------------------|\n");
  37. printf(" 正在为您播放“七里香”\n");
  38. mciSendString("close a", 0, 0, 0);
  39. mciSendString("close b", 0, 0, 0);
  40. mciSendString("close c", 0, 0, 0);
  41. mciSendString("open 七里香.mp3 alias c", 0, 0, 0);
  42. mciSendString("play c", 0, 0, 0);
  43. printf(" 播放(1) 关闭播放(2) 单曲循环(3)\n");
  44. printf(" 返回(0)\n");
  45. printf("|-----------------------------------------|\n");
  46. }
  47. while (1)
  48. {
  49. printf("请选择:");
  50. scanf("%d", &input);
  51. if (input == 1)
  52. {
  53. if (ret == 1)
  54. {
  55. system("cls");
  56. goto A;
  57. }
  58. else if (ret == 2)
  59. {
  60. system("cls");
  61. goto B;
  62. }
  63. else if (ret == 3)
  64. {
  65. system("cls");
  66. goto C;
  67. }
  68. }
  69. else if (input == 2)
  70. {
  71. if (ret == 1)
  72. mciSendString("close a", 0, 0, 0);
  73. else if(ret == 2)
  74. mciSendString("close b", 0, 0, 0);
  75. else if(ret == 3)
  76. mciSendString("close c", 0, 0, 0);
  77. }
  78. else if (input == 3)
  79. {
  80. if (ret == 1)
  81. mciSendString("repeat a", 0, 0, 0);
  82. else if (ret == 2)
  83. mciSendString("repeat b", 0, 0, 0);
  84. else if(ret == 3)
  85. mciSendString("repeat c", 0, 0, 0);
  86. }
  87. else if (input == 0)
  88. {
  89. break;
  90. }
  91. }
  92. system("cls");
  93. }

这样一个基本的框架就建立好啦

码字不易~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/1006908
推荐阅读
相关标签
  

闽ICP备14008679号