课程设计报告格式.docx
《课程设计报告格式.docx》由会员分享,可在线阅读,更多相关《课程设计报告格式.docx(15页珍藏版)》请在冰豆网上搜索。
课程设计报告格式
《数据结构》课程设计报告
专业:
软件工程
班级:
软工1203班
学号:
1208010303
姓名:
王青枝
完成日期:
2012年12月26日
2012年12月26日
1.题目:
停车场管理系统
(1)【问题描述】
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按照车辆到达时间的先后顺序,一次由南向北排列(大门在最南端,最先到达的第一辆汽车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内的某辆车要开走时,在它之后进入的车辆必须退出车场为它让路,待该辆车开出大门外,其他车辆再按照原次序进入车场,每辆车停放在车场的车在它离开停车场时必须按照它停留的时间长短交纳费用.实为停车场编制按照上述要求进行管理的模拟程序。
(2)【任务要求】
试编写程序,模拟上述管理过程。
要求以顺序栈模拟停车场,以链队列模拟便道。
从终端读入汽车到达或离去的数据,每组数据包括三项:
1是“到达”还是“离去”;
②汽车牌照号码;
③“到达”或“离去”的时刻.
与每组输入信息相应的输出信息为:
如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。
(提示:
需另设一个栈,临时停放为让路而从车场退出的车。
)
2.停车管理系统使用情况:
3.程序运行及截图
(1)开始界面:
其中停车场容量和收费标准时用户自己规定并进行输入。
以下是我自己输入的都为1.的界面,
(2)进行菜单选择后:
选择菜单1,界面为:
需要输入车辆的车牌号,以便登记;
进而选择看是否有停车位,再进行进入停车场时间的记录工作,
然后再返回主菜单:
显示的是停车位的信息
进而查看停车场信息,选择3运行结果,
再返回进入系统的收费功能,需要输入离开时间里车位。
显示出各相关信息如下:
选用退出情况如下:
4.相关设计:
相关函数:
voidInitStack(SqStack*);/*初始化栈*/
intInitQueue(LinkQueue*);/*初始化便道*/
intarrive(SqStack*,LinkQueue*);/*车辆到达*/
voidleave(SqStack*,SqStack*,LinkQueue*);/*车辆离开*/
voidinfo(SqStack,LinkQueue);/*显示停车场信息*/
voidPRINT(Car*p,introom);
voidInitStack(SqStack*s)/*初始化栈*/
voidmain()//主函数
5.设计心得:
在生活与工作中许多领域都用到数据结构,但关键是如何将问题模型转换,变换成我们熟知的知识应用,即抽象具体化。
首先是要把所学的知识重新好好巩固下,其次,每次课程设计总会有些东西不懂的,这时我们就要上网去查资料,这样会让我们养成一个好的自主学习的习惯。
这次的课程设计,我开始是分析了这个系统需要做些什么,然后分析要用到哪些代码,哪些结构,哪些算法开实现这些功能。
它让我明白了栈和队列实际会用在哪些方面,同时我有些不懂的,我会看书,或是在网上找,慢慢的也增加了自己的知识量。
这次的停车场系统做的很简单,和真正的停车场系统来比,根本就不算什么了。
真正的停车场是不会那么退出停车场的,每次离开都要人家后面的让道,还不被人骂么?
不过这次只是一次小小的试手,更难得还在后面,因此我们也需不断学习充实自己。
6.用户使用说明:
(1)进入主界面后,首先输入用户的车库容量与收费情况(容量数据类型为整型,即输入为整数,价格由用户自定)。
(2)进而进入主菜单界面,课自由选择操作,主要操作分为:
车辆到达信息,车辆离开选项,查询停车场情况选项及退出功能,
(3)如果进入的是车辆进入,则需要输入进入时间和车牌号情况。
(4)如果在进入后进入车辆离开选项,则需要输入离开的车牌号,和离开的时间,则输出相应的费用情况。
(5)用户也可对自己的停车场停车情况进行查询。
(6)用户需要按照显示出的提示进行相关操作。
否则会有其他错误
7.详细代码:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
intMAX;/*车库容量*/
floatprice;/*停车单价*/
typedefstructtime
{
inthour;
intmin;
}Time;/*时间结点*/
typedefstructnode
{
charnum[10];
Timereach;
Timeleave;
}Car;/*车辆信息结点*/
typedefstructNODE
{
Car*stack[100];
inttop;
}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);
}
intmain()
{
SqStackIn,Out;/*停车场入栈标记和出栈标记*/
LinkQueueWait;
intch;
InitStack(&In);/*初始化停车站*/
InitStack(&Out);/*初始化让路的临时栈*/
InitQueue(&Wait);/*初始化通道*/
while
(1)
{
printf("请输入停车场的容量:
");
scanf("%d",&MAX);
printf("\n");
printf("请输入停车场的收费(元/小时):
");
scanf("%f",&price);
printf("\n");
printf("您输入的停车场容量为:
|费用为:
\n\n\n");
printf("%d辆|%2.1f元/小时\n\n\n",MAX,price);
printf("\n1.车辆到达\n\n2.车辆离开\n\n3.停车场信息\n\n4.退出系统\n\n\n请选择以上数字进行相关操作\n");
while
(1)
{
ch=getch();/*从控制台读取一个字符,但不显示在屏幕上,即按下任意键,再继续执行下面的语句*/
switch(ch)
{
case49:
arrive(&In,&Wait);break;/*车辆到达*/
case50:
leave(&In,&Out,&Wait);break;/*车辆离开*/
case51:
info(In,Wait);break;/*输出车站信息*/
case52:
{printf("谢谢使用!
");exit(0);}/*退出主程序*/
default:
printf("\n按键无效,请重新按键选择!
");
}/*49-52分别表示“1”-“4”这四个按键的键值*/
system("CLS");/*调用系统的清屏处理命令*/
printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。
\n",MAX,price);
printf("\n1.车辆到达\n\n2.车辆离开\n\n3.停车场信息\n\n4.退出系统\n\n请选择以上数字:
\n");
}
}
return0;
}
intarrive(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{
In->top++;/*栈顶指针先加1*/
printf("\n停车的位置:
%d号停车位。
",In->top);
printf("\n请输入车到达的时间");
printf("\n请输入小时:
");
scanf("%d",&(p->reach.hour));
printf("\n请输入分钟:
");
scanf("%d",&(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);
}
}
voidleave(SqStack*In,SqStack*Out,LinkQueue*W)/*车辆离开*/
{
introom;
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++;/*出栈的指针加1*/
Out->stack[Out->top]=In->stack[In->top];
In->stack[In->top]=NULL;
In->top--;/*入栈的指针减1*/
}
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{
q=W->head->next;
t=q->data;
In->top++;/*栈顶指针先加1*/
printf("\n便道的%s号车进入车场第%d号停车位。
",t->num,In->top);
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);/*删除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请输入车离开的时间:
");
printf("\n请输入小时:
");
scanf("%d",&(p->leave.hour));
printf("\n请输入分钟:
");
scanf("%d",&(p->leave.min));
printf("\n车牌号码:
");
puts(p->num);//输出字符串并换行
printf("\n车到达的时间是:
%d:
%d",p->reach.hour,p->reach.min);
printf("\n车离开的时间是:
%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);
printf("\n");
free(p);
}
8.参考书目:
[1]柴诚敬,刘国维,李阿娜.化工原理课程设计.天津:
天津科学技术出版社,1994年
[2]李春葆主编数据结构教程(第四版)上机实验指导
[3]胡圣荣,周霭如,罗穗萍编著数据结构教程
[4]数据结构与习题解答张曼,朱晓谷,吕士俊北京兵器工业出版社2005
[5]白雪峰,李沛编著数据结构导论学习辅导与真题解析机械工业出版社