C语言实现飞机订票系统

问题描述与题目要求

问题描述: 假定某民航有M个航次的班机,每个航次都只到达一个地方。试为该机场售票处设计一个自动订票和退票系统,要求系统具有以下功能:
(1) 订票:若该航次余票大于等于乘客订票数,则在该航次的乘客表中,插入订票乘客的信息项,并修改该航次有关数据,否则给出相应信息。
(2) 退票:若该航次当前退票数小于等于乘客原订票数,则在相应的乘客表中找到该乘客项,修改该航次及乘客表中有关数据;当某乘客由于退票使订票数为零时,则从乘客表中撤消该数据项。

要求:

(1)描述对航次表和乘客表选用的数据结构。
(2)编程实现飞机票订票和退票系统。

模型假设

1.假设所有输入均为整数且在int类型的表示范围内
2.假设航次是从1到n的连续整数
3.假设每个乘客 ID 均唯一

数据结构的选用

联想到图中的邻接链表,采用相似的数据结构描述该问题
航次表: 用一个数组flight_info_list存储每个航次的乘客表,该数组下标即为航班航次,对应元素即为该航次相关信息(乘客表,航班编号及航班余票数)
乘客表: 用双向链表存储每个航次的乘客表passenger_info_list,每个结点存储乘客的 ID,订票数以及指向前、后结点的指针

编程实现(C语言实现)

/*
 * @Description: 模拟航班的订票系统
 * 模型假设:
 *   1. 飞机最大载客量为300人
 *   2. 共10个航次
 * 用双向链表存储乘客信息
 * 用array存储航班信息
 * @Author: Fishermanykx
 * @Date: 2019-09-29 10:32:56
 * @LastEditors: Fishermanykx
 * @LastEditTime: 2019-09-30 12:29:16
 */

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_CAPACITY 300 // 假定飞机最大载客量为300
#define TOTAL_AIRLINE 10 // 假定不同航线最大数目为10
#define BOOK_TICKET 1
#define REFUND -1
#define EXIT_SYSTEM 0
#define PRINT_INFO 11
#define ROOT 123456

// 某航次航班
struct SingleFlight {
 int flight_id;    // 航班编号,从1开始,到TOTAL_AIRLINE为止
 int remain_tickets; // 该航班余票数
 struct SinglePassenger* passenger_info_list; // 该航班乘客表
};

// 某航次航班的某个乘客的信息
struct PassengerInfo {
 int passenger_id;  // 乘客id
 int ticket_number; // 该乘客购买票数
};

// 乘客表中的一个结点
struct SinglePassenger {
 struct PassengerInfo passenger_info;   // 乘客信息
 struct SinglePassenger* prev_passenger; // 指向前一个乘客的指针
 struct SinglePassenger* next_passenger; // 指向后一个乘客的指针
};

typedef struct SingleFlight SingleFlight;
typedef struct SinglePassenger SinglePassenger;

// 订票操作
SingleFlight* BookTicket(SingleFlight flight_info_list[]);
SinglePassenger* GetNewPassenger(const int new_passenger_id,
                 const int book_ticket_number);
SinglePassenger* AddNewPassenger(SinglePassenger* head,
                 const int new_passenger_id,
                 const int book_ticket_number);

// 退票操作
SingleFlight* Refund(SingleFlight flight_info_list[]);
SinglePassenger* RemovePassenger(SinglePassenger* head, const int passenger_id);
// 判断操作
bool IsPassengerExist(SinglePassenger* head, const int passenger_id);
// 打印操作
void PrintCurrentAirlineInfo(SingleFlight flight_info_list[]);
void PrintPassengerList(SinglePassenger* head, SingleFlight* flight_info_list,
            int airline_id);

