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

这是好久之前写的一个火车售票系统, 写的非常粗糙, 后来也没改了, 希望遇见有缘人继续优化吧。

主要的功能是:设置车次,删除车次, 买票, 改签, 退票, 查询等。

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#include<conio.h>
#define MAXNUM 10000
#define Num 100
typedef struct train
{
 int Train_num;//火车编号
 char Train_end[10];//终点站
 int Train_price;//票价
 int leftnum;//余票数量
}Train_Ticket;
typedef struct person{
 int mark;//标记
 int snum;//身份号码
 char sex[10];//买票人性别
 //char Train_start[8];
 char name[10];//买票人姓名
}Person;
typedef struct node
{
 Train_Ticket data[MAXNUM];
 int len;
}SeqList;
Person pa1[Num],pa2[Num];
void init_Seqlist(SeqList*);
void Sale(SeqList*,FILE*);
void Withdraw(FILE*);
void Inquiry(SeqList*);
void Select(SeqList*,FILE*);
void Delete(SeqList*);
void Init(SeqList*,struct train t);
void Input(SeqList*);
void Exchange(SeqList*,FILE *fp);
int main()
{
 SeqList*q;
 FILE *fp;
 fp=fopen("train.dat","wb");
 q=(SeqList*)malloc(sizeof(SeqList));
 int sel;
 Input(q);
 system("cls");
 system("color 3f");//改变颜色
 system("cls");
 while(1){
 printf("-------------------------------------\n");
 printf("-----Welcome to YaiTai trainstation--\n");
 printf("1-- Set Tickets     --");//初始化
 printf("\n2-- Book Ticket     --");//买票
 printf("\n3-- Exchange Ticket    --");//改签
 printf("\n4-- Withdraw Ticket    --");//退票
 printf("\n5-- Delete Ticket    --");//删除车次
 printf("\n6-- Select Ticket    --");//查询
 printf("\n7-- Inquiry      --");//
 printf("\n8-- Exit      --");//退出
 printf("\n-------------------------------------");
 printf("\nPlease input your choice:");
 scanf("%d",&sel);
 getchar();
 switch(sel)
 {
  case 1:
   init_Seqlist(q); break;
  case 2:
   if(q->len==0)
   {
    printf("------------------\n");
    printf(" No tickets!\n");
    printf("------------------\n");break;
   }else{
    Sale(q,fp); break;
   }
  case 3:
   Exchange(q,fp); break;
  case 4:
   Withdraw(fp);break;
  case 5:
   Delete(q); break;
  case 6:
   Select(q,fp); break;
  case 7:
   Inquiry(q);break;
  case 8:
   printf("------------------------------\n");
   printf("---Thank you for your use!---\n");
   printf("------------------------------\n");
   exit(1);
 default : printf("Enter error!!\n");
 }

 printf("请按ENTER返回主菜单\n");
 getchar();

 }
 return 0;
}
void Input(SeqList*L)
{
 int i;
 struct train tra[5]={{206,"beijing",200,20},
      {301,"chengdu",350,20},
      {432,"shangha",400,20},
      {783,"qingdao",175,20},
      {312,"hangzho",480,20}
      };
 for(i=0;i<5;i++)
 Init(L,tra[i]);
}
void Init(SeqList*L,struct train t)
{
 int i=L->len;
 L->data[i].Train_num=t.Train_num;
 strcpy(L->data[i].Train_end,t.Train_end);
 L->data[i].Train_price=t.Train_price;
 L->data[i].leftnum=t.leftnum;
 L->len++;
}
void init_Seqlist(SeqList*L)
{
 int i,d,n;
 d=L->len;
 printf("-------------车次设置-------------\n");
 printf("请输入你想设置的车次数量: ");
 scanf("%d",&n);
 for(i=d;i<d+n;i++){
  printf("请输入车次编号:");
  scanf("%d",&L->data[i].Train_num);
  printf("请输入车次终点站:");
  scanf("%s",&L->data[i].Train_end);
  printf("请输入设置的票价:");
  scanf("%d",&L->data[i].Train_price);
  printf("请输入余票的数量:");
  scanf("%d",&L->data[i].leftnum);
  L->len++;
  if((L->len)>1&&i<(L->len-1))
  {
   printf("请输入下班车次信息\n");
  }
 }
 printf("Initiation finish!\n");
}
void Sale(SeqList*L,FILE *fp)
{
 int i=0,k,a,j;
 if((fp=fopen("train.dat","ab+"))==NULL)
 {
  printf("Cannot open file!\n");
  exit(1);
 }
 printf("------------买票服务------------\n");
 printf("请输入你想购置车票数:\n");
 scanf("%d",&a);
 if(a>1){
  printf("请分别输入%d名乘客信息\n",a);
 }
  else if(a<=1)
 {
  printf("请输入该名乘客信息\n");
 }
  for(i=0;i<a;i++)
  {
   printf("请先输入你的姓名:");
   scanf("%s",&pa1[i].name);
   printf("请选择性别<男>F<女>M:");
   scanf("%s",&pa1[i].sex);
   do{
   if(strcmp(pa1[i].sex,"F")!=0 && strcmp(pa1[i].sex,"M")!=0){
  printf("性别输入错误!请重新输入!\n");
   scanf("%s",&pa1[i].sex);
 }
 }while(strcmp(pa1[i].sex,"F")!=0 && strcmp(pa1[i].sex,"M")!=0);
   printf("请先输入你的身份证号码:");
   scanf("%d",&pa1[i].snum);
  }
 Inquiry(L);
 for(j=0;j<a;j++){
 printf("\nPlease input the Train_number you want to book(1~%d):");
 scanf("%d",&k);
 char answer[10];
 for(i=0;i<L->len;i++){
  if(k==L->data[i].Train_num){
   pa1[j].mark=i;//标记点位
   printf("确定选择购买 %d 车次的列车吗(yes or no)\n",L->data[i].Train_num);
   scanf("%s",&answer);
   do
   {
    if(strcmp(answer,"yes")!=0){
    printf("你的输入有误,请重新输入!\n");
    scanf("%s",&answer);
    }
   }while(strcmp(answer,"yes")!=0);
   if(strcmp(answer,"yes")==0){
    printf("你已支付该车票的价格%d元\n",L->data[i].Train_price);
    L->data[i].leftnum--;
  }else if(strcmp(answer,"no")==0){
    printf("请重新选择你要购买的车次编号\n");
  }
 }
 }
 printf("Tickets purchased success!\n");
 }
 for(i=0;i<a;i++)
  //printf("%d\n",pa1[i].mark);
 fwrite((void*)pa1,sizeof(Person),a,fp);
 fclose(fp);
}
void Delete(SeqList*L)
{
  int n,i,true=0;
  SeqList*q;
  q=(SeqList*)malloc(sizeof(SeqList));
  printf("\n--------------按照车次编号删除车次-------------\n");
  printf("请输入要删除的车次编号\n");
  scanf("%d",&n);
  for(i=0;i<L->len;i++){
  if(L->data[i].Train_num==n)
  {
   true=1;
   if(i<L->len-1)
   {
    L->data[i].Train_num=L->data[i+1].Train_num;
    L->data[i].Train_price=L->data[i+1].Train_price;
    L->data[i].leftnum=L->data[i+1].leftnum;
    strcpy(L->data[i].Train_end,L->data[i+1].Train_end);L->len--;
    printf("--------------------\n");
    printf("--已删除该车次信息--\n");
    printf("--------------------\n");
   }
   if(i==L->len-1)
   {
    L->len--;
    printf("--------------------\n");
    printf("--已删除该车次信息--\n");
    printf("--------------------\n");
   }
  }
  }
  if(true==0)
  {
   printf("No this ticket numbers!\n");
  }
}
void Select(SeqList*L,FILE *fp)
{
 SeqList*q;
 q=(SeqList*)malloc(sizeof(SeqList));
 int i,a,b,true=0;
 printf("-------------------查询服务-------------\n");
 printf("----------------------------------------\n");
 printf("1.按乘客的名称查询  2.按乘客证件号查询\n");
 printf("---------------------------------------\n");
 if((fp=fopen("train.dat","rb+"))==NULL)
  {
   printf("Canot open file !\n");
  }
 fseek(fp,0L,SEEK_END);
 int d=ftell(fp)/sizeof(Person);
 rewind(fp);
 fread((void*)&pa2,sizeof(Person),d,fp);
 scanf("%d",&a);
 switch(a)
 {
 case 1:
 {
  char na[20];
  printf("请输入该乘客的姓名:\n");
  scanf("%s",&na);
  for(i=0;i<d;i++)
  {
  if(strcmp(pa2[i].name,na)==0){
  b=pa2[i].mark;
  true=1;
  printf("-------------%s的车次信息-------\n",pa2[i].name);
  printf("始发站:Yantai  终点站:%s\n",L->data[b].Train_end);
  printf("第%d号列车   票价: %d\n",L->data[b].Train_num,L->data[b].Train_price);
  printf("乘客姓名:%s\n",pa2[i].name);
  printf("乘客证件信息:%d\n",pa2[i].snum);
  printf("---------------------------------\n");
  }
  }
 }
 break;
 case 2:
  {
   int w;
   printf("请输入你的证件号:\n");
   scanf("%d",&w);
   for(i=0;i<Num;i++)
   {
   if(pa1[i].snum==w)
   {
    b=pa2[i].mark;
    printf("-------------%s的车次信息-------\n",pa2[i].name);
    printf("始发站:Yantai  终点站:%s\n",L->data[b].Train_end);
    printf("第%d号列车   票价: %d\n",L->data[b].Train_num,L->data[b].Train_price);
    printf("乘客姓名:%s\n",pa2[i].name);
    printf("乘客证件信息:%d\n",pa2[i].snum);
    printf("---------------------------------\n");
   }
   }
  }break;
 default:
  printf("------------------------------\n");
  printf("--你的输入有误,请重新输入!--\n");
  printf("------------------------------\n");
  Select(q,fp);
  break;
 }
 if(true==0)
 {
  printf("没有该乘客的信息!\n");
 }
fclose(fp);
 //getchar();
}
void Exchange(SeqList*L,FILE *fp)
{
 printf("------------改签服务-----------\n");
 printf("请输入你的姓名:\n");
 char ta[10];
 if((fp=fopen("train.dat","rb+"))==NULL)
  {
   printf("Canot open file !\n");
  }
  Person p[Num];
 fseek(fp,0L,SEEK_END);
 int r=ftell(fp)/sizeof(Person);
 rewind(fp);
 fread((void*)&p,sizeof(Person),r,fp);
 int m,i,d,j,y,h;
 scanf("%s",&ta);
 for(i=0;i<r;i++)
 {
   if(strcmp(p[i].name,ta)==0){
   d=p[i].mark;
   printf("你目前的目的地是%s站\n",L->data[d].Train_end);
   L->data[d].leftnum++;
  }
 }
 Inquiry(L);
 printf("请重新输入你想去的目的地的车次编号:");
 scanf("%d",&m);
 for(j=0;j<L->len;j++)
 {
  if(m == L->data[j].Train_num)
  {
   L->data[j].leftnum--;
   printf("-------------------------\n");
   printf("---你的改签服务已完成!--\n");
   printf("-------------------------\n");
   d=j;
  }
 }
  for(i=0;i<r;i++)
 {
   if(strcmp(p[i].name,ta)==0){
   p[i].mark=d;
   h=i;
  }
 }
 fseek(fp,h*sizeof(Person),SEEK_SET);
 fwrite((void*)&p,sizeof(Person),1,fp);
 fclose(fp);
}
void Withdraw(FILE *fp)
{
  printf("----------退票服务-------\n");
  char na[10];
  printf("请输入你的姓名:\n");
  scanf("%s",&na);
  Person *pe;
  int i,j;
  if((fp=fopen("train.dat","rb"))==NULL)
  {
   printf("The file cannot be opened!\n");
  }
  fseek(fp,0L,SEEK_END);
  int n=ftell(fp)/sizeof(Person);
  if(n==1)
  {
   fclose(fp);
   fp=fopen("train.dat","wb");
  }
  pe=(Person*)malloc(sizeof(Person)*(n-1));
  rewind(fp);
  for(j=i=0;i<n;i++)
  {
   fread((void*)(pe+j),sizeof(Person),1,fp);
   if((strcmp((pe+j)->name,na))==0)
   continue;
   j++;
  }
  fclose(fp);
  fp=fopen("train.dat","wb");
  fwrite((void*)pe,sizeof(Person),n-1,fp);
  printf("-------------------------\n");
  printf("---你的退票服务已完成!--\n");
  printf("-------------------------\n");

}
void Inquiry(SeqList*L)
{
 int i;
 if(L->len==0)
 {
  printf("No ticket left!\n");
 }
 else
 {
  printf("----------------------------Tickets information----------------------\n");
  printf("火车车次编号   车 次 路 线   车票售价   剩余票数 ");
  for(i=0;i<L->len;i++){
  printf("\n %d     Yantai--%s    %d     %d\n",L->data[i].Train_num,L->data[i].Train_end,L->data[i].Train_price,L->data[i].leftnum);
  printf("---------------------------------------------------------------------\n");
  }
 }
}

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

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

