C[泊车管理系统]

//

//  main.c

//  泊车管理系统

//

//  Created by 丁小未 on 13-7-14.

//  Copyright (c) 2013 dingxiaowei. All rights reserved.

//

//题目:泊车管理系统

//1)管理人员根据口令进入系统

//2)管理车位信息(车位编号,状态)和每分钟的收费率;

//3)停车时录入汽车停泊信息(车牌号,车型,停泊位置,停泊开始时间);如果车位已满要给出提示;

//4)取车时,根据车牌取,如果没有给出提示;需要根据车辆停泊时间自动计算费用并显示在屏幕上。

#include <stdio.h>

#include <string.h>

#include <time.h>

#define MAX 20


struct StopedCar

{

    char carNum[20]; //车牌号

    char carshap[20];//车型

    int areaNum; //停泊位置号码

    char stopedTime[30]; //开始停泊时间

    int h;  //记录小时

    int m;  //记录分钟

};

int total;  //总记录数

char password[20]; //密码

struct StopedCar stopedcar[MAX];

int price=1.0;//默认泊车单价为11M


/***************函数申明******************************************/

void Init();//初始化,文件不存在,则建立,同时记录下文件中记录的个数

int get_menu_choice(); //接受菜单选择

void menu();//菜单相应

void Show_menu();//显示菜单

FILE *file_operate(char *mode); //文件操作类型

void set_psw();//设置密码

int psw_check();//密码验证

int Inputonecar(int i);//根据车位号增加一条记录

void Inputfile(int i,FILE *fp);//将下标为i的记录写入文件

void Input(FILE *fp);//向管理系统中增加记录

int SetPrice();//设置停车单价(例如:1for1s

void GetCarByAreaNum(FILE *fp);//根据车位号取车

/*****以下函数是为了简化部分工作从上面的函数中划分出来的功能**************/

void PrintTitle();//打印头信息

void ShowAllCarInfo(); //显示所有停车信息

void Showonecarinfo(int i);  //显示停车信息

float countMoney(float danjia);//计算根据传入的单价来计算泊车的费用

void Readfile(int i,FILE *fp);//从文件中读取一条记录

int CheckNumber(int areaNum_temp);//检查车位号是否为空,存在返回序号,如果该车位有停车则返回-1

char* GetTime();//获取当前时间

int Cost(char *time1,int danjia);//根据单价和时间差来计算停车消费的价格


int Cost2(int h,int m,int danjia);

void GetCarByAreaNum2(FILE *fp);

int timeh();

int timem();

/***************函数的实现****************************************/

//获取当前系统时间

char* GetTime()

{

    {

        time_t now;

        struct tm *timenow;

        time(&now);

        timenow = localtime(&now);

    char *p = asctime(timenow);

    return p;

    }

}

//返回当前小时

int timeh()

{

    int h;

    time_t   now;

    struct   tm     *timenow;

    time(&now);

    timenow   =   localtime(&now);

    char *p = asctime(timenow);

    h=timenow->tm_hour;

    return h;

}

//返回当前分钟

int timem()

{

    int m;

    time_t   now;

    struct   tm     *timenow;

    time(&now);

    timenow   =   localtime(&now);

    char *p = asctime(timenow);

    m=timenow->tm_min;

    return m;

}


//接受菜单选择

int get_menu_choice()

{

    int menu_ch;

    do {

        printf("输入菜单选项:");

        scanf("%d",&menu_ch);

        if((menu_ch<0)||(menu_ch>9))

            printf("输入错误!");

    } while ((menu_ch<0)||(menu_ch>9));

    return menu_ch;

}

//显示菜单

void Show_menu()

{

    printf(">>>>>>>>>>>>>>>欢迎使用泊车管理系统<<<<<<<<<<<<<<<<\n");

    printf("************************************************\n");

    printf("*   1.新增停车信息         |   2.显示所有停车信息   *\n");

    printf("*   3.按照车牌号取车       |   4.按照车位号取车     *\n");

    printf("*   5.按照车牌号查询车信息  |   6.按照车位号查询车信息*\n");

    printf("*   7.设置泊车单价         |   8.密码设置         *\n");

    printf("*   9.主动清屏            |   0.退出             *\n");

    printf("************************************************\n");

}

//清屏,有点问题

//void clear()

//{

//    system("pause");

//    system("cls");

//}


//菜单响应

void menu()