int main(void) {
 int order, exit_loop = 1;

 // 初始化航班信息
 SingleFlight* flight_info_list;
 flight_info_list =
   (SingleFlight*)malloc(TOTAL_AIRLINE * sizeof(SingleFlight));
 for (int i = 0; i < TOTAL_AIRLINE; ++i) {
  flight_info_list[i].flight_id = i + 1;
  flight_info_list[i].remain_tickets = MAX_CAPACITY;
  flight_info_list[i].passenger_info_list = NULL;
 }

 /* 登录界面 */
 printf("您好,欢迎使用此系统!\n\n");
 printf("使用说明:\n");
 printf("1. 本程序所有输入均为整数\n");
 printf("2. 可供选择的航次编号为1-%d, 每架次最大载客量为%d\n", TOTAL_AIRLINE,
     MAX_CAPACITY);
 printf(
   "3. 若订票,请输入1;若退票,请输入-1;若退出系统,请输入0; "
   "若要以root用户登录,请输入root密码\n");
 printf("使用说明到此结束,祝您使用愉快!\n");

 // 判断是否以root登录
 int log_in_as_root, root_key;
 bool is_root = false;

 printf("-------------------------------------------------------------\n\n");
 printf("是否以root用户登录?若是,请输入1,否则请输入0:");
 scanf("%d", &log_in_as_root);

 if (log_in_as_root) printf("请输入root密码(按0退出root登录程序):");
 while (log_in_as_root) {
  scanf("%d", &root_key);
  if (!root_key) {
   break;
  } else if (root_key != ROOT) {
   printf("输入密码错误!请重新输入或按0退出root登录程序:");
  } else {
   is_root = true;
   break;
  }
 }
 // 欢迎界面
 if (is_root)
  printf("欢迎,root用户!输入11可查看当前航次表\n");
 else
  printf("欢迎,普通用户!\n");
 printf("-------------------------------------------------------------\n");

 // 主循环
 while (true) {
  if (is_root)
   printf("请输入1, 0, -1或11中的一个数字: ");
  else
   printf("请输入1, 0, -1中的一个数字: ");

  scanf("%d", &order);
  switch (order) {
   case BOOK_TICKET:
    flight_info_list = BookTicket(flight_info_list);
    break;
   case REFUND:
    flight_info_list = Refund(flight_info_list);
    break;
   case EXIT_SYSTEM:
    exit_loop = 0;
    break;
   case PRINT_INFO:
    printf(
      "-------------------------------------------------------------\n");
    PrintCurrentAirlineInfo(flight_info_list);
    break;
   default:
    printf("非法输入!\n");
    break;
  }
  if (!exit_loop) break;
 }

 return 0;
}

/**
 * @description: 一次订票操作的模拟
 * @param {type}
 * flight_info_list {SingleFlight *}: 航班信息表(航次表)
 * @return:
 */
