Железнодорожная система бронирования в C

Опубликовано: 12 Сентября, 2022

Система бронирования железнодорожных билетов реализована на языке C. Это то же самое, что можно увидеть, когда мы собираемся онлайн-бронирование билетов. При бронировании железнодорожного билета в этом программном обеспечении выполняются следующие шаги:

  1. Первым шагом является предоставление общего количества пассажиров и предоставление всех необходимых сведений о пассажирах.
  2. Следующим шагом является ввод источника и назначения.
  3. Появится список доступных поездов. Среди них пользователю предстоит выбрать один.
  4. Стоимость билета будет оцениваться. Система попросит ввести выбор места, показав матрицу мест. Наконец, квитанция будет сгенерирована на экране.

Подход:

  • Первый шаг — реализовать структуру для сбора сведений о пассажирах, таких как имя, пол и возраст.
  • Определены пять функций: void details(int), void add_node(char, char, int), int seat(int), int cal(int, int, int), void bill(int, int) для бесперебойной работы.
  • В структуре есть три элемента, такие как две строки: одна для ввода имени и пола пассажира, а другая — целое число для определения возраста пассажира. Кроме того, будет использоваться указатель структуры, который помогает связать следующий узел другого пассажира. Он похож на связанный список.
  • Определены символьные массивы, а некоторые целочисленные массивы определены глобально.
  • Возьмите количество пассажиров в качестве входных данных, и эти данные будут отправлены в функцию details() .
  • Выполните цикл for, чтобы получить информацию о каждом пассажире. Детали, введенные пользователем, будут отправлены в функцию add_node().
  • В функции add_node каждая деталь будет храниться в узле для каждого пассажира. Эти узлы будут связывать друг друга. Это основано на концепции связанного списка.
  • Возьмите ввод для места отправления, места назначения, и это даст некоторый выбор доступных поездов. На основании этого пользователь должен дать выбор. Затем вызовите функцию cal() .
  • В функции cal() пользователь должен выбрать класс sleeper или ac. Если пользователь выбирает класс переменного тока, откроются еще три варианта, в которых пользователь должен дать другой выбор, основанный на том, что система добавит 18% GST к сумме и составит общую сумму.
  • Вызовите функцию сиденья (), где пользователю будет предоставлена матрица мест, и пользователь должен выбрать место, соответствующее количеству пассажиров.
  • Наконец, вызовите функцию bill(), в которой будет отображена общая сумма счета со всеми необходимыми данными.

Ниже приведена реализация вышеуказанного подхода:

C




// C program for the above approach
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
  
// Defining Structure
typedef struct mynode {
    char name[20];
    char gen[6];
    int age;
    struct mynode* link;
} Node;
  
Node* start = NULL;
  
void details(int);
int seat(int);
int cal(int, int, int);
void bill(int, int);
  
// Global variables
char source[20], des[20], train[40];
char station[40], cla[40];
int time1, time2, a[55];
  
// Driver Code
void main()
{
    int i, j, a1, a2, b, c, int x = 0, d, e, r;
    char o;
    printf("Enter Number Of Passengers: ");
    fflush(stdin);
    scanf("%d", &j);
  
    // Calling details() function with
    // argument number of passenger
    details(j);
    printf("Enter The Source Place: ");
    fflush(stdin);
    gets(source);
    printf("Enter The Destination Place: ");
    gets(des);
    printf(" The Following Trains "
           "Are Available..... ");
    printf(" 1. Rajdhani Express.."
           ".......10:00 "
           "a.m........Sealdah Station ");
    printf(" 2. Satabdi Express..."
           ".......05:00 "
           "p.m........Howrah Station ");
    printf(" 3. Humsafar Express..."
           ".......11:00 "
           "p.m........Kolkata Chitpur"
           " Station ");
    printf(" 4. Garib-Rath Express"
           ".........05:00 "
           "p.m........Sealdah Station ");
    printf(" 5. Duronto Express..."
           ".........07:00 "
           "a.m.........Santraganchi"
           "Station ");
    scanf("%d", &i);
    do {
        switch (i) {
        case 1: {
            strcpy(train,
                   "Rajdhani Express");
            strcpy(station,
                   "Sealdah Station");
            time1 = 10;
            time2 = 00;
            a1 = 2099;
            a2 = 1560;
  
            // Calling cal() function
            // with the three argument
            // and return value
            d = cal(a1, a2, j);
            printf("Total Bill Amount:"
                   " %d ",
                   d);
        }; break;
        case 2: {
            strcpy(train,
                   "Satabdi Express");
            strcpy(station,
                   "Howrah Station");
            time1 = 05;
            time2 = 00;
            a1 = 1801;
            a2 = 981;
  
            // Calling cal() function with
            // three argument & return value
            d = cal(a1, a2, j);
            printf("Total Bill Amount:"
                   "%d ",
                   d);
        }; break;
        case 3: {
            strcpy(train,
                   "Humsafar Express");
            strcpy(station,
                   "Kolkata Chitpur Express");
            time1 = 11;
            time2 = 00;
            a1 = 2199;
            a2 = 1780;
  
            // Calling cal() function with
            // three argument & return value
            d = cal(a1, a2, j);
            printf("Total Bill Amount: %d ", d);
        }; break;
        case 4: {
            strcpy(train, "Garib-Rath Express");
            strcpy(station, "Sealdah Station");
            time1 = 05;
            time2 = 00;
            a1 = 1759;
            a2 = 1200;
  
            // Calling cal() function with
            // three argument & return value
            d = cal(a1, a2, j);
            printf("Total Bill Amount: %d ", d);
        }; break;
        case 5: {
            strcpy(train, "Duronto Express");
            strcpy(station, "Santraganchi Station");
            time1 = 07;
            time2 = 00;
            a1 = 2205;
            a2 = 1905;
  
            // Calling cal() function with
            // three argument & return value
            d = cal(a1, a2, j);
            printf("Total Bill Amount: %d ", d);
        }; break;
        default:
            printf("Enter Correct choice..... ");
            x = 1;
            break;
        }
    } while (x);
    printf("Now Book Your Seats...... ");
  
    // Calling seat() function with number
    // of passenger
    seat(j);
  
    // Calling bill() function with
    // the number of passenger
    // and amount argument
    bill(d, j);
}
  
