停车场管理系统 C 课程设计.doc

上传人:土8路 文档编号:10057633 上传时间:2021-04-15 格式:DOC 页数:15 大小:155KB
返回 下载 相关 举报
停车场管理系统 C 课程设计.doc_第1页
第1页 / 共15页
停车场管理系统 C 课程设计.doc_第2页
第2页 / 共15页
停车场管理系统 C 课程设计.doc_第3页
第3页 / 共15页
停车场管理系统 C 课程设计.doc_第4页
第4页 / 共15页
停车场管理系统 C 课程设计.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《停车场管理系统 C 课程设计.doc》由会员分享,可在线阅读,更多相关《停车场管理系统 C 课程设计.doc(15页珍藏版)》请在三一文库上搜索。

1、停车场管理系统一、 需求分析设计一个停车场管理系统,停车场管理系统功能包括:车辆到达,车辆离开,查询车辆信息等。具体要求如下:(1) 、车辆到达:根据车辆到达查询停车场内是否有空位:若尚有空位,则让车辆进停车场,输入车牌号和车辆进停车场的时间;若停车场已满则可进入通道等候。(2) 、车辆离开:根据客户提供的情况,为客户办理离开车场手续,并计算和打印该车辆停车需要的费用。然后查询通道是否有车辆排队,首先查询排在第一车辆,若满足则车进场。(3) 、查询车辆信息:根据客户的要求可以打印停车场内和便道的车辆信息,包括:车牌号,车辆到达时间。 根据题目要求可知本题目的是按照从读文件读取的数据序列进行模拟

2、管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。 二、 概要设计(二)、本程序主要分四个模块实现功能(1)、 以栈模拟停车场,以队列模拟车场外的通道,按照从终端读入的输入 数据序列进行模拟管理。栈以顺序结构实现,队列以链表实现。 InitStack(SqStackCar *s) 操作结果:初始化栈,构造空的模拟车站SqStackCar 。 Push(SqStackC

3、ar *s,CarNode *e) 操作结果:进站函数,车辆进站。 Pop(SqStackCar *s,CarNode *e) 操作结果:出站函数,车辆出站。 StackEmpty(SqStackCar s) 操作结果:判断车站是否为空。 InitQueue(LinkQueueCar *Q) 操作结果:初始化通道,构造空的队列。 QueueEmpty(LinkQueueCar Q) 操作结果:判断通道是否为空。 EnQueue(LinkQueueCar *Q,CarNode *e) 操作结果:车辆进队列,即进通道。 DeQueue(LinkQueueCar *Q,CarNode *e) 操作结

4、果:车辆出对列,即出通道。 SqStackCar part,temp 操作结果:声明停车场和临时停车场。 InitStack(&temp) 操作结果:建临时车场。(2)、车辆达到和离开。以读文件的法式输入数据,数据包括:车辆到达或 离开,车牌号码,车辆到达时间。 Arrive(SqStackCar *In,LinkQueueCar *Wait,char j10,int hour,int min) 操作结果:显示车辆到达信息。 Arrive(&part,&road,&j,hour,min) 初始条件:有车进站 操作结果;车场未满车进站,并显示车辆信息;已满则进通道等候。 Departure(Sq

5、StackCar *In,SqStackCar *temp,LinkQueueCar *Wait,char j10,int hour,int min) 操作结果:显示车辆离开信息。 Departure(&part,&temp,&road,&j,hour,min) 初始条件:有车离开。 操作结果:显示车辆信息,包括:车牌号,车辆到达和离开时间。 StackEmpty(*In) 操作结果:判断停车场是否为空。 StackEmpty(*temp) 操作结果:判断临时车场是否为空。 FILE *fp1 操作结果:创建一个“车辆信息.txt”读文件。 fp1=fopen(c:车辆信息.txt,r); 操

6、作结果:读取“车辆信息.txt”里面的信息。 (3)、查询功能。 Print(SqStackCar *In,SqStackCar *Temp,LinkQueueCar *Wait) 操作结果:查询停车场内和通道内车辆的信息。 StackEmpty(*In) 操作结果:判断停车场是否为空,若不为空,输出车辆信息;否则输 出“停车场里没有车!”语句。 StackEmpty(*Temp) 操作结果:判断临时车场是否为空。三、 详细设计(1)、 栈类型 t ypedef struct time int hour; int min; Time; /*时间结点*/ typedef struct char