SingleFlight* BookTicket(SingleFlight flight_info_list[]) {
 /* 获取乘客预定航次 */
 int target_airline;
 printf("可供选择的航次对应的编号为: 1 - %d\n", TOTAL_AIRLINE);
 printf("请输入您想预定的航次(输入0时退出订票程序): ");
 // 判断输入合法性
 while (true) {
  scanf("%d", &target_airline);
  if (target_airline < 0 || target_airline > TOTAL_AIRLINE) {
   printf("您要预定的航次不存在!\n");
   printf("请重新输入一个正确的航次,或按0退出订票程序:");
  } else if (target_airline == 0) {
   printf("-------------------------------------------------------------\n");
   return flight_info_list;
  } else
   break;
 }

 /* 获取乘客id */
 int passenger_id;
 int modify_tickets;
 printf("若您原先已经订票,且想增加您的订票数,请输入1,否则请输入0: ");
 // 判断输入合法性
 while (true) {
  scanf("%d", &modify_tickets);
  if (modify_tickets != 1 && modify_tickets != 0) {
   printf("您输入的是非法命令,请重新输入0(原先未订票)或1(原先已经订票):");
  } else
   break;
 }
 printf("请输入您的ID: ");
 // 若原先未订票
 while (!modify_tickets) {
  scanf("%d", &passenger_id);
  if (IsPassengerExist(
      flight_info_list[target_airline - 1].passenger_info_list,
      passenger_id)) {
   printf("该ID已存在,请输入一个新的ID: ");
  } else
   break;
 }
 // 若原先已经订票
 if (modify_tickets) {
  scanf("%d", &passenger_id);
  if (!IsPassengerExist(
      flight_info_list[target_airline - 1].passenger_info_list,
      passenger_id)) {
   printf("您原先并未预订该航次的票!\n");
   printf("-------------------------------------------------------------\n");
   return flight_info_list;
  }
 }

 /* 获取乘客预定票数 */
 // 获取当前航次余票数
 int remain_tickets;

 remain_tickets = flight_info_list[target_airline - 1].remain_tickets;
 printf("当前航次余票数为: %d\n", remain_tickets);
 // 若该乘客想修改票数,显示此乘客此前预订的票数
 if (modify_tickets) {
  SinglePassenger* head =
    flight_info_list[target_airline - 1].passenger_info_list;
  while (head->passenger_info.passenger_id != passenger_id) {
   head = head->next_passenger;
  }
  printf("您此前预订的票数为%d张\n", head->passenger_info.ticket_number);
 }
 // 获取乘客想预定的票数
 int target_ticket_num;

 printf("请输入您想预定(或增订)的票数: ");
 // 判断输入合法性
 while (true) {
  scanf("%d", &target_ticket_num);
  if (target_ticket_num > remain_tickets) {
   printf("您想预定的票数为%d, 但当前航次余票数仅为%d, 余票不足!\n",
       target_ticket_num, remain_tickets);
   printf("请输入您想预定的票数,或按0退出订票程序: ");
  } else if (target_ticket_num == 0) {
   printf("-------------------------------------------------------------\n");
   return flight_info_list;
  } else {
   break;
  }
 }

 /* 修改航次余票数 */
 flight_info_list[target_airline - 1].remain_tickets -= target_ticket_num;

 /* 修改乘客表中对应的项 */
 // 判断该乘客原先是否存在
 if (modify_tickets) {
  // 若存在,找到该乘客并修改他的订票项
  SinglePassenger* tmp =
    flight_info_list[target_airline - 1].passenger_info_list;
  while (tmp->passenger_info.passenger_id != passenger_id) {
   tmp = tmp->next_passenger;
  }
  tmp->passenger_info.ticket_number += target_ticket_num;
  printf("增订成功!您现在共预订%d张航次%d的票\n",
      tmp->passenger_info.ticket_number, target_airline);

 } else {
  // 若不存在,则在该航次的乘客列表中增加该乘客及其对应信息
  flight_info_list[target_airline - 1].passenger_info_list = AddNewPassenger(
    flight_info_list[target_airline - 1].passenger_info_list, passenger_id,
    target_ticket_num);
  printf("预订成功!您现在共预订%d张航次%d的票\n", target_ticket_num,
      target_airline);
 }
 printf("-------------------------------------------------------------\n");

 return flight_info_list;
}

/**
 * @description: 查找乘客表(双向链表)中某乘客是否存在
 * @param {type}
 * head {SinglePassenger*}: 双向链表头结点
 * passenger_id {const int}: 待查找的键值
 * @return: 若存在,返回true;否则返回false
 */
bool IsPassengerExist(SinglePassenger* head, const int passenger_id) {
 SinglePassenger* tmp = head;
 bool exist = false;
 if (!head) {
  return false;
 }
 while (tmp) {
  if (tmp->passenger_info.passenger_id == passenger_id) {
   exist = true;
   break;
  }
  tmp = tmp->next_passenger;
 }

 return exist;
}

/**
 * @description: 初始化一个新结点
 * @param {type}
 * new_passenger_id {const int}: 新增加的乘客的id
 * book_ticket_number {const int}: 新增加乘客的订票数
 * @return: 初始化后的结点(前驱,后继均为空指针)
 */
SinglePassenger* GetNewPassenger(const int new_passenger_id,
                 const int book_ticket_number) {
 SinglePassenger* new_passenger =
   (SinglePassenger*)malloc(sizeof(SinglePassenger));

 new_passenger->passenger_info.passenger_id = new_passenger_id;
 new_passenger->passenger_info.ticket_number = book_ticket_number;
 new_passenger->next_passenger = NULL;
 new_passenger->prev_passenger = NULL;

 return new_passenger;
}

