客户端
main.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <mysql/mysql.h>
//#include "MySqlFunc.h"
#include "mysqlfunc.h"
void showLoginMenu(); //显示登录菜单
int RegisterUser(MYSQL * conn, pPerson pPersonHead); //注册用户
int Login(MYSQL * conn, pPerson pPersonHead, pPlane planeHead, pOrder orderHead); //登录操作
int AdminFunc(MYSQL * conn, pPerson pPersonHead,pPlane planeHead, pOrder orderHead); //管理员功能
void AdminMenu(); //打印管理员菜单
int addPlaneInfo(MYSQL * conn, pPlane planeHead); //添加航班
int deletePlaneInfo(MYSQL * conn, pPlane planeHead); //删除航班
int lookPlaneInfo(MYSQL * conn, pPlane planeHead); //浏览航班
int lookOrderInfo(MYSQL * conn, pOrder orderHead); //浏览订票信息
int lookWaitInfo(MYSQL * conn, pOrder orderHead); //浏览候补信息
int UserFunc(MYSQL * conn, pPlane planeHead, pOrder orderHead,PersonNode currPer);
int UserMenu();
int addOrder(MYSQL * conn, pPlane planeHead, pOrder orderHead, PersonNode currPer);
int delOrder(MYSQL * conn, pPlane planeHead, pOrder orderHead, PersonNode currPer);
int changeOrder(MYSQL * conn, pPlane planeHead, pOrder orderHead, PersonNode currPer);
int searchOrder(MYSQL * conn, pPlane planeHead, pOrder orderHead, PersonNode currPer);
int gConnfd = -1;
int connectServer();
int main()
{
pPerson perHead = (pPerson)malloc(sizeof(PersonNode));
pPlane planeHead = (pPlane)malloc(sizeof(PlaneNode));
pOrder orderHead = (pOrder)malloc(sizeof(OrderNode));
int choseNum = 0;
//数据库
MYSQL * conn = mysql_init(NULL);
perHead->next = NULL;
planeHead->next = NULL;
orderHead->next = NULL;
connectServer();
connectMysql(conn); //连接数据库
createPersonTable(conn); //创建乘客表
createPlaneTable(conn); //创建航班表
createOrdeTable(conn); //创建订单表
searchPerson(conn, perHead); //查询所有的人员信息
searchPlane(conn, planeHead); //查询所有的航班信息
while (1)
{
showLoginMenu();
scanf("%d",&choseNum);
switch (choseNum)
{
case 1:
RegisterUser(conn, perHead);
break;
case 2:
Login(conn, perHead, planeHead, orderHead);
break;
case 0:
mysql_close(conn);
return;
default:
printf("选择服务编号错误!\n");
break;
}
}
return 0;
}
int connectServer()
{
struct sockaddr_in servaddr;
gConnfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
//servaddr.sin_addr.s_addr = inet_addr("192.168.219.1");
servaddr.sin_port = htons(8888);
connect(gConnfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
printf("gConnfd:%d\n",gConnfd);
return 1;
}
void showLoginMenu()
{
printf("|------------------ Jy--------------------------|\n");
printf("|------------欢迎进入机票订购系统----------------|\n");
printf("|-----------------------------------------------|\n");
printf("|-----------1.注册------------|\n");
printf("|-----------2.登录------------|\n");
printf("|-----------0.退出------------|\n");
printf("请输入:");
}
int UserFunc(MYSQL * conn, pPlane planeHead, pOrder orderHead, PersonNode currPer)
{
int chose = 0;
while (1)
{
UserMenu();
scanf("%d", &chose);
switch (chose)
{
case 1:
addOrder(conn, planeHead, orderHead, currPer);
break;
case 2:
delOrder(conn, planeHead, orderHead, currPer);
break;
case 3:
changeOrder(conn, planeHead, orderHead, currPer);
break;
case 4:
lookPlaneInfo(conn,planeHead);
break;
case 5:
searchOrder(conn, planeHead, orderHead, currPer);
break;
case 0:
return 0;
break;
default:
printf("选择服务编号错误!\n");
break;
}
}
}
int UserMenu()
{
printf("|------1:订票------------------|\n");
printf("|------2:退票------------------|\n");
printf("|------3:改签------------------|\n");
printf("|------4:查询航班信息----------|\n");
printf("|------5:查询订票信息----------|\n");
printf("|------0:退出系统--------------|\n");
printf("请选择:");
return 0;
}
int addOrder(MYSQL * conn, pPlane planeHead, pOrder orderHead, PersonNode currPer)
{
char planeID[BUFFSIZE];
pPlane find = NULL;
OrderNode node;
int orderSize = 0; //预定数量
int isWait = 0; //是否候补
printf("请输入航班编号:");
scanf("%s",planeID);
find = findPlaneExistByID(planeHead, planeID);
if (find == NULL)
{
printf("没有找打航班!\n");
return 0;
}
printf("请输入购票数量:");
scanf("%d", &orderSize);
if (orderSize > (find->Max_num - find->Buy_num))
{
printf("剩余票数不足,是否进行候补?\n1:候补\n其他:不后补\n");
printf("请输入你的选择:");
scanf("%d",&isWait);
printf("isWait = %d\n", isWait);
switch (isWait)
{
case 1:
memcpy(node.PlaneID, find->PlaneID, strlen(find->PlaneID));
node.PlaneID[strlen(find->PlaneID)] = '\0';
memcpy(node.person_ID, currPer.person_ID, strlen(currPer.person_ID));
node.person_ID[strlen(currPer.person_ID)] = '\0';
node.orderSize = orderSize;
node.OrderStat = 2;
insertOrderNode(orderHead, node);
insertOrder(conn, node);
printf("候补成功!\n");
break;
default:
break;
}
}
else
{
memcpy(node.PlaneID, find->PlaneID, strlen(find->PlaneID));
node.PlaneID[strlen(find->PlaneID)] = '\0';
memcpy(node.person_ID, currPer.person_ID, strlen(currPer.person_ID));
node.person_ID[strlen(currPer.person_ID)] = '\0';
node.orderSize = orderSize;
node.OrderStat = 1;
insertOrderNode(orderHead, node);
insertOrder(conn, node);
//修改票信息
find->Buy_num += orderSize;
updatePlane(conn, *find);
printf("购票成功!\n");
}
return 1;
}
int delOrder(MYSQL * conn, pPlane planeHead, pOrder orderHead, PersonNode currPer)
{
int id;
pOrder findOrder = NULL;
pPlane findPlane = NULL;
OrderNode node;
pOrder p = (pOrder)malloc(sizeof(OrderNode));
p->next = NULL;
searchOrderByPersonID(conn, p, currPer.person_ID);
printf("请输入订购ID:");
scanf("%d",&id);
findOrder = findOrderExistByID(p, id);
if (findOrder == NULL)
{
printf("没有找到订单编号!\n");
return 0;
}
deleteOrder(conn, id);
node = *findOrder;
findPlane = findPlaneExistByID(planeHead, node.PlaneID);
findPlane->Buy_num -= node.orderSize;
updatePlane(conn, *findPlane);
clearOrderNode(p);
printf("退票成功!\n");
return 1;
}
int changeOrder(MYSQL * conn, pPlane planeHead, pOrder orderHead, PersonNode currPer)
{
int id = 0, orderSize = 0;
char planeID[BUFFSIZE];
pOrder findOrder = NULL;
pPlane findPlane = NULL;
pPlane sourPlane = NULL;
OrderNode node;
pOrder p = (pOrder)malloc(sizeof(OrderNode));
p->next = NULL;
searchOrderByPersonID(conn, p, currPer.person_ID);
printf("请输入要改签的订购ID:");
scanf("%d", &id);
findOrder = findOrderExistByID(p, id);
if (findOrder == NULL)
{
printf("没有找到订单编号!\n");
return 0;
}
node = *findOrder;
printf("请输入要改签的航班编号:");
scanf("%s", planeID);
findPlane = findPlaneExistByID(planeHead, planeID);
if (findPlane == NULL)
{
printf("没有找到要改签的航班编号!\n");
return 0;
}
printf("请输入要改签的购票数量:");
scanf("%d", &orderSize);
if (orderSize > (findPlane->Max_num - findPlane->Buy_num))
{
printf("余票不足,改签失败!\n");
return 0;
}
sourPlane = findPlaneExistByID(planeHead, node.PlaneID);
sourPlane->Buy_num -= node.orderSize;
findPlane->Buy_num += orderSize;
memcpy(node.PlaneID, findPlane->PlaneID, strlen(findPlane->PlaneID));
node.PlaneID[strlen(findPlane->PlaneID)] = '\0';
node.orderSize = orderSize;
updatePlane(conn, *sourPlane);
updatePlane(conn, *findPlane);
updateOrder(conn, node);
printf("改签成功!\n"