{

    while (1) {

        Show_menu();

        switch (get_menu_choice()) {

            case 1://新增停车信息

                Input(file_operate("ab"));  //二进制追加写入

                break;

            case 2://显示所有泊车信息

                ShowAllCarInfo();

                break;

            case 3://按照车牌好取车

                break;

            case 4://按照车位号取车

                GetCarByAreaNum2(file_operate("wb"));

                break;

            case 5://按照车牌号查询车位信息

                break;

            case 6: //按照车位号查询车位信息

                break;

            case 7://设置停车价格(例如:1for1s

                SetPrice();

                break;

             case 8://密码设置

                set_psw();

                break;

            case 9://手动清屏

                //clear();

                printf("手动清屏有误!");

                break;

            case 0://结束程序

                //system("cls");

                printf("*********************\n");

                printf("     欢迎使用本系统     \n");

                printf("**********************\n");

                break;

                //exit(0);

            default:

                break;

        }

    }

}

//打印头信息

void PrintTitle()

{

    printf("-------------------------------------------------------------\n");

    printf("   车牌号          车型   停泊车位号          停泊开始时间   \n");

    printf("-------------------------------------------------------------\n");

}



//初始化,文件不存在,则建立,同时记录下文件中的记录数

void Init()

{

    int ii;

    FILE *fp;

    total=0;

    if((fp=fopen("stopedcar.txt","rb"))==NULL)

    {

        fp=fopen("stopedcar.txt","ab");

        //clear();

        menu();

    }

    else

    {

        for(ii=0;feof(fp)==0;ii++)   //feof检查文件是否结束

        {

            Readfile(ii,fp);

        }

        total=ii-1;

    }

    //total=ii-1;

    fclose(fp);

}

//文件操作类型

FILE *file_operate(char *mode)

{

    char choice;

    FILE *fp;

    do

    {

        fflush(stdin);//清空输入缓存,以便不影响后面的输入

        if((fp=fopen("stopedcar.txt",mode))==NULL)

        {

            puts("Fail to open the file!");

            puts("Try again!(Y/N)?");

            scanf("%c",&choice);

        }

        else

            fp=fopen("stopedcar.txt",mode);

    }

    while(choice=='y'||choice=='Y');

    if(choice=='n'||choice=='N'){}

        //exit(1); //异常退出  exit(0);系统正常退出

    return(fp);

}

//从文件中读取一条记录

void Readfile(int i,FILE *fp)

{

    fscanf(fp,"%20s",&stopedcar[i].carNum);

    fscanf(fp,"%20s",&stopedcar[i].carshap);

    fscanf(fp,"%5d",&stopedcar[i].areaNum);

    fscanf(fp,"%30s",&stopedcar[i].stopedTime);

}


//显示打印一条泊车信息

void Showonecarinfo(int i)

{

    printf("%10s   %10s   %1d  %30s \n",stopedcar[i].carNum,stopedcar[i].carshap,stopedcar[i].areaNum,stopedcar[i].stopedTime);

}

//显示打印所有的泊车信息

void ShowAllCarInfo()/*显示打印所有的信息 */

{

    int i;

    printf("%d个记录:\n",total);

    PrintTitle();

    for(i=0;i<total;i++)

        Showonecarinfo(i);

}

//检查车位号是否为空,存在返回序号,如果该车位没有停车则返回-1 

int CheckNumber(int areaNum_temp)

{

    int i,result=0;

    for(i=0;i<total;i++)

    {

        if(stopedcar[i].areaNum==areaNum_temp)

        {

            result=1;

            break;

        }

    }

    if(result==1)

        return i;

    else

        return -1;

}

//根据车位号增加一条记录

int Inputonecar(int i)

{


    int areaNum;

    do

    {

        printf("输入车位号:(1)");

        scanf("%d",&areaNum);

        if(areaNum<0)

            printf("error!\n");

        if (areaNum>MAX) {

            printf("没有大于%d的车位\n",MAX);

        }

    }

    while(areaNum<0);

    //该车位有停车

    if(CheckNumber(areaNum)>0)

    {

        printf("该车位已经停了车!\n");

        return 0;

    }

    //如果该车位没有停车

    else

    {

        stopedcar[i].areaNum=areaNum;  //将停车的车位号记录为当前的车位号

        printf("Input 车牌号(less than 20 chars):");

        scanf("%s",stopedcar[i].carNum);

        printf("车型号(例如:baomaX6):");

        scanf("%s",&stopedcar[i].carshap);

        char *time=GetTime();//获取当前系统时间

        stopedcar[i].h=timeh();//记录小时

        stopedcar[i].m=timem();//记录分钟

        char *q=stopedcar[i].stopedTime;

        strcpy(q, time);//将当前时间赋值给car.StopedTime

        PrintTitle();

        Showonecarinfo(i);

        //Inputfile(i,fp);

        return 1;

    }

}

