音乐播放器管理系统

音乐播放器管理系统

项目名称

音乐播放器管理系统

需求分析

在这里插入图片描述

需要完成的需求:

  • 身份验证
  • 管理用户
  • 管理音乐
  • 登录
  • 注册
  • 音乐播放器

页面规划

在这里插入图片描述

  • 9个窗口

    • 主界面窗口:管理员 用户

      • 管理员身份验证:登录 刷新 返回

        • 管理窗口:用户管理 音乐管理 注册 返回

          • 用户管理:分栏列表 查看 删除 返回

          • 音乐管理:分栏列表 查看 删除 增加 返回

          • 注册窗口:账号 文本框 密码 文本框 注册 刷新 返回

      • 用户登录:账号 文本框 密码 文本框 验证码 文本框 登录 刷新 注册 返回

        • 音乐播放器:播放/暂停 切歌 声音调节 切换用户
        • 注册窗口:账号 文本框 手机号 文本框 密码 文本框 注册 刷新 返回

流程规划

在这里插入图片描述

  • 9个窗口
    • 主界面窗口:管理员 用户
    • 点击主界面中的管理员按钮——跳转到管理员身份验证
      • 管理员身份验证:登录 刷新 返回
      • 点击管理员身份验证中的登录按钮——验证成功跳转到管理窗口
        • 管理窗口:用户管理 音乐管理 注册 返回
        • 点击管理窗口中的用户管理按钮——跳转到用户管理窗口
          • 用户管理:分栏列表 查看 删除 返回
        • 点击管理窗口中的音乐管理按钮——跳转到音乐管理窗口
          • 音乐管理:分栏列表 查看 删除 增加 返回
        • 点击管理窗口中的注册按钮——跳转到注册窗口
          • 注册窗口:账号 文本框 密码 文本框 注册 刷新 返回
        • 点击管理窗口中的返回按钮——跳转到主界面
      • 点击管理员身份验证中的登录按钮——验证失败还在当前页
      • 点击管理员身份验证中的返回按钮——跳转到主界面
    • 点击主界面的用户按钮——跳转到用户登陆界面
      • 用户登录界面:登录 刷新 注册 返回
        • 点击管理员身份验证中的登录按钮——验证成功跳转到音乐播放器
          • 音乐播放器:播放/暂停 切歌 声音调节 切换用户
        • 点击用户登录窗口中的注册按钮——跳转到注册窗口
          • 注册窗口:账号 文本框 手机号 文本框 密码 文本框 注册 刷新 返回
        • 点击管理员身份验证中的登录按钮——验证失败还在当前页
        • 点击管理员身份验证中的返回按钮——跳转到主界面

功能

  • 5个文件
    • main.c
      • 编写各种调用功能的主函数
    • login_dl.c
      • 编写窗口界面设计等
    • login_dl.h
      • 将login_dl.c中自定义的函数在此声明,定义全局变量
    • other.c
      • 编写数据库控制函数和回调函数的定义
    • other.h
      • 编写other.c中回调函数的声明

代码

main.c

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "login_dl.h"
#include "other.h"int main(int argc, char *argv[])
{my_sql_init();				/* 数据库初始化 */gtk_init(&argc, &argv);		/* gtk环境初始化 */window_main_init();			/* 主界面初始化 */window_gl_logintest_init();	/* 管理员登录界面初始化 */window_gl_cd_init();		/* 管理员界面初始化 */window_gl_yh_init();		/* 用户管理界面初始化 */window_gl_music_init();		/* 音乐管理界面初始化 */window_gl_reg_init();		/* 管理员注册界面初始化 */window_yh_login_init();		/* 用户管理界面初始化 */window_yh_reg_init();		/* 用户注册界面初始化 */window_yh_music_init();		/* 音乐播放器界面初始化 */gtk_widget_show_all(window_main);g_signal_connect(window_main, "destroy", G_CALLBACK(gtk_main_quit), NULL);mkfifo("cmd_fifo", 0777);	/* 创建有名管道*//* 主事件循环:用户在这时可以操作窗口 */gtk_main();return 0;
}

