当前位置:文档之家› 停车场管理系统 C语言实习报告

停车场管理系统 C语言实习报告

C语言课程实习报告【要求】设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。

车辆按到达停车场时间的早晚依次从停车场最里面向大门口停放(最先到达的第一辆车放在停车场的最里面)。

如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。

停车场内如有某辆车要开走,在它之后进来的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。

每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。

如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。

编制一程序模拟停车场管理。

【提示】汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。

基本要求:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。

根据题目要求,停车场可以用一个长度为n 的堆栈来模拟。

由于停车场内如有某辆车要开走,在它之后进来的车辆都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场,所以可以设两个堆栈。

一、需求分析根据题目要求,程序应该提供“到达/离去,汽车牌照号码,到达/离去”的输入、输出操作;在程序中需要浏览停车场的车位信息,应提供显示、查找、排序等操作;此外还应提供键盘式菜单实现功能选择。

二、总体设计:根据需求分析,可以将系统的设计分为以下五大模块:(1)车辆进入;(2)车辆退出;(3)车辆等待;(4)车辆查询;(5)退出。

一、详细设计:主函数中只包含菜单函数,菜单部分单独写成函数,只提供输入、功能处理和输出部分的函数调用,其中各功能模块用菜单方式选择。

[程序]#define N 30 /*等待车辆*/#define M 20 /*车位*/#define P 2 /*单位时间所收费用*/#include<stdio.h>#include<stdlib.h>#include<string.h>struct cars /*定义车辆信息*/{ char state;int num;int in_time; 停车场管理系统车辆进入 车辆退出 车辆等待 车辆信息显示车辆查询 退出系统int out_time;int time_spend;int money_to_pay;}car[M];struct carleft{ char state;int num;}wait[N];1、主函数模块[流程图][程序]main() /*主函数*/{pre_manage();menu(); /*调用主菜单函数*/return 0;}void menu() /*主菜单函数*/{int n,w;do{puts("\t\t************************MENU*******************\n\n");puts("\t\t\t\t 1.car_arrive"); /*有车到来*/puts("\t\t\t\t 2.car_depart"); /*有车离开*/puts("\t\t\t\t 3.car_browse"); /*浏览车位信息*/ puts("\t\t\t\t 4.exit"); /*退出*/ puts("\n\n\t\t *********************************************\n") printf("Choice your number(1-4):[ ]\b\b"); /*选择所需服务*/scanf("%d",&n);getchar();if(n<1||n>4){ w=1; getchar();}else w=0;} while(w==1);switch(n){case 1: car_arrive();break;case 2: car_depart();break;case 3: car_browse();break;case 4: exit(0);}}void pre_manage() /*循环结构*/{ int i;for(i=0;i<M;i++)car[i].state='E';for(i=0;i<N;i++)wait[i].state='E';}2、各功能模块设计:(1)、车辆进入模块[分析]车辆进入停车场后,判断车位和等待车位是否有剩余。

若车位有空余则输入车辆编号和进入时间,记录在已停放车辆信息中;若车位无剩余而等待车位有剩余则输入车辆编号和进入时间,记录在等待车辆信息中;若两者都无剩余则提示无剩余空间。

[流程图][程序]○1车辆到来模块void car_arrive() /*车辆到来模块*/{ int s,w1,w2,t;void menu(); /*显示主菜单*/s=whether(); /*判断是否有空余车位*/w1=whether_cars_full();w2=whether_carwait_full();if(s==1) /*有空余车位*/{puts("\t\tInput the NO. of the coming car! \n "); /*输入车辆编号*/car[w1].state='A';scanf("%d",&car[w1].num);puts("\n\t\tInput the in_time!\n"); /*输入车辆进入时间*/scanf("%d",&car[w1].in_time);}else if(s==2) /*有空余等待车位*/{ puts("\t\tInput the NO. of the coming car! \n "); /*输入车辆编号*/ wait[w2].state='A';scanf("%d",&wait[w2].num);}else printf("No extra space"); /*无剩余空间*/printf("what do you want to do next?\n"); /*选择所需服务*/puts("\t\t************************MENU*******************\n\n");puts("\t\t\t\t 1).Another car is coming");puts("\t\t\t\t 2).Back to Menu");puts("\n\n\t\t *********************************************\n");printf("\n\t\tChoice your number(1-2):[ ]\b\b");scanf("%d",&t);getchar();if(t==1) /*另一辆车进入*/car_arrive();else /*返回主菜单*/menu();}○2判断车位是否空余模块int whether() /*判断车位是否空余模块*/{int w1,w2,s;w1=whether_cars_full();w2=whether_carwait_full();if(w1<M) s=1; /*有空余车位*/else if(w1==M&&w2<N) s=2; /*车位已满,等待车位有空余*/else s=3; /*车位和等待车位都已满*/ return s;}◇1判断停泊车位是否空余模块int whether_cars_full() /*判断停泊车位是否有空余模块*/{int i,k;for(i=0;i<M;i++){if(car[i].state=='E') break; /*当输入为‘“E”的时候退出系统*/}k=i;return k;}◇2判断等待车位是否空余模块int whether_carwait_full() /*判断等待车位是否有空余模块*/{int i,k=N;for(i=0;i<N;i++){if(wait[i].state=='E') k=i;break; /*当输入为‘“E”的时候退出系统*/}return k;}(2)、车辆退出模块[分析]该部分需要实现功能:用户选择车辆离开后,先查询该车位于停泊车位还是等待车位,若位于停泊车位则在输入离开时间后显示所需交纳费用;若位于等待车位则不需交费。

