600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > C语言期末程序设计(高铁客运订票系统)

C语言期末程序设计(高铁客运订票系统)

时间:2021-10-18 23:39:35

相关推荐

C语言期末程序设计(高铁客运订票系统)

功能描述高铁客运订票的业务活动包括:查询客运线和客票预定的信息、 客票预定和办理退票等。设计一个计算机程序,使上述任务能借助计 算机来完成。具体要求1、系统必须存储的数据信息(1)客运线信息(9 个):高铁抵达城市、出发城市、经停站、列车 号、发车时间、票价、总位置和剩余位置、已定票的客户名单。 (2)客户信息( 3 个):客户姓名、证件号、座位号 原来 8 号南 区学生宿舍 楼被删除2、系统能实现的操作和功能 (1)承办订票业务: A、基础版:根据客户提出的要求(列车抵达城市、发出时间、订 票数量)查询列车信息(包括票价和余票数量),若满足要求,则为 客户办理订票手续,输出座位号。 B、进阶版:根据客户提出的要求(列车抵达城市、发出时间、订 票数量)查询列车信息(包括票价和余票数量)列表(所有符合要求 的列车可以选择展示的排列方式:按照价格递增/发车时间递增/总时 间递增),客户可以选择座位号,若满足要求,则为客户办理订票手 续,输出座位号。 (2)承办退票业务: A、基础版:根据客户提供的情况(列车号,订票数量),为客户 办理退票手续。 B、进阶版:根据客户提供的情况(列车号,发车时间,身份证 号,订票数量),为客户办理退票手续。如果订购多张票,可以仅退 部分票。 (3)查询功能:(较高要求) A、查询客运线信息:根据列车号,输出列车发车站、目的地点、 经停站、经停时间、票价、剩余票数和位置等信息。 B、查询客户预订信息:根据客户证件号,输出上车城市,目的地, 经停站,列车号和座位号等信息 【程序主要技术】 (1)本程序主要对于高铁客运订票服务中的座位号的订购于退票进行模拟,涉及到全局变量的定义与座位号订票退票的实现; (2)全局变量涉及用于绑定个人信息的“01”变量、每辆列车的座位数量;创建关于订票乘客的信息的结构体。 【程序缺点】 (1)本程序中每辆列车的座位号是固定的,起先是采用随机生成的方法,但是会出现重复数的情况,不利于座位号订票后的消失与退票后的出现; (2)本程序的订票只能单顾客订票,不能同时进行多顾客订票; (3)本程序未能用文本实现储存顾客的订票信息功能。若有码友有什么技术探讨,欢迎来讨论!下面是全程序代码:

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>struct Customer{ //用户个人信息储存 char train[5][10]={"T12410","G14520","D18430","D36540","G60050"}; //记录用户是否对高铁订票 char name[10]; //记录用户名字 char Idcard[20]; //记录用户证件号 int Seat[5][30];//记录用户订票座位 }User;char trainId[5][10]={"T1241","G1452","D1843","D3654","G6005"}; //记录高铁列车号 int seat[5][30] = {{385,199,340,379,322,489,20,444,21,163,247,30,380,256,411,453,223,47,333,8,399,363,465},{463,164,440,404,366,297,16,435,86,346,363,235,170,54,446,333,294,124,470,481,138,266,135,199,130,370,205,94,408},{279,218,270,483,441,175,349,220,378,349,102,80,273,477,281,436},{415,36,9,387,393,426,152,376,337,465,471,391},{49,435,482,192,393,385,72,273,114,228,496,251,288,502,381,8,350,7,127,164}}; //记录各列车的空余座位号 int binding=0; //用于绑定个人信息 int num_seat[5]={0,0,0,0,0}; //用于记录订购座位个数 int flag_seat[5]={23,29,16,12,20}; //用于记录每个列车的剩余座位号数量 int ding_seat[5]={23,29,16,12,20}; //定值座位号,主要用于退票排座位以及个人信息取消绑定 void Swap(int *x,int *y){ //用于退票以及剩余座位号排序 int t=*x;*x=*y;*y=t;}void Check(){ //检查高铁信息 char Train[5000];FILE* fp;int x;printf("列车号 出发站 途径站(停留时间) 终点站 出发时间总座位 票价 剩余座位\n");printf("%s 广州 郴州(3分钟)— 衡阳(9分钟)长沙17:49 560302 %d\n",trainId[0],flag_seat[0]);printf("%s 佛山 广州(26分钟)— 衡阳(22分钟)—井冈山(4分钟) 吉安20:48 540376 %d\n",trainId[1],flag_seat[1]);printf("%s 广州 肇庆(2分钟)— 怀集(2分钟)—贺州(14分钟) 长沙07:23 570450 %d\n",trainId[2],flag_seat[2]);printf("%s 广州 东莞东(3分钟)— 深圳北(5分钟)—惠州(2分钟) 鲘门17:05 560429 %d\n",trainId[3],flag_seat[3]);printf("%s 广州南 深圳北(5分钟)— 惠州(2分钟)—汕尾(2分钟) 潮阳18:44 570240 %d\n",trainId[4],flag_seat[4]);//if((fp = fopen("总高铁.txt","r")) == NULL){//perror("fail to read!\n");//exit(1);//}//while(fgets(Train, 5000, fp) != NULL){//printf("%s\n",Train);//}printf("------------------------------------------\n");printf("\n");printf("\t1.查询已订票乘客名单\n");printf("\t2.将列车按票价递增排序\n");printf("\t3.将列车按发车时间递增排序\n");printf("\t4.将列车按剩余座位递增排序\n");printf("\t0.返回主页面\n");printf("\n");printf("------------------------------------------\n");}void Book(char *Id){ //订票服务 int i;int k,p;int a,b; int flag;//int len;int num; //订票数量 for(i=0;i<5;i++){if(Id[4] == trainId[i][4]){//printf("i的值为%d\n",i);break;}}//printf("%d\n",flag_seat[i]);//len=strlen(seat[i]);printf("高铁号:%s\n",Id);printf("空余座位号:");for(int j=0;j<flag_seat[i];j++){if(j%5==0){printf("\n");}printf("%d ",seat[i][j]);}reset: printf("\n请输入您需要订票的数量:");scanf("%d",&num);if(num<0||num>flag_seat[i]){ //订票数量不能超出额定范围 printf("输入错误,请重新输入订票数量!\n");goto reset;}else{printf("请输入您需要订票的座位号:"); for(k=0;k<num;k++){scanf("%d",&User.Seat[i][k+num_seat[i]]); //num_seat为客户订票数量 }for(int a=num_seat[i];a<num+num_seat[i];a++){ //筛选订票座位号是否正确 p=0; //定义标识量,判断座位号是否正确 for(b=0;b<flag_seat[i];b++){if(User.Seat[i][a] == seat[i][b]){ //若订票座位号正确 p=1;Swap(&seat[i][b],&seat[i][flag_seat[i]-1]); //将正确的座位号移到数组尾部 //printf("%d\n",flag_seat[i]);flag_seat[i]--; //该列车的可选择的座位总量减一 break;}}if(p == 0){printf("订购的第%d个座位号输入错误,请重新订购!\n",a+1);goto reset; }}printf("尊敬的%s乘客\n",User.name);printf("您已成功订购%s列车的乘车票!\n",Id);printf("您订购的位置是:");for(int c=num_seat[i];c<k+num_seat[i];c++){printf("%d ",User.Seat[i][c]);}num_seat[i] = num_seat[i]+num;printf("\n");}}void Refund(char *Id){ //退票服务 int x;int tui;int p;for(p=0;p<5;p++){if(Id[4] == trainId[p][4]){break;}}//printf("P:%d\n",p);if(num_seat[p] == 0){printf("您在%s号列车的票已全部退票\n",Id); }else{printf("已检测您在%s号列车有%d张票\n",Id,num_seat[p]);printf("您订票的座位号是:");for(int j=0;j<num_seat[p];j++){printf("%d ",User.Seat[p][j]);}turnx:printf("\n");printf("请输入您要退票的数量:");scanf("%d",&x);if(x == num_seat[p]){num_seat[p]=0; //将用户已订票数量清0 User.train[p][5] = '0'; //将全部退票的高铁设置为未订票状态 flag_seat[p]=flag_seat[p]+x; //将退票高铁的可选择座位加上退票数量 printf("您的订票已全部退票!\n");}else if(x > 0){printf("请输入您需要退票的座位号:");for(int i=0;i<x;i++){scanf("%d",&tui);for(int a=0;a<ding_seat[p];a++){ //把将要退票的座位票移到前面 if(tui == seat[p][a]){ //判断退票座位号是否是已订票的座位号 //printf("是否交换\n");//将退票的座位移到已订票座位号的第一位,便于退票后该座位号上浮 Swap(&seat[p][flag_seat[p]],&seat[p][a]); break;}}for(int j=0;j<num_seat[p];j++){ if(tui == User.Seat[p][j]){//若退票在用户订票的最后一位,则直接将客户座位号数量-1; if(j == num_seat[p]-1){ num_seat[p]--;//printf("座位数量:%d\n",num_seat);flag_seat[p]++;break;}// 若退票不在用户订票的最后一位,则将需要退票移到已订票的最后一位 if(j < num_seat[p]-1){ Swap(&User.Seat[p][j],&User.Seat[p][num_seat[p]-1]);num_seat[p]--;//printf("座位数量:%d\n",num_seat);flag_seat[p]++;break;}}}printf("%d号座位已退票成功!\n",User.Seat[p][num_seat[p]]);}printf("您在%s列车还有%d张票\n", Id, num_seat[p]);printf("座位号为:");for(int k=0;k<num_seat[p];k++){printf("%d ",User.Seat[p][k]);}printf("\n");}else{printf("票数错误,请重新输入!\n");goto turnx;}}}CustomerList(char* Id){int i;FILE* fp;char zuowei[5000];for(i=0;i<5;i++){if(Id[4] == trainId[i][4]){//printf("%d",i);break;}}if(i == 0){if((fp = fopen("列车1.txt","r"))==NULL){perror("file open fail!\n");exit(1);}while(fgets(zuowei, 5000, fp)){printf("%s",zuowei);}if(num_seat[i] != 0){for(int j=0;j<num_seat[i];j++){printf("\n座位号乘客\n");printf("%d%s",User.Seat[i][j],User.name);}}}if(i == 1){if((fp = fopen("列车2.txt","r"))==NULL){perror("file open fail!\n");exit(1);}while(fgets(zuowei, 5000, fp)){printf("%s",zuowei);}if(num_seat[i] != 0){for(int j=0;j<num_seat[i];j++){printf("\n座位号乘客\n");printf("%d%s",User.Seat[i][j],User.name);}}}if(i == 2){if((fp = fopen("列车3.txt","r"))==NULL){perror("file open fail!\n");exit(1);}while(fgets(zuowei, 5000, fp)){printf("%s",zuowei);}if(num_seat[i] != 0){for(int j=0;j<num_seat[i];j++){printf("\n座位号乘客\n");printf("%d%s",User.Seat[i][j],User.name);}}}if(i == 3){if((fp = fopen("列车4.txt","r"))==NULL){perror("file open fail!\n");exit(1);}while(fgets(zuowei, 5000, fp)){printf("%s",zuowei);}if(num_seat[i] != 0){for(int j=0;j<num_seat[i];j++){printf("\n座位号乘客\n");printf("%d%s",User.Seat[i][j],User.name);}}}if(i == 4){if((fp = fopen("列车5.txt","r"))==NULL){perror("file open fail!\n");exit(1);}while(fgets(zuowei, 5000, fp)){printf("%s",zuowei);}if(num_seat[i] != 0){for(int j=0;j<num_seat[i];j++){printf("\n座位号乘客\n");printf("%d%s",User.Seat[i][j],User.name);}}}printf("\n");printf("\n");printf("请选择你将进行的操作:\n");printf("------------------------------------------\n");printf("\n");printf("\t1.查询已订票乘客名单\n");printf("\t2.将列车按票价递增排序\n");printf("\t3.将列车按发车时间递增排序\n");printf("\t4.将列车按剩余座位递增排序\n");printf("\t0.返回主页面\n");printf("\n");printf("------------------------------------------\n"); }void sort(int x){FILE* fp;char paixu[5000];if(x == 2){ //票价 printf("列车号 出发站 途径站(停留时间) 终点站 出发时间总座位 票价 剩余座位\n");printf("%s 广州南 深圳北(5分钟)— 惠州(2分钟)—汕尾(2分钟) 潮阳18:44 570240 %d\n",trainId[4],flag_seat[4]);printf("%s 广州 郴州(3分钟)— 衡阳(9分钟)长沙17:49 560302 %d\n",trainId[0],flag_seat[0]);printf("%s 佛山 广州(26分钟)— 衡阳(22分钟)—井冈山(4分钟) 吉安20:48 540376 %d\n",trainId[1],flag_seat[1]);printf("%s 广州 东莞东(3分钟)— 深圳北(5分钟)—惠州(2分钟) 鲘门17:05 560429 %d\n",trainId[3],flag_seat[3]);printf("%s 广州 肇庆(2分钟)— 怀集(2分钟)—贺州(14分钟) 长沙07:23 570450 %d\n",trainId[2],flag_seat[2]);}if(x == 3){ //发车时间 printf("列车号 出发站 途径站(停留时间) 终点站 出发时间总座位 票价 剩余座位\n");printf("%s 广州 肇庆(2分钟)— 怀集(2分钟)—贺州(14分钟) 长沙07:23 570450 %d\n",trainId[2],flag_seat[2]);printf("%s 广州 东莞东(3分钟)— 深圳北(5分钟)—惠州(2分钟) 鲘门17:05 560429 %d\n",trainId[3],flag_seat[3]);printf("%s 广州 郴州(3分钟)— 衡阳(9分钟)长沙17:49 560302 %d\n",trainId[0],flag_seat[0]);printf("%s 广州南 深圳北(5分钟)— 惠州(2分钟)—汕尾(2分钟) 潮阳18:44 570240 %d\n",trainId[4],flag_seat[4]);printf("%s 佛山 广州(26分钟)— 衡阳(22分钟)—井冈山(4分钟) 吉安20:48 540376 %d\n",trainId[1],flag_seat[1]);}if(x == 4){ //剩余座位 int min[5];for(int i=0;i<5;i++){min[i]=flag_seat[i];}for(int i=0;i<4;i++){for(int j=i+1;j<5;j++){if(min[i] > min[j]){Swap(&min[i],&min[j]);}}}//for(int i=0;i<5;i++){//printf("%d ",min[i]);//}printf("列车号 出发站 途径站(停留时间) 终点站 出发时间总座位 票价 剩余座位\n");for(int i=0;i<5;i++){for(int j=0;j<5;j++){if(min[i] == flag_seat[j]){if(j == 0){printf("%s 广州 郴州(3分钟)— 衡阳(9分钟)长沙17:49 560302 %d\n",trainId[0],flag_seat[0]);break;}if(j == 1){printf("%s 佛山 广州(26分钟)— 衡阳(22分钟)—井冈山(4分钟) 吉安20:48 540376 %d\n",trainId[1],flag_seat[1]);break;}if(j == 2){printf("%s 广州 肇庆(2分钟)— 怀集(2分钟)—贺州(14分钟) 长沙07:23 570450 %d\n",trainId[2],flag_seat[2]);}if(j == 3){printf("%s 广州 东莞东(3分钟)— 深圳北(5分钟)—惠州(2分钟) 鲘门17:05 560429 %d\n",trainId[3],flag_seat[3]);}if(j == 4){printf("%s 广州南 深圳北(5分钟)— 惠州(2分钟)—汕尾(2分钟) 潮阳18:44 570240 %d\n",trainId[4],flag_seat[4]);break;}}}}}printf("\n");printf("\n");printf("请选择你将进行的操作:\n");printf("------------------------------------------\n");printf("\n");printf("\t1.查询已订票乘客名单\n");printf("\t2.将列车按票价递增排序\n");printf("\t3.将列车按发车时间递增排序\n");printf("\t4.将列车按剩余座位递增排序\n");printf("\t0.返回主页面\n");printf("\n");printf("------------------------------------------\n");}int main(){int n;char Id[10]; //int a;int flag=0;int shengfen=0; //用于第一次查询个人信息绑定身份证号 //srand((unsigned)time(NULL));//for(int i=0;i<5;i++){ //随机生成座位号 //for(int j=0;j<30;j++){//if(i==0 && j==23)//break;//if(i==1 && j==29)//break;//if(i==2 && j==16)//break;//if(i==3 && j==12)//break;//if(i==4 && j==20)//break;//a = rand()%500+5;//seat[i][j] = a;//}//}start:printf("-------------高铁客运订票系统-------------\n");printf("\n");printf("\t1.查询所有高铁信息\n");printf("\t2.订票服务\n");printf("\t3.退票服务\n");printf("\t4.查询个人订票信息\n");if(binding == 1){printf("\t5.取消个人信息的绑定\n");}printf("\t0.退出系统\n");printf("\n");printf("------------------------------------------\n");printf("若您是第一次使用本高铁客运订票系统,建议选择选项一!\n");printf("请选择你要进行的操作:\n");scanf("%d",&n);if(n == 1){ //输出所有的列车信息 Check();int x;turnx:scanf("%d",&x);if(x == 0)goto start; if(x == 1){List:printf("请准确输入需要查询的列车号:\n");scanf("%s",Id);CustomerList(Id);goto turnx;}if(x>=2&&x<=4){sort(x);goto turnx;}}else if(n == 2){ //进行订票服务 if(binding == 1){goto cha;}printf("为了防止非法购票,请输入您的个人信息!\n");printf("请输入您的姓名:");scanf("%s",User.name);printf("\n");shuru:printf("请输入您的身份证号:"); scanf("%s",User.Idcard);if(User.Idcard[17] == '\0'||User.Idcard[18]!='\0'){ //证件号验证 printf("请正确输入您的身份证号!\n");goto shuru;} printf("\n");printf("您的姓名为:%s\n",User.name);printf("您的身份证号为:%s\n",User.Idcard); binding=1;cha:printf("您的身份已经绑定!\n"); printf("------------------------------------------\n");cha1:printf("请准确输入您需要订购乘车票的高铁号!\n");scanf("%s",Id);int train_ture;for(int j=0;j<5;j++){train_ture=strcmp(Id,trainId[j]);if(train_ture == 0){User.train[j][5]='1';flag=1;break;}}if(flag == 0){printf("输入列车号有误,请重新输入!\n");goto cha1;}else{Book(Id);goto start;}}else if(n == 3){ //进行退票服务 turnId:int p;if(binding == 0){printf("尚未绑定个人信息!\n");printf("绑定个人信息在订票服务中绑定!\n\n");goto start; }printf("请输入您需要退票的列车号");scanf("%s",Id); for(int j=0;j<5;j++){int train_ture=strcmp(Id,trainId[j]);if(train_ture == 0){flag=1;p=j;break;}}//比较输入列车号是否与订票列车号相等 if(flag == 1 && User.train[p][5] == '1'){Refund(Id);goto start;}else{printf("输入列车号尚未订票或有误!\n");goto turnId; }}else if(n == 4){ //查询个人信息 if(binding == 0){printf("个人信息尚未绑定!\n");printf("绑定个人信息在订票服务中绑定!\n\n"); goto start;}else{if(shengfen == 0){chek1:shengfen=1;printf("检测到您是第一次查看个人订票信息!\n");printf("请输入您身份证号后4位数:");char chek[4]; //存入用户输入身份证后四位 int j=0;for(int i=14;i<18;i++){chek[j++]=User.Idcard[i];}char sf[4]; //用于验证用户身份证后四位 scanf("%s",sf);int s = strcmp(sf,chek);if(s == 0){printf("匹配成功!\n");printf("\n");goto mess;}else{printf("匹配失败,请重新输入!\n");goto chek1;}}else{goto mess;}mess:if(User.train[0][5] == '1' && User.Seat[0]>0){//FILE* fp;//char train_read[5000];//if((fp = fopen("T1241.txt","r"))==NULL){//perror("file open fail!");//exit(1);//}//while(fgets(train_read,5000,fp)){//printf("%s",train_read);//}printf("列车号 出发站 途径站(停留时间) 终点站 出发时间总座位 票价\n");printf("T1241 广州 郴州(3分钟)— 衡阳(9分钟)长沙17:49 560302\n"); printf("\n您的姓名:%s\n",User.name);printf("您的订票:\n");printf("列车号:%s\n",trainId[0]);printf("您订购的座位有:");for(int i=0;i<num_seat[0];i++){printf("%d ",User.Seat[0][i]);}printf("\n");printf("\n");}if(User.train[1][5] == '1' && User.Seat[1]>0){//FILE* fp;//char train_read[5000];//if((fp = fopen("G1452.txt","r"))==NULL){//perror("file open fail!");//exit(1);//}//while(fgets(train_read,5000,fp)){//printf("%s",train_read);//}printf("列车号 出发站 途径站(停留时间) 终点站 出发时间总座位 票价\n");printf("G1452 佛山 广州(26分钟)— 衡阳(22分钟)—井冈山(4分钟) 吉安20:48 540376\n");printf("\n您的姓名:%s\n",User.name);printf("您的订票:\n");printf("列车号:%s\n",trainId[1]);printf("您订购的座位有:");for(int i=0;i<num_seat[1];i++){printf("%d ",User.Seat[1][i]);}printf("\n");printf("\n");}if(User.train[2][5] == '1' && User.Seat[2]>0){//FILE* fp;//char train_read[5000];//if((fp = fopen("D1843.txt","r"))==NULL){//perror("file open fail!");//exit(1);//}//while(fgets(train_read,5000,fp)){//printf("%s",train_read);//}printf("列车号 出发站 途径站(停留时间) 终点站 出发时间总座位 票价\n");printf("D1843 广州 肇庆(2分钟)— 怀集(2分钟)—贺州(14分钟) 长沙07:23 570450\n");printf("\n您的姓名:%s\n",User.name);printf("您的订票:\n");printf("列车号:%s\n",trainId[2]);printf("您订购的座位有:");for(int i=0;i<num_seat[2];i++){printf("%d ",User.Seat[2][i]);}printf("\n");printf("\n");}if(User.train[3][5] == '1' && User.Seat[3]>0){//FILE* fp;//char train_read[5000];//if((fp = fopen("D3654.txt","r"))==NULL){//perror("file open fail!");//exit(1);//}//while(fgets(train_read,5000,fp)){//printf("%s",train_read);//}printf("列车号 出发站 途径站(停留时间) 终点站 出发时间总座位 票价\n");printf("D3654 广州 东莞东(3分钟)— 深圳北(5分钟)—惠州(2分钟) 鲘门17:05 560429\n");printf("\n您的姓名:%s\n",User.name);printf("您的订票:\n");printf("列车号:%s\n",trainId[3]);printf("您订购的座位有:");for(int i=0;i<num_seat[3];i++){printf("%d ",User.Seat[3][i]);}printf("\n");printf("\n");}if(User.train[4][5] == '1' && User.Seat[4]>0){//FILE* fp;//char train_read[5000];//if((fp = fopen("G6005.txt","r"))==NULL){//perror("file open fail!");//exit(1);//}//while(fgets(train_read,5000,fp)){//printf("%s",train_read);//}printf("列车号 出发站 途径站(停留时间) 终点站 出发时间总座位 票价\n");printf("G6005 广州南 深圳北(5分钟)— 惠州(2分钟)—汕尾(2分钟) 潮阳18:44 570240\n");printf("\n您的姓名:%s\n",User.name);printf("您的订票:\n");printf("列车号:%s\n",trainId[4]);printf("您订购的座位有:");for(int i=0;i<num_seat[4];i++){printf("%d ",User.Seat[4][i]);}printf("\n");printf("\n");}goto start;}}else if(n == 5){binding=0; //绑定值设置为未绑定状态 for(int i=0;i<5;i++){ //用户订座位票数量归0 num_seat[i]=0;User.train[i][5]='0';}shengfen=0;for(int i=0;i<5;i++){ //所有的列车可订座位数量复原 flag_seat[i]=ding_seat[i];}printf("您已经成功取消个人信息的绑定!\n");goto start; }else if(n == 0){return 0;}else{printf("输入错误,请重新输入!\n");goto start;}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。