[计算机软件及应用]停车场管理系统程序设计书_第1页
[计算机软件及应用]停车场管理系统程序设计书_第2页
[计算机软件及应用]停车场管理系统程序设计书_第3页
[计算机软件及应用]停车场管理系统程序设计书_第4页
[计算机软件及应用]停车场管理系统程序设计书_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构课程设计报告 信息工程学院计算机科学与技术专业题目:停车场管理系统班级:计算机卓越111班 第10组 组长: 姓名: 学号:组员:姓名: 学号: 指导老师:曲朝阳、郭晓利、刘志颖 日期:2012年12月27日程序设计书目录一、程序设计目标.3二、问题描述.3三、需求分析.4四、概要设计.5五、详细设计.8六、软件说明书11七、源程序清单.12八、测试报告 .28九、课程设计总结.36一、程序设计目标 1、通过本次课设进一步的了解栈和队列等有关概念。掌握栈和队列的建立,掌握栈和队列的基本操作,深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们。 2、复习巩固c语言知识。通过c语言课

2、程设计,使我们了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,更加了解c语言的好处和其可用性。进一步加深对c语言、数据结构、离散数学等基础技能的理解和掌握。 3、掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。 4、掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!让我们有一个既动手又动脑,独立实践的机会,锻炼我们的分析解决实际问题的能力。同时增加了同学之间的团队合作精神!更加体会到工作中团队合作的重要性和必要性!二、 问题描述按照题目要求,我们把程序分为三个模块 a.车辆到达

3、模块:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待。 b.车辆离开模块:一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的

4、次序。c.显示模块:当需要列表显示时,系统判断输入值(1-3),如果输入1,则调用显示车场列表,如果输入2,则调用显示便道信息,如果输入3,则返回主菜单。三、 需求分析这个程序的关键是车辆的进站和出站操作,以及车辆的通道之间的相互关系。由于停车场是一个很窄的、一边开口的车道,先进后出,类似数据结构中的栈结构,故车场用顺序栈这种数据结构来描述。外面的狭长的通道,先进后出,通道的车辆可以随时退出,故可用链式队列结构来描述。考虑到车场和通道在整个程序中都要用到,故把这两个变量定义为全局变量。本程序中的数据对象是汽车,可以认为车牌号是每个元素的关键项,不能重复,和现实中的一样,车的入场时间以及出场时间

5、都将作收费项目来考虑。在通道上的车由于没有入场,故不用收取费用。功能实现方式:(1).以栈s作为停车场,栈s1作为让路的临时停车点,队列q作为车等待时用的便道,stackmax+1作为车场能够容纳的车辆数,num10作为车所在位置的编号,并且限定车场最多能够容纳10辆车.(2).用户根据系统所规定并提示的要求输入有关内容,车场所能容纳的车辆数由收费人员来确定,车辆离开时,车主还可以得到收据,便于收费的管理使用,并且系统程序所提供的一些信息可通过特殊硬件显示出来,供车主了解信息,准确有效的停车。(3).程序能够显示当前存车信息以及等待车的信息,便于管理人员对车辆进行管理,并且能够给等待中的车提供

6、当前车场占用情况信息,便于他们能够及时的停车。(4).程序执行的命令为:输入进站信息-输入出站信息-打印收据(5).每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。四、概要设计1数据结构说明用到两个顺序栈:一个为车场栈;另一个为临时栈temptypedef struct node carnode *stackmax+1; int top;seqstackcar; 一个链式队列结构,存储便道车辆信息: typedef struct node queuenode *head; queuenode *rea

7、r;linkqueuecar; 2.算法说明终端汽车读入数据包含三项:a.是“到达”还是“离开”;b.汽车牌照号码;c.“到达”或“离开”的时刻。3. 功能模块说明停车场管理系统含有三个模块,即:车辆到达、离开、列表显示 (图1) 以模块为单位分析算法 a.车辆到达模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。如图2。 (图2) b.车辆离开模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如图3。 (图3) c.显示模块:显示模块有两个显示选项,即:车场与便道。如图4。(图4)4、主要要点说明a.主程序void main() 声明定义调用栈与队列的函

