毕业设计机票订购系统2

这是一个使用C语言和MySQL实现的机票订购系统客户端。客户端包括登录、注册、管理员和用户功能,如添加、删除和查询航班,以及订票、退票和改签等操作。系统通过连接本地数据库进行数据交互,并提供了与服务器的连接功能。
摘要由CSDN通过智能技术生成

客户端

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"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值