目录
背景:
高铁客运订票系统,
这里我们仅仅实现基础版
功能描述
高铁客运订票的业务活动包括:查询客运线和客票预定的信息、
客票预定和办理退票等。设计一个计算机程序,使上述任务能借助计
算机来完成。
具体要求
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;
}
}
代码运行效果:



张三李四进行订票操作:


menu与main函数:
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;
}
}
}
源码获取
欢迎大家点赞、收藏、关注、评论、批评啦 、查看👇🏻👇🏻获取联系方式👇🏻👇🏻

被折叠的 条评论
为什么被折叠?



