当前位置:首页 >> 计算机硬件及网络 >>

实习报告-数据结构课程设计


《数据结构》 课程设计报告

设计题目 班 姓 学 级 名 号

停车场管理系统 网络 1102 翟瑜璇 40 刘延岭 2012 年 6 月 25 日

指导教师 日 期

计算机与信息工程系

《数据结构》课程设计评阅表

设计题目 班级 答辩评语: 网络 1102 姓名

停车场管理系统 翟瑜璇 学号 40

总结报告评语:

功能实现

答辩效果

设计报告









一、

引言

设停车场是一个可停放 n 辆汽车的狭长通道, 且只有一个大门可供汽车进出。 汽车在停 车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆 车停放在车场的最北端),若车场内已停满 n 辆汽车,则后来的汽车只能在门外的便道上等 候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在他 之后进入的车辆必须先退出车场为它让路, 待该辆车开出大门外, 其他车辆再按原次序进入 车场, 每辆停放在车场的车在它离开车场时必须按它停留的时间长短交纳费用。 由于停车场 是一个狭窄通道, 而且只有一个大门可供汽车进出, 问题要求汽车停车场内按车辆到达时间 的先后顺序,依次由北向南排列。由此很容易联想到数据结构中的堆栈模型,因此可首先设 计一个堆栈,以堆栈来模拟停车场,又每个汽车的车牌号都不一样,这样一来可以根据车牌 号准确找到汽车位置, 所以堆栈里的数据元素我设计成汽车的车牌号。 当停车场内某辆车要 离开时,在他之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再 按原次序进入停车场。这是个一退一进的过程,而且让道的汽车必须保持原有的先后顺序, 因此可再设计一个堆栈, 以之来暂时存放为出站汽车暂时让道的汽车车牌号。 当停车场满后, 继续进来的汽车需要停放在停车场旁边的便道上等候, 若停车场有汽车开走, 则按排队的先 后顺序依次进站,最先进入便道的汽车将会最先进入停车场,这完全是一个先进先出模型, 因此可设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。另外,停车 场根据汽车在停车场内停放的总时长来收费的, 在便道上的时间不计费, 因此必须记录车辆 进入停车场时的时间,车辆离开停车场时的时间不需要记录,当从终端输入时可直接使用。

二、

设计过程
开始

1、流程图设计

输入车辆的号码及到达时间

停车场是否已 满? 进入停车场 进入便道等候 离开停车场

判断停车场 是否为空? 车场里没有车 输出离开时间计 算价格

判断便道为 空? 便道里面没有车辆 车辆进入停车场

车辆进入停车场

结束

2、设计思想 此停车场管理系统是在一个狭长的通道上的, 而且只有一个大门可以供车辆进出, 并且 要实现停车场内某车辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让 路,待其开出停车场后, 这些车再依原来的次序进场的功能,就可以设计两个堆栈,其中 一个堆栈用来模拟停车场, 另一个堆栈用来模拟临时停车场, 该临时停车场用来存放当有车 辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以 用一个链队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需 要改变通道上车辆结点的链接方式就可以了, 使通道上第一辆车进入停车场这个堆栈, 并且 使通道上原来的第二车辆成为通道上的第一辆车, 此时只需将模拟通道的链队列的头结点连 到原来的第二辆车上就可以了。 3、主要模块 首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量, 然后编写主函 数,在此主函数中实现对其它各个模块的调用。在主函数中首先调用 option()函数,出现欢 迎用户使用的主界面, 然后提示用户进入此停车场管理系统后, 再出现一个工用户选择的界

面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内停放车辆的 信息以及退出程序这四个函数模块。 4、模块间关系 开始

初始化两个栈及一个队列。

进入主菜单

车到达

车离开

列表显示

退出



车场是否为空 否

车场内信息

便道车信息

退出列表 显示

Room 前 车 辆进临时栈

对 Room 计费



判便道是否有车 是 判断栈是否为满

否 元素进栈

是 元素进队列 便道车进车场

栈元素出栈

队 列 中元 素 出队 结束