// Function for calculation of amount
int cal(int y1, int y2, int h)
{
    int b, c, i, t, r, n;
    printf(" Enter Your Choice...... ");
    printf(" 1. Slepper Class.... ");
    printf(" 2. A.C Class....... ");
    scanf("%d", &i);
    switch (i) {
    case 1: {
        strcpy(cla, "Slepper Class");
        b = y2 * h;
        c = b + (b * 0.18);
    } break;
    case 2: {
        printf(" Enter Your Choice.... ");
        printf(" 1. 3A Class.... ");
        printf(" 2. 2A Class.... ");
        printf(" 3. 1st Class A.C..... ");
        scanf("%d", &n);
        switch (n) {
        case 1: {
            strcpy(cla, "3A Class");
            b = y1 * h;
            c = b + (b * 0.18);
        } break;
        case 2: {
            strcpy(cla, "2A Class");
            b = (y1 + 1000) * h;
            c = b + (b * 0.18);
        } break;
        case 3: {
            strcpy(cla, "1st Class A.C.");
            b = (y1 + 5000) * h;
            c = b + (b * 0.18);
        } break;
        default: {
            printf(" Enter Right Choice...... ");
        }
        }
    } break;
    default: {
        printf(" Enter Right Choice...... ");
    }
    }
    return c;
}
  
// Function for taking details
// of passengers
void details(int k)
{
    int i, a;
    char val[20], gen[6];
    for (i = 1; i <= k; i++) {
        printf("Enter The %dth Passenger Name: ", i);
        fflush(stdin);
        gets(val);
        printf("Enter The %dth Passenger Gender: ", i);
        fflush(stdin);
        gets(gen);
        printf("Enter The %dth Passenger Age: ", i);
        fflush(stdin);
        scanf("%d", &a);
  
        // Calling add_node() function
        add_node(val, gen, a);
    }
}
  
// Function to add details in node
// for each passengers
void add_node(char lol[20], char der[6], int b)
{
    Node *newptr = NULL, *ptr;
    newptr = (Node*)malloc(sizeof(Node));
    strcpy(newptr->name, lol);
    strcpy(newptr->gen, der);
    newptr->age = b;
    newptr->link = NULL;
    if (start == NULL)
        start = newptr;
    else {
        ptr = start;
        while (ptr->link != NULL)
            ptr = ptr->link;
        ptr->link = newptr;
    }
}
  
// Function for choosing seats
int seat(int p)
{
    int i;
    printf("            -:SEAT MATRIX:-        ");
    printf(" (U)    (M)        (L)    (L)    "
           "    (U) ");
    printf(" 01    02        03 04        "
           "05 ");
    printf(" 06    07        08 09        "
           "10 ");
    printf(" 11    12        13 14        "
           "15 ");
    printf(" 16    17        18 19        "
           "20 ");
    printf(" 21    22        23 24        "
           "25 ");
    printf(" 26    27        28 29        "
           "30 ");
    printf(" 31    32        33 34        "
           "35 ");
    printf(" 36    37        38 39        "
           "40 ");
    printf(" 41    42        43 44        "
           "45 ");
    printf(" 46    47        48 49        "
           "50 ");
    printf(" 51    52        53 54        "
           "55 ");
    printf(" 56    57        58 59        "
           "60 ");
    printf(" Enter Seat Numbers: ");
    for (i = 0; i < p; i++)
        scanf("%d", &a[i]);
}
  
// Function for printing receipt
void bill(int y, int j)
{
    int i;
    Node* ptr = start;
    for (i = 1; i <= j; i++) {
        printf(" \%dst Passenger Name: ", i);
        puts(ptr->name);
        printf(" %dst Passenger Gender: ", i);
        puts(ptr->gen);
        printf(" %dst Passenger Age: %d ", i,