数据结构车票管理系统的实验课设

时间: 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. 如果选择退出程序,则将链表中的车票信息保存到文件中并退出。 车票信息文件可以使用文本文件或者二进制文件来存储,根据实际需要来选择。

相关推荐

最新推荐

recommend-type

Python编写车票订购系统.docx

3.用数据库存储每一次售票记录,包括售票流水号,起点站,终点站,里程,金额等数据,并统计所有存储记录的总售票金额及各站的旅客流量(进站流量+出站流量) 4.能够打印票据信息,包括订票人信息,票价,票据号,...
recommend-type

C语言火车车票管理系统

车票管理系统 一车站每天有n个发车班次,每个班次都有一班次号(1、2、3…n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。 功能要求:用c++设计一系统,能提供下列服务: ...
recommend-type

火车票销售系统实验报告

本文档是以java代码为核心的数据库系统,并链接数据库而生成的火车票系统
recommend-type

c语言课程设计(车票管理系统)

该系统主要对火车进行管理,包括录入、显示、修改、查询、订票,退票、删除、保存等操作。
recommend-type

SQL数据库--学生订购车票管理系统

SQL数据库--学生订购车票管理系统,使用于毕业设计 等等学习什么的饿。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。