8、数主信息(输入初始操作信息) b.栈-实现栈抽象数据类型c.队列-实现队列抽象数据类型d.结构体-用于对对象及变量的管理它们之间的调用关系如下: 主程序 结构体 栈 队列5、 详细设计(实现程序模块的具体算法)1.菜单选项 应用switch分支循环对应的数字类别,执行相应的系统功能。2.动画 欢迎动画从屏幕下方上升,结束动画是从屏幕上方下落。动画是由输出的图案叠加而成,输出一个图案便立刻清屏,接着输出下一时刻的图案,一次输出一次清屏便在人眼中形成动画效果。开头动画结束动画3.停车场系统a、结构体声明与定义 typedef struct time int hour; int min; time;

9、 /*时间结点*/ typedef struct node char num10; time reach; time leave; carnode; /*车辆信息结点*/ typedef struct node carnode *stackmax+1; int top; seqstackcar; /*模拟车站*/ typedef struct car carnode *data; struct car *next; queuenode; /*队列信息结点*/ typedef struct node queuenode *head; linkqueuecar; /*模拟通道*/ b、函数声明与定

10、义(1)主函数void main()/主程序/初始化等while(1)scanf(.);/根据提示信息输入想要的操作switch(k)/根据输入的数调用不同的函数case 1:case 2:.typedef struct */用于创建不同结构体类型的指针与变量void print(carnode *p)/调用输出函数leave(*p,n).根据求解时间值来求得费用,并通过收据打印出来(2) 功能函数的声明 void initstack(seqstackcar *,int n); 初始化栈int initqueue(linkqueuecar *); 初始化队列int arrival(seqsta

11、ckcar *,linkqueuecar *,int n); 车辆到达,登车牌号,没停满进栈。否则,进队列void leave(seqstackcar *,seqstackcar *,linkqueuecar *); 车辆离开,通过输入离开车辆的位置处理,然后调用print(carnode *p);函数进行收费,然后,判断便道上有没有车,如果有,就进停车场。void exitcar(seqstackcar *,seqstackcar *,linkqueuecar *,int n); 车辆离开,通过输入车牌号而处理离开,然后调用print(carnode *p);函数进行收费,然后,判断便道上有

12、没有车,如果有,就进停车场。void list(seqstackcar,linkqueuecar);显示信息,用switch();函数选择显示车场与便道上的车辆情况,包括对void list1(seqstackcar *s);void list2(linkqueuecar *w);分别为车场和便道上的车辆情况void print(carnode *p) 打印出站车的信息。 (3)库函数 stdio.h /*标准输入/输出头文件*/ string.h /*包含字符串处理函数头文件*/ stdlib.h /*包含动态存储与释放函数头文件*/ malloc.h /*包含内存分配头文件*/4.主要函数

13、思想本程序是个简单的栈与队列的应用程序,其所用的函数也是栈与队列的基本函数,但在编写函数时应特别注意它的面向对象性与窗口化设计,切身为使用者着想.所以在运用一些函数时调用的基本语句有太多的重复,其目的在于实现它本来的基本目的.6、 软件说明书本系统为存车信息管理软件,能实现车场存车及便道存车信息的输入,输出,查找等功能,并建立和更新的存车费用信息保存于文件输出或打印。每辆车的相关信息包括:车牌号,进站时间,出站时间,存车位置,(非)会员停车费用等。该程序是简单的用于运用栈与队列基本知识的工具,不能用于现实中,特别是栈“先进后出”的规则大大限定了该程序的推广,现实世界的车站管理系统比这个远远复杂

14、的多。-进入演示系统后首先会出现欢迎动画,是一个用户及管理员使用注意事项界面。该停车场管理系统是个比较简单系统,在应用的时候请注意要求! 如果您有任何问题,请及时联系我们,谢谢合作! = 进入注意事项界面后系统会提示你停车场所容纳的车辆数,输入可容纳车辆后(1-10),进入管理系统界面 * 欢迎使用本停车管理系统 * * - 1. 车辆到达 - - 2. 车辆(位置 )离开 - - 3. 车辆(车牌号)离开- - 4. 列表显示 - - 5. 退出系统 - * *本停车场管理实行24小时制*n); *本停车场有会员服务,会员0.05/每分钟,非会员0.1/每分钟* 请选择所需要的服务:1|2|

