这个代码实现了一个停车场管理系统,主要功能包括车辆信息的添加、删除、修改、查找、显示所有车辆信息、排序以及计算停车费用。系统使用双向链表来存储车辆数据,并提供了菜单驱动的界面供用户选择不同的操作。
主要功能描述:
-
添加车辆信息:
用户可以选择添加新的车辆信息,包括车牌号、车辆类型、停放时间等。 -
删除车辆信息:
通过输入车牌号,可以从系统中删除相应的车辆记录。 -
修改车辆信息:
用户可以修改指定车牌号的车辆信息,如更新停放时间或车辆类型。 -
查找车辆信息:
根据输入的车牌号,查找并显示该车辆的详细信息。 -
显示所有车辆:
列出当前系统中所有已登记的车辆信息。 -
排序功能:
用户可以选择按停放时间或车辆类型对车辆进行排序,并显示排序后的结果。 -
计算停车费用:
根据车辆的停放时间计算停车费用。 -
数据持久化:
系统能够从文件中加载车辆数据,并在退出时将数据保存到文件中,以实现数据的持久化。
实现方式:
-
数据结构:
使用双向链表(SLIST)来存储车辆数据,便于插入、删除和遍历操作。 -
文件操作:
通过load_cars_from_file
和save_cars_to_file
函数实现数据的读取和保存,使用二进制文件格式。 -
用户交互:
提供菜单选项,用户可以通过输入数字选择相应的操作,界面清晰,操作简便。 -
临时排序:
在排序功能中,创建临时链表复制原始数据进行排序,确保原始数据不被修改,排序后显示结果并释放临时链表。
代码结构:
-
主函数:
初始化链表,加载数据,显示菜单,处理用户选择,执行相应操作,保存数据并释放资源。 -
辅助函数:
包括链表操作(初始化、添加、删除、查找等)、数据输入输出、排序、费用计算等功能,模块化设计,便于维护和扩展。
代码演示:
car.h
功能:用于声明车辆数据结构和计费功能函数。头文件的主要作用是提供数据结构和函数声明,以便在其他源文件中使用这些定义和声明。
// 定义车辆数据结构和计费功能函数声明
#ifndef CAR_H
#define CAR_H
#define MAX_STRING_LENGTH 100
typedef struct
{
char carnumber[MAX_STRING_LENGTH]; // 车牌号
char brand[MAX_STRING_LENGTH]; // 品牌
char model[MAX_STRING_LENGTH]; // 型号
char cartype[MAX_STRING_LENGTH]; // 车辆类型
int parktime; // 停车时间
} DATA;
float calculate_fee(int parktime);
#endif
car.c:计费功能实现
规则:不满1小时不收费,超过1小时按10元每小时收费
// 计费功能实现
#include "car.h"
float calculate_fee(int parktime)
{
if (parktime <= 1)
{
return 0.0; // 前一个小时免费
}
else
{
return (parktime - 1) * 10.0; // 1小时后每小时计费10元
}
}
function.h : 进行菜单函数定义和功能函数声明
// 头文件,声明函数原型
#ifndef FUNCTION_H
#define FUNCTION_H
#include "slist.h"
// 菜单函数
void display_menu();
// 录入车辆数据函数
void input_car_data(DATA *data);
// 显示车辆数据函数
void display_car_data(DATA *data);
// 保存文件数据函数
void save_cars_to_file(const char *filename, SLIST *list);
// 读取文件数据函数
void load_cars_from_file(const char *filename, SLIST *list);
// 停放时间排序函数
void sort_cars_by_parking_time(SLIST *list);
// 车辆类型排序函数
void sort_cars_by_type(SLIST *list);
// 缓存链表创建函数
void copy_list(SLIST *dest, SLIST *src);
#endif
function.c:实现主界面显示和文件IO(写入、加载),以及排序算法功能
// 实现主界面显示和文件IO、排序算法
#include "function.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void display_menu()
{
// 设置终端颜色为绿色
printf("\033[1;36m");
printf(" ______ ______\n");
printf(" /|_||_\\`.__ /|_||_\\`.__\n");
printf(" ( _ _ _\\ ( _ _ _\\\n");
printf(" =`-(_)--(_)-' ______ =`-(_)--(_)-'\n");
// 重置终端颜色
printf("\033[0m\n");
// 设置终端颜色为蓝色
printf("\033[1;34m");
printf("========================================\n");
printf("= =\n");
printf("= 停车场车辆管理系统 =\n");
printf("=
标签:链表,管理系统,list,停车场,current,车辆,printf,next,data
From: https://blog.csdn.net/XWXnb6/article/details/144913498