C语言程序设计--火车订票系统

news2024/12/19 14:23:49

任务要求:

创建一个火车票管理系统,功能包括:

(1)录入班次信息(信息用文件保存),可不定时地增加班次数据
(2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班         次的发车时间,则显示“此班已发出”的提示信息)。
(3)查询路线(起点、终点):可按班次号查询 ,可按终点站查询

(4)增加及修改班次和删除班次信息
(5)售票和退票功能

系统设计:

 

一.车票管理系统的功能为:1.录入班次2. 显示所有班次3.查询班次4.增加班次   5.售票6.退票7.修改班次8.删除班次9.退出

车票管理系统软件的功能模块有:

(1)提供菜单界面,方便用户对程序个功能进行选择,选择要实现的功能按enter键进入该功能。

(2)接受用户输入的功能项,按enter键结束输入并将进入该系统,其需要的结果显示出来,方便用户查看。

(3)完成每次功能可保存用户的修改的信息,及时更新文件信息。下次查询时内容为最新信息。实时的信息更新对比等。

一个名TICKET的结构体进行定义,包括num[10] hour[3]; min[3] from[10]; to[10]; hours max; now;等结构体成员。

然后对调用函数进行定义。int system_time()系统时间,void NewMessage()             新纪录录入函数,void ShowTable1() void ShowTable2(int i) 线框调用1和2不用每次输,void Display()显示所有函数,void add()增加记录,void save()          保存函数,void save()保存函数,void load() 按班次查询函数,void search()       查询函数,void change()修改函数,void quit()退出函数,void Ticketorder()        售票函数,void Ticketdelete()删除函数,int menu_select()菜单函数, int whether(int)判断时间是否超出函数,void  find(char s1[],char s2[])         查询函数★//s1为班次//s2为终点站,void deletemessage()删除函数,int findnum(char s1[])班次查询函数,void get(int,int)修改及增加班次,char *menu[]菜单函数。

该系统将这些信息均放在文件d:车票管理系统0中。

最后定义main()函数,利用函数调用,实现程序的各种功能。将其放在系统文件d:车票管理系统0中。

程序分为多个小模块,通过调用实现各种功能,增强了程序的可建设性。

程序把每种功能分开实现,更简单,实用程序更易理解。

程序测试:

3.0  菜单界面

 

图3-1菜单界面

如上图所示,该程序为用户提供菜单界面,用户可以对程序的各种功能进行选择,方便用户使用。选择1-9并按enter键进行操作。如选择出错,系统将提出警告,并提醒用户重新进行选择。

    1.  录入班次功能

图3-1- 1第一次输入时的界面

 

图3-1- 2第二次输入时的界面

 

如上图所示,该功能实现录入班次信息。选择1按enter键进入该功能,程序提醒用户输入车次.发车时间.起始站.终点站.行车时间.额定载量.已售票数,输入完毕后按enter键将完成录入班次结果,同时程序将再次提醒用户进行新的选择。而第二次输入时提醒已经输过,不能在加。

3.2查询所有班次功能

图  3-2-1查询班次界面

 

 

图3-2-2选择查询方式的界面

该功能将实现程序运行班次的查询。选择3并按enter键将实现该功能。分班次和终点站两种方式查询。

3.3增加班次功能

 

图3-2-3增加班次功能界面

 

图3-2-4增加班次后界面

 

该功能将增加班次信息,帮助用户更新班次信息。选择4并按enter键将实现该功能,再按提示输入就行。按任意键返回主菜单。

3.3售票功能

 

图3-3-1选择售票功能界面

 

图3-3-2选择售票后的界面

 

图3-3-3订票的界面

选择5按enter键实现该功能,按任意键关闭程序。买票程序可提示买票成功否,且自动判断是否可卖。

3.4退票功能

 

图3-4-1退票界面

选择6按enter键实现该功能,按任意键关闭程序。退票程序可提示退票成功否,且自动判断是否可退。

3.5修改班次功能

 

图3-5-1修改界面

选择7按enter键实现该功能,按任意键关闭程序。按提示操作修改班次。