login_dl.c

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "login_dl.h"
#include "other.h"/*********************** 界面初始化 *************************//* 主界面初始化 */
void window_main_init(void)
{/* 设置窗口 */window_main = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window_main), "欢迎使用哭够音乐播放器!");gtk_widget_set_size_request(window_main, 600, 450);	gtk_window_set_resizable(GTK_WINDOW(window_main), FALSE);gtk_window_set_position(GTK_WINDOW(window_main), GTK_WIN_POS_CENTER);gtk_container_set_border_width(GTK_CONTAINER(window_main), 15);chang_background(window_main, 600, 450, "./img/5.jpg");/* 设置布局 */GtkWidget *table = gtk_table_new(2, 2, TRUE);			/* 2行2列均衡排列 */gtk_container_add(GTK_CONTAINER(window_main), table);GtkWidget *vbox_manager = gtk_vbox_new(FALSE, 0);gtk_table_attach_defaults(GTK_TABLE(table), vbox_manager, 0, 1, 1, 2);GtkWidget *vbox_user = gtk_vbox_new(FALSE, 0);gtk_table_attach_defaults(GTK_TABLE(table), vbox_user, 1, 2, 1, 2);/* 设置控件 */// 标签GtkWidget *label = gtk_label_new("哭够音乐播放器系统");gtk_label_set_markup(GTK_LABEL(label), "哭够音乐播放器系统");gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 2, 0, 1);// 管理员	GtkWidget *label_manager = gtk_label_new("管理员");gtk_label_set_markup(GTK_LABEL(label_manager), "管理员");gtk_container_add(GTK_CONTAINER(vbox_manager), label_manager);GtkWidget *manager = create_button_from_file("./img/manager/manager.png", 80, 80);gtk_container_add(GTK_CONTAINER(vbox_manager), manager);// 用户GtkWidget *label_user = gtk_label_new("用户");gtk_label_set_markup(GTK_LABEL(label_user), "用户");gtk_container_add(GTK_CONTAINER(vbox_user), label_user);GtkWidget *user = create_button_from_file("./img/manager/user.png", 80, 80);gtk_container_add(GTK_CONTAINER(vbox_user), user);/* 信号连接 *///g_signal_connect(window_main, "destroy", G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(manager, "pressed", G_CALLBACK(do_manager), NULL);g_signal_connect(user, "pressed", G_CALLBACK(do_user), NULL);
}/* 管理员登录界面初始化 */
void window_gl_logintest_init(void)
{/* 设置窗口 */window_gl_logintest = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window_gl_logintest), "管理员你好!欢迎使用哭够音乐播放器!");gtk_widget_set_size_request(window_gl_logintest, 600, 450);gtk_window_set_resizable(GTK_WINDOW(window_gl_logintest), FALSE);gtk_window_set_position(GTK_WINDOW(window_gl_logintest), GTK_WIN_POS_CENTER);gtk_container_set_border_width(GTK_CONTAINER(window_gl_logintest), 15);chang_background(window_gl_logintest, 600, 450, "./img/5.jpg");/* 设置布局 */GtkWidget *table = gtk_table_new(4, 5, TRUE);	/* 4行5列均衡排列 */gtk_container_add(GTK_CONTAINER(window_gl_logintest), table);GtkWidget *hbox = gtk_hbox_new(TRUE, 0);gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 5, 3, 4);GtkWidget *vbox_login = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_login);GtkWidget *vbox_refresh = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_refresh);GtkWidget *vbox_back = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_back);/* 设置控件 */// 标签 + 行编辑框GtkWidget *label_title = gtk_label_new("管理员身份验证");gtk_label_set_markup(GTK_LABEL(label_title), "管理员身份验证");gtk_table_attach_defaults(GTK_TABLE(table), label_title, 0, 5, 0, 1);GtkWidget *label_manager_login_name = gtk_label_new("账号:");gtk_label_set_markup(GTK_LABEL(label_manager_login_name), "账号:");gtk_table_attach_defaults(GTK_TABLE(table), label_manager_login_name, 0, 1, 1, 2);entry_manager_logintest_name = gtk_entry_new();gtk_table_attach_defaults(GTK_TABLE(table), entry_manager_logintest_name, 1, 5, 1, 2);GtkWidget *label_manager_login_password = gtk_label_new("密码:");gtk_label_set_markup(GTK_LABEL(label_manager_login_password), "密码:");gtk_table_attach_defaults(GTK_TABLE(table), label_manager_login_password, 0, 1, 2, 3);entry_manager_logintest_password = gtk_entry_new();gtk_table_attach_defaults(GTK_TABLE(table), entry_manager_logintest_password, 1, 5, 2, 3);// 登录GtkWidget *label_login = gtk_label_new("登录");gtk_label_set_markup(GTK_LABEL(label_login), "登录");gtk_container_add(GTK_CONTAINER(vbox_login), label_login);GtkWidget *login = create_button_from_file("./img/manager/login.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_login), login);// 刷新GtkWidget *label_refresh = gtk_label_new("刷新");gtk_label_set_markup(GTK_LABEL(label_refresh), "刷新");gtk_container_add(GTK_CONTAINER(vbox_refresh), label_refresh);GtkWidget *refresh = create_button_from_file("./img/manager/refresh.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_refresh), refresh);// 返回上级GtkWidget *label_back = gtk_label_new("返回上级");gtk_label_set_markup(GTK_LABEL(label_back), "返回上级");gtk_container_add(GTK_CONTAINER(vbox_back), label_back);GtkWidget *back = create_button_from_file("./img/manager/back.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_back), back);/* 信号连接 */g_signal_connect(window_gl_logintest, "destroy", G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(login, "pressed", G_CALLBACK(do_manager_logintest_id), NULL);g_signal_connect(refresh, "pressed", G_CALLBACK(do_manager_logintest_refresh), NULL);g_signal_connect(back, "pressed", G_CALLBACK(do_manager_logintest_back), NULL);
}/* 管理员功能界面初始化 */
void window_gl_cd_init(void)
{/* 设置窗口 */window_gl_cd = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window_gl_cd), "管理员你好!欢迎使用哭够音乐播放器!");gtk_widget_set_size_request(window_gl_cd, 600, 450);	gtk_window_set_resizable(GTK_WINDOW(window_gl_cd), FALSE);gtk_window_set_position(GTK_WINDOW(window_gl_cd), GTK_WIN_POS_CENTER);gtk_container_set_border_width(GTK_CONTAINER(window_gl_cd), 15);chang_background(window_gl_cd, 600, 450, "./img/5.jpg");/* 设置布局 */GtkWidget *table = gtk_table_new(2, 4, TRUE);			/* 2行4列均衡排列 */gtk_container_add(GTK_CONTAINER(window_gl_cd), table);GtkWidget *vbox_db = gtk_vbox_new(FALSE, 0);gtk_table_attach_defaults(GTK_TABLE(table), vbox_db, 0, 1, 1, 2);GtkWidget *vbox_music = gtk_vbox_new(FALSE, 0);gtk_table_attach_defaults(GTK_TABLE(table), vbox_music, 1, 2, 1, 2);GtkWidget *vbox_enroll = gtk_vbox_new(FALSE, 0);gtk_table_attach_defaults(GTK_TABLE(table), vbox_enroll, 2, 3, 1, 2);GtkWidget *vbox_back = gtk_vbox_new(FALSE, 0);gtk_table_attach_defaults(GTK_TABLE(table), vbox_back, 3, 4, 1, 2);/* 设置控件 */// 标签GtkWidget *label = gtk_label_new("哭够音乐播放器管理员列表");gtk_label_set_markup(GTK_LABEL(label), "哭够音乐播放器管理员列表");gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 4, 0, 1);// 用户管理GtkWidget *label_login = gtk_label_new("用户管理");gtk_label_set_markup(GTK_LABEL(label_login), "用户管理");gtk_container_add(GTK_CONTAINER(vbox_db), label_login);GtkWidget *button_user_db = create_button_from_file("./img/manager/用户管理.png", 80, 80);gtk_container_add(GTK_CONTAINER(vbox_db), button_user_db);//音乐管理GtkWidget *label_reg = gtk_label_new("音乐管理");gtk_label_set_markup(GTK_LABEL(label_reg), "音乐管理");gtk_container_add(GTK_CONTAINER(vbox_music), label_reg);GtkWidget *button_music_db = create_button_from_file("./img/manager/音乐.png", 80, 80);gtk_container_add(GTK_CONTAINER(vbox_music), button_music_db);// 管理员注册GtkWidget *label_enroll = gtk_label_new("管理员注册");gtk_label_set_markup(GTK_LABEL(label_enroll), "管理员注册");gtk_container_add(GTK_CONTAINER(vbox_enroll), label_enroll);GtkWidget *button_admin_enroll = create_button_from_file("./img/manager/reg.png", 80, 80);gtk_container_add(GTK_CONTAINER(vbox_enroll), button_admin_enroll);// 返回上级GtkWidget *label_back = gtk_label_new("返回上级");gtk_label_set_markup(GTK_LABEL(label_back), "返回上级");gtk_container_add(GTK_CONTAINER(vbox_back), label_back);GtkWidget *button_back = create_button_from_file("./img/manager/返回.png", 80, 80);gtk_container_add(GTK_CONTAINER(vbox_back), button_back);/* 信号连接 */g_signal_connect(window_gl_cd, "destroy", G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(button_user_db, "pressed", G_CALLBACK(do_manager_yh), NULL);g_signal_connect(button_music_db, "pressed", G_CALLBACK(do_manager_yy), NULL);g_signal_connect(button_admin_enroll, "pressed", G_CALLBACK(do_manager_reg), NULL);g_signal_connect(button_back, "pressed", G_CALLBACK(do_manager_back), NULL);
}/* 用户管理界面初始化 */
void window_gl_yh_init(void)
{/* 设置窗口 */window_gl_yh = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window_gl_yh), "管理员你好!欢迎使用哭够音乐播放器!");gtk_widget_set_size_request(window_gl_yh, 600, 450);gtk_window_set_resizable(GTK_WINDOW(window_gl_yh), FALSE);gtk_window_set_position(GTK_WINDOW(window_gl_yh), GTK_WIN_POS_CENTER);//gtk_container_set_border_width(GTK_CONTAINER(window_gl_yh), 15);chang_background(window_gl_yh, 600, 450, "./img/5.jpg");/* 设置布局 */GtkWidget *table = gtk_table_new(3, 4, TRUE);	/* 3行4列均衡排列 */gtk_container_add(GTK_CONTAINER(window_gl_yh), table);/* 设置控件 */// 标签GtkWidget *label_title = gtk_label_new("用户管理");gtk_label_set_markup(GTK_LABEL(label_title), "用户管理");gtk_table_attach_defaults(GTK_TABLE(table), label_title, 0, 3, 0, 1);// 返回GtkWidget *c = gtk_button_new_with_label("返回");gtk_table_attach_defaults(GTK_TABLE(table), c, 3, 4, 0, 1);// 查看GtkWidget *b = gtk_button_new_with_label("查看");gtk_table_attach_defaults(GTK_TABLE(table), b, 3, 4, 1, 2);// 删除GtkWidget *a = gtk_button_new_with_label("删除");gtk_table_attach_defaults(GTK_TABLE(table), a, 3, 4, 2, 3);// 分栏列表gchar *title[3] = {"账号","手机号","密码"};gl_user = gtk_clist_new_with_titles(3, title);gtk_clist_set_column_width(GTK_CLIST(gl_user), 0, 150);						/* 设置第一列宽度 */gtk_clist_set_column_width(GTK_CLIST(gl_user), 1, 150);gtk_clist_set_column_width(GTK_CLIST(gl_user), 2, 150);//gtk_clist_set_column_justification(GTK_CLIST(gl_user), 0, GTK_JUSTIFY_CENTER);/* 设置第一列内容居中对齐 */gtk_table_attach_defaults(GTK_TABLE(table), gl_user, 0, 3, 1, 3);/* 信号连接 */g_signal_connect(window_gl_yh, "destroy", G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(a, "pressed", G_CALLBACK(do_manager_yh_delete), NULL);g_signal_connect(b, "pressed", G_CALLBACK(do_manager_yh_show), NULL);g_signal_connect(c, "pressed", G_CALLBACK(do_manager_yh_back), NULL);g_signal_connect(gl_user, "select-row", G_CALLBACK(select_user), NULL);
}/* 音乐管理界面初始化 */
void window_gl_music_init(void)
{/* 设置窗口 */window_gl_music = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window_gl_music), "管理员你好!欢迎使用哭够音乐播放器!");gtk_widget_set_size_request(window_gl_music, 600, 450);gtk_window_set_resizable(GTK_WINDOW(window_gl_music), FALSE);gtk_window_set_position(GTK_WINDOW(window_gl_music), GTK_WIN_POS_CENTER);//gtk_container_set_border_width(GTK_CONTAINER(window_gl_music), 15);chang_background(window_gl_music, 600, 450, "./img/5.jpg");/* 设置布局 */GtkWidget *table = gtk_table_new(4, 3, TRUE);	/* 4行3列均衡排列 */gtk_container_add(GTK_CONTAINER(window_gl_music), table);/* 设置控件 */// 标签GtkWidget *label_title = gtk_label_new("音乐管理");gtk_label_set_markup(GTK_LABEL(label_title), "音乐管理");gtk_table_attach_defaults(GTK_TABLE(table), label_title, 0, 2, 0, 1);// 返回GtkWidget *c = gtk_button_new_with_label("返回");gtk_table_attach_defaults(GTK_TABLE(table), c, 2, 3, 0, 1);// 查看GtkWidget *b = gtk_button_new_with_label("查看");gtk_table_attach_defaults(GTK_TABLE(table), b, 2, 3, 1, 2);// 登录GtkWidget *a = gtk_button_new_with_label("删除");gtk_table_attach_defaults(GTK_TABLE(table), a, 2, 3, 2, 3);// 增加GtkWidget *d = gtk_button_new_with_label("增加");gtk_table_attach_defaults(GTK_TABLE(table), d, 2, 3, 3, 4);// 分栏列表gchar *title[3] = {"ID","音乐名称"};gl_music = gtk_clist_new_with_titles(2, title);gtk_clist_set_column_width(GTK_CLIST(gl_music), 0, 200);						/* 设置第一列宽度 */gtk_clist_set_column_width(GTK_CLIST(gl_music), 1, 200);//gtk_clist_set_column_justification(GTK_CLIST(gl_user), 0, GTK_JUSTIFY_CENTER);/* 设置第一列内容居中对齐 */gtk_table_attach_defaults(GTK_TABLE(table), gl_music, 0, 2, 1, 4);/* 信号连接 */g_signal_connect(window_gl_music, "destroy", G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(a, "pressed", G_CALLBACK(do_manager_yy_delete), NULL);g_signal_connect(b, "pressed", G_CALLBACK(do_manager_yy_show), NULL);g_signal_connect(c, "pressed", G_CALLBACK(do_manager_yy_back), NULL);g_signal_connect(d, "pressed", G_CALLBACK(do_manager_yy_add), NULL);g_signal_connect(gl_music, "select-row", G_CALLBACK(select_music), NULL);
}/* 管理员注册界面初始化 */
void window_gl_reg_init(void)
{/* 设置窗口 */window_gl_reg = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window_gl_reg), "管理员你好!欢迎使用哭够音乐播放器!");gtk_widget_set_size_request(window_gl_reg, 600, 450);gtk_window_set_resizable(GTK_WINDOW(window_gl_reg), FALSE);gtk_window_set_position(GTK_WINDOW(window_gl_reg), GTK_WIN_POS_CENTER);gtk_container_set_border_width(GTK_CONTAINER(window_gl_reg), 15);chang_background(window_gl_reg, 600, 450, "./img/5.jpg");/* 设置布局 */GtkWidget *table = gtk_table_new(4, 5, TRUE);	/* 4行5列均衡排列 */gtk_container_add(GTK_CONTAINER(window_gl_reg), table);GtkWidget *hbox = gtk_hbox_new(TRUE, 0);gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 5, 3, 4);GtkWidget *vbox_reg = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_reg);GtkWidget *vbox_refresh = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_refresh);GtkWidget *vbox_back = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_back);/* 设置控件 */// 标签 + 行编辑框GtkWidget *label_title = gtk_label_new("注册哭够音乐播放器管理员");gtk_label_set_markup(GTK_LABEL(label_title), "注册哭够音乐播放器管理员");gtk_table_attach_defaults(GTK_TABLE(table), label_title, 0, 5, 0, 1);GtkWidget *label_manager_reg_name = gtk_label_new("账号:");gtk_label_set_markup(GTK_LABEL(label_manager_reg_name), "账号:");gtk_table_attach_defaults(GTK_TABLE(table), label_manager_reg_name, 0, 1, 1, 2);entry_manager_reg_name = gtk_entry_new();gtk_table_attach_defaults(GTK_TABLE(table), entry_manager_reg_name, 1, 5, 1, 2);GtkWidget *label_manager_reg_password = gtk_label_new("密码:");gtk_label_set_markup(GTK_LABEL(label_manager_reg_password), "密码:");gtk_table_attach_defaults(GTK_TABLE(table), label_manager_reg_password, 0, 1, 2, 3);entry_manager_reg_password = gtk_entry_new();gtk_table_attach_defaults(GTK_TABLE(table), entry_manager_reg_password, 1, 5, 2, 3);// 注册GtkWidget *label_reg = gtk_label_new("注册");gtk_label_set_markup(GTK_LABEL(label_reg), "注册");gtk_container_add(GTK_CONTAINER(vbox_reg), label_reg);GtkWidget *reg = create_button_from_file("./img/manager/reg.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_reg), reg);// 刷新GtkWidget *label_refresh = gtk_label_new("刷新");gtk_label_set_markup(GTK_LABEL(label_refresh), "刷新");gtk_container_add(GTK_CONTAINER(vbox_refresh), label_refresh);GtkWidget *refresh = create_button_from_file("./img/manager/refresh.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_refresh), refresh);// 返回上级GtkWidget *label_back = gtk_label_new("返回上级");gtk_label_set_markup(GTK_LABEL(label_back), "返回上级");gtk_container_add(GTK_CONTAINER(vbox_back), label_back);GtkWidget *back = create_button_from_file("./img/manager/back.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_back), back);/* 信号连接 */g_signal_connect(window_gl_reg, "destroy", G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(reg, "pressed", G_CALLBACK(do_manager_reg_id), NULL);g_signal_connect(refresh, "pressed", G_CALLBACK(do_manager_reg_refresh), NULL);g_signal_connect(back, "pressed", G_CALLBACK(do_manager_reg_back), NULL);
}/* 用户登录界面初始化 */
void window_yh_login_init(void)
{/* 设置窗口 */window_yh_login = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window_yh_login), "用户你好!欢迎使用哭够音乐播放器!");gtk_widget_set_size_request(window_yh_login, 600, 450);gtk_window_set_resizable(GTK_WINDOW(window_yh_login), FALSE);gtk_window_set_position(GTK_WINDOW(window_yh_login), GTK_WIN_POS_CENTER);gtk_container_set_border_width(GTK_CONTAINER(window_yh_login), 15);chang_background(window_yh_login, 600, 450, "./img/5.jpg");/* 设置布局 */GtkWidget *table = gtk_table_new(5, 5, TRUE);	/* 5行5列均衡排列 */gtk_container_add(GTK_CONTAINER(window_yh_login), table);GtkWidget *hbox = gtk_hbox_new(TRUE, 0);gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 5, 4, 5);GtkWidget *vbox_login = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_login);GtkWidget *vbox_refresh = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_refresh);GtkWidget *vbox_reg = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_reg);GtkWidget *vbox_back = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_back);/* 设置控件 */// 标签 + 行编辑框GtkWidget *label_title = gtk_label_new("用户你好!欢迎使用哭够音乐播放器");gtk_label_set_markup(GTK_LABEL(label_title), "用户你好!欢迎使用哭够音乐播放器");gtk_table_attach_defaults(GTK_TABLE(table), label_title, 0, 5, 0, 1);GtkWidget *label_username = gtk_label_new("账号:");gtk_label_set_markup(GTK_LABEL(label_username), "账号:");gtk_table_attach_defaults(GTK_TABLE(table), label_username, 0, 1, 1, 2);entry_login_username = gtk_entry_new();gtk_table_attach_defaults(GTK_TABLE(table), entry_login_username, 1, 5, 1, 2);GtkWidget *label_password = gtk_label_new("密码:");gtk_label_set_markup(GTK_LABEL(label_password), "密码:");gtk_table_attach_defaults(GTK_TABLE(table), label_password, 0, 1, 2, 3);entry_login_password = gtk_entry_new();gtk_table_attach_defaults(GTK_TABLE(table), entry_login_password, 1, 5, 2, 3);GtkWidget *label_test = gtk_label_new("验证码:");gtk_label_set_markup(GTK_LABEL(label_test), "验证码:");gtk_table_attach_defaults(GTK_TABLE(table), label_test, 0, 1, 3, 4);entry_test = gtk_entry_new();gtk_table_attach_defaults(GTK_TABLE(table), entry_test, 1, 4, 3, 4);// 系统验证码label_user_input = gtk_label_new("");gtk_table_attach_defaults(GTK_TABLE(table), label_user_input, 4, 5, 3, 4);sys_generate_code();// 登录GtkWidget *label_login = gtk_label_new("登录");gtk_label_set_markup(GTK_LABEL(label_login), "登录");gtk_container_add(GTK_CONTAINER(vbox_login), label_login);GtkWidget *login = create_button_from_file("./img/manager/login.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_login), login);// 刷新GtkWidget *label_refresh = gtk_label_new("刷新");gtk_label_set_markup(GTK_LABEL(label_refresh), "刷新");gtk_container_add(GTK_CONTAINER(vbox_refresh), label_refresh);GtkWidget *refresh = create_button_from_file("./img/manager/refresh.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_refresh), refresh);// 注册GtkWidget *label_reg = gtk_label_new("注册");gtk_label_set_markup(GTK_LABEL(label_reg), "注册");gtk_container_add(GTK_CONTAINER(vbox_reg), label_reg);GtkWidget *reg = create_button_from_file("./img/manager/reg.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_reg), reg);// 返回上级GtkWidget *label_back = gtk_label_new("返回上级");gtk_label_set_markup(GTK_LABEL(label_back), "返回上级");gtk_container_add(GTK_CONTAINER(vbox_back), label_back);GtkWidget *back = create_button_from_file("./img/manager/back.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_back), back);/* 信号连接 */g_signal_connect(window_yh_login, "destroy", G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(login, "pressed", G_CALLBACK(do_user_login_id), NULL);g_signal_connect(refresh, "pressed", G_CALLBACK(do_user_login_refresh), NULL);g_signal_connect(reg, "pressed", G_CALLBACK(do_user_to_reg), NULL);g_signal_connect(back, "pressed", G_CALLBACK(do_user_login_back), NULL);
}/* 用户注册界面初始化 */
void window_yh_reg_init(void)
{/* 设置窗口 */window_yh_reg = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window_yh_reg), "用户你好!欢迎使用哭够音乐播放器!");gtk_widget_set_size_request(window_yh_reg, 600, 450);gtk_window_set_resizable(GTK_WINDOW(window_yh_reg), FALSE);gtk_window_set_position(GTK_WINDOW(window_yh_reg), GTK_WIN_POS_CENTER);gtk_container_set_border_width(GTK_CONTAINER(window_yh_reg), 15);chang_background(window_yh_reg, 600, 450, "./img/5.jpg");/* 设置布局 */GtkWidget *table = gtk_table_new(5, 5, TRUE);	/* 5行5列均衡排列 */gtk_container_add(GTK_CONTAINER(window_yh_reg), table);GtkWidget *hbox = gtk_hbox_new(TRUE, 0);gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 5, 4, 5);GtkWidget *vbox_reg = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_reg);GtkWidget *vbox_refresh = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_refresh);GtkWidget *vbox_back = gtk_vbox_new(FALSE, 0);gtk_container_add(GTK_CONTAINER(hbox), vbox_back);/* 设置控件 */// 标签 + 行编辑框GtkWidget *label_title = gtk_label_new("注册哭够音乐播放器账号");gtk_label_set_markup(GTK_LABEL(label_title), "注册哭够音乐播放器账号");gtk_table_attach_defaults(GTK_TABLE(table), label_title, 0, 5, 0, 1);GtkWidget *label_username = gtk_label_new("账号:");gtk_label_set_markup(GTK_LABEL(label_username), "账号:");gtk_table_attach_defaults(GTK_TABLE(table), label_username, 0, 1, 1, 2);entry_reg_username = gtk_entry_new();gtk_table_attach_defaults(GTK_TABLE(table), entry_reg_username, 1, 5, 1, 2);GtkWidget *label_phone = gtk_label_new("手机号:");gtk_label_set_markup(GTK_LABEL(label_phone), "手机号:");gtk_table_attach_defaults(GTK_TABLE(table), label_phone, 0, 1, 2, 3);entry_phone = gtk_entry_new();gtk_table_attach_defaults(GTK_TABLE(table), entry_phone, 1, 5, 2, 3);GtkWidget *label_password = gtk_label_new("密码:");gtk_label_set_markup(GTK_LABEL(label_password), "密码:");gtk_table_attach_defaults(GTK_TABLE(table), label_password, 0, 1, 3, 4);entry_reg_password = gtk_entry_new();gtk_table_attach_defaults(GTK_TABLE(table), entry_reg_password, 1, 5, 3, 4);// 注册GtkWidget *label_reg = gtk_label_new("注册");gtk_label_set_markup(GTK_LABEL(label_reg), "注册");gtk_container_add(GTK_CONTAINER(vbox_reg), label_reg);GtkWidget *reg = create_button_from_file("./img/manager/reg.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_reg), reg);// 刷新GtkWidget *label_refresh = gtk_label_new("刷新");gtk_label_set_markup(GTK_LABEL(label_refresh), "刷新");gtk_container_add(GTK_CONTAINER(vbox_refresh), label_refresh);GtkWidget *refresh = create_button_from_file("./img/manager/refresh.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_refresh), refresh);// 返回上级GtkWidget *label_back = gtk_label_new("返回上级");gtk_label_set_markup(GTK_LABEL(label_back), "返回上级");gtk_container_add(GTK_CONTAINER(vbox_back), label_back);GtkWidget *back = create_button_from_file("./img/manager/back.png", 60, 60);gtk_container_add(GTK_CONTAINER(vbox_back), back);/* 信号连接 */g_signal_connect(window_yh_reg, "destroy", G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(reg, "pressed", G_CALLBACK(do_user_reg_id), NULL);g_signal_connect(refresh, "pressed", G_CALLBACK(do_user_reg_refresh), NULL);g_signal_connect(back, "pressed", G_CALLBACK(do_user_reg_back), NULL);
}/* 音乐播放器界面初始化 */
void window_yh_music_init(void)
{/* 设置窗口 */window_yh_music = gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_window_set_title(GTK_WINDOW(window_yh_music), "哭够音乐播放器");gtk_widget_set_size_request(window_yh_music, 800, 600);gtk_window_set_resizable(GTK_WINDOW(window_yh_music), FALSE);gtk_window_set_position(GTK_WINDOW(window_yh_music), GTK_WIN_POS_CENTER);gtk_container_set_border_width(GTK_CONTAINER(window_yh_music), 15);chang_background(window_yh_music, 800, 600, "./img/5.jpg");/* 设置布局 */GtkWidget *table = gtk_table_new(7, 5, TRUE);			/* 7行5列均衡排列 */gtk_container_add(GTK_CONTAINER(window_yh_music), table);/* 设置控件 */GtkWidget *change_user = create_button_from_file("./img/music/change_user.png", 80, 80);/* 切换用户 */gtk_table_attach_defaults(GTK_TABLE(table), change_user, 0, 1, 0, 1);// 标签 + 图片 + 分栏列表GtkWidget *label_title = gtk_label_new("哭够音乐播放器");gtk_label_set_markup(GTK_LABEL(label_title), "哭够音乐播放器");gtk_table_attach_defaults(GTK_TABLE(table), label_title, 1, 4, 0, 1);image = gtk_image_new_from_pixbuf(NULL);load_image(image, "./img/music/射手座.mp3.jpg", 400, 200);gtk_table_attach_defaults(GTK_TABLE(table), image, 0, 4, 1, 4);gchar *title[1] = {"音乐名称"};clist = gtk_clist_new_with_titles(1, title);gtk_clist_set_column_width(GTK_CLIST(clist), 0, 150);						/* 设置第一列宽度 */gtk_clist_set_column_justification(GTK_CLIST(clist), 0, GTK_JUSTIFY_CENTER);/* 设置第一列内容居中对齐 */char *file_path = "/home/edu/share/me/week02/manager";char *file_type = ".mp3";search_file(file_path, file_type); sqlite_add_music();gtk_table_attach_defaults(GTK_TABLE(table), clist, 4, 5, 1, 4);GtkWidget *label_now_song = gtk_label_new("当前播放的音乐是:");label_song = gtk_label_new("射手座.mp3");gtk_label_set_markup(GTK_LABEL(label_now_song), "当前播放的音乐是:");gtk_table_attach_defaults(GTK_TABLE(table), label_now_song, 1, 2, 4, 5);gtk_table_attach_defaults(GTK_TABLE(table), label_song, 2, 3, 4, 5);GtkWidget *random = create_button_from_file("./img/music/random.png", 80, 80);		/* 随机播放 */gtk_table_attach_defaults(GTK_TABLE(table), random, 4, 5, 4, 5);GtkWidget *jxsy = create_button_from_file("./img/music/jxsy.png", 80, 80);			/* 减小音量 */gtk_table_attach_defaults(GTK_TABLE(table), jxsy, 0, 1, 5, 6);GtkWidget *button0 = gtk_button_new(); 						gtk_button_set_relief(GTK_BUTTON(button0), GTK_RELIEF_NONE);	gtk_table_attach_defaults(GTK_TABLE(table), button0, 1, 2, 5, 6);zt = create_button_from_file("./img/music/bf.png", 80, 80);						/* 暂停/播放 */gtk_table_attach_defaults(GTK_TABLE(table), zt, 2, 3, 5, 6);GtkWidget *button1 = gtk_button_new(); 						gtk_button_set_relief(GTK_BUTTON(button1), GTK_RELIEF_NONE);gtk_table_attach_defaults(GTK_TABLE(table), random, 3, 4, 5, 6);	GtkWidget *zjsy = create_button_from_file("./img/music/zjsy.png", 80, 80);			/* 加大音量 */gtk_table_attach_defaults(GTK_TABLE(table), zjsy, 4, 5, 5, 6);GtkWidget *slow = create_button_from_file("./img/music/slow.png", 80, 80);			/* 快退 */gtk_table_attach_defaults(GTK_TABLE(table), slow, 0, 1, 6, 7);GtkWidget *last_song = create_button_from_file("./img/music/last_song.png", 80, 80);	/* 上一曲 */gtk_table_attach_defaults(GTK_TABLE(table), last_song, 1, 2, 6, 7);msy = create_button_from_file("./img/music/sy.png", 80, 80);							/* 静音/开音 */gtk_table_attach_defaults(GTK_TABLE(table), msy, 2, 3, 6, 7);GtkWidget *next_song = create_button_from_file("./img/music/next_song.png", 80, 80); 	/* 下一曲 */gtk_table_attach_defaults(GTK_TABLE(table), next_song, 3, 4, 6, 7);GtkWidget *fast = create_button_from_file("./img/music/fast.png", 80, 80);			/* 快进 */gtk_table_attach_defaults(GTK_TABLE(table), fast, 4, 5, 6, 7);/* 信号连接 */g_signal_connect(window_yh_music, "destroy", G_CALLBACK(gtk_main_quit), NULL);g_signal_connect(window_yh_music, "destroy", G_CALLBACK(do_music_quit), NULL);g_signal_connect(clist, "select-row", G_CALLBACK(selection_made), NULL);g_signal_connect(zt, "pressed", G_CALLBACK(do_pause_music), NULL);g_signal_connect(slow, "pressed", G_CALLBACK(do_slow_music), NULL);g_signal_connect(fast, "pressed", G_CALLBACK(do_fast_music), NULL);g_signal_connect(jxsy, "pressed", G_CALLBACK(do_jxsy_music), NULL);g_signal_connect(zjsy, "pressed", G_CALLBACK(do_zjsy_music), NULL);g_signal_connect(last_song, "pressed", G_CALLBACK(do_last_music), NULL);g_signal_connect(next_song, "pressed", G_CALLBACK(do_next_music), NULL);g_signal_connect(msy, "pressed", G_CALLBACK(do_jy_music), NULL);g_signal_connect(random, "pressed", G_CALLBACK(do_random_music), NULL);g_signal_connect(change_user, "pressed", G_CALLBACK(do_change_user_music), NULL);
}/*********************** 自定义函数 *************************//* 切换图片 */
void load_image(GtkWidget *image, const char *file_path, const int w, const int h )
{gtk_image_clear( GTK_IMAGE(image) );        // 清除图像GdkPixbuf *src_pixbuf = gdk_pixbuf_new_from_file(file_path, NULL);	// 创建图片资源GdkPixbuf *dest_pixbuf = gdk_pixbuf_scale_simple(src_pixbuf, w, h, GDK_INTERP_BILINEAR); // 指定大小gtk_image_set_from_pixbuf(GTK_IMAGE(image), dest_pixbuf); // 图片控件重新设置一张图片(pixbuf)g_object_unref(src_pixbuf);		// 释放资源g_object_unref(dest_pixbuf);	// 释放资源
}/* 根据图片路径创建一个新按钮,同时指定图片大小 */
GtkWidget *create_button_from_file(const char *file_path, const int w, const int h)
{GtkWidget *temp_image = gtk_image_new_from_pixbuf(NULL);load_image(temp_image, file_path, w, h);GtkWidget *button = gtk_button_new(); 				// 先创建空按钮gtk_button_set_image(GTK_BUTTON(button), temp_image);	// 给按钮设置图标gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);	// 按钮背景色透明return button;
}/* 刷新按钮图标 */
void refresh_button_from_file(GtkWidget *button, const char *file_path, const int w, const int h)
{GtkWidget *temp_image = gtk_image_new_from_pixbuf(NULL);load_image(temp_image, file_path, w, h);gtk_button_set_image(GTK_BUTTON(button), temp_image);	// 给按钮设置图标gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);	// 按钮背景色透明
}/* 设置背景图片 */
void chang_background(GtkWidget *widget, int w, int h, const gchar *path)
{gtk_widget_set_app_paintable(widget, TRUE);		//允许窗口可以绘图gtk_widget_realize(widget);	/* 更改背景图时,图片会重叠* 这时要手动调用下面的函数,让窗口绘图区域失效,产生窗口重绘制事件(即 expose 事件)。*/gtk_widget_queue_draw(widget);GdkPixbuf *src_pixbuf = gdk_pixbuf_new_from_file(path, NULL);	// 创建图片资源对象// w, h是指定图片的宽度和高度GdkPixbuf *dst_pixbuf = gdk_pixbuf_scale_simple(src_pixbuf, w, h, GDK_INTERP_BILINEAR);GdkPixmap *pixmap = NULL;/* 创建pixmap图像; * NULL:不需要蒙版; * 123: 0~255,透明到不透明*/gdk_pixbuf_render_pixmap_and_mask(dst_pixbuf, &pixmap, NULL, 128);// 通过pixmap给widget设置一张背景图,最后一个参数必须为: FASLEgdk_window_set_back_pixmap(widget->window, pixmap, FALSE);// 释放资源g_object_unref(src_pixbuf);g_object_unref(dst_pixbuf);g_object_unref(pixmap);
}/* 系统生成验证码并显示到标签 */
void sys_generate_code(void)
{int i;char a[4] = "";srand(time(NULL));for(i = 0; i < 4; ++i){a[i] = rand() % 10 + '0';}gtk_label_set_text(GTK_LABEL(label_user_input), a);gchar *markup = g_strdup_printf("%s", a);gtk_label_set_markup(GTK_LABEL(label_user_input), markup);
}/* 切换音乐对应信息 */
void change_music_info(gint r)
{char *music = NULL;gtk_clist_get_text(GTK_CLIST(clist), r, 0, &music);gtk_label_set_text(GTK_LABEL(label_song), music);		/* 将标签文本设置为当前音乐名 */gchar name[40] = "";sprintf(name, "./img/music/%s.jpg", music);load_image(image, name, 400, 200);gchar cmd[100] = "";fd = open("cmd_fifo", O_WRONLY);		/* 以读写方式打开有名管道 */sprintf(cmd, "loadfile ./%s\n", music);write(fd, cmd, strlen(cmd));close(fd);
}/* 扫描目录下指定后缀文件 */
int search_file(char* name,char * type)
{DIR *p=NULL;p=opendir(name);if(p==NULL){perror("open dir error");return -1;}chdir(name);			/* 将当前的工作目录改变成以参数路径所指的目录 */int i;char a[10] = "";srand(time(NULL));while((pdir = readdir(p)) != NULL){if (pdir->d_name[0] == '.')					//忽略隐藏文件{continue;}if(isMediaFile(pdir->d_name)){for(i = 0; i < 10; ++i){a[i] = rand() % 10 + '0';}*music_add = a;*(music_add + 1) = pdir->d_name;add_to_music_table();}}closedir(p);return 0;
}/* 判断一个文件是否为MP3文件 */
int isMediaFile(const char *filename)
{while (filename)			//找到文件后缀的点{if (*filename == '.'){break;}filename++;}if (!strcmp(filename, ".mp3")){return 1;}return 0;
}

login.h

#ifndef _LOGIN_DL_H_
#define _LOGIN_DL_H_/********************** 自定义变量 ************************//* mplayer 播放状态 */
typedef enum __mplayer_stat__
{MPLAYER_STAT_FREE,MPLAYER_STAT_PLAY,MPLAYER_STAT_PAUSE,
}MplayerStat_en;/* mplayer 声音状态 */
typedef enum __mplayer_audio__
{MPLAYER_STAT_YES,MPLAYER_STAT_NO,
}MplayerAudio_en;/* mplayer 当前工作状态 */
typedef struct __media_stat__
{MplayerStat_en curstat;MplayerAudio_en curaudio;guint curmedianum;
}MediaStat_t;/*********************** 全局变量 *************************/gint fd;
gchar *user_info[3];														/* 存放所选中用户信息 */
gchar *music_info[2];														/* 存放所选中音乐信息 */
gchar *music_add[2];
struct dirent *pdir;														/* 存储指定文件夹下文件信息 */
MediaStat_t MediaStat;														/* 媒体状态结构体 */
GtkWidget *image;															/* 音乐对应图片 */
GtkWidget *zt;																/* 暂停按钮 */
GtkWidget *msy;																/* 静音按钮 */
GtkWidget *label_song;														/* 当前音乐标签*/
GtkWidget *clist;															/* 分栏列表 */	
GtkWidget *window_main;														/* 主界面 */
GtkWidget *window_gl_logintest;												/* 管理员登陆测试界面 */
GtkWidget *entry_manager_logintest_name, *entry_manager_logintest_password;	/* 行编辑框:账号、密码 */
GtkWidget *window_gl_cd;													/* 管理员界面 */
GtkWidget *window_gl_yh;													/* 用户管理界面 */
GtkWidget *gl_user;                               							/* 用户分栏列表*/
GtkWidget *window_gl_music;													/* 音乐管理界面 */
GtkWidget *gl_music;														/* 音乐分栏列表*/
GtkWidget *window_gl_reg;													/* 管理员注册界面 */
GtkWidget *entry_manager_reg_name, *entry_manager_reg_password;				/* 行编辑框:账号、密码 */
GtkWidget *window_yh_login;													/* 用户登录界面 */
GtkWidget *label_user_input;												/* 用户输入的验证码 */
GtkWidget *entry_login_username, *entry_login_password, *entry_test;		/* 行编辑框:账号、密码、验证码 */
GtkWidget *window_yh_reg;													/* 用户注册界面 */
GtkWidget *entry_reg_username, *entry_reg_password, *entry_phone;			/* 行编辑框:账号、手机号、密码 */
GtkWidget *window_yh_music;													/* 音乐播放器用户界面 *//*********************** 界面初始化 *************************//* 主界面初始化 */
extern void window_main_init(void);
/* 管理员登录测试界面初始化 */
extern void window_gl_logintest_init(void);
/* 管理员界面初始化 */
extern void window_gl_cd_init(void);
/* 管理员登录界面初始化 */
extern void window_gl_yh_init(void);
/* 管理员注册界面初始化 */
extern void window_gl_reg_init(void);
/* 用户登录界面初始化 */
extern void window_yh_cd_init(void);
/* 用户注册界面初始化 */
extern void window_yh_reg_init(void);
/* 音乐播放器用户界面初始化 */
extern void window_yh_music_init(void);/*********************** 自定义函数 *************************//* 切换图片 */
extern void load_image(GtkWidget *image, const char *file_path, const int w, const int h );
/* 根据图片路径创建一个新按钮,同时指定图片大小 */
extern GtkWidget *create_button_from_file(const char *file_path, const int w, const int h);
/* 刷新按钮图标 */
extern void refresh_button_from_file(GtkWidget *button, const char *file_path, const int w, const int h);
/* 设置背景图片 */
extern void chang_background(GtkWidget *widget, int w, int h, const gchar *path);
/* 系统生成验证码并显示到标签 */
extern void sys_generate_code(void);
/* 切换音乐对应信息 */
extern void change_music_info(gint r);
/* 扫描目录下指定后缀文件 */
extern int search_file(char* name,char * type);
/* 判断一个文件是否为MP3文件 */
extern int isMediaFile(const char *filename);#endif

other.c

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "sqlite3.h"
#include "login_dl.h"
#include "other.h"gint r = 0;/* 数据库初始化 */
void my_sql_init(void)
{sqlite3 *db;char *errmsg = NULL;int ret = sqlite3_open("hello.db", &db);if (ret != SQLITE_OK){perror("sqlite3_open\n");}char *cmd1 = "create table admin (id text, passwd text);";char *cmd2 = "create table user (name text, phone text, passwd text);";char *cmd3 = "create table music (id text, music text);";sqlite3_exec(db, cmd1, NULL, NULL, &errmsg);sqlite3_exec(db, cmd2, NULL, NULL, &errmsg);sqlite3_exec(db, cmd3, NULL, NULL, &errmsg);sqlite3_close(db);
}/* 向数据库中添加音乐信息 */
void add_to_music_table(void)
{sqlite3 *db;char *errmsg = NULL;int ret = sqlite3_open("hello.db", &db);if (ret != SQLITE_OK)perror("sqlite3_open\n");char cmd[100] = "";sprintf(cmd, "select * from music where music='%s';", *(music_add + 1));char **table = NULL;int r = 0, c = 0; sqlite3_get_table(db, cmd, &table, &r, &c, &errmsg);if (r != 0){printf( "该音乐已经在数据库中\n");sqlite3_close(db);return;}char sql[100] = "";sprintf(sql,"insert into music values(\'%s\',\'%s\');", *music_add, *(music_add + 1));errmsg = NULL;int asd = sqlite3_exec(db, sql, NULL, NULL, &errmsg);if (asd != SQLITE_OK)printf("有问题啊!");sqlite3_close(db);
}/* 向分栏列表中添加音乐名称 */
void sqlite_add_music(void)
{gtk_clist_clear(GTK_CLIST(gl_music));sqlite3 *db;char *errmsg = NULL;int ret = sqlite3_open("hello.db", &db);if (ret != SQLITE_OK)perror("sqlite3_open\n");const char *sql = "select * from music;";sqlite3_stmt *pstmt;int flag = sqlite3_prepare_v2(db, sql, strlen(sql), &pstmt, NULL);if (flag != 0){printf("prepare error flag : %d\n", flag);return;}char *a[1];int a0;while (sqlite3_step(pstmt) == SQLITE_ROW) {a[0] = (char *)sqlite3_column_text(pstmt, 1);a0 = gtk_clist_append(GTK_CLIST(clist), a);printf("step row num : %s, %d\n", a[0], a0);}sqlite3_finalize(pstmt);sqlite3_close(db);
}/*********************** 回调函数 *************************//*************** 主界面 ***************/
/* 主界面跳转到管理员界面 */
void do_manager(GtkButton *button, gpointer user_data)
{gtk_widget_show_all(window_gl_logintest);gtk_widget_hide_all(window_main);		/* 隐藏主界面 */
}/* 主界面跳转到用户界面 */
void do_user(GtkButton *button, gpointer user_data)
{gtk_widget_show_all(window_yh_login);gtk_widget_hide_all(window_main);		
}/*************** 管理员登录测试界面 ***************/
/* 管理员登录测试 */
void do_manager_logintest_id(GtkButton *button, gpointer user_data)
{sqlite3 *db;char *errmsg = NULL;int ret = sqlite3_open("hello.db", &db);if (ret != SQLITE_OK)perror("sqlite3_open\n");const char *id = gtk_entry_get_text(GTK_ENTRY(entry_manager_logintest_name));const char *passwd = gtk_entry_get_text(GTK_ENTRY(entry_manager_logintest_password));char sql[100] = "";sprintf(sql, "select * from admin where id = \'%s\' and passwd =\'%s\';", id, passwd);char **table = NULL;int r = 0, c = 0; int flag = sqlite3_get_table(db, sql, &table, &r, &c, &errmsg);if (flag == 0){printf("管理员你好!\n");entry_clean_for_window_gl_logintest();gtk_widget_show_all(window_gl_cd);gtk_widget_hide_all(window_gl_logintest);}elseprintf("账号或密码错误,请确认是否为管理员身份!\n");sqlite3_close(db);
}/* 刷新管理员登录测试界面 */
void do_manager_logintest_refresh(GtkButton *button, gpointer user_data)
{entry_clean_for_window_gl_logintest();
}/* 管理员登录测试界面跳转到主界面 */
void do_manager_logintest_back(GtkButton *button, gpointer user_data)
{entry_clean_for_window_gl_logintest();gtk_widget_show_all(window_main);gtk_widget_hide_all(window_gl_logintest);
}/*************** 管理员界面 ***************/
/* 管理员界面跳转到用户管理界面 */
void do_manager_yh(GtkButton *button, gpointer user_data)
{gtk_widget_show_all(window_gl_yh);gtk_widget_hide_all(window_gl_cd);
}/* 管理员界面跳转到音乐管理界面 */
void do_manager_yy(GtkButton *button, gpointer user_data)
{gtk_widget_show_all(window_gl_music);gtk_widget_hide_all(window_gl_cd);
}/* 管理员界面跳转到管理员注册界面 */
void do_manager_reg(GtkButton *button, gpointer user_data)
{gtk_widget_show_all(window_gl_reg);gtk_widget_hide_all(window_gl_cd);
}/* 管理员界面跳转到主界面 */
void do_manager_back(GtkButton *button, gpointer user_data)
{gtk_widget_show_all(window_main);gtk_widget_hide_all(window_gl_cd);
}/*************** 用户管理界面 ***************/
/* 查看用户信息 */ 
void do_manager_yh_show(GtkButton *button, gpointer user_data)
{gtk_clist_clear(GTK_CLIST(gl_user));sqlite3 *db;char *errmsg = NULL;int ret = sqlite3_open("hello.db", &db);if (ret != SQLITE_OK)perror("sqlite3_open\n");const char *sql = "select * from user;";sqlite3_stmt *pstmt;int flag = sqlite3_prepare_v2(db, sql, strlen(sql), &pstmt, NULL);if (flag != 0){printf("prepare error flag : %d\n", flag);return;}char *a[3];int a0;while (sqlite3_step(pstmt) == SQLITE_ROW) {a[0] = (char *)sqlite3_column_text(pstmt, 0);a[1] = (char *)sqlite3_column_text(pstmt, 1);a[2] = (char *)sqlite3_column_text(pstmt, 2);a0 = gtk_clist_append(GTK_CLIST(gl_user), a);printf("step row num : %s, %s, %s, %d\n", a[0], a[1], a[2], a0);}sqlite3_finalize(pstmt);sqlite3_close(db);gtk_widget_queue_draw(clist);
}/* 删除用户信息 */
void do_manager_yh_delete(GtkButton *button, gpointer user_data)
{sqlite3 *db;char *errmsg = NULL;int ret = sqlite3_open("hello.db", &db);if (ret != SQLITE_OK)perror("sqlite3_open\n");char sql[100] = "";errmsg = NULL;sprintf(sql, "delete from user where name=\'%s\';", *user_info);printf("%s", *user_info);int flag = sqlite3_exec(db, sql, NULL, NULL, &errmsg);if (flag != 0){printf("prepare error flag : %d\n", flag);return;}sqlite3_close(db);gtk_widget_queue_draw(clist);
}/* 用户管理界面跳转到管理员界面 */
void do_manager_yh_back(GtkButton *button, gpointer user_data)
{gtk_widget_show_all(window_gl_cd);gtk_widget_hide_all(window_gl_yh);
}/* 选中某一行用户信息时的回调函数 */
void select_user(GtkWidget *clist, gint row, gint col, GdkEventButton *event, gpointer data)
{gtk_clist_get_text(GTK_CLIST(gl_user), row, 0, user_info );gtk_clist_get_text(GTK_CLIST(gl_user), row, 1, (user_info + 1));gtk_clist_get_text(GTK_CLIST(gl_user), row, 2, (user_info + 2));printf("%s\n", *user_info);printf("%s\n", *(user_info + 1));printf("%s\n", *(user_info + 2));
}/*************** 音乐管理界面 ***************/
/* 查看音乐信息 */ 
void do_manager_yy_show(GtkButton *button, gpointer user_data)
{gtk_clist_clear(GTK_CLIST(gl_music));sqlite3 *db;char *errmsg = NULL;int ret = sqlite3_open("hello.db", &db);if (ret != SQLITE_OK)perror("sqlite3_open\n");const char *sql = "select * from music;";sqlite3_stmt *pstmt;int flag = sqlite3_prepare_v2(db, sql, strlen(sql), &pstmt, NULL);if (flag != 0){printf("prepare error flag : %d\n", flag);return;}char *a[3];int a0;while (sqlite3_step(pstmt) == SQLITE_ROW) {a[0] = (char *)sqlite3_column_text(pstmt, 0);a[1] = (char *)sqlite3_column_text(pstmt, 1);a0 = gtk_clist_append(GTK_CLIST(gl_music), a);printf("step row num : %s, %s, %d\n", a[0], a[1], a0);}sqlite3_finalize(pstmt);sqlite3_close(db);gtk_widget_queue_draw(gl_music);
}/* 增加音乐信息 */
void do_manager_yy_add(GtkButton *button, gpointer user_data)
{char *file_path = "/home/edu/share/me/week02/manager/src";char *file_type = ".mp3";search_file(file_path, file_type);
}/* 删除音乐信息 */
void do_manager_yy_delete(GtkButton *button, gpointer user_data)
{sqlite3 *db;char *errmsg = NULL;int ret = sqlite3_open("hello.db", &db);if (ret != SQLITE_OK)perror("sqlite3_open\n");char sql[100] = "";//int flag = sqlite3_prepare_v2(db, sql, strlen(sql), &pstmt, NULL);errmsg = NULL;sprintf(sql, "delete from music where id=\'%s\';", *music_info);int flag = sqlite3_exec(db, sql, NULL, NULL, &errmsg);if (flag != 0){printf("prepare error flag : %d\n", flag);return;}sqlite3_close(db);gtk_widget_queue_draw(gl_music);
}/* 音乐管理界面跳转到管理员界面 */
void do_manager_yy_back(GtkButton *button, gpointer user_data)
{gtk_widget_show_all(window_gl_cd);gtk_widget_hide_all(window_gl_music);
}/* 选中某一行音乐信息时的回调函数 */
void select_music(GtkWidget *clist, gint row, gint col, GdkEventButton *event, gpointer data)
{gtk_clist_get_text(GTK_CLIST(gl_music), row, 0, music_info);gtk_clist_get_text(GTK_CLIST(gl_music), row, 1, (music_info + 1));printf("%s\n", *music_info);printf("%s\n", *(music_info + 1));
}/*************** 管理员注册界面 ***************/
/* 管理员注册 */
void do_manager_reg_id(GtkButton *button, gpointer user_data)
{sqlite3 *db;char *errmsg = NULL;int ret = sqlite3_open("hello.db", &db);if (ret != SQLITE_OK)perror("sqlite3_open\n");const char *id = gtk_entry_get_text(GTK_ENTRY(entry_manager_reg_name));const char *passwd = gtk_entry_get_text(GTK_ENTRY(entry_manager_reg_password));char cmd[100] = "";sprintf(cmd, "select * from admin where id='%s');", id);char **table = NULL;int r = 0, c = 0; sqlite3_get_table(db, cmd, &table, &r, &c, &errmsg);if (r != 0){gtk_entry_set_text(GTK_ENTRY(entry_manager_reg_name), "您已经注册了,请直接登录!");sqlite3_close(db);return;}char sql[100] = "";sprintf(sql, "insert into admin values ('%s', '%s');", id, passwd);errmsg = NULL;sqlite3_exec(db, sql, NULL, NULL, &errmsg);if (NULL == errmsg){entry_clean_for_window_gl_reg();gtk_widget_show_all(window_gl_cd);gtk_widget_hide_all(window_gl_reg);}elsegtk_entry_set_text(GTK_ENTRY(entry_manager_reg_name), "注册失败!");sqlite3_close(db);
}/* 刷新管理员注册界面 */
void do_manager_reg_refresh(GtkButton *button, gpointer user_data)
{entry_clean_for_window_gl_reg();
}/* 管理员注册界面跳转到管理员界面 */
void do_manager_reg_back(GtkButton *button, gpointer user_data)
{entry_clean_for_window_gl_reg();gtk_widget_show_all(window_gl_cd);gtk_widget_hide_all(window_gl_reg);
}/*************** 用户登录界面 ***************/
/* 用户登录 */
void do_user_login_id(GtkButton *button, gpointer user_data)
{sqlite3 *db;char *errmsg = NULL;int ret = sqlite3_open("hello.db", &db);if (ret != SQLITE_OK)perror("sqlite3_open\n");const char *id = gtk_entry_get_text(GTK_ENTRY(entry_login_username));const char *passwd = gtk_entry_get_text(GTK_ENTRY(entry_login_password));char sql[100] = "";sprintf(sql, "select id, passwd from user where id='%s', passwd='%s');", id, passwd);char **table = NULL;int r = 0, c = 0; sqlite3_get_table(db, sql, &table, &r, &c, &errmsg);if (r != 0)printf("账号或密码错误\n");sqlite3_close(db);const char *test = gtk_label_get_text(GTK_LABEL(label_user_input));const char *input = gtk_entry_get_text(GTK_ENTRY(entry_test));if(0 == strcmp(input, test)){gtk_label_set_text(GTK_LABEL(label_user_input), "验证码正确!");gtk_label_set_markup(GTK_LABEL(label_user_input), "验证码正确!");MediaStat.curstat = MPLAYER_STAT_FREE;MediaStat.curaudio = MPLAYER_STAT_YES;entry_clean_for_window_yh_login();gtk_widget_show_all(window_yh_music);gtk_widget_hide_all(window_yh_login);if (MediaStat.curstat == MPLAYER_STAT_FREE){pid_t pid;					/* 创建进程号 */pid = fork();				/* 创建进程 */if (pid < 0)				/* 创建失败 */{perror("fork\n");		/* 打印错误信息 */return;}else if (0 == pid)			/* 子进程 */{/* 这个位置放第一首音乐名称* 进程中启动mplayer以slave模式,不打印乱码 * 播放完毕不退出 确认指令输入位置 指定管道位置 第一个放的歌曲名称*/execlp("mplayer", "mplayer", "-slave", "-quiet", "-idle", "-input", "file=./cmd_fifo", "./射手座.mp3", NULL);MediaStat.curstat = MPLAYER_STAT_PLAY;_exit(0);				/* 结束进程 */}}}else{gtk_label_set_text(GTK_LABEL(label_user_input), "验证码错误!");gtk_label_set_markup(GTK_LABEL(label_user_input), "验证码错误!");}
}/* 用户登录界面跳转到用户注册界面 */
void do_user_to_reg(GtkButton *button, gpointer user_data)
{entry_clean_for_window_yh_login();gtk_widget_show_all(window_yh_reg);gtk_widget_hide_all(window_yh_login);
}/* 用户刷新验证码 */
void do_user_login_refresh(GtkButton *button, gpointer user_data)
{entry_clean_for_window_yh_login();sys_generate_code();
}/* 用户登录界面跳转到主界面 */
void do_user_login_back(GtkButton *button, gpointer user_data)
{gtk_widget_show_all(window_main);gtk_widget_hide_all(window_yh_login);
}/*************** 用户注册界面 ***************/
/* 用户注册 */
void do_user_reg_id(GtkButton *button, gpointer user_data)
{sqlite3 *db;char *errmsg = NULL;int ret = sqlite3_open("hello.db", &db);if (ret != SQLITE_OK)perror("sqlite3_open\n");const char *id = gtk_entry_get_text(GTK_ENTRY(entry_reg_username));const char *phone = gtk_entry_get_text(GTK_ENTRY(entry_phone));const char *passwd = gtk_entry_get_text(GTK_ENTRY(entry_reg_password));char cmd[100] = "";sprintf(cmd, "select * from user where id='%s');", id);char **table = NULL;int r = 0, c = 0; sqlite3_get_table(db, cmd, &table, &r, &c, &errmsg);if (r != 0){gtk_entry_set_text(GTK_ENTRY(entry_manager_reg_name), "您已经注册了,请直接登录!");sqlite3_close(db);return;}char sql[100] = "";sprintf(sql, "insert into user values ('%s', '%s', '%s');", id, phone, passwd);errmsg = NULL;sqlite3_exec(db, sql, NULL, NULL, &errmsg);if (NULL == errmsg){entry_clean_for_window_yh_reg();gtk_widget_show_all(window_yh_login);gtk_widget_hide_all(window_yh_reg);}elsegtk_entry_set_text(GTK_ENTRY(entry_manager_reg_name), "注册失败!");sqlite3_close(db);
}/* 刷新用户注册界面 */
void do_user_reg_refresh(GtkButton *button, gpointer user_data)
{entry_clean_for_window_yh_reg();
}/* 用户注册界面跳转到用户登录界面 */
void do_user_reg_back(GtkButton *button, gpointer user_data)
{entry_clean_for_window_yh_reg();gtk_widget_show_all(window_yh_login);gtk_widget_hide_all(window_yh_reg);
}/*************** 音乐播放器界面 ***************/
/* 用户选中某一行时的回调函数 */
void selection_made(GtkWidget *clist, gint row, gint col, GdkEventButton *event, gpointer data)
{	gtk_widget_queue_draw(clist);gchar *text;/* 取得存储在被选中的行和列的单元格上的文本* 当鼠标点击时,我们用text参数接收一个指针*/gtk_clist_get_text(GTK_CLIST(clist), row, col, &text);gtk_label_set_markup(GTK_LABEL(label_song), "{{text}}");gtk_label_set_text(GTK_LABEL(label_song), text);		/* 将标签文本设置为当前音乐名 */switch(row){case 0:{		change_music_info(row);break; }case 1:{change_music_info(row); break; }case 2:{ change_music_info(row); break; }case 3:{ change_music_info(row);break; }case 4:{ change_music_info(row);break; }}
}/* 关闭窗口结束音乐播放子进程 */
void do_music_quit(GtkWidget *widget, gpointer user_data)
{fd = open("cmd_fifo", O_WRONLY);		/* 以读写方式打开有名管道 */write(fd, "quit\n", strlen("quit\n"));close(fd);
}/* 随机播放音乐 */
void do_random_music(GtkWidget *widget, gpointer user_data)
{int a;srand(time(NULL));		/* 设置随机因子 */a = rand() % 4;			/* 4首歌,对4取余 */switch(a){case 0:{		change_music_info(a);break; }case 1:{change_music_info(a);break; }case 2:{ change_music_info(a);  break; }case 3:{ change_music_info(a); break; }case 4:{ change_music_info(a); break; }}
}/* 暂停音乐并切换图标 */
void do_pause_music(GtkWidget *widget, gpointer user_data)
{if (MediaStat.curstat == MPLAYER_STAT_PLAY){refresh_button_from_file(zt, "./img/music/pause.png", 80, 80);MediaStat.curstat = MPLAYER_STAT_PAUSE;}else{refresh_button_from_file(zt, "./img/music/bf.png", 80, 80);MediaStat.curstat = MPLAYER_STAT_PLAY;}fd = open("cmd_fifo", O_WRONLY);		/* 以读写方式打开有名管道 */write(fd, "pause\n", strlen("pause\n"));close(fd);
}/* 减小声音 */
void do_jxsy_music(GtkWidget *widget, gpointer user_data)
{fd = open("cmd_fifo", O_WRONLY);		/* 以读写方式打开有名管道 */write(fd, "volume -10\n", strlen("volume -10\n"));close(fd);
}/* 增加声音 */
void do_zjsy_music(GtkWidget *widget, gpointer user_data)
{fd = open("cmd_fifo", O_WRONLY);		/* 以读写方式打开有名管道 */write(fd, "volume 10\n", strlen("volume 10\n"));close(fd);
}/* 快进 */
void do_fast_music(GtkWidget *widget, gpointer user_data)
{fd = open("cmd_fifo", O_WRONLY);		/* 以读写方式打开有名管道 */write(fd, "seek 10\n", strlen("seek 10\n"));close(fd);
}/* 快退 */
void do_slow_music(GtkWidget *widget, gpointer user_data)
{fd = open("cmd_fifo", O_WRONLY);		/* 以读写方式打开有名管道 */write(fd, "seek -10\n", strlen("seek -10\n"));close(fd);
}/* 静音 */
void do_jy_music(GtkWidget *widget, gpointer user_data)
{if (MediaStat.curaudio == MPLAYER_STAT_YES){refresh_button_from_file(msy, "./img/music/sy.png", 80, 80);fd = open("cmd_fifo", O_WRONLY);		/* 以读写方式打开有名管道 */write(fd, "mute 0\n", strlen("mute 0\n"));close(fd);MediaStat.curaudio = MPLAYER_STAT_NO;}else{refresh_button_from_file(msy, "./img/music/msy.png", 80, 80);fd = open("cmd_fifo", O_WRONLY);		/* 以读写方式打开有名管道 */write(fd, "mute 1\n", strlen("mute 1\n"));close(fd);MediaStat.curaudio = MPLAYER_STAT_YES;}}/* 上一首音乐 */
void do_last_music(GtkWidget *widget, gpointer user_data)
{gchar *text;r--;if(r < 0)r = 4;switch(r){case 0:{		change_music_info(r); break; }case 1:{change_music_info(r); break; }case 2:{ change_music_info(r); break; }case 3:{ change_music_info(r);break; }case 4:{ change_music_info(r);break; }}
}/* 下一首音乐 */
void do_next_music(GtkWidget *widget, gpointer user_data)
{gchar *text;r++;if (r > 4)r = 0;switch(r){case 0:{		change_music_info(r); break; }case 1:{change_music_info(r); break; }case 2:{ change_music_info(r); break; }case 3:{ change_music_info(r);break; }case 4:{ change_music_info(r);break; }}
}/* 切换用户 */
void do_change_user_music(GtkWidget *widget, gpointer user_data)
{fd = open("cmd_fifo", O_WRONLY);		/* 以读写方式打开有名管道 */write(fd, "quit\n", strlen("quit\n"));close(fd);;gtk_widget_show_all(window_yh_login);gtk_widget_hide_all(window_yh_music);
}/*********************** 清除函数 *************************/
/* 管理员登录测试界面行编辑框清除 */
void entry_clean_for_window_gl_logintest(void)
{gtk_entry_set_text(GTK_ENTRY(entry_manager_logintest_name), "");gtk_entry_set_text(GTK_ENTRY(entry_manager_logintest_password), "");
}/* 管理员注册界面行编辑框清除 */
void entry_clean_for_window_gl_reg(void)
{gtk_entry_set_text(GTK_ENTRY(entry_manager_reg_name), "");gtk_entry_set_text(GTK_ENTRY(entry_manager_reg_password), "");
}/* 用户登录界面行编辑框清除 */
void entry_clean_for_window_yh_login(void)
{gtk_entry_set_text(GTK_ENTRY(entry_login_username), "");gtk_entry_set_text(GTK_ENTRY(entry_login_password), "");gtk_entry_set_text(GTK_ENTRY(entry_test), "");sys_generate_code();
}/* 用户注册界面行编辑框清除 */
void entry_clean_for_window_yh_reg(void)
{gtk_entry_set_text(GTK_ENTRY(entry_reg_username), "");gtk_entry_set_text(GTK_ENTRY(entry_phone), "");gtk_entry_set_text(GTK_ENTRY(entry_reg_password), "");
}

other.h

#ifndef _OTHER_H_
#define _OTHER_H_/* 数据库初始化 */
extern void my_sql_init(void);
/* 向数据库中添加音乐信息 */
extern void add_to_music_table(void);
/* 向分栏列表中添加音乐名称 */
extern void sqlite_add_music(void);/*********************** 回调函数 *************************//*************** 主界面 ***************/
/* 主界面跳转到管理员界面 */
extern void do_manager(GtkButton *button, gpointer user_data);
/* 主界面跳转到用户界面 */
extern void do_user(GtkButton *button, gpointer user_data);/*************** 管理员登录测试界面 ***************/
/* 管理员登录测试 */
extern void do_manager_logintest_id(GtkButton *button, gpointer user_data);
/* 刷新管理员登录测试界面 */
extern void do_manager_logintest_refresh(GtkButton *button, gpointer user_data);
/* 管理员登录测试界面跳转到主界面 */
extern void do_manager_logintest_back(GtkButton *button, gpointer user_data);/*************** 管理员界面 ***************/
/* 管理员界面跳转到用户管理界面 */
extern void do_manager_yh(GtkButton *button, gpointer user_data);
/* 管理员界面跳转到音乐管理界面 */
extern void do_manager_yy(GtkButton *button, gpointer user_data);
/* 管理员界面跳转到管理员注册界面 */
extern void do_manager_reg(GtkButton *button, gpointer user_data);
/* 管理员界面跳转到主界面 */
extern void do_manager_back(GtkButton *button, gpointer user_data);/*************** 用户管理界面 ***************/
/* 查看用户信息 */ 
extern void do_manager_yh_show(GtkButton *button, gpointer user_data);
/* 删除用户信息 */
extern void do_manager_yh_delete(GtkButton *button, gpointer user_data);
/* 用户管理界面跳转到管理员界面 */
extern void do_manager_yh_back(GtkButton *button, gpointer user_data);
/* 选中某一行用户信息时的回调函数 */
extern void select_user(GtkWidget *clist, gint row, gint col, GdkEventButton *event, gpointer data);/*************** 音乐管理界面 ***************/
/* 查看音乐信息 */ 
extern void do_manager_yy_show(GtkButton *button, gpointer user_data);
/* 增加音乐信息 */
extern void do_manager_yy_add(GtkButton *button, gpointer user_data);
/* 删除音乐信息 */
extern void do_manager_yy_delete(GtkButton *button, gpointer user_data);
/* 音乐管理界面跳转到管理员界面 */
extern void do_manager_yy_back(GtkButton *button, gpointer user_data);
/* 选中某一行音乐信息时的回调函数 */
extern void select_music(GtkWidget *clist, gint row, gint col, GdkEventButton *event, gpointer data);/*************** 管理员注册界面 ***************/
/* 管理员注册 */
extern void do_manager_reg_id(GtkButton *button, gpointer user_data);
/* 刷新管理员注册界面 */
extern void do_manager_reg_refresh(GtkButton *button, gpointer user_data);
/* 管理员注册界面跳转到管理员界面 */
extern void do_manager_reg_back(GtkButton *button, gpointer user_data);/*************** 用户登录界面 ***************/
/* 用户登录 */
extern void do_user_login_id(GtkButton *button, gpointer user_data);
/* 用户登录界面跳转到用户注册界面 */
extern void do_user_to_reg(GtkButton *button, gpointer user_data);
/* 用户刷新验证码 */
extern void do_user_login_refresh(GtkButton *button, gpointer user_data);
/* 用户界面跳转到主界面 */
extern void do_user_login_back(GtkButton *button, gpointer user_data);/*************** 用户注册界面 ***************/
/* 用户注册 */
extern void do_user_reg_id(GtkButton *button, gpointer user_data);
/* 刷新用户注册界面 */
extern void do_user_reg_refresh(GtkButton *button, gpointer user_data);
/* 用户注册界面跳转到用户登录界面 */
extern void do_user_reg_back(GtkButton *button, gpointer user_data);/*************** 音乐播放器界面 ***************/
/* 用户选中某一行时的回调函数 */
extern void selection_made(GtkWidget *clist, gint row, gint col, GdkEventButton *event, gpointer data);
/* 关闭窗口结束音乐播放子进程 */
extern void do_music_quit(GtkWidget *widget, gpointer user_data);
/* 随机播放音乐 */
extern void do_random_music(GtkWidget *widget, gpointer user_data);
/* 暂停音乐并切换图标 */
extern void do_pause_music(GtkWidget *widget, gpointer user_data);
/* 减小声音 */
extern void do_jxsy_music(GtkWidget *widget, gpointer user_data);
/* 增加声音 */
extern void do_zjsy_music(GtkWidget *widget, gpointer user_data);
/* 快进 */
extern void do_fast_music(GtkWidget *widget, gpointer user_data);
/* 快退 */
extern void do_slow_music(GtkWidget *widget, gpointer user_data);
/* 静音 */
extern void do_jy_music(GtkWidget *widget, gpointer user_data);
/* 上一首音乐 */
extern void do_last_music(GtkWidget *widget, gpointer user_data);
/* 下一首音乐 */
extern void do_next_music(GtkWidget *widget, gpointer user_data);
/* 切换用户 */
extern void do_change_user_music(GtkWidget *widget, gpointer user_data);/*********************** 清除函数 *************************/
/* 管理员登录测试界面行编辑框清除 */
extern void entry_clean_for_window_gl_logintest(void);
/* 管理员注册界面行编辑框清除 */
extern void entry_clean_for_window_gl_reg(void);
/* 用户登录界面行编辑框清除 */
extern void entry_clean_for_window_yh_login(void);
/* 用户注册界面行编辑框清除 */
extern void entry_clean_for_window_yh_reg(void);#endif

项目完成度

在这里插入图片描述

  • 音乐播放器有Bug
  • 音乐管理增加功能未能如期完成

项目总结

在这里插入图片描述

  • 闭门造车,出门合辙
    • 其一如古意
      • 项目分工标准化、流程化,结合时自然而然可以运行
    • 其二如今意
      • 可以使用别人的轮子来完成自己的目的,但要做好不能运行的准备


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部