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日

相关文章

  • 详解如何利用C++实现Mystring类

    如何利用 C++ 实现 Mystring 类 Mystring 类的功能是代表一个字符串,并提供针对此字符串的各种操作。下面,我们将分步骤详解如何利用 C++ 实现 Mystring 类。 定义类 先定义一个 Mystring 类,实现其基本功能。其中,我们需要考虑以下几点: 数据成员:需要保存字符串所占用的内存及其长度; 成员函数:需要实现字符串的构造与析…

    C 2023年5月23日
    00
  • Linux环境使用g++编译C++方法总结

    关于“Linux环境使用g++编译C++方法总结”的攻略,我们可以按照以下步骤进行: 一、安装g++ 首先需要在Linux环境中安装g++,g++是GNU C++编译器的套件,也是GNU Compiler Collection(GCC)的一部分。安装方法如下: 1. 使用apt-get安装 运行以下命令安装g++: sudo apt-get update s…

    C 2023年5月23日
    00
  • C语言实现猜拳游戏

    C语言实现猜拳游戏 简介 猜拳游戏是一种经典的多人休闲竞技游戏,通过手势的不同进行猜拳比赛。C语言可以用来实现猜拳游戏,下面就来介绍一下C语言实现猜拳游戏的方法。 实现步骤 定义变量 首先,我们需要定义一些变量,包括玩家与电脑的手势、输赢情况等信息。 int player; int computer; int result; 玩家输入 接着,需要让玩家输入一…

    C 2023年5月23日
    00
  • C语言十进制转二进制代码实例

    下面是关于“C语言十进制转二进制代码实例”的完整攻略。 1. 基本思路 将一个十进制数转换成二进制数,可以采用“除2取余法”实现。具体步骤如下: 用十进制数除以2,获取商和余数; 将余数存储下来; 将商作为新的除数,重复执行上述过程,直到商为0为止; 将所有余数按逆序排列,即可得到二进制数。 比如将“26”转换成二进制数,具体操作如下: 26 ÷ 2 = 1…

    C 2023年5月30日
    00
  • C语言实现扫雷游戏详解(附源码)

    C语言实现扫雷游戏详解(附源码) 导读 本文将详细讲述如何使用C语言实现扫雷游戏,包含游戏的逻辑和界面的实现。读者需要掌握C语言基础知识和游戏编程基础知识,同时需要熟悉常用的图形界面库如Windows API或GTK+。 整个游戏分为两个部分:游戏逻辑和图形界面。游戏逻辑部分实现游戏规则和逻辑,包含格子的生成、揭开和标记、游戏状态的控制等;图形界面部分实现游…

    C 2023年5月23日
    00
  • C++实现简单版通讯录管理系统

    C++实现简单版通讯录管理系统攻略 一、需求分析 通讯录是日常生活中广泛使用的一种记录联系人信息的工具。本次需求是实现一个简单的通讯录管理系统,主要包含如下功能: 添加联系人 显示所有联系人 查找联系人 删除联系人 修改联系人 根据以上需求,我们可以设计通讯录管理系统的主要数据结构是一个联系人类 Contact 类,包含姓名、手机、性别、等私有成员,以及相应…

    C 2023年5月23日
    00
  • win10/win7无法验证文件数字签名(错误代码 0xcoooo428)怎么办

    针对“win10/win7无法验证文件数字签名(错误代码 0xcoooo428)”这个问题,我们可以从以下几个方面入手,进行排查和修复: 问题排查 首先,我们需要确认一下是否存在恶意软件或病毒感染导致的问题。可以进行全盘杀毒扫描和查杀,确认系统没有被感染病毒。 确认一下该错误是否发生在特定文件上,还是所有文件都出现这个错误。如果只有特定的文件无法验证数字签名…

    C 2023年5月23日
    00
  • Win11更新失败并提示0xc1900101怎么办?Win11错误提示0xc1900101解决方法

    Win11更新失败并提示0xc1900101是一个常见的问题,它可能发生在更新到Windows 11时。这个错误代码可能是由于硬件与软件不兼容、设备驱动程序不正确、磁盘空间不足以及许多其他原因引起的。下面我们来详细讲解Win11更新失败并提示0xc1900101该如何解决。 检查计算机硬件与设备 在更新之前,必须检查计算机的硬件是否与Windows 11兼容…

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