3.6  删除班次功能

 

图3-6-1删除界面

3.7  退出功能

 

图3-7-1退出界面

该功能可退出系统,选择9按enter键实现该功能

部分程序:

#include<stdio.h>               ///宏定义函数

#include<string.h>            //串操作及内存操作函数

#include<stdlib.h>             /调用系统函数

#include<time.h>               ///时间库函数   

#include<conio.h>                 ///输入输出函数

#define N 1000                    //宏定义多条记录

typedef struct TICKET            定义新结构体TICKET

{

   char num[10];                  //车次编号

   char hour[3];               //时间,,小时

   char min[3];               //分钟

   char from[10];        //起始站

   char to[10];         //终点站

   float hours;          //车程实际时间

   int max;            //最大车载容量

   int now;           //已售票数

}CLASS;

int class_num=0;              ///初始班次总数为0     

CLASS records[N];            // 多条记录

int system_time();   //系统时间

void NewMessage();             //新纪录*录入函数******

void ShowTable1();         //线框调用1,,,不用每次输 

void ShowTable2(int i);     //线框调用2,,,不用每次输   

void Display();           //显示所有函数

void add();             //增加记录

void save();          //   保存函数

void load();              // 按班次查询函数

void search();        //查询函数

void change();     //修改函数**

void quit();          // //退出函数******

void Ticketorder();        //    //*售票函数***

void Ticketdelete();         //删除函数*

int menu_select();         //菜单函数*

int whether(int);           判断时间是否超出函数***

void  find(char s1[],char s2[]);         //查询函数★//s1为班次//s2为终点站

void deletemessage();           //删除函数

int findnum(char s1[]);           //班次查询函数

void get(int,int);         //修改及增加班次*

char *menu[]={"*****************欢迎使用火车票查询系统*****************",

"\n*******************MENU功能菜单***********************",

"\n                  1. 录入班次                        ",

"\n                  2. 显示所有班次                    ",

"\n                  3. 查询班次                        ",

"\n                  4. 增加班次                        ",

"\n                  5. 售票                            ",

"\n                  6. 退票                            ",

"\n                  7. 修改班次                        ",

"\n                  8. 删除班次                        ",

"\n                  9. 退出                            "};                              

/**************************主函数*************************/

void main()

   system("cls");            //刷屏

   while(1)                    //菜单函数循环

   {

      switch(menu_select())                  //菜单函数*

      {

      case 1: NewMessage();break;     新纪录*录入函数******

      case 2: Display();break;               // //显示

      case 3: search();break;           //查找函数**

      case 4: add();break;               // //增加记录

      case 5: Ticketorder();break;           *售票函数***

      case 6: Ticketdelete();break;        //删除函数*

      case 7: change();break;              //修改函数**

      case 8: deletemessage();break;     //选择调用删除函数

      case 9: quit();break;      //退出函数******

      }

   }

}

/***********************菜单函数**************************/

int menu_select()         /菜单函数*

{

   char s[5];           ///定义要输入的数字功能

   int c,i;        

   system("cls");           //刷屏

   system("color 07");//改变颜色

   for(i=0;i<11;i++)

   {

      printf("%s",menu[i]);   //输出菜单各项

   }

   i=0;

    while(c<0||c>9)             //判断是否是19的命令

   { 

      printf("\n");               ///输出换行

     

        printf("******************************************************");

        printf("\n请选择(1-9):");

      scanf("%s",s);

      c=atoi(s);                    //atoi将字符串转换成一个整数值

   }            ///输出菜单面

   return c;           返回请求           

}

/*******************************录入函数************************************/

void NewMessage()            //*录入函数******