SinglePassenger* AddNewPassenger(SinglePassenger* head,
                 const int new_passenger_id,
                 const int book_ticket_number) {
 SinglePassenger* new_passenger =
   GetNewPassenger(new_passenger_id, book_ticket_number);
 if (!head) {
  head = new_passenger;
 } else {
  // 直接从头部插入
  new_passenger->next_passenger = head->next_passenger;
  if (head->next_passenger) {
   head->next_passenger->prev_passenger = new_passenger;
  }
  new_passenger->prev_passenger = head;
  head->next_passenger = new_passenger;
 }

 return head;
}

/**
 * @description: 一次退票操作的模拟
 * @param {type}
 * flight_info_list {SingleFlight *}: 航次表
 * @return: 修改后的航次表
 */
SingleFlight* Refund(SingleFlight flight_info_list[]) {
 /* 获取乘客预定航次 */
 int target_airline;

 printf("可供选择的航次对应的编号为: 1 - %d\n", TOTAL_AIRLINE);
 printf("请输入您想退订的航次(输入0时退出订票程序): ");
 // 判断输入合法性
 while (true) {
  scanf("%d", &target_airline);
  if (target_airline < 0 || target_airline > TOTAL_AIRLINE) {
   printf("您要退订的航次不存在!\n");
   printf("请重新输入一个正确的航次,或按0退出退票程序:");
  } else if (target_airline == 0) {
   printf("-------------------------------------------------------------\n");
   return flight_info_list;
  } else
   break;
 }

 /* 获取乘客ID并判断其合法性 */
 int passenger_id;

 printf("请输入您的ID: ");
 scanf("%d", &passenger_id);

 SinglePassenger* head =
   flight_info_list[target_airline - 1].passenger_info_list;

 if (!IsPassengerExist(head, passenger_id)) {
  printf("您并未预订此次航班!\n");
  printf("-------------------------------------------------------------\n");
  return flight_info_list;
 }

 /* 获取乘客退票数 */
 // 打印此乘客的预订票数
 SinglePassenger* tmp = head;

 while (tmp->passenger_info.passenger_id != passenger_id) {
  tmp = tmp->next_passenger;
 }
 printf("您当前预订的票数为: %d张\n", tmp->passenger_info.ticket_number);
 // 读入退票数
 int refund_ticket_num;

 printf("请输入您的退票数(输入0退出退票程序): ");
 scanf("%d", &refund_ticket_num);
 // 输入合法性检查
 int cur_ticket = tmp->passenger_info.ticket_number; // 当前该乘客预订的票数
 while (cur_ticket < refund_ticket_num) {
  if (!refund_ticket_num) {
   printf("-------------------------------------------------------------\n");
   return flight_info_list;
  }
  printf("您输入的退票数大于您当前预订的票数!");
  printf("请重新输入退票数(输入0退出退票程序): ");
  scanf("%d", &refund_ticket_num);
 }

 /* 退票 */
 // 更新航次表
 flight_info_list[target_airline - 1].remain_tickets += refund_ticket_num;
 // 更新乘客表
 if (cur_ticket > refund_ticket_num) {
  tmp->passenger_info.ticket_number -= refund_ticket_num;
  printf("您已成功退票,现在您%d航次的余票为%d张\n", target_airline,
      tmp->passenger_info.ticket_number);
 } else {
  flight_info_list[target_airline - 1].passenger_info_list =
    RemovePassenger(head, passenger_id);
  printf("您已成功退票,现在您%d航次的余票为%d张\n", target_airline, 0);
 }
 printf("-------------------------------------------------------------\n");

 return flight_info_list;
}

/**
 * @description: 从乘客表中删除某个结点
 * @param {type}
 * head {SinglePassenger *}: 乘客表
 * passenger_id {const int}: 待删除乘客的id
 * @return: 修改后的航次表
 */
SinglePassenger* RemovePassenger(SinglePassenger* head,
                 const int passenger_id) {
 SinglePassenger* tmp = head;

 while (tmp->passenger_info.passenger_id != passenger_id) {
  tmp = tmp->next_passenger;
 }
 // 若为头结点
 if (!tmp->prev_passenger) {
  head = head->next_passenger;
 }
 // 若为尾结点
 else if (!tmp->next_passenger) {
  tmp->prev_passenger->next_passenger = NULL;
 }
 // 若为中间某个结点
 else {
  tmp->prev_passenger->next_passenger = tmp->next_passenger;
  tmp->next_passenger->prev_passenger = tmp->prev_passenger;
 }

 return head;
}

