C语言实现停车管理系统

yizhihongxing

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语言 实现N阶乘的程序代码

    对于实现N阶乘的程序代码,我们可以采用循环的方式进行求解,以下是详细的攻略: 1. 首先明确需求 我们需要实现一个能够求解N阶乘的程序代码,N可以是任意非负整数。 2. 编写程序代码 由于需要使用循环来进行计算,因此我们可以使用for循环来实现。以下是程序的代码: #include <stdio.h> int main() { int n, fa…

    C 2023年5月23日
    00
  • C++实现Dijkstra(迪杰斯特拉)算法

    下面我将为你讲解如何使用C++实现Dijkstra(迪杰斯特拉)算法。 Dijkstra算法简介 Dijkstra算法是解决单源最短路径问题的一种贪心算法。Dijkstra算法最初是由荷兰的计算机科学家Edsger W. Dijkstra于1956年提出的。该算法的思路是从起点开始,依次访问每个相邻节点,确定从起点到该节点的最短路径,并将该节点标记为已访问。…

    C 2023年5月22日
    00
  • C enum(枚举)

    下面详细讲解一下C语言中枚举(enum)的完整使用攻略。 枚举的定义 C语言中的枚举是一种用户自定义的数据类型,它允许我们定义一组命名的常量。枚举常量被称为枚举值(enum value)。 在C语言中枚举的定义格式为: enum 枚举类型名{ 枚举值1, 枚举值2, …… 枚举值n }; 其中,枚举类型名是一个标识符,它是这个枚举类型的名称;枚举值是一组常量…

    C 2023年5月10日
    00
  • C++ set到底是什么

    C++的set是一个标准库中的容器,提供了有序关联容器的功能。一个set中的元素是按照特定的顺序排列的,并且每个元素只能在set中出现一次,而且这个元素的值可以作为关键字来使用。下面我们将详细介绍set的主要功能和应用。 1. set的定义和基本操作 定义一个set 定义一个set需要包含头文件<set>,同时set是一个泛型类,可以为任意类型定…

    C 2023年5月23日
    00
  • C++中如何实现回调的方法示例

    C++中实现回调的方法有多种,下面介绍两种常见的实现方式。 方式一:函数指针 通过函数指针实现回调,需要定义一个函数指针类型,将回调函数与函数指针进行绑定,然后在合适的时机调用函数指针即可。 示例1 定义一个函数指针类型,函数原型为: typedef void (*MyCallbackFunc) (int arg1, int arg2); 其中,第一个参数表…

    C 2023年5月23日
    00
  • C语言中栈的两种实现方法详解

    C语言中栈的两种实现方法详解 栈,即先进后出(LIFO)的数据结构。在C语言中,栈是一个重要的概念,可以用于实现各种算法和数据结构。 本文主要介绍C语言中栈的两种实现方法。 方法一:基于数组实现栈 基于数组实现栈是一种简单的方法。我们可以定义一个数组作为栈的存储空间,并且定义栈顶指针(top)来指示栈顶元素的位置。 下面是一个简单的示例代码: #includ…

    C 2023年5月23日
    00
  • C语言字符串替换:字符,字符串,字符数组详解

    C语言字符串替换:字符、字符串、字符数组详解 在C语言中,字符串替换是一个很基础的操作,常用的字符串替换包括用指定字符替换一个字符串中的某个字符,用指定字符串替换一个字符串中的某个子串,以及用另一个字符串替换一个字符数组中的某个子数组等。本文将详细讲解这三种情况的操作方法。 用指定字符替换一个字符串中的某个字符 首先让我们看一个简单的例子。下面的代码将见一个…

    C 2023年5月23日
    00
  • C#实现JSON解析器MojoUnityJson功能(简单且高效)

    C#实现JSON解析器MojoUnityJson功能(简单且高效) 简介 JSON格式是一种轻量级的数据交换格式,常用于web应用程序之间的数据传输,也广泛应用于移动应用程序的数据交互。MojoUnityJson是一款基于C#的JSON解析器,使用简单且高效。 实现过程 1. 定义数据类型 首先,我们需要定义一些数据类型,方便后续对JSON数据进行解析和处理…

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