员工管理系统(C 语言)——服务器解析

2023-05-16

源码下载地址:https://download.csdn.net/download/wenfei11471/10477504
服务器功能:
1、运行时主界面(服务器启动后,只有管理员下线,服务器不会关闭):
2、登录失败后,进入登录界面:
3、登录成功后,显示下图所示功能:
4、查询功能如下(需要输入查看的用户名):
5、修改的具体功能如下:
6、修改的具体操作如下:
7、添加功能如下:
8、删除功能如下:
服务器逻辑函数详解:
1、main 函数:
1] 全局定义 Usr、Root、Hist 后面函数都能直接使用,但不能修改;
2] 利用 create_struct 函数设置 Usr、Root、Hist 属性关联;
3] 根据 Usr 中的信息利用 create_db 函数创建用户数据库;
4] usr_state_init 函数初始化用户状态;
5] 创建线程,利用 manager_fun 函数实现管理员登录操作;
6] 服务器绑定 IP 和 Port;
7] 接收用户登录请求
8] check_usr_fun 函数检查用户登录的账号;
9] 用户登录成功利用 create_db 函数创建用户历史记录数据库;
10] add_hist 函数将本次登录 IP 和时间记录在用户历史记录数据库中;
11] 用户登录成功开辟线程函数 login_usr_fun 用于处理客户端请求;
12] 用户登录失败或者处理完用户请求后关闭连接套接字。
2、login_usr_fun 函数:
1] 参数:void * p (保存连接套接字和用户名)
2] 返回值:void * 类型
3] 功能:
1) 数据接收错误、用户掉线、用户发送 CLI_REQ_QUIT 时,线程退出;
2) search_info_fun 函数处理用户查询个人信息请求;
3) modify_psw 函数处理用户修改登录密码请求;
4) modify_tel 函数处理用户修改联系方式请求;
5) modify_mail 函数处理用户修改 E_mail 请求;
6) modify_addr 函数处理用户修改家庭住址请求;
7) search_hist_fun 函数处理用户查询历史记录请求;
8) 用户退出 usr_state_fun 函数将用户状态设为 0。
3、search_info_fun 函数:
1] 参数:PRO *command(传输结构体指针), DataBase *data(指定的数据库)
2] 返回值:无
3] 功能:
1) 打开数据库 sqlite3_open;
2) 执行查询语句:select * from table where column="context";;
3) 数据库查询函数 sqlite3_get_table 会将查询结果放在 result[][] 中;
4) 查询结果一一赋值给传输结构体的对应项;
5) sqlite3_free_table 函数释放 result 指向的空间;
6) 关闭已打开的数据库 sqlite3_close。
4、search_hist_fun 函数:
1] 参数:char (*record)[30](数组指针), DataBase *data(指定的数据库)
2] 返回值:无
3] 功能:
1) 打开数据库 sqlite3_open;
2) 执行查询语句:select * from table;;
3) 数据库查询函数 sqlite3_get_table 会将查询结果放在 result[][] 中;
4) 将 result[][] 值一一赋给 record[][];
5) sqlite3_free_table 函数释放 result 指向的空间;
6) 关闭已打开的数据库 sqlite3_close。
5、modify_psw/modify_name/modify_posi/modify_mail/modify_addr 函数:
1] 参数:char *name(用户名),char *(修改内容) DataBase *data(指定的数据库)
2] 返回值:无
3] 功能:
1) 打开数据库 sqlite3_open;
2) 执行查询语句:update table set column="context" where column="context";;
3) 数据库语句执行函数 sqlite3_exec;
4) 关闭已打开的数据库 sqlite3_close。
6、modify_salary/modify_tel 函数:
1] 参数:char *name(用户名),double(修改内容) DataBase *data(指定的数据库)
2] 返回值:无
3] 功能:
1) 打开数据库 sqlite3_open;
2) 执行查询语句:update table set column=value where column="context";;
3) 数据库语句执行函数 sqlite3_exec;
4) 关闭已打开的数据库 sqlite3_close。
7、manager_fun 函数:
1] 参数:void * arg (保留参数,无意义)
2] 返回值:void * 类型
3] 功能:
1) 管理登录函数;
2) 通过函数 name_fun 获取用户名,函数 password_fun 获取密码;
3) check_usr_fun 函数检查用户登录的账号;
4) 用户登录成功利用 manager_handler_fun 函数进入管理员操作界面;
5) 不论管理员登录成功与否,服务器开启后是不会关闭的。
8、manager_handler_fun 函数:
1] 参数:无
2] 返回值:无
3] 功能:
1) 利用函数 read_file 函数显示客户端用户的功能主界面;
2) show_info 函数打印用户信息;
3) 修改用户信息利用 modify_info_fun 函数操作;
4) 添加新的用户利用 add_usr 函数操作。
9、add_usr 函数:
1] 参数:无
2] 返回值:无
3] 功能:
1) 获取新用户的所有信息;
2) add_db 函数是添加新用户到用户数据库。
10、add_db 函数:
1] 参数:无
2] 返回值:无
3] 功能:
1) 打开数据库 sqlite3_open;
2) 执行查询语句:insert into table (column1, column2...) values ("context1", "context2"...);;
3) 数据库语句执行函数 sqlite3_exec;
4) 关闭已打开的数据库 sqlite3_close;
11、modify_info_fun 函数:
1] 参数:无
2] 返回值:无
3] 功能:
1) check_usr_fun 函数检查用户登录的账号是否存在;
2) 利用函数 read_file 函数显示管理员可修改的选项;
3) 修改登录密码利用函数 modify_psw 操作;
4) 修改用户姓名利用函数 modify_name 操作;
5) 修改用户工资利用函数 modify_salary 操作;
6) 修改用户职位利用函数 modify_posi 操作;
7) 修改联系方式利用函数 modify_tel 操作;
8) 修改 E_mail 利用函数 modify_mail 操作;
9) 修改家庭住址利用函数 modify_addr 操作;
10) 非命令输入,提示输入错误,重新选择。
客户端功能函数详解:
1、add_hist 函数:
1] 参数:无
2] 返回值:无
3] 功能:
1) 打开数据库 sqlite3_open;
2) 执行查询语句:insert into table (column1, column2...) values ("context1", "context2"...);;
3) 数据库语句执行函数 sqlite3_exec;
4) 关闭已打开的数据库 sqlite3_close;
5) 本函数中时间和日期添加需要修改。
2、creat_db 函数:
1] 参数:DataBase *data 包含数据库信息
2] 返回值:无
3] 功能:
1) 打开/创建数据库 sqlite3_open;
2) 执行查询语句:create table if not exists tablename (column1, column2...) ;;
3) 数据库语句执行函数 sqlite3_exec;
4) 关闭已打开的数据库 sqlite3_close;
5) 本函数创建普通用户数据库、管理员数据库和历史记录数据库分开了;
6) 创建管理员数据库时会直接将管理员账号和密码一起添加了。
3、create_struct 函数:
1] 参数:const char *pathfile, const char *tablename,const char *col[10]
2] 返回值:DataBase *db
3] 功能:
1) 将 pathfile 指向的字符串给 db->path;
2) 将 tablename 指向的字符串给 db->table;
3) 将 col[10] 指向的字符串给 db->column[i];
4) 将 db 指向的结构体作为返回值返回,因此用户记得 free。
4、illegal_string_fun 函数:
1] 参数:char *str 字符串
2] 返回值:int 类型
3] 功能:
1) 检查字符串中除了大小写字母和数字外是否含有其他字符;
2) 如果字符串中全是大小写字母或数字则返回 0,否则返回 1。
5、failed 函数:
1] 参数:int ret,char *message
2] 返回值:无
3] 功能:
1) 基本错误检查,出错会打印错误信息。
6、name_fun 函数:
1] 参数:char *str 字符串
2] 返回值:无
3] 功能:
1) 从输入端获取用户名;
2) 判断用户名是否为 0;
3) 判断用户名不能超过 19 个字符;
4) 利用 illegal_string_fun 判断是否有非法字符;
5) 用户名符合要求后将其赋值到 username 中;
6) 不能用 username = name,那样在函数结束后 name 会被释放;
7) 可以使用 strcpy 和 strcat 两个函数。
7、password_fun 函数:
1] 参数:char *str 字符串
2] 返回值:无
3] 功能:
1) 从输入端获取密码;
2) 判断密码不能少于 4 个字符;
3) 判断密码不能大于 19 个字符;
4) 利用 illegal_string_fun 判断是否有非法字符;
5) 密码符合要求后将其赋值到 usrpsw 中;
6) 不能用 usrpsw = psw,那样在函数结束后 psw 会被释放;
7) 可以使用 strcpy 和 strcat 两个函数。
8、read_file 函数:
1] 参数:const char *file 文件路径
2] 返回值:无
3] 功能:
1) 按照路径打开文件;
2) 读取文件;
3) 输出到标准输出;
4) 关闭文件。
9、usr_state_fun 函数:
1] 参数:char *name, DataBase *data, int state
2] 返回值:无
3] 功能:
根据用户名将其状态修改为对应的状态值
9、usr_state_init 函数:
1] 参数:DataBase *data, int state
2] 返回值:无
3] 功能:
1) 将所有用户的状态改为 0,一般为服务器启动和关闭时调用;
2) 必须保证状态为 column[3].
客户端头文件详解:
1、mydef.h 头文件:
1] 定义客户端的所有请求指令
2] 服务器的所有回复指令
3] 各类可能使用到的路径名
4] 各类常用的字符串汇总
5] 类型常量值定义
2、myfunction.h 头文件:
1] 对客户端所有使用到的函数进行申明
3、myinclude.h 头文件:
1] 定义函数中所有要使用到的头文件
4、mystruct.h 头文件:
1] 定义传输协议和数据类型结构体以及数据库信息的结构体
客户端目录介绍:
1、app 目录: 存放 Makefile 后产生的可执行文件
2、function 目录: 存放客户端功能函数
3、include 目录: 存放客户端相关的头文件
4、main 目录: 存放客户端主函数
5、obj 目录: 存放 Makefile 后产生的目标文件
6、step 目录: 存放客户端逻辑函数
7、text 目录: 存放客户端可能使用到的文档以及数据库
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

