




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计报告设计题目 停车场管理系统 专 业 X X X X 班 级 姓 名 XXX 学 号 XXXXXX 完成日期 XXXXXXX 目 录1. 问题描述22. 系统设计2-33. 数据结构与算法描述3-44. 测试结果与分析4-75. 总 结7-86. 参考文献8附录 程序源代码8-14停车场管理系统1. 问题描述 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,(判断其是否为第n辆车,进而判断是否需要让路)在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。(此时可以另设一个辅助栈,将编号大于要离开车的编号的车按退出次序入栈,待车开走后,再将辅助栈中的车依次出栈并进入停车场栈中)每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。(可以按每时刻价格缴费)如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。(在便道上的车要离开时,同样将其前面的车即编号小于它的车依次入辅助队列,待车开走后,再将辅助队列中的车依次出队并进入便道队列中)以下编制的程序为模拟该停车场的管理。2. 系统设计2.1 设计目标 根据问题的描述,来设计一个停车场管理系统的程序。程序功能:输出每辆车到达后的停车位置,以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。如果不需交费,允许其离开,这时可不输出上述信息,提示其可以离开,不需交费即可。2.2 设计思想 类似于现实生活中的管理系统,程序运行时会显示主菜单,根据用户的选择显示不同的信息,提示用户作相应的操作。 从看到该程序的要求及提示,知道本程序要用到栈和队列,这是主线,再根据编程时的具体要求,在加入其他的知识。具体参见以下数据结构及算法描述。2.3 系统模块划分(要给出流程图) 表2-3 停车信息表列名数据类型长度可否为空停车位置标志integer1Not null车编号intNot null车到达时刻clock_tNot null车离开时刻clock_tNot null应交纳费用doubleNull备注车到达、离开时刻均为clock_t的对象,要调用其函数clock()3. 数据结构与算法描述 根据问题描述及实现提示,知道该程序主要用到数据结构中栈和队列的知识。这是主线,在编程的时候,首先用一个栈CarStack表示停车场,而便道则用队列RoadQueue表示。根据程序的要求,当有车从停车场中离开时,首先需要判断该车是否为停车场最后一辆车,然后根据结果判断是否需要其他车为其让路。显然在让路的时候,需要增加一个辅助栈Sf.同样便道上的车离开时,根据结果,确定是否需要增加辅助队列Qf.另外,由于在车离开时要判断是否交费,所以需要存储每辆车的信息,我在程序中又加入了顺序表SqList.并将其元素类型elemtype定义为结构体类型,以便包含多个数据项。该停车场是按照车辆的停留时间进行收费的,所以我调用C+系统函数clock(),通过到达和离开时间差值来计算所需收取的费用。进 入 系 统 主 菜 单使用说明 退出离开交费需要停车程序自动生成到达车编号bh 产生到达时刻t1=clock()标志位flag输入离开车的编号ph 调用系统时间t2=clock()交费total_money图3-1总体结构设计框图4. 测试结果与分析(可将测试过程抓图说明) 在编写程序时, 出现了很多问题,有些都是基本问题。例如:在让程序自动生成车编号的时候,我将编号bh的初值放在了循环里,结果每进一辆车的编号都是0。另外,在程序进行测试时,我将停车场的存储量设为1,发现当停车场满时,并不提示用户,“停车场已满,需要停在便道上!”最后发现需要将栈、队列和顺序表的初始化操作定义在循环外。这是因为每进行一个循环就会重新初始化一次。 以上都是小问题,经过自己的检查能够修改正确。而下面的问题,不知道怎么解决,不能输出离开信息。 对于上述问题,不知怎么修改,我就将程序给同学看,在她的帮助下 ,将这个问题解决了。在便道上的车进入辅助队列时,当车编号小于队列中剩余节点的编号时,while循环条件出错了。就是如下述代码(彩色部分): else cout您的车未进入停车场,不需交费!您可以离开!next-data) DeQueue(Q,e); else while(bh(Q.front-next-data) DeQueue(Q,e); EnQueue(Qf,e); j+; DeQueue(Q,e); /删除,并且不会进入辅助队列中 while(bhnext-data) DeQueue(Q,e); EnQueue(Qf,e); j+; while(j0) DeQueue(Qf,e); EnQueue(Q,e); j-; 将彩色部分改为如下代码,就能正确运行: int m=bh-ph; /将剩余元素入辅助队列 while(m0) DeQueue(Q,e); EnQueue(Qf,e); j+; m-; 程序正确运行图: 5. 总 结 通过该程序的编写,相当于在编写的同时,我又复习了所学的知识,而且该程序相对来说涉及教材中的知识比较多。第二章的顺序表及第三章的栈和队列。通过编程及程序中运行的结果使我对这些知识理解的更为深刻。从编程的错误中我学到:有些知识需要你理解才能运行的好。一种思路不行可另换思路。刚开始,我就想到用文件存储信息,但到根据车编号进行查信息时不知道怎么查,在问同学及自己的思考下,发现还是需要线性表的知识。我想干脆直接将信息存储在线性表中,也不用把它写入文件中,没有多大作用。再查一本资料时,看到可将元素类型定义成结构体。所以我就按照这个思路将程序进行了修改,到最后基本令人满意。为了提高可读性,在主菜单中,我加入了使用说明这一项,使使用者能更快地理解本程序及其功能。最后,感谢老师及同学对我的帮助,一个人的思路很局限,当问他人时,发现很多问题都能迎刃而解,节省了大量的时间。从中也能获得更多的思路,学习别人的长处以提高自己!6. 参考文献 1 严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社,2007. 2 晋良颖.数据结构.北京:人民邮电出版社,2002.2 附录 程序源代码 #include#includeusing namespace std;#define STACK_INIT_SIZE 3 /设定该停车场只能停放100辆车#define pk_money 5 /每刻的停车费用 typedef int Status;typedef struct int *base; int *top; int stacksize; CarStack;typedef struct int bh; /辅助计数器,将车进行编号 int flag; /停车位置标志 clock_t tm1; /车到达的时刻 clock_t tm2; /离开的时刻 elemtype;typedef struct QNode int data; struct QNode *next;QNode,*QueuePtr; typedef struct QueuePtr front; /队头指针 QueuePtr rear; /队尾指针 RoadQueue; /便道#define LIST_INIT_SIZE 100 /初始分配量 #define LISTINCRE 10 /分配量 typedef struct elemtype *elem; /存储空间基址 int length; int listsize; SqList; /存储信息,以便查询、记录 Status InitList(SqList &L) L.elem=(elemtype*)malloc(LIST_INIT_SIZE*sizeof(elemtype); if(! L.elem) exit(-2); L.length=0; L.listsize=LIST_INIT_SIZE; return 1; Status ListInsert(SqList &L,int i,elemtype e) elemtype *newbase; if(iL.length+1) return 0; if(L.length=L.listsize) newbase=(elemtype*)realloc(L.elem,(L.listsize+LISTINCRE)*sizeof(elemtype); if(!newbase) exit(-2); L.elem=newbase; L.listsize+=LISTINCRE; elemtype *p,*q; q=&(L.elemi-1); for(p=&(L.elemL.length-1);p=q;p-) *(p+1)=*p; /*q=e; /将对应信息存储在顺序表中 L.elemi-1.flag=e.flag; L.elemi-1.bh=e.bh; L.elemi-1.tm1=e.tm1; L.elemi-1.tm2=e.tm2; L.length+; return 1; Status InitQueue(RoadQueue &Q) Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode); if(!Q.front) exit(-2); Q.front-next=NULL; return 1;/初始化队列Status EnQueue(RoadQueue &Q,int &e) QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode); if(!p) exit(-2); p-data=e; p-next=NULL; Q.rear-next=p; Q.rear=p; return 1;/插入队尾元素 Status DeQueue(RoadQueue &Q,int &e) if(Q.front=Q.rear) return 0; QueuePtr p; p=Q.front-next; e=p-data; Q.front-next=p-next; if(Q.rear=p) Q.rear=Q.front; /队中仅有一个元素 free(p);/删除队头元素 Status InitStack(CarStack &S) S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int); if(!S.base) exit(-2); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return 1;/InitStack 构造一个空栈S Status Push(CarStack &S,int &e) *S.top=e; S.top+; return 1;/Push 编号为 bh 的车进入停车场Status Pop(CarStack &S,int &e) if(S.top=S.base) return 0; S.top-; e=*S.top; return 1; int main() SqList L; InitList(L); int i; CarStack S; InitStack(S); /停车场 CarStack Sf; InitStack(Sf); /辅助栈 RoadQueue Q; InitQueue(Q); /便道 RoadQueue Qf; InitQueue(Qf); /辅助队列 int bh=0,ph; /车编号初值 do coutendl; cout *1.需要停车 *endl; cout *2.离开/交费?*endl; cout *3.使用说明 *endl; cout *4.退出 *endl; coutendl; int e; int j=0; /辅助计数器 double total_money; cout请输入你的选择:i; elemtype c; switch(i) /菜单选择 case 1: cout 你的车编号为:bh 请记住!=S.stacksize) cout停车场已满,你的车需要停在便道上!endl; c.flag=0; /0表示车停在便道上 ListInsert(L,bh+1,c); EnQueue(Q,c.bh); else Push(S,c.bh); ListInsert(L,bh+1,c); bh+; break; case 2: coutph; if(L.elemph.flag) /车在停车场 clock_t tm2; clock_t t; tm2=clock()/1000; t=tm2-L.elemph.tm1; total_money=pk_money*t; cout车编号为 ph 信息为:endl; cout到达时刻:L.elemph.tm1 离开时刻:tm2endl; cout您需要交费:total_money元!endl; while(ph0) Pop(Sf,e); Push(S,e); /依次入栈 j-; if(Q.front-next) /判断队列(便道上)是否有车 /便道上的第一辆车进入停车场 DeQueue(Q,e); L.eleme.flag=1; Push(S,e); else cout您的车未进入停车场,不需交费!您可以离开!next-data) DeQueue(Q,e); /删除,并且不会进入辅助队列中 else while(ph(Q.front-next-data) DeQueue(Q,e); EnQueue(Qf,e); j+; DeQueue(Q,e); /删除,并且不会进入辅助队列中 int m=bh-ph; while(m0) /剩余部分入辅助队列 DeQueue(Q,e); EnQueue(Qf,e); j+; m-; while(j0) DeQueue(Qf,e); EnQueue(Q,e); j-; break; case 3: cout该停车场管理系统的使用说明如下:endl; cout 车辆按到达停车场时间的早晚依次从停车场endl; cout 最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。endl; cout 如果停车场已放满车,则后来的车辆只能在停车场大门外的便道 上等待,一旦停车场内 有车开走,则排在便道上的第一辆车就进入停车场。endl; cout 未进入停车场的车,不收取费用!endl; break; case 4: return 0; while(i!=4); system(pause); return 0; 袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螈螇芁芇莄袀
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年度中国农业银行大连市分行校园招聘备考考试题库附答案解析
- 2025下半年浙江台州科技职业学院高层次人才招聘37人笔试备考题库及答案解析
- 《马克思主义基本原理概论》简单题
- 中专报名咨询方案
- 手指受伤安全培训课件
- 化肥厂水溶肥生产管理制度
- 学生食堂工人安全培训课件
- 学生食堂安全培训内容课件
- 学生集体培训安全事项课件
- 线缆厂维修费用核算规定
- 吡非尼酮对心脏成纤维细胞功能的影响及机制:从细胞到分子层面的解析
- 第一单元试卷(含答案)-2025-2026学年统编版语文三年级上册
- 2025年事业编时政题目及答案
- LNG贮罐安全培训课件
- 2025年上海市普通高中学业水平等级性考试物理试卷(原卷版)
- 《工业机器人编程与应用(FANUC)》高职全套教学课件
- 捡土豆工人劳务合同范本
- 2024年河南省确山县卫生系统招聘考试(护理学专业知识)题含答案
- 2025民航西藏空管中心社会招聘14人(第1期)笔试参考题库附带答案详解(10套)
- SBS防水卷材项目可行性研究报告
- 2025年职业病医师资格认证考试
评论
0/150
提交评论