数据结构用c语言实现停车场管理系统报告书
课程设计任务书 学生姓名: 专业班级:软件2101(计算2101)
指导教师:黄启荃 钱小红 工作单位: 华夏学院计算机教研室 设计题目:用C语言实现停车场管理程序的设计 初始条件: 1、栈与队列的建立和操作. 2、带TC或VC的计算机系统。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 主要任务:(在规定的时间内完成下列任务) 设有一个停放n辆车的狭长停车场,它只有一个大门供车辆出入。车辆按到达停车场时间的早晚依次从停车场最里面向大门处停放。若已放满n辆车,则后来的车只能停在外面等待,当有车开走后方依次进入,停在场内的车按时计费 。编制一个程序模拟该停车场管理。 1.汽车的模拟输入信息格式可设为:汽车牌照号码,到达/离去时刻 如(‘a’,1,5)为1号车在5时刻到达,(‘b’,5,20)为5号车在20这个时刻离去 2. 要求程序输出每辆车到达后的停车位置,以及离开停车场时应缴纳的费用及停留时间。 3.编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果,并对采用的算法进行分析。 设计报告撰写格式要求:(课程设计报告按统一通用格式书写)具体内容如下:
① 设计任务与要求 ② 总体方案与说明 ③ 程序主要模块的流程图 ④ 源程序清单与注释 ⑤ 问题分析与解决方案(包括调试记录、调试报告,即在调试过程中遇到的主要问题、解决方法及改进设想); ⑥ 小结与体会 附录:① 源程序(必须有简单注释) ② 使用说明 ③ 参考资料
时间安排:6月20日---24日
第一天 布置题目,确定任务、查找相关资料 第二天~第四天 功能分析,编写程序,调试程序、运行系统;
第五天 程序验收、答辩;撰写设计报告。
指 导 教 师 签 字: 2011年6月20日 系 主 任 签 字: 年 月 日 设计题目:用C语言实现停车场管理程序的设计 1、 问题描述即要求 停车场是一个可停放n辆汽车的狭长通道,并只有一个大门可供汽车进出,汽车在停车场内按车辆到达的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),如车长内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用,以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理.每一组输入数据包括三个数据项:汽车”到达”或”离去”信息,汽车牌照号码以及到达或离去的时刻(到达或离去的时刻也可用计算机控制).对每一组输入数据进行操作后的输入信息为:如是车辆到达,则输入汽车在停车场内或便道上的停留位置;如是车辆离去,则输入汽车在停车场内停留的时间和应交的费用。
2、需求分析 每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。
3、概要设计 1、系统分为:初始化、有车进入、有车离开、退出四个模块。 2、停车场管理程序
4 详细设计 菜单函数设计: 分为初始化、有车进入、有车离开、退出。 void menu() {
选择 n==1||2||3||4 有车进入 结束 有车离开 退出 初始化 int n,w; do { puts("****MENU***"); puts("1.初始化"); puts("2.有车进入"); puts("3.有车离开"); puts("4.退出"); printf("请选择你需要的服务(1-4):"); scanf("%d",&n); if(n<1||n>4) { w=1; getchar(); } else w=0; }while(w==1); switch(n) { case 1:chushi();break;/*停车函数*/ case 2:jinru();break;/*开车函数*/ case 3:likai();break;/*退出*/ case 4:exit(0);break;/*初始化*/ } }
初始化模块设计:将车道和停车场内所有的车清空。 void chushi()/*初始化*/ { int i,j; for(i=0;ichn[i].neikong=0;/*停车场设置为空*/ for(j=0;jchw[i].waikong=0; printf("已初始化"); menu(); }
进入函数设计:车辆到达需要给车编号及给出车停的位置和停车时间等。 void jinru()/*车辆进入函数*/ { int i,a; int h=0; printf("请输入该车系序号(从0开始):"); scanf("%d",&a); for(i=0;i { if(chn[i].neikong==0)/*无车标记*/ if(chn[i].neikong==1)/*有车标记*/ h=h+1; } if(h==N) printf("停车场内已满!"); else { car[a].carstay=h; chn[h].neikong=1; printf("该车应该停在停车场内"); printf("请输入该车进停车场时间:"); scanf("d%",&car[a].cararr); } menu(); } 离开函数设计:车辆离开时间,应缴费用,判断便道上是否有车,有则将车停入停车场。 void likai()/*车辆离开函数*/ { int i,k,choi,time; double fee; printf("请输入离开车辆次序号[]",&i); scanf("%d",&i); printf("请输入离开时间:"); scanf("%d",&car[i].carlef); fee=D*(car[i].carlef-car[i].cararr); time=car[i].carlef-car[i].cararr; printf("次序号为%d的车停时间%d小时,应收费%f元",i,time,fee); printf("便道上现在有车么?(请选择1或2)1.有。2.没有"); scanf("%d",&choi); if(choi==2) { menu(); } if(choi==1) { printf("请让便道上的第一辆车进场"); printf("该车次序号为:"); scanf("%d",&car[k].cararr); menu(); } } 退出函数。
5 调试分析 i. 静态调试:按求解算法和C语言的语法规则进行检查; 语法上出现一些很小的问题,但也是程序无法运行。 ii. 动态调试:将设计题给出的路径进行运行; 程序无法运行,无法给出结果,修改好后于理想结果产生偏差。 6 测试结果 主菜单
初始化 进入
离开 退出 7 用户手册 (1) 本程序在TC环境下形成xxx.exe的执行文件。 (2) 在windows系统界面上运行xxx.exe 即可显示运行界面,按提示命令输入需要的服务进行选择。 8 改进方案 本程序无法显示停车场所有车辆的信息,需要在有车进入函数和离开函数中添加变量,最后对变量进行输出,即为停车场所有车辆的信息。
9 设计体会 学会了如何使用c程序来编写一个小的程序,看起来似乎很简单,动起手来真的不是很容易!以后再学习中要更加努力的学习。学习什么都要全身心的投入进去。就没有什么做不到。数据结构其实不是很难,只要理解了,所有的都很简单。编写程序方面要多动手才会知道怎么做! 参考资料:《数据结构、算法与应用》、《数据结构辅导(第二版)》 附录 1. 源程序文件名清单 C语言 2. 源程序清单 #include #include #include #define N 100/*预设停车场有100个车位*/ #define M 100/*预设便道有100各出位*/ #define D 1.2/*预设车辆停车费为1.2元每小时*/ #define NUMBER 100 void menu(); void chushi(); void jinru(); void likai(); struct car { int carnum; int cararr; int carlef; int carstay; }car[NUMBER]; struct park { int neikong; }chn[N-1]; struct changwai { int waikong; }chw[M-1]; void main() {
数据结构 停车场管理 C++实现
实验报告一、实验目的1.掌握栈的数据类型描述及栈的特点。
2.掌握栈的顺序和链式两种存储结构的特点及算法描述。
3.掌握五种基本运算及算法在两种不同存储结构上的实现。
4.掌握队列的数据类型描述及链式存储结构的特点和算法描述。
5.掌握队列的五种基本运算及在链式存储结构上的实现。
二、实验内容停车场管理。
设有一个可以停放n辆汽车的狭长停车场(先进后出),它直有一个大门可以供车辆进出。
车辆按到停车场的时间先后依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已经放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车离开,则排在便道上的第一辆车就可以进入停车场。
停车场若有其它车辆要离开,在它之后进入停车场的车必须先退出停车场为它让路,待其车开出停车场后,这些车在按原来的次序进停车场。
每辆车在离开停车场时,都应该根据它在停车场内停留的时间长短交费。
如果停留在便道上的车没进停车场就要离开,允许其离开,不收停车费,并且仍然保持在便道上的车辆次序。
试编程模拟停车场管理。
三、实验与算法分析可以将停车场定义为一个顺序栈s1,便道定义为一个链队列q,而停车场中的某个车辆要离开,则在它后面进入停车场的车必须让道,让其离开,故还必须有一个临时的顺序栈s2,存放让道的车辆。
当有车辆进停车场时,直接进入s1栈,若s1栈满,则进入便道(链队列q)。
若有s1中车辆x离开时,先让在x后面进栈的车从s1退栈,并进栈到s2中,让x离开并收取停车费,然后,再把s2中的所有元素退栈并重新进栈s1,最后,将链队列q的队头元素进栈到s1中,并删除队头元素。
若有链队列q(便道)中的元素y离开时,从链队列中删除该元素即可,不收停车费。
车辆的数据可以表示为(车辆编号,到达/离开时间)。
根据问题要求,在停车场内选择栈结构,来管理车辆,这样可以满足题目要求,让车辆先进后出。
停车位满后,停在便道上的车辆用队列这种结构,可以先来先进停车场。
数据结构c语言版课程设计停车场管理系统样本
课程设计:停车场c语言版本的数据结构课程设计,要求用栈模拟停车场,用队列模拟便道,实现停车场的收费管理系统停车场停满车后车会停在便道上面下面附上源码,vc:(下编译#include <stdio.h>//#include <stdlib.h> //malloc#include <time.h> //获取系统时间所用函数#include <conio.h> //getch()#include <windows.h> //设置光标信息 mallco#define MaxSize 5 /*定义停车场栈长度*/#define PRICE 0.05 /*每车每分钟收费值*/#define BASEPRICE 0.5 //基础停车费#define Esc 27 //退出系统#define Exit 3 //结束对话#define Stop 1 //停车#define Drive 2 //取车int jx=0,jy=32; //全局变量日志打印位置typedef struct{int hour;int minute;}Time,*PTime; /*时间结点*/typedef struct /*定义栈元素的类型即车辆信息结点*/{int num ; /*车牌号*/Time arrtime; /*到达时刻或离区时刻*/}CarNode;typedef struct /*定义栈,模拟停车场*/{CarNode stack[MaxSize];int top;}SqStackCar;typedef struct node /*定义队列结点的类型*/{int num; /*车牌号*/struct node *next;}QueueNode;typedef struct /*定义队列,模拟便道*/{QueueNode *front,*rear;}LinkQueueCar;/*函数声明*/PTime get_time();CarNode getcarInfo();void qingping(int a);void gotoxy(int x,int y);void printlog(Time t,int n,int io,char ab,int po,double f); void printstop(int a,int num,int x0,int y0);void printleave(int a,int po,int num);/*初始化栈*/void InitSeqStack(SqStackCar *s){s->top=-1;}/* push入站函数 */int push(SqStackCar *s,CarNode x) //数据元素x入指针s所指的栈{if(s->top==MaxSize-1)return(0); //如果栈满,返回0 else{s->stack[++s->top]=x; //栈不满,到达车辆入栈return(1);}}/*栈顶元素出栈*/CarNode pop(SqStackCar *s){CarNode x;if(s->top<0){x.num=0;x.arrtime.hour=0;x.arrtime.minute=0;return(x); //如果栈空,返回空值}else{s->top--;return(s->stack[s->top+1]); //栈不空,返回栈顶元素}}/*初始化队列*/void InitLinkQueue(LinkQueueCar *q){q->front=(QueueNode*)malloc(sizeof(QueueNode)); //产生一个新结点,作头结点if(q->front!=NULL){q->rear=q->front;q->front->next=NULL;q->front->num=0; //头结点的num 保存队列中数据元素的个数}}/*数据入队列*/void EnLinkQueue(LinkQueueCar *q,int x){QueueNode *p;p=(QueueNode*)malloc(sizeof(QueueNode)); //产生一个新结点p->num=x;p->next=NULL;q->rear->next=p; //新结点入队列q->rear=p;q->front->num++; //队列元素个数加1}/*数据出队列*/int DeLinkQueue(LinkQueueCar *q){QueueNode *p;int n;if(q->front==q->rear) //队空返回0return(0);else{p=q->front->next;q->front->next=p->next;if(p->next==NULL)q->rear=q->front;n=p->num;free(p);q->front->num--;return(n); //返回出队的数据信息}}/********************* 车辆到达***************************///参数: 停车栈停车队列车辆信息//返回值: 空//功能: 对传入的车辆进行入栈栈满则入队列void Arrive(SqStackCar *stop,LinkQueueCar *lq,CarNode x){int f;f=push(stop,x); //入栈if (f==0) //栈满{EnLinkQueue(lq,x.num); //入队printstop(1,lq->front->num,0,23);printlog(x.arrtime,x.num,1,'B',lq->front->num,0);qingping(0); printf("您的车停在便道%d号车位上\n",lq->front->num); //更新对话}else{printstop(0,stop->top+1,0,23);printlog(x.arrtime,x.num,1,'P',stop->top+1,0);qingping(0); printf("您的车停在停车场%d号车位上\n",stop->top+1); //更新对话}qingping(1); printf("按任意键继续");getch();}/************************** 车辆离开*************************************///参数: 停车栈指针s1, 暂存栈指针s2, 停车队列指针p, 车辆信息x//返回值: 空//功能: 查找栈中s1的x并出栈, 栈中没有则查找队p中并出队, 打印离开收费信息void Leave(SqStackCar *s1,SqStackCar *s2,LinkQueueCar *p,CarNode x){double fee=0;int position=s1->top+1; //车辆所在车位int n,f=0;CarNode y;QueueNode *q;while((s1->top > -1)&&(f!=1)) //当栈不空且未找到x{y=pop(s1);if(y.num!=x.num){n=push(s2,y);position--;}elsef=1;}if(y.num==x.num) //找到x{gotoxy(33,17);printf("%d:%-2d",(x.arrtime.hour-y.arrtime.hour),(x.arrtime.minute-y.arrtime.minute) );fee=((x.arrtime.hour-y.arrtime.hour)*60+(x.arrtime.minute-y.arrtime.minute))*PRICE+BASEPRICE;gotoxy(48,17); printf("%2.1f元\n",fee);qingping(0); printf("确认您的车辆信息");qingping(1); printf("按任意键继续");getch();while(s2->top>-1){ y=pop(s2);f=push(s1,y);}n=DeLinkQueue(p);if(n!=0){y.num=n;y.arrtime=x.arrtime;f=push(s1,y);printleave(p->front->num+1,position,s1->top+1); //出栈动画ji队列成员入栈printlog(x.arrtime,x.num,0,'P',position,fee);printlog(y.arrtime,y.num,1,'P',s1->top+1,0);}else{printleave(0,position,s1->top+2);printlog(x.arrtime,x.num,0,'P',position,fee);}}else //若栈中无x{while(s2->top > -1) //还原栈{y=pop(s2);f=push(s1,y);}q=p->front;f=0;position=1;while(f==0&&q->next!=NULL) //当队不空且未找到xif(q->next->num!=x.num){q=q->next;position++;}else //找到x{q->next=q->next->next;p->front->num--;if(q->next==NULL)p->rear=p->front;gotoxy(33,17); printf("0:0");gotoxy(48,17); printf("0元");qingping(0); printf("您的车将离便道");qingping(1); printf("按任意键继续");getch();printleave(-1,position,p->front->num+1); //出队动画printlog(x.arrtime,x.num,0,'B',position,0);f=1;}if(f==0) //未找到x{qingping(0); printf("停车场和便道上均无您的车");qingping(1); printf("按任意键继续");getch();}}}/*获取系统时间*///返回PTime类型PTime get_time(){Time *t;t=new Time;time_t timer;struct tm *tblock;timer=time(NULL);tblock=localtime(&timer);t->minute=tblock->tm_min;t->hour=tblock->tm_hour;return t;}/*移动光标*///蒋光标移动到( x, y) 点void gotoxy(int x,int y){COORD coord;coord.X=x;coord.Y=y+3;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE) ,coord);}/*画图*///画出系统界面void panitPL(){gotoxy(20,4);printf("****************对话框****************");int x=18,y=6; //起始点int a[2][4]={2,0,0,1,-2,0,0,-1}; //方向for(int i=0;i<2 ;i++){for(int j=0; j<20; j++){x+=a[i][0]; y+=a[i][1];gotoxy(x,y);printf("═");}x+=a[i][0]; y+=a[i][1];gotoxy(x,y);if(i==0)printf("╗");elseprintf("╚");for(j=0; j<12; j++){x+=a[i][2]; y+=a[i][3];gotoxy(x,y);printf("║");}x+=a[i][2]; y+=a[i][3];gotoxy(x,y);if(i==0)printf("╝");elseprintf("╔");}gotoxy(22,8);printf("小王: ");gotoxy(22,11);printf("顾客: ");gotoxy(22,14); printf("*********** 停车信息***********");gotoxy(23,15); printf("车牌号: ");gotoxy(42,15); printf("时间: ");gotoxy(23,17); printf("停车时长: ");gotoxy(42,17); printf("收费: ");}/*清屏函数*///更新对话框前将原对话晴空void qingping(int a){if(a==0) //清空小王的对话{gotoxy(28,8); printf(" ");gotoxy(28,9); printf(" ");gotoxy(28,8);}else if(a==1) //清空顾客的对话{gotoxy(28,11); printf(" ");gotoxy(28,12); printf(" ");gotoxy(28,13); printf(" ");gotoxy(28,11);}else //清空车辆信息{gotoxy(31,15); printf(" ");gotoxy(48,15); printf(" ");gotoxy(33,17); printf(" ");gotoxy(48,17); printf(" ");gotoxy(31,15);}}//用上下键移动选择int getkey(){char c;int x=28,y=11;while(1){gotoxy(x,11); printf(" ");gotoxy(x,12); printf(" ");gotoxy(x,13); printf(" ");gotoxy(x,y); printf(">>");c=getch();if(c==13) return y-10; //enter键返回当前选项if(c!=-32)continue; //不是方向键进行下次循环c=getch();if(c==72) if(y>11) y--; //上if(c==80) if(y<13) y++; //下}}//输入车辆信息CarNode getcarInfo(){PTime T;CarNode x;qingping(0); printf("请输入您的车牌号\n");qingping(1); printf("在下面输入车辆信息");qingping(2);scanf("%d",&(x.num));T=get_time();x.arrtime=*T;gotoxy(48,15);printf("%d:%d",x.arrtime.hour,x.arrtime.minute);getch();return x;}//打印停车场void printcar(){gotoxy(0,20); //╔ ╗╝╚═║pr intf("═══════════════════════════════════════╗");printf(" 出场暂放区║ 12 3 4 5 ║");printf("---------------------------------------------------------------------- ║");printf(" 主车道║");printf("---------------------------------------------------------------------- ║");printf(" 12 11 10 9 8 7 6 54 3 2 1 ║");printf("═══════════════════════════════════╗ ║");printf(" ↑ ╔══════════════╝ ║");printf(" 便道停车区→ ║ 12 3 4 5 ║");printf("╚══════════════════╝");printf(" 停车场管理日志\n\n");printf(" 时间车牌号进(1)/出(0) 车位(B便道P停车场) 收费(元) ");}//打印日志记录void printlog(Time t,int n,int io,char ab,int po,double f){jy++;gotoxy(jx,jy);// printf(" 时间车牌号进(1)/出(0) 车位(B便道P停车场) 收费(元) ");if(io==0)printf(" / %2.1f",f);gotoxy(jx,jy);printf(" / %d/ %c:%d",io,ab,po);gotoxy(jx,jy);printf(" %d:%d / %d",t.hour,t.minute,n);}void printstop(int a,int num,int x0,int y0){static char *car="【█】";// int x0=0,y0=23;int x=0,y=28;if(a==0){x=(num+6)*6;for(;x0<72;x0++){gotoxy(x0,y0); printf("%s",car); Sleep(30);gotoxy(x0,y0); printf(" ");}for(;y0<y;y0++){gotoxy(x0,y0); printf("%s",car); Sleep(100);gotoxy(x0,y0); printf(" ");}for(;x0>x;x0--){gotoxy(x0,y0); printf("%s",car); Sleep(50);gotoxy(x0,y0); printf(" ");}gotoxy(x,y);printf("%s",car);}else{x=(12-num)*6;y=y-3;for(;x0<x;x0++){gotoxy(x0,y0); printf("%s",car); Sleep(30);gotoxy(x0,y0); printf(" ");}gotoxy(x,y);printf("%s",car);}}void printleave(int a,int po,int num){static char *car="【█】";int x0=0,y0=23;int x=0,y=28;int i;if(a==-1){x=(12-po)*6;y=y-3;gotoxy(x,y); printf(" ");gotoxy(x,y-2); printf("%s",car);Sleep(100);if(12>num){gotoxy((12-num)*6,y);printf(" ");}gotoxy(x,y); printf("%s",car);for(;x>x0;x--){gotoxy(x,y-2); printf("%s",car); Sleep(30);gotoxy(x,y-2); printf(" ");}}else{i=num+1;for(;num>po;num--){x=(num+6)*6; y=28;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y>21;y--){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>(i-num+6)*6;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}gotoxy(x,y); printf("%s",car);}x=(po+6)*6; y=28;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y>23;y--){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>0;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}num++;for(;i-num>0;num++){x=(i-num+6)*6; y=21;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y<28;y++){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>(num-1+6)*6;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}gotoxy(x,y); printf("%s",car);}if(a>0){x=66;y=25;gotoxy(x,y); printf(" ");gotoxy(x,y-2); printf("%s",car); Sleep(100);if(12>a){gotoxy((12-a)*6,y);printf(" ");}if(a>1){gotoxy(x,y); printf("%s",car);}printstop(0,i-1,x,y-2);}}}/************************************************************ main ********************************************************/int main(void){SqStackCar s1,s2; //停车栈和暂存栈LinkQueueCar p; //队列InitSeqStack(&s1);InitSeqStack(&s2);InitLinkQueue(&p);printf(" 停车场管理系统\n\n");printf("************************* 欢(=^_^=)迎***************************\n");printf(" 收费标准: 基础费0.5元, 每分钟收取0.05元,收费精确到0.1元\n");printf(" PS:车牌号由阿拉伯数字组成");panitPL();printcar(); gotoxy(0,-3);char c=0; //接受按键while(1) //按ESC退出系统{for(int i=2;i>-1 ;i--) //初始化对话框qingping(i);printf("按ESC退出系统,其它键开始对话");c=getch();if(c==Esc){qingping(0);break;}while(1){qingping(2);gotoxy(28,8); printf("欢迎来到停车场! 我是管理员小王。
数据结构课程设计报告书 停车场管理系统
#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 100/*预设停车场有100个车位*/#define D 1.2/*预设车辆停车费为1.2元每小时*/ #define NUMBER 100void menu();void start();void parkingplace();void drive();struc car{int carnumber;int cararrave;int carleave;int carplace;}car[NUMBER];struct park;{int null;}parkingplace[N-1];void main (){menu();/*菜单*/}void menu(){int n;do{puts("****MENU***");puts("1、停车");puts("2、开车");puts("3、退出");puts("4、初始化");printf("请选择你需要的服务(1-4):");scanf("%d",&n);}switch(n){case 1:parking;break;/*停车函数*/case 2:drive;brea ;/*开车函数*/case 3:exit;break;/*退出*/case 4:start;break;/*初始化*/}}void start()/*初始化*/{int i,j;for(i=0;j<N;i++)parking[i].null=0;/*停车场设置为空*/printf("已初始化");menu();}void parkingplace()/*车辆进入函数*/{int i,a,h=0;printf(“请输入该车系序号(从0开始):”);scanf(“%d”,&a);for(i=0;i<N;i++){if(parking[i].park==0)/*无车标记*/if(parking[i].park==1)/*有车标记*/h=h+1;}if(h==N)printf(“停车场内已满!”);else{car[a].carplace=h;parkingplace[h].null=1;printf(“该车应该停在停车场内”);printf(“请输入该车进停车场时间:”);scanf(“d%”,&car[a].cararrave);}void drive()/*车辆离开函数*/{int i,k,time;double(“请输入车辆次序号【】”);scanf(“%d”,&i);printf(“请输入离开时间:”);scanf(“%d”,&car[i]carleave);fee=D*(car[i].carleave-car[i].cardrrave);time=car[i].carleave-car[i].cardrrave;printf(“次序号为%d的车停时间%d小时,应收费%f元”,i,time,fee); }。
大学设计方案方案——利用所学C语言知识方案报告停车场管理系统
2008.12.25班级:55071——28学号:20071003753指导教师:刘文中姓名:谢永诚停车场管理一一.要求:1.设计一个停车场用长度为N的堆栈来模拟。
由于停车场内如有某辆车要开走,在它之后进来的车都必须先退出为它让道,待其开出停车场后,这些车再依原来的顺序进入。
2.程序输出每辆车到达后的停车位置,以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。
二、程序中所采用的数据结构及存储结构的说明以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
栈以顺序结构实现,队列以链表实现。
程序中分别采用了“栈”和“队列”作为其存储结构。
“栈”的定义可知,每一次入栈的元素都在原栈顶元素之上成为新的元素,每一次出栈的元素总是当前栈顶元素使次栈元素成为新的栈顶元素,即最后进栈者先出栈。
程序中采用的结构是:typedef struct NODE{CarNode *stack[MAX+1]。
int top。
}SeqStackCar。
/*模拟车库*/“队列”是限定所有插入操作只能在表的一端进行,而所有的删除操作都只能在表的另一端进行。
插入端叫队尾,梦芭莎优惠券删除端叫对头。
按先进先出规则进行。
程序中采用的结构是:typedef struct Node{QueueNode *head。
QueueNode *rear。
}LinkQueueCar。
/*模拟通道*/三、算法的设计思想由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求汽车停车场内按车辆到达时间的先后顺序,依次由北向南排列。
由此很容易联想到数据结构中的堆栈模型,因此可首先设计一个堆栈,以堆栈来模拟停车场,又每个汽车的车牌号都不一样,这样一来可以根据车牌号准确找到汽车位置,所以堆栈里的数据元素我设计成汽车的车牌号。
当停车场内某辆车要离开时,在他之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场。
C语言程序设计实习报告-停车场管理系统
C语言课程设计实习报告姓名:成帅安学号:20141002605院(系):工程学院专业:土木工程2016年6 月2016.6 中国地质大学C语言课程设计 1 第一章停车场管理系统§1.1题目描述1、有一个两层的停车场,每层有6个车位,当第一层车停满后才允许使用第二层,(停车场可用一个二维数组实现,每个数组元素存放一个车牌号)每辆车的信息包括车牌号,层号,车位号,停车时间共4项,其中停车时间按分钟计算。
2、假设停车场初始状态为第一层已经停有4辆车,其车位号依次为1-4,停车时间依次为20,15,10,5。
即先将这四辆车的信息存入文件“car.dat"中(数组的对应元素也要进行赋值)。
3、停车操作:当一辆车进入停车场时,先输入其车牌号,再为它分配一个层号和一个车位号(分配前先查询车位的使用情况,如果第一层有空则必须停在第一层),停车时间设为5,最后将新停入的汽车的信息添加文件"car.dat"中,并将在此之前的所有车的停车时间加5。
4、收费管理(取车):当有车离开时,输入其车牌号,先按其停车时间计算费用,每5分钟0.2元。
(停车费用可设置一个变量进行保存),同时从文件"car.dat"中删除该车的信息,并将该车对应的车位设置为可使用状态(即二维数组对应元素清零)。
按用户的选择来判断是否要输出停车收费的总计。
5、输出停车场中全部车辆的信息。
6、退出系统。
§1.2算法设计1、需求分析:车辆信息用文件储存,提供文件的输入输出操作;当车离开时要删除文件中该车的信息,因而要提供文件的删除操作;用键盘式菜单实现功能选择。
2、总体设计思路:整个管理系统设计可设计为停车模块、取车模块、车辆浏览信息模块。
另外车辆停放信息涉及到从car.dat中读取,保存和修改,为了方便起见和程序的模块化,我将文件的读入和保存单独设计为两个子程序。
整体模块图如下:23、各子程序设计如下:(1)使用全局变量数组,用一个二维数组实现停车场车位的信息,int cars[12][4];2016.6 中国地质大学C语言课程设计 3 (2)通过读取car.dat的数据,对程序初始化。
数据结构课程方案设计书(c 版)--停车场管理系统
~《数据结构》一.课程设计题目某停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆汽车停放在最北端),若停车场内已经停满n 辆车,则后来的汽车只能在门外的便道即候车场上等候,一旦有车开走,则排在便道上的第一辆车即可开入。
当停车场内某辆车要离开时。
在它之后进入的车辆必须先退出车场为它让路,该车辆开出大门外,其它车辆再按原次序进入停车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为该停车场编制按上述要求进行管理的模拟程序。
二.流程及图示停车场(栈1)栈2三、程序运行及截图1.开始界面首先是登陆界面,只要用户名跟密码一样就可以登陆,输入正确后,有一个延迟程序,让使用者感觉更真实如果输入错误了,就是直接退出了2.主界面登录成功后,则是如下的功能界面:3 . 停车场管理系统你可以选择停车,离开,或者查看,当操作完了,可以直接选择退出。
当你输入1 后,会提示你输入停车的车号:在这里输入你想要停车的车号,然后会提示你停车的时间:输入停车时间后,则会显示你刚停车的详细的信息:4.离开输入 2,则会提示你要离开的车号:然后输入离开的车号后,会提示你输入该车离开的时间,输入离开的时间,则会出现如下界面:5 停车场管理系统系统则会把你刚离开的车俩的详细信息给你打印出来:拉开的车号,所用时间以及应收的费用。
这个时间管理员,可以对照表收费了。
6.查看当你要查看停车场所停车的信息时,你可以选择 3。
同样,选择 3 确定后会提示你要查看的车号,然后则会把信息打印在界面上:系统会告诉你这俩停在停车场里面的那个位置上。
7.退出当你一切操作完了后,就可以选择退出了,输入 4 停车场管理系统随便按个键就退出该系统了。
四、程序代码#include<iostream>#include<conio.h>#include<iomanip>#include<fstream>#include<string>#include <stdlib.h>#include <windows.h>using namespace std。
C语言实现停车管理系统
C语⾔实现停车管理系统本题为⼤家分享了C语⾔实现停车管理系统的具体代码,供⼤家参考,具体内容如下设计题⽬设停车场是⼀个可以停放n辆汽车的南北⽅向的狭长通道,且只有⼀个⼤门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(⼤门在最南端,最先到达的第⼀辆车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,⼀旦有车开⾛,则排在便道上的第⼀辆车即可开⼊;当停车场内某辆车要离开时,在它之后进⼊的车辆必须先退出车场为它让路,待该辆车开出⼤门外,其它车辆再按原次序进⼊车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费⽤。
试为停车场编制按上述要求进⾏管理的模拟程序。
要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应缴纳的费⽤和它在停车场内停留的时间。
需求分析由于停车场只有⼀个⼤门,当停车场内某辆车要离开时,在它之后进⼊的车辆必须先退出车场为它让路,先进停车场的后退出,后进车场的先退出,符合栈的“后进先出,先进后出”的操作特点,因此,可以⽤⼀个栈来模拟停车场。
⽽当停车场满后,继续来到的其它车辆只能停在便道上,根据便道停车的特点,先排队的车辆先离开便道进⼊停车场,符合队列的“先进先出,后进后出”的操作特点,因此,可以⽤⼀个队列来模拟便道。
排在停车场中间的车辆可以提出离开停车场,并且停车场内在要离开的车辆之后到达的车辆都必须先离开停车场为它让路,然后这些车辆依原来到达停车场的次序进⼊停车场,因此在前⾯已设的⼀个栈和⼀个队列的基础上,还需要有⼀个地⽅保存为了让路离开停车场的车辆,由于先退出停车场的后进⼊停车场,所以很显然保存让路车辆的场地也应该⽤⼀个栈来模拟。
因此,本题求解过程中需⽤到两个栈和⼀个队列。
栈以顺序结构实现,队列以链表结构实现。
程序代码#include#include<stdlib.h>#include<stdio.h>#include#define MAXSIZE 5#define price 0.01#pragma warning(disable: 4996)using namespace std;typedef struct time {int hour;int min;}Time;/时间结点/typedef struct carnews {char num[10];Time reach;Time leave;}CarNode;/车辆信息结点/typedef struct NODE {CarNode* stack[MAXSIZE + 1];int top; //栈可⽤的最⼤容量}SeqStackCar;/模拟停车场/typedef struct car {CarNode* data;struct car* next;}QueueNode; //模拟车进⼊便道,便道的车进⼊停车场typedef struct Node {QueueNode* head; //头指针QueueNode* rear; //尾指针}LinkQueueCar;/模拟便道/void InitStack(SeqStackCar*); //创建空栈int InitQueue(LinkQueueCar*); //创建空队列int Arrival(SeqStackCar*, LinkQueueCar*); //车辆到达void Leave(SeqStackCar*, SeqStackCar*, LinkQueueCar*); //车辆离开void PRINT(CarNode*, int); //输出离开车辆的信息清单void List(SeqStackCar, LinkQueueCar); //对所⽤到的函数作提前声明int main() {SeqStackCar Enter, Temp;LinkQueueCar Wait;int ch;InitStack(&Enter);//初始化车站InitStack(&Temp);//初始化让路的临时栈InitQueue(&Wait);//初始化通道while (1) {cout << "@欢迎使⽤本停车管理系统@" << endl;cout << “----------------------------------------------------------------” << endl;cout << " # # 1.车辆到达 # # " << endl;cout << " # # 2.车辆离开 # # " << endl;cout << " # # 3.列表显⽰ # # " << endl;cout << " # # 4.退出系统 # # " << endl;cout << “----------------------------------------------------------------” << endl;cout << “!说明:请注意正确输⼊时间,在输⼊‘时'后,按‘ENTER'或者‘空格',再输⼊‘分'。
停车场管理系统—C语言课程设计
停车场管理系统1题目要求设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车站。
停车站内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车站为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
【基本要求】要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场是的停车时间及它应该交的费用。
2需求分析根据题目要求,因为停车场是一个单条的序列,可以用结构体实现;在程序中,需要知道每辆来车的具体停放位置,应提供提示、查找、标记工作。
车辆离开要计时计费。
另外,每天开始时,停车场要初始化。
3总体设计这个系统可以分为:初始化、有车进入、有车离开、退出四个模块。
4详细设计main()函数体内包含了界面选则部分menu(),并单独Array抽出来作为一个独立函数,目的在于系统执行每部分模块后能够方便返回到系统界面。
即main()函数写为如下:void main()/*主函数*/{menu();/*菜单函数*/}菜单函数:void menu(){int n,w;do{puts("\t\t**************MENU**************\n\n");puts("\t\t\t 1.初始化");puts("\t\t\t 2.有车进入");puts("\t\t\t 3.有车离开");puts("\t\t\t 4.退出");puts("\n\n\t\t*********************************\n");printf("Please choice your number(1-4): [ ]\b\b");scanf("%d",&n);if(n<1||n>4)/*对选择的数字作判断*/{w=1;getchar();}else w=0;}while(w==1);switch(n){case 1:chushi();break;/*初始化函数*/case 2:jinru();break;/*车辆进入函数*/case 3:likai();break;/*车辆离开函数*/case 4:exit(0);/*退出*/}}初始化模块设计:【需求分析】该模块是将每一天开始的停车场内和便道车位清零。
数据结构实验报告模拟停车场管理
数据结构实验报告模拟停车场管理实验目的:通过模拟停车场管理的过程,理解数据结构的应用和实际工程问题的解决思路。
实验内容:1.设计停车场类和车辆类,并实现相关操作方法。
2.模拟停车场管理的过程,包括车辆的进入和离开。
3.根据实际需求设计停车场管理算法,如何选择停车位和调度车辆等。
实验步骤:1.设计停车场类停车场类需要保存停车位的信息,可以使用数组或链表实现。
需要提供以下方法:- void addCar(Car car):将车辆添加到停车场,如果停车场已满,则禁止入场。
- void removeCar(Car car):将车辆从停车场移除,并更新停车位信息。
- int getAvailableSpaces(:返回停车场中当前可用的停车位数量。
2.设计车辆类车辆类需要保存车辆的信息,如车牌号、车型等。
3.实现停车场管理算法停车场管理需要考虑车辆进入和离开的顺序,以及停车位的选择等问题。
可以使用队列或堆栈等数据结构来保存车辆的进出顺序。
停车位的选择可以根据具体算法进行,如先到先得、最近最便等原则。
4.完成模拟停车场管理过程的代码根据实际需求,编写代码模拟车辆进入和离开停车场的过程。
可以通过输入车辆信息和操作指令来模拟。
5.测试与优化对停车场管理算法进行测试,并根据实际情况进行优化。
可以通过增加数据量、调整车辆进出顺序等方式进行测试,并根据测试结果进行优化。
实验结果:经过实验测试,停车场管理系统可以良好地处理车辆的进入和离开,并正确计算可用停车位的数量。
通过合理的停车位选择算法,确保了车辆进出的顺序。
实验总结:通过本次实验,我们学习了如何利用数据结构来实现停车场管理系统。
停车场管理系统是一种常见的实际应用,对于解决停车难问题具有重要意义。
在实验过程中,我们掌握了设计和实现停车场类、车辆类以及停车场管理算法的方法,加深了对数据结构的理解和应用。
在实验过程中,我们还发现停车场管理算法可以通过不同的策略进行优化,如最大化停车利用率、最小化顾客等待时间等。
C语言实现简易停车场管理系统
C 语⾔实现简易停车场管理系统本⽂实例为⼤家分享了C 语⾔实现停车场管理系统的具体代码,供⼤家参考,具体内容如下问题描述:设停车场内只有⼀个可停放n 辆汽车的狭长通道,且只有⼀个⼤门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(⼤门在最南端,最先到达的第⼀辆车停放在车场的最北端),若车场内已停满n 辆汽车,则后来的汽车只能在门外的便道上等候,⼀旦有车开⾛,则排在便道上的第⼀辆车即可开⼊;当停车场内某辆车要离开时,在它之后开⼊的车辆必须先退出车场为它让路,待该辆车开出⼤门外,其它车辆再按原次序进⼊车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费⽤。
由题得,此系统要实现的功能为:(1)设计停车场内的结构。
(由题分析为⼀个栈,因为只有⼀个门所以其就像数据结构中学到的栈,但是因为既要出栈⼜要⼊栈,此处我就将这个栈简化为了⼀个链表)(2)当车库满时,在车库外等待的结构。
(就像排队⼀样,先来先进后来后进,只能从⼀端进,另⼀端出)。
(3)车辆的结构,⼀辆车要有什么信息?⾸先要有这辆车的车牌号,可以⽤⼀个字符数组来存储(因为车牌不⼀定全是数字,还可能有汉字,英⽂字母等),题中要求要⽤要计算收费,就要知道驶⼊时间和驶出时间(怎样获取在下⾯会说到)。
算法描述:1、刚开始定义结构类型,如车的类型,车库⾥的类型,车库外等待的类型。
2、声明所要⽤到的函数:1234567891011121314void menu(Stack *cheku,SequenQueue* paidui);//开始菜单 //就是展⽰出菜单的函数//队列的相关操作SequenQueue* InitQueue();//申请⼀个空队int EmptyQueue(SequenQueue* Q);//判断队空int FullQueue(SequenQueue* Q);//判断队满int EnQueue(SequenQueue* Q, ElemType *e);//⼊队int DeQueue(SequenQueue* Q, ElemType *e); //出队Stack* build();//建链表int fullstack(Stack *cheku);//判断链表满void tingche(Stack *cheku,SequenQueue* paidui);//停车的函数void likai(Stack *cheku,SequenQueue* paidui);//离开的函数void chakan(Stack *cheku,SequenQueue* paidui);//查看车库停车情况的函数3、⼀些可能不理解的说明的说明。