员工管理系统(C 语言)——服务器解析 的相关文章

  • Qt网络通信实战(聊天室小项目TCP实现)

    一 UDP与TCP的区别 用一个表格来显示这两者的区别 比较项TCPUDP是否连接面向连接无连接传输是否可靠可靠不可靠流量控制提供不提供工作方式全双工可以是全双工应用场合大量数据少量数据速度慢 快 我们这里采用TCP 当有新的连接出现时就会
  • 常用坐标系及坐标系之间的变换

    坐标系统 xff1a 有哪些坐标系 xff0c 他们之间的变换矩阵是怎样的 xff1f xff08 主要是3个坐标系 3 个角 xff09 地理坐标系 xff08 n系 xff09 坐标系原点On取为飞行器质心 Xn轴向指向北 xff0c
  • ulimit命令用法详解

    ulimit用来限制每个用户可使用的资源 xff0c 如CPU 内存 句柄等 一 用法 ulimit SHacdefilmnpqrstuvx 限制 参数详解 S xff1a 表示软限制 超出设定的值会告警 H xff1a 表示硬限制 xff
  • java的数组反转

    Java中数组反转一般有两个思路 xff0c 第一个是新建一个临时数组 xff0c 把原来的数组内各值倒着给放进去 public class ArrayReverse public static void main String args
  • Ardupilot移植经验分享(1)

    目录 前言背景为什么写这篇文章移植Ardupilot的方法有两种底层适配提取应用层代码两种方法对比 准备阅读源码阅读官方开发者wiki选择编译平台下载编译源代码切换版本的正确方式编译老版本手动下载编译器修改PATH配置配置ubuntu以支持
  • 国产UOS系统之——安装wxPython

    安装依赖库 xff1a sudo apt get install libgtk 3 dev sudo apt get install libcanberra gtk module sudo apt get install pkg confi
  • OpenHarmonyllvm交叉编译工具链编译介绍

    一 工具链基础介绍 1 1 工具链下载 repo init u https gitee com OpenHarmony manifest git b master m llvm toolchain xml repo sync c repo
  • 一键配置Ubuntu的OpenHarmony基础编译环境

    一键配置Ubuntu的OpenHarmony基础编译环境 一 配置前说明 该更新源仅适用于Ubuntu以下系列 Ubuntu18 04 Ubuntu20 04 Ubuntu22 04 强烈推荐Ubuntu20 04 xff0c 本人使用的一
  • 卸载Proteus后再次安装出错解决办法

    相信有人和我一样 xff0c 在卸载Proteus后再次安装时会跳过下图这一步 然后安装完了注册时会弹出修改注册 LICENCE失败 xff0c 从而导致破解不成功 xff0c 怎么办呢 xff1f 本人解决方法 xff1a 1 首先正常安
  • STM32cubeMx来对单片机串口1进行初始化

    步骤如下 xff1a 打开STM32CubeMX软件并新建一个工程在Pinout amp Configuration选项卡中选择正确的芯片型号 xff0c 然后在Pinout视图中找到串口1相关的引脚 默认情况下 xff0c 串口1使用PA
  • Keil 头文件源程序代码——Math.h

    MATH H Prototypes for mathematic functions Copyright c 1988 2002 Keil Elektronik GmbH and Keil Software Inc All rights r
  • Keil头文件代码—Absacc

    ABSACC H Direct access to 8051 extended 8051 and NXP 8051MX memory areas Copyright c 1988 2010 Keil Elektronik GmbH and
  • reg52.h中直接定义了P3^4等引脚,但是P1^5引脚没有明确表示出来?

    实际上reg52 h中已经定义了 34 sfr P0 61 0x80 sfr P1 61 0x90 sfr P2 61 0xA0 sfr P3 61 0xB0 34 等引脚的地址 xff0c 如果取P1 5的引脚 xff0c 只需要表示成
  • 关于scanf很多人不知道的小秘密

    今天忽然想到一个问题 xff0c 假如我利用scanf想给变量a输入一个 d的整数 xff0c 结果不小心输入了一个字符串yf或者是123ff后会怎么样呢 xff1f 哈哈 xff0c 自己测试了一下 xff0c 结果发现 xff0c 当你
  • 关于sizeof(*p+1)的那些事

    今天老铁在写程序时发现一个意外 xff0c 在char a 61 1 3 5 7 9 p 61 a 程序求sizeof p 43 1 时遇到一些意外 xff0c 本来以为会是1 xff0c 结果却出意料的是4 xff0c 这就有些尴尬了 x
  • 求解完数

    完数的定义 xff1a 一个数如果恰好等于它的因子之和 xff0c 这个数就称为 完数 例如 xff1a 6 61 1 xff0b 2 xff0b 3 如果需要求解1000或者10000以内的所有完数 xff0c 怎么做呢 xff1f 分析
  • 查找100-200以内素数

    只能被1和其本身整除的数称为素数 xff0c 1不是素数 xff0c 因为简单 xff0c 所以不做解释 xff0c 直接上程序 源代码如下 xff1a Search all prime numbers from 101 to 200 in
  • 实现4个按键控制8个LED灯1个数码管程序

    按要求C语言编程 xff0c 实现4个按键控制8个LED灯1个数码管程序 具体要求如下 xff1a 1 按键一 xff0c 清零作用 无论数码管以前显示何内容 xff0c 都归零 xff0c 显示0 xff1b 2 按键二 xff0c 加一
  • Linux 关机/重启指令

    Linux系统下关机指令只有root用户终端才能下达 xff08 Linux里切换用户可以用 su root 输入密码便进入 root 用户 xff09 xff0c 同时其他终端也会接收到 如root用户发出关机指令 其他终端也会收到相应的
  • C 语言中的goto、 break 和 continue 语句使用

    一 goto 语句 goto 语句为无条件跳转 xff0c goto 语句后面带一个标识符 xff0c 该标识符是同一个函数 内某条语句的标号 标号可以出现在任何可执行语句的前面 xff0c 并且以一个冒号 xff1a 作为后缀 gt Fi

随机推荐

  • 云台控制协议VISCA、PELCO-D、PELCO-P

    原 云台控制协议VISCA PELCO D PELCO P 2013年12月02日 18 42 21 autowanglei 阅读数 xff1a 10146 更多 lt div class 61 34 tags box space 34 g
  • 目录和文件权限与 umask 关系

    一 权限 文件权限 xff1a r xff1a 读取文件内容的权限 w xff1a 新增 修改和删除文件内容的权限 x xff1a 执行文件的权限 例如 xff1a 一个文件a sh xff0c 它的权限是rw xff0c 使用 a sh
  • open 函数的 flag 参数和错误代码

    一 flag 参数 定义头文件 xff1a lt bits fcntl linux h gt 必选参数说明 xff1a define O ACCMODE 0003 xff1a 读写文件操作时取出 flag 的低两位 define O RDO
  • 系统全局变量 errno 是如何获得 errno.h 中的值的呢?

    很多时候我们在使用 errno 的时候都知道它代表的是 errno h 中的错误值 xff0c 可是为什么它就是代表那些值的呢 xff1f 系统在哪里给它赋值了呢 xff1f 故事就要从源头开始 1 errno 全局变量是在哪里定义的 xf
  • const pointer

    int a b const int p 61 a 与int const p 61 a 是一样的 表示p可以指向a xff0c 也可以改变指向b xff0c 但是不能通过指针p来修改a的值 p 61 b p 61 4 int const q
  • I_O —基础概念(参照 Ubuntu 16.04 版本)

    一 文件的概念 定义 xff1a 所谓文件是指一组相关数据的有序集合 xff0c 这个数据集有一个名称 xff0c 叫文件名 如源程序文件 xff0c 目标文件 xff0c 可执行文件 xff0c 头文件等文件通常是在驻留在外部介质上的 x
  • 网络通信2—UDP 模型程序编写步骤(参照 Ubuntu 16.04 版本)

    UDP 模型程序编写步骤 一 UDP基础模型 服务器流程 step 1 xff1a 创建 socket 套接字接口并判断 sockfd 61 socket AF INET SOCK DGRAM 0 if sockfd 61 61 1 per
  • switch 中 break 和 continue 的区别

    1 break 用来退出 switch xff0c continue 本身是不能用在 switch 里的 xff0c 他必须结合循环来用 xff0c 表示跳过本次循环 2 switch 的 case 语句最后如果没有加 break cont
  • 立即数

    一 概念 xff1a 通常把在 立即寻址方式 指令中给出的数称为立即数 二 判断步骤 xff1a 把数据转换成二进制 xff0c 从低到高写成 4 个一组 xff0c 最高位不够一组的补 0 xff1b 数 1 的个数 xff0c 如果大于
  • 位、字节、char、int(32位系统) 之间的关系

    一 概念 xff1a 位 xff08 bit xff09 xff1a 计算机中最小的数据单位 每一位的状态只能是0或1 字节 xff08 byte xff09 xff1a 存储空间的基本计量单位 xff0c 8 个二进制位构成1个字节 1
  • C语言中的那些宏

    DATE 进行预处理的日期 xff08 Mmm dd yyyy 形式的字符串文字 xff09 FILE 代表当前源代码文件名的字符串文字 LINE 代表当前源代码中的行号的整数常量 TIME 源文件编译时间 xff0c 格式微 hh xff
  • 任务栈简单入门

    最近又把两本进阶书看了一遍 xff0c 但总感觉好记性不如烂笔头 xff0c 所以还是决定通过博客记录一下 xff0c 我们将分两篇来全面深入地记录Activity 启动模式与任务栈的内容 android任务栈简单了解 1 android任
  • VS2010里函数枚举

    一 cout函数 说明 xff1a 调用该函数必须申明头文件 include lt iostream gt 同时声明后面必须使用 using namespace std 正确书写为 xff1a include lt iostream gt
  • I_O—标准 I_O 实验

    一 测试标准 I O 一次可以同时打开多少个文件 1 实验思路 xff1a 利用循环同时打开文件 xff0c 直到不能打开 2 代码如下 xff1a 二 fgetc 和 fputc 实现拷贝文件并输出文件行数 1 实验思路 xff1a 打开
  • Source Insight 配色方案

    Source Insight 对于程序员来说应该不陌生 xff0c 当然一个个性化的编程界面也会让自己赏析悦目 xff0c 下面就将个人的界面设置分享一下 xff1a 一 背景色设置 1 选择 Options Preferences 2 选
  • Linux 网络——交换机不能用两根网线相连

    同一个局域网所有的交换机之间可以用网线串联起来 xff0c 但绝对不能使任意 gt 61 2个交换机形成环路 xff0c 否则局域网内将形成广播风暴 xff0c 所用局域网内的用户都将不能上网 例如局域网内的交换机可以使用如下相连 xff1
  • GDB 知识点——基础操作

    Linux C 中的 GDB 调试使用 xff1a 1 GDB 的主要功能 xff1a 1 启动被调试程序 2 让被调试的程序在指定的位置停住 3 当程序被停住时 xff0c 可以检查程序状态 xff08 如变量的值 xff09 2 检查
  • 员工管理系统(C 语言)——项目说明

    项目名称 xff1a 员工管理系统 项目目的 xff1a 1 实现简单的公司对员工信息的管理 2 通过项目锻炼实现逻辑转换为代码的能力 3 利用函数封装实现项目过程中的逻辑过程以及需求功能的实现 4 学会数据库的操作以及网络通信 5 强化代
  • 员工管理系统(C 语言)——客户端解析

    源码下载地址 xff1a https download csdn net download wenfei11471 10477504 客户端功能 xff1a 1 运行时先测试是否能连通服务器 xff08 不畅通如下图所示 xff09 xff
  • 员工管理系统(C 语言)——服务器解析

    源码下载地址 xff1a https download csdn net download wenfei11471 10477504 服务器功能 xff1a 1 运行时主界面 xff08 服务器启动后 xff0c 只有管理员下线 xff0c