C语言实现停车管理系统

C语言实现停车管理系统

简介

本文介绍如何使用C语言实现一个简单的停车管理系统。停车管理系统可以用来记录车位状态、车辆信息、收费等等相关内容。在本文中,我们将使用文件来存储数据,使用控制台界面进行输入和输出。

1. 设计数据结构

在停车管理系统中,最重要的数据结构是车辆信息。我们可以使用struct来定义一个车辆信息的数据结构:

struct car_info {
    char num[10];       // 车牌号码
    char name[20];      // 车主姓名
    char time[30];      // 进入停车场时间
    float fee;          // 停车费用
};

2. 设计文件格式

为了保存车辆信息,我们需要设计一个文件格式。我们可以使用CSV(逗号分隔值)格式。每一行代表一个车辆信息,每个数据项使用逗号分隔:

车牌号码,车主姓名,进入停车场时间,停车费用

例如:

京A12345,张三,2021-07-01 10:00:00,10.00

3. 实现文件读写

在C语言中,可以使用标准库中的fopen、fread、fwrite、fclose等函数来进行文件读写操作。我们可以使用以下代码来打开一个文件并进行读写:

FILE *fp;   // 定义文件指针
fp = fopen("filename.csv", "r+");  // 打开文件

其中,第一个参数是文件路径和文件名,第二个参数是打开文件的方式。r+表示读写模式。

实现文件读取的代码示例如下:

FILE *fp;   // 定义文件指针
struct car_info car;

fp = fopen("filename.csv", "r+");
if (fp == NULL) {
    printf("Open file error");
    return;
}

while (!feof(fp)) {
    fscanf(fp, "%[^,],%[^,],%[^,],%f\n",
           car.num, car.name, car.time, &car.fee);
    // 处理车辆信息
}
fclose(fp); // 关闭文件

实现文件写入的代码示例如下:

FILE *fp;   // 定义文件指针
struct car_info car;

fp = fopen("filename.csv", "a+");
if (fp == NULL) {
    printf("Open file error");
    return;
}

// 添加一条车辆信息
fprintf(fp, "%s,%s,%s,%.2f\n",
        car.num, car.name, car.time, car.fee);

fclose(fp); // 关闭文件

4. 实现用户界面

用户界面是停车管理系统的核心。我们可以使用控制台界面实现一个简单的操作系统。

在操作系统中,我们可以实现以下功能:

  • 添加车辆:输入车牌号码、车主姓名和进入停车场时间,程序自动计算停车费用并保存到文件中。
  • 删除车辆:输入车牌号码,程序查找该车并从文件中删除车辆信息。
  • 查找车辆:输入车牌号码,程序查找该车并显示车辆信息。
  • 显示所有车辆信息:程序读取文件中的所有车辆信息并输出。
  • 退出程序。

代码示例如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

struct car_info {
    char num[10];
    char name[20];
    char time[30];
    float fee;
};

// 添加车辆
void add_car() {
    struct car_info car;
    time_t now;
    float seconds;

    printf("请输入车牌号码:");
    scanf("%s", car.num);
    printf("请输入车主姓名:");
    scanf("%s", car.name);
    time(&now);
    strftime(car.time, sizeof(car.time),
             "%Y-%m-%d %H:%M:%S", localtime(&now));
    seconds = difftime(now, mktime(localtime(&now)));
    car.fee = seconds / 3600 * 5;  // 停车费用为每小时5元

    FILE *fp;
    fp = fopen("filename.csv", "a+");
    fprintf(fp, "%s,%s,%s,%.2f\n",
            car.num, car.name, car.time, car.fee);
    fclose(fp);

    printf("添加成功!\n");
}

