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语言教程

    大部分程序员走入编程世界第一个学习的语言就是C语言。 作为一门古老的编程语言,c语言拥有48年的发展历程。 为什么要学习 C语言? C语言是学习计算机程序设计语言的入门语言。最全面的编程面试网站 C语言是一门偏底层的语言,学好它,可以让你更好的了解计算机。 学会了C语言,你就能学习现在任何的高级编程语言。因为所有的高级语言都是以C语言为基础的。 怎么学习c语…

    C 2023年4月30日
    00
  • C程序 双指针技术

    C程序 双指针技术的完整使用攻略 双指针技术是C语言中常用的一种编程技巧,它通过利用两个指针的相对位置关系,实现快速查找、合并、移动等操作。下面详细讲解一下如何在C程序中使用双指针技术。 1. 双指针技术概述 双指针技术常用于数组操作、链表操作等场景。在使用双指针技术时,我们需要定义两个指针变量p和q,分别指向数组或链表中的元素。p和q可以指向同一个元素,也…

    C 2023年5月9日
    00
  • C++实现超市商品管理系统最新版

    C++实现超市商品管理系统最新版攻略 简介 超市商品管理系统是一种管理超市商品信息、库存、进货、销售等方面的软件,通过该软件可以实现对超市商品信息的实时管理、库存信息的查询统计、进货信息的记录及管理、销售信息的记录及管理等功能。 使用C++语言实现超市商品管理系统,可以有效提高软件运行效率、增加程序的健壮性和稳定性,方便进行后期维护。 实现过程 1. 软件架…

    C 2023年5月23日
    00
  • C语言实现井字棋游戏(人机对弈)

    C语言实现井字棋游戏(人机对弈)攻略 概述 井字棋,是一种简单的二人游戏,游戏过程中使用一个 3×3 的格子,两个人轮流在格子中放置自己的符号(通常是“x”和“o”),直到其中一方连成三个相同的符号为止。 本攻略旨在介绍如何使用 C 语言编写一个井字棋游戏,并实现人机对弈的功能。 游戏规则 游戏开始时,玩家和电脑各占一个符号(通常是“x”或“o”)。 游戏持…

    C 2023年5月23日
    00
  • C语言实现通讯录

    一、通讯录准备 1. 通讯录信息的准备 2. 通讯录功能的框架 3. 文件安排 二、实现通讯录的功能 1. 添加功能 2. 删除功能 3. 展示功能 4. 更改功能 5. 查找功能 6. 排序功能 三、总结 1.在main函数中,采用&的原因 2.在使用scanf函数时,为何某些参数不需要&,而有一些参数需要使用& 3.在添加功能中,…

    C语言 2023年4月18日
    00
  • C语言实现贪吃蛇超详细教程

    C语言实现贪吃蛇超详细教程 1. 简介 贪吃蛇是一款非常经典的游戏,同时其也是初学者学习编程的一个很好的练习项目,本教程将带领大家使用C语言来实现贪吃蛇。 2. 实现步骤 2.1 初始化 首先,我们需要初始化游戏窗口、贪吃蛇的位置、食物的位置以及其他一些必要的变量。 以Windows窗口为例,我们可以使用WinAPI来创建一个窗口,并使用CreateWind…

    C 2023年5月22日
    00
  • Win8系统下运行TurboC软件具体方法(图文)

    以下是详细讲解Win8系统下运行TurboC软件具体方法的完整攻略: 1. 确定TurboC软件版本 首先需要确定TurboC软件的版本,因为不同版本的TurboC安装方法略有不同。例如:TurboC++ 3.0需要使用DOSBox来运行,而TurboC++ 4.5可以直接在Windows下运行。在确定软件版本后,可以相应地选择合适的安装方法。 2. 下载T…

    C 2023年5月23日
    00
  • C语言之如何求三次方根

    C语言之如何求三次方根 在C语言中,求一个数的三次方根可以使用数学库中的pow()函数,但是这会增加程序的复杂度和开销。另一种方法是通过迭代逐步逼近三次方根的解,这种方法效率高,适合在不使用数学库的情况下求解三次方根。 方案原理 设正数n的三次方根为x,则有: $$ x^3 = n $$ 两边同时取平方根,得到: $$ x^2 = \sqrt{n} $$ 继…

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