{      

   int i=0,j=5,h;                 

   char s[5];

   FILE *fp;               定义文件型指针变量

   system("cls");      //刷屏

   if((fp=fopen("d:车票管理系统0.dat","rb"))!=NULL)    //fopen打开文件

   { 

        printf("车票信息已经存在请选择增加功能!\n");

      printf("任意输入则返回菜单\n");

      scanf("%s",s);

      i=1;         //通过是1

   } 

   if(i==0)

   {              

      system("cls");    //刷屏

      printf("请输入要录入班次总数:\n");

      scanf("%d",&class_num);        //指向班次指针

      system("cls");    //刷屏

      for(i=0;i<class_num;i++)             

      { 

          system("cls");    //刷屏

          printf("请输入第%d个班次信息:\n",i+1);

          h=-1;

          for(;h!=i;)             ///循环输出

          {

             printf("请输入班次:\n");

             scanf("%s",records[i].num);

             for(h=0;h<i;h++)

                if(strcmp(records[h].num,records[i].num)==0)  

                   //判断字符串比较是否相等,, 待比较的字符串               

                {

                   printf("输入错误!该班次已存在!\n");

                   break;          ///返回

                }              

          }

          get(i,j);           修改及增加班次*

          j=5;        

      }

      save();           //调用保存函数

   } 

}

/*******************************显示所有函数********************************/

资料包括:

 

 

 需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。

纷传点击用微信打开即可,过程有点繁琐请见谅。

             

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js中map()的使用详解

引入&#xff1a; 有网友有如下困惑&#xff1a; map是数组的方法&#xff0c;有一个参数&#xff0c;参数是一个函数&#xff0c;函数中有3个参数 参数1&#xff1a;item必须。当前元素的值 参数2&#xff1a;index&#xff0c;可选。当前元素在数组中的索引值 参数3&#xff…

CentOS 7迁移Anolis OS 7 ——筑梦之路

迁移注意事项 Anolis OS 7生态上和依赖管理上保持跟CentOS7.x兼容&#xff0c;一键式迁移脚本centos2anolis.py&#xff0c;实现CentOS7.x到Anolis OS 7的平滑迁移。 使用迁移脚本前需要注意如下事项&#xff1a; 迁移涉及到软件包的重新安装&#xff0c;是不可逆过程&#…

BBR/CUBIC 共存时的 buffer 挤兑

BBR 与 CUBIC 共存时的收敛图&#xff0c;理论情况&#xff1a; 理论上 BBR 不会挤占 buffer&#xff0c;inflight 保持为恒定的 BDP。 但 BBR 的 inflight 做不到恒定&#xff0c;多流共存时&#xff0c;依然会 “主动占用 buffer” 而相互挤兑带宽&#xff0c;而该行为是必须…

java - 序列化

钱应该怎么花 前几天看到一个新闻&#xff0c;一女子打拼了5年攒了30万买房钱&#xff0c;最后因为意外被一场突如其来的大火烧了&#xff0c;经过多家银行&#xff0c;长达4小时的鉴定&#xff0c;挽回了15万损失。 还看到一个新闻&#xff0c;老人攒5000元钱遭虫蛀烂&#…

「Linux」400行纯C语言代码带你「手撕线程池」

线程池的基本概念 不管线程池是什么东西&#xff01;但是我们必须知道线程池被搞出来的目的就是&#xff1a;提高程序执行效率而设计出来的&#xff1b; 了解了线程池的目的后&#xff1a;我们就可以开始理解线程池&#xff1a; 首先回答一个问题&#xff1a;为什么会有线程…

python文件的读取

python文件的读取1.文件的读取1.read() 读取整个文件2.readline() 每次读取一行文件3. readlines() 读取文件的所有行2.文件的写入1.以"x"方式打开文件2.以"a"方式打开文件3.以"w"方式打开文件3.文件的删除4.Excel表数据的读取1.直接读取2.通过p…

SQL Server2019配置always on高可用图文步骤

准备工作 首先需要准备好Windows Server上的故障转移群集&#xff0c;步骤可以参考上一篇。 https://blog.csdn.net/u012869793/article/details/127560270?spm1001.2014.3001.5501 然后服务器上安装好SqlServer&#xff0c;我这里安装的是2019。 正文 勾选启用Always ON可…

牛客竞赛每日俩题 - Day7

目录 经典01背包问题 二叉树遍历与构造&#xff08;考研重点&#xff09; 经典01背包问题 求正数数组的最小不可组成和_百度笔试题_牛客网 参考大佬题解&#xff1a; 动态规划&#xff1a;01背包问题(无物品价值)&#xff0c;思想相同&#xff0c;题目最终要求有些变化 min为…

