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

任务要求:

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

(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();           //调用保存函数

   } 

}

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

资料包括:

 

 

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

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

             

  • 19
    点赞
  • 148
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
以下是一个简单的车票管理系统的 C 代码示例,实现了录入班次信息、增加班次数据、浏览班次信息和显示班次状态的功能。班次信息存储在一个文本文件中,每行记录一个班次的信息,包括班次号、起点、终点、发车时间和票价等。具体实现细节可以根据需要进行修改和完善。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_LINE_LEN 100 #define MAX_SCHEDULES 100 struct Schedule { char number[20]; char from[20]; char to[20]; char time[20]; int price; }; // 读取班次信息 int read_schedules(struct Schedule schedules[]) { FILE *fp = fopen("schedules.txt", "r"); if (fp == NULL) { printf("failed to open file schedules.txt\n"); return 0; } int count = 0; char line[MAX_LINE_LEN]; while (fgets(line, MAX_LINE_LEN, fp) != NULL) { if (count >= MAX_SCHEDULES) { printf("maximum number of schedules reached\n"); break; } sscanf(line, "%s %s %s %s %d", schedules[count].number, schedules[count].from, schedules[count].to, schedules[count].time, &schedules[count].price); count++; } fclose(fp); return count; } // 保存班次信息 void save_schedules(struct Schedule schedules[], int count) { FILE *fp = fopen("schedules.txt", "w"); if (fp == NULL) { printf("failed to open file schedules.txt\n"); return; } for (int i = 0; i < count; i++) { fprintf(fp, "%s %s %s %s %d\n", schedules[i].number, schedules[i].from, schedules[i].to, schedules[i].time, schedules[i].price); } fclose(fp); } // 增加班次信息 void add_schedule(struct Schedule schedules[], int *count) { if (*count >= MAX_SCHEDULES) { printf("maximum number of schedules reached\n"); return; } printf("enter schedule number: "); scanf("%s", schedules[*count].number); printf("enter from: "); scanf("%s", schedules[*count].from); printf("enter to: "); scanf("%s", schedules[*count].to); printf("enter time (YYYY-MM-DD HH:MM): "); scanf("%s", schedules[*count].time); printf("enter price: "); scanf("%d", &schedules[*count].price); (*count)++; save_schedules(schedules, *count); } // 浏览班次信息 void view_schedules(struct Schedule schedules[], int count) { printf("schedule number\tfrom\tto\ttime\tprice\n"); for (int i = 0; i < count; i++) { printf("%s\t\t%s\t%s\t%s\t%d\n", schedules[i].number, schedules[i].from, schedules[i].to, schedules[i].time, schedules[i].price); } } // 显示班次状态 void show_schedule_status(struct Schedule schedule) { struct tm now = *localtime(&(time_t){time(NULL)}); struct tm time = {0}; sscanf(schedule.time, "%d-%d-%d %d:%d", &time.tm_year, &time.tm_mon, &time.tm_mday, &time.tm_hour, &time.tm_min); time.tm_year -= 1900; time.tm_mon--; time_t now_t = mktime(&now); time_t time_t = mktime(&time); if (now_t >= time_t) { printf("schedule %s has departed\n", schedule.number); } else { printf("schedule %s is scheduled to depart at %s\n", schedule.number, schedule.time); } } int main() { struct Schedule schedules[MAX_SCHEDULES]; int count = read_schedules(schedules); if (count == 0) { return 1; } int choice; do { printf("\n1. add schedule\n2. view schedules\n3. show schedule status\n0. exit\n"); printf("enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: add_schedule(schedules, &count); break; case 2: view_schedules(schedules, count); break; case 3: printf("enter schedule number: "); char number[20]; scanf("%s", number); for (int i = 0; i < count; i++) { if (strcmp(schedules[i].number, number) == 0) { show_schedule_status(schedules[i]); break; } if (i == count - 1) { printf("schedule not found\n"); } } break; case 0: break; default: printf("invalid choice\n"); break; } } while (choice != 0); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白茶丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值