15、3|4|5.这时可按照提示进行你想要的操作,对于15的具体操作与内容请详见前面的调试分析,您便可以轻松操作了!注意事项:1、 注意按提示内容输入,以免出错。2、 本系统功能还需完善,操作简单,只是供学习之用,并不能作 为实际生活使用。七、源程序清单#include#include #include#include/*-*/ #define max 10char num10;int getn()int n; printf(请输入停车场可容纳的车(最多10辆):); scanf(%d,&n);fflush(stdin);/*用来清空输入缓存,以便不影响后面输入的东西*/do if(n10) pri

16、ntf(输入的车辆数不在要求范围内,请重新输入!); scanf(%d,&n); fflush(stdin); else break;while(n10); return n;typedef struct timeint hour; int min; time; /*时间结点*/ typedef struct node char num10;time reach; time leave; carnode; /*车辆信息结点*/ typedef struct node carnode *stackmax+1;int top; int n;seqstackcar; /*模拟车站*/typedef

17、struct car carnode *data;struct car *next; queuenode; /*队列结点*/typedef struct node queuenode *head; queuenode *rear; linkqueuecar; /*模拟通道*/ void initstack(seqstackcar *,int n); /*声明栈*/int initqueue(linkqueuecar *); /*声明便道*/int arrival(seqstackcar *,linkqueuecar *,int n); /*车辆进站*/void leave(seqstackca

18、r *,seqstackcar *,linkqueuecar *,int n); /*车辆出站*/void list(seqstackcar,linkqueuecar); /*显示存车信息*/ /*开头动画*/void dh1()printf( * 欢迎使用本停车管理系统 * n);printf( - - n); printf( n); printf( n); printf( n); printf( n); printf( n); printf( n);void set1() for (int i=15; i1; i-) system(cls); for (int j=0; ji; j+) p