/**
 * @description: 输出当前航次表
 * @param {type}
 * flight_info_list {SingleFlight *}: 航班信息表(航次表)
 * @return: void
 */
void PrintCurrentAirlineInfo(SingleFlight flight_info_list[]) {
 for (int current_airline_index = 1; current_airline_index <= TOTAL_AIRLINE;
    ++current_airline_index) {
  int remain_ticket_num =
    flight_info_list[current_airline_index - 1].remain_tickets;
  SinglePassenger* head =
    flight_info_list[current_airline_index - 1].passenger_info_list;
  // 输出
  PrintPassengerList(head, flight_info_list, current_airline_index);
  printf("-------------------------------------------------------------\n");
 }
}

/**
 * @description: 打印某航次的乘客表
 * @param {type}
 * head {SinglePassenger*}: 乘客表的头结点
 * flight_info_list {SingleFlight *}: 航次表
 * @return:
 */
void PrintPassengerList(SinglePassenger* head, SingleFlight* flight_info_list,
            int airline_id) {
 if (!head) {
  printf("%d航次无乘客订票!\n", airline_id);
 } else {
  printf("%d航次余票数为: %d, 其中:\n", airline_id,
      flight_info_list[airline_id - 1].remain_tickets);
 }
 while (head) {
  printf("ID为%d的乘客订票数为%d张\n", head->passenger_info.passenger_id,
      head->passenger_info.ticket_number);
  head = head->next_passenger;
 }
 printf("\n");
}

实现亮点

1.每一步操作均有对非法输入的处理,最大限度上确保了程序运行的稳定性
2.区分root用户和普通用户,且只有root用户能够查看所有人的订票情况,从而保护了客户的隐私
3.使用双向链表存储乘客信息,一方面便于存取乘客的信息(定长数组分配的是栈内存,而栈内存小于堆内存,所以用链表进行存储更不容易造成内存溢出),另一方面降低了编程难度(既不需要实现对数组进行动态内存分配的一系列操作,又最大限度地降低了删除结点操作的复杂度)

实现缺点

1.只考虑了数字输入的情况,没有考虑字符及其他数据类型的输入
2.用链表存储导致不能随机访问,使查找操作复杂度始终为O(n) O(n)O(n)

运行结果

您好,欢迎使用此系统!

使用说明:
1. 本程序所有输入均为整数
2. 可供选择的航次编号为1-10, 每架次最大载客量为300
3. 若订票,请输入1;若退票,请输入-1;若退出系统,请输入0; 若要以root用户登录,请输入root密码
使用说明到此结束,祝您使用愉快!
-------------------------------------------------------------