//把下标为i 的记录写入文件

void Inputfile(int i,FILE *fp) 

{

    fscanf(fp,"%20s",&stopedcar[i].carNum);

    fscanf(fp,"%20s",&stopedcar[i].carshap);

    fscanf(fp,"%5d",&stopedcar[i].areaNum);

    fscanf(fp,"%30s",&stopedcar[i].stopedTime);

}

//向管理系统中增加记录

void Input(FILE *fp)

{

    int i;

    i=total;

    if(Inputonecar(i))

    {

        total++;

        Inputfile(i,fp);

    }

    fclose(fp);

}


//设置泊车单价

int SetPrice()

{

    printf("请设置泊车单价:(例如:1for 1 m\n");

    scanf("%d",&price);

    printf("您设置的单价是:%d1M\n",price);

    return price;

}

int Cost2(int h,int m,int danjia)

{

    int money;

    //获取当前小时和分钟

    int hnow=timeh();

    int mnow=timem();

    return money=((hnow-h)*60+(mnow-m))*danjia;

}

//根据单价和时间差来计算停车消费的价格

int Cost(char *time1,int danjia)

{

    int money;

    char forein[2];

    char now[2];

    int minu;

    int sec;

    int t1,t2;


    for (int i=14; i<=15; i++,time1++) {

        forein[i-14]=time1[i];

    }

    minu=(forein[0]-48)*10+(forein[1]-48);

    for (int i=17; i<=18; i++,time1++) {

        forein[i-17]=time1[i];

    }

    sec=(forein[0]-48)*10+(forein[1]-48);

    t1=minu*60+sec;



    char *p=GetTime();

    for (int i=14; i<=15; i++,time1++) {

        forein[i-14]=p[i];

    }

    minu=(forein[0]-48)*10+(forein[1]-48);

    for (int i=17; i<=18; i++,time1++) {

        forein[i-17]=p[i];

    }

    sec=(forein[0]-48)*10+(forein[1]-48);

    t2=minu*60+sec;


    money=(t2-t1)*danjia;

    return money;

}

//根据车位号取车

void GetCarByAreaNum2(FILE *fp)

{

    int i,j,k,no_temp,choice2;

    printf("输入要取车的车位号:(例如1)");

    scanf("%d",&no_temp);

    i=CheckNumber(no_temp);

    if(i>=0)

    {

        PrintTitle();

        Showonecarinfo(i);//根据车位号来查询是第几个

        printf("确认取车?(1./2.否)");

        scanf("%d",&choice2);

        if(choice2==1)

        {

//            char *time1=stopedcar[i].stopedTime;

//            printf(time1);

            int h=stopedcar[i].h;

            int m=stopedcar[i].m;


            printf("您需要支付¥%d的停车费\n",Cost2(h,m,price));

            for (j=i; j<total; j++) {

                strcpy(stopedcar[j].carNum, stopedcar[j+1].carNum);

                strcpy(stopedcar[j].carshap, stopedcar[j+1].carshap);

                

            }

            total--;

            for (k=0; k<total; k++) {

                Inputfile(k, fp);

            }

        }

    }

    else

        printf("该车位上没有停车\n");

}

//根据车位号取车

void GetCarByAreaNum(FILE *fp)

{

    int i,j,k,no_temp,choice2;

    printf("输入要取车的车位号:(例如1)");

    scanf("%d",&no_temp);

    i=CheckNumber(no_temp);

    if(i>=0)

    {

        PrintTitle();

        Showonecarinfo(i);//根据车位号来查询是第几个

        printf("确认取车?(1./2.否)");

        scanf("%d",&choice2);

        if(choice2==1)

        {

            char *time1=stopedcar[i].stopedTime;

            printf(time1);

            printf("您需要支付¥%d的停车费\n",Cost(time1,price));

            for (j=i; j<total; j++) {

                strcpy(stopedcar[j].carNum, stopedcar[j+1].carNum);

                strcpy(stopedcar[j].carshap, stopedcar[j+1].carshap);

                

            }

            total--;

            for (k=0; k<total; k++) {

                Inputfile(k, fp);

            }

        }

    }

    else

        printf("该车位上没有停车\n");

}


