要求:

火车订票系统

要求:

用户注册功能

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

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

3、用户注册成功。

用户登录

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

后台管理

列车信息录入

4、列车时刻表查询

车次查询

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

发到站查询

输入发站

输入到站

列出所有车次及价格

订票功能

输入发车站

输入到站

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

订票,显示座位号

订票成功

订票信息记入个人账户

<span style="font-size:12px;">//  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;}}
}
</span>
<span style="font-size:12px;">//  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;//写入成功}elsereturn -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;//给系统用户标志位赋值为1L_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 %s\n",\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   %s\n",\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 %.2f\n",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; j<=t_t.all_t[i].sum; j++){printf("%-4d %-12s %-5s %.2f\n",j,t_t.all_t[i].t[j].name,t_t.all_t[i].t[j].time,\t_t.all_t[i].t[j].price);}}}
}
void book_ticket()
{TRAINS t_t;int i,j=0;FILE *fp;int s_i=0;int s_j=0;int pos_num=0;if (L_F.flag==0){printf("你还未进行登录:\n");return ;}else{printf("请输入你预定的车票车次:\n");scanf("%s",L_F.load_usr->t_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; i<=t_t.all_sum; i++){if(strcmp(L_F.load_usr->t_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; j<=t_t.all_t[i].sum; j++)//列车的站{if(strcmp(L_F.load_usr->t_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]<=0) {//检查是否有票printf("这个区间内没有票了,订购失败\n");return;}L_F.load_usr->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   %d\n",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; i<t_t->has_booked; i++) {printf("%-4s %-12s %-12s %.2f %d\n",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++) {//除了车的出发站到订票的起始站或者下车站到终点站的车站票数都要-1if (!(j<=index_i||i>=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;
}</span>
<span style="font-size:12px;">//  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 <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
typedef 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__) */
</span>

C语言阶段的火车票系统项目相关推荐

  1. c语言实现购买火车票系统

    //c语言实现购买火车票系统 #include<stdio.h> #include<windows.h>int a=30;//共有100张火车票 HANDLE hMutex;/ ...

  2. C语言ATM自动取款机系统项目的设计与开发

    文章目录 基于C语言的ATM自动取款机系统项目设计与开发 一.ATM自动取款机系统功能分析与介绍 二.开发ATM自动取款机系统的工具以及创建项目的过程 2.1.本项目使用Visual Studio 2 ...

  3. IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)

    IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard .xib 混用.完美解决方案) 参考文章: (1)IOS APP 国际化 程序内切换语言实现 不重新启动系统 ...

  4. android生成车票动效,Android项目源码功能齐全的12306火车票订票系统项目

    [实例简介] 本项目是一个基于安卓的12306火车票客户端项目源码,实现了早期的登录注册购票改签等功能.但是因为12306网站改版比换鞋垫还频繁,所以功能早就不能用了,不过项目提供了大部分功能的原来实 ...

  5. C语言课程设计 - 火车票预订系统

    C语言课程设计 - 火车票预订系统 文件介绍 代码 main.c(全) mymac.h(全) database.c(不全) mainWindow.c (全) user.c (不全) manager.c ...

  6. 火车票售票系统C语言大作业,C语言课程设计--火车票管理系统

    <C语言课程设计--火车票管理系统>由会员分享,可在线阅读,更多相关<C语言课程设计--火车票管理系统(19页珍藏版)>请在人人文库网上搜索. 1.二.设计内容二.设计内容 设 ...

  7. C语言到嵌入式Linux开发项目指导

    C语言到嵌入式Linux开发项目指导 第一阶段C语言 1.常量与变量,数据类型,数据类型转换,数据输入与输出: 2.C语言运算符,C语言操作符,C语言表达式,表达式优先级: 3.C语言流程控制,分支, ...

  8. 四旋翼自主飞行器探测跟踪系统项目的随笔

    四旋翼自主飞行器探测跟踪系统项目的随笔 项目介绍 项目特点 主要内容 个人随想 飞控选择 开发初期 追踪小车设计 飞行器底部 飞行器完全图 测试环境 结束语 项目介绍 本项目以16位瑞萨单片机RX23 ...

  9. c语言飞机票实验报告格式,c语言航班信息查询系统实验报告

    <c语言航班信息查询系统实验报告>由会员分享,可在线阅读,更多相关<c语言航班信息查询系统实验报告(21页珍藏版)>请在人人文库网上搜索. 1.希昌丸會软件学院大作业任务书题目 ...

最新文章

  1. 14岁清华本科新生免试直博!高校新生大数据陆续曝光,男女比例、年龄差距各异......
  2. web app中常用插件(zepto--用法类似于jquery、利用nodejs定制zepto)
  3. CUDA 中 FFT 的使用
  4. Node.js 初识 fs 模块
  5. MySQL学习笔记(二):MyISAM 存储引擎
  6. 处女座|处女座性格分析
  7. 单播、广播、组播、多播
  8. 通过基于JDBC的用户存储部署Identity Server
  9. 没解决:eclipse的JDK Compliance的Use compliance from execution无法选中
  10. CentOS7搭建本地yum源之http服务
  11. C语言编程必背单词百度云,c语言编程必背单词-20210403022023.pdf-原创力文档
  12. el-table样式美化
  13. 写给父亲的语音计算器(‘(‘‘)‘算法参与运算c#,二)
  14. 点评美国名校的(EE)和(CS)
  15. html引导蒙层,web开发中实现图标点击态蒙层
  16. sqlsrver-常见英语单词释意
  17. 一次简单的路由器渗透
  18. Java实现聊天室(TCP)
  19. 第七代英特尔处理器安装Windows7提示“不支持的硬件”的解决方法
  20. 安装 ESXi 出现错误 ERROR 1962: No operating system found

热门文章

  1. 2019年创业亏 800 万元,可以给到你的一些建议
  2. python爬取中国大学(高校)基本信息
  3. win10使用WinAppDriver实现UI自动化
  4. 图书销售管理系统可行性分析报告
  5. CF667DIV3-F:dp
  6. labview平移波形_LabVIEW中的波形数据
  7. 网络营销工具电子邮件营销_改善电子邮件营销策略的5条提示
  8. HTML+CSS+JS制作炫酷【烟花特效】
  9. Android应用如何支持不同的语言和文化
  10. 13种 Drawable