(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语言通讯录管理系统完整版

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

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

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

  • 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语言实现飞机订票系统

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

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

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

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

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

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

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

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

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

  • 纯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语言实现飞机售票系统的具体代码,供大家参考,具体内容如下 一.项目简介 通过“航空售票系统”C语言课程设计的实践,掌握函数.数据的读取和存储.熟练链表的操作,为后期学习打下基础. 二.任务概述 (1) 将飞机坐位分为20排,每排4个位子.(2) 系统可让乘客自己选座号和区域,直到乘客满意为止.(3) 若无法满足的话,改乘另一个航班.(4) 定上票的乘客需给出姓名和身份证号.(5) 要求打印出乘客信息. 三.功能展示 四.思维导图 五.程序源码 #include <stdio

  • Java多线程之火车售票系统

    Java多线程之火车售票(Thread和Runnable的区别) java中实现多线程的方式有两种 继承Thread类 实现Runnable接口 继承了Thread类的类,使用对象.start()启动线程 实现了Runnable类的类,使用new Thread(new Runnable的实现类()).start()启动 下面有个经典例子,很适合用实现Runnable接口的类去实现. 火车售票问题简单分析: 1.票数是共用的,不能将一张票买多次.  2.同时有多个售票点在出售车票,即有多个线程存在

  • java多线程之火车售票系统模拟实例

    1.前言 为了学习多线程共享与通信,我们模拟一个火车售票系统,假设有10张火车票,三个窗口(也就是三个线程)同时进行售票. 2.非同步代码 package com.tl.skyLine.thread; /** * Created by tl on 17/3/6. */ public class SellTicket { public static void main(String[] args) { TicketWindow tw = new TicketWindow(); Thread t1

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

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

  • 纯c语言优雅地实现矩阵运算库的方法

    目录 1.一个优雅好用的c语言库必须满足哪些条件 2.实现一个矩阵运算库的几点思考 (1)采用预定义的数据类型,避免直接使用编译器定义的数据类型 (2)基于对象编程,定义矩阵对象 (3)除了特别编写的内存处理函数(使用栈链表保存.释放动态分配的内存地址),不允许任何函数直接分配和释放内存 (4)防御性编程,对输入参数做有效性检查,并返回错误号 (5)注意编程细节的打磨 3.完整c程序 参考资料 编程既是技术输出也是艺术创作.鉴赏高手写的程序,往往让人眼前一亮,他们思路.逻辑清晰,所呈现的代码简洁

  • C语言实现影院售票管理系统

    本文实例为大家分享了C语言实现影院售票管理系统的具体代码,供大家参考,具体内容如下 前言 最近刚好在写自己的课设,匆匆忙忙写出来的课设系统,仍有不足,拿出来和大家分享一下,希望能对大家有帮助. 一.概要设计 1.基本信息 数据类型:链表 typedef struct node {     char name[N];                  // 名称     char type[N];                  // 类型     int time;              

  • Python使用面向对象方式创建线程实现12306售票系统

    目前python 提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 数据成员:类变量或者实例变量用于

随机推荐