240717班级,工业化控制系统,煤矿相关行业,昆仑系统
Administrator
2024-11-08 f7a26f55d3652ce12e2ed4eec9127d24798a0bd1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
 
 
 
=====================================
        结构体的规则:
        
    分成两部分:
        数据头:
            int type; 用来区分不同的功能
            int len; 用来表示封包的总长度,解决粘包问题
        数据体:
            具体的功能字段
            如登录:
                char user_name[32];
                char password[32];
        ----------------------
    命名规则:
        结构体一般是成对出现:有请求,有响应
        xxReq       // Request
        xxRes       // Response
        ---------------------
    初始化规则:
        默认给一个无参构造函数
        xx(){
            // 对数据头进行初始化
        }
    -------------------------
    给type统一起来,使用枚举来统一赋值
    enum TypeInfo{
        LOGIN_REQ, // 登录请求
        LOGIN_RES, // 登录响应
        
    };
    -------------------------
    必须把所有的结构体以及枚举等,都放到同一个头文件中
    并且前后端都使用同一个头文件
    
    common.h 
    -----------------------
    提升扩展性:
    把数据头部分,单独拎出来
    struct Head
    {
        int type;
        int len;
    };
    -----使用 
    如:登录请求 
    struct LoginReq
    {
        Head head;
        char user_name[32];
        char password[32];
        LoginReq(){
            head.type = LOGIN_REQ;
            head.len = sizeof(LoginReq);
        }
    };
    
    登录响应:
    struct Permission
    {
        int admin;
        int log_search;
        int history;
        int map_change;
        int version_manage;
        int warning;
        int device_manage;
        int pro_plan;
        //char role_name[32]; // 角色名
        int role_id; // 角色id
    };
    
    struct LoginRes
    {
        Head head;
        char user_name[32];
        int status; // 登录状态
        // 成功时,该账号对应的权限组合
        Permission per;
        LoginRes()
        {
            head.type = LOGIN_RES;
            head.len = sizeof(LoginRes);
        };
    };
    ----------------------
    特殊要求:
        可以使用json的格式,
        也可以使用xml的格式,
        甚至直接使用特定字符串等
        
    前提条件:有特殊要求的协议,提前跟网络/协议敲定;
    ---------------------
    ============================================================
        
        数据库表的一些规则:
        
        表名: 业务名_info  【考虑合并,提炼出表达意思到位的名字】
            如:登录、注册、权限管理共用相同的2张表
                用户信息表  user_info
                角色权限表  role_info
        每一个表的第一个字段[第一列]:
            是 id,int,主键,自增(从1开始)
        ----------------
        写sql语句时,尽量一条语句完成操作
        【意思你要写高级语句】
        ----------------
        数据库负责人:多个功能,用到同一张表了,要把所有字段合并
            并且去重[相同意思的保留一个字段]
        ----------------
    ================================================
    变量名命名规则:
        普通成员变量:类型 m_变量名;  // 加前缀
        静态成员变量:类型 s_变量名; // sm_变量名  
        
        局部变量:类型 变量名; // 不要前缀
    ================================================
    模块名命名规则:禁止使用工程创建默认的名字
        业务名 
        如登录:C端:
                类名: LoginMainWindow
                     或者 LoginBusiness 
                 
    ================================================
    Qt--UI
        --实现功能:
        -- 添加设备:UI上填一些设备信息:名字 型号 经度 纬度 等
        -- 添加按钮:把设备信息拿出来--添加到结构体里面[请求结构体]
                     -- 使用socket--发送请求结构体
    
    VS--处理一些业务:
        其他人负责:收包--解包--拿到请求结构体--调用添加设备的业务API[负责]
        --参数:请求结构体指针,套接字
        --操作:通过请求信息--组装SQL语句[插入语句]--调用MySQL类的API--拿到SQL语句的执行结果--根据结果组装 响应结构体 -- 发包--给客户端
 
    Qt--UI:
        -- 收包-解包--拿到响应结构体[别人]--调用响应业务API[负责]--提示添加的状态[成功/失败]