华--清--速--递
服务器端
#include <stdio.h>
#include <poll.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>
#include <stdlib.h>
#include <unistd.h>
#include <sqlite3.h>
#include <time.h>
time_t t;
struct tm *tm;
sqlite3 *db = NULL;
sqlite3 *mdb = NULL;
char **Result = NULL;
int hang;
int lie;
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; // 快递费用
};
struct pack_head
{int fd; // 通信的⽂件描述符unsigned char type; // 消息类型unsigned char usertype; // ⽤户类型:1:⽤户2:快递员char name[32]; // ⽤户名char paaswd[32]; // 密码char buf[32]; // 调试信息char buf1[100];struct order_msg msg; // 单号信息
};struct pack_head information;
int main(int argc, char const *argv[])
{char *errmsg = NULL;int sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd < 0){perror("socket err");return -1;}char a[100] = "";printf("请输入port\n");scanf("%s", a);getchar();struct sockaddr_in saddr, caddr;saddr.sin_family = AF_INET;saddr.sin_port = htons(atoi(a));saddr.sin_addr.s_addr = inet_addr("0.0.0.0");socklen_t len = sizeof(saddr);if (bind(sockfd, (struct sockaddr *)&saddr, len) < 0){perror("bind err");return -1;}printf("bind succ\n");if (listen(sockfd, 6) < 0){perror("listen err");return -1;}printf("listen succ\n");if (sqlite3_open("./user.db", &db) != 0) // 存放用户信息{printf("open err:%s\n", sqlite3_errmsg(db));return -1;}printf("用户数据库成功\n");if (sqlite3_open("./msg.db", &mdb) != 0) // 存放快递信息 建立两个表 一个存放快递信息 一个存放历史快递信息{printf("open err:%s\n", sqlite3_errmsg(mdb));return -1;}printf("快递信息数据库成功\n");// 用户名 密码if (sqlite3_exec(db, "create table user(name char primary key,paaswd char);", NULL, NULL, &errmsg) != 0){printf("create err:%s\n", errmsg);// sqlite3_close(db);// return -1;}printf("用户数据表成功\n");// 订单完成了么 订单号 发送人 发送地址 发送电话 收件人 收件地址 收件人电话 货物重量 货物名称 快递费用if (sqlite3_exec(mdb, "create table kuaidi(status int,order_n long,sender char,\send_addr char,send_tel long,reciver char,recive_addr char,recive_tel long,\weight float,goods char,price float );",NULL, NULL, &errmsg) != 0){printf("create err:%s\n", errmsg);// sqlite3_close(db);// return -1;}printf("快递信息表成功\n");if (sqlite3_exec(mdb, "create table lishi(status int,order_n long,stime char ,rtime char);", NULL, NULL, &errmsg) != 0){printf("create err:%s\n", errmsg);// sqlite3_close(db);// return -1;}printf("历史记录表成功\n");time(&t);tm = localtime(&t);fd_set readfds, tempfds;FD_ZERO(&readfds);FD_SET(sockfd, &readfds);int max = sockfd;char ttime[100] = "";char sql[2000] = "";char sql1[2000] = "";char sql2[2000] = "";char s1[1000] = {};int last = 0;int num = 1;while (1){tempfds = readfds;select(max + 1, &tempfds, NULL, NULL, NULL);if (FD_ISSET(sockfd, &tempfds)){int acceptfd = accept(sockfd, (struct sockaddr *)&caddr, &len);if (acceptfd < 0){perror("accept err");return -1;}FD_SET(acceptfd, &readfds);if (acceptfd > max){max = acceptfd;}}for (int i = 4; i <= max; i++){if (FD_ISSET(i, &tempfds)){int ret = recv(i, &information, sizeof(information), 0);if (ret < 0){perror("recv err");close(sockfd);return -1;}if (ret == 0){printf("%d quit\n", i);FD_CLR(i, &readfds);close(i);while (!FD_ISSET(max, &readfds)){max--;}}if (ret > 0){memset(sql, 0, sizeof(sql));memset(s1, 0, sizeof(s1));memset(sql1, 0, sizeof(sql1));memset(sql2, 0, sizeof(sql2));memset(ttime, 0, sizeof(ttime));switch (information.type){case 'R': // 快递员 客户端注册sprintf(sql1, "select * from user where name=\"%s\";", information.name);if (sqlite3_get_table(db, sql, &Result, &hang, &lie, &errmsg) != 0){printf("R err:%s\n", errmsg);}if (hang > 0){strcpy(information.buf, "fail");}else{sprintf(sql, "insert into user values(\"%s\",\"%s\");", information.name, information.paaswd);if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != 0){printf("R err:%s\n", errmsg);}else{strcpy(information.buf, "success");}}send(i, &information, sizeof(information), 0);break;case 'L': // 快递员 客户端登录sprintf(sql, "select * from user where name=\"%s\" and paaswd=\"%s\";", information.name, information.paaswd);if (sqlite3_get_table(db, sql, &Result, &hang, &lie, &errmsg) != 0){printf("L err:%s\n", errmsg);}else{if (hang > 0){strcpy(information.buf, "success");}else{strcpy(information.buf, "fail");}}send(i, &information, sizeof(information), 0);break;case 'D': // 快递员注销 客户端注销sprintf(sql, "delete from user where name=\"%s\" and paaswd=\"%s\";", information.name, information.paaswd);if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != 0){printf("D err:%s\n", errmsg);}else{strcpy(information.buf, "success");}send(i, &information, sizeof(information), 0);break;case 'S': // 客户寄快递if (sqlite3_get_table(mdb, "select * from kuaidi;", &Result, &hang, &lie, &errmsg) != 0){printf("S err:%s\n", errmsg);}information.msg.order = hang + 1;sprintf(ttime, "%d-%d-%d %d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour);sprintf(sql2, "insert into lishi values (%d,%ld,\"%s\",0);", information.msg.status, information.msg.order, ttime);if (sqlite3_exec(mdb, sql2, NULL, NULL, &errmsg) != 0){printf("S err:%s\n", errmsg);}// 订单完成了么 订单号 发送人 发送地址 发送电话 收件人 收件地址 收件人电话 货物重量 货物名称information.msg.price = information.msg.weight * 10;sprintf(sql, "insert into kuaidi values(0,%d,\"%s\",\"%s\",%ld,\"%s\",\"%s\",%ld,%f,\"%s\",%f);", hang + 1,information.msg.sender, information.msg.send_addr, information.msg.send_tel, information.msg.reciver,information.msg.recive_addr, information.msg.recive_tel, information.msg.weight, information.msg.goods, information.msg.price);if (sqlite3_exec(mdb, sql, NULL, NULL, &errmsg) != 0){printf("S err:%s\n", errmsg);}else{strcpy(information.buf, "success");}send(i, &information, sizeof(information), 0);break;case 'F': // 客户查快递num = 1;memset(information.buf1, 0, sizeof(information.buf1));sprintf(sql, "select * from kuaidi where send_tel=%ld;", information.msg.send_tel);if (sqlite3_get_table(mdb, sql, &Result, &hang, &lie, &errmsg) != 0){printf("F err:%s\n", errmsg);}if (hang > 0){sprintf(information.buf1, "查询到的信息:\n%s %s %s %s %s %s %s %s %s %s %s", Result[lie], Result[lie + 1], Result[lie + 2], Result[lie + 3], Result[lie + 4], Result[lie + 5], Result[lie + 6], Result[lie + 7], Result[lie + 8], Result[lie + 9], Result[lie + 10]);while ((hang - num) > 0){num++;sprintf(s1, "\n%s %s %s %s %s %s %s %s %s %s %s", Result[lie * num], Result[lie * num + 1], Result[lie * num + 2], Result[lie * num + 3], Result[lie * num + 4], Result[lie * num + 5], Result[lie * num + 6], Result[lie * num + 7], Result[lie * num + 8], Result[lie * num + 9], Result[lie * num + 10]);strcat(information.buf1, s1);}}else{strcpy(information.buf1, "未查到");}send(i, &information, sizeof(information), 0);break;case 'P': // 客户修改快递信息sprintf(sql, "select * from kuaidi where order_n=%ld;", information.msg.order);if (sqlite3_get_table(mdb, sql, &Result, &hang, &lie, &errmsg) != 0){printf("P err:%s\n", errmsg);}if (hang > 0){sprintf(sql1, "update kuaidi set send_addr=\"%s\" where order_n=%ld;", information.msg.send_addr, information.msg.order);if (sqlite3_exec(mdb, sql1, NULL, NULL, &errmsg) != 0){printf("P err:%s\n", errmsg);}memset(sql1, 0, sizeof(sql1));sprintf(sql1, "update kuaidi set send_tel=%ld where order_n=%ld;", information.msg.send_tel, information.msg.order);if (sqlite3_exec(mdb, sql1, NULL, NULL, &errmsg) != 0){printf("P err:%s\n", errmsg);}strcpy(information.buf, "success");}else{strcpy(information.buf, "fail");}send(i, &information, sizeof(information), 0);break;case 'C': // 客户取消订单sprintf(sql, "select * from kuaidi where order_n=%ld;", information.msg.order);if (sqlite3_get_table(mdb, sql, &Result, &hang, &lie, &errmsg) != 0){printf("C err:%s\n", errmsg);}if (hang > 0){sprintf(sql1, "delete from kuaidi where order_n=%ld;", information.msg.order);if (sqlite3_exec(mdb, sql1, NULL, NULL, &errmsg) != 0){printf("C err:%s\n", errmsg);}else{strcpy(information.buf, "success");}}else{strcpy(information.buf, "fail");}send(i, &information, sizeof(information), 0);break;case 'U': // 客户和快递员修改用户信息sprintf(sql, "select * from user where name=\"%s\";", information.name);if (sqlite3_get_table(db, sql, &Result, &hang, &lie, &errmsg) != 0){printf("U err:%s\n", errmsg);}if (hang > 0){sprintf(sql1, "update user set paaswd=\"%s\" where name=\"%s\";", information.paaswd, information.name);if (sqlite3_exec(db, sql1, NULL, NULL, &errmsg) != 0){printf("U err:%s\n", errmsg);}else{strcpy(information.buf, "success");}}else{strcpy(information.buf, "fail");}send(i, &information, sizeof(information), 0);break;case 'E': // 快递员送快递sprintf(sql, "select * from kuaidi where order_n=%ld;", information.msg.order);if (sqlite3_get_table(mdb, sql, &Result, &hang, &lie, &errmsg) != 0){printf("E err:%s\n", errmsg);}if (hang > 0){strcpy(information.buf, "success");memset(sql1, 0, sizeof(sql1));sprintf(sql1, "update kuaidi set status=1 where order_n=%ld;", information.msg.order);if (sqlite3_exec(mdb, sql1, NULL, NULL, &errmsg) != 0){printf("E err:%s\n", errmsg);}memset(sql1, 0, sizeof(sql1));sprintf(sql1, "update lishi set status=1 where order_n=%ld;", information.msg.order);if (sqlite3_exec(mdb, sql1, NULL, NULL, &errmsg) != 0){printf("E err:%s\n", errmsg);}memset(sql1, 0, sizeof(sql1));sprintf(sql1, "update lishi set status=1 where order_n=%ld;", information.msg.order);if (sqlite3_exec(mdb, sql1, NULL, NULL, &errmsg) != 0){printf("E err:%s\n", errmsg);}memset(sql1, 0, sizeof(sql1));sprintf(ttime, "%d-%d-%d %d:%d:%d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour,tm->tm_min,tm->tm_sec);sprintf(sql1, "update lishi set rtime=\"%s\" where order_n=%ld;", ttime, information.msg.order);if (sqlite3_exec(mdb, sql1, NULL, NULL, &errmsg) != 0){printf("E err:%s\n", errmsg);}}else{strcpy(information.buf, "fail");}send(i, &information, sizeof(information), 0);break;case 'A': // 快递员查快递num = 1;memset(information.buf1, 0, sizeof(information.buf1));sprintf(sql, "select * from kuaidi where status=%d;", information.msg.status);if (sqlite3_get_table(mdb, sql, &Result, &hang, &lie, &errmsg) != 0){printf("A err:%s\n", errmsg);}if (hang > 0){sprintf(information.buf1, "查询到的信息:\n%s %s %s %s %s %s %s %s %s %s %s", Result[lie], Result[lie + 1], Result[lie + 2], Result[lie + 3], Result[lie + 4], Result[lie + 5], Result[lie + 6], Result[lie + 7], Result[lie + 8], Result[lie + 9], Result[lie + 10]);while ((hang - num) > 0){num++;sprintf(s1, "\n%s %s %s %s %s %s %s %s %s %s %s", Result[lie * num], Result[lie * num + 1], Result[lie * num + 2], Result[lie * num + 3], Result[lie * num + 4], Result[lie * num + 5], Result[lie * num + 6], Result[lie * num + 7], Result[lie * num + 8], Result[lie * num + 9], Result[lie * num + 10]);strcat(information.buf1, s1);}}else{strcpy(information.buf1, "未查到");}send(i, &information, sizeof(information), 0);break;case 'H': // 快递员查询历史记录num = 1;if (strcmp(information.buf, "all") == 0){if (sqlite3_get_table(mdb, "select * from lishi;", &Result, &hang, &lie, &errmsg) != 0){printf("H err:%s\n", errmsg);}if (hang > 0){sprintf(information.buf1, "查询到的信息:\n%s %s %s %s", Result[lie], Result[lie + 1], Result[lie + 2], Result[lie + 3]);while ((hang - num) > 0){num++;sprintf(s1, "\n%s %s %s %s", Result[lie * num], Result[lie * num + 1], Result[lie * num + 2], Result[lie * num + 3]);strcat(information.buf1, s1);}}else{strcpy(information.buf1, "未查到");}send(i, &information, sizeof(information), 0);}else{sprintf(sql, "select * from lishi where stime=\"%s\";", information.buf);if (sqlite3_get_table(mdb, sql, &Result, &hang, &lie, &errmsg) != 0){printf("H err:%s\n", errmsg);}if (hang > 0){sprintf(information.buf1, "查询到的信息:\n%s %s %s %s", Result[lie], Result[lie + 1], Result[lie + 2], Result[lie + 3]);while ((hang - num) > 0){num++;sprintf(s1, "\n%s %s %s %s", Result[lie * num], Result[lie * num + 1], Result[lie * num + 2], Result[lie * num + 3]);strcat(information.buf1, s1);}}else{strcpy(information.buf1, "未查到");}send(i, &information, sizeof(information), 0);}break;default:break;}}}}}return 0;
}
快递员端
#include <stdio.h>
#include <poll.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>
#include <stdlib.h>
#include <unistd.h>
#include <sqlite3.h>int flag = 0;
void help()
{printf("**R:注册**\n");printf("**L:登录**\n");printf("**D:注销**\n");
}void help1()
{printf("**A:查快递**\n");printf("**E:送快递**\n");printf("**U:修改用户信息**\n");printf("**H:查询历史记录**\n");printf("**Q:返回上一级菜单**\n");
}
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;
};
struct pack_head
{int fd; // 通信的⽂件描述符unsigned char type; // 消息类型unsigned char usertype; // ⽤户类型:1:⽤户2:快递员char name[32]; // ⽤户名char paaswd[32]; // 密码char buf[32]; // 调试信息char buf1[100];struct order_msg msg; // 单号信息
};struct pack_head information;
int main(int argc, char const *argv[])
{// 创建套接字socket();int sockfd = socket(AF_INET, SOCK_STREAM, 0);// 请求连接connect();struct sockaddr_in saddr;saddr.sin_family = AF_INET;char a[100] = "";char b[100] = "";printf("请输入ip\n");scanf("%s", a);getchar();printf("请输入port\n");scanf("%s", b);getchar();saddr.sin_port = htons(atoi(b));saddr.sin_addr.s_addr = inet_addr(a);socklen_t addrlen = sizeof(saddr);if (connect(sockfd, (struct sockaddr *)&saddr, addrlen) < 0){perror("connect err");return -1;}else{printf("connect ok\n");}while (1){information.usertype = '2';information.fd = sockfd;if (!flag)help();elsehelp1();printf("请输入:");scanf(" %c", &information.type);printf("msg.type:%c\n", information.type);switch (information.type){case 'R': // 注册printf("请输入用户名:\n");scanf("%s",information.name);// fgets(information.name, sizeof(information.name), stdin);// information.name[strcspn(information.name, "\n")] = 0;printf("请输入密码:\n");scanf("%s",information.paaswd);// fgets(information.paaswd, sizeof(information.paaswd), stdin);// information.paaswd[strcspn(information.paaswd, "\n")] = 0;send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);if (strcmp(information.buf, "success") == 0){printf("注册成功\n");break;}else{printf("注册失败\n");}break;case 'L': // 登录while (1){memset(information.buf, 0, sizeof(information.buf));memset(information.buf1, 0, sizeof(information.buf1));printf("请输入用户名:\n");scanf("%s", information.name);// fgets(information.name, sizeof(information.name), stdin);// information.name[strcspn(information.name, "\n")] = 0;printf("请输入密码:\n");scanf("%s", information.paaswd);// fgets(information.paaswd, sizeof(information.paaswd), stdin);// information.paaswd[strcspn(information.paaswd, "\n")] = 0;// printf("%s\n", information.name);// printf("%s\n", information.paaswd);send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);if (strcmp(information.buf, "success") == 0){flag = 1;printf("登陆成功\n");break;}printf("错误信息重新登录\n");}break;case 'E': // 送快递printf("请输入要送达的快递单号\n");scanf("%ld", &information.msg.order);send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);if (strcmp(information.buf, "success") == 0){printf("已送达\n");}else{printf("送达失败\n");}break;case 'A': // 查快递printf("请输入要查询的订单的状态0或者1\n");scanf("%d", &information.msg.status);send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);printf("%s\n", information.buf1);break;case 'H': // 查询历史记录memset(information.buf, 0, sizeof(information.buf));printf("请输入查询的选项:(all所有或输入要查询的时间(格式 年-月-日 时))\n");// fgets(information.buf, sizeof(information.buf), stdin);// information.buf[strcspn(information.buf, "\n")] = 0;scanf(" %[^\n]", information.buf);send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);printf("%s\n", information.buf1);break;case 'U': // 修改用户信息printf("请输入要修改的密码");scanf("%s", information.paaswd);send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);if (strcmp(information.buf, "success") == 0){printf("修改成功\n");}else{printf("修改失败\n");}break;case 'D': // 注销用户printf("请输入用户名:\n");scanf("%s",information.name);// fgets(information.name, sizeof(information.name), stdin);// information.name[strcspn(information.name, "\n")] = 0;printf("请输入密码:\n");scanf("%s",information.paaswd);// printf("请输入用户名:\n");// fgets(information.name, sizeof(information.name), stdin);// information.name[strcspn(information.name, "\n")] = 0;// printf("请输入密码:\n");// fgets(information.paaswd, sizeof(information.paaswd), stdin);// information.paaswd[strcspn(information.paaswd, "\n")] = 0;send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);if (strcmp(information.buf, "success") == 0){printf("注销成功\n");}else{printf("注销失败\n");}break;case 'Q':flag = 0; // 返回一级菜单break;default:break;}}// 6.关闭close(sockfd);return 0;
}
用户端
#include <stdio.h>
#include <poll.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>
#include <stdlib.h>
#include <unistd.h>
#include <sqlite3.h>
int flag = 0;
int ret;
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;
};
struct pack_head
{int fd; // 通信的⽂件描述符unsigned char type; // 消息类型unsigned char usertype; // ⽤户类型:1:⽤户2:快递员char name[32]; // ⽤户名char paaswd[32]; // 密码char buf[32]; // 调试信息char buf1[100];struct order_msg msg; // 单号信息
};void help()
{printf("**R:注册**\n");printf("**L:登录**\n");printf("**D:注销**\n");
}void help1()
{printf("**F:查快递**\n");printf("**S:寄快递**\n");printf("**C:取消订单**\n");printf("**U:修改用户信息**\n");printf("**P:修改快递信息**\n");printf("**Q:返回上一级菜单**\n");
}
struct pack_head information;
int main(int argc, char const *argv[])
{// 创建套接字socket();int sockfd = socket(AF_INET, SOCK_STREAM, 0);// 请求连接connect();struct sockaddr_in saddr;saddr.sin_family = AF_INET;char a[100] = "";char b[100] = "";printf("请输入ip\n");scanf("%s", a);// getchar();printf("请输入port\n");scanf(" %s", b);// getchar();saddr.sin_port = htons(atoi(b));saddr.sin_addr.s_addr = inet_addr(a);socklen_t addrlen = sizeof(saddr);if (connect(sockfd, (struct sockaddr *)&saddr, addrlen) < 0){perror("connect err");return -1;}else{printf("connect ok\n");}int c;while (1){information.usertype = '1';information.fd = sockfd;if (!flag)help(); // 登录前elsehelp1(); // 登录后printf("请输入:");scanf(" %c", &information.type);getchar();printf("msg.type:%c\n", information.type);switch (information.type){case 'R': // 注册printf("请输入用户名:\n");fgets(information.name, sizeof(information.name), stdin);information.name[strcspn(information.name, "\n")] = 0;printf("请输入密码:\n");fgets(information.paaswd, sizeof(information.paaswd), stdin);information.paaswd[strcspn(information.paaswd, "\n")] = 0;send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);if (strcmp(information.buf, "success") == 0){printf("注册成功\n");break;}else{printf("注册失败\n");}break;case 'L': // 登录while (1){memset(information.buf, 0, sizeof(information.buf));memset(information.buf1, 0, sizeof(information.buf1));printf("请输入用户名:\n");scanf("%s", information.name);// fgets(information.name, sizeof(information.name), stdin);// information.name[strcspn(information.name, "\n")] = 0;printf("请输入密码:\n");scanf("%s", information.paaswd);// fgets(information.paaswd, sizeof(information.paaswd), stdin);// information.paaswd[strcspn(information.paaswd, "\n")] = 0;// printf("%s\n", information.name);// printf("%s\n", information.paaswd);send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);if (strcmp(information.buf, "success") == 0){flag = 1;printf("登陆成功\n");break;}printf("错误信息重新登录\n");}break;case 'S': // 寄快递printf("请输入发件人姓名,地址,电话\n");scanf("%s %s %ld", information.msg.sender, information.msg.send_addr, &information.msg.send_tel);getchar();printf("请输入收件人姓名,地址,电话\n");scanf("%s %s %ld", information.msg.reciver, information.msg.recive_addr, &information.msg.recive_tel);getchar();printf("请输入货物重量,名称\n");scanf("%f %s", &information.msg.weight, information.msg.goods);getchar();send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);if (strcmp(information.buf, "success") == 0){printf("邮寄成功\n");}break;case 'F': // 查快递printf("请输入要查询订单的发件人手机号:");scanf("%ld", &information.msg.send_tel);getchar();send(sockfd, &information, sizeof(information), 0);ret = recv(sockfd, &information, sizeof(information), 0);if (ret < 0){perror("recv err");close(sockfd);break;}else if (ret > 0){// printf("订单状态订单号发送人发送地址发送电话收件人\t 收件地址\t 收件人\t电话\t 货物重量\t 货物名称\n");printf("%s\n", information.buf1);}break;case 'P': // 修改快递信息printf("请输入要修改的快递单号\n");scanf("%ld", &information.msg.order);getchar();printf("请输入要修改的快递的发件人的电话和地址\n");scanf("%ld %s", &information.msg.send_tel, information.msg.send_addr);getchar();send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);if (strcmp(information.buf, "success") == 0){printf("修改成功\n");}else{printf("修改失败(输入错误或者未查询到)\n");}break;case 'C': // 取消订单printf("请输入要取消的快递单号\n");scanf("%ld", &information.msg.order);getchar();send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);if (strcmp(information.buf, "success") == 0){printf("取消成功\n");}else{printf("取消失败\n");}break;case 'U': // 修改用户信息printf("请输入要修改的密码");scanf("%s", information.paaswd);getchar();send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);if (strcmp(information.buf, "success") == 0){printf("修改成功\n");}else{printf("修改失败\n");}break;case 'D': // 注销用户printf("请输入用户名:\n");fgets(information.name, sizeof(information.name), stdin);information.name[strcspn(information.name, "\n")] = 0;printf("请输入密码:\n");fgets(information.paaswd, sizeof(information.paaswd), stdin);information.paaswd[strcspn(information.paaswd, "\n")] = 0;send(sockfd, &information, sizeof(information), 0);recv(sockfd, &information, sizeof(information), 0);if (strcmp(information.buf, "success") == 0){printf("注销成功\n");}else{printf("注销失败\n");}break;case 'Q':flag = 0; // 返回一级菜单break;default:break;}}close(sockfd);return 0;
}