C语言实现火车订票系统

实现火车订票系统的完整攻略分为以下几个步骤:

1. 设计数据库

火车订票系统需要一个数据库来存储车次信息、座位信息、乘客信息等。可以使用MySQL或者SQLite等关系型数据库。设计数据库时需要考虑信息的表结构、字段类型、约束条件等。以下是一个汽车票订购系统的数据库设计:

车次信息表:train_info
字段:train_id, start_station, end_station, start_time, end_time, total_seat

座位信息表:seat_info
字段:train_id, seat_type, seat_number, status

乘客信息表:passenger_info
字段:passenger_id, name, id_card_number, contact_phone, booking_status, order_id

2. 编写程序

编程语言选择C语言,需要用到数据库访问库mysqlclient.h。

2.1 连接数据库

使用mysql_init()函数初始化mysql结构体,然后使用mysql_real_connect()函数连接到数据库。连接到数据库之后可以使用mysql_select_db()函数选择要操作的数据库。

MYSQL *mysql;
mysql = mysql_init(NULL);
mysql_real_connect(mysql, "localhost", "root", "password", NULL, 0, NULL, 0);
mysql_select_db(mysql, "train_info");

2.2 增加车次信息

使用mysql_real_query()函数执行SQL语句,向车次信息表中增加车次信息。以下是一个增加车次信息的示例:

char *sql = "INSERT INTO train_info (train_id, start_station, end_station, start_time, end_time, total_seat) VALUES ('G102', '北京', '上海', '07:00:00', '12:30:00', 100)";
mysql_real_query(mysql, sql, (unsigned int)strlen(sql));

2.3 查询可用座位

查询可用座位需要用到座位信息表和乘客信息表。首先查询座位信息表中指定车次、指定座位类型、状态为0(未预订)的座位,然后查询乘客信息表中已预订该座位的乘客数,计算可用座位数。

以下是一个查询可用座位的示例:

char *sql = "SELECT COUNT(*) FROM seat_info WHERE train_id='G102' AND seat_type='一等座' AND status=0"
mysql_real_query(mysql, sql, (unsigned int)strlen(sql));
MYSQL_RES *result = mysql_store_result(mysql);
MYSQL_ROW row;
int available_seat;
if (result != NULL && (row = mysql_fetch_row(result)) != NULL) {
    available_seat = 100 - atoi(row[0]);
}

2.4 预订座位

预订座位需要用到座位信息表和乘客信息表。首先查询可用座位数,如果可用座位数大于等于要预订的座位数,则使用mysql_real_query()函数执行SQL语句,向座位信息表中增加座位信息,并向乘客信息表中增加乘客信息。

以下是一个预订座位的示例:

//查询可用座位数
char *sql = "SELECT COUNT(*) FROM seat_info WHERE train_id='G102' AND seat_type='一等座' AND status=0"
mysql_real_query(mysql, sql, (unsigned int)strlen(sql));
MYSQL_RES *result = mysql_store_result(mysql);
MYSQL_ROW row;
int available_seat;
if (result != NULL && (row = mysql_fetch_row(result)) != NULL) {
    available_seat = 100 - atoi(row[0]);
}

//预订座位
if (available_seat >= 2) {
    mysql_real_query(mysql, "START TRANSACTION", 17);
    char *sql1 = "INSERT INTO seat_info (train_id, seat_type, seat_number, status) VALUES ('G102', '一等座', 'A1', 1)";
    mysql_real_query(mysql, sql1, (unsigned int)strlen(sql1));
    char *sql2 = "UPDATE passenger_info SET booking_status=1, order_id=10001 WHERE passenger_id=1";
    mysql_real_query(mysql, sql2, (unsigned int)strlen(sql2));
    mysql_real_query(mysql, "COMMIT", 6);
} else {
    printf("Not enough available seats.");
}

3. 测试程序

使用编译器编译程序,运行程序测试各个功能。以下是一个测试程序的示例:

#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>