是否以root用户登录?若是,请输入1,否则请输入0:1
请输入root密码(按0退出root登录程序):123456
欢迎,root用户!输入11可查看当前航次表
-------------------------------------------------------------
请输入1, 0, -1或11中的一个数字: 1
可供选择的航次对应的编号为: 1 - 10
请输入您想预定的航次(输入0时退出订票程序): 1
若您原先已经订票,且想增加您的订票数,请输入1,否则请输入0: 0
请输入您的ID: 1
当前航次余票数为: 300
请输入您想预定(或增订)的票数: 12
预订成功!您现在共预订12张航次1的票
-------------------------------------------------------------
请输入1, 0, -1或11中的一个数字: 1
可供选择的航次对应的编号为: 1 - 10
请输入您想预定的航次(输入0时退出订票程序): 1
若您原先已经订票,且想增加您的订票数,请输入1,否则请输入0: 0
请输入您的ID: 2
当前航次余票数为: 288
请输入您想预定(或增订)的票数: 21
预订成功!您现在共预订21张航次1的票
-------------------------------------------------------------
请输入1, 0, -1或11中的一个数字: 1
可供选择的航次对应的编号为: 1 - 10
请输入您想预定的航次(输入0时退出订票程序): 1
若您原先已经订票,且想增加您的订票数,请输入1,否则请输入0: 0
请输入您的ID: 3
当前航次余票数为: 267
请输入您想预定(或增订)的票数: 32
预订成功!您现在共预订32张航次1的票
-------------------------------------------------------------
请输入1, 0, -1或11中的一个数字: 1
可供选择的航次对应的编号为: 1 - 10
请输入您想预定的航次(输入0时退出订票程序): 2
若您原先已经订票,且想增加您的订票数,请输入1,否则请输入0: 0
请输入您的ID: 32
当前航次余票数为: 300
请输入您想预定(或增订)的票数: 2
预订成功!您现在共预订2张航次2的票
-------------------------------------------------------------
请输入1, 0, -1或11中的一个数字: 1
可供选择的航次对应的编号为: 1 - 10
请输入您想预定的航次(输入0时退出订票程序): 10
若您原先已经订票,且想增加您的订票数,请输入1,否则请输入0: 0
请输入您的ID: 212
当前航次余票数为: 300
请输入您想预定(或增订)的票数: 123
预订成功!您现在共预订123张航次10的票
-------------------------------------------------------------
请输入1, 0, -1或11中的一个数字: 1
可供选择的航次对应的编号为: 1 - 10
请输入您想预定的航次(输入0时退出订票程序): 1
若您原先已经订票,且想增加您的订票数,请输入1,否则请输入0: 1
请输入您的ID: 1
当前航次余票数为: 235
您此前预订的票数为12张
请输入您想预定(或增订)的票数: -1
增订成功!您现在共预订11张航次1的票
-------------------------------------------------------------
请输入1, 0, -1或11中的一个数字: -1
可供选择的航次对应的编号为: 1 - 10
请输入您想退订的航次(输入0时退出订票程序): 1
请输入您的ID: 2
您当前预订的票数为: 21张
请输入您的退票数(输入0退出退票程序): 222
您输入的退票数大于您当前预订的票数!请重新输入退票数(输入0退出退票程序): 2
您已成功退票,现在您1航次的余票为19张
-------------------------------------------------------------
请输入1, 0, -1或11中的一个数字: 1
可供选择的航次对应的编号为: 1 - 10
请输入您想预定的航次(输入0时退出订票程序): 10
若您原先已经订票,且想增加您的订票数,请输入1,否则请输入0: 32
您输入的是非法命令,请重新输入0(原先未订票)或1(原先已经订票):0
请输入您的ID: 322
当前航次余票数为: 177
请输入您想预定(或增订)的票数: 12
预订成功!您现在共预订12张航次10的票
-------------------------------------------------------------
请输入1, 0, -1或11中的一个数字: -1
可供选择的航次对应的编号为: 1 - 10
请输入您想退订的航次(输入0时退出订票程序): 10
请输入您的ID: 212
您当前预订的票数为: 123张
请输入您的退票数(输入0退出退票程序): 123
您已成功退票,现在您10航次的余票为0张
-------------------------------------------------------------
请输入1, 0, -1或11中的一个数字: 11
-------------------------------------------------------------
1航次余票数为: 238, 其中:
ID为1的乘客订票数为11张
ID为3的乘客订票数为32张
ID为2的乘客订票数为19张

-------------------------------------------------------------
2航次余票数为: 298, 其中:
ID为32的乘客订票数为2张

-------------------------------------------------------------
3航次无乘客订票!

-------------------------------------------------------------
4航次无乘客订票!

-------------------------------------------------------------
5航次无乘客订票!

-------------------------------------------------------------
6航次无乘客订票!

-------------------------------------------------------------
7航次无乘客订票!

-------------------------------------------------------------
8航次无乘客订票!

-------------------------------------------------------------
9航次无乘客订票!

-------------------------------------------------------------
10航次余票数为: 288, 其中:
ID为322的乘客订票数为12张

-------------------------------------------------------------
请输入1, 0, -1或11中的一个数字: 0