//设置密码

void set_psw()

{

    char psw_set[20],psw_check[20],c;

    unsigned int i;

    FILE *fp;

    do

    {   printf("You must set password first!\n");

        printf("Enter password:(less than 12 numbers and key'.'for end)\n");

        for(i=0;(c=getchar())!='.';i++)

        {

            //putchar('*');  

            psw_set[i]=c;

        }

        psw_set[i]='\0';

        printf("-----------------\n");

        printf("conform password:");

        for(i=0;(c=getchar())!='.';i++)

        {

            //putchar('*');

            psw_check[i]=c;

        }

        psw_check[i]='\0';

        //printf("------------\n");

        if(strcmp(psw_set,psw_check)==0)

        {printf("Set password success!\n");

            strcpy(password,psw_set);

        }

        else

            printf("error!\n");

    }

    while(strcmp(psw_set,psw_check)!=0);

    //clear();

    fp=fopen("password.txt","wb");

    fprintf(fp,"%s",password);

    fclose(fp);

}

//密码验证

int psw_check()

{

    unsigned int i=1,j=1;

    FILE *fp;

    char pword[20],c;

    if((fp=fopen("password.txt","rb"))==NULL)

    {

        fp=fopen("password.txt","a");

        set_psw();

    }

    fscanf(fp,"%s",password);

    fclose(fp);

    do

    {

        printf("\nInput passwordkey'.'for end(%d/three times)",j);

        for(j=0;(c=getchar())!='.';j++)

        {

            //putchar('*');

            pword[j]=c;

        }

        pword[j]='\0';

        i++;

    }

    while(strcmp(pword,password)!=0&&i<=3);

    if(i<=3)

        return 1;

    else

    {

        printf("You have tryed for three times,fail to open the file!\n");

        return 0;

    }

    

}



int main(int argc, const char * argv[])

{

    

    if(psw_check())

    {

        Init();

        //clear();

        menu();

    }

    return 0;

}


转载于:https://www.cnblogs.com/java20130723/p/3211445.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表

原文:使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表我们知道目标平台是32位的程序运行在64位的系统上&#xff0c;去访问部分注册表的时候系统自动重定向到win32node节点对应的项去了。但是做过安装程序开发人员可能遇到过“需要去掉重定向”的问题&#xff0c…

【51单片机快速入门指南】4.4.2:Mahony AHRS 九轴姿态融合获取四元数、欧拉角

目录传感器的方向源码Mahony_9.cMahony_9.h使用方法测试main.c效果STC15F2K60S2 22.1184MHz Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 上位机&#xff1a;Vofa 1.3.10 移植自MPU6050 获取角度理论推导(三)—9轴融合算法 —— shao15232_1 传感器…

BZOJ 2160 拉拉队排练

2160: 拉拉队排练 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了。拉拉队是篮球比赛的一个看点&#xff0c;好的拉拉队往往能帮助球队增加士气&#xff0c;赢得最终的比赛。所以作为拉拉队队长的楚雨荨同学知道&#xff0c;帮助篮球队训练好拉拉队有多么的重要…

React Native获取设备信息组件

转载 https://www.jianshu.com/p/907b003835dc本文原创首发于公众号&#xff1a;ReactNative开发圈&#xff0c;转载需注明出处。这次介绍的获取移动设备信息的组件名叫&#xff1a;react-native-device-info&#xff0c;兼容IOS和安卓双平台&#xff0c;可以获取设备ID、设备品…

UNIX网络编程——套接字选项(SO_RCVBUF和SO_SNDBUF)

有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项。int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen) int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)level指定…

【51单片机快速入门指南】4.4.3:Madgwick AHRS 九轴姿态融合获取四元数、欧拉角

目录传感器的方向源码Madgwick_9.cMadgwick_9.h使用方法测试main.c效果STC15F2K60S2 22.1184MHz Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 上位机&#xff1a;Vofa 1.3.10 移植自AHRS —— LOXO&#xff0c;算法作者&#xff1a;SOH Madgwick 传…

室内定位 - 资料收集

微信小程序API——获取定位 微信小程序定位权限开启或关闭怎么控制 小蜜引路&#xff1a;室内定位导航微信小程序 自己动手 IBeacon 室内定位 完整体验&#xff08;超详细过程&#xff09; 10种室内定位技术原理深度解析

关于json格式字符串解析并用mybatis存入数据库