队列中元素进栈

三、

测试及运行结果
1、 常见的错误

容易将程序中的字母打错:在写程序时多注意,尽量不打错 2、 运行过程及结果 (1)程序开始运行

(2)车辆到达输入信息

(3)车辆离开

(4)车辆信息

(5)退出系统

四、

总结

一周的课程设计结束了, 在这次的课程设计中不仅检验了我所学习的知识, 也培养了我 如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。再设计过程 中,和同学们相互探讨,相互学习,相互监督。我学会了运筹帷幄,学会了宽容,学会了理 解,也学会了做人与处世,这次课程设计对我来说受益良多。 课程设计是我们专业课程知识综合应用的实践训练, 这是我们迈向社会, 从事职业工作 前一个比不少的过程, “千里之行始于足下” ,通过这次课程设计,我深深体会到了这句千古

名言的真正含义,我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳 健的在社会大潮中奔跑打下坚实的基础。 我这次设计的科目是停车场管理系统。 数据结构, 是一门研究非数值计算的程序设计问 题中计算机的操作对象以及它们之间的关系和运算等的学科, 而且确保经过这些运算后所得 到的新结构仍然是原来的结构类型。 作为一门独立的课程在国外是从 1968 年才开始设立的。 1968 年美国唐-欧-克努特教授开创了数据结构的最初体系, 他所著的 《计算机程序设计技巧》 第一卷 《基本算法》 是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。 “数 据结构”在计算机科学中是一门综合性的专业基础课。数据结构是介于数学、计算机硬件和 计算机软件三者之间的一门核心课程。数据结构这一门课的内容不仅是一般程序设计的基 础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。通过 这次模具设计,我在多方面都有所提高。 通过这次的课程设计, 更是让我深刻认识到自己在学习中的不足, 同时也找到了克服这 些不足的方法,这也是一笔很大的资源。在以后的时间中,我们应该利用更多的实践去上机 实验,加强自学的能力,多编写程序,相信不久后我们的编程能力都会有很大的提高,能设 计出更多的更有创新的作品。

五、

参考文献
高等教育出版社 廖雷 第三版 2009 年 马秋菊 2006 年

1、C 语言程序设计

2、数据结构(C 语言描述) 3、www.baidu.com

中国水利水电出版社

4、http://www.doc88.com/p-317736654952.html

六、

附录

#include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" int MAX; /*定义一个全局变量用来存储车库最大容量*/ float price;/*每车每小时的费用*/

typedef struct time { int hour;

int min; }Time; /*时间结点*/ typedef struct node { char num[10];

Time reach; Time leave; }Car; /*车辆信息结点*/ typedef struct NODE { Car *stack[100]; int top; }SqStack; /*停车站*/ typedef struct car { Car *data; struct car *next; }QNode; typedef struct Node { QNode *head;

QNode *rear; }LinkQueue; /*通道*/ void InitStack(SqStack *); /*初始化栈*/ int InitQueue(LinkQueue *); /*初始化便道*/ int arrive(SqStack *,LinkQueue *); /*车辆到达*/ void leave(SqStack *,SqStack *,LinkQueue *); /*车辆离开*/ void info(SqStack,LinkQueue); /*显示停车场信息*/ void PRINT(Car *p,int room); void InitStack(SqStack *s) /*初始化栈*/ { int i;

s->top=0; for(i=0;i<=MAX;i++) s->stack[s->top]=NULL; }

