国庆作业

day1

1. 开发环境

Linux系统+GCC+FDB+makefile+sqlite3

2. 功能描述

项目功能:

服务器 ****:****处理客户端的请求,并将数据存入数据库中,客户端请求的数据从数据库进行获取,服务器转发给客户端。

用户客户端 ****:****实现账号的注册、登录、注销、修改用户密码功能,当登录成功时可以寄快递、查快递、修改快递信息、取消订单等功能。

快递员客户端 ****:****实现账号的注册、登录、注销、修改用户密码功能,当登录成功时可以查快递、送快递、查看历史订单等功能。

  1. 设计实施

1. Sock编程

启动服务端程序,监听端口,等待客户端连接。完成客户端与服务端的tcp连接。使用I/O复用机制或完成客户端与服务端之间的一对多的连接。服务端记录每个客户端的基本信息:每个客户端的IP、端口等基本信息。

2.数据包协议

客户端使用TCP连接服务端后,发送接受数据使用数据封包。封包格式如下:

|协议版本(1)|数据包类型(1)|数据包的长度(2)|数据包的内容(变长)|

协议版本:发送端填充自己的该数据包的版本信息,服务端接受数据包后,查看该版本是否是自己能识别的版本。是则进行解析,否则作为非法数据包(一般丢弃)。

数据包类型:发送端根据自己发送的数据包里面的数据内容的不同填充不同的类型。

如:如果数据包的数据信息是登录信息,类型为0x0001。如果是断开连接的信息则类型为0x0002。这样接收端接受到数据之后就可以根据数据类型的值,对数据做不同的处理。数据包的长度:TCP是数据流协议,数据发送者多次发送的数据,但在tcp的接受端缓冲区内数据与数据之间没有间隔。无法分开。所以在数据包中增加一项数据长度。这样接收端可以根据数据长度信息确定本数据包的长度,确定要从tcp的缓冲区内每次要读取的长度。数据包内容:要发送的数据。

数据包发送者:在发送数据前,在数据前增加数据包头。数据包头包含以上的包头信息。封包可以采用数据结构:

Struct pack_head

{

Int acceptfd;

Unsigned char type;//消息类型

Unsigned char usertype;//用户类型:1:用户2:快递员

Char name 32;//用户名

Char paaswd 32;//密码

Char buf 32;//调试信息

Struct order_msg msgg;//单号信息

}PACK;

数据包接受端:接受到数据后,分成两次读取一个数据包,第一次读取首先读取一个数据包头长度,然后根据数据包头中的数据长度读取整个数据包。这样一个一个的数据包就分别被读取出来。

数据包协议总结:协议是数据的收发端之间一种约定要好的一种规定。发送者按照该格式发送,接受者按照该格式进行解析。

3.数据管理

服务端接收所有客户端的信息。将所有账号和密码以及快递单信息存在数据库中。同一管理用户信息用户名、密码以及快递单信息。

快递单信息包括:

Struct order_msg

{

Int status;//0:表示未完成订单1:表示已完成订单

Long order;//订单号,由服务器端生成

Char sender 32;//发送人

Char send_addr 64;//发送地址

Long send_tel;//发送电话

Char reciver 32;//收件人

Char recive_addr64;//收件地址

Long recive_tel;//收件人电话

Float weight;//货物重量

Char goods 32;//货物名称

Float price;//快递费用

};

4. 项目要求

1、采用C语言完成代码的编写。

2、编写makefile管理整个项目。

3、编写项目设计书。

4、以模块化编写项目代码,按照不同模块组织.h /.c文件。

5、规范代码格式并添加注释。

6、编写测试报告,包括单模块测试,模块间测试。

7、编写项目总结,包括项目设计说明、项目中采用的知识点列举、项目中遇到的问题及解决方法等

5. 项目完成参考步骤

1、完成服务端与客户端1对1的tcp连接。

2、把相关信息存贮到数据库中。

3、实现用户注册、登陆。

4、实现数据库的创建、管理与维护

5、实现寄快递,查找快递等功能

day2

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
//创建节点结构体
typedef struct node{
    char data[16];//节点数据
    struct node *L;//左节点
    struct node *R;//右结点
    
}tree,*treeptr;
 
//先序方式创建节点
treeptr create()
{
    char buf[16];
    scanf("%s",buf);
    if(strcmp(buf,"#")==0)
    {
        return NULL;
    }
    //创建节点空间
    treeptr H=(treeptr)malloc(sizeof(tree));
    if(H==NULL)
    {
        printf("节点创建失败\n");
        return NULL;
    }
    strcpy(H->data,buf);
    H->L = create();
    H->R = create();
    return H;
}
 
//先序遍历
void pri_show(treeptr H)
{
    if(H==NULL)//判断节点是否为空
    {
        return ;
    }
    printf("%s",H->data);
    pri_show(H->L);
    pri_show(H->R);
}
//中序遍历
void mid_show(treeptr H)
{
    if(H==NULL)//判断节点是否为空
    {
        return ;
    }
    mid_show(H->L);
    printf("%s",H->data); 
    mid_show(H->R);
}
//后序遍历
void lat_show(treeptr H)
{
    if(H==NULL)//判断节点是否为空
    {
        return ;
    }
    lat_show(H->L);
    lat_show(H->R);
    printf("%s",H->data);
}
int main()
{
    treeptr H = create();//创建二叉树
    pri_show(H);
    putchar(10);
    mid_show(H);
    putchar(10);
    lat_show(H);
    putchar(10);
 
    return 0;
}

day3

相关推荐
虎头金猫11 小时前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
这个DBA有点耶12 小时前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G12 小时前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备12 小时前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远12 小时前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
wuyk55513 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
2601_9622186114 小时前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
-梅14 小时前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog14 小时前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
张洛闻Eren14 小时前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github