注:普通用户不能执行查看所有乘客信息的操作,只能查看自己的购票信息

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 学生信息管理系统C语言版

    C语言学生信息管理系统包括以下功能: 1.学生信息的整体注册 2.学生信息的修改 3.学生成绩信息的录入 4.学生信息的添加 5.恢复误删的学生信息 6.学生信息的删除 7.密码修改保存函数 8.学生信息的查询 9.密码修改函数 10.学生信息管理系统的菜单函数 #include "stdio.h" #include "malloc.h" #include "string.h" #include "stdlib.h" #inc

  • 基于C语言实现简单的12306火车售票系统

    程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在number.dat文件中,排序过后的保存在sort.dat中(.dat是一种二进制文件). 在编写的过程中我觉得在判断火车的状态比较值得深究.这里假设火车主要有四种状态: 1.未发车 2.已发车 3.停止检票 4.停止退票 在程序中,思路是将代表发车时间的字符串转化为整型,再和系统现在的时间进行大小

  • C语言实现航班售票系统 C语言实现航班管理系统

    本文实例为大家分享了C语言航班售票系统的具体代码,供大家参考,具体内容如下 题目描述:实现一个航班售票系统,每个航班应包括以下信息:航班号.起飞地.目的地.总座位数.余票数.乘客名单等:每个乘客的信息有:乘客姓名.证件号码.座位号等. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MaxFlight 32 //最大的航班数 #define MaxPassenger 1000 //最大

  • C语言实现航班订票系统

    本文实例为大家分享了C语言实现航班订票系统的具体代码,供大家参考,具体内容如下 描述: 点定义两个链表,一个存储航班信息,一个存储客户信息: 进行一系列简单的增删查找: 代码如下 #include<cstdio> #include<cstring> #include<iostream> #include<cstdlib> using namespace std; const int MAXN=250; typedef struct { string p_id

  • C语言职工信息管理系统源码

    本文实例为大家分享了C语言职工信息管理系统的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct worker { char ID[20];//工号 char name[20];//姓名 char sex[5];//性别 char born[20];//生日 char edu[20];//学历 char po

  • C语言通讯录管理系统完整版

    C语言实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节//

  • C语言实现飞机票务系统

    飞机票务系统设计要求:有登录系统界面.账号.密码:建立航班信息功能:查看从郑州到某终点站飞机票信息功能:飞机票购买功能:添加购票人信息功能:显示购票人信息功能:退定飞机票功能: 程序中的音乐可以改为自己指定的,用时把我用的音乐那行代码注释掉即可. 代码如下: #include<stdio.h> #include<string.h> #include<stdlib.h> #include<Windows.h> #include<conio.h>//

  • C语言编写学生成绩管理系统

    用C语言编写学生成绩管理系统代码,供大家参考,具体内容如下 C语言实现学生成绩管理系统实战教学 https://www.jb51.net/article/154767.htm (1)给出所选课程设计题目以及本题目具体所要完成的功能要求说明. 1.课程设计题目:学生成绩管理系统 2.完成的功能要求: (1).主要实现的功能: 1---学生输入 2---学生插入 3---学生查询(按学号) 4---学生删除 5---学生输出 6---计算每名学生的平均分并输出 7---计算每科的平均分并输出 8--

  • 纯C语言实现火车售票系统

    这是好久之前写的一个火车售票系统, 写的非常粗糙, 后来也没改了, 希望遇见有缘人继续优化吧. 主要的功能是:设置车次,删除车次, 买票, 改签, 退票, 查询等. #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<string.h> #include<conio.h> #define MAXNUM 10000 #define Num 100 typedef stru

  • C语言实现飞机订票系统的完整代码

    目录 题目 总体设计和需求分析 设计目的 总体设计和功能 结构体设计 机票信息结构体 主函数的设计 各功能代码的实现 前置 添加机票 查找机票信息 修改机票信息 显示机票信息 推荐机票信息 订票 退票 保存信息 显示时间 测试 总结 题目 本文将设计一个飞机订票系统,主要包括机票的添加.修改.查找.订票.退票.推荐机票功能,用C语言编程实现,并用链表存储产生的航班信息和订票信息数据,最后可以把链表中的数据保存到文件中. 总体设计和需求分析 设计目的 1.怎样去合理的设计一个数据结构来存储订票信息

  • C语言实现飞机订票系统

    问题描述与题目要求 问题描述: 假定某民航有M个航次的班机,每个航次都只到达一个地方.试为该机场售票处设计一个自动订票和退票系统,要求系统具有以下功能: (1) 订票:若该航次余票大于等于乘客订票数,则在该航次的乘客表中,插入订票乘客的信息项,并修改该航次有关数据,否则给出相应信息. (2) 退票:若该航次当前退票数小于等于乘客原订票数,则在相应的乘客表中找到该乘客项,修改该航次及乘客表中有关数据:当某乘客由于退票使订票数为零时,则从乘客表中撤消该数据项. 要求: (1)描述对航次表和乘客表选用

  • C语言实现航空订票系统课程设计

    本文实例为大家分享了C语言实现航空订票系统的具体代码,供大家参考,具体内容如下 大一写的时候没有写注释,后来也懒得加了.在这里说一下读写文件的思路吧. 就是利用二进制将一整个结构体中的数据存入文件,然后读取文件时再用二进制的形式将结构体中的数据读取出来,边读取边创建链表,将结构体中的数据保存到链表中. 以下代码可直接复制粘贴就能运行,绝对是新手的好福利! 如果有第一次写这种大作业不知道如何下手,但又不想直接复制粘贴,想搞清楚这个代码的原理的可以私信我,毕竟我当时也第一次写这种大作业时也很苦恼(我

  • C++实现飞机订票系统

    本文实例为大家分享了C++实现飞机订票系统的具体代码,供大家参考,具体内容如下 // 飞机订票系统.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <string.h> #include<stdlib.h> #include<conio.h> #define N 2 typedef struct plane {     char ID[10];

  • C语言实现火车订票系统

    本文实例为大家分享了C语言实现火车订票系统的具体代码,供大家参考,具体内容如下 程序介绍 1.运行程序时,首先进入到菜单部分,菜单部分提供了菜单显示和输入功能部分.其运行效果如图所示.在主界面上输入数字0——6,实现相应的功能. 2.主界面输入“1”,进入添加火车信息界面,如图所示.根据屏幕上给出的提示输入火车的车次,起点,终点,出发时间,到达时间,票价和可以订购的票数. 3.主界面输入“2”,可以查询火车信息,可以选择查询的方法有两种,一种是按照车次查询,一种是按照你想要到达的地方查询,运行效

  • Java实现电影院订票系统代码

    程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势...但是由于时间原因,小编并未在代码中添加可视化图形界面,有兴趣的朋友可自行添加. 可参阅:Java图形化界面设计之容器(JFrame)详解 演示结果: 下面是具体实现代码: public class Test { public static void main(String[] args) { BookTicket bookTicket = new BookTicket(); bookTicket.init()

  • Python利用多线程同步锁实现多窗口订票系统(推荐)

    利用Python实现多窗口订票系统,利用 threading.Lock() 避免出现一票多卖,无票也卖的情况,并规范化输出情况. 代码: import threading import time tickets, lock = 20, threading.Lock() class TicketWindows(threading.Thread): def __init__(self, window_name): threading.Thread.__init__(self) self.window

  • C++实现航空订票系统课程设计

    本文实例为大家分享了C++实现航空订票系统的具体代码,供大家参考,具体内容如下 一.题目 1.录入功能 可以录入航班信息(如航班号,起飞降落时间,城市,座位数,票价) 2.查询功能 可以查询航班的各项信息(如根据航班号,起飞降落城市查找航班并显示航班信息) 3.修改删除功能 可以修改删除航班的信息 4.追加航线 在原本的航线之后可以继续添加航线方便操作 5.订票功能 可以订票并且记录下乘客的相关信息(如姓名,身份证号码) 6.退票功能 可以退票并且记录乘客的相关信息以及退票信息 二.代码 #in

  • 利用Python实现电影订票系统

    目录 一.效果展示 二.整体结构图 三.代码分解 3.1infos.py 3.2seat_book.py 3.3film_selector.py 3.4main.py 一.效果展示 通过Python实现一个电影订票系统,效果如下图所示: 二.整体结构图 三.代码分解 3.1 infos.py 一部电影的详细信息适合用 字典 结构来存储,我们可以给字典里添加多个键值对来保存电影的名称.座位表和宣传时用的字符画,比如电影<泰坦尼克号>的详细信息就可以按下面的形式保存到字典 titanic 中: i

随机推荐