基于阿里云服务器、线程池、lvgl库的大目录拷贝项目


前言

本项目是在我学习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库的使用又熟悉了很多,对于系统编程和网络编程的理解也更加的深刻。那么有不正之处,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值