《停車場管理系統(tǒng)畢業(yè)論文設計——利用所學C語言知識設計報告》由會員分享,可在線閱讀,更多相關《停車場管理系統(tǒng)畢業(yè)論文設計——利用所學C語言知識設計報告(14頁珍藏版)》請在裝配圖網上搜索。
1、
2008.12.25
班級:55071——28
學號:
指導教師:
姓名:
停車場管理一
一. 要求:
1.設計一個停車場用長度為N的堆棧來模擬。由于停車場內如有某輛車要開走 ,在它之后進來的車都必須先退出為它讓道,待其開出停車場后,這些車再依原來的順序進入。
2.程序輸出每輛車到達后的停車位置,以及某輛車離開停車場時應交納的費用和它在停車場內停留的時間。
二、程序中所采用的數據結構及存儲結構的說明
以棧模擬停車
2、場,以隊列模擬車場外的便道,按照從終端讀入的輸入數據序列進行模擬管理。棧以順序結構實現,隊列以鏈表實現。
程序中分別采用了“?!焙汀瓣犃小弊鳛槠浯鎯Y構。
“棧”的定義可知,每一次入棧的元素都在原棧頂元素之上成為新的元素,每一次出棧的元素總是當前棧頂元素使次棧元素成為新的棧頂元素,即最后進棧者先出棧。程序中采用的結構是:
typedef struct NODE{
CarNode *stack[MAX+1];
int top;
}SeqStackCar; /*模擬車庫*/
“隊列”是限定所有插入操作只能在表的一端進行,而所有的刪除操作都只能在表的另一端進行。插入端叫隊尾,夢芭
3、莎優(yōu)惠券刪除端叫對頭。按先進先出規(guī)則進行。程序中采用的結構是:
typedef struct Node{
QueueNode *head;
QueueNode *rear;
}LinkQueueCar; /*模擬通道*/
三、算法的設計思想
由于停車場是一個狹窄通道,而且只有一個大門可供汽車進出,問題要求汽車停車場內按車輛到達時間的先后順序,依次由北向南排列。由此很容易聯想到數據結構中的堆棧模型,因此可首先設計一個堆棧,以堆棧來模擬停車場,又每個汽車的車牌號都不一樣,這樣一來可以根據車牌號準確找到汽車位置,所以堆棧里的數據元素我設計成汽車的車牌號。當停車場內某輛車要離開時,
4、在他之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進入停車場。這是個一退一進的過程,而且讓道的汽車必須保持原有的先后順序,因此可再設計一個堆棧,以之來暫時存放為出站汽車暫時讓道的汽車車牌號。當停車場滿后,繼續(xù)進來的汽車需要停放在停車場旁邊的便道上等候,若停車場有汽車開走,則按排隊的先后順序依次進站,最先進入便道的汽車將會最先進入停車場,好樂買優(yōu)惠券這完全是一個先進先出模型,因此可設計一個隊列來模擬便道,隊列中的數據元素仍然設計成汽車的車牌號。另外,停車場根據汽車在停車場內停放的總時長來收費的,在便道上的時間不計費,因此必須記錄車輛進入停車場時的時間,車輛離開停車場
5、時的時間不需要記錄,當從終端輸入時可直接使用。由于時間不象汽車一樣需要讓道,我設計了一個順序表來存放時間。又用順序表用派生法設計了一個堆棧,恰好滿足上面模擬停車場的需要。
四.設計原理、框圖
車輛到達
以堆棧來模擬停車場和以堆棧里的數據元素我設計成汽車的車牌號
初始化車站, 初始化讓路的臨時棧, 初始化通道
車場未滿,車進車場
車場已滿,車進便道
判斷車場是否已滿
車
輸入車子到達時間,車牌號
未滿
車進入車場
判斷車場內是否有車
不做任何計算
無點x
有
輸入離開車輛的離開時間,進行停車費用的計算
6、
此車后面的車輛退出并進入臨時棧
車子離開
五.運行結果
車輛進入車場:
車場已滿:
車輛離開,并收費:
列出車場信息:
列出車道信息
六.程序
#include
#include
#include
/*------------------------------------------------------------------------------*/
#define MAX 3 /*車庫容量*/
#define price 0
7、.5 /*每車每分鐘費用*/
typedef struct time{
int hour;
int min;
}Time; /*時間結點*/
typedef struct node{
char num[10];
Time reach;
Time leave;
}CarNode;/*車輛信息結點*/
typedef struct NODE{
CarNode *stack[];
int top;
}SeqStackCar;
typedef struct car{
CarNode *data;
struct car *next;
}Q
8、ueueNode;
typedef struct Node{
QueueNode *head;
QueueNode *rear;
}LinkQueueCar; /*模擬通道*/
/*------------------------------------------------------------------------------*/
void InitStack(SeqStackCar *); /*初始化棧*/
int InitQueue(LinkQueueCar *); /*初始化便道*/
int Arrival( r *,LinkQueueCar *)
9、; /*車輛到達*/
void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*車輛離開*/
void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/
/*------------------------------------------------------------------------------*/
void main()
{
SeqStackCar Enter,Temp;
LinkQueueCar Wait;
int ch;
InitStack(&En
10、ter); /*初始化車站*/
InitStack(&Temp); /*初始化讓路的臨時棧*/
InitQueue(&Wait); /*初始化通道*/
printf("歡迎光臨");
printf("\n");
while(1)
{
printf("\n1.車輛到達");
printf(" 2.車輛離開");
printf(" 3.列表顯示 ");
printf(" 4.退出系統(tǒng)");
while(1)
{
scanf("%d",&ch);
if(ch>=1&&ch<=4)break;
else printf("\nplease choose:
11、1|2|3|4.");
}
switch(ch)
{
case 1:Arrival(&Enter,&Wait);break; /*車輛到達*/
case 2:Leave(&Enter,& ,&Wait);break; /*車輛離開*/
case 3:List(Enter,Wait);break; /*打印列表信息*/
case 4:exit(0); /*退出主程序*/
default: break;
}
}
}
/*--------------------------------------------------------------------
12、----------*/
void InitStack(SeqStackCar *s) /*初始化棧*/
{
int i;
s->top=0;
for(i=0;i<=MAX;i++)
s->stack[s->top]=NULL;
}
int InitQueue(LinkQueueCar *Q) /*初始化便道*/
{
Q->head=(QueueNode *)malloc(sizeof(QueueNode));
if(Q->head!=NULL)
{
Q->head->next=NULL;
Q->rear=Q->head;
return(
13、1);
}
else return(-1);
}
void PRINT(CarNode *p,int room) /*打印出場車的信息*/
{
int A1,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
14、:%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.1 元",((B1-A1)*60+(B2-A2))*price);
free(p);
}
int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達*/
{
CarNode *p;
QueueNode *t;
p=(CarNode *)malloc(siz
15、eof(CarNode));
flushall();
printf("\n請輸入車牌號(例如:鄂A1902):");
gets(p->num);
if(Enter->toptop++;
printf("\n車輛在車場第%d位置.",Enter->top);
printf("\n請輸入到達時間:/**:**/");
scanf("%d:%d",&(p->reach.hour),&(p->reach.min));
Enter->stack[Enter->top]=p;
return(1);
}
16、
else /*車場已滿,車進便道*/
{
printf("\n該車須在便道等待!");
t=(QueueNode *)malloc(sizeof(QueueNode));
t->data=p;
t->next=NULL;
W->rear->next=t;
W->rear=t;
return(1);
}
}
void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)
{ /*車輛離開*/
int i, room;
CarNode *p,*t;
QueueNode *q
17、;
/*判斷車場內是否有車*/
if(Enter->top>0) /*有車*/
{
while(1) /*輸入車輛離開的信息*/
{
printf("\n請輸入車在車場的位置/1--%d/:",Enter->top);
scanf("%d",&room);
if(room>=1&&room <=Enter->top) break;
}
while(Enter->top>room) /*聚尚網優(yōu)惠券*/
{
Temp->top++;
Temp->stack[Temp->top]=Enter->stack[Enter->top];
Enter->s
18、tack[Enter->top]=NULL;
Enter->top--;
}
p=Enter->stack[Enter->top];
Enter->stack[Enter->top]=NULL;
Enter->top--;
while(Temp->top>=1)
{
Enter->top++;
Enter->stack[Enter->top]=Temp->stack[Temp->top];
Temp->stack[Temp->top]=NULL;
Temp->top--;
}
PRINT(p,room); /*判斷通道上是否有車及車站是否已滿
19、*/
if((W->head!=W->rear)&&Enter->tophead->next;
t=q->data;
Enter->top++;
printf("\n便道的%s號車進入車場第%d位置.",t->num,Enter->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;
20、
Enter->stack[Enter->top]=t;
free(q);
}
else printf("\n便道里沒有車.\n");
}
else printf("\n車場里沒有車."); /*沒車*/
}
void List1(SeqStackCar *S) /*列表顯示車場信息*/
{
int i;
if(S->top>0) /*判斷車站內是否有車*/
{
printf("\n車場:");
printf("\n 位置 到達時間 車牌號\n");
for(i=1;i<=S->top;i++)
{
printf(" %d ",i)
21、;
printf("%d:%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min);
puts(S->stack[i]->num);
}
}
else printf("\n車場里沒有車");
}
void List2(LinkQueueCar *W) /*列表顯示便道信息*/
{
QueueNode *p;
p=W->head->next;
if(W->head!=W->rear) /*判斷通道上是否有車*/
{
printf("\n等待車輛的號碼為:");
while(p!=NULL)
{
22、
puts(p->data->num);
p=p->next;
}
}
else printf("\n便道里沒有車.");
}
void List(SeqStackCar S,LinkQueueCar W)
{
int flag,tag;
flag=1;
while(flag)
{
printf("\n請選擇 1|2|3:");
printf("\n1.車場\n2.便道\n3.返回\n");
while(1)
{
scanf("%d",&tag);
if(tag>=1||tag<=3) break;
else printf("\n請選擇 1|2|3:");
}
switch(tag)
{
case 1:List1(&S);break;/*列表顯示車場信息*/
case 2:List2(&W);break; /*列表顯示便到信息*/
case 3:flag=0;break;
default: break;
}
}
}
七 結果