文章目录
前言
本项目是在我学习C语言,数据结构,文件IO,系统编程,网络编程后,独立实现的一个项目。该项目的主要功能:
1、模拟用户登录,注册功能,并通过通信到阿里云服务器远程验证用户名和密码。
2、目录的拷贝。
3、生成目录树。
4、指定文件拷贝。
5、目录的读取。
一、开发环境
VScode、WSL(windows下的linux系统)
二、开发工具
LVGL库
三、技术要点
C语言 ,文件IO ,数据结构,系统编程,网络编程
四、思维导图
五、功能代码
一、登录界面
1、图示
2、界面代码
#include "myhead.h"
lv_obj_t* kb;
lv_obj_t* txt_user;
lv_obj_t* txt_passward;
lv_obj_t* page_login;
lv_obj_t* label_msg;
lv_obj_t* btn_reg;
lv_obj_t* btn_login;
lv_obj_t *msgbox;
int cnt;
void login(void)
{
//创建界面
page_login = lv_obj_create(NULL);
lv_obj_set_size(page_login, 1024, 1080);
//显示开始图片
lv_obj_t* img1 = lv_img_create(page_login);//创建图片对象
lv_img_set_src(img1, "S:/photo/login.bmp");
//创建标签显示:欢迎使用羊羊聊天
lv_obj_t* label1 = lv_label_create(page_login);
lv_obj_set_size(label1, 250, 150);
lv_show_chinese(55, label1, LV_TEXT_ALIGN_CENTER);
lv_label_set_text(label1, "羊羊拷贝");
lv_obj_set_style_text_color(label1, lv_color_hex(0xffffff), LV_STATE_DEFAULT);
lv_obj_align(label1, LV_ALIGN_TOP_MID, 0, 17);
//显示中间图片
lv_obj_t* img2 = lv_img_create(page_login);
lv_img_set_src(img2, "S:/photo/label.bmp");
lv_obj_align(img2, LV_ALIGN_TOP_MID, 0, 85);
//创建用户名和密码文本框
txt_user = lv_textarea_create(page_login);
txt_passward = lv_textarea_create(page_login);
lv_obj_set_size(txt_user, 545, 100);//设置大小
lv_obj_set_size(txt_passward, 545, 100);
lv_obj_set_style_bg_color(txt_user, lv_color_hex(0xffffff), LV_STATE_DEFAULT);//设置背景色
lv_obj_set_style_bg_opa(txt_user, 100, LV_STATE_DEFAULT); //设置透明度
lv_obj_set_style_bg_color(txt_passward, lv_color_hex(0xffffff), LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(txt_passward, 100, LV_STATE_DEFAULT);
lv_obj_align(txt_user, LV_ALIGN_CENTER, 0, 15);//设置位置
lv_obj_align_to(txt_passward, txt_user, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
lv_textarea_set_max_length(txt_user, 10); //设置字符长度最大是10
lv_textarea_set_max_length(txt_passward, 6); //设置字符长度最大是6
lv_show_chinese(40, txt_user, LV_TEXT_ALIGN_CENTER);//设置显示汉字
lv_show_chinese(40, txt_passward, LV_TEXT_ALIGN_CENTER);
lv_textarea_set_placeholder_text(txt_user, "请输入您的账号");//设置默认提示信息
lv_textarea_set_placeholder_text(txt_passward, "请输入您的密码");
lv_textarea_set_password_mode(txt_passward, true);//设置文本隐藏
lv_textarea_set_password_show_time(txt_passward, 100);
lv_obj_t* label_user = lv_label_create(txt_user);//显示用户名图标
lv_obj_t* label_passward = lv_label_create(txt_passward);//显示密码图标z
lv_obj_set_size(label_user, 50, 50);//设置大小
lv_obj_set_size(label_passward, 50, 50);
lv_obj_align(label_user, LV_ALIGN_LEFT_MID, 0, 0);//设置位置
lv_obj_align(label_passward, LV_ALIGN_LEFT_MID, 0, 0);
lv_obj_t* img3 = lv_img_create(label_user); //显示相关图片
lv_img_set_src(img3, "S:/photo/user.bmp");
lv_obj_align(img3, LV_ALIGN_CENTER, 0, 0);
lv_obj_t* img4 = lv_img_create(label_passward);
lv_img_set_src(img4, "S:/photo/passward.bmp");
lv_obj_align(img4, LV_ALIGN_CENTER, 0, 0);
//创建登陆按钮
btn_login = lv_btn_create(page_login);
lv_obj_t* label_btn_login = lv_label_create(btn_login);
lv_obj_set_size(btn_login, 545, 80);
lv_obj_set_size(label_btn_login, 545, 80);
lv_obj_align_to(label_btn_login, btn_login, LV_ALIGN_CENTER, 0, 0);
lv_obj_align_to(btn_login, txt_passward, LV_ALIGN_OUT_BOTTOM_MID, 0, 50);
lv_show_chinese(60, label_btn_login, LV_TEXT_ALIGN_CENTER);
lv_label_set_text(label_btn_login, "登录");
lv_obj_set_style_text_color(label_btn_login, lv_color_hex(0x000000), LV_STATE_DEFAULT);//设置字体颜色
lv_obj_set_style_bg_color(btn_login, lv_color_hex(0xffffff), LV_STATE_DEFAULT);//设置按钮白色
lv_obj_set_style_bg_opa(btn_login, 255, LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(label_btn_login, lv_color_hex(0xffffff), LV_STATE_DEFAULT);//设置标签白色
lv_obj_set_style_bg_opa(label_btn_login, 0, LV_STATE_DEFAULT);
lv_obj_add_event_cb(btn_login, btn_login_and_reg_cb, LV_EVENT_CLICKED, NULL);
//创建注册按钮
btn_reg = lv_btn_create(page_login);
lv_obj_t* label_btn_reg = lv_label_create(btn_reg);
lv_obj_set_size(btn_reg, 130, 50);//设置大小
lv_obj_set_size(label_btn_reg, 130, 50);
lv_obj_align_to(btn_reg, btn_login, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 20);//设置对齐
lv_obj_align_to(label_btn_reg, btn_reg, LV_ALIGN_CENTER, 0, 6);
lv_show_chinese(30, label_btn_reg, LV_TEXT_ALIGN_CENTER);
lv_label_set_text(label_btn_reg, "立即注册");
lv_obj_set_style_bg_color(btn_reg, lv_color_hex(0xffffff), LV_STATE_DEFAULT);//设置按钮白色
lv_obj_set_style_bg_opa(btn_reg, 0, LV_STATE_DEFAULT);
lv_obj_set_style_text_color(label_btn_reg, lv_color_hex(0x00ff00), LV_STATE_DEFAULT);//设置字体颜色
lv_obj_add_event_cb(btn_reg, btn_login_and_reg_cb, LV_EVENT_CLICKED, NULL);
//创建软键盘
kb = lv_keyboard_create(page_login);
lv_obj_set_size(kb, 700, 300);
lv_obj_align_to(kb, txt_passward, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_event_cb(txt_user, txt_kb_cb, LV_EVENT_CLICKED, NULL);//键盘绑定文本区域
lv_obj_add_event_cb(txt_passward, txt_kb_cb, LV_EVENT_CLICKED, NULL);
lv_obj_t* btn_login_kb = lv_btn_create(page_login);//生成键盘图标
lv_obj_t* label_kb = lv_label_create(btn_login_kb);
lv_obj_set_size(btn_login_kb, 55, 35);
lv_obj_set_size(label_kb, 55, 50);
lv_obj_set_style_text_color(label_kb, lv_color_hex(0x000000), LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(label_kb, 0, LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(btn_login_kb, lv_color_hex(0x0000A0), LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(btn_login_kb, 0, LV_STATE_DEFAULT);
lv_obj_align(label_kb, LV_ALIGN_CENTER, 0, 0);
lv_obj_align(btn_login_kb, LV_ALIGN_LEFT_MID, 10, 400);
lv_label_set_text(label_kb, LV_SYMBOL_KEYBOARD);
lv_obj_set_style_text_font(label_kb, &lv_font_montserrat_48, LV_STATE_DEFAULT);
lv_obj_set_style_text_color(label_kb, lv_color_hex(0xffffff), LV_STATE_DEFAULT);
lv_obj_add_event_cb(btn_login_kb, btn_login_kb_cb, LV_EVENT_CLICKED, NULL);
//加载页面
lv_scr_load(page_login);
}
//键盘关联响应函数
void* txt_kb_cb(lv_event_t* e)
{
lv_obj_t* target = lv_event_get_target(e);
if(target == txt_user)
{
lv_keyboard_set_textarea(kb, txt_user);
}
else
{
lv_keyboard_set_textarea(kb, txt_passward);
}
}
//键盘显示响应函数
void* btn_login_kb_cb(lv_event_t* e)
{
lv_obj_t* target = lv_event_get_target(e);
if(!cnt && target)
{
//显示键盘
lv_obj_clear_flag(kb, LV_OBJ_FLAG_HIDDEN);
target = 0;
cnt++;
}
else if(cnt && target)
{
//隐藏键盘
lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
target=0;
cnt=0;
}
}
// 登录、注册响应函数
void* btn_login_and_reg_cb(lv_event_t* e)
{
char buf[100];
bzero(buf, 100);
// 获取用户输入
char* txtuser = lv_textarea_get_text(txt_user);
char* txtpassward = lv_textarea_get_text(txt_passward);
if(txtuser==NULL || txtpassward==NULL)
{
return;
}
// 获取触发事件的对象
lv_obj_t* target = lv_event_get_target(e);
// 检查按钮事件
if(target == btn_login)
{
sprintf(buf, "%s@%s@%s\n", "login", txtuser, txtpassward);
int result = connect_server(buf);
if(result == 1)
{
printf("登录成功\n");
//显示页面
talk_face();//加载界面
lv_obj_del(page_login);//删除登录界面
}
else
{
printf("登录失败\n");
}
}
else if(target == btn_reg)
{
sprintf(buf, "%s@%s@%s\n", "reg", txtuser, txtpassward);
int result = connect_server(buf);
if(result == 1)
{
printf("注册成功\n");
}
else
{
printf("注册失败\n");
}
}
}
3、通信代码
二、操作界面
1、图示
2、相关功能
一、读取目录
二、拷贝目录
三、指定目录拷贝
四、生成目录树
总结
以上就是这个项目的一些基本介绍,虽然界面不是很多,看起来也比较简单,但是代码量其实也不少,这个项目让我对lvgl库的使用又熟悉了很多,对于系统编程和网络编程的理解也更加的深刻。那么有不正之处,欢迎指正。