当前位置:首页 > 芯闻号 > 充电吧
[导读]要求:火车订票系统要求:1、用户注册功能注册新用户,输入用户名密码。2、用户名检测,用户名重复,重新注册。3、用户注册成功。用户登录检测用户名和密码是否正确,正确,登录成功,否则失败。后台管理列车信息

要求:

火车订票系统

要求:

1、用户注册功能

注册新用户,输入用户名密码。

2、用户名检测,用户名重复,重新注册。

3、用户注册成功。

用户登录

检测用户名和密码是否正确,正确,登录成功,否则失败。

后台管理

列车信息录入

4、列车时刻表查询

车次查询

    输入车次,列出本次车所有到站及价格 

 

发到站查询

 输入发站

 输入到站

 列出所有车次及价格

订票功能

    输入发车站

    输入到站

    列出所有车次,同时显示车上是否有票

订票,显示座位号

    订票成功

    订票信息记入个人账户


//  main.c
//  TrainTicketSystem
//
//  Created by xiaobai on 15/7/21.
//  Copyright (c) 2015年 xiaobaiyige. All rights reserved.
//
#include "ticket_data.h"
int main(int argc, const char * argv[])
{
    int m_s;
    int n_s;
    int k_s=0;
    system_init();
    while (1)
    {
        m_s=show_main_menu(k_s);
        k_s=m_s;
        getchar();
        switch (m_s)
        {
            case 1:
                usr_regester();
                break;
            case 2:
                if(usr_load()==1)
                {
                    int cc;
                    printf("请选择你要的服务选项:n");
                    printf("1.去订票.n");
                    printf("2.查看自己的订票信息.n");
                    scanf("%d",&cc);
                    switch (cc) {
                        case 1:
                            k_s=m_s=5;
                            break;
                        case 2:
                            show_booked();
                            break;
                        default:
                            break;
                    }
                    
                }
                break;
            case 3:
                back_manage();
                break;
            case 4:
                printf("请选择查询方式:n");
                printf("1.查区间.n");
                printf("2.查车次.n");
                printf("3.看所有车次.n");
                scanf("%d",&n_s);
                switch (n_s)
                {
                    case 1:
                        find_t();
                    break;
                    case 2:
                        find_t2();
                        break;
                    case 3:
                        show_train();
                        break;
                    default:
                        break;
                }
                break;
            case 5:
                book_ticket();
                break;
            case 6:
                exit(0);
            default:
                break;
        }
    }
}


//  ticket_data.c
//  TrainTicketSystem
//
//  Created by xiaobai on 15/7/22.
//  Copyright (c) 2015年 xiaobaiyige. All rights reserved.
//
#include "ticket_data.h"
LOAD_FLAG L_F;
usr uu;//保存读取的信息;

