停车场管理系统
1题目要求
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车站。停车站内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车站为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。
【基本要求】要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场是的停车时间及它应该交的费用。
2需求分析
根据题目要求,因为停车场是一个单条的序列,可以用结构体实现;在程序中,需要知道每辆来车的具体停放位置,应提供提示、查找、标记工作。车辆离开要计时计费。另外,每天开始时,停车场要初始化。
3总体设计
这个系统可以分为:初始化、有车进入、有车离开、退出四个模块。
4详细设计
main()函数体内包含了界面选则部分menu(),并单独
开始 抽出来作为一个独立函数,目的在于系统执行每部分
模块后能够方便返回到系统界面。即main()函数写为 如下:
显示一系列选项功能
void main()/*主函数*/ { menu();/*菜单函数*/ 输入n,判断n} 是不是1-4? Y 根据n的值 调用各功能模块函 结束
菜单函数: void menu() { int n,w; do { puts(\ puts(\初始化\ puts(\有车进入\ puts(\有车离开\ puts(\退出\ puts(\ printf(\ scanf(\ if(n<1||n>4) /*对选择的数字作判断*/ { w=1; getchar(); } else w=0; }while(w==1); switch(n) { case 1:chushi();break; /*初始化函数*/ case 2:jinru();break; /*车辆进入函数*/
1 / 1
N
}
}
case 3:likai();break; /*车辆离开函数*/ case 4:exit(0); /*退出*/
初始化模块设计:
【需求分析】 该模块是将每一天开始的停车场内和便道车位清零。首先建立场内场外的结构体,结构体内成员即车位的状态。用循环实现车位的致零即可。
struct changnei/*场内车道信息*/ { int neikong; }chn[N-1];
struct changwai/*场外车道信息*/ { int waikong; }chw[M-1];
N和M分别是停车场和便道的车位预设值,用宏定义。用户可根据实际情况改变。 #define N 100/*预设停车场有100个车位*/ #define M 100/*预设便道有100个出位*/
void chushi()/*初始化函数*/ { int i,j; for(i=0;i<=N-1;i++) chn[i].neikong=0;/*将场内车道设置为空*/ for(j=0;j<=M-1;j++) chw[i].waikong=0;/*将便道车道设置为空*/ printf(\已初始化\\n\\n\ menu(); }
函数出示化后将回到菜单界面。
车辆进入函数: 【需求分析】 车辆到达后,要指定车辆的停车位置。用户根据菜单函数进入车辆进入模块。按照每辆车的到达次序给予车辆次序号,由0号开始。车辆信息也建立结构体。
struct car/*车辆信息*/ { int car_num;/*车辆次序号*/ int car_arr;/*车辆到达时间*/ int car_lef;/*车辆离开时间*/ int car_stay;/*车辆停放位置*/ }car[CIXUHAO];
其中,CIXUHAO是车辆次序号的宏定义:
#define CIXUHAO 1000/*预设车辆次序号。不管车辆到达时停在场内或便道,均依次设置一个次序号,由0开始*/
给予车辆次序号之后,用循环判断停车场是否停满,再分别给予选择: 场内是否已满
void jinru()/*车辆进入函数*/ 已满,将车停在便道 未满,指定停车场位置 1 / 1
{
int i,a; int h=0;
printf(\请输入该车次序号(从0号开始):\scanf(\for(i=0;i 便道上还有车吗? menu(); } 程序执行完后回到菜单。 车辆离开函数: 有车离开 【需求分析】 若有一辆车要离开,则需要记 录该车的离开时间,以计算出该车 在停车场内的停车时间和应该缴纳 记录该车离开时间 的费用。该车离开后,要判断便道 上是否有车等待进入,如有,则将 便道上第一辆车停放在停车场内最 得到停车时间和费用 后的位置并记录好进场时间;若无, 则返回菜单。 便道上还 有车吗? N Y 返回主令其进场 菜单 输入次序号 和进场时间 void likai()/*车辆离开函数*/ { int i,k,choi,time; double fee; printf(\请输入离开车辆次序号[ ],并将此车之后的车先全部退出停车场!\ scanf(\ printf(\请输入离开车辆的离开时刻(24小时整点计时):\\n\ scanf(\ fee=D*(car[i].car_lef-car[i].car_arr); time=car[i].car_lef-car[i].car_arr; printf(\次序号为%d的车停车时间%d小时,应收费%f元\\n\ printf(\请让场内退出的车再依次进场!\\n\\n\\n\ printf(\便道上现在有车吗?(请选择1或2)\\n1.有\\n2.没有\\n\因便道上可能没有车,因此要做选择*/ scanf(\ if(choi==2) { menu(); } if(choi==1) { printf(\请让便道上的第一辆车进场\\n\ 1 / 1 printf(\该车次序号为:\\n\ scanf(\ printf(\请输入该车进场时间:\\n\ scanf(\ menu(); } } D为预设停车场单位小时费用,用宏定义,便于以后修改。 #define D 1.2/*预设车辆停车费为1.2元每小时*/ 5上机操作 (1) 主菜单函数 (2) 初始化操作 (3) 有车进入 1 / 1 以上分别举例0,1,2三个车的进场情况 (4) 有车离开 若便道上没车,则退回到主菜单 若便道上有车 1 / 1