数据结构车票管理系统的实验课设
时间: 2023-07-06 17:32:13 浏览: 46
好的,车票管理系统可以使用链表作为数据结构来实现。你可以定义一个Ticket类来表示车票,包含车票编号、起点站、终点站、发车时间、价格等属性。然后使用链表来维护车票信息,每个节点表示一个车票。
可以定义一个TicketList类来实现链表。TicketList类包含头节点head和尾节点tail,以及一些基本的操作,如添加车票、删除车票、查询车票等。可以实现以下方法:
1. addTicket(Ticket ticket): 添加车票
2. deleteTicket(String ticketNo): 删除车票
3. searchTicket(String ticketNo): 查询车票
4. displayAllTickets(): 显示所有车票信息
具体实现细节可以根据需要进行调整,例如可以添加排序功能、根据不同条件查询车票等。
在程序运行时,可以先从文件中读取已经存在的车票信息,然后将其添加到链表中。在程序结束时,需要将链表中的车票信息保存到文件中,以便下一次运行时读取。
相关问题
数据结构车票管理系统的实验课设,用C语言来实现,要有完整源代码
以下是一个简单的车票管理系统的实验课设,使用 C 语言编写,包括完整的源代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILENAME "tickets.txt" // 存储车票信息的文件名
// 车票结构体
typedef struct {
char train_num[10]; // 车次
char start_city[20]; // 起点城市
char end_city[20]; // 终点城市
char start_time[10]; // 出发时间
float price; // 票价
int remain_num; // 剩余数量
} Ticket;
// 添加车票信息
void add_ticket(Ticket *tickets, int *num_tickets) {
// 打开文件
FILE *fp = fopen(FILENAME, "a");
if (fp == NULL) {
printf("Open file failed!\n");
return;
}
// 输入车票信息
printf("Enter train number: ");
scanf("%s", tickets[*num_tickets].train_num);
printf("Enter start city: ");
scanf("%s", tickets[*num_tickets].start_city);
printf("Enter end city: ");
scanf("%s", tickets[*num_tickets].end_city);
printf("Enter start time: ");
scanf("%s", tickets[*num_tickets].start_time);
printf("Enter price: ");
scanf("%f", &tickets[*num_tickets].price);
printf("Enter remain number: ");
scanf("%d", &tickets[*num_tickets].remain_num);
// 写入文件
fprintf(fp, "%s %s %s %s %.2f %d\n", tickets[*num_tickets].train_num,
tickets[*num_tickets].start_city,
tickets[*num_tickets].end_city,
tickets[*num_tickets].start_time,
tickets[*num_tickets].price,
tickets[*num_tickets].remain_num);
// 关闭文件
fclose(fp);
// 更新票数
(*num_tickets)++;
}
// 删除车票信息
void delete_ticket(Ticket *tickets, int *num_tickets) {
// 打开文件
FILE *fp = fopen(FILENAME, "r");
if (fp == NULL) {
printf("Open file failed!\n");
return;
}
// 输入车次
char train_num[10];
printf("Enter train number: ");
scanf("%s", train_num);
// 读取文件
Ticket temp;
int i = 0, deleted = 0;
while (fscanf(fp, "%s %s %s %s %f %d", temp.train_num, temp.start_city,
temp.end_city, temp.start_time,
&temp.price, &temp.remain_num) != EOF) {
if (strcmp(temp.train_num, train_num) == 0) {
deleted = 1;
continue;
}
tickets[i++] = temp;
}
fclose(fp);
// 写入文件
fp = fopen(FILENAME, "w");
if (fp == NULL) {
printf("Open file failed!\n");
return;
}
for (int j = 0; j < i; j++) {
fprintf(fp, "%s %s %s %s %.2f %d\n", tickets[j].train_num,
tickets[j].start_city,
tickets[j].end_city,
tickets[j].start_time,
tickets[j].price,
tickets[j].remain_num);
}
fclose(fp);
// 更新票数
if (deleted) {
(*num_tickets)--;
printf("Delete ticket succeeded!\n");
} else {
printf("Train number not found!\n");
}
}
// 修改车票信息
void modify_ticket(Ticket *tickets, int num_tickets) {
// 打开文件
FILE *fp = fopen(FILENAME, "r+");
if (fp == NULL) {
printf("Open file failed!\n");
return;
}
// 输入车次
char train_num[10];
printf("Enter train number: ");
scanf("%s", train_num);
// 查找车票信息
Ticket temp;
int found = 0;
long offset = 0;
while (!found && fscanf(fp, "%s %s %s %s %f %d", temp.train_num, temp.start_city,
temp.end_city, temp.start_time,
&temp.price, &temp.remain_num) != EOF) {
if (strcmp(temp.train_num, train_num) == 0) {
found = 1;
} else {
offset = ftell(fp);
}
}
if (!found) {
printf("Train number not found!\n");
fclose(fp);
return;
}
// 修改车票信息
printf("Enter new start city (current: %s): ", temp.start_city);
scanf("%s", temp.start_city);
printf("Enter new end city (current: %s): ", temp.end_city);
scanf("%s", temp.end_city);
printf("Enter new start time (current: %s): ", temp.start_time);
scanf("%s", temp.start_time);
printf("Enter new price (current: %.2f): ", temp.price);
scanf("%f", &temp.price);
printf("Enter new remain number (current: %d): ", temp.remain_num);
scanf("%d", &temp.remain_num);
// 写入文件
fseek(fp, offset, SEEK_SET);
fprintf(fp, "%s %s %s %s %.2f %d\n", temp.train_num,
temp.start_city,
temp.end_city,
temp.start_time,
temp.price,
temp.remain_num);
// 关闭文件
fclose(fp);
printf("Modify ticket succeeded!\n");
}
// 查询车票信息
void query_ticket(Ticket *tickets, int num_tickets) {
// 打开文件
FILE *fp = fopen(FILENAME, "r");
if (fp == NULL) {
printf("Open file failed!\n");
return;
}
// 输入车次
char train_num[10];
printf("Enter train number: ");
scanf("%s", train_num);
// 查找车票信息
Ticket temp;
int found = 0;
while (!found && fscanf(fp, "%s %s %s %s %f %d", temp.train_num, temp.start_city,
temp.end_city, temp.start_time,
&temp.price, &temp.remain_num) != EOF) {
if (strcmp(temp.train_num, train_num) == 0) {
found = 1;
printf("Train Number: %s\n", temp.train_num);
printf("From: %s\n", temp.start_city);
printf("To: %s\n", temp.end_city);
printf("Departure time: %s\n", temp.start_time);
printf("Price: %.2f\n", temp.price);
printf("Remain number: %d\n", temp.remain_num);
}
}
if (!found) {
printf("Train number not found!\n");
}
// 关闭文件
fclose(fp);
}
// 显示车票信息
void display_tickets(Ticket *tickets, int num_tickets) {
// 打开文件
FILE *fp = fopen(FILENAME, "r");
if (fp == NULL) {
printf("Open file failed!\n");
return;
}
// 读取车票信息
Ticket temp;
int i = 0;
while (fscanf(fp, "%s %s %s %s %f %d", temp.train_num, temp.start_city,
temp.end_city, temp.start_time,
&temp.price, &temp.remain_num) != EOF) {
tickets[i++] = temp;
}
fclose(fp);
// 按照车次排序
for (int j = 0; j < num_tickets-1; j++) {
for (int k = 0; k < num_tickets-j-1; k++) {
if (strcmp(tickets[k].train_num, tickets[k+1].train_num) > 0) {
Ticket temp = tickets[k];
tickets[k] = tickets[k+1];
tickets[k+1] = temp;
}
}
}
// 显示车票信息
printf("Train Number\tFrom\t\tTo\t\tDeparture Time\tPrice\tRemain Number\n");
for (int j = 0; j < num_tickets; j++) {
printf("%-10s\t%-12s\t%-12s\t%-12s\t%-.2f\t%d\n", tickets[j].train_num,
tickets[j].start_city,
tickets[j].end_city,
tickets[j].start_time,
tickets[j].price,
tickets[j].remain_num);
}
}
int main() {
Ticket tickets[100];
int num_tickets = 0;
while (1) {
// 显示菜单
printf("\n");
printf("1. Add ticket\n");
printf("2. Delete ticket\n");
printf("3. Modify ticket\n");
printf("4. Query ticket\n");
printf("5. Display tickets\n");
printf("0. Exit\n");
// 选择操作
int op;
printf("Enter operation: ");
scanf("%d", &op);
switch (op) {
case 1:
add_ticket(tickets, &num_tickets);
break;
case 2:
delete_ticket(tickets, &num_tickets);
break;
case 3:
modify_ticket(tickets, num_tickets);
break;
case 4:
query_ticket(tickets, num_tickets);
break;
case 5:
display_tickets(tickets, num_tickets);
break;
case 0:
exit(0);
default:
printf("Invalid operation!\n");
}
}
return 0;
}
```
注意事项:
- 本程序使用了一个全局变量 `FILENAME`,表示存储车票信息的文件名,请确保程序运行目录下有该文件并有写入权限。
- 本程序最多支持存储 100 条车票信息,可以根据需要修改代码。
- 本程序没有进行异常处理,请确保输入的数据合法。
数据结构车票管理系统的实验课设具体内容,要有流程图
好的,下面是车票管理系统的流程图:
![车票管理系统流程图](https://cdn.jsdelivr.net/gh/wu529778790/figure-bed/image/车票管理系统流程图.png)
具体实现步骤如下:
1. 读取车票信息文件,将已有车票信息添加到链表中。
2. 根据用户输入的操作选择相应的功能。
3. 如果选择添加车票,则输入车票信息,将车票添加到链表中并保存到文件中。
4. 如果选择删除车票,则输入要删除的车票编号,将车票从链表中删除并保存到文件中。
5. 如果选择查询车票,则输入要查询的车票编号,输出车票信息。
6. 如果选择显示所有车票信息,则遍历链表并输出所有车票信息。
7. 如果选择退出程序,则将链表中的车票信息保存到文件中并退出。
车票信息文件可以使用文本文件或者二进制文件来存储,根据实际需要来选择。