int my_fwrite(char *filename,char *write_str,char *model)//进行一次讲 write_str以model模式写入到filename里面
{
    FILE*fp=NULL;
    if((fp=fopen(filename, model))!=NULL)
    {
        fwrite(write_str,sizeof(write_str),1,fp);
        fclose(fp);
        return 0;//写入成功
    }
    else
        return -1;
}
int my_fread(char *filename,char *read,char *model)//进行一次读取filename里面的内容到 read里面,模式是model
{
    FILE *fp=NULL;
    if ((fp=fopen(filename, model))!=NULL)
    {
        fread(read,sizeof(read),1, fp);
        fclose(fp);
        return 0;
    }
    else return -1;
}
int check_account(char *str_name)
{
    FILE *fp=NULL;
    if ((fp=fopen(str_name, "r"))==NULL) {
        return 1;//文件不存在,代表用户名可以注册
    }
    else
    {
        fclose(fp);
        return 0;//表示文件已经存在用户名不可注册
    }
    
}
void usr_regester()//新用户注册函数
{
    usr new_user;
    FILE *fp=NULL;
    printf("请输入需要注册的用户名:n");
    scanf("%s",new_user.name);
    if (check_account(new_user.name))
    {
        printf("恭喜你,账号可以使用,请输入密码:n");
        scanf("%s",new_user.pass);
        new_user.has_booked=0;
        if((fp=fopen(new_user.name, "wb"))!=NULL)
        {
            fwrite(&new_user, sizeof(usr), 1, fp);
            fclose(fp);
            printf("注册新用户成功:n");
            printf("你的用户名是:%s,请牢记n",new_user.name);
            return ;
        }
        else
        {
            printf("创建新用户失败.文件写入错误.");
            return ;
        }
    }
    else
    {
        printf("注册的用户名已经存在请重新注册:n");
        return ;
    }
}
int show_main_menu(int last)
{
    int n=0;
    static int p_s=0;
    if (p_s==last) {
        while (1)
        {
            printf("请输入你所需要的服务编号n");
            printf("1:注册新的用户.n");
            printf("2:用户登录.n");
            printf("3:后台管理.n");
            printf("4:车次时刻表查询.n");
            printf("5:预定车票.n");
            printf("6:退出.n");
            scanf("%d",&n);
            if (n>=1&&n<=6)
            {
                p_s=n;
                return n;
            }
            else
            {
                printf("请重新输入n");
            }
        }

    }
    else{
        return last;
    }
}
int usr_load()
{
    usr u;
    FILE*fp=NULL;
    printf("请输入用户名:n");
    scanf("%s",u.name);
    int times=0;//用来计算密码剩余输入次数
    if (check_account(u.name)==0)//用户名存在
    {
        fp=fopen(u.name, "rb");
        fread(&uu, sizeof(usr), 1, fp);
        fclose(fp);
        while(times<3)//3次密码输入错误后退出
        {
            printf("请输入密码:n");
            scanf("%s",u.pass);
            if (strcmp(u.pass, uu.pass)==0)
            {
                printf("密码输入正确,登录成功:n");
                L_F.flag=1;//给系统用户标志位赋值为1
                L_F.load_usr=&uu;//
                return 1;
            }
            else
            {
                times++;
                printf("密码输入错误,请重新输入,还有%d次机会:n",3-times);
            }
        }
        return 0;
    }
    else//用户名不存在
    {
        printf("你输入的用户不存在.n");
        return -1;
    }
}
void system_init()
{
    char r_p[10];
    FILE *fp=NULL;
    if((fp=fopen("root", "rb"))==NULL)
    {
        printf("这是本系统第一次使用,请输入root密码,用来管理车次信息n");
        scanf("%s",r_p);
        getchar();//获取自己刚刚输入的回车
        fp=fopen("root", "wb");
        fwrite(r_p, sizeof(r_p), 1, fp);
        fclose(fp);
        printf("系统初始化成功,请牢记密码.n");
    }
}
void back_manage()
{
    char s[10];
    int i=0;
    int j;
    int n;//输入车次的总数
    char s2[10];//密码的保留
    int times=0;//密码输入次数统计
    TRAINS tt,t2;//保存和车次处理相关的问题
    FILE *fp,*fp2;
    int t_sum;
    printf("请输入root密码n");
    if (my_fread("root", s2, "rb")==0)
    {
        scanf("%s",s);
        while (times<3)
        {
            if (strcmp(s2, s)==0)
            {
               printf("密码输入正确,请输入车次信息:n");
               printf("请输入要输入的车次的个数:n");
               scanf("%d",&n);
               tt.all_sum=n;//所有的车的数目
               getchar();
                for(i=1;i<=n;i++)
                {
                    printf("请输入第%d次列车中途站的数目和车次的名称:n",i);
                    scanf("%d %s",&tt.all_t[i].sum,tt.all_t[i].name);
                    getchar();
                    printf("下面请依次输入%s车次的%d个站的时间,价格和名称n",tt.all_t[i].name,tt.all_t[i].sum);
                    for (j=1; j<=tt.all_t[i].sum; j++)
                    {
                        scanf("%s %lf %s",tt.all_t[i].t[j].time,&tt.all_t[i].t[j].price,tt.all_t[i].t[j].name);
                        getchar();
                    }
                    init_pos(tt.all_t[i].pos);//初始化车票信息
                }
                fp=fopen("trains.txt", "wb");
                fwrite(&tt, sizeof(TRAINS), 1, fp);
                fclose(fp);
                printf("信息已经记录.n");
                fp2=fopen("trains.txt", "rb");
                fread(&t2, sizeof(TRAINS), 1, fp);
                fclose(fp2);
                for (i=1; i<=t2.all_sum; i++)
                {
                    t_sum=tt.all_t[i].sum;
                    printf("%d %s %s %s %sn",
                           i,
                           t2.all_t[i].name,
                           t2.all_t[i].t[1].name,
                           t2.all_t[i].t[t_sum].name,
                           t2.all_t[i].t[1].time);
                }
                 break;
            }
            else
            {
                times++;
                printf("密码输入错误,还有%d次机会n",3-times);
            }
        }
        
    }else
    {
        printf("root文件损坏n");
    }
}
void show_train()
{
    TRAINS t2;
    FILE *fp;
    fp=fopen("trains.txt","rb");
    fread(&t2,sizeof(TRAINS),1,fp);
    fclose(fp);
    int i=0;
    int t_sum;//临时保存一个车次的站数
    printf("******下面是车次信息*********n");
    printf("序号:   车次      始发站       终点站       发车时间n");
    for (i=1; i<=t2.all_sum; i++)
    {
        t_sum=t2.all_t[i].sum;
        printf("%2d    %5s     %-12s%-12s   %sn",
               i,
               t2.all_t[i].name,
               t2.all_t[i].t[1].name,
               t2.all_t[i].t[t_sum].name,
               t2.all_t[i].t[1].time);
    }
}
void find_t()
{
    char s[10];
    char e[10];
    printf("请输入出发站和终点站:n");
    scanf("%s %s",s,e);
    TRAINS t_t;
    int i,j;
    int s_i=0;
    int s_j=0;
    FILE *fp;
    int count=1;
    fp=fopen("trains.txt", "rb");
    printf("序号  车次  上车时间  下车时间  余票  价格n");
    if(fp!=NULL)
    {
        fread(&t_t, sizeof(TRAINS), 1, fp);
        fclose(fp);
    }
    for (i=1; i<=t_t.all_sum; i++)//列车车次
    {
        for (j=1; j<=t_t.all_t[i].sum; j++)//列车的站
        {
            if(strcmp(s,t_t.all_t[i].t[j].name)==0)//始发站
            {
                s_i=j;
            }
            if (strcmp(e,t_t.all_t[i].t[j].name)==0) {//终点站
                s_j=j;
            }
            if (s_i<s_j)
            {
                printf("%-2d   %-6s  %-6s  %-6s %-4d %.2fn",
                       count,//序号
                       t_t.all_t[i].name,//车次
                       t_t.all_t[i].t[s_i].time,//上车时间
                       t_t.all_t[i].t[s_j].time,//下车时间
                       t_t.all_t[i].pos[s_i][s_j],
                       t_t.all_t[i].t[s_j].price-t_t.all_t[i].t[s_i].price);//价格
                s_i=s_j=0;
                break;
            }
        }
        count++;
    }
    if (count==1) {
        printf("该区间内没有满足条件的车次n");
    }
}
void find_t2()
{
    TRAINS t_t;
    char train_name[10];
    printf("请输入车次:n");
    scanf("%s",train_name);
    int i,j=0;
    int flag=0;
    FILE *fp;
    fp=fopen("trains.txt", "rb");
    fread(&t_t, sizeof(TRAINS), 1, fp);
    fclose(fp);
    for (i=1; i<=t_t.all_sum; i++) {
        if (strcmp(train_name,t_t.all_t[i].name)==0)
        {
            flag=1;
            printf("列车次%s信息如下:n",t_t.all_t[i].name);
            printf("序号    站名      时间     价钱n");
            for (j=1; jt_sum[L_F.load_usr->has_booked].t_name);
        fp=fopen("trains.txt", "rb");
        if (fp==NULL) {
            printf("文件打开错误.n");
            exit(0);
        }
         fread(&t_t, sizeof(TRAINS), 1, fp);
         fclose(fp);
         for (i=1; it_sum[L_F.load_usr->has_booked].t_name,t_t.all_t[i].name)==0)
           {
             printf("请输入你的乘车区间起始站和终点站:n");
             scanf("%s %s",L_F.load_usr->t_sum[L_F.load_usr->has_booked].s_to_e.s_station,
                 L_F.load_usr->t_sum[L_F.load_usr->has_booked].s_to_e.e_station);
              for (j=1; jt_sum[L_F.load_usr->has_booked].s_to_e.s_station,t_t.all_t[i].t[j].name)==0)//始发站
                  {
                      s_i=j;
                  }
                  if (strcmp(L_F.load_usr->t_sum[L_F.load_usr->has_booked].s_to_e.e_station,t_t.all_t[i].t[j].name)==0) {//终点站
                      s_j=j;
                  }
                  if (s_i < s_j)
                  {
                      if (t_t.all_t[i].pos[s_i][s_j]t_sum[L_F.load_usr->has_booked].price=
                      t_t.all_t[i].t[s_j].price-t_t.all_t[i].t[s_i].price;
                      
                      pos_num=rand()%100+1;
                      srand((unsigned)time(NULL));
                      while (!(check_if_sell(t_t.all_t[i].pos_num,pos_num,100-t_t.all_t[i].pos[s_i][s_j]))) {
                          pos_num=rand()%100+1;
                      }
                      L_F.load_usr->t_sum[L_F.load_usr->has_booked].p_pos=pos_num;
                      
                      //随机生成一个不重复的座位号
                      update_ticket(t_t.all_t[i].pos,s_i,s_j);//更新余票的信息
                      if((fp=fopen("trains.txt", "wb"))!=NULL)
                      {
                          
                          fwrite(&t_t, sizeof(TRAINS), 1, fp);
                          fclose(fp);
                      }
                      printf("你已经订票成功,信息如下:n");
                      printf("车次    上车时间    下车时间    上车站    下车站   价格   座位号:n");
                      printf("%-4s  %-8s  %-8s %-8s  %-8s %.2f   %dn",
                             t_t.all_t[i].name,//车次
                             t_t.all_t[i].t[s_i].time,//上车时间
                             t_t.all_t[i].t[s_j].time,//下车时间
                             t_t.all_t[i].t[s_i].name,
                             t_t.all_t[i].t[s_j].name,
                             t_t.all_t[i].t[s_j].price-t_t.all_t[i].t[s_i].price,
                             L_F.load_usr->t_sum[L_F.load_usr->has_booked].p_pos);//价格
                      L_F.load_usr->has_booked++;
                      fp=fopen(L_F.load_usr->name, "wb");
                      fwrite(L_F.load_usr, sizeof(usr), 1, fp);
                      fclose(fp);
                      return;
                  }
              }
           }
         }
        printf("你输入的车次不存在n.");
        
    }
}
void show_booked()
{
    int i=0;
    usr *t_t=L_F.load_usr;
    FILE *fp=NULL;
    if((fp=fopen(t_t->name, "rb"))!=NULL)
    {
        fread(t_t,sizeof(usr), 1, fp);
        fclose(fp);
        printf("你已经订票成功,信息如下:n");
        printf("车次  上车站  下车站  价格  座位号:n");
        for (i=0; ihas_booked; i++) {
            printf("%-4s %-12s %-12s %.2f %dn",
                t_t->t_sum[i].t_name,//车次
                t_t->t_sum[i].s_to_e.s_station, //上车站
                t_t->t_sum[i].s_to_e.e_station,//下车站
                t_t->t_sum[i].price,
                t_t->t_sum[i].p_pos);
        }
    }
}
void init_pos(int a[][13])//初始化列车的座位
{
    int i,j=1;
    for (i=1; i<=12; i++) {
        for (j=i+1; j<=12; j++) {
            a[i][j]=100;
        }
    }
}
//用一个二维数组表示各个站点间票数,a[i][j]表示i站到j站所在的票数还有a[i][j]张
void update_ticket(int a[][13],int index_i,int index_j)
{
    int i,j=1;
    for (i=1; i<=12; i++) {
        for (j=i+1; j<=12; j++) {//除了车的出发站到订票的起始站或者下车站到终点站的车站票数都要-1
            if (!(j=index_j)) {
                a[i][j]--;
            }
        }
    }
}
int check_if_sell(int *a,int b,int has_sell)
{
    int i=0;
    for (i=1; i<=has_sell; i++) {
        if (a[i]==b) {
            return 0;
        }
    }
    return 1;
}


