火车购票系统 c++ 面向对象 控制台

​​​​​

 

网上银行系统

望采纳,谢谢

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