int InitQueue(LinkQueue *Q) /*初始化便道*/ { Q->head=(QNode *)malloc(sizeof(QNode)); if(Q->head!=NULL) { Q->head->next=NULL; Q->rear=Q->head; return(1); }

else return(-1); void main() {

}

SqStack In,Out;

LinkQueue Wait; int ch; InitStack(&In); /*初始化停车站*/ InitStack(&Out); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ while(1) { printf("--------------------欢迎使用停车场管理系统--------------------\n");

printf("\t 本系统由 5011 工作室开发, 作者:****、 *****、 *****、 ******。 \n\n"); printf("请输入停车场的容量:"); scanf("%d",&MAX); printf("请输入停车场的收费标准(元/小时):"); scanf("%f",&price); printf("您输入的停车场容量为%d 位,费用为%2.1f 元/小时。\n",MAX,price); printf("\n(1)车辆到达\n(2)车辆离开\n(3)停车场信息\n(4)退出系统\n 请选择 \n"); while(1) { ch=getch();

switch(ch) { case 49:arrive(&In,&Wait);break; /*车辆到达*/ case 50:leave(&In,&Out,&Wait);break; /*车辆离开*/ case 51:info(In,Wait);break; /*输出车站信息*/ case 52:{printf("谢谢使用!");exit(0);} /*退出主程序*/ default:printf("\n 按键无效,请重新按键选择!"); }/*49-52 分别表示"1"-"4"这四个按键的键值*/ system("CLS"); printf("--------------------欢迎使用停车场管理系统--------------------\n"); printf("\t 本系统由 CG 工作室开发,作者:***、***、***、***。\n\n\n"); printf("您输入的停车场容量为%d 位,费用为%2.1f 元/小时。 \n",MAX,price); printf("\n(1)车辆到达\n(2)车辆离开\n(3)停车场信息\n(4)退出系统\n 请选择 \n"); } } } int arrive(SqStack *In,LinkQueue *W) /*车辆到达*/ { Car *p;

QNode *t; p=(Car *)malloc(sizeof(Car)); flushall();

printf("\n 停车场还有%d 停车位(若停车位为 0,车可先进入便道等 待)",MAX-In->top); printf("\n 请输入车牌号码(例:湘 D0734):"); gets(p->num); if(In->top<MAX) /*停车场未满,车进车场*/ { In->top++;

printf("\n 停车的位置:%d 号停车位。",In->top); //printf("\n 请输入车到达的时间(格式"**:**"):"); printf("\n 请输入车到达的时间:"); scanf("%d:%d",&(p->reach.hour),&(p->reach.min)); In->stack[In->top]=p; printf("请按任意键返回"); getch(); return(1); }

else /*停车场已满,车进便道*/ { printf("\n 停车位已满,该车须在便道等待!");

t=(QNode *)malloc(sizeof(QNode)); t->data=p; t->next=NULL; W->rear->next=t;

W->rear=t; printf("请按任意键返回"); getch(); return(1); } }

void leave(SqStack *In,SqStack *Out,LinkQueue *W) { /*车辆离开*/ int room; Car *p,*t; QNode *q; /*判断车场内是否有车*/ if(In->top>0) /*有车*/ { { while(1) /*输入离开车辆的信息*/ printf("\n 请输入车在停车场的位置(1-%d):",In->top);

scanf("%d",&room); if(room>=1&&room<=In->top) break; } while(In->top>room) /*车辆离开*/ { Out->top++; Out->stack[Out->top]=In->stack[In->top]; In->stack[In->top]=NULL;

In->top--; } p=In->stack[In->top]; In->stack[In->top]=NULL; In->top--; while(Out->top>=1) { In->top++; In->stack[In->top]=Out->stack[Out->top]; Out->stack[Out->top]=NULL; Out->top--; }

PRINT(p,room); /*判断通道上是否有车及车站是否已满*/ if((W->head!=W->rear)&&In->top<MAX) /*便道的车辆进入停车场*/ { q=W->head->next;

t=q->data; In->top++; printf("\n 便道的%s 号车进入车场第%d 号停车位。",t->num,In->top); //printf("\n 请输入现在的时间(格式"**:**"):"); printf("\n 请输入现在的时间:"); scanf("%d:%d",&(t->reach.hour),&(t->reach.min));

W->head->next=q->next; if(q==W->rear) W->rear=W->head; In->stack[In->top]=t; free(q); } }

else printf("\n 停车场里没有车\n"); /*没车*/ printf("请按任意键返回"); getch();} void info1(SqStack *S) /*列表输出车场信息*/ { int i;

if(S->top>0) /*判断停车场内是否有车*/ { printf("\n 车场:"); printf("\n 位置 到达时间 车牌号\n"); for(i=1;i<=S->top;i++) { printf(" %d\t",i); printf("%d:%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min); } }

puts(S->stack[i]->num);

else printf("\n 停车场里没有车"); } void info2(LinkQueue *W) /*显示便道信息*/ { QNode *p;

p=W->head->next;

if(W->head!=W->rear) /*判断通道上是否有车*/ { printf("\n 便道中车辆的号码为:\n");

while(p!=NULL) { puts(p->data->num); } }

p=p->next;

else printf("\n 便道里没有车\n"); printf("请按任意键返回"); getch();} void info(SqStack S,LinkQueue W) { info1(&S); /*显示停车场信息*/ info2(&W); /*显示停便道信息*/ }

void PRINT(Car *p,int room) /*输出停车站车的信息*/ { int A1,A2,B1,B2; //printf("\n 请输入车离开的时间(格式"**:**"):"); printf("\n 请输入车离开的时间:"); scanf("%d:%d",&(p->leave.hour),&(p->leave.min)); printf("\n 车牌号码:"); puts(p->num); printf("\n 车到达的时间是: %d:%d",p->reach.hour,p->reach.min);

printf("车离开的时间是: %d:%d",p->leave.hour,p->leave.min); A1=p->reach.hour; A2=p->reach.min; B1=p->leave.hour; B2=p->leave.min; printf("\n 费用为: %2.1f 元",((B1-A1)+(B2-A2)/60.0)*price); free(p); }


相关文章:
数据结构实习报告_图
数据结构课程设计 实习报告 题 目: 图的基本操作 学姓年学专 号: 名: 级: 院: 业: 1210522 何厚华 大二 计算机与控制工程学院 计算机科学与技术 2014 年 ...
数据结构实习报告
数据结构实习报告_实习总结_总结/汇报_实用文档。数据结构实习报告,你们懂得!课程设计说明书 设计题目: 数据结构课程设计 专 业: 班级: 设计人: 山 东 科 技 ...
数据结构课程设计实习报告
数据结构课程设计实习报告 - 数据结构课程设计实习报告。。。线性表。。通讯录、、食品管理、、链表内插与合并、、图元、、二叉树生成与遍历算法、、、
数据结构实习报告
数据结构实习报告_电脑基础知识_IT/计算机_专业资料。数据库实验报告CUMTB 数据结构课程设计报告 班级:计科 124 姓名:王腾涛(20121515105) 王坤龙(20121515104 ) ...
数据结构实习报告
精选范文:数据结构实习报告(共 2 篇)一、需求分析 1、 程序所实现的功能;2...二、 设计目的 目的: 课程设计为学 生提供了一个既动手又动脑,独立实践的机会...
数据结构实习报告_二叉树
数据结构课程设计 实习报告 题 目: 二叉链表的基本操作 学姓年学专 号: 名: 级: 院: 业: 1210522 何厚华 大二 计算机与控制工程学院 计算机科学与技术 2014...
数据结构实习报告单词查找
数据结构课程设计 实习报告 题 目: 匹配具有最长前缀的单 词 学姓年学专 号: 名: 级: 院: 业: 1210522 何厚华 大二 计算机与控制工程学院 计算机科学与...
数据结构实习报告——一元稀疏多项式运算器的设计
数据结构课程设计 一元稀... 13页 免费 数据结构课程设计___一元... 13页...数据结构实习报告 班 级 XXXXXX XXXXXX 2010100XXXX XXXXXX 2012 年 11 月 ...
数据结构B树
数据结构B树 - 数据结构课程设计 实习报告 题 目: B 树的表示 及基本操作 学姓年学专 号: 名: 级: 院: 业: 1110529 任强 2011 级 信息技术科学...
数据结构实习报告——西安旅游查询系统(汉源代码)
数据结构实习报告——西安旅游查询系统(汉源代码)_计算机软件及应用_IT/计算机_专业资料。西安邮电大学实习报告含源代码 西安郵電大學 数据结构课程设计报告书 系部...
更多相关标签: