c mvc 网站开发,网站建设及发布的流程图,个人设计师网站 青春,如何建设一个彩票网站day1
1.开发环境
Linux系统GCCFDBmakefilesqlite3
2.功能描述
项目功能:
服务器#xff1a;处理客户端的请求#xff0c;并将数据存入数据库中#xff0c;客户端请求的数据从数据库进行获取#xff0c;服务器转发给客户端。
用户客户端#xff1a;实现账号的注册、登… day1
1.开发环境
Linux系统GCCFDBmakefilesqlite3
2.功能描述
项目功能:
服务器处理客户端的请求并将数据存入数据库中客户端请求的数据从数据库进行获取服务器转发给客户端。
用户客户端实现账号的注册、登录、注销、修改用户密码功能当登录成功时可以寄快递、查快递、修改快递信息、取消订单等功能。
快递员客户端实现账号的注册、登录、注销、修改用户密码功能当登录成功时可以查快递、送快递、查看历史订单等功能。 设计实施
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 #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(HNULL){printf(节点创建失败\n);return NULL;}strcpy(H-data,buf);H-L create();H-R create();return H;
}//先序遍历
void pri_show(treeptr H)
{if(HNULL)//判断节点是否为空{return ;}printf(%s,H-data);pri_show(H-L);pri_show(H-R);
}
//中序遍历
void mid_show(treeptr H)
{if(HNULL)//判断节点是否为空{return ;}mid_show(H-L);printf(%s,H-data); mid_show(H-R);
}
//后序遍历
void lat_show(treeptr H)
{if(HNULL)//判断节点是否为空{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