int main(int argc, const char * argv[]) {

    MYSQL *mysql;
    mysql = mysql_init(NULL);
    mysql_real_connect(mysql, "localhost", "root", "password", NULL, 0, NULL, 0);
    mysql_select_db(mysql, "train_info");

    //增加车次信息
    char *sql1 = "INSERT INTO train_info (train_id, start_station, end_station, start_time, end_time, total_seat) VALUES ('G102', '北京', '上海', '07:00:00', '12:30:00', 100)";
    mysql_real_query(mysql, sql1, (unsigned int)strlen(sql1));

    //查询可用座位数
    char *sql2 = "SELECT COUNT(*) FROM seat_info WHERE train_id='G102' AND seat_type='一等座' AND status=0";
    mysql_real_query(mysql, sql2, (unsigned int)strlen(sql2));
    MYSQL_RES *result = mysql_store_result(mysql);
    MYSQL_ROW row;
    int available_seat;
    if (result != NULL && (row = mysql_fetch_row(result)) != NULL) {
        available_seat = 100 - atoi(row[0]);
        printf("Available seat: %d\n", available_seat);
    }

    //预订座位
    if (available_seat >= 2) {
        mysql_real_query(mysql, "START TRANSACTION", 17);
        char *sql3 = "INSERT INTO seat_info (train_id, seat_type, seat_number, status) VALUES ('G102', '一等座', 'A1', 1)";
        mysql_real_query(mysql, sql3, (unsigned int)strlen(sql3));
        char *sql4 = "UPDATE passenger_info SET booking_status=1, order_id=10001 WHERE passenger_id=1";
        mysql_real_query(mysql, sql4, (unsigned int)strlen(sql4));
        mysql_real_query(mysql, "COMMIT", 6);
        printf("Booking success.\n");
    } else {
        printf("Not enough available seats.\n");
    }

    mysql_close(mysql);
    return 0;
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现火车订票系统 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • centos网络配置方法(手动设置,自动获取)

    以下是详细的“CentOS网络配置方法”的攻略。 CentOS网络配置方法 CentOS是一种常用的Linux操作系统,网络配置是使用CentOS时必不可少的部分。这里我们将介绍手动设置和自动获取IP地址的两种方法。 注意:在进行下列操作之前,请确保您具有管理员权限。 手动设置IP地址 1.打开终端,输入下列命令来打开“网络管理器”的图形化界面: nm-co…

    C 2023年5月22日
    00
  • python集合类型用法分析

    Python集合类型用法分析 Python中的集合类型可用于存储一组无序且不重复的元素。本篇攻略将详细讲解Python中常用的集合类型及其用法。 集合类型 Python中常用的集合类型有三种: set frozenset dict 其中,set和frozenset是用来存储一组无序且不重复的元素的,而dict则是用来存储键值对的。 set类型 set类型使用…

    C 2023年5月22日
    00
  • C 语言 二维数组

    C语言二维数组详解 一、什么是二维数组 二维数组是由多个一维数组组成的数据结构,它的特点是可以用行和列(或横向和纵向)来表示数据的位置。在C语言中,二维数组实际上是一个元素为一维数组的一维数组,二维数组中的元素使用两个下标(或索引)来确定。 int arr[2][3]; // 定义一个二维数组,有2行3列的整型数据类型 上面的代码定义了一个2行3列的数组,其…

    C 2023年5月9日
    00
  • C语言volatile关键字的作用与示例

    C语言中的volatile关键字可以用于修饰被多线程访问或外部环境影响的变量,以保证程序访问这些变量的正确性。本文将从定义、作用、使用方法以及实例方面全面介绍volatile关键字的使用。 定义 volatile是C语言的关键字,表示“易变的、多变的、易波动的”,即表示一个全局变量或局部变量,其值可能随时会发生改变,因此每次访问该变量时都必须重新读取变量的值…

    C 2023年5月23日
    00
  • 淘宝直播间进不去怎么回事?怎么做?

    淘宝直播间进不去怎么回事?怎么做? 淘宝直播是淘宝平台上的一项直播服务,为商家提供直播卖货的渠道,吸引了大量用户。但是,用户在使用淘宝直播时,有时遇到无法进入直播间的问题,接下来我们将为大家介绍如何解决。 一、检查网络连接 首先,我们需要检查一下自己的网络连接是否正常。可以打开其他网站试试看,如果其他网站打得开,那就是淘宝平台的问题,如果其他网站也打不开,那…

    C 2023年5月23日
    00
  • C语言错误使用解引操作

    C语言错误使用解引操作的完整使用攻略 什么是解引操作 解引操作是指使用指针变量获取指针变量所指向地址上存储的数据。在 C 语言中,我们使用 * 进行解引操作,例如: int a = 100; int *p = &a; int b = *p; // 这里的 *p 就是解引操作,将 p 指向的地址上的值赋值给 b 错误使用解引操作的问题 错误使用解引操作…

    C 2023年5月9日
    00
  • 在c和c++中实现函数回调

    在C和C++中实现函数回调,需要用到函数指针;函数指针是将函数的入口地址存放在指针变量中,可以通过指针来间接调用函数。 以下是实现函数回调的步骤: 声明一个函数指针类型,以便后续能实现复用: c++typedef void(*CallbackFunction)(int); 上面的代码定义了一个函数指针类型CallbackFunction,该函数指针可以指向一…

    C 2023年5月23日
    00
  • C++用mysql自带的头文件连接数据库

    接下来我会为你详细讲解 “C++用mysql自带的头文件连接数据库”的完整攻略,包括安装MySQL和配置环境,以及如何使用MySQL头文件进行编程。 安装MySQL和配置环境 首先,你需要在你的计算机上安装MySQL。你可以在MySQL的官方网站 https://dev.mysql.com/downloads/ 下载MySQL的安装程序并按照提示进行安装。 …

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部