国庆作业

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_addr[64];//收件地址

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

相关推荐
KOYUELEC光与电子努力加油3 分钟前
JAE日本航空电子推出满足汽车市场小型防水最新需求的MX80系列连接器
服务器·科技·单片机·汽车
jackiehome8 分钟前
SQL数据库无法操作,日志文件损坏修复
数据库·sql·oracle
Zeku12 分钟前
虚拟机网络设置
网络·stm32·freertos·linux驱动开发·linux应用开发
攻城狮在此18 分钟前
华三交换机ACL配置(封禁内网高危端口)
网络·安全
123过去19 分钟前
hashid使用教程
linux·网络·测试工具·安全
荒川之神23 分钟前
ORACLE导入导出实验
数据库·oracle
执笔为剑26 分钟前
利用逻辑备份修复误操作的库
数据库·kingbase
cdprinter31 分钟前
信刻安全加密光盘,保障光盘保密安全
网络·安全·自动化
程序员夏末40 分钟前
【MySQL | 第三篇】 MySQL索引详解
数据库·mysql
XZY02842 分钟前
如何使用grpc
运维·服务器