停车场管理系统设计一个停车场管理程序,可以查询、管理停车场的车位信息,可以进行收费管理

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h> //system("cls"):清屏  
#include <conio.h>  //getch()

typedef struct Parking
{
    char name[20];        //车主姓名
    char carname[10];     //车牌号
    long information;     //车主联系方式
    char region;          //车位区域编号
    int num;              //车位编号
    struct Parking* next; //指针
}Parking;




void  F(Parking* head)   //打印用户信息
{
    system("cls");
    Parking* p = head->next;
    printf("\n\t\t                              --停车场用户信息--                                            \n\n");
    printf("\t---------------------------------------------------------------------\n");
    printf("\t车主姓名--------车牌号-------车主联系方式-------车位编号----\n");
    while (p)
    {
        printf("\t%-17s%-16s%-15lld%-17d\n", p->name, p->carname, p->information, p->num);
        p = p->next;
    }
    _getch();
    return;
}



Parking* Addcar(Parking* head)      //添加车辆信息
{
    int x;
    system("cls");
    Parking* p = head;
    while (p->next != NULL)
    {
        p = p->next;
    }
    printf("输入需要添加的车辆个数:");
    scanf("%d", &x);
    while (x--)
    {
        system("cls");
        Parking* Node = (Parking*)malloc(sizeof(Parking));
        printf("\n输入用户姓名:");
        scanf("%s", Node->name);
        printf("\n输入车牌号:");
        scanf("%s", Node->carname);
        printf("\n输入车主联系方式:");
        scanf("%ld", &Node->information);
        printf("\n输入车位编号:");
        scanf("%d", &Node->num);
        Node->next = NULL;
        p->next = Node;
        p = p->next;
    }
    printf("\n输入完成!");
    F(head);
    printf("\n按任意键返回主页\n");
    _getch();
    return head;
}



Parking* Change(Parking* head)      //修改用户信息
{
    char name[20];
    system("cls");
    printf("输入需要修改的用户姓名:");
    scanf("%s", name);
    Parking* p = head->next;
    while (p)
    {
        if (strcmp(p->name, name) == 0)
        {
            system("cls");
            int x;
            printf("\n\t\t                           --该用户信息--                                            \n\n");
            printf("\t---------------------------------------------------------------------\n");
            printf("\t车主姓名--------车牌号-------车主联系方式-------车位编号----\n");
            printf("\t%-17s%-16s%-15lld%-17d\n", p->name, p->carname, p->information, p->num);
            printf("\n输入你要修改的信息编号:\n");
            printf("     1-车主姓名    \n");
            printf("     2-车牌号      \n");
            printf("     3-车主联系方式 \n");
            printf("     5-车位编号     \n");
            scanf("%d", &x);
            switch (x)
            {
            case 1:
                printf("\n\t输入修改后的信息");
                scanf("%s", p->name);
                break;
            case 2:
                printf("\n\t输入修改后的信息");
                scanf("%s", p->carname);
                break;
            case 3:
                printf("\n\t输入修改后的信息");
                scanf("%ld", &p->information);
                break;
            case 4:
                printf("\n\t输入修改后的信息");
                scanf("%d", &p->num);
                break;
            }
            printf("\n\t\t修改后的用户信息为");
            printf("\t车主姓名--------车牌号-------车主联系方式-------车位编号----\n");
            printf("\t%-17s%-16s%-15lld%-17d\n", p->name, p->carname, p->information,  p->num);
            break;
        }
        p = p->next;
    }
    if (p == NULL)
    {
        printf("\n未找到相应用户");
        printf("\n按任意键返回主页\n");
        _getch();
        return head;
    }
    printf("\n修改完成!");
    F(head);
    printf("\n按任意键返回主页\n");
    _getch();
    return head;
}


Parking* Delete(Parking* head)      //删除用户信息
{
    char name[20];
    system("cls");
    printf("\n\t\t输入你要删除的用户姓名:");
    scanf("%s", name);
    Parking* p = head;
    Parking* q = p->next;
    while (q)   //找到需要删除数据的前结点
    {
        if (strcmp(q->name, name) == 0)  //判断字符串是否相等函数
        {
            p->next = q->next;
            free(q);  //释放内存空间
            break;
        }
        p = q;
        q = p->next;
    }
    if (p->next == NULL)
    {
        printf("\n\t\t未找到该用户信息!");
    }
    else
    {
        printf("\n\t\t删除成功!!");
        F(head);
    }
    printf("\n\t\t按任意键返回主菜单");
    _getch();
    return head;
}