【机器人定位引导中的机器视觉技术】

文章目录手眼标定原理手眼标定流程定位引导1、单相机抓取定位引导2、单相机纠偏定位引导3、上下相机对位引导随着工业生产中对自动化的要求越来越高&#xff0c;视觉技术已被广泛引入工业机器人行业&#xff0c;具备视觉的工业机器人能更快、更准、更灵活地完成定位抓取、对位组…

Linux系统 (三)- 权限介绍

~~~~前言命令行解释器 -- Command Line Interpreter ShellLinux操作系统命令行解释器对命令行解释器的初步认识命令行解释器的意义shell分类命令行解释器 CLI Shell图形界面 GUI ShellLinux权限Linux中用户分类su基本语法sudo基本语法配置操作权限管理权限是什么文件分类文件属…

【一起学数据结构与算法】计数排序、基数排序、桶排序(含菜鸟教程代码)

目录前言一、计数排序1.1 排序思想1.2 代码1.3 菜鸟教程官方代码(搬运)二、基数排序2.1 排序思想2.2 代码2.3 菜鸟教程官方代码(搬运)三、桶排序3.1 排序思想3.2 代码3.3 菜鸟教程官方代码(搬运)前言 之前我们学过了几种常见的排序&#xff0c;都是基于比较的排序&#xff0c;…

ES6中扩展对象的功能性

对象是JavaScript编程的核心&#xff0c;ECMAScript6为对象提供了许多简单易用且更加灵活的新特性。 ECMAScript 6在对象字面量的基础上做出了以下几个变更&#xff1a; 简化属性定义语法&#xff0c;使将当前作用域中的同名变量赋值给对象的语法更加简洁 function createPe…

【MySQL】MySQL基本操作详解

系列文章目录 第1篇&#xff1a;【MySQL】MySQL介绍及安装 第2篇&#xff1a;【MySQL】MySQL基本操作详解 文章目录 ✍1&#xff0c;数据库操作     &#x1f50d;1.1,查看数据库     &#x1f50d;1.2,创建数据库     &#x1f50d;1.3,选择数据库     &…

Kubernetes基础_02_Pod全解析

系列文章目录 文章目录系列文章目录前言一、Pod的生命周期Lifecycle二、Pod的重启策略RestartPolicy三、静态Pod四、Pod的健康检查总结前言 Pod是Kubernetes最小单位&#xff0c;当然一个Pod可以有多个Container&#xff0c;但是container是docker的元素&#xff0c;不是Kuber…

CTFHub | 布尔盲注

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

无限题库公众号系统搭建

无限题库公众号系统搭建 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;…

《设计模式:可复用面向对象软件的基础》——行为模式(笔记)

文章目录五、行为模式5.1 CHAIN OF RESPONSIBILITY(职责链)1.意图2.动机3.适用性4.结构5.参与者6.协作7.效果8.实现9.代码示例10.相关模式5.2 COMMAND&#xff08;命令&#xff09;1.意图2.别名3.动机4.适用性5.结构6.参与者.7.协作8.效果9.实现10.代码示例11.相关模式5.3 INTE…

CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录

很高兴和大家在这里分享我的最新专栏 Pytorch深度学习理论篇(2023版)&#xff0c;恭喜本博客浏览量达到两百万&#xff0c;CSDN内容合伙人&#xff0c;CSDN人工智能领域实力新星~ 0 Pytorch深度学习理论篇实战篇(2023版)大纲 1 Pytorch深度学习理论篇实战篇(2023版)专栏地址&…

嵌入式应用-详解移植并使用freetype显示文字

目录 前言 1. freetype和相关概念简介 2.freetype显示文字流程和主要函数 2.1 包含头文件及API头文件&#xff1a;ft2build.h 2.2 初始化&#xff1a; FT_InitFreetype 2.3 加载&#xff08;打开&#xff09;字体Face&#xff1a; FT_New_Face 2.4 设置字体大小&#x…