设计一个景区购票系统,实现电子购票、结算和付款功能。程序运行,用户可查看该景区票价及优惠政策,通过菜单选择实现购票、查看已购票、结算和付款功能。各个功能通过函数实现,在主函数中通过调用相应函数实现相应功能。程序运行显示以下界面:*******************************欢迎光临山水乐园*************************** 景区门票价格1.成人票 50元/人2.儿童票(3-12岁) 15元/人3.青少年票(13-18岁) 20元/人4.老年人票(60岁及以上) 25元5.婴幼儿票(3岁以下) 免票***************************************************************************请根据菜单选项进行以下操作:1.购票2.查看已购门票3.结算4.付款0.退出该系统完成以下功能:1.购票:进入购票界面,可连续多次输入购票人年龄和数量。2.查看已购门票:查看购票结果。3.结算:根据已够门票计算应付款金额。4.付款:进行结账付款,根据用户输入的付款金额,系统自动进行找钱等功能。0.退出:退出程序。
时间: 2023-07-18 11:45:05 浏览: 44
下面是一个简单的C语言程序,实现了您所描述的景区购票系统。代码中使用了结构体和指针,以及动态内存分配等技术。请注意,这只是一个简单的示例程序,实际应用中可能需要更多的功能和错误处理。
```c
#include <stdio.h>
#include <stdlib.h>
#define ADULT_PRICE 50
#define CHILD_PRICE 15
#define YOUTH_PRICE 20
#define SENIOR_PRICE 25
typedef struct {
int age;
int count;
} Ticket;
int menu();
void purchase(Ticket **tickets, int *size);
void view(Ticket *tickets, int size);
void checkout(Ticket *tickets, int size);
void pay(int total);
int main() {
Ticket *tickets = NULL;
int size = 0;
int choice;
printf("***************************************\n");
printf("欢迎光临山水乐园\n");
printf("景区门票价格\n");
printf("1.成人票 50元/人\n");
printf("2.儿童票(3-12岁) 15元/人\n");
printf("3.青少年票(13-18岁) 20元/人\n");
printf("4.老年人票(60岁及以上) 25元\n");
printf("5.婴幼儿票(3岁以下) 免票\n");
printf("***************************************\n");
do {
choice = menu();
switch (choice) {
case 1:
purchase(&tickets, &size);
break;
case 2:
view(tickets, size);
break;
case 3:
checkout(tickets, size);
break;
case 4:
if (size == 0) {
printf("没有购票记录\n");
} else {
int total = 0;
for (int i = 0; i < size; i++) {
Ticket *t = tickets + i;
if (t->age >= 3 && t->age <= 12) {
total += t->count * CHILD_PRICE;
} else if (t->age >= 13 && t->age <= 18) {
total += t->count * YOUTH_PRICE;
} else if (t->age >= 60) {
total += t->count * SENIOR_PRICE;
} else {
total += t->count * ADULT_PRICE;
}
}
printf("应付款金额:%d元\n", total);
pay(total);
free(tickets);
size = 0;
}
break;
case 0:
printf("谢谢光临,再见!\n");
break;
default:
printf("无效的选项,请重新输入\n");
break;
}
} while (choice != 0);
return 0;
}
int menu() {
int choice;
printf("请根据菜单选项进行以下操作:\n");
printf("1.购票\n");
printf("2.查看已购门票\n");
printf("3.结算\n");
printf("4.付款\n");
printf("0.退出\n");
printf("请选择:");
scanf("%d", &choice);
return choice;
}
void purchase(Ticket **tickets, int *size) {
int age, count;
Ticket *t;
do {
printf("请输入购票人年龄(0退出):");
scanf("%d", &age);
if (age == 0) {
break;
}
printf("请输入购票数量:");
scanf("%d", &count);
t = (Ticket *)realloc(*tickets, (*size + 1) * sizeof(Ticket));
if (t == NULL) {
printf("内存分配失败\n");
exit(1);
}
*tickets = t;
t += *size;
t->age = age;
t->count = count;
(*size)++;
} while (1);
}
void view(Ticket *tickets, int size) {
if (size == 0) {
printf("没有购票记录\n");
} else {
printf("已购票记录:\n");
printf("年龄\t数量\n");
for (int i = 0; i < size; i++) {
Ticket *t = tickets + i;
printf("%d\t%d\n", t->age, t->count);
}
}
}
void checkout(Ticket *tickets, int size) {
if (size == 0) {
printf("没有购票记录\n");
} else {
int total = 0;
for (int i = 0; i < size; i++) {
Ticket *t = tickets + i;
if (t->age >= 3 && t->age <= 12) {
total += t->count * CHILD_PRICE;
} else if (t->age >= 13 && t->age <= 18) {
total += t->count * YOUTH_PRICE;
} else if (t->age >= 60) {
total += t->count * SENIOR_PRICE;
} else {
total += t->count * ADULT_PRICE;
}
}
printf("应付款金额:%d元\n", total);
}
}
void pay(int total) {
int paid, change;
do {
printf("请输入付款金额:");
scanf("%d", &paid);
if (paid < total) {
printf("付款金额不足,请重新输入\n");
} else {
change = paid - total;
printf("应找回:%d元\n", change);
break;
}
} while (1);
}
```