停车场管理系统C++课程设计.docx
《停车场管理系统C++课程设计.docx》由会员分享,可在线阅读,更多相关《停车场管理系统C++课程设计.docx(27页珍藏版)》请在冰豆网上搜索。
停车场管理系统C++课程设计
计算机学院计算机科学与技术专业
《程序设计综合课程设计》报告
(20010/2011学年第一学期)
学生姓名:
学生班级:
学生学号:
指导教师:
2011年 1月 7日
第一章课程设计目的和要求
1.1课程设计的目的
C++程序设计是计算机科学与技术专业的基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
课程设计的目的是加深对理论教学内容的理解和掌握,使学生较系统的掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
要求学生在设计指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。
要求学生能够全面、深入理解和熟悉掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好的理解和掌握,能够进行简单分析和判断;能编写出良好风格的程序;掌握C++程序设计的基本技能和面向对象的概念和方法。
培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
1.2课程设计的要求
功能要求:
用c/c++设计一个程序实现停车场管理系统,要求如下:
1)用C语言实现系统;
2)函数功能要划分好(结构化程序设计);
3)界面友好(良好的人机交互),加必要的注释;
4)提供程序测试方案。
第二章课程设计任务内容
2.1课程设计任务内容
设计一个程序实现停车场管理系统,管理人员根据口令进入系统。
管理车位信息(车位编号,状态)和每小时的收费费率(货车7元/小时,客车5元/小时,轿车4元/小时,其他3元/小时,由停车时开始计时选择录入)。
停车时,建立对象,录入信息(车牌号,停泊位置,停泊开始时间);停车位第一个为空的位置,由程序查询自动给出车位号,如果车位已满要给出提示。
取车时,需要根据车辆停泊时间自动计算费用(半小时内以半价计算,超出半小时不足一小时按一小时计算)并显示在屏幕上。
可以随时根据车牌查询是否入库。
可以随时根据车位查询该位置上的相关信息。
补充:
要求可以将录入的信息储存到文件内并且能够随时查询信息。
2.2课程设计任务内容阐述
本程序为一个停车场计时收费系统,它能实现的功能是将进入定义的车库的车辆信息存储,根据车辆类型(货车,客车,轿车,其他)来进行不同的计时收费,以及随时根据车牌查询是否入库,随时根据车位查询该位置上的相关信息,最后还要能够将保存的数据读取查询。
程序需要我们做一个良好的人机交互界面,以及安全性等问题。
第三章课程设计详细说明
3.1程序模块描述
本程序主要有一下几个模块构成:
1)用户登陆模块。
此程序中先定义一个用户名和密码(无选择项可以改变,只有修改程序才能修改,用户名和密码事先存入文档“用户名和密码.txt”中),用户名和密码共有三次输入机会,正确则登陆停车场系统,错误则提示重新输入,如果三次都错误则自动退出停车场系统。
2)程序登陆后的选择模块以及信息存储模块。
该模块给出四个选项(1.泊车操作2.取车操作3.查询信息4.退出),所以在本模块中添加对录入信息的储存模块,其中加入记录系统时间的模块(要求没有提到,方便信息查询自己添上的),在用户的选择中进入下一个模块的操作,其中第一个操作的信息将存储并保存进“车辆信息.txt”。
3)信息查询模块。
在这个模块中要将之前存储的信息“车辆信息.txt”中的信息输出到运行界面中,我利用二维数组来将信息从文件中输出,该模块中其他的选项为输出当前的车位状态以及根据车牌查询信息。
4)计时收费模块。
该模块中,定义系统时间函数,在本模块之前定义车辆分类收费模块,将这两个模块结合求出车费输出到界面,其中小于30分钟的按半小时计算,大于30小于60分钟按一小时算。
3.2性能描述
1)因为任务书中对该模块的要求不是很详细,所以我简单处理了一下,自己事先定义用户名和密码,设置三次输入机会,用户名和密码事先用文档存储,供使用者进入系统。
2)这个模块比较复杂,基本的用户登陆模块设计基本完善,在信息录入和存储方面也符合要求,本模块选项的功能也都能实现,而且后来加入的查询历史停车信息的模块也和程序要求符合。
3)该模块其实是最复杂的模块,由于刚开始没有建立查询历史信息的模块,所以不算完善,在建立历史信息查询模块后,完全符合要求,能够实现将第一个为空的位置,由程序查询自动给出车位号,如果车位已满要给出提示。
可以随时根据车牌查询是否入库。
可以随时根据车位查询该位置上的相关信息。
唯一的不足就是读取的信息量有限,因为时间紧迫,没找到合适的解决办法。
4)本模块的算法设计比较简单,基本的switch函数就能实现对车型的分类,时间则是导入的系统时间,时间差乘以单价就是最后收费,其中取车时,需要根据车辆停泊时间自动计算费用(半小时内以半价计算,超出半小时不足一小时按一小时计算)并显示在屏幕上,也顺利实现。
3.3输入和输出
1)该模块中定义了全局变量,输入的信息即为事先设置的用户名和密码,输出的是停车场系统。
2)该模块中输入输出项都较多,在停车模块中要输入车牌号,车辆类型,自动输出停车位以及停车时的系统时间;在取车模块中,因为任务书要求为根据车牌号取车,所以输入的为任意车牌号,输出的为停车费;在查询模块中,根据任务书要求,可以输入车牌号或者车位号,输出的为车位号或者车牌号;其余选项无输入项,输出项为回到系统或跳出系统(退出)。
3)该模块可以看着第二个模块的子模块,输入输出项也是第二个模块所陈述的。
4)该模块中处理信息都是自动的。
其中输入项是开始的时间,为自动计时,输出的就是车辆收费。
3.4程序算法
本程序的的主函数就是一个美化的界面,主要功能靠其他的功能函数的调用来实现。
下面具体说明:
登陆函数中比较麻烦的用户名和密码做了提前的处理,用if语句判断函数,continue函数进入程序界面。
在这个模块中,涉及的算法和函数比较多,首先是ofstream函数存储停车信息,以及后面的ifstream函数读取存储的信息;用string函数导入了系统时间,用if函数做选择项以及车辆类型的选择,以及数组定义time1在ifstream函数中导出时间。
这个模块中的函数与第二模块相同,不再详说。
这个模块中,主要是用position将时间设置为空,建立新的时间函数hour1和min1,用structtm*newtime获取新的系统时间,再做判断。
3.5流程逻辑
1、主体程序
图3.5.1
2、用户登陆
图3.5.2
3、信息查询
图3.5.3
3.6接口函数描述
此部分程序有一个主函数和一下子函数:
1intmain主函数
2voidputcar();停车函数
3voidtakecar();取车函数
4stringtime1时间函数
5ofstream和ifstream存储和读取信息函数
6intjuge判断车位函数
7doublecharge收费函数
8voidsearch_pos车位查询函数
3.7数据文件存储说明
由于任务要求不是很详细,本程序只用到了两个数据文件:
“用户名和密码.txt”、“车辆信息.txt”,其中“用户名和密码.txt”文档中的信息为提前输入的,使用者用于输入账号和密码进入系统,“车辆信息.txt”文档为系统自动生成的文档,用于存放和读取车辆信息,进行查询使用。
3.8注释设计
注释主要是利于自己和别人来了解程序编写的思路以及运行方法,下面说一下本程序中的注释:
1)在登陆模块加的注释为了提醒大家开始了用户登陆界面的设计,以及其中用户名和密码的定义。
2)主程序开始时用注释提示了一下,在录入信息模块是用到了系统信息,加入了注释,方便理解,以及保存车辆信息时的函数也加入注释,方便自己改错和理解。
3)在查询信息模块里,主要注释提示了存储数据的输出形式,用到了二维数组,以及查询历史信息的函数。
4)最后的模块中用注释解释了全局变量的清空以及停车时间和车费计算函数的提示,最后是查询函数的注释。
3.9程序运行限制条件
本程序在硬件方面的要求比较低,软件要求环境为MicrosoftVisualC++6.0。
在程序设计时,感觉程序在用户登陆时不够完善,不能灵活输入用户名,只能用事先存好的用户名和密码;再就是在信息输入时不够智能,当然这个很难;再就是存储信息时不能加入汉字,如果加入会导致读取数据时异常麻烦,最后是读取数据时,由于用的数组,信息量有限,超出不能继续存储和读取。
3.10测试计划
在程序测试阶段,主要是看程序能不能运行以及能不能达到任务书所要求的功能,所以要对出现的错误进行分析和改正,并且完善自己的程序,下面为程序运行截图:
图3.10.1为用户名或者密码输入错误截图
图3.10.1
图3.10.2为用户名和密码正确进入系统的截图
图3.10.2
图3.10.3为输入车牌号的界面
图3.10.3
图3.10.4为车辆类型选择界面
图3.10.4
图3.10.5为取车操作界面
图3.10.5
图3.10.6为查询信息界面
图3.10.6
图3.10.7为按车牌查询界面
图3.10.7
图3.10.8为按车位查询界面
图3.10.8
图3.10.9为历史信息查询界面
图3.10.9
图3.10.10为查询信息的退出界面
图3.10.10
图3.10.11为不同时间的收费界面
图3.10.11
图3.10.12为存储信息的文档的截图
图3.1012
第四章程序使用说明
程序说明如下:
1)登陆系统时先打来“用户名和密码.txt”文档浏览用户名和密码,输入其中的用户名和密码进入系统。
2)在进入系统以后,严格按照系统要求来使用。
第五章课程设计心得与体会
经过一个学期对《C++程序设计》的学习,我学习到了基本的理论知识,了解到了C++语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打下了坚实的基础。
通过C++课程设计,一方面是为了检查这一个学期来计算机语言的学习成果,另一方面也是为了让我们进一步掌握和熟练地运用它,与此同时,也能够让我们认清自己在C++学习方面的不足之处和薄弱环节,并加以弥补和巩固。
通过对教学管理系统的程序设计,进一步的巩固了用C++语言编写程序的能力,并且利于更好的掌握C++语言!
在为期近两周的C++课程设计中,我体会颇多,学到了很多东西。
我懂得了用MicrosoftVisualC++6.0对程序进行调试,我加强了对C++程序设计这门课程的认识,并且复习了自己以前学习到的知识,自己的逻辑思考能力也提高不少。
这些都使得我对计算机语言的学习有了更深入的认识!
总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。
最重要的还是激发了我编程的兴趣和热情,让我从一个只懂理论变成了能做一些小型程序。
整体地评价这次课程设计,我认为收获很大,正如上面所说的那样,通过课程设计,既复习了以前的旧知识,又学到了一些新的知识。
像停车场管理系统这样的应用程序的设计和创建,经历了平时在课堂和考试中不会出现的难题和考验。
而这些问题,又都是课本上很少提到的、更深一层的实践与知识相结合的问题,这并不是我们平时只靠课本,就可以轻易解决的。
所以,锻炼了我们面对难题,学会用已掌握的知识去解决具体问题的能力,进一步培养了独立思考问题和解决问题的能力。
特别是学会了在VisualC++中如何调试程序的方法。
当然,老师的指导和同学的帮助也是不可忽视的,他们给了我许多提示和帮助,教会了我编译复杂程序的方法。
总而言之,这次C++程序设计实践让我收获很大。
附录1参考文献
1)《c++程序设计》作者:
谭浩强出版时间2004年6月
2)《C程序设计(第三版)》作者:
谭浩强出版时间2005年7月
3)《c++程序设计实践指导》作者:
谭浩强出版时间:
2005年7月
4)XX文库、XX知道
附录2程序清单:
#include
#include
#include
#include
#include
usingnamespacestd;
classcar
{
public:
charno[9];
intpos;
doublefee;
voidputcar();
voidtakecar();
};
classTime
{
public:
inthour;
intmin;
voidgetime();
};
inti,poi;
intposition[100]={0};//全局变量
carcarin[100];
Timecatime[100];
intjuge();
intcomp();
voidsearch_no();
voidsearch_pos();
voidmain()
{
/////////////////////////////////////////////用户登录
constcharha[10]="wangbing";//管理员用户名
constcharhb[10]="1427";//////管理员密码
charcn[10],cm[10];
intci=0;
while
(1)
{
cout<<"请输入管理员用户名:
";
cin>>cn;
if(strcmp(ha,cn))
{
cout<<"输入错误!
\n";
ci++;
if(ci==3)
return;
continue;
}
else
{
cout<<"请输入密码:
";
cin>>cm;
}
if(!
strcmp(hb,cm))
break;
else
{
cout<<"密码错误!
\n";
ci++;
if(ci==3)
return;
continue;
}
}
////////////////////////////////////////////////主程序
intk;
cout<<"请选择:
"
<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎"
<<"\n\n\t◇1.泊车操作◇"
<<"\n\n\t◇2.取车操作◇"
<<"\n\n\t◇3.查询信息◇"
<<"\n\n\t◇4.退出◇"
<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎\n\n";
ofstreamoutfile("车辆信息.txt",ios:
:
app);
if(!
outfile)
{cerr<<"openerror!
"<exit
(1);
//ifstreaminfile("车辆信息.txt",ios:
:
in);
//if(!
outfile)
//{cerr<<"openerror!
"<//exit
(1);
}
while(cin>>k)
{
if(k==1)
{
i=juge();
cout<<"\t车牌号:
";
cin>>carin[i].no;
carin[i].putcar();
cout<<"请选择:
"
<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎"
<<"\n\n\t◇1.泊车操作◇"
<<"\n\n\t◇2.取车操作◇"
<<"\n\n\t◇3.查询信息◇"
<<"\n\n\t◇4.退出◇"
<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎\n\n";
stringtime1;
time_tt;
time(&t);
time1=ctime(&t);
cout<
outfile<continue;
}
if(k==2)
{
poi=comp();
carin[poi].takecar();
cout<<"请选择:
"
<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎"
<<"\n\n\t◇1.泊车操作◇"
<<"\n\n\t◇2.取车操作◇"
<<"\n\n\t◇3.查询信息◇"
<<"\n\n\t◇4.退出◇"
<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎\n\n";
continue;
}
if(k==3)
{
intx;
while
(1)
{
cout<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇"
<<"\n\n\t查询车牌号请选择1,查询车位请选择2,查询历史信息请选择3,退出请选择4:
"
<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇\n\n";
cin>>x;
if(x==1)
{
search_no();break;
}
elseif(x==2)
{
search_pos();break;
}
elseif(x==3)
{
stringa,time1[100][5];////定义二维数组读取数据
inti,j,m,n;
ifstreaminfile("车辆信息.txt",ios:
:
in);
if(!
infile)
{cerr<<"openerror!
"<exit
(1);
}
infile>>a;
for(i=0;i<5;i++)
for(m=0;m<100;m++)
infile>>time1[m][i];
cout<<"";
cout<for(j=0;j<5;j++)
for(n=0;n<100;n++)
cout<}////////////////////////////////查询历史信息
elseif(x==4)
{
break;
}
else
cout<<"\t选择错误,请重新选择:
";
}
cout<<"请选择:
"
<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎"
<<"\n\n\t◇1.泊车操作◇"
<<"\n\n\t◇2.取车操作◇"
<<"\n\n\t◇3.查询信息◇"
<<"\n\n\t◇4.退出◇"
<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎\n\n";
}
outfile.close();
}
}
intjuge()///////////////////////判断出第一个空的车位
{
intj=0;
while(position[j]==1&&j<100)
{
j++;
}
if(j<100)
position[j]=1;
returnj;
}
intcomp()
{
charch[9];
cout<<"\t车牌号:
";
cin>>ch;
for(intk=0;k<100;k++)
{
if(!
strcmp(ch,carin[k].no))
{
if(position[carin[k].pos-1]==1)
{
return(carin[k].pos-1);
break;
}
}
}
if(k=100)
returnk;
}
voidcar:
:
putcar()
{
intt;
while
(1)
{
cout<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎"
<<"\n\n\t货车请输入1,客车请输入2,轿车请输入3,其他请输入4:
"
<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎\n\n";
cin>>t;
if(t==1)
{
carin[i].fee=7.0;break;
}
elseif(t==2)
{
carin[i].fee=5.0;break;
}
elseif(t==3)
{
carin[i].fee=4.0;break;
}
elseif(t==4)
{
carin[i].fee=4.0;break;
}
cout<<"输入错误!
请重新输入:
\n";
}
if(i==100)
cout<<"对不起,车位已满!
\n";
carin[i].pos=i+1;//自动输出车位号
cout<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎";
cout<<"\n\n\t车位号:
"<catime[i].getime();
cout<<"\n\n\t现在时间是:
"<"<cout<<"\n\n\t◇◎◇◎◇◎◇◎◇◎◇◎◇◎◇◎"<
}
voidcar:
:
takecar()
{
inthour1,min1;
doublecharge;
if(poi<100)
{
position[poi]=0;//重新设置为空位
hour1=catime[poi].hour;
min1=catime[poi].min;
catime[poi].getime();
hour1=catime[poi].hour-hour1;
min1=catime[poi].min-min1;
if(min1<30)//计算出停车时间
charge=carin[poi].fee*hour1+carin[poi].fee*0.5;
else
charge=carin[poi].fee*hour1+carin[poi].fee;
cout<<"\t车费为:
"<}
else
cout<<"\t无此车!
\n";
}
voidTime:
:
getime()
{
structtm*newtime;//获取停车时间
time_tlong_time;
time(&long_time);
newtime=localtime(&long_time);
hour=newtime->tm_hour;
min=newtime->tm_min;
}
voidsearch_no()
{
intpoi=comp();
if(poi<100)
cou