7、num10; Time reach; Time leave; CarNode; /*车辆信息结点*/ typedef struct CarNode *base; CarNode *top; int stacksize; SqStackCar; /*模拟车站*/ void InitStack(SqStackCar *s) /*初始化栈*/ s-base=(CarNode *)malloc(MAXSTACKSIZE*sizeof(CarNode); if(!s-base) exit(0);/*分配失败*/ s-top=s-base; s-stacksize=MAXSTACKSIZE; int Pu

8、sh(SqStackCar *s,CarNode *e) /*进站函数*/ if(s-top-s-base=s-stacksize) return 0; else *s-top+=*e; return 1; int Pop(SqStackCar *s,CarNode *e) /*出站函数*/ if(s-top=s-base) return 0; *e=*-s-top; return 1; int StackEmpty(SqStackCar s) /*判空函数*/ if(s.base=s.top) return 1; else return 0; (2) 、队列类型 typedef struct

9、 car CarNode *data; struct car *next; QueueNode; typedef struct QueueNode *front; QueueNode *rear; LinkQueueCar; /*模拟通道*/ int QueueEmpty(LinkQueueCar Q) /*便道判空函数*/ if(Q.front=Q.rear) return 1; else return 0; int StackEmpty(SqStackCar s) /*判空函数*/ if(s.base=s.top) return 1; else return 0; int InitQueu

10、e(LinkQueueCar *Q) /*初始化便道*/ Q-front=Q-rear=(QueueNode *)malloc(sizeof(QueueNode); if(!Q-front) exit(0); Q-front-next=NULL; return 1; int EnQueue(LinkQueueCar *Q,CarNode *e) /*便道插入函数*/ QueueNode *p; p=(QueueNode *)malloc(sizeof(QueueNode); if(!p) exit(0); p-data=e; p-next=NULL; Q-rear-next=p; Q-rear

11、=p; return 1; int DeQueue(LinkQueueCar *Q,CarNode *e) /*便道删除函数*/ QueueNode *p; if(Q-front=Q-rear) return 0; p=Q-front-next; e=p-data; Q-front-next=p-next; if(Q-rear=p) Q-rear=Q-front; free(p); return 1; (3) 、车辆到达函数 int Arrive(SqStackCar *In,LinkQueueCar *Wait,char j10,int hour,int min) CarNode *i; Q

12、ueueNode *w; i=(CarNode *)malloc(sizeof(CarNode); flushall(); strcpy(i-num,j); if(In-top-In-basereach.hour=hour; i-reach.min=min; Push(In,i); printf(n车牌号码是%s 的车进场成功!,i-num); return 1; else /*停车场已满,车进便道*/ w=(QueueNode *)malloc(sizeof(QueueNode); w-data=i; w-next=NULL; Wait-rear-next=w; Wait-rear=w; p

13、rintf(停车场已满,必须在通道里等!); return 1; return 0; (4) 、车辆离开函数 int Departure(SqStackCar *In,SqStackCar *temp,LinkQueueCar *Wait, char j10,int hour,int min) /*车辆离开函数*/ int flag=0,a1,a2,b1,b2; float money; CarNode *p,*t; QueueNode *q; p=(CarNode *)malloc(sizeof(CarNode); flushall(); strcpy(p-num,j); while(!St

14、ackEmpty(*In) t=(CarNode *)malloc(sizeof(CarNode); Pop(In,t); if(strcmp(p-num,t-num)=0) /*比较车场中有无这辆车,有即出站*/ p-leave.hour=hour; p-leave.min=min; printf(车牌号是 ); printf(%s,p-num); printf( 的车已出停车场!); a1= p-leave.hour; a2= t-reach.hour; b1= p-leave.min; b2= t-reach.min; money = (float)(a1-a2+24)%24*60+(b

15、1-b2+60)%60)*price; /*计算 车辆需要的费用*/ printf(n车辆到达时间: %d:%d,t-reach.hour,t-reach.min); printf(n车辆离开时间: %d:%d,p-leave.hour,p-leave.min); printf(n所需费用: %5.2f yuan,money); flag=1; free(t); break; else Push(temp,t); /*while*/ if(!flag) printf(停车场已满,必须在通道等!); getch(); while(!StackEmpty(*temp) Pop(temp,p); P

16、ush(In,p); free(p); if(flag&Wait-front!=Wait-rear) /*车站中有空位,便道有车,车入站*/ q=(QueueNode *)malloc(sizeof(QueueNode); q=Wait-front-next; t=q-data; if(q!=NULL) t-reach.hour=hour; t-reach.min=min; Push(In,t); printf(n车牌号是 ); printf(%s,t-num); printf( 的车进入停车场!); Wait-front-next=q-next; if(q=Wait-rear) Wait-r

17、ear=Wait-front; free(q); return 1; (5) 车辆查询函数 void Print(SqStackCar *In,SqStackCar *Temp,LinkQueueCar *Wait) /*打印函数*/ int c=0; int count=1; CarNode *p,*t; QueueNode *q; q=(QueueNode *)malloc(sizeof(QueueNode); p=(CarNode *)malloc(sizeof(CarNode); t=(CarNode *)malloc(sizeof(CarNode); while(1&c!=3) cl

18、rscr(); gotoxy(1,10); printf(1. 通道里的车辆信息!); gotoxy(1,11); printf(2. 停车场里得车辆信息!); gotoxy(1,12); printf(3. 返回); do printf(n请输入你的选择:); c = getche(); printf(n); while(c!=1&c!=2&c!=3); if(c=2) /*打印停车场*/ count=1; if(StackEmpty(*In) printf(n 停车场里没有车!n); printf(n请按任意键继续.); getch(); else printf(n 停车场里车辆信息!n)

19、; while(!StackEmpty(*In) Pop(In,t); Push(Temp,t); while(!StackEmpty(*Temp) Pop(Temp,t); printf( n 车牌号码 ); count+; puts(t-num); printf( 车辆到达时间: %d:%d n,t-reach.hour,t-reach.min); Push(In,t); printf(n请按任意键继续.); getch(); if(c=1) /*打印便道*/ count=1; q=Wait-front-next; if(Wait-front!=Wait-rear) /*/ printf(

20、n 通道里车辆信息!n); while(q!=NULL) p=q-data; printf( n 通道里车牌号码是: ); puts(p-num); q=q-next; count+; else printf(n通道里没有车.n); printf(n请按任意键继续.); getch(); (6)、程序设计原理图:车辆到达以堆栈来模拟停车场和以堆栈里的数据元素我设计成汽车的车牌号初始化车站, 初始化让路的临时栈, 初始化通道车场未满,车进车场车场已满,车进便道判断车场是否已满车输入车子到达时间,车牌号未满 车进入车场判断车场内是否有车不做任何计算无点x有 输入离开车辆的离开时间,进行停车费用的计

21、算此车后面的车辆退出并进入临时栈车子离开四、 调试分析 本次课程设计主要应用栈和队列,以栈模拟停车场,以队列模拟车场外的通道,按照从终端读入的输入数据序列进行模拟管理。栈 以顺序结构实现,队列以链表实 现。编程是应注意各变量之间的 关系、各变量的类型、各种函数的应用条件等。尤其注意应缴纳费用的计算问题,我在编程的时候就是忽略了计费所用的时间应是从车辆进停车场是的时刻而不是到达通道的,以至于出现计算错误,但经过老是的提醒和帮助我很高兴已经解决了。五、 用户手册(1) 、本程序的运行环境为汉化的TC 。(2) 、运行后出现初始界面为 按任意键就进入初始界面为: 输入相应的数字进行相应的操作,如输入

22、“1”,则进入“更新车场信息”选项, 自动一步步读取读文件里的车辆信息。然后根据提示就可完成相应的操作。六、 测试结果若初始选“1”且按提示操作则出现界面:若按ESC键退到初始界面,再选“2”,则出现界面: 若选“1”,则出现界面: 若选“2”,则出现界面:选“3”返回初始界面,再选“1”继续从文件中读取信息,出现界面。若按ESC键退到初始界面,再选“2”,再按“1”,则出现界面: 继续操作,选“2”,则出现界面: 选“3”返回初始界面,在按“3”,则退出系统,测试完成!七、 附录源程序文件名清单: 车辆信息.txt 肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃

23、蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁

24、蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁

25、螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂

26、螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀

27、螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀

28、袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇肀薇衿羀荿薆蕿螃莅薅螁羈芁薄袃袁膇薄薃肇肃薃蚅衿莁薂螈肅芇蚁袀袈膃蚀薀肃聿虿蚂袆蒈蚈袄肁莄蚈羇羄芀蚇蚆膀膆芃蝿羃肂节袁膈莀莂薀羁芆莁蚃膆膂莀螅罿肈荿羇螂蒇莈蚇肇莃莇蝿袀艿莆袂肆膅莆薁衿肁蒅蚄肄莀蒄螆袇芆蒃袈肂膂蒂蚈袅膈蒁螀膁肃蒀袃羃莂蒀薂腿芈葿蚅羂膄薈螇膇

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1