音乐播放器管理系统
项目名称
音乐播放器管理系统
需求分析
需要完成的需求:
- 身份验证
- 管理用户
- 管理音乐
- 登录
- 注册
- 音乐播放器
页面规划
-
9个窗口
-
主界面窗口:管理员 用户
-
管理员身份验证:登录 刷新 返回
-
管理窗口:用户管理 音乐管理 注册 返回
-
用户管理:分栏列表 查看 删除 返回
-
音乐管理:分栏列表 查看 删除 增加 返回
-
注册窗口:账号 文本框 密码 文本框 注册 刷新 返回
-
-
-
用户登录:账号 文本框 密码 文本框 验证码 文本框 登录 刷新 注册 返回
- 音乐播放器:播放/暂停 切歌 声音调节 切换用户
- 注册窗口:账号 文本框 手机号 文本框 密码 文本框 注册 刷新 返回
-
-
流程规划
- 9个窗口
- 主界面窗口:管理员 用户
- 点击主界面中的管理员按钮——跳转到管理员身份验证
- 管理员身份验证:登录 刷新 返回
- 点击管理员身份验证中的登录按钮——验证成功跳转到管理窗口
- 管理窗口:用户管理 音乐管理 注册 返回
- 点击管理窗口中的用户管理按钮——跳转到用户管理窗口
- 用户管理:分栏列表 查看 删除 返回
- 点击管理窗口中的音乐管理按钮——跳转到音乐管理窗口
- 音乐管理:分栏列表 查看 删除 增加 返回
- 点击管理窗口中的注册按钮——跳转到注册窗口
- 注册窗口:账号 文本框 密码 文本框 注册 刷新 返回
- 点击管理窗口中的返回按钮——跳转到主界面
- 点击管理员身份验证中的登录按钮——验证失败还在当前页
- 点击管理员身份验证中的返回按钮——跳转到主界面
- 点击主界面的用户按钮——跳转到用户登陆界面
- 用户登录界面:登录 刷新 注册 返回
- 点击管理员身份验证中的登录按钮——验证成功跳转到音乐播放器
- 音乐播放器:播放/暂停 切歌 声音调节 切换用户
- 点击用户登录窗口中的注册按钮——跳转到注册窗口
- 注册窗口:账号 文本框 手机号 文本框 密码 文本框 注册 刷新 返回
- 点击管理员身份验证中的登录按钮——验证失败还在当前页
- 点击管理员身份验证中的返回按钮——跳转到主界面
- 点击管理员身份验证中的登录按钮——验证成功跳转到音乐播放器
- 用户登录界面:登录 刷新 注册 返回
功能
- 5个文件
- main.c
- 编写各种调用功能的主函数
- login_dl.c
- 编写窗口界面设计等
- login_dl.h
- 将login_dl.c中自定义的函数在此声明,定义全局变量
- other.c
- 编写数据库控制函数和回调函数的定义
- other.h
- 编写other.c中回调函数的声明
- main.c
代码
main.c
#include <stdio.h>
#include <gtk/gtk.h>
#include <pthread.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <semaphore.h>
#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 <stdio.h>
#include <gtk/gtk.h>
#include <glib.h>
#include <pthread.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <semaphore.h>
#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), "<span foreground='white' font_desc='28'>哭够音乐播放器系统</span>");
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), "<span foreground='#b73838' font_desc='16'>管理员</span>");
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), "<span foreground='#b73838' font_desc='16'>用户</span>");
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), "<span foreground='white' font_desc='28'>管理员身份验证</span>");
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), "<span foreground='white' font_desc='14'>账号:</span>");
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), "<span foreground='white' font_desc='14'>密码:</span>");
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), "<span foreground='#b73838' font_desc='14'>登录</span>");
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), "<span foreground='#b73838' font_desc='14'>刷新</span>");
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), "<span foreground='#b73838' font_desc='14'>返回上级</span>");
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), "<span foreground='white' font_desc='28'>哭够音乐播放器管理员列表</span>");
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), "<span foreground='#b73838' font_desc='16'>用户管理</span>");
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), "<span foreground='#b73838' font_desc='16'>音乐管理</span>");
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), "<span foreground='#b73838' font_desc='16'>管理员注册</span>");
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), "<span foreground='#b73838' font_desc='16'>返回上级</span>");
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), "<span foreground='white' font_desc='28'>用户管理</span>");
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), "<span foreground='white' font_desc='28'>音乐管理</span>");
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), "<span foreground='white' font_desc='28'>注册哭够音乐播放器管理员</span>");
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), "<span foreground='white' font_desc='14'>账号:</span>");
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), "<span foreground='white' font_desc='14'>密码:</span>");
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), "<span foreground='#b73838' font_desc='14'>注册</span>");
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), "<span foreground='#b73838' font_desc='14'>刷新</span>");
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), "<span foreground='#b73838' font_desc='14'>返回上级</span>");
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), "<span foreground='white' font_desc='28'>用户你好!欢迎使用哭够音乐播放器</span>");
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), "<span foreground='white' font_desc='14'>账号:</span>");
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), "<span foreground='white' font_desc='14'>密码:</span>");
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), "<span foreground='white' font_desc='14'>验证码:</span>");
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), "<span foreground='#b73838' font_desc='14'>登录</span>");
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), "<span foreground='#b73838' font_desc='14'>刷新</span>");
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), "<span foreground='#b73838' font_desc='14'>注册</span>");
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), "<span foreground='#b73838' font_desc='14'>返回上级</span>");
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), "<span foreground='white' font_desc='26'>注册哭够音乐播放器账号</span>");
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), "<span foreground='white' font_desc='14'>账号:</span>");
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), "<span foreground='white' font_desc='14'>手机号:</span>");
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), "<span foreground='white' font_desc='14'>密码:</span>");
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), "<span foreground='#b73838' font_desc='14'>注册</span>");
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), "<span foreground='#b73838' font_desc='14'>刷新</span>");
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), "<span foreground='#b73838' font_desc='14'>返回上级</span>");
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), "<span foreground='white' font_desc='16'>哭够音乐播放器</span>");
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), "<span foreground='white' font_desc='14'>当前播放的音乐是:</span>");
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设置一张背景图,最后一个参数必须为: FASLE
gdk_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("<span foreground='white' font_desc='14'>%s</span>", 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 <stdio.h>
#include <gtk/gtk.h>
#include <glib.h>
#include <pthread.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <semaphore.h>
#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);
}
else
printf("账号或密码错误,请确认是否为管理员身份!\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);
}
else
gtk_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), "<span foreground='#686fed' font_desc='10'>验证码正确!</span>");
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), "<span foreground='red' font_desc='10'>验证码错误!</span>");
}
}
/* 用户登录界面跳转到用户注册界面 */
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);
}
else
gtk_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), "<span foreground='white' font_desc='14'>{{text}}</span>");
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
- 音乐管理增加功能未能如期完成
项目总结
- 闭门造车,出门合辙
- 其一如古意
- 项目分工标准化、流程化,结合时自然而然可以运行
- 其二如今意
- 可以使用别人的轮子来完成自己的目的,但要做好不能运行的准备
- 其一如古意