[流程图][程序]○1停泊车辆离开模块void car_in_left(int k) /*停泊车辆离开模块*/ {int w1,i,j,n,s;void car_wait_left(int n);struct cars temp[M];w1=whether_cars_full();n=w1-k-1;for(i=w1,j=0;j<n;i--,j++)temp[j]=car[i];car[k].state='D';printf("Input the out_time!"); /*输入离开时间*/scanf("%d",&car[k].out_time);s=car[k].out_time;car[k].time_spend=car[k].out_time-car[k].in_time; /*计算停泊时间*/car[k].money_to_pay=car[k].time_spend*P; /*计算所需交纳费用*/ printf("the NO.%d car need to pay %d yuan",car[k].num,car[k].money_to_pay);for(i=k,j=n-1;j>=0;i++,j--)car[i]=temp[j];car[M].state=wait[1].state;car[M].in_time=s;car[M].num=wait[1].num;car_wait_left(1);}○2等待车辆离开模块void car_wait_left(int n) /*等待车辆离开模块*/{int i;for(i=n;i<N-1;i++)wait[i]=wait[i+1];wait[N-1].state='E';}○3车辆所处车位查询模块int search() /*查询模块*/{int temp_num,n1,n2,w=0,n;do{printf("Input the num of the leaving car!"); /*输入离开车辆编号*/scanf("%d",&temp_num);if(temp_num==-1)exit(0);n1=search_car(temp_num); /*调用查询已用停泊车位模块*/ n2=search_carwait(temp_num); /*调用查询已用等待车位模块*/if(n1<M){whether_in=1; n=n1;} /*车辆处于停泊车位*/else if(n1==M&&n2<N) /*车辆处于等待车位*/{whether_in=0; return n=n2;}else /*无该车辆信息*/{printf("Not Found!Input again! \nOr input -1 to exit "); w=1;n=-1;}}while(w==1);return n;}◇1查询已用停泊车位模块:int search_car(int temp_num) /*查询已用停泊车位*/{int i,k;for(i=0;i<M;i++){if(car[i].state=='A'&&car[i].num==temp_num) break;}k=i; /*车辆处于停泊车位,返回车辆编号*/return k;}◇2查询已用等待车位模块:int search_carwait(int temp_num) /*查询已用等待车位*/{int i,k;for(i=0;i<N;i++){if(wait[i].state=='A'&&wait[i].num==temp_num) break;}k=i; /*车辆处于等待车位,返回车辆编号*/ return k;}int whether_in; /*判断是否存在*/○4车辆离开模块void car_depart() /*车辆离开模块*/{int n,w;void menu();int search(); /*调用车辆位置查询模块*/n=search();if(whether_in==1) car_in_left(n);else car_wait_left(n);printf("\n\t\t^_^ Do it successful^_^\n");puts("\n\n");printf("what do you want to do?\n"); /*选择所需服务*/puts("\t\t************************MENU*******************\n\n");puts("\t\t\t\t 1).Another car depart"); /*另一车辆离开*/puts("\t\t\t\t 2).Back to Menu"); /*返回主菜单*/puts("\n\n\t\t *********************************************\n");printf("\n\nChoice your number(1-2):[ ]\b\b");scanf("%d",&w);getchar();if(w==1)car_depart(); /*调用车辆离开模块*/elsemenu(); /*返回主菜单*/}(3)、车位信息浏览模块[分析]该模块需要实现功能:用户选择浏览车位信息时进入该模块,查询并显示车位使用信息。

相关主题