// 删除车辆
void del_car() {
    char num[10];
    FILE *fp;
    struct car_info car;
    int flag = 0;

    printf("请输入车牌号码:");
    scanf("%s", num);

    fp = fopen("filename.csv", "r+");
    while (!feof(fp)) {
        fscanf(fp, "%[^,],%[^,],%[^,],%f\n",
               car.num, car.name, car.time, &car.fee);
        if (strcmp(car.num, num) == 0) {
            flag = 1;
            break;
        }
    }
    fclose(fp);

    if (flag) {
        fp = fopen("filename.csv", "r");
        FILE *temp = fopen("temp.csv", "w");
        while (!feof(fp)) {
            fscanf(fp, "%[^,],%[^,],%[^,],%f\n",
                   car.num, car.name, car.time, &car.fee);
            if (strcmp(car.num, num) != 0) {
                fprintf(temp, "%s,%s,%s,%.2f\n",
                        car.num, car.name, car.time, car.fee);
            }
        }
        fclose(fp);
        fclose(temp);
        remove("filename.csv");
        rename("temp.csv", "filename.csv");

        printf("删除成功!\n");
    } else {
        printf("找不到该车!\n");
    }
}

// 查找车辆
void find_car() {
    char num[10];
    FILE *fp;
    struct car_info car;
    int flag = 0;

    printf("请输入车牌号码:");
    scanf("%s", num);

    fp = fopen("filename.csv", "r");
    while (!feof(fp)) {
        fscanf(fp, "%[^,],%[^,],%[^,],%f\n",
               car.num, car.name, car.time, &car.fee);
        if (strcmp(car.num, num) == 0) {
            flag = 1;
            printf("车牌号码:%s\n", car.num);
            printf("车主姓名:%s\n", car.name);
            printf("进入停车场时间:%s\n", car.time);
            printf("停车费用:%.2f\n", car.fee);
            break;
        }
    }
    fclose(fp);

    if (!flag) {
        printf("找不到该车!\n");
    }
}

// 显示所有车辆信息
void show_car() {
    FILE *fp;
    struct car_info car;

    fp = fopen("filename.csv", "r");
    while (!feof(fp)) {
        fscanf(fp, "%[^,],%[^,],%[^,],%f\n",
               car.num, car.name, car.time, &car.fee);
        printf("车牌号码:%s\n", car.num);
        printf("车主姓名:%s\n", car.name);
        printf("进入停车场时间:%s\n", car.time);
        printf("停车费用:%.2f\n\n", car.fee);
    }
    fclose(fp);
}

// 主程序
int main() {
    int choice;
    while (1) {
        printf("===============================\n");
        printf("请选择要进行的操作:\n");
        printf("[1] 添加车辆\n");
        printf("[2] 删除车辆\n");
        printf("[3] 查找车辆\n");
        printf("[4] 显示所有车辆信息\n");
        printf("[5] 退出程序\n");
        printf("===============================\n");
        printf("请输入选项:");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                add_car();
                break;
            case 2:
                del_car();
                break;
            case 3:
                find_car();
                break;
            case 4:
                show_car();
                break;
            case 5:
                exit(0);
            default:
                printf("无效选项!\n");
                break;
        }
    }
    return 0;
}

示例

示例一:添加车辆

选择“添加车辆”操作,输入车牌号码和车主姓名。系统自动获取当前时间,并计算停车费用。

请选择要进行的操作:
[1] 添加车辆
[2] 删除车辆
[3] 查找车辆
[4] 显示所有车辆信息
[5] 退出程序
请输入选项:1
请输入车牌号码:京A12345
请输入车主姓名:张三
添加成功!
请选择要进行的操作:
[1] 添加车辆
[2] 删除车辆
[3] 查找车辆
[4] 显示所有车辆信息
[5] 退出程序
请输入选项:

示例二:查找车辆

选择“查找车辆”操作,输入车牌号码。系统查找并显示车辆信息。

请选择要进行的操作:
[1] 添加车辆
[2] 删除车辆
[3] 查找车辆
[4] 显示所有车辆信息
[5] 退出程序
请输入选项:3
请输入车牌号码:京A12345
车牌号码:京A12345
车主姓名:张三
进入停车场时间:2021-07-01 15:10:30
停车费用:25.17

请选择要进行的操作:
[1] 添加车辆
[2] 删除车辆
[3] 查找车辆
[4] 显示所有车辆信息
[5] 退出程序
请输入选项:

总结

