第一篇:數(shù)據(jù)結(jié)構(gòu) 停車場(chǎng)管理 完整版 實(shí)習(xí)報(bào)告
實(shí)習(xí)報(bào)告
題目:停車場(chǎng)管理
一. 需求分析
1. 用棧來(lái)表示停車場(chǎng),用隊(duì)列來(lái)表示停車道。
2. 用戶需輸入車輛的必要信息,如車輛的到達(dá)或離開(kāi),汽車牌號(hào)以及到達(dá)或離去的時(shí)刻。停車場(chǎng)的容量及單位時(shí)間的停車費(fèi)由編程序者自行設(shè)置,結(jié)構(gòu)需輸出車輛停車所需繳納的費(fèi)用。
3. 本程序要求對(duì)車輛的動(dòng)態(tài)能夠輸出具體的信息內(nèi)容,包括停車或離開(kāi)的時(shí)間,位置,及所需繳納的停車費(fèi)。4. 測(cè)試數(shù)據(jù)為:
N=2,輸入數(shù)據(jù)為:(’A’,1,5),(‘A’,2.,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0).其中:’A’表示到達(dá),’D’表示離去,’E’表示輸入結(jié)束。5.程序執(zhí)行的命令為:
1.創(chuàng)建棧和隊(duì)列。2.對(duì)車輛的行為進(jìn)行相應(yīng)的處理。3.輸出車輛的信息。
二. 概要設(shè)計(jì)
1.設(shè)定棧的抽象數(shù)據(jù)類型定義:
ADT Stack{
數(shù)據(jù)對(duì)象:D={ai|ai屬于Elem,i=1,2……,n, n>=0}
數(shù)據(jù)關(guān)系:R1={
基本操作:
initStack(&S)
操作結(jié)果:構(gòu)造一個(gè)空棧S.pop(&S,&e)
初始條件:棧S已存在。
操作結(jié)果:刪除S的棧頂元素,并以e返回其值。
push(&S,&e)
初始條件:棧S已存在。
操作結(jié)果:在棧S的棧頂插入新的棧頂元素e。
lengthstack(S)
初始條件:棧S已存在。
操作結(jié)果:返回S中的元素個(gè)數(shù),即棧的長(zhǎng)度。}ADT Stack;2.設(shè)定隊(duì)列的抽象數(shù)據(jù)類型定義:
ADT Queue{
數(shù)據(jù)對(duì)象:D={ai| ai屬于Elem, i=1,2,……,n, n>=0}
數(shù)據(jù)關(guān)系:R1={
基本操作:
initqueue(&Q)
操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列Q.enqueue(&Q, e)
初始條件:隊(duì)列Q已存在。
操作結(jié)果:插入元素e為Q的新的隊(duì)尾元素。
dequeue(&Q, &e)
初始條件:Q為非空隊(duì)列。
操作結(jié)果:刪除Q的對(duì)頭元素,并用e返回其值。
Lengthqueue(Q)
初始條件:隊(duì)列Q已存在。
操作結(jié)果:返回Q的元素個(gè)數(shù),即隊(duì)列的長(zhǎng)度。}ADT Queue 3.本程序主要包括三個(gè)模塊
1.主程序模塊;
int main(){
初始化;
do{
接受命令;
處理命令;
}while(命令!=退出); } 2.處理車輛到達(dá)模塊; 3.處理車輛離開(kāi)模塊;
各模塊之間的調(diào)用關(guān)系如下:
處理車輛到達(dá)模塊?主程序模塊?處理車輛離開(kāi)模塊
三. 詳細(xì)設(shè)計(jì)
設(shè)計(jì)程序如下:
#include
//將停車場(chǎng)的容量設(shè)為2; #define cost 10 //將單位時(shí)間的停車費(fèi)設(shè)為10,車道里不收費(fèi);
#define OVERFLOW-2
#define ERROR 0 //分配棧的存儲(chǔ)空間失?。?using namespace std;
typedef struct Elem {//定義元素?cái)?shù)據(jù)結(jié)構(gòu)類型
int carnum;int time;}Elem;
typedef struct QNode {//隊(duì)列
struct QNode *next;Elem Qelem;}QNode,*QueuePtr;
typedef struct { QueuePtr front;//隊(duì)頭指針
QueuePtr rear;//隊(duì)尾指針 }LinkQueue;
void initqueue(LinkQueue &Q){//構(gòu)造一個(gè)空隊(duì)列
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));if(!Q.front)exit(OVERFLOW);Q.front->next=Q.rear->next=NULL;}
void enqueue(LinkQueue &Q,int carnum,int time){//入隊(duì)操作
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));p->Qelem.carnum=carnum;p->Qelem.time=time;p->next=NULL;Q.rear->next=p;Q.rear=p;} int lengthqueue(LinkQueue Q){ int i=0;QueuePtr p;p=Q.front->next;while(p!=Q.rear){
i++;
p=p->next;} i++;return i;} void dequeue(LinkQueue &Q,Elem &e){//從對(duì)頭離隊(duì)操作,并返回其值 QueuePtr p=(QueuePtr)malloc(sizeof(QNode));if(Q.front==Q.rear)
cout<<“車道中沒(méi)有車輛!”< p=Q.front->next; e=p->Qelem; Q.front->next=p->next; if(Q.rear==p)Q.rear=Q.front; free(p);} } typedef struct { Elem *base;Elem *top;int stacksize;}Sqstack;void initStack(Sqstack &S){//創(chuàng)建一個(gè)空棧 S.base=(Elem*)malloc(n*sizeof(Elem));if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=n;} int push(Sqstack &S,Elem &e)//插入新的元素 { Elem *temp;if(S.top-S.base==S.stacksize) return 1;else { temp=S.top; temp->carnum=e.carnum; temp->time=e.time; S.top++; return 0;} } int lengthstack(Sqstack S){//當(dāng)前棧的長(zhǎng)度 return S.top-S.base;} int pop(Sqstack &S,Elem &e){ //刪除棧頂元素,并返回其值 if(S.top==S.base)return ERROR;e=*--S.top;return 1;} void carin(Sqstack &S,LinkQueue &Q,Elem car){ int k=0;//輸入數(shù)據(jù)正確 QueuePtr r;Elem *temp;temp=S.base;while(temp!=S.top)/在棧中尋找是否有同一編號(hào)的車; { if(temp->carnum==car.carnum) { cout<<“該車號(hào)在停車場(chǎng)中已存在,請(qǐng)重新輸入!”< k=1;//找到了有同一編號(hào)的車 break; } temp++;} if(k==0&&Q.front!=Q.rear){//在棧中未找到,從隊(duì)列中查找 r=Q.front->next;//隊(duì)頭 while(r&&r->Qelem.carnum!=car.carnum) {r=r->next;} if(r&&r->Qelem.carnum==car.carnum){cout<<“該車號(hào)在車道中已存在,請(qǐng)重新輸入!”< { if(S.top-S.base!=S.stacksize)//說(shuō)明棧未滿,{ S.top->carnum=car.carnum; S.top->time=car.time; S.top++; cout<<“請(qǐng)進(jìn)入停車場(chǎng)”< } else { enqueue(Q,car.carnum,car.time); cout<<“請(qǐng)便車道”< } } } void carleave(Sqstack &S,LinkQueue &Q,Elem car){ int ture=0;//在棧中沒(méi)有找到與要離開(kāi)的車 Elem e,em,*temp; QueuePtr p,r;temp=S.base;if(ture==0){ while(temp!=S.top)//先在棧中尋找; { if(temp->carnum==car.carnum) { int temp_cost; temp_cost=(car.time-temp->time)*cost; ture=1;//在棧中找到 cout<<“您的停車時(shí)間為”< break; } temp++; } if(ture==1) //備用棧 { Sqstack spear; initStack(spear); while(S.top!=temp+1)//先在棧中尋找; { pop(S,em); push(spear,em); } pop(S,*temp); if(spear.top!=spear.base) { while(spear.top!=spear.base) { pop(spear,em); push(S,em); } } } if(ture==1&&Q.front!=Q.rear)//棧中有車離開(kāi),將隊(duì)列中的車進(jìn)入棧中 { dequeue(Q,e); //離隊(duì),并返回?cái)?shù)據(jù)e S.top->carnum=e.carnum;S.top->time=car.time;S.top++;cout< } } if(ture==0&&Q.front!=Q.rear)//棧中沒(méi)找到要離開(kāi)的車 { p=Q.front; r=Q.front->next;//隊(duì)頭 while(r&&r->Qelem.carnum!=car.carnum) { p=r; r=r->next; } if(r&&r->Qelem.carnum==car.carnum) ture=2;//在隊(duì)列中找到要離開(kāi)的車 if(r&&r->Qelem.carnum==car.carnum) { ture=2; cout<<“便道”< p->next=r->next; free(r); } }//直接從隊(duì)列離開(kāi) if(ture==0) cout<<“沒(méi)有該輛車!”< char c; int j=0,temp_time,i=1;//i==0,判斷臨時(shí)記錄時(shí)間的temp_time應(yīng)該去該次的值,還是上次的值。j==0,表示第一次輸入數(shù)據(jù),不需要檢測(cè)數(shù)據(jù)是否正確 LinkQueue Q;Sqstack S;Elem car;initqueue(Q); initStack(S); cout<<“請(qǐng)輸入車輛信息(到達(dá)離開(kāi)或退出標(biāo)志A D E,車牌號(hào),當(dāng)前時(shí)間)”< while(cin>>c>>car.carnum>>car.time) { if(j==1) { if(S.top==S.base) cout<<“停車場(chǎng)中沒(méi)有車!”< else { if(car.time { cout<<“您輸入的時(shí)間有誤,請(qǐng)重新輸入!”< i=0;//temp_time還是記錄上次的值 } else { temp_time=car.time; i=1; } } if(i==1)//正確的數(shù)據(jù) { if(c=='A')//到達(dá) carin(S,Q,car); else if(c=='D') { if(S.top==S.base); else carleave(S,Q,car); } } j=1; } if(j==0)//第一次輸入數(shù)據(jù)不需要檢測(cè) { if(c=='A')//到達(dá) carin(S,Q,car); else if(c=='D') { if(S.top==S.base) cout<<“停車場(chǎng)中沒(méi)有車!”< else carleave(S,Q,car); } j=1; temp_time=car.time; } if(c=='E') { cout<<“輸入結(jié)束!”< break; } } return 0;} 四. 調(diào)試分析 1.本次作業(yè)是設(shè)計(jì)停車場(chǎng)的管理系統(tǒng),就需要判斷車牌號(hào),及時(shí)間的輸入的正確性,輸入的數(shù)據(jù)有比較嚴(yán)格的要求,必須符合實(shí)際。因此對(duì)數(shù)據(jù)需要多次判斷。2.處理車輛到達(dá)模塊和處理車輛離開(kāi)模塊其空間復(fù)雜度為O(m*n);3.本程序循環(huán)用的很多,找車,排隊(duì),等等。4.主程序設(shè)計(jì)的有點(diǎn)亂。 五 用戶手冊(cè) 1.運(yùn)行,按屏幕提示輸入車輛信息; 2.回車顯示車輛在停車場(chǎng)或停車道的信息; 3.輸入E,則退出。 六. 測(cè)試結(jié)果 七 附錄 #include 實(shí)習(xí)報(bào)告 題目:停車場(chǎng)管理 一. 需求分析 1. 用棧來(lái)表示停車場(chǎng),用隊(duì)列來(lái)表示停車道。 2. 用戶需輸入車輛的必要信息,如車輛的到達(dá)或離開(kāi),汽車牌號(hào)以及到達(dá)或離去的時(shí)刻。停車場(chǎng)的容量及單位時(shí)間的停車費(fèi)由編程序者自行設(shè)置,結(jié)構(gòu)需輸出車輛停車所需繳納的費(fèi)用。 3. 本程序要求對(duì)車輛的動(dòng)態(tài)能夠輸出具體的信息內(nèi)容,包括停車或離開(kāi)的時(shí)間,位置,及所需繳納的停車費(fèi)。4. 測(cè)試數(shù)據(jù)為: N=2,輸入數(shù)據(jù)為:(’A’,1,5),(‘A’,2.,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0).其中:’A’表示到達(dá),’D’表示離去,’E’表示輸入結(jié)束。5.程序執(zhí)行的命令為: 1.創(chuàng)建棧和隊(duì)列。2.對(duì)車輛的行為進(jìn)行相應(yīng)的處理。3.輸出車輛的信息。 二. 概要設(shè)計(jì) 1.設(shè)定棧的抽象數(shù)據(jù)類型定義: ADT Stack{ 數(shù)據(jù)對(duì)象:D={ai|ai屬于Elem,i=1,2……,n, n>=0} 數(shù)據(jù)關(guān)系:R1={ 基本操作: InitStack(&S) 操作結(jié)果:構(gòu)造一個(gè)空棧S.pop(&S,&e) 初始條件:棧S已存在。 操作結(jié)果:刪除S的棧頂元素,并以e返回其值。 push(&S,&e) 初始條件:棧S已存在。 操作結(jié)果:在棧S的棧頂插入新的棧頂元素e。 EmptyStack(S) 初始條件:棧S已存在。 操作結(jié)果:若棧為空,則返回TRUE,否則,返回FALSE }ADT Stack;2.設(shè)定隊(duì)列的抽象數(shù)據(jù)類型定義: ADT Queue{ 數(shù)據(jù)對(duì)象:D={ai| ai屬于Elem, i=1,2,……,n, n>=0} 數(shù)據(jù)關(guān)系:R1={ 基本操作: InitQueue(&Q) 操作結(jié)果:構(gòu)造一個(gè)空隊(duì)列Q.Append(&Q, e) 初始條件:隊(duì)列Q已存在。 操作結(jié)果:插入元素e為Q的新的隊(duì)尾元素。 Remove(&Q, &e) 初始條件:Q為非空隊(duì)列。 操作結(jié)果:刪除Q的對(duì)頭元素,并用e返回其值。 EmptyQueue(Q) 初始條件:隊(duì)列Q已存在。 操作結(jié)果:若隊(duì)列為空,則返回TRUE,否則,返回FALSE }ADT Queue 3.本程序主要包括三個(gè)模塊 1.主程序模塊; int main(){ 初始化; do{ 接受命令; 處理命令; }while(命令!=退出); } 2.處理車輛到達(dá)模塊; 3.處理車輛離開(kāi)模塊; 各模塊之間的調(diào)用關(guān)系如下: 處理車輛到達(dá)模塊?主程序模塊?處理車輛離開(kāi)模塊 三. 詳細(xì)設(shè)計(jì) 設(shè)計(jì)程序如下: 1.棧的頭文件 #ifndef _SQSTACK_H_ #define _SQSTACK_H_ struct Car { int plate, arrive_t;};class SqStack { public: int top;Car *base;int size;void InitStack(int m=100);bool EmptyStack()const;bool Push(Car &c);bool Pop(Car &c);};void SqStack::InitStack(int n){ base = new Car[n];top =-1;size = n;} bool SqStack::EmptyStack()const { if(top ==-1) return true;else return false;} bool SqStack::Push(Car &c){ if(top == sizec.arrive_t;if(timelong < 0){ cout << “the input is false,please do it again”< packing.Push(c); while(!temp.EmptyStack()) { temp.Pop(c); packing.Push(c); } return 0;} cout << “car ” << pla << “ was departed from packing lot” << endl;cout << “停留時(shí)間:” << timelong << endl;cout << “繳納金額:” << timelong*price << endl;while(!temp.EmptyStack()){ temp.Pop(c); packing.Push(c);} if(!sevice_road.EmptyQueue()) { sevice_road.Remove(c); map[c.plate] = 0; c.arrive_t = tim; packing.Push(c); cout << “car ” << c.plate << “ in packing lot” << endl; } } return 0;} int main(){ cout << “請(qǐng)輸入停車場(chǎng)規(guī)?!?<< endl;cout << “xxxxxxxxxx” << endl;int n;cin >> n;cout << “xxxxxxxxxx” << endl;SqStack packing, temp;LinkQueue sevice_road;packing.InitStack(n);temp.InitStack();sevice_road.InitQueue();cout << “請(qǐng)輸入指令:A-arrive、D-depart、E-exit cout << ”xxxxxxxxxx“ << endl;char command;cin >> command;while(command!= 'E'){ if(command == 'A') { Arrive(packing, sevice_road); cout << ”xxxxxxxxxx“ << endl; } if(command == 'D') { Depart(packing, temp, sevice_road); cout << ”xxxxxxxxxx“ << endl; } cin >> command;} } 車牌號(hào)時(shí)間” << endl; 四. 調(diào)試與驗(yàn)收 1.本次作業(yè)是設(shè)計(jì)停車場(chǎng)的管理系統(tǒng),就需要判斷車牌號(hào),及時(shí)間的輸入的正確性,輸入的數(shù)據(jù)有比較嚴(yán)格的要求,必須符合實(shí)際。因此對(duì)數(shù)據(jù)需要多次判斷。2.處理車輛到達(dá)模塊和處理車輛離開(kāi)模塊其空間復(fù)雜度為O(m*n);3.本程序循環(huán)用的很多,找車,排隊(duì),等等。 4.在驗(yàn)收時(shí),老師提出一些當(dāng)輸入為不正常輸入的時(shí)候的情況,而我沒(méi)有考慮到,所以又做了一定的修改。 5.驗(yàn)收時(shí),老師提到所加map破壞了程序整體結(jié)構(gòu)的完好性,是有待改進(jìn)的地方。 五 用戶手冊(cè) 1.按屏幕提示輸入停車場(chǎng)規(guī)模和車輛信息; 2.回車顯示車輛在停車場(chǎng)或停車道的信息; 3.輸入E退出。 六. 測(cè)試結(jié)果 七 附錄 源程序文件名清單: LinkQueue.cpp LinkQueue.h SqStack.cpp SqStack.h 停車場(chǎng)管理.cpp 課 程 設(shè) 計(jì) 報(bào) 告 課程名稱 數(shù)據(jù) 結(jié)構(gòu) 題 目 停車場(chǎng)管理 學(xué)生姓名 班級(jí)/學(xué)號(hào) 191103 一、需求分析 設(shè)停車場(chǎng)是一個(gè)可停放n輛汽車的狹長(zhǎng)通道,且只有一個(gè)大門(mén)可供 汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門(mén)在最南端),若停車場(chǎng)內(nèi)已停滿n輛汽車,則后來(lái)的汽車只能在門(mén)外的便道上等候,一旦有車開(kāi)走,則排在便道上的第一輛車即可開(kāi)入;當(dāng)停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),在它之后進(jìn)入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開(kāi)出大門(mén)外,其他車輛再按原次序進(jìn)入車場(chǎng),每輛停放在車場(chǎng)的車在它離開(kāi)停車場(chǎng)時(shí)必須按它停留的時(shí)間長(zhǎng)短交納費(fèi)用。試為停車場(chǎng)編制按上述要求進(jìn)行管理的模擬程序。 【測(cè)試數(shù)據(jù)】 設(shè)n=2,輸入數(shù)據(jù)為:(’A’,1,5),(’A’,2,10),(’D’,1,15),(’A’,3,20),(’A’,4,25),(’A’,5,30),(’D’,2,35),(’D’,4,40),(’E’,0,0)。其中:’A’表示到達(dá);’D’表示離去;’E’表示輸入結(jié)束。概要設(shè)計(jì) 以棧模擬停車場(chǎng),以隊(duì)列模擬車場(chǎng)外的便道。棧以順序結(jié)構(gòu)實(shí)現(xiàn)。隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。每一組輸入數(shù)據(jù)包括:汽車“到達(dá)”或“離去”信息、汽車牌照號(hào)碼以及到達(dá)或離去的時(shí)刻。 輸出信息:若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場(chǎng)內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留的時(shí)間不收費(fèi))。 二、詳細(xì)設(shè)計(jì) 三、程序設(shè)計(jì) 1.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) /*棧,模擬停車場(chǎng)*/ typedef struct Car1 { //車 int number;//汽車車號(hào) int ar_time;//汽車到達(dá)時(shí)間 }CarNode; typedef struct { //停車場(chǎng) CarNode *base;//停車場(chǎng)的堆棧底 CarNode *top;//停車場(chǎng)的堆棧頂 int stacksize;}Park; /*隊(duì)列,模擬便道*/ typedef struct Car2 { //車 int number;//汽車車號(hào) int ar_time;//汽車到達(dá)時(shí)間 struct Car2 *next;}*CarPtr; typedef struct { //便道 CarPtr front;//便道的隊(duì)列的對(duì)頭 CarPtr rear;//便道的隊(duì)列的隊(duì)尾 int length;}Shortcut;2.程序設(shè)計(jì) 主函數(shù)中包括3個(gè)子函數(shù),A(arrive),D(depart),E(end) (1)輸入車輛數(shù)據(jù):A為到達(dá),D為離去,E為結(jié)束程序。 (2)接著輸入車輛的牌照信息 (3)若為到達(dá)的車輛,輸入進(jìn)場(chǎng)信息,若為離去的車輛,輸入離場(chǎng)信息。(4)若車輛到達(dá),可得到車輛的停放位置信息,若車輛離去,可得到車輛的停放時(shí)間(在便道上的停放時(shí)間除外),以及應(yīng)該交納的費(fèi)用。 (5)本程序不斷循環(huán)要求輸入車輛信息,直到輸入的車輛數(shù)據(jù)為E時(shí),程序結(jié)束。 四、調(diào)試分析 a、一開(kāi)始在調(diào)試程序時(shí)遇到了內(nèi)存錯(cuò)誤,經(jīng)過(guò)DEBUG,找到了引起內(nèi)存錯(cuò)誤的原因:即在建立隊(duì)頭指針與隊(duì)尾指針時(shí)沒(méi)有對(duì)指針進(jìn)行初始化(沒(méi)有為指針動(dòng)態(tài)分配空間)。問(wèn)題得到解決。 b、本程序中:車輛到達(dá),離去時(shí)的時(shí)間復(fù)雜度均為:O(n)。本程序空間復(fù)雜度為:O(n) 五、使用說(shuō)明和測(cè)試結(jié)果 1.使用說(shuō)明:用戶按照屏幕所顯示的提示來(lái)選擇需要進(jìn)行操作 2、測(cè)試結(jié)果: 測(cè)試結(jié)果滿足題目要求,程序無(wú)錯(cuò)誤。 六、心得體會(huì) 通過(guò)此實(shí)驗(yàn),加深了我對(duì)數(shù)據(jù)結(jié)構(gòu)這門(mén)課的理解,真正運(yùn)用了知識(shí)。將理論與現(xiàn)實(shí)完美的聯(lián)系在了一起。增強(qiáng)了動(dòng)手能力,對(duì)今后的工作學(xué)習(xí)都有很大的幫助。單調(diào)的看書(shū)本沒(méi)有太大的作用,只有去編程才能理解究竟學(xué)習(xí)的作用。同時(shí),編程過(guò)程中遇到過(guò)各種各樣的問(wèn)題,與同學(xué)討論,與老師交流。鍛煉了我的協(xié)做能力與克服困難的能力。編程也極大的提高了我的學(xué)習(xí)積極性。 七、附錄 #include /*棧,模擬停車場(chǎng)*/ typedef struct Car1 { //車 int number;//汽車車號(hào) int ar_time;//汽車到達(dá)時(shí)間 }CarNode; typedef struct { //停車場(chǎng) CarNode *base;//停車場(chǎng)的堆棧底 CarNode *top;//停車場(chǎng)的堆棧頂 int stacksize; }Park; /*隊(duì)列,模擬便道*/ typedef struct Car2 { //車 int number;//汽車車號(hào) int ar_time;//汽車到達(dá)時(shí)間 struct Car2 *next;}*CarPtr; typedef struct { //便道 CarPtr front;//便道的隊(duì)列的對(duì)頭 CarPtr rear;//便道的隊(duì)列的隊(duì)尾 int length;}Shortcut;/*初始化停車場(chǎng)*/ Status InitStack(Park &P){ P.base=(CarNode*)malloc(SIZE*sizeof(Car1)); if(!P.base)exit(-2); P.top=P.base; P.stacksize=0; return 1;} Status Push(Park &P,CarNode e){//車進(jìn)入停車場(chǎng) *P.top++=e; ++P.stacksize; return 1;} Status Pop(Park &P,CarNode &e){//車離開(kāi)停車場(chǎng) if(P.top==P.base) printf(“停車場(chǎng)為空”); else { e=*--P.top; --P.stacksize; } return 1;} /*初始化便道*/ Status InitQueue(Shortcut &S){ S.front=S.rear=(CarPtr)malloc(sizeof(Car2)); if(!S.front||!S.rear)exit(-2); S.front->next=NULL; S.length=0; return 1;} Status EnQueue(Shortcut &S,int number,int ar_time){//車進(jìn)入便道 CarPtr p; p=(CarPtr)malloc(sizeof(Car2)); if(!p)exit(-2); p->number=number; p->ar_time=ar_time; p->next=NULL; S.rear->next=p; S.rear=p; ++S.length; return 1;} Status DeQueue(Shortcut &S,CarPtr &w){//車離開(kāi)便道 if(S.length == 0) printf(“通道為空”); else { w = S.front->next; S.front->next=S.front->next->next; --S.length; } return 1;} Status Arrival(Park &P,Shortcut &S){//對(duì)進(jìn)站車輛的處理 int number,ar_time; printf(“請(qǐng)輸入車牌號(hào):”); scanf(“%d”,&number); printf(“進(jìn)場(chǎng)的時(shí)刻:”); scanf(“%d”,&ar_time); if(P.stacksize { CarNode c; c.number=number; c.ar_time=ar_time; Push(P,c); printf(“請(qǐng)將車停在第%d號(hào)車道。n”,P.stacksize); } else { EnQueue(S,number,ar_time); printf(“停車場(chǎng)已滿,請(qǐng)暫時(shí)停在便道的第%d個(gè)位置。n”,S.length); } return 1;} Status Leave(Park &P,Park &P1,Shortcut &S){//對(duì)離站車輛的處理 int number,le_time,flag=1,money,ar_time; printf(“請(qǐng)輸入車牌號(hào):”); scanf(“%d”,&number); printf(“出場(chǎng)的時(shí)刻:”); scanf(“%d”,&le_time); CarNode e,m; CarPtr w; while(P.stacksize) { Pop(P,e); if(e.number==number) { flag=0; money=(le_time-e.ar_time)*2; ar_time=e.ar_time; break; } Push(P1,e); } while(P1.stacksize) { Pop(P1,e); Push(P,e); } // 車從停車場(chǎng)中出 if(flag == 0) { if(S.length!=0) { DeQueue(S,w); m.ar_time=le_time; m.number=w->number; Push(P,m); free(w); printf(“車牌號(hào)為%d的車已由便道進(jìn)入停車場(chǎng)n”,m.number); } printf(“停車費(fèi)為%d, 占用車位數(shù)為%dn”,money,P.stacksize); } else { printf(“停車場(chǎng)不存在牌號(hào)為%d的車n”, number); } return 1;} /*主函數(shù)*/ int main(){ int m=1; char flag;//選項(xiàng) Park P,Q; Shortcut S;InitStack(P);InitStack(Q);InitQueue(S); while(m) { printf(“n 停車場(chǎng)管理程序 n”); printf(“A 汽車進(jìn)車場(chǎng) D 汽車出車場(chǎng) E 退出程序n”); printf(“請(qǐng)選擇(A,D,E): ”); scanf(“%c”,&flag); switch(flag) { case 'A': case 'a': Arrival(P,S);break;//車進(jìn)入停車場(chǎng) case 'D': case 'd': Leave(P,Q,S);break;//車離開(kāi)停車場(chǎng) case 'E': case 'e': m=0; break; default: printf(“Input error!n”); break; } while(flag!= 'n') scanf(“%c”,&flag); } } 停車場(chǎng)管理系統(tǒng) ——數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)程序設(shè)計(jì)書(shū) 小組成員: 彭路 20131344031 崔琦 20131344028 徐佳 20131344027 范福龍 20121344024 班級(jí) : 13軟件工程1班 時(shí)間:2014.12.22 目錄 一、程序設(shè)計(jì)目標(biāo) 二、問(wèn)題描述 三、需求分析 四、概要設(shè)計(jì) 五、詳細(xì)設(shè)計(jì) 六、源程序清單 七、軟件說(shuō)明書(shū) 八、測(cè)試報(bào)告 九、課程設(shè)計(jì)總結(jié) 一、程序設(shè)計(jì)目標(biāo) 本管理程序由c/c++語(yǔ)言完成,實(shí)現(xiàn)了對(duì)停車場(chǎng)收費(fèi)問(wèn)題的處理。本程序保證了程序的健壯性和操作性,在閱讀過(guò)使用說(shuō)明書(shū)之后可以輕松使用。本管理系統(tǒng)假設(shè)車輛在停車場(chǎng)時(shí)一直有人在駕駛,或者說(shuō)停車場(chǎng)的每塊停車位均可智能移動(dòng)。并假設(shè)車輛進(jìn)出場(chǎng)耗時(shí)不計(jì),且時(shí)間均為整數(shù)類型。最后自動(dòng)或者人工完成收費(fèi)。 二、問(wèn)題描述 設(shè)停車場(chǎng)內(nèi)只有一個(gè)可停放n輛汽車的狹長(zhǎng)通道,且只有一個(gè)大門(mén)可供汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門(mén)在最南端,最先到達(dá)的第一輛車停放在車場(chǎng)的最北端),若車場(chǎng)內(nèi)已停滿n輛汽車,則后來(lái)的汽車只能在門(mén)外的便道上等候,一旦有車開(kāi)走,則排在便道上的第一輛車即可開(kāi)入;當(dāng)停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),在它之后開(kāi)入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開(kāi)出大門(mén)外,其它車輛再按原次序進(jìn)入車場(chǎng),每輛停放在車場(chǎng)的車在它離開(kāi)停車場(chǎng)時(shí)必須按它停留的時(shí)間長(zhǎng)短交納費(fèi)用。試為停車場(chǎng)編制按上述要求進(jìn)行管理的模擬程序。 三、需求分析 根據(jù)問(wèn)題描述,可把本停車場(chǎng)抽象成一個(gè)棧存儲(chǔ)類型s1,需要輸入最大停車容量n。每當(dāng)輸入’A’時(shí)即為有車輛申請(qǐng)進(jìn)入停車場(chǎng)操作,此時(shí)需要判斷停車場(chǎng)是否有空位,如果有空位,那么這輛車可以進(jìn)入停車場(chǎng),即為執(zhí)行一次壓棧操作(push),并記錄進(jìn)入停車場(chǎng)的時(shí)間t1,并輸出位置p1;如果停車場(chǎng)沒(méi)有空位,那么這輛車在門(mén)外便道等候,并輸出位置p2。根據(jù)問(wèn)題描述,可以把此門(mén)外便道抽象成一個(gè)隊(duì)列存儲(chǔ)類型q,而每有一輛車進(jìn)入門(mén)外便道,即相當(dāng)于進(jìn)行一次插入隊(duì)列操作(push)。每當(dāng)輸入’D’時(shí)即為有車輛申請(qǐng)離開(kāi)停車場(chǎng)操作,此時(shí)需要判斷該車輛在停車場(chǎng)的位置。如果該車位于停車場(chǎng)最外側(cè)即相當(dāng)于棧頂,那么該車可以直接批準(zhǔn)離開(kāi)并根據(jù)輸入的離開(kāi)時(shí)間t2計(jì)算出停車時(shí)間t2-t1,根據(jù)該車本次停車時(shí)間完成收費(fèi)后即可成功駛出停車場(chǎng),即相當(dāng)于成功彈出棧頂元素(pop);如果該車沒(méi)有位于停車場(chǎng)最外側(cè),事實(shí)上,這也是大多數(shù)的情況,那么需要將該車外側(cè)的車依次(即為擋路的車)移動(dòng)進(jìn)一個(gè)臨時(shí)停車場(chǎng),根據(jù)問(wèn)題描述,可以將該臨時(shí)停車場(chǎng)抽象成另一個(gè)棧存儲(chǔ)類型s2,那么此次移動(dòng)操作相當(dāng)于將棧中某元素以上的元素依次壓入另一個(gè)棧(push)。當(dāng)申請(qǐng)離開(kāi)的車駛出停車場(chǎng)后,在臨時(shí)停車場(chǎng)的車輛依次進(jìn)入停車場(chǎng),此操作相當(dāng)于將棧s2內(nèi)元素依次彈出棧(pop)并壓入棧s1(push)。此時(shí)判斷門(mén)外便道上有無(wú)等待進(jìn)入停車場(chǎng)的車輛,如果有的話,門(mén)外便道上第一輛車可以進(jìn)入停車場(chǎng),并記錄進(jìn)入時(shí)間t1,此次操作相當(dāng)于取出隊(duì)列q的隊(duì)首元素并將其壓入棧s1中。而輸入’E’時(shí),即退出系統(tǒng)。至此,所有分析結(jié)束。 四、概要設(shè)計(jì) 根據(jù)需求分析,解決此問(wèn)題需要構(gòu)建一個(gè)Cars類型的結(jié)構(gòu)體,構(gòu)建一個(gè)CarNode類型的節(jié)點(diǎn)結(jié)構(gòu)體以構(gòu)建SQueue類型的隊(duì)列結(jié)構(gòu)體,并需要構(gòu)建一個(gè)SQstack類型的棧結(jié)構(gòu)體。接下來(lái),分別定義隊(duì)列和棧的各項(xiàng)基本操作函數(shù)。最后,完成菜單函數(shù)以實(shí)現(xiàn)各項(xiàng)操作。 五、詳細(xì)設(shè)計(jì) 本程序定義了三個(gè)頭文件,manager_cars.h、manager_stack.h、manager_queue.h。分別實(shí)現(xiàn)了Cars類型的結(jié)構(gòu)體、SQueue類型的隊(duì)列結(jié)構(gòu)體、SQstack類型的棧結(jié)構(gòu)體以及隊(duì)列的相關(guān)操作函數(shù)和棧的相關(guān)操作函數(shù)。具體如下: 1、manager_cars.h sq->lastCar=car;sq->firstCar->nextCar=NULL;sq->length=0;} //進(jìn)入隊(duì)列操作 void enterSQueue(SQueue *sq,int num,int t){ CarNode *car=(CarNode *)malloc(sizeof(CarNode));car->headCar.condition='D';car->headCar.number=num;car->headCar.time=t;car->headCar.position=2; car->nextCar=NULL;sq->lastCar->nextCar=car;sq->lastCar=car;sq->length++;} //出隊(duì)列操作 void exceedSQueue(SQueue *sq){ if(sq->firstCar==sq->lastCar) return;CarNode *car=(CarNode *)malloc(sizeof(CarNode));car=sq->firstCar->nextCar;sq->firstCar->nextCar=car->nextCar;sq->length--;if(sq->lastCar==car) sq->lastCar=sq->firstCar;free(car); } //檢測(cè)隊(duì)列存在 int SQueueEmpty(SQueue sq){ if(sq.firstCar==sq.lastCar) return 1;else return 0;} //獲取隊(duì)首元素 void getSQueue(SQueue sq,Cars *e){ if(sq.firstCar==sq.lastCar) return;*e=sq.firstCar->nextCar->headCar;S.base;} extern int GetTop(SQstack S,Cars *e)//若棧不為空,則用e返回S的棧頂元素,并返回OK;否則返回ERROR { if(S.top == S.base)return 0; *e = *(S.top-1); return 1; } extern int Push(SQstack*S,Cars e)//插入元素e為新的棧頂元素 { if(S->top cout<<“請(qǐng)正確輸入Y或N:”< scanf(“%c”,&flag); getchar();} while(flag=='Y'){ flag='C'; Cars car; SQstack park;//定義棧并初始化 InitStack(&park); SQueue street;//定義隊(duì)列并初始化 setSQueue(&street); cout<<“請(qǐng)輸入本停車場(chǎng)最多可提供的車位數(shù):”; scanf(“%d”,&maxNum); getchar(); cout<<“請(qǐng)輸入每小時(shí)停車費(fèi):”; cin>>Pprice; cout< cout<<“請(qǐng)輸入到達(dá)(A)/離開(kāi)(D)信息,車牌號(hào),時(shí)間(格式為A 1 5):”; cin>>car.condition>>car.number>>car.time; //scanf(“%c %d %d”,&car.condition,&car.number,&car.time); //getchar(); while(car.condition!='E'&&car.number!=0&&car.time!=0) { switch(car.condition) { case 'A': { enterPark(car,park,street); break; } case 'D': { int lasttime; lasttime=outOfPark(car,park,street,car.number,car.time); cout< cout<<“此車在停車場(chǎng)停留了”< } default :cout<<“請(qǐng)輸入正確的格式!”< } cin>>car.condition>>car.number>>car.time; //scanf(“%c %d %d”,&car.condition,&car.number,&car.time); Cars headCar;struct CarNode *nextCar;}CarNode; typedef struct { CarNode *firstCar;CarNode *lastCar; int length;}SQueue;//建隊(duì)列鏈表 void setSQueue(SQueue *sq){ CarNode *car=(CarNode *)malloc(sizeof(CarNode));sq->firstCar=car;sq->lastCar=car;sq->firstCar->nextCar=NULL;sq->length=0;} //進(jìn)入隊(duì)列操作 void enterSQueue(SQueue *sq,int num,int t){ CarNode *car=(CarNode *)malloc(sizeof(CarNode));car->headCar.condition='D';car->headCar.number=num;car->headCar.time=t;car->headCar.position=2; car->nextCar=NULL;sq->lastCar->nextCar=car;sq->lastCar=car;sq->length++;} //出隊(duì)列操作 void exceedSQueue(SQueue *sq){ if(sq->firstCar==sq->lastCar) return;CarNode *car=(CarNode *)malloc(sizeof(CarNode));car=sq->firstCar->nextCar;sq->firstCar->nextCar=car->nextCar;sq->length--;if(sq->lastCar==car) sq->lastCar=sq->firstCar;free(car); } //檢測(cè)隊(duì)列存在 int SQueueEmpty(SQueue sq){ if(sq.firstCar==sq.lastCar) return 1;else return 0;} //隊(duì)首元素 void getSQueue(SQueue sq,Cars *e){ if(sq.firstCar==sq.lastCar) return;*e=sq.firstCar->nextCar->headCar;} //隊(duì)列長(zhǎng)度 int SQueueLength(SQueue sq){ int len=0;if(sq.firstCar!=sq.lastCar)len=sq.length;return len;} #endif manager_stack.h #include #ifndef manager_stack_h #define manager_stack_h #define STACK_INIT_SIZE 100 //棧的存儲(chǔ)空間初始分配量 #define STACKINCREMENT 10 //棧的存儲(chǔ)空間分配增量 typedef struct SQstack //棧的結(jié)構(gòu)體 { Cars * base;Cars * top;int stacksize;S.base;} extern int GetTop(SQstack S,Cars *e)//若棧不為空,則用e返回S的棧頂元素,并返回OK;否則返回ERROR { if(S.top == S.base)return 0; *e = *(S.top-1); return 1; } extern int Push(SQstack*S,Cars e)//插入元素e為新的棧頂元素 { if(S->top-S->base >= S->stacksize) { S->base =(Cars *)realloc(S->base,(S->stacksize + STACKINCREMENT)*sizeof(Cars)); if(!S->base)return 0; S->top = S->base + S->stacksize; S->stacksize += STACKINCREMENT; } *S->top++ = e; return 1; } extern int Pop(SQstack *S,Cars *e)//若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK,否則返回ERROR { if(S->top == S->base)return 0; *e = *--S->top; return 1; } #endif 七、軟件說(shuō)明書(shū) 1、打開(kāi)系統(tǒng),輸入Y進(jìn)入管理系統(tǒng)。 2、接下來(lái)按提示輸入停車場(chǎng)的可供使用的車位數(shù)。 3、按提示輸入該停車場(chǎng)每小時(shí)收費(fèi)標(biāo)準(zhǔn)。 4、按提示輸入到達(dá)后者離開(kāi)信息,例如A 1 5,D 1 10。 5、輸入E 0 0并輸入N,退出系統(tǒng)。 八、測(cè)試報(bào)告 1、如圖,當(dāng)打開(kāi)系統(tǒng)時(shí)出現(xiàn)此界面,輸入Y為進(jìn)入系統(tǒng),輸入N為退出系統(tǒng)。 2、如圖,如果輸入錯(cuò)誤會(huì)提示出錯(cuò),并重新輸入。 3、如圖,輸入Y后,按提示依次輸入停車場(chǎng)可提供的最大車位數(shù)和每小時(shí)的停車費(fèi)。 4、如圖,輸入A 1 5后,提示進(jìn)入停車場(chǎng)的信息。 5、如圖,輸入A 2 10,A 3 15后,依次顯示提示信息。 6、如圖,輸入D 1 20后,分別顯示便道進(jìn)入停車場(chǎng)的3號(hào)車和1號(hào)車的收費(fèi)情況。 7、如圖,輸入E 0 0,再按提示輸入N,即可退出系統(tǒng)。 九、課程設(shè)計(jì)總結(jié) 通過(guò)團(tuán)隊(duì)對(duì)該問(wèn)題分析,互相補(bǔ)充了觀點(diǎn),增強(qiáng)了對(duì)該題目正確認(rèn)識(shí)。隊(duì)員們進(jìn)行了縝密的需求分析,并分工完成各文件和函數(shù)的編寫(xiě)。隊(duì)員們紛紛表示,這絕對(duì)是一個(gè)以前不能想象到的任務(wù)。通過(guò)對(duì)該系統(tǒng)的編寫(xiě)、實(shí)現(xiàn),著實(shí)增強(qiáng)了隊(duì)員們的團(tuán)隊(duì)意識(shí)以及對(duì)數(shù)據(jù)結(jié)構(gòu)的進(jìn)一步的理解。當(dāng)程序成功運(yùn)行后,隊(duì)員們都非常興奮,雖然本系統(tǒng)仍有瑕疵,但是可以說(shuō)這是隊(duì)員們的心血。 0 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的實(shí)習(xí)報(bào)告怎么寫(xiě)呀,請(qǐng)求做過(guò)課設(shè)的同學(xué)發(fā)一篇范文過(guò)來(lái)謝謝-_-規(guī)范實(shí)習(xí)報(bào)告的開(kāi)頭應(yīng)給出題目、班級(jí)、姓名、學(xué)號(hào)和完成日期,并包括以下七個(gè)內(nèi)容: 1、需求分析以無(wú)歧義的陳述說(shuō)明程序設(shè)計(jì)的任務(wù),強(qiáng)調(diào)的是程序要做什么?明確規(guī)定:(1)輸入的形式和輸入值的范圍;(2)輸出的形式;(3)程序所能達(dá)到的功能;(4)測(cè)試數(shù)據(jù):包括正確地輸入及其輸出結(jié)果和含有錯(cuò)誤的輸入及其輸出結(jié)果,數(shù)據(jù)結(jié)構(gòu)實(shí)習(xí)報(bào)告。 2、概要設(shè)計(jì)說(shuō)明本程序中用到的所有抽象數(shù)據(jù)類型的定義、主程序的流程以及各程序模塊之間的層次(調(diào)用)關(guān)系。 3、詳細(xì)設(shè)計(jì)實(shí)現(xiàn)概要設(shè)計(jì)中定義的所有數(shù)據(jù)類型,對(duì)每個(gè)操作只需要寫(xiě)出偽碼算法;對(duì)主程序和其他模塊也都需要寫(xiě)出偽碼算法(偽碼算法達(dá)到的詳細(xì)程度建議為:按照偽碼算法可以在計(jì)算機(jī)鍵盤(pán)直接輸入高級(jí)程序設(shè)計(jì)語(yǔ)言程序);畫(huà)出函數(shù)的調(diào)用關(guān)系圖。 4、調(diào)試分析內(nèi)容包括:(1)調(diào)試過(guò)程中遇到的問(wèn)題是如何解決的以及對(duì)設(shè)計(jì)與實(shí)現(xiàn)的回顧討論和分析;(2)算法的時(shí)空分析(包括基本操作和其他算法的時(shí)間復(fù)雜度和空間復(fù)雜度的分析)和改進(jìn)思想;(3)經(jīng)驗(yàn)和體會(huì)等,實(shí)習(xí)報(bào)告《數(shù)據(jù)結(jié)構(gòu)實(shí)習(xí)報(bào)告》。 5、用戶使用說(shuō)明說(shuō)明如何使用你編寫(xiě)的程序,詳細(xì)列出每一步操作步驟。 6、測(cè)試結(jié)果列出你的測(cè)試結(jié)果,包括輸入和輸出。這里的測(cè)試數(shù)據(jù)應(yīng)該完整和嚴(yán)格,最好多于需求分析中所列。 7、附錄題目:約瑟夫-實(shí)習(xí)報(bào)告尺寸:約瑟夫-實(shí)習(xí)報(bào)告.doc目錄: 一、需求分析 二、概要設(shè)計(jì) 三、程序具體設(shè)計(jì)及函數(shù)調(diào)用關(guān)系 四、調(diào)試分析 五、測(cè)試結(jié)果原文:實(shí)習(xí)報(bào)告題目:約瑟夫(Joseph)問(wèn)題的一種描述是:編號(hào)為1,2,.,n的n個(gè)人按順時(shí)針?lè)较驀蝗?,每人持有一個(gè)密碼(正整數(shù))。一開(kāi)始任選一個(gè)整數(shù)作為報(bào)數(shù)上限值m,從第一個(gè)人開(kāi)始按順時(shí)針?lè)较蜃?開(kāi)始順序報(bào)數(shù),報(bào)到m時(shí)停止報(bào)數(shù)。報(bào)m的人出列,將他的密碼作為新的m值,從他在順時(shí)針?lè)较蛏系南乱粋€(gè)開(kāi)始重新從1報(bào)數(shù),如此下去,直至年有人全部出列為止。試設(shè)計(jì)一個(gè)程序求出出列順序。班級(jí):姓名:學(xué)號(hào):完成日期: 一、需求分析1.本演示程序中,利用單向循環(huán)鏈表存儲(chǔ)結(jié)構(gòu)存儲(chǔ)約瑟夫環(huán)數(shù)據(jù)(即n個(gè)人的編號(hào)和密碼)。2.演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“提示信息”之后,由用戶在鍵盤(pán)上輸入演示程序中需要輸入的數(shù)據(jù),運(yùn)算結(jié)果顯示在其后。3.程序執(zhí)行的命令包括:1)構(gòu)造單向循環(huán)鏈表;2)4.測(cè)試數(shù)據(jù)m的初值為20;n=7,7個(gè)人的密碼依次為:3,1,7,2,4,8,4,首先m值為6(正確的出列順序?yàn)?,1,4,7,2,1,3,5)。 二、概要設(shè)計(jì)1.單向循環(huán)鏈表的抽象數(shù)據(jù)類型定義為:ADT List{數(shù)據(jù)對(duì)象:D={ai|ai∈正整數(shù),I=1,2,.,n,n≥0}數(shù)據(jù)關(guān)系:R1={ai-1,ai|,ai-1,ai∈D,I=1,2,.,n}基本操作:Init List(&L)操作結(jié)果:構(gòu)造一個(gè)空的線性表L。List Insert(&L,i,e)初始條件:線性表L已存在,1≤i≤List Length(L)+1.操作結(jié)果:在L中第i個(gè)位置之前插入新的數(shù)據(jù)無(wú)素e,L長(zhǎng)度加1。List Delete(&L,i,&e)初始條件:線性表L存在非空,1≤i≤List Length(L).操作結(jié)果:刪除L的第i個(gè)元素,并用e返回其值,L長(zhǎng)度減1。2.程序包含四個(gè)模塊:1)主程序模塊:void main(){.第二篇:數(shù)據(jù)結(jié)構(gòu)-停車場(chǎng)管理-實(shí)習(xí)報(bào)告
第三篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-停車場(chǎng)管理
第四篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告_15_停車場(chǎng)管理
第五篇:數(shù)據(jù)結(jié)構(gòu)實(shí)習(xí)報(bào)告