车库管理系统开发报告31.docx
- 文档编号:11221828
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:17
- 大小:21.37KB
车库管理系统开发报告31.docx
《车库管理系统开发报告31.docx》由会员分享,可在线阅读,更多相关《车库管理系统开发报告31.docx(17页珍藏版)》请在冰豆网上搜索。
车库管理系统开发报告31
陕西工业职业技术学院
2011/2012学年第1学期
数据结构实训报告
课程名称:
数据结构
班级:
软件1001
姓名:
薛帅
教学周数:
1周(第18周)
地点:
行知楼(506)
指导教师:
刘喜勋吴红
信息工程学院
《数据结构》课程设计实训方案
一实训对象
1.实训班级软件1001班
2.计划实训周期:
5个工作日
3.计划受训人数:
50人左右
二实训目的
通过本次实训希望学生能有以下收获:
(1)掌握数据结构的基础知识;;
(2)数据结构模型的建立以及存储结构的选择;
(3)掌握C语言文件操作方式;
(4)掌握数据结构中队列、新建、入队、出队。
线性表、查询、更新、插入、删除、排序等功能;
(5)了解数据处理的权限管理;
三实训内容
题目:
车库管理系统
[问题描述]
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
以线性表模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:
汽车“到达”或“”离去信息、汽车牌照号码以及到达或离去的时刻。
对每一组输入数据进行操作后的输出信息为:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
线性表以顺序结构实现,队列以链表结构实现。
[系统要求]
(1)初始化:
初始化线性表、队列。
(2)入队:
新车加入队。
(3)出队:
队首出队。
(4)入库:
定位、队列元素入库。
(5)出库:
查找、出库并计费、记录流水。
(6)输出流水帐
四摘要
详细内容如下:
序号
实训项目
内容及要求
学时
1
数据结构基础知识
数据结构设计
1)了解数据结构中的基本概念
2)数据结构应用设计过程
3)独立完成“车库管理系统”数据结构的规范化设计;
4
2
初始化:
初始化线性表、队列。
要求:
1)完成初始化线性表、队列程序设计;
2
3
入队:
新车加入队。
出队:
队首出队。
要求:
1)完成入队出队程序设计;
4
4
入库:
定位、队列元素入库
要求:
1)完成定位、队列元素入库程序设计
6
5
出库:
查找、出库并计费、记录流水。
要求:
1)完成查找、出库并计费、记录流水
2)保存数据(文件写操作);
6
6
输出流水帐
要求:
1)读入数据(文件读操作);
2)输出数据
2
7
完成报告
要求:
文章结构清晰,文字描述准确;掌握科技应用文的写作;
4
五实训环境
地点:
行知楼506
软件:
TurboC2.0
六实训进度
序号
时间
实训内容
方式
1
第一天早上
数据结构基础知识、数据结构设计
讲练
2
第一天下午
初始化:
初始化线性表、队列。
练习
3
第二天早上
入队:
新车加入队列
讲练
4
第二天下午
出队:
队首出队。
练习
5
第三天早上
入库:
队列元素入库
讲练
6
第三天下午
出库:
查找、出库并计费
练习
7
第四天早上
记录流水。
讲练
8
第四天下午
输出流水帐
练习
9
第五天早上
系统联调
讲练
10
第五天下午
完成报告
练习
目 录
绪论1
第一章题目2
第二章题目3
第三章题目4
总结和体会5
参考文献6
绪论
本系统是假设有一个停车场且只有一个大门可供汽车进出。
汽车在停车场内按车辆达到时间的先后顺序,依次由北向南排列(大门在最南端,最先达到的第一辆车停放在车场的最北端),若车场内已停满汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退车车场为它让路,待赶辆车开出大门外,其它车辆在按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短叫纳费用的系统。
其顺序用队列来实现,车辆的车牌、停车时间以及车位号均保持在库中,在车辆离开停车场时调用库中信息,查询车辆信息,计算应缴纳的费用,并处理后续车辆。
第一章初始化
具体内容
对线性表、队列的初始化和必要的操作提示,代码如下:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
intMAX;/*定义一个全局变量用来存储车库最大容量*/
floatprice;/*每车每小时的费用*/
typedefstructtime
{
inthour;
intmin;
}Time;/*时间结点*/
typedefstructnode
{
charnum[100];
Timereach;
Timeleave;
}Car;/*车辆信息结点*/
typedefstructNODE
{
Car*stack[100];
inttop;
floatx;
}SqStack;/*停车站*/
typedefstructcar
{
Car*data;//数据域名
structcar*next;//指针域名
}QNode;
typedefstructNode
{
QNode*head;//队头指针
QNode*rear;//队尾指针
}LinkQueue;/*通道*/
voidInitStack(SqStack*);/*初始化栈*/
intInitQueue(LinkQueue*);/*初始化便道*/
intarrive(SqStack*,LinkQueue*);/*车辆到达*/
voidleave(SqStack*,SqStack*,LinkQueue*);/*车辆离开*/
voidinfo(SqStack,LinkQueue);/*显示停车场信息*/
voidPRINT(Car*p,introom);//打印详细信息及账单
voidInitStack(SqStack*s)/*初始化栈*/
{
inti;
s->top=0;//定义初始栈顶下标值
for(i=0;i<=MAX;i++)
s->stack[s->top]=NULL;//建立一个空栈
}
intInitQueue(LinkQueue*Q)/*初始化便道*/
{
Q->head=(QNode*)malloc(sizeof(QNode));//为通道开辟一个空间
if(Q->head!
=NULL)//判断队头是否为空
{
Q->head->next=NULL;//队头的下一个数据元素设为空
Q->rear=Q->head;//把队头数据元素的值赋给队尾
return
(1);
}
elsereturn(-1);
}
voidmain()
{
SqStackIn,Out;
LinkQueueWait;
intch;
InitStack(&In);/*初始化停车站*/
InitStack(&Out);/*初始化让路的临时栈*/
InitQueue(&Wait);/*初始化通道*/
while
(1)
{
printf("--------------------欢迎使用停车场管理系统--------------------\n");
printf("请输入停车场的容量:
");
scanf("%d",&MAX);
printf("请输入停车场的收费标准(元/小时):
");
scanf("%f",&price);
printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。
\n",MAX,price);
printf("
(1)车辆到达\n");
printf("
(2)车辆离开\n");
printf("(3)停车场信息\n");
printf("(0)退出系统\n");
printf("----------------------------------------\n");
printf("请选择\n");
while
(1)
{
ch=getch();
switch(ch)
{
case'1':
arrive(&In,&Wait);break;/*车辆到达*/
case'2':
leave(&In,&Out,&Wait);break;/*车辆离开*/
case'3':
info(In,Wait);break;/*输出车站信息*/
case'0':
{printf("谢谢使用!
");exit(0);}/*退出主程序*/
default:
printf("\n非数字键,请重新按键选择!
");
}
system("CLS");
printf("--------------------欢迎使用停车场管理系统--------------------\n");
printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。
\n",MAX,price);
printf("\n
(1)车辆到达\n
(2)车辆离开\n(3)停车场信息\n(4)退出系统\n请选择\n");
}
}
}
第二章车辆到达
车场可停放多辆汽车,且只有一个大门可供汽车进出。
汽车在停车场内按车辆达到时间的先后顺序依次排列,若车场内已停满汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入代码如下:
intarrive(SqStack*In,LinkQueue*W)/*车辆到达*/
{
Car*p;
QNode*t;
p=(Car*)malloc(sizeof(Car));//把开辟成功的空间存入指针p中
flushall();//清除所有缓冲区
printf("\n停车场还有%d个停车位(若停车位为0,车可先进入便道等待)",MAX-In->top);
printf("\n请输入车牌号码(例:
3454):
");
gets(p->num);
if(In->top { 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;//弹出栈顶数据元素值到指针p printf("请按任意键返回"); getch(); return (1); } else/*停车场已满,车进便道*/ { printf("\n停车位已满,该车须在便道等待! "); t=(QNode*)malloc(sizeof(QNode)); t->data=p;//指针t所指向结点的数据元素存入指针p内 t->next=NULL;//新结点链为空 W->rear->next=t; W->rear=t; printf("请按任意键返回"); getch(); return (1); } } 第三章车辆离开和查询 当停车场内某辆车要离开时,在它之后进入的车辆必须先退车车场为它让路,待赶辆车开出大门外,其它车辆在按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短叫纳费用代码如下: voidleave(SqStack*In,SqStack*Out,LinkQueue*W) {//车辆离开 introom; char*x; intA1,A2,B1,B2; Car*p,*t; QNode*q; //判断车场内是否有车 if(In->top>0)//有车 { while (1)//输入离开车辆的信息 { printf("\n请输入车在停车场的车位号: ",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) {printf("请便道车进入"); 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 { 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);//释放原栈结点内存空间 } } elseprintf("\n停车场里没有车\n");/*没车*/ printf("请按任意键返回"); getch(); } voidinfo1(SqStack*S)/*列表输出车场信息*/ { inti; 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); } } elseprintf("\n停车场里没有车"); } voidinfo2(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; } } elseprintf("\n便道里没有车\n"); printf("请按任意键返回"); getch(); } voidinfo(SqStackS,LinkQueueW) { info1(&S);/*显示停车场信息*/ info2(&W);/*显示停便道信息*/ } voidPRINT(Car*p,introom)//出停车站车的信息 { intA1,A2,B1,B2; 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)*price); free(p); } 总结和体会 具体内容(不少于500字): 本学期开设的《数据结构基础》课程已经已经结束,现实训也结束了,就学习体会进行学习总结. 这是一门纯属于设计的科目,它需用把理论变为上机调试。 刚开始学的时候确实有很多地方我很不理解,每次上课时老师都会给我们讲不同的设计题目,对于我们一个初学者来说,无疑是一个具大的挑战。 老师会给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己的设计,我们可以开始运行自己的程序。 实训中,我总结了学习中遇到的一些问题,结合书本上的知识与老师的讲解的问题得到解决,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段写到自己的程序中再加以必要的连接以完成程序的编写。 刚开始的时候确实有很多地方我很不理解,老师给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己的设计,我们可以开始运行自己的程序,可是好多处的错误让人看的可怕,还看不出到底是哪里出现了错误,但是程序还是得继续下去,我多次请教了老师和同学,逐渐能自己找出错误,并加以改正。 经过了这次课程实训,,这对我来说是一个突破性的进步,眼看着一个个错误通过自己的努力在我眼前消失,觉得很是开心。 此次的程序设计能够成功,是我和我的同学三个人共同努力作用的结果。 在这一段努力学习的过程中,我们有了明显的提高。 现在想起来,收获还真是不少,虽然说以前非常不懂这门语言,在它上面花费了好多心血,觉得它很难,是需用花费了大量的时间编写出来的。 现在真正的明白了一些代码的应用,每个程序都有一些共同点,通用的结构,相似的格式。 只要努力去学习,就会灵活的去应用它。 以上便是我对数据结构基础门课实训总结,我会抓紧时间将没有吃透的知识点补齐,克服学习中遇到的难关,在打牢基础的前提下向更深入的层面迈进! 参考文献 [1]王元珍,韩宗芬.IBM-PC宏汇编语言程序设计(第二版).华中理工大学出版社. (按以上标准格式增加 班学号姓名 2011年12月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 车库 管理 系统 开发 报告 31