数据结构C语言实现高铁客运订票系统

目录

背景:

功能描述

具体要求

具体描述:

技术难点:

如何将乘客信息和订票的逻辑关联?

乘客订票逻辑:

代码运行效果:

源码获取


背景:

高铁客运订票系统, 这里我们仅仅实现基础版

功能描述

高铁客运订票的业务活动包括:查询客运线和客票预定的信息、
客票预定和办理退票等。设计一个计算机程序,使上述任务能借助计
算机来完成。

具体要求

1、 系统必须存储的 数据信息
(1)客运线信息(9 个):高铁抵达城市、出发城市、经停站、列车
号、发车时间、票价、总位置和剩余位置、已定票的客户名单。
(2)客户信息(
3 个):客户姓名、证件号、座位号
原来 8 号南
区学生宿舍
楼被删除 2、系统能实现的操作和功能
(1)承办订票业务:
A、基础版:根据客户提出的要求(列车抵达城市、发出时间、订
票数量)查询列车信息(包括票价和余票数量),若满足要求,则为
客户办理订票手续,输出座位号。
B、进阶版:根据客户提出的要求(列车抵达城市、发出时间、订
票数量)查询列车信息(包括票价和余票数量)列表(所有符合要求
的列车可以选择展示的排列方式:按照价格递增/发车时间递增/总时
间递增),客户可以选择座位号,若满足要求,则为客户办理订票手
续,输出座位号。
(2)承办退票业务:
A、基础版:根据客户提供的情况(列车号,订票数量),为客户
办理退票手续。
B、进阶版:根据客户提供的情况(列车号,发车时间,身份证
号,订票数量),为客户办理退票手续。如果订购多张票,可以仅退
部分票。
(3)查询功能:(较高要求)
A、查询客运线信息:根据列车号,输出列车发车站、目的地点、
经停站、经停时间、票价、剩余票数和位置等信息。
B、查询客户预订信息:根据客户证件号,输出上车城市,目的地,
经停站,列车号和座位号等信息。

具体描述:

针对上述的要求,我们选择了最基础的功能进行实践,以最简单的方法来完成勾选的部分。
下面将展示基础界面。

技术难点:

如何将乘客信息和订票的逻辑关联?

这里我是用了二维数组的标识来解决,乘客信息默认有3个,以数组存储。订票的逻辑以二维数组进行关联。

乘客订票逻辑:

乘客订票逻辑,当我们在添加乘客信息时,给乘客分配座位号时以随机数来分配,来避免重复。

void update(NODE*head) {
    char id[5];
    NODE *tp = head->next;
    char temp_client_name[100],temp_client_seat_number[100];
    printf("请输入要订票的车次序号id>>>>");
    scanf("%s", id);
    printf("请输入乘客姓名,乘客证件号>>>");
    scanf("%s %s", temp_client_name,temp_client_seat_number);
    fflush(stdin);
    if (!tp){
        printf("没有数据可操作\n");
        return;
    }
    while (tp)
    {
        if (!strcmp(tp->data.id, id))
        {	
        	//修改的临时结构体 
            TRAIN t;
            //t.train_end_city里面存的是乘客名称 
            strcpy(t.client[0], temp_client_name);
            /*这里执行订票逻辑,添加乘客姓名,若还有剩余位置>=1,则剩余位置减去1*/
            //char remaining_position[100];--先把剩余位置 
            int remaining_count = atoi(tp->data.remaining_position);
            if  (remaining_count >= 1) {
            	remaining_count -= 1;
            	itoa(remaining_count,tp->data.remaining_position,100);
            	// 将乘客姓名添加到结构体的二维字符串数组中去
            	//char client[5][20]={"1","1","1","1","1"}
            	int i = 0;
				//printf(" %s", t.client[0]);
			    for(i; i < 5; i++) {
			    	if (tp->data.client[i][0] == '1'){
			    		strcpy(tp->data.client[i], t.client[0]);
						//现在需要分配给客户座位号,随机生成一个,我随机数取的很大,来保证不重复
					    int x = rand() % 1000 + 1; //1-1000的座位号
					    printf("该列车座位充足,已经成功进行订票,座位号为%d\n",x);
					    int j = 0;
						for (j; j < 3; j++){
							// 0表示字符串内容相同 
							if(strcmp(a[j].name,temp_client_name) == 0){
								itoa(x,a[j].seat_number,10);
								break;
							}
					 	}
			    		break;
			    	}	
			    } 

代码运行效果:

张三李四进行订票操作

void printHead() {
    printf("********************************\n");
    printf("*** 欢迎使用高铁客运订票系统 ***\n");
    printf("********************************\n");
    printf("*       1.添加客运线信息       *\n");
    printf("*       2.查询车次信息         *\n");
    printf("*       3.输出所有车次信息     *\n");
    printf("*       4.查询所有乘客信息     *\n");
    printf("*       5.乘客订票             *\n");
    printf("*       6.乘客退票             *\n");
    printf("*       7.退出系统             *\n");
    printf("********************************\n");

}

//***************************************
int main() {
	srand((unsigned int)time(NULL));//生成座位号的随机数 
    NODE *head;//定义头指针建立表
    int key;
    head = readInfo();
    printHead();
    while (1) {
        printf("请输入数字选择功能>>");
        scanf("%d", &key);
        if (key == 7) break;
        switch (key) {
        case 1:
            while (1)
            //1-添加一个高铁 
                if (add(head) == 0)
				break;
            break;
        case 2:
        	//2-根据条件来查询高铁 
            select(head);
            break;
        case 3:
        	//3-查询所有客运线信息 
            out(head);
            break;
        case 5:
        	//5-乘客订票
			update(head);
            break;
        case 6:
        	//5-乘客退票 
			update1(head);
            break;
        case 4: 
        	//4-查询所有乘客乘客信息--乘客信息写死,都放在一个结构体数组里面
			 int i = 0;
			 for (i; i < 3; i++){
			 	printf("乘客姓名:%s\n",a[i].name);
			 	printf("乘客证件号:%s\n",a[i].number);
			 	//char temp_flag[100] = "1";
			 	if (strcmp(a[i].seat_number,"1") == 0){
			 		printf("该乘客还没有预定座位\n");	
			 	} else {
			 		printf("乘客座位号:%s\n",a[i].seat_number);
			 	}
			 }
			 break;
        }
    }
}

源码获取

欢迎大家点赞、收藏、关注、评论、批评啦 、查看👇🏻👇🏻获取联系方式👇🏻👇🏻

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员象漂亮

竭诚为您服务!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值