园子里面找了很多关于json解析后存入数据库的方法&#xff0c;不是太乱&#xff0c;就是没有写完&#xff0c;我下面的主题代码多是受下面两位的启发&#xff0c;请按顺序查看 http://www.cnblogs.com/tian830937/p/6364622.html,我沿用了这个例子中的json数据格式&#xff0c;…

网络软件的组成

在计算机网络系统中&#xff0c;除了各种网络硬件设备外&#xff0c;还必须具有网络软件 1、网络操作系统 网络操作系统是网络软件中最主要的软件,用于实现不同主机之间的用户通信&#xff0c;以及全网硬件和软件资源的共享&#xff0c;并向用户提供统一的、方便的网络接口,便于…

【Hibernate3.3复习知识点二】 - 配置hibernate环境(annotations)

配置文件hibernate.cfg.xml中引入&#xff1a;<mapping class"com.bjsxt.hibernate.Teacher"/> <hibernate-configuration><session-factory><!-- Database connection settings --><property name"connection.driver_class"&g…

室内定位 -- 资料收集

室内定位系列&#xff08;一&#xff09;——WiFi位置指纹&#xff08;译&#xff09;

【51单片机快速入门指南】4.5:I2C 与 TCA6416实现双向 IO 扩展

目录硬知识IO 扩展芯片 TCA6416ATAC6416A 的寄存器IO 输入寄存器IO 输出寄存器IO 反相寄存器IO 方向寄存器TCA6416A 的操作TCA6416A 写数据TCA6416A 读数据TCA6416A 的 IO 输入寄存器硬件布局示例程序TCA6416A.cTCA6416A.h测试程序main.c实验现象普中51-单核-A2 STC89C52 MSP43…

linux/window 下 solr5.1 tomcat7.x 环境搭建即简单功能测试

2019独角兽企业重金招聘Python工程师标准>>> 之所以想使用solr来进行学习&#xff0c;很大一部分原因就是&#xff0c;solr能够在某种程度上提供RESTFUL相关的URL请求连接&#xff0c;可以把它理解为 以搜索引擎为基础的存储服务系统 &#xff0c;由于他的搜索可以是…

【Java基础总结】多线程

1. 实现多线程的两种方式 1 //第一种&#xff1a;继承Thread类&#xff0c;重写run()方法2 class ThreadTest1 extends Thread{3 public void run(){4 String threadName Thread.currentThread().getName();5 for(int i0;i<10;i){6 System…

C++类分号(;)问题

环境&#xff1a;vs2010 问题&#xff1a;今天编代码过程中发现好多很奇怪的错误&#xff0c;我以为昨天调了下编译器才出问题了。搞了好久&#xff0c;代码注释掉很多还是不行,并且错误还一直在变化。问题大概如下&#xff1a; &#xff08;照片上传不了&#xff09; 1.error …

PHP远程连接MYSQL数据库非常慢的解决方法

不知道如何解决&#xff0c;所以把他空间所在的服务器上也装了个MYSQL,才解决问题&#xff0c;今天又有个这个问题&#xff0c;不能也在这服务器上装一个MYSQL吧&#xff0c;Search: PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题…

【51单片机快速入门指南】5:软件SPI

目录硬知识SPI协议简介SPI接口介绍SPI接口连接图SPI数据传输方向SPI传输模式软件SPI程序源码Soft_SPI.cSoft_SPI.h普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 上位机&#xff1a;Vofa 1.3.10 源于软件模拟SPI接口程序代码&…

svn搭建本地服务端

使用VisualSVN Server来完成,下载地址:https://www.visualsvn.com/server/download/ 我安装的版本是3.3.1,安装的时候选择了标准版本&#xff0c;另外一个版本需要付费(日志跟踪、VDFS等功能)更多可以参考https://www.visualsvn.com/server/licensing/安装完成之后&#xff0c;…

hdu 4612 边连通度缩点+树的最长路径

思路&#xff1a;将以桥为分界的所有连通分支进行缩点&#xff0c;得到一颗树&#xff0c;求出树的直径。再用树上的点减去直径&#xff0c;再减一 #pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #incl…

c++ primer 4.4节练习答案

练习4.13 a) d3.0, i3 b) i3, d3.5 练习4.14 第一个&#xff1a;非法&#xff0c;42是一个右值&#xff0c;右值不能当做左值使用 第二个&#xff1a;返回值总为真 练习4.15 pi是指针类型&#xff0c;不可将int类型指针赋值给int型&#xff0c;可做如下修改 dval ival 0; pi …