资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C语言课程设计实习报告目 录一. 题目要求二. 需求分析三. 总体设计四. 具体程序五. 上机操作及使用说明六. 存在问题与不足七. 学 习 心 得停车场管理一. 题目要求1.设计一个停车场用长度为N的堆栈来模拟。由于停车场内如有某辆车要开走 ,在它之后进来的车都必须先退出为它让道,待其开出停车场后,这些车再依原来的顺序进入。2.程序输出每辆车到达后的停车位置,以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。二. 需求分析根据题目要求首先设计一个堆栈,以堆栈来模拟停车场,又每辆汽车的车牌号都不一样,这样一来可以根据车牌号准确找到汽车位置,所以堆栈里的数据元素设计成汽车的车牌号。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场。这是个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个堆栈,以之来暂时存放为出站汽车暂时让道的汽车车牌号。当停车场满后,继续进来的汽车需要停放在停车场旁边的便道上等候,若停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。另外,停车场根据汽车在停车场内停放的总时长来收费的,在便道上的时间不计费,因此必须记录车辆进入停车场时的时间,车辆离开停车场时的时间不需要记录,当从终端输入时可直接使用。由于时间不像汽车一样需要让道,可设计了一个顺序表来存放时间。又用顺序表用派生法设计了一个堆栈,恰好满足上面模拟停车场的需要。三. 总体设计车辆到达以堆栈来模拟停车场和以堆栈里的数据元素我设计成汽车的车牌号初始化车站, 初始化让路的临时栈, 初始化通道车场未满,车进车场车场已满,车进便道判断车场是否已满车输入车子到达时间,车牌号未满车进入车场判断车场内是否有车不做任何计算无点x有输入离开车辆的离开时间,进行停车费用的计算此车后面的车辆退出并进入临时栈车子离开四. 具体程序#include #include #define SIZE 3 #define NULL 0 typedef struct int hour; int min; time; typedef struct int num; int position; time t; float money; Car; typedef struct Car elemSIZE+1; int top; Stack; typedef struct Node Car data; struct Node *next; CQueueNode; typedef struct CQueueNode *front; CQueueNode *rear; LinkQueue; void InitStack(Stack *S) S-top=0; void Push(Stack *S,Car *r) S-top+; S-elemS-top.num=r-num; r-position=S-elemS-top.position=S-top; S-elemS-top.t.hour=r-t.hour; S-elemS-top.t.min=r-t.min; int IsEmpty(Stack* S) return(S-top=0?1:0); int IsFull(Stack *S) return(S-top=SIZE?1:0); int GetTop(Stack *S,Car *n) n-num=S-elemS-top.num; n-position=S-elemS-top.position; n-t.hour=S-elemS-top.t.hour; n-t.min=S-elemS-top.t.min; return 1; void InitQueue(LinkQueue *Q) Q-front=(CQueueNode*)malloc(sizeof(CQueueNode); if(Q-front!=NULL) Q-rear=Q-front; Q-front-next=NULL; int EnterQueue(LinkQueue *Q,Car *t) CQueueNode *NewNode; NewNode=(CQueueNode*)malloc(sizeof(CQueueNode); if(NewNode!=NULL) NewNode-data.num=t-num; NewNode-data.t.hour=t-t.hour; NewNode-data.t.min=t-t.min; NewNode-next=NULL; Q-rear-next=NewNode; Q-rear=NewNode; return 1; else return 0; int DeleteQueue(LinkQueue *Q,Car *x) CQueueNode *p; if(Q-front=Q-rear) return 0; p=Q-front-next; Q-front-next=p-next; if(Q-rear=p) Q-rear=Q-front; x-num=p-data.num; x-t.hour=p-data.t.hour; x-t.min=p-data.t.min; free(p); return 1; void print1(Stack *S) int tag; Car x; printf(停车场停车情况:n); if(IsEmpty(S) printf(无车!); for(tag=S-top;S-top0;S-top-) if(GetTop(S,&x) printf(车牌号 %d,所在位置 %d,到达/离开时间 %d:%dn,x.num,x.position,x.t.hour,x.t.min); S-top=tag; void print2(LinkQueue *Q) CQueueNode *p; p=Q-front-next; for(;p!=NULL;p=p-next) printf(等待车牌号 %d, 到达/离开时间 %d:%d,p-data.num,p-data.t.hour,p-data.t.min); void TaM(Car *r,int h,int m) if(mr-t.min) r-t.min+=60;r-t.hour-=1; h=r-t.hour-h; m=r-t.min-m; printf(n停车 %d小时 %d 分钟n,h,m); printf(每小时收费30元n); h=h*60;m=h+m; r-money=0.5*m; printf(请支付金额%.2f元n,r-money); void In(Stack *S,LinkQueue *Q,Car*r) if(IsFull(S) printf(车库已满,请等待!); EnterQueue(Q,r); else Push(S,r); printf(n您现在所在位置 %d,r-position); void Out(Stack *S,Stack *S0,Car *r,LinkQueue *Q) int tag=S-top; Car x; if(IsEmpty(S) printf(没有此车!); else for(;r-num!=S-elemtag.num&tag0;tag-) Push(S0,&S-elemtag); S-top-; if(r-num=S-elemtag.num) TaM(r,S-elemtag.t.hour,S-elemtag.t.min); S-top-; for(;S0-top0;S0-top-) Push(S,&S0-elemS0-top); if(S-topfront!=Q-rear) DeleteQueue(Q,&x); Push(S,&x); else if(tag=0) printf(未进入停车场应支付金额 0元!); for(;S0-top0;S0-top-) Push(S,&S0-elemS0-top); void print() printf(n*欢迎光临*n); printf(n 请选择:n); printf(n 1 :到达); printf(n 2 :离开); printf(n 3 :搜索); printf(n 4 :退出n); printf(n); int main() int n,m,i=1,j,flag=0; Car c10; Car x; Stack S,S0; LinkQueue Q; InitStack(&S); InitStack(&S0); InitQueue(&Q); while(1) print(); scanf(%d,&m); switch(m) case 1:printf(n请输入车牌号:); scanf(%d,&ci.num); printf(n请输入
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号