1.前言C++语言是计算机能够提供给用户使用的最快而又最有效的语言。
运用已学过的知识进行一个简单的应用程序的开发。
基本掌握C语言对编译。
生成程序等操作。
掌握C++语言开发中的需求分析与设计方法。
利用计算机技术使复杂、繁锁的工作,变得更加的规范,更易于操作。
2.系统功能以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
栈以顺序结构实现,队列以链表结构3.设计思想设停车场是一个可停放n辆汽车的长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车信放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场院,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
4.流程图该程序主要停车场管理功能,通过记录汽车“到达”或“离去”信息、汽车牌照号码、汽车到达或者离去的时刻达到停车场管理功能。
本次设计在功能需求上可分为以下4个方面:(1) 汽车“到达”或“离去”信息(2) 汽车牌照号码(3) 汽车到达或者离去的时刻图一截面图如下:图二5.使用说明直接点击应用程序或者在DOS环境下运行.exe文件!在运行条件下按”e”即可退出!6.心得体会一周的C++语言课程设计结束了,我的收获很大。
使我对C++语言的基本知识的使用更加熟识,同时也增加了我对C++语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。
通过查阅以下资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了学好C++语言的信心。
通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对C++语言的认识和理解,切实的提高了我的编程能力,补全了我的不足。
通过这次课程设计,我巩固所了学过的知识,能用C++语言熟练地运用顺序、选择、循环三大结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用。
在整个程序的编写中,调试占了很大部分的时间。
要想写好C++语言的程序,必须认真对待代码的每一个细节,这对程序的调试是非常重要的。
通过这次实际动手能力的培养,我进一步熟悉了C++语言的结构和使用方法,基本达到了能独立阅读、编制和调试一定规模的C++语言程序。
不可否认,本程序存在不少缺点和不足,但通过这次作业找到了自己学习上的不足,对以后的工作有指导作用。
我相信再以后的学习中会克服这些不足,达到熟练掌握C++语言的目的。
向在这次课程设计中给予指导和帮助的老师表示衷心的感谢。
7.调试调试的时候使得系统无法正常运行,经过多次的检查,反复的修改,并对其进行相应的修改,终于解决了这些调试出来的问题,这样才使得程序成为一个健全的程序。
8.参考文献《C++程序设计》《数据结构》9.源代码#include <iostream>using namespace std;template <class T>class sqstack;template<class T>class squeue;template <class T>class qnode;//定义汽车类,包含其牌照号码以及进入进入停车场时间两项数据class car{private:int Num,Time;public:car():Num(0),Time(0){};//汽车类的构造函数void set(int x,int y);//设置汽车号码以及进场时间int getNum();//返回汽车号码int getTime();//返回进场时间car(car &s);//构造函数定义一个汽车类的变量};car::car(car &s)//带参构造函数{Num=s.getNum();Time=s.getTime();}void car::set(int x,int y){Num=x;Time=y;}int car::getNum(){return Num;}int car::getTime(){return Time;}//用顺序栈模拟停车场,只允许一个方向进出,并且使用模板类template <class T>class sqstack{private:int n;//栈长度T *stack;//定义个一维数组存储停车场空位信息int top;//栈顶变量public:sqstack(int size);//带停车场长度参数的构造函数void push(T s);//进栈函数T pop();//出栈函数int empty(){return top==-1;}//判断栈是否为空int full(){return top==n-1;}//判断栈是否满void printsq();//输出栈内容T gettop();//取栈顶元素int getsize();//求栈长度};template <class T>sqstack<T>::sqstack(int size):top(-1),n(size){stack=new T[n];//新建一个T类型的数组存储停车场信息}template <class T>void sqstack<T>::push(T s)//将客户输入的信息进栈存储{top++;stack[top]=s;}template <class T>T sqstack<T>::pop()//退出离开停车场的车辆元素{T s;s=stack[top];top--;return s;}template <class T>void sqstack<T>::printsq(){int i;for(i=0;i<=top;i++){cout<<"车牌号为"<<stack[i].getNum()<<"的汽车进入了停车场的第"<<i+1<<"个位置"<<endl; }if(top==-1){cout<<"停车场为空!"<<endl;}}template<class T>T sqstack<T>::gettop()//取停车场最后一个位置的车辆元素{T s=stack[top];return s;}template <class T>int sqstack<T>::getsize()//求停车场长度{return n;}//定义一个链式队列模拟便道信息template <class T>class qnode//链式队列的节点类{friend class squeue<T>;private:T data;//节点的数据域qnode<T> *next;//节点的指针域};template <class T>class squeue//链式队列的链表类{public:squeue():rear(NULL),front(NULL){};//初始化构造函数void enqueue(T s);//将元素进队列T dequeue();//将元素出队列int qempty();//判断队列是否为空T getqueue();//取队头元素void printque();private:qnode<T> *front,*rear;//队头指针及队尾指针};template <class T>void squeue<T>::enqueue(T s){qnode<T> *p;p=new qnode<T>;p->next=NULL;p->data=s;if(front==NULL){front=rear=p;}else{rear->next=p;rear=p;}}template <class T>T squeue<T>::dequeue(){qnode<T> *q=front;T x;if(front==rear)throw"empty!~";x=q->data;front=front->next;if(front==NULL)rear=front;delete q;return x;}template <class T>int squeue<T>::qempty(){if(front==rear)return 1;elsereturn 0;}template<class T>T squeue<T>::getqueue(){return rear->data;}template<class T>void squeue<T>::printque(){cout<<"便道的停车信息为:车牌为"<<getqueue().getNum()<<"的汽车进入便道"<<endl; }//停车场管理主程序int main(){int msize;//设置停车场大小cout<<" 请设置停车场的大小";cin>> msize;cout<<endl;//设置停车场每分钟收费标准cout<<" 请设置停车收费标准";int rate;cin>> rate;cout<<endl;//设定CAR类型为栈及队列的模板类sqstack<car> s1(msize);//定义主栈,模拟停车场sqstack<car> s2(msize-1);//定义临时栈,存储在汽车离开停车场时为汽车让路的汽车变量!car a;//定义一个汽车变量squeue<car> Q;//定义队列,存储停留在便道上汽车变量char x;cout<<" **欢迎使用停车场管理系统************"<<endl;cout<<" **开始使用请输入Y or y,按任意键退出";cin>>x;cout<<endl;while(x=='Y'||x=='y'){char ch;int n,t;cout << " **把车停到停车场按A******"<<endl;cout << " **离开停车场按D**********"<<endl;cout << " **停车场的信息查询请按P***"<<endl;cout << " **退出系统按Q************"<<endl;cin>>ch;switch(ch){//停放车辆case('A'):cout<<"请输入停入停车场的车牌号及停入时间";cin>>n>>t;//客户输入将要停放的汽车的信息cout<<endl;if(!s1.full()){a.set(n,t);s1.push(a);//将汽车变量进栈,停入停车场靠门端}else{cout<<"停车场满,请停入便道!"<<endl;//当停车场无空位a.set(n,t);Q.enqueue(a);Q.printque();//将之后需要停放的车辆停入便道}break;//离开停车场case('D'):cout<<"请输入要离开停车场的车牌号及时间"<<endl;cin>>n>>t;//客户输入需要离开的汽车的号码及离开时间if(n<=s1.getsize())//如果输入的车牌号在停车场里面则{while(s1.gettop().getNum()!=n)//将汽车出栈直到找到客户输入的那两汽车{s2.push(s1.pop());//将指定车辆之前的所有车辆存入临时栈中}if(s1.gettop().getNum()==n){int sub=t-s1.gettop().getTime();//计算该车辆在停车场停靠的时间cout<<"车主所要花费的停车费为"<<sub*rate<<endl;//计算费用s1.pop();//该车离开while(!s2.empty())s1.push(s2.pop());//将临时栈中所有汽车全部停回停车场//由于此时停车场靠门端有空位,则便道上第一辆车子进入停车场if(Q.qempty()){cout<<"便道上无车辆"<<endl;//如果便道上无车辆,则返回}else if(!s1.full()){s1.push(Q.dequeue());//将队列队头车辆出队然后进入停车场}}}else if(!Q.qempty())//如果输入的车牌号在便道上则{cout<<"该汽车停便道上,停便道上的汽车不收费"<<endl;}else//不存在此车牌号cout<<"输入的数据有误!"<<endl;break;case('P'):s1.printsq();break;//将停车场车辆停放信息显示出case('Q')://退出停车场管理系统cout<<"============================="<<endl;cout<<"***谢谢使用停车场管理系统***"<<endl;exit(1);break;default:cout<<"输入的命令有误!,请重新输入!"<<endl;}}return 0;}。