当前位置: 首页 > news >正文

华--清--速--递

服务器端

#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;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python知识点:如何使用Python进行算法交易
  • 用Python实现运筹学——Day 0: 学习计划
  • Python 从入门到实战25(模块)
  • JSP(Java Server Pages)基础使用
  • D盘格式化了,数据怎么恢复?
  • 【JavaWeb】二、HTML 入门
  • 跨境专线的网速收到什么影响
  • python画图1
  • 【艾思科蓝】前端框架巅峰对决:React、Vue与Angular的全面解析与实战指南
  • 巨潮股票爬虫逆向
  • python脚本转mac app+app签名公正
  • Fyne ( go跨平台GUI )中文文档- 架构 (八)完结
  • 内网私有化聊天软件:哪些企业类型最受益?
  • Fyne ( go跨平台GUI )中文文档-绘图和动画(三)
  • 使用Charles抓包Android App数据
  • android图片蒙层
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • 分布式熔断降级平台aegis
  • 讲清楚之javascript作用域
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何进阶一名有竞争力的程序员?
  • 使用 QuickBI 搭建酷炫可视化分析
  • 算法---两个栈实现一个队列
  • 异常机制详解
  • Android开发者必备:推荐一款助力开发的开源APP
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (1)SpringCloud 整合Python
  • (BFS)hdoj2377-Bus Pass
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (差分)胡桃爱原石
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (顺序)容器的好伴侣 --- 容器适配器
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)四层和七层负载均衡的区别
  • (转)用.Net的File控件上传文件的解决方案
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .dwp和.webpart的区别
  • .NET 8 跨平台高性能边缘采集网关
  • .NET Core 成都线下面基会拉开序幕
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net core使用ef 6
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题