void  Find(Parking* head)      //查找用户信息
{
    system("cls");
    char name[20];
    printf("\n\t\t输入你要查找的用户姓名:");
    scanf("%s", name);
    Parking* p = head;
    while (p->next)
    {
        if (strcmp(p->next->name, name) == 0)
        {
            printf("找到了!\n");
            printf("该用户的信息如下:");
            printf("\n\t\t---用户姓名            %s", p->next->name);
            printf("\n\t\t---车牌号              %s", p->next->carname);
            printf("\n\t\t---车主联系方式        %lld", p->next->information);
            printf("\n\t\t---车位编号            %ld", p->next->num);
            break;
        }
        p = p->next;
    }
    if (p->next == NULL)
        printf("\n\t\t没有找到该用户信息");
    printf("\n\t\t按任意键返回主菜单");
    _getch();
}



void RegionalVehicles(Parking* head)   //寻找指定区域内车辆信息
{
    system("cls");
    char c;
    printf("\n\t\t输入你想要查看的区域");
    getchar();
    scanf("%c", &c);
    Parking* p = head->next;
    printf("\n\t\t                              --%c区域内车辆用户信息--                                            \n\n", c);
    printf("\t---------------------------------------------------------------------\n");
    printf("\t车主姓名--------车牌号-------车主联系方式------车位编号----\n");
    while (p)
    {
        if (p->region == c)  //判断区域字符与输入字符是否相等,相等则输出
        {
            printf("\t%-17s%-16s%-15ld%-17d\n", p->name, p->carname, p->information, p->num);
        }
        p = p->next;
    }
    printf("\n\t\t按任意键返回主菜单");
    _getch();
}



void  Preservation(Parking* head)   //保存数据在文件中
{
		FILE* fp;
    if ((fp = fopen("i停车管理信息.txt", "r")) == NULL)
    {
       perror("无法打开文件!\n");
       exit(1);
   }
    Parking* p = head->next;
    while (p)
    {
        fprintf(fp, "%s %s %ld  %d\n", p->name, p->carname, p->information,  p->num);  //向文件内输入数据
        p = p->next;
    }
    fclose(fp);  //关闭文件
    return;
}




Parking* Read()   //读取文件内数据
{
	FILE* fp;
    if ((fp = fopen("停车管理信息.txt", "r")) == NULL)
    {
       perror("无法打开文件!\n");
       exit(1);
   }
    
    Parking* head = (Parking*)malloc(sizeof(Parking));  //为头指针申请内存空间
    head->next = NULL;
    Parking* p1 = (Parking*)malloc(sizeof(Parking));  //申请存放数据的结点
    p1->next = NULL;
    if (fscanf(fp, "%s %s %ld %c %d", p1->name, p1->carname, &p1->information, &p1->region, &p1->num) != EOF)  //判断所读文件内容是否为空
    {
        head->next = p1;
        Parking* tmp = head;
        while (tmp->next)   //利用尾插法插入结点,确保读出的数据安正序输出
        {
            tmp = tmp->next;
        }
        while (fgetc(fp) != EOF)  //判断文件是否为空
        {

            Parking* p = (Parking*)malloc(sizeof(Parking));
            fscanf(fp, "%s %s %ld  %d", p->name, p->carname, &p->information, &p->num);
            tmp->next = p;
            p->next = NULL;
            tmp = tmp->next;
        }
        Parking* p2 = head;  //删除最后一个结点
        while (p2->next->next)
        {
            p2 = p2->next;
        }
        p2->next = NULL;
    }
    else
        return NULL;
    fclose(fp);
    return head->next;
}

void menu()   //主菜单
{
    Parking* head = (Parking*)malloc(sizeof(Parking));
    head->next = Read();  //读取文件信息
    system("cls");
    int choice;
    do
    {
        system("cls");  //主页面
        printf("--------------------------------------------------------------");
        printf("\n\n");
        printf("********************欢迎来到停车位管理系统********************\n");
        printf("\n\n");
        printf("---------------------------------------------------------\n");
        printf("\n                 1- 录入车辆信息                        ");
        printf("\n                 2- 查找车辆信息                        ");
        printf("\n                 3- 移除车辆信息                        ");
        printf("\n                 4- 修改车辆信息                        ");
        printf("\n                 5- 查询停车情况                        ");
        printf("\n                 6- 管理长期停车用户信息                ");
        printf("\n                 0- 退出管理系统并保存数据              \n");
        printf("\n-------------------------------------------------------\n");
        scanf("%d", &choice);
        switch (choice)
        {
        case 1:
            head = Addcar(head);//添加
            break;
        case 2:
            Find(head);//查找
            break;
        case 3:
            head = Delete(head);//删除
            break;
        case 4:
            head = Change(head);//修改
            break;
        case 5:
            RegionalVehicles(head);
            break;
        case 6:
            F(head);
            break;
        }
    } while (choice != 0);
    Preservation(head);   //保存数据
}



int main()
{
    menu();
    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值