本文介绍了使用C语言实现停车管理系统的完整过程,包括设计数据结构、设计文件格式、实现文件读写、实现用户界面等。同时,文中提供了示例代码和示例操作,方便读者在学习过程中进行实践。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现停车管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++中拷贝构造函数的应用详解

    C++中拷贝构造函数的应用详解 什么是拷贝构造函数 在 C++ 中拷贝构造函数是一种特殊的构造函数,其用途是从一个已经存在的对象复制数据到一个新创建的对象中。拷贝构造函数以引用的方式传递源对象并创建新的对象之后,将源对象的值复制到新对象中。拷贝构造函数的形式为 ClassName (const ClassName &obj),其中 obj 是要复制的…

    C 2023年5月22日
    00
  • C++线程安全容器stack和queue的使用详细介绍

    C++线程安全容器stack和queue的使用详细介绍 什么是线程安全容器 线程安全容器是可以支持在多个线程并发访问的STL容器。在多线程程序中使用线程安全容器可以保证数据操作的正确性和安全性。 为什么需要线程安全容器 在并发环境中,多个线程可能同时访问同一资源。对于非线程安全的容器,在多线程的情况下容易出现数据竞争、死锁等问题。线程安全容器可以避免这种问题…

    C 2023年5月22日
    00
  • C++定义和初始化string对象实例详解

    C++定义和初始化string对象实例详解 在C++中,string是一个非常常用的数据类型,可以用来表示字符串。本文将详细讲解如何定义和初始化string对象实例。 定义string对象 要定义一个string对象,可以用以下方式: #include <string> std::string str1; 这样就定义了一个名为str1的空stri…

    C 2023年5月22日
    00
  • C语言如何建立动态链表问题

    建立动态链表是C语言中常见的数据结构应用之一。以下是如何建立动态链表的完整攻略: 步骤一:定义链表结构 首先需要定义一个链表结构体,包括节点数据和指向下一个节点的指针。 typedef struct Node { int data; struct Node *next; } Node; 步骤二:创建头结点 链表的头结点是链表的入口,不存储数据,只存储链表中第…

    C 2023年5月23日
    00
  • 栈(顺序)的实现:括号的解析

    一、问题引入 在学习栈的过程中,教材有一个案例:利用栈结构解析括号的匹配问题。括号问题:[({}{})],说明 [] 、() 、{} 称为一对且满足就近匹配。 号码位置对应的括号之间进行匹配,结果:0-7、 1-6、 2-3、 4-5 源码链接https://github.com/caojun97/Bracket_Match 二、过程记录 2-1 栈的介绍 …

    C语言 2023年4月18日
    00
  • C语言版医院管理系统

    C语言版医院管理系统攻略 介绍 C语言版医院管理系统是一个完整的医院管理系统,可以实现包括病人信息管理、医生信息管理、医院排班管理、医生出诊信息管理、病历管理等多项功能。该系统可以实现对医院各种资源和信息的自由管理,方便医院管理人员的工作。 系统需求 操作系统:Windows或Linux C语言编译器:gcc或VS 操作说明 1. 运行程序 下载并解压缩医院…

    C 2023年5月23日
    00
  • C 程序 二进制转换为十进制

    C程序 二进制转换为十进制使用攻略 1. 程序说明 本程序是用C语言编写的二进制转十进制的代码。它能够将一个二进制数转为与之对应的十进制数。 2. 程序使用 2.1 代码说明 程序主要包含了两个部分:函数定义和函数调用。其中函数定义部分包括二进制转十进制的核心函数binaryToDecimal(),该函数的详细定义和使用说明如下: int binaryToD…

    C 2023年5月9日
    00
  • C语言 结构体

    下面就为大家详细讲解一下“C语言 结构体”的使用攻略。 C语言 结构体 结构体是C语言中一种自定义的数据类型,用于存储一组多个不同类型的数据,相比于数组在存储不同类型数据时的不足,结构体能够更加灵活地组合多个类型的数据。一个结构体被定义后,可以使用点运算符 . 来访问其各个成员。 结构体的定义 定义一个结构体需要使用 struct 关键字,结构体跟类型名之间…

    C 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部