C语言文件里有五辆车的信息,车牌识别系统投标文件,进入时间,出场时间,要求按进入时间输出每辆车的

基于c语言车辆信息管理系统2
我的图书馆
基于c语言车辆信息管理系统2
求一个基于c语言车辆信息管理系统
悬赏分:0 - 解决时间: 日 22时39分
------------------------------------------// 文件名:模拟停车场问题.cpp// 文件功能描述:模拟停车场问题//----------------------------------------------------------------*///头文件#include &iostream&#include &malloc.h&#include &string&#include &windows.h&//常量定义#define MAX_STOP 4 //定义停车场最大停车数#define MAX_PLATE 10 //定义车牌号最大长度#define TIME_COUNT "秒" //定义时间单位#define TIME_MS_TO_CONUT 1000 //定义时间进制,意为由TIME_COUNT到毫秒的进制#define UNIT_PRICE 10 //定义单位时间收费标准 //使用std命名空间//数据结构定义//定义存储汽车信息的结构体typedef struct{char license_plate[MAX_PLATE]; //汽车牌照号码,定义为一个字符指针类型 //汽车当前状态,字符p表示停放在停车位上,字符s表示停放在便道上,每辆车的初始状态用字符i来进行表示 //汽车停入停车场时的时间,用来计时收费}CAR;//定义模拟停车场的栈结构typedef struct{CAR STOP[MAX_STOP]; //汽车信息的存储空间 //用来指示栈顶位置的静态指针}SeqS//定义模拟便道的队列结构typedef struct node{CAR WAIT; //汽车信息的存储空间struct node * //用来指示队列位置的动态指针}QN //链队列节点的类型//定义链队列的收尾指针typedef struct{QNode *front,*}LQ //将头尾指针封装在一起的链队//函数声明int Empty_LQueue(LQueue *q); //判队空int LeaveCheck(SeqStack parking , char *license_plate); //检查离开的车是否在停车场中int QueueLength(LQueue *q); //判队长度int Out_LQueue(LQueue *&sidewalk , char *license_plate); //出队操作int StackEmpty(SeqStack parking); //判断栈是否为空int StackFull(SeqStack parking); //判断栈是否为满int StackPop(SeqStack &parking); //出栈操作int StackTop(SeqStack parking , char *license_plate , int &time);//取栈顶元素void Car_come(SeqStack &parking , LQueue *&sidewalk); //有车到来时的操作void Car_leave(SeqStack &parking , LQueue *&sidewalk); //有车离开的操作void Display(SeqStack parking); //显示停车场内的所有信息 调试时用void InitStack(SeqStack &parking); //初始化栈void InitList(LQueue *&sidewalk); //初始化队列void In_LQueue(LQueue *&sidewalk , char *license_plate); //进队操作void Input_Check(char *license_plate); ////检验输入的车牌是否合法void StackPush(SeqStack &parking , char *license_plate , int stop_time);//进栈操作void main(){//定义变量SeqSLQueue *sidewalk = NULL;char *choice =int flag = 1; //定义一个变量 判断是否退出//初始化一个为空的停车场InitStack(parking);//初始化一个为空的便道InitList(sidewalk);//运行界面及功能选择while(flag){cout&&"\n\t 停车场模拟管理系统 \n\n";cout&&"\t|--------------------------------------------------|\n\n";cout&&"\t|本程序为停车场的模拟管理系统,有车到来时请按C键。|\n\n";cout&&"\t|然后根据屏幕提示进行相关操作,有车要走时请按l键。|\n\n";cout&&"\t|然后根据屏幕提示进行相关操作,查看停车场请按D键。|\n\n";cout&&"\t|然后根据屏幕提示进行相关操作,要退出系统请按Q键。|\n\n";cout&&"\t|--------------------------------------------------|\n\n";cout&&"请选择操作:";gets(choice);if(1 != strlen(choice)){cout&&"请正确输入选项!";}else{switch(*choice){case 'c':case 'C':{Car_come(parking,sidewalk);}case 'l':case 'L':{Car_leave(parking,sidewalk);}case 'q':case 'Q':{flag=0;}case 'd':case 'D':{Display(parking);}default:cout&&"选择不正确!请重新选择!\n";}}}}//有车到来时的操作void Car_come(SeqStack &parking , LQueue *&sidewalk){//定义变量char license_plate[MAX_PLATE];cout&&"请输入车辆的车牌号码:";Input_Check(license_plate);//判断停车场是否已满,满则进入便道,不满进入停车场if(StackFull(parking)){In_LQueue(sidewalk , license_plate); //进入便道cout&&"停车场已满请在便道等候,您的位置为"&&QueueLength(sidewalk)&&}else{StackPush(parking , license_plate , GetTickCount()); //进入停车场cout&&"请进入停车场中的"&&parking.top+1&&"号停车位\n";}// Display(parking);}//有车离开时的操作void Car_leave(SeqStack &parking , LQueue *&sidewalk){//定义变量SeqS //定义临时停车场char leave_license_plate[MAX_PLATE]; //要离开的车牌号char license_plate[MAX_PLATE]; //存放从停车场中读出来的车牌信息InitStack(tmpparking); //初始化临时停车场//判断停车场中是否有车if(StackEmpty(parking)){cout&&"当前停车场中没有车\n"; //退出子函数}cout&&"请输入要离开的车牌照:";Input_Check(leave_license_plate);cout&&"当前停车场中有"&&parking.top+1&&"辆车\n";if(LeaveCheck(parking , leave_license_plate)) //判断车是否在停车场中{//车在停车场中cout&&"您的车在"&&LeaveCheck(parking , leave_license_plate)&&"号车位上\n";while(StackTop(parking , license_plate , time)&& (strcmp(parking.STOP[parking.top].license_plate , leave_license_plate) != 0)){strcpy(parking.STOP[parking.top].license_plate , license_plate);cout&&"牌照为"&&license_plate&&"的车暂时退出停车场"&&parking.top+1&&"号位\n";StackPush(tmpparking , license_plate , time); //停车场中的车暂时退出 进入临时停车场StackPop(parking); //出栈}cout&&"牌照为"&&license_plate&&"的车离开停车场"&&parking.top+1&&"号位\n";cout&&"您在停车场中停了"&&(GetTickCount()-time)/TIME_MS_TO_CONUT&&TIME_COUNT&& //输出所停时间信息cout&&"应缴费用为"&&(GetTickCount()-time)/TIME_MS_TO_CONUT*UNIT_PRICE&&"元\n";; //输出费用信息StackPop(parking); //出栈//将临时停车场中的车停回停车场while(StackEmpty(tmpparking) != 1){StackTop(tmpparking , license_plate , time);StackPush(parking , license_plate , time);cout&&"牌照为"&&license_plate&&"的车进入停车场"&&parking.top+1&&"号位\n";license_plate[0] = '\0';StackPop(tmpparking);}if(parking.top+1 == MAX_STOP-1) //判断车离开前停车场是否停满if(QueueLength(sidewalk)) //如果停满则判断便道上是否有车{//便道中有车 则从便道中停入停车场Out_LQueue(sidewalk , license_plate); //出队StackPush(parking , license_plate , GetTickCount()); //入栈cout&&"在便道中牌照为"&&license_plate&&"的车进入停车场"&&parking.top+1&&"号位\n";}}else//车不在停车场中cout&&"您的车不在停车场中!\n";}//初始化顺序栈void InitStack(SeqStack &parking){parking.top = -1;}//判栈空int StackEmpty(SeqStack parking){if(parking.top == -1)return 1;else return 0;}//判栈满int StackFull(SeqStack parking){if(parking.top == MAX_STOP-1)return 1;elsereturn 0;}//入栈void StackPush(SeqStack &parking , char *license_plate , int stop_time){parking.top++;strcpy(parking.STOP[parking.top].license_plate , license_plate);parking.STOP[parking.top].state = 'p';parking.STOP[parking.top].time = stop_}//出栈 返回栈顶指针int StackPop(SeqStack &parking){if(StackEmpty(parking))return 0;elsereturn parking.top--;}//取栈顶元素int StackTop(SeqStack parking , char *license_plate , int &time){if(StackEmpty(parking))return 0;else{strcpy(license_plate , parking.STOP[parking.top].license_plate);time = parking.STOP[parking.top].return 1;}}//显示所有void Display(SeqStack parking){if(parking.top == -1)printf("停车场为空\n");else {while(parking.top != -1){cout&&"车牌号为:"&&parking.STOP[parking.top].license_cout&&",停在"&&parking.top + 1 &&"号车位上";cout&&",已停"&&(GetTickCount()-parking.STOP[parking.top].time)/TIME_MS_TO_CONUT&&TIME_COUNT&&parking.top--;}}}//初始化队列void InitList(LQueue *&sidewalk){ sidewalk = (LQueue *)malloc(sizeof(LQueue));sidewalk-&front=sidewalk-&rear = NULL;}//入队void In_LQueue(LQueue *&sidewalk,char *license_plate){ QNode *car_on_car_on_sidewalk = (QNode *)malloc(sizeof(QNode)); //为新节点开辟新空间strcpy(car_on_sidewalk-&WAIT.license_plate , license_plate); //将数据写入节点car_on_sidewalk-&WAIT.state = 's'; //写入停车信息car_on_sidewalk-&WAIT.time = GetTickCount(); //写入停车时间car_on_sidewalk-&next = NULL;if(Empty_LQueue(sidewalk)) //队空则创建第一个节点sidewalk-&front = sidewalk-&rear = car_on_else{ //队非空插入队尾sidewalk-&rear-&next = car_on_sidewalk-&rear = car_on_}}//判队空int Empty_LQueue(LQueue *q){if(q-&front == NULL)return 1;else return 0;}//判队长度 返回队长int QueueLength(LQueue *q){ QNode *p=q-& int i=0;while(p != NULL) { i++; p=p-&}
}//出队 成功返回1 队空返回0int Out_LQueue(LQueue *&sidewalk,char *license_plate){ QNode *car_on_if(Empty_LQueue(sidewalk)) //如果队空返回0return 0;car_on_sidewalk = sidewalk-&strcpy(license_plate , car_on_sidewalk-&WAIT.license_plate);//取出队头元素if(sidewalk-&front == sidewalk-&rear) //队中只有一个元素sidewalk-&front = sidewalk-&rear=NULL; //删除元素elsesidewalk-&front = sidewalk-&front-& //队头指针后移free(car_on_sidewalk); //释放指针return 1; }//检查离开的车是否在停车场中 返回车在停车场中位置 不在则返回0int LeaveCheck(SeqStack parking,char *license_plate){int flag = parking.top+1; //定义变量记录当前车在停车场中位置if(StackEmpty(parking))return 0;else {//查找离开车所在位置while(parking.top != -1 && strcmp(parking.STOP[parking.top].license_plate , license_plate) != 0){flag--; parking.top--; }}}//检验输入的车牌是否合法void Input_Check(char *license_plate){int flag = 1;while(flag){cin&&getchar();if(tmpstr.length()&MAX_PLATE){for(i=0;i&10;i++)license_plate[i] = tmpstr.c_str()[i];flag = 0;}else cout&&"输入有误,请重新输入:";}}
TA的推荐TA的最新馆藏[转]&[转]&
喜欢该文的人也喜欢楂樻墜锛侊紒锛佸府甯?垜~~~鎬ャ

我要回帖

更多关于 车牌查车辆信息 的文章

 

随机推荐