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 20struct 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;//默认泊车单价为1¥1M/***************函数申明******************************************/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);//检查车位号是否为空,存在返回序号,如果该车位有停车则返回-1char* 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);}//检查车位号是否为空,存在返回序号,如果该车位没有停车则返回-1int 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("请设置泊车单价:(例如:1¥for 1 m)\n"); scanf("%d",&price); printf("您设置的单价是:%d¥1M\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 password:key'.'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;}
本文出自 “会搬砖的猴子” 博客,请务必保留此出处http://silianbo.blog.51cto.com/6627757/1305983