19、rintf(n); dh1(); system(pause); fflush(stdin);/*结束动画*/void dh2()printf(n); printf(n);printf(n);printf(n);printf(n);printf(n);printf(n);printf(n);printf(n);printf(n);printf( 欢迎下次 n);printf( 光临 n);printf( n);void out2()for (int i=1; i10; i+) system(cls); for (int j=0; jtop=0; for(i=0;istacks-top=null;

20、 int initqueue(linkqueuecar *q) /*初始化便道*/ q-head=(queuenode *)malloc(sizeof(queuenode); if(q-head!=null) q-head-next=null; q-rear=q-head; return(1); else return(-1);/*结束*/ void print(carnode *p) /*打印出站车的信息*/ int a1,a2,b1,b2;int a,b,c; int i;/会员char ch;printf(n请输入离开的时间(小时:分钟):); scanf(%d:%d,&(p-leave

21、.hour),&(p-leave.min);fflush(stdin);do/*直到程序输出正确的时间*/if(p-leave.hourreach.hour | (p-leave.hour=p-reach.hour & p-leave.minreach.min)printf(输入离开时间比进站时间早,请重新输入!n);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);fflush(stdin);if(p-leave.hourleave.hour=24 | p-leave.minleave.min=60)printf(输入的时间格式有错!请重新输入:);sca

22、nf(%d:%d,&(p-leave.hour),&(p-leave.min);fflush(stdin);else break;while(p-leave.hourreach.hour | (p-leave.hour=p-reach.hour & p-leave.minreach.min) | p-leave.hourleave.hour=24 | p-leave.minleave.min=60);printf(车场现在有一辆车离开,请便道里的第一辆车进入车场!n);printf(出站的车的车牌号为:);puts(p-num);/*把车牌号输出*/printf(n);/*计算出正确的所需的钱

23、数*/a1=p-reach.hour; a2=p-reach.min; b1=p-leave.hour; b2=p-leave.min;a=(b1-a1)*60+b2-a2;if(a=60)b=a/60;/*停留时间中的小时*/c=a-60*b;/*停留时间的分钟*/elseb=0;c=a; printf(请问你是否是会员(是1/否0):);while(1)scanf(%d,&i);if (i=1) printf( 祝您一路顺风,欢迎您下次光临.); printf(n 收 据n);printf(n 会员n); printf( 车牌号: ); puts(p-num); printf(n); pr

24、intf(=n); printf(|进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|n); printf(=n); printf(| %d:%d,p-reach.hour,p-reach.min); printf( | %d:%d,p-leave.hour,p-leave.min); printf( | %d:%d,b,c); printf( | %2.1f,0.05*a); printf( |n); printf(-n); free(p);break;if(i=0) printf( 祝您一路顺风,欢迎您下次光临.); printf(n 收 据n);printf(n 非会员n); p

25、rintf( 车牌号: ); puts(p-num); printf(n); printf(=n); printf(|进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|n); printf(=n); printf(| %d:%d,p-reach.hour,p-reach.min); printf( | %d:%d,p-leave.hour,p-leave.min); printf( | %d:%d,b,c); printf( | %2.1f,0.1*a); printf( |n); printf(-n); free(p);break;else printf(输入有错,请重新输入:);

26、fflush(stdin);/ch=getchar();int arrival(seqstackcar *enter,linkqueuecar *d,int n) /*车辆到达,enter为车场的指针,d为便道队列的指针*/ carnode *p;/*车辆结点p*/ queuenode *t;/*队列结点t*/ p=(carnode *)malloc(sizeof(carnode); flushall(); /*清空缓存区*/int i;printf(n请输入车牌号(例:a1234):n);gets(p-num);if(enter-toptop+; printf(车辆在车场第%d位置.,ent

27、er-top); fflush(stdin);printf(n请输入到达时间(小时:分钟):); scanf(%d:%d,&(p-reach.hour),&(p-reach.min);fflush(stdin);doif(p-reach.hourreach.hour=24 | p-reach.minreach.min=60)printf(输入的时间格式有错,请重新输入:);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);fflush(stdin);elsebreak;while(p-reach.hourreach.hour=24 | p-reach.min

28、reach.min=60);enter-stackenter-top=p; /*把p结点赋值给车站*/return(1); else /*车场已满,车进便道*/ printf(n请该车在便道稍作等待!n);t=(queuenode *)malloc(sizeof(queuenode);/*开辟一个队列结点,它的数据结点是p,它的指针结点是空,队列的头与尾都是此结点*/t-data=p; t-next=null; d-rear-next=t; d-rear=t; return(1); /车辆离开,输入车牌号离开void exitcar(seqstackcar *enter,seqstackcar

29、 *temp,linkqueuecar *w,int n) int i=0,room,flag=0;/*room为要输出的位置*/char num10,*pnum;/字符串的比较seqstackcar *s;/开辟新的空间时是否是null空carnode *p,*t; /车辆本生的结点是p,车辆在队列中的结点是tqueuenode *q; /判断车场内是否有车,队列结点*qpnum=num;if(enter-top0) /车场有车 while(!flag) /输入离开车辆的信息 printf(请输入出站车辆的车牌号:); scanf(%s,pnum); for(i=0;itop;i+)if(s

30、trcmp(enter-stacki+1-num,pnum)=0) room=i+1; flag=1;fflush(stdin); elseprintf(第%d车位没有此车n,i+1);fflush(stdin); while(enter-toproom) /*车辆离开*/ temp-top+; temp-stacktemp-top=enter-stackenter-top;/*把剩余的车辆退出车站并送入临时栈内*/enter-stackenter-top=null;/*栈顶为空*/ enter-top-; p=enter-stackenter-top; /*p是离开车辆的结点*/enter-

31、stackenter-top=null; /*栈顶为空*/ enter-top-; while(temp-top=1) enter-top+; enter-stackenter-top=temp-stacktemp-top;/*把临时栈中的车辆重新开进车站*/temp-stacktemp-top=null; /*临时栈为空*/temp-top-; print(p);/*lxy判断通道上是否有车及车站是否已满*/ if(w-head!=w-rear)&enter-tophead-next; /*队列结点中头结点的指针结点*/t=q-data;/*车辆队列中要出去的结点的数据*/enter-top

32、+; printf(n现在请便道上的车进入车场,该车的车牌号为:);puts(t-num);printf(n该车进入车场第%d位置.,enter-top);printf(n请输入现在的时间(即该车进站的时间)(小时:分钟):);scanf(%d:%d,&(t-reach.hour),&(t-reach.min);fflush(stdin); do/*控制到达的时间*/if(t-reach.hourreach.hour=24 | t-reach.minreach.min=60)printf(输入的时间格式有错,请重新输入!);scanf(%d:%d,&(t-reach.hour),&(t-rea

33、ch.min);fflush(stdin);/else/break;while(t-reach.hourreach.hour=24 | t-reach.minreach.min=60);w-head-next=q-next; if(q=w-rear) w-rear=w-head; enter-stackenter-top=t; free(q); else printf(n目前便道里没有车.n);/*车场没车*/ else printf(n目前车场里没有车,来车请直接进入车场!n); void leave(seqstackcar *enter,seqstackcar *temp,linkqueu

34、ecar *w,int n) /车辆离开int i, room;/room为要输出的位置 carnode *p,*t; /车辆本生的结点是p,车辆在队列中的结点是tqueuenode *q; /判断车场内是否有车,队列结点qif(enter-top0) /车场有车 while(1) /输入离开车辆的信息 printf(n请输入要离开的车在车场的位置/1-%d/:,enter-top);scanf(%d,&room);fflush(stdin); if(room=1&roomtop) break; while(enter-toproom) /车辆离开* temp-top+; temp-stack

35、temp-top=enter-stackenter-top;/把剩余的车辆退出车站并送入临时栈内enter-stackenter-top=null;/栈顶为空enter-top-; p=enter-stackenter-top; /p是离开车辆的结点enter-stackenter-top=null; /栈顶为空enter-top-; while(temp-top=1) enter-top+; enter-stackenter-top=temp-stacktemp-top;/把临时栈中的车辆重新开进车站temp-stacktemp-top=null; /临时栈为空temp-top-; prin

36、t(p);/lxy判断通道上是否有车及车站是否已满 if(w-head!=w-rear)&enter-tophead-next; /队列结点中头结点的指针结点t=q-data;/车辆队列中要出去的结点的数据enter-top+; printf(n现在请便道上的车进入车场,该车的车牌号为:);puts(t-num);printf(n该车进入车场第%d位置.,enter-top);printf(n请输入现在的时间(即该车进站的时间)(小时:分钟):);scanf(%d:%d,&(t-reach.hour),&(t-reach.min);fflush(stdin); do/控制到达的时间if(t-r

37、each.hourreach.hour=24 | t-reach.minreach.min=60)printf(输入的时间格式有错,请重新输入!);scanf(%d:%d,&(t-reach.hour),&(t-reach.min);fflush(stdin);elsebreak;while(t-reach.hourreach.hour=24 | t-reach.minreach.min=60);w-head-next=q-next; if(q=w-rear) w-rear=w-head; enter-stackenter-top=t; free(q); else printf(n目前便道里没

38、有车.n);/车场没车else printf(n目前车场里没有车,来车请直接进入车场!n); void list1(seqstackcar *s) /列表显示车场存车信息 int i; if(s-top0) /判断车站内是否有车 printf(n车场:); printf(n 位置|到达时间|车牌号n); for(i=1;itop;i+) printf( %d ,i); printf( %d:%d ,s-stacki-reach.hour,s-stacki-reach.min); puts(s-stacki-num); else printf(n目前车场里没有车); void list2(linkqueuecar *w)/lxy列表显示便道信息 queuenode *p; p=w-head-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论