//  ticket_data.h
//  TrainTicketSystem
//
//  Created by xiaobai on 15/7/22.
//  Copyright (c) 2015年 xiaobaiyige. All rights reserved.
//
#ifndef __TrainTicketSystem__ticket_data__
#define __TrainTicketSystem__ticket_data__
#include#include#include#includetypedef struct
{
    char s_station[15];//起始站
    char e_station[15];//终点站
}s_e;
typedef struct
{
    char t_name[10];
    double price;//车票价格
    int p_pos;//座位号
    s_e s_to_e;//始发站和终点站
}ticket;//车票结构体
typedef struct
{
    char time[10];//到本站的时间
    double price;//始发站到本站的价格
    char name[18];//本站的名字
}station_one;
typedef struct
{
    int sum;//车站的数目
    char name[10];//车次的名字
    station_one t[12];
    int pos[13][13];
    int pos_num[100];//保存座位的编号
    
}TRAIN;
typedef struct
{
    TRAIN all_t[10];
    int all_sum;
}TRAINS;
typedef struct
{
    char name[20];//账号
    char pass[20];//密码
    ticket t_sum[10];//车票相关的
    int has_booked;
}usr;//用户结构体
typedef struct
{
    int flag;
    usr*load_usr;
}LOAD_FLAG;
int check_account(char *str_name);
void usr_regester();//新用户注册函数
int show_main_menu(int last);//主菜单
int usr_load();//用户登录
void system_init();//系统初始化
void back_manage();//后台管理
void show_train();//查看所有的列车车次
void book_ticket();//订票
void find_t2();//查找某一个车次的乘车信息
void find_t();//根据区间查找车次
void show_booked();//显示已经订购的车次信息
void update_ticket(int a[][13],int index_i,int index_j);//更新车票信息
void init_pos(int a[][13]);//初始化列车的座位
int check_if_sell(int *a,int b,int has_sell);//检查b号座位是否已经卖出
#endif /* defined(__TrainTicketSystem__ticket_data__) */










