资源描述
实 训 报 告
实训名称: 停车场管理
姓 名: nnn
院 (系): 软件学院
专业班级:
学 号:
指导教师:
成 绩:
时间:2010 年 6 月 21 日至 2010 年 6 月 25 日
实训任务书
一、题目
1. 停车场管理
2. 员工管理系统
3. 校园导游程序
4. 编写一个杂货店排队模拟程序。
5. 猜动物
6. 硬币游戏
7. 编写程序帮助旅游者找出从一个城市到另一个城市的最短旅行路径。
8. 设计哈希表实现电话号码查询系统。
9. 赫夫曼编码及译码
二、实训的性质和任务
数据结构实训是在完成理论课程学习之后安排的综合实践训练,要求学生能根据数据结构中所讲到的各种数据类型以及它们顺序和链式存储,在具体的应用中能运用并实现各种数据的各种不同操作。通过一周的综合实训,使学生加深对如何将逻辑关系的数据按一定的存储方式存储在计算机内。并为以后的编程打好基础。
三、实训的基本要求
1、熟悉各种数据类型及它们在计算机中的存储方式;
2、熟悉各种数据类型的基本操作,各基本操作的实现。
3、能综合运用各种数据类型实现一些具体的问题。
四、实训内容及要求
天/日期
任务描述
通过标准
10年6月21日
需求分析;算法分析
完成相关设计内容
10年6月22日
绘制流程图;程序代码设计
完成相关设计内容
10年6月23日
程序代码设计与实现
完成相关设计内容
10年6月24日
程序代码实现、测试
完成相关设计内容
10年6月25日
实训文档书写、作品成绩评定
完成相关设计内容
五、考核指标及成绩评定
实训成绩由下面构成:
平时成绩(10%)+作品(70%)+实训报告(20%)=总评成绩
作品成绩评定标准:
1、全部完成90-100
2、主要功能完成70-90
3、部分功能完成60-70
4、少部分完成40-60
5、几乎没做0-40
完 成 期 限: 年 月 日
指导教师签章:
专业负责人签章:
教学院长签章
年 月 日
一、 需求说明
仅仅认识到栈和队列是两种特殊的线性表是远远不够的,本次实习的目的在于使读者深入了解栈和队列的特征,以便在实际问题背景下灵活运用它们;同时还将巩固这两种结构的构造方法,接触较复杂问题的递归算法设计。以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表实现。
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
二、 功能描述
停车场管理系统主要有以下几个功能:
1、汽车进入车场
添加车辆信息:车牌号、进车时间,如果停车场已满,则将车辆停入临时便道内。
2、汽车退出车场
根据退出车辆的车牌号,进行优先退出,再根据退出时间计算停车费用。并将临时便道中的车辆停入停车场内 。
3、退出系统
三、 系统设计及实现
软件规格要求合理,基于C语言程序设计,在有限空间达到效果最优化。
3.1设计要求
用C语言实现 “停车场管理系统”。
3.2系统功能
(1)系统启动后,出现用户界面,人机交互。
(2)根据提示输入选项
1、汽车进入车场
2、汽车退出车场
3、退出系统
(3)进入车场时录入车辆牌号、和入场时间,输出停靠的停车位置,当停车场车位满时则停靠在临时停车便道内。
(4)退出车场时录入车辆牌号、和出场时间,输出停车总时间,和所停的费用。
3.3系统性能:
(1)时间特性需求
在网络连接正常的情况下,查询响应时间为秒级。
(2) 灵活性
当需求发生某些变化时,机票管理应用软件操作方式、数据结构、运行环境基本不会发生变化,变化只是将对应的数据文件内的记录改变,或改变过滤条件。
(3)可用性
软件应该尽可能的一目了然,使一般用户能够使用。
(4)安全性
本套职工信息系统所涉及的数据存放于文件中,在程序中应尽可能的使用调用存储过程的方法以免使某人反编译软件后或入侵到服务器后对数据的结构了如指掌,在程序中应该设置访问时的密码,以保证数据不容易被错改、破坏,而且要经常对数据文件进行备份操作,使得数据一旦受到破坏或是出错能够保证及时的恢复数据,将损失降低到最低。
(5) 可维护性
(6) 应用程序的维护
当用户使用本套职工信息系统软件时,遇到了软件本身的逻辑错误时,应当有软件的维护人员对软件进行修改。
(7)可转移、可转换性
Visual Studio及C编程语言的兼容性很高,在windows95/98. Windows NT. windows2000. windows XP等操作系统都可以直接运行。
输入项:
用户通过软件输入必要的信息,然后保存到数据文件,所输入的信息是经过需求分析限定的内容,同时也是数据文件中每个字段中存储的内容。
输出项:
本套职工信息系统软件会将所有需要浏览的数据显示在屏幕上,以便使用户能够浏览到数据文件中的数据或用户想要浏览范围中的数据
算法:
1)将用户输入的数据,按字段保存到数据文件中。
2)将数据文件中的数据,按字段提取到用户界面中。
3)必要的去除重复项的算法。
4)保持文件和输出数据的一致性。
注释设计:
尽可能的将软件中插入注释语句,使语句功能明了。制作的时候应该制作两分,一份是标有注释语句的代码,用来给维护人员、测试人员和开发人员了解开发过程所用,另一份是不带有注释语句的代码,用来最后实际应用当中,这样可以充分的利用有限的时间,降低客户的计算机打开系统功能的时间,提高客户的使用速度。
限制条件:
限制必要的条件,以排除由于用户的误操作造成不必要的错误。
测试计划:
在软件编辑的工作进行当中,测试人员便要开始制定测试计划,其中要包括白盒和黑盒的具体测试项目,及其必要的测试数据和出错的信息。每次测试的结果要写报告,并就发现和怀疑的问题与编辑人员联系。测试的结果要让编辑人员明白。
通过文件存储方式将用户所录入的数据保存妥当,充分地描述了数据间的内在联系,便于数据修改、更新与扩充,同时保证了数据的独立性、可靠性、安全性与完整性,减少了数据冗余,提高了数据共享程度及数据管理效率。
3.4设计思路及框架
停车场的管理流程如下:
①当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进入停车场;如果停
车场已满,则车辆进入便道等候。
②当车辆要求出栈时,先让在它之后进入停车场的车辆退出停车场为它让路,再让该车
退出停车场,让路的所有车辆再按其原来进入停车场的次序进入停车场。之后,再检查在便
道上是否有车等候,有车则让最先等待的那辆车进入停车场。
四、各功能模块
1、 交互菜单
2、汽车进入停车场
1
3、汽车退出停车场
2
五、 总结
实训期间,让我学到了很多东西,不仅使我在理论上对软件行业有了全新的认识,在实践能力上也得到了提高,真正地做到了学以致用,对我来说受益非浅。除此以外,我还学会了如何更好地与别人沟通,如何更好地去陈述自己的观点,如何说服别人认同自己的观点。第一次亲身感受到理论与实际的相结合,让我大开眼界。也是对以前所学知识的一个初审吧!这次实训对于我以后学习、找工作也真是受益菲浅,在这短短的几天中相信这些宝贵的经验会成为我今后成功的重要的基石。
作为一名大二的学生,经过两年的在校学习,对程序设计有了理性的认识和理解。在校期间,一直忙于理论知识的学习,没有机会也没有相应的经验来参与项目的开发。所以在实训之前,软件项目开发对我来说是比较抽象的,一个完整的项目要怎么来分工以及完成该项目所要的基本步骤也不明确。 而经过这次实训,让我明白一个完整项目的开发它所要经历的阶段包括:规划和用例说明、项目结构、业务功能说明书、详细设计说明书、代码实现、测试、实训手册。一个项目的开发所需要的财力、人力都是大量的,如果没有一个好的远景规划,对以后的开发进度会产生很大的影响,严重时导致在预定时间内不能完成该项目或者完成的项目跟原先计划所要实现的项目功能不符合。一份好的项目结构、业务功能和详细设计说明书对一个项目的开发有明确的指引作用,它可以使开发人员对这个项目所要实现的功能在总体上有具体的认识,并能减少在开发过程中出现不必要的脱节。代码的实现是一个项目开发成功与否的关键,可以说,前面所做的事情就是为代码的实现做铺垫。
这次实训也让我深刻了解到,不管在工作中还是在生活中要和老师,同学保持良好的关系是很重要的。做事首先要学做人,要明白做人的道理,如何与人相处是现代社会的做人的一个最基本的问题。对于自己这样一个即将步入社会的人来说,需要学习的东西很多,他们就是最好的老师,正所谓“三人行,必有我师”,我们可以向他们学习很多知识、道理。
在此,我应当感谢老师的指导与帮助以及学院提供此次千载难逢的实训机会。
六、 附录
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<math.h>
#define size 1 //停车场位置数
//模拟停车场的堆栈的性质;
typedef struct zanlind{
int number; //汽车车号
float ar_time; //汽车到达时间
}zanInode;
typedef struct{
zanInode *base; //停车场的堆栈底
zanInode *top; //停车场的堆栈顶
int stacksize_curren;
}stackhead;
//堆栈的基本操作;
void initstack(stackhead &L) //构造一个空栈L
{
L.base=(zanInode*)malloc(size*sizeof(zanlind));
if(!L.base) exit(0); //存储分配失败
L.top=L.base;
L.stacksize_curren=0;
}
void push(stackhead &L,zanInode e) //插入元素e为新的栈顶元素
{
*L.top++=e;
L.stacksize_curren++;
}
void pop(stackhead &L,zanInode &e) //若栈不为空,删除L的栈顶元素,用e返回其值
{
if(L.top==L.base)
{
printf("停车场为空!!");
return;
}
e=*--L.top;
L.stacksize_curren--;
}
//模拟便道的队列的性质;
typedef struct duilie{
int number; //汽车车号
float ar_time; //汽车到达时间
struct duilie *next;
}*queueptr;
typedef struct{
queueptr front; //便道的队列的对头
queueptr rear; //便道的队列的队尾
int length;
}linkqueue;
//队列的基本操作;
void initqueue(linkqueue &q) //构造一个空队列q
{
q.front=q.rear=(queueptr)malloc(sizeof(duilie));
if(!q.front||!q.rear)
exit(0); //存储分配失败
q.front->next=NULL;
q.length=0;
}
void enqueue(linkqueue &q,int number,int ar_time) //把元素的插入队列尾(属性为number,ar_time)
{
queueptr p;
p=(queueptr)malloc(sizeof(duilie));
if(!p) exit(0); //存储分配失败
p->number=number;
p->ar_time=ar_time;
p->next=NULL;
q.rear->next=p;
q.rear=p;
q.length++;
}
void popqueue(linkqueue &q,queueptr &w) //删除q的队头元素 w(属性为number,ar_time)
{
queueptr p;
if(q.front==q.rear)
{
printf("停车场通道为空");
return;
}
p=q.front->next;
w=p;
q.front->next=p->next;
q.length--;
if(q.rear==p) q.front=q.rear;
}
float shijiancha(float x,float y) //求时间差的子程序
{
int shix,shiy,fenx,feny;
float shijiancha;
shix=x;
shiy=y;
fenx=(int)((x-shix)*100);
feny=(int)((y-shiy)*100);
if(fenx>feny)
{
shijiancha=(shiy-shix-1)+(float)(feny+60-fenx)/100;
}
else
shijiancha=(shiy-shix)+(float)(feny-fenx)/100;
return shijiancha;
}
void jinru(stackhead &st,linkqueue &q) //对进入停车场的汽车的处理;
{
int number;
float time_a;
printf("请输入车牌号:");
scanf("%d" ,&number);
printf("请输入您进车场的时间(比如说:8点半则输入8.30):"); scanf("%f",&time_a);
if(st.stacksize_curren<2)
{
zanInode e;
e.number=number;
e.ar_time=time_a;
push(st,e);
printf("请把你的车停在%d号车道\n\n",st.stacksize_curren);
}
else
{
enqueue(q,number,time_a);
printf("停车场已满,请把你的车停在便道的第%d个位置上",q.length);
}
}
void likai(stackhead &st,stackhead &sl,linkqueue &q) //对离开的汽车的处理;
{ //st 堆栈为停车场,sl 堆栈为倒车场
int number,flag=1; //q 为便道队列
float sh,time_d,arrivaltime,money1;
printf("请输入您的车牌号:"); scanf("%d",&number);
printf("请输入您出车场的时间(比如说:8点半则输入8.30):"); scanf("%f",&time_d);
zanInode e,q_to_s;
queueptr w;
while(flag) //找到要开出的车,并弹出停车场栈
{
pop(st,e);
push(sl,e);
if(e.number==number)
{
flag=0;
arrivaltime=e.ar_time;
sh=shijiancha(arrivaltime,time_d);
money1=(int)sh*2+(sh-(int)sh)*100/30;
}
}
pop(sl,e); //把临时堆栈的第一辆车(要离开的)去掉;
while(sl.stacksize_curren) //把倒车场的车倒回停车场
{
pop(sl,e);
push(st,e);
}
if(st.stacksize_curren<2&&q.length!=0) //停车场有空位,便道上的车开进入停车场
{
popqueue(q,w);
q_to_s.ar_time=time_d;
q_to_s.number=w->number;
push(st,q_to_s);
printf("车牌为%d 的车已从通道进入停车场, 所在的停车位为 %d:\n",q_to_s.number,st.stacksize_curren);
}
printf("\n 收据");
printf("车牌号:%d\n",number);
printf("++++++++++++++++++++++++++++++\n");
printf(" 进车场时间:%4.2f\n",arrivaltime);
printf(" 出车场时间:%4.2f\n",time_d);
printf(" 停留时间:%4.2f\n",sh);
printf(" 应付(元) %4.2f\n",money1);
printf("++++++++++++++++++++++++++++++\n\n");
}
void main()
{
int m=100;
char flag; //进入或离开的标识;
stackhead sting,slinshi; //停车场和临时倒车场堆栈的定义;
linkqueue line; //队列的定义;
initstack(sting); //构造停车场堆栈sting
initstack(slinshi); //构造倒车场堆栈slinshi
initqueue(line); //构造便道队列line
while(m)
{
printf("\n ******************停车场管理程序*************** ");
printf("\n*===========================================================*");
printf("\n*温馨提示:请车主在24:00之前来取车,给您带来的不便,敬请原谅!*");
printf("\n* 1 *** 汽车进车场 2 *** 汽车出车场 3 *** 退出程序 *");
printf("\n*===========================================================*");
printf("\n 请输入您需要的服务的代号(1、2、3),谢谢!\n");
scanf("%c",&flag);
switch(flag)
{
case '1': jinru(sting,line);break; //汽车进车场
case '2': likai(sting,slinshi,line);break; //汽车出车场
case '3': exit(0);
}
m--;
}
}
THANKS !!!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考
展开阅读全文