本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

轻量级AI定制模型助力低成本快速部署 北京2024年4月18日 /美通社/ -- 数据和人工智能(AI)领域的领先者SAS—今日在SAS Innovate大会上首次展示了一款变革性的、旨在帮助企业直面业务挑战的解决方案...

关键字: SAS AI模型 人工智能 INNOVATE

领先的数据和AI平台SAS Viya运用大语言模型的可解释性和可集成性改善现有流程;SAS Data Maker将在保护敏感数据的同时解决关键挑战 北京2024年4月18日...

关键字: SAS VI 生成式AI MAKER

上海2024年4月17日 /美通社/ -- 在2024 F1中国站即将拉开帷幕之际,高端全合成润滑油品牌美孚1号今日举办了品牌50周年庆祝活动。三届F1年度车手总冠军马克斯•维斯塔潘也亲临现场,共同庆祝这一里程...

关键字: BSP 汽车制造 行业标准 产品系列

深圳2024年4月17日 /美通社/ -- 今日,华为举办全球分析师大会,在"加速迈向网络智能化"主题论坛中,华为数据通信产品线副总裁赵志鹏发表了主题演讲,阐述了华为全面引入AI技术,从组件级、任务级...

关键字: NET 华为 智能化 网络

上海2024年4月17日 /美通社/ -- 当自然故土与科技绿洲激情碰撞,未来将迸发怎样的色彩?橙色,诞生自旭日光辉与苍茫大地,它是熊熊燃烧的炽火,也是浮想联翩的异次元,唤醒了我们对世界的无尽绮想,象征着人类、自然、科技...

关键字: 汽车 中国汽车 汽车产业 灯光

2024年教育数字化巨浪来袭,如何引领潮流、筑起行业壁垒? 成都2024年4月17日 /美通社/ -- 在信息技术飞速发展的今天,数字化已成为推动各行各业革新的强大引擎。特别是在教育领域,一场前所未有的变革正在悄然兴起...

关键字: AMD 数字化 智慧教育 集成

其最新一代开创性系统集成芯片及配套软件将为4600万辆汽车提供更多安全和便利功能 上海2024年4月17日 /美通社/ -- Mobileye今日宣布,其已向客户交付其最新的EyeQ™6 Lite (EyeQ...

关键字: 芯片 MOBILEYE ADAS 自动驾驶

广州2024年4月17日 /美通社/ -- 已火爆拉开帷幕的第135届广交会一期线下展中,新质生产力成为核心亮点。超3100名以先进生产力和优质为关键词的创新企业集结现场,向世界释放新质生产力赋能下的行业新"磁...

关键字: 电子 PS GO 科沃斯

上海2024年4月17日 /美通社/ -- 4月11-12日,由匠歆汽车和上海市普陀区科学技术委员会联合业内各方顶级企业及专家举办的The 6th AutoCS 2024智能汽车信息安全大会暨展览会在上海圣诺亚皇冠假日酒...

关键字: 信息安全 智能汽车 汽车信息 网络安全

北京2024年4月17日 /美通社/ -- 2024年4月13日,由北京康盟慈善基金会主办的"县域诊疗,规范同行"——肿瘤诊疗学术巡讲项目首站在广州隆重召开。本次会议邀请全国多位肺癌领域专家和县域同道...

关键字: AI技术 医疗服务 BSP 互联网
关闭
关闭