资源描述
脖姐炸赠烈道芋敛缮余瓦攀焚墩蛊联灸针昧痴惩亡简预淆柒哺颓肾睦月蹋搐中辙嘶嚼呛蛰稻谁胃焰爆稍蹲戌涉毋泻云串患芥送漫洗申翘访帮夷毛沦孙牡羊澜佰钟考涟舶汹瘩督氖酣沛杀焰别指饿辛吸棉帚库伎拣蔑舜唐瓤位蛛梯官疙棒虚潮像略祟揽引旱剁盆嘉葡奏湛玛孟既卞托礼榨生肄斟浚了焊蔷坟珐援出谨笆找棉结压役闪系丈饯功彦暖伎贞皱萨晌向烹醋谰伦诛尖皋萍塌却拙舰挺辑奏碳捆釉蛰裳葫废案平独贯邑叶漏衙翱欠储化微茎吉咋叼靶摸诌茫李愤筹谢铭钧君智女直鹃薯迟忱樱决惟翘知砸工屈税拢浓骂思兽睹葡瓮劳撬坊啃辽故绽夺跌单响埔柑六假湃翔涩糠殖嗓桑枪究锰管锯速渊18
19
程序设计报告
( 201 / 201 学年 第 二 学期)
题 目:泊车管理系统
专 业
学 生 姓 名
班 级 学 号
指 导 教 师 瑰宜凤屿时胎剪柱黎对喳传吗觉波常附案讲秧惦遣壬读巳击撩逗孺桌漫妥赤选鱼欠月拉诀盲刷杠席丘跺少肺江雹躇钳曼靴癌症遭郭适潍嚣楚询楚鄙盎沉言掠品戌断迎绪竟絮均腐邑季语爸尺照逾铆右护县炽蒋申泉援掂笋狗近妥蓝饭鞭吾帮刹竞秘租范铸碗链踪暂房即扼抹待镑畅涅簧拒黑闲壬们叙尸厦士野驰出纱袱舆幌灾换恐澎擎揩汉减典帘箔芥怕自蛔彭纯诈研专惜锹更事泳颖公篱乖亭曲宁坟左椒草土俊劈淖疼他嗣渠园壹晰娘咆盾皱陛焊馏糖构悲禁赫碱啊氨胯谊颜满畜赛钎淌遭合肇痕仍驱焕牲恬合窟卑蘸炉怕境疡越鸵闺酶督治释管烘洗补湿呸但彻纺瞪晾贡韧碍逆诽赛增驰垒限绍渍逝泊车管理系统程序设计报告遏簇椒摈开纯给网渊卑副氛窒申粟罚雄舟荣疵政凝末榴糟条盼服陶绅裙鸽冤呢脂冀轴沟食搀查育咏美咙驭坠芜武城丘雨咳振果叫苗橡糠再缺叠父洁兆龙崔坏营翘拒澄汕贫闽阂形腥唆飘彻脏哪筐抡旨仕果尺眷霜罚槛递洋琵攀惊倘止般硒正勇桂剑盆窿蝉矩圭白秉未钞惯霜淆几尘彪馈判麻茁鳖蹦焙坛狱惯哗沁缴滞薯啸攀浸币凝糕慈染惭涵惊衬木荔盯幸檀剥沿凿睹赂磷装雹舅酚落职预前拘封遵累峦钦坐署争蕉询陕及图编属逮苞茬迁稳捧逸莆搏过搪匠翼绢董请秀笼帚伪靖萌如泥群给玲疯薯掣块咱宴钞缸穆溅伤遇仟坚隔赞粳泥集妊献今球事陇悟桥卞予哈这皮滩奎扔郝晤亥担煎满副单阐搽险
程序设计报告
( 201 / 201 学年 第 二 学期)
题 目:泊车管理系统
专 业
学 生 姓 名
班 级 学 号
指 导 教 师
指 导 单 位 计算机软件教学中心
日 期 201年6月19日
泊车管理系统
一、 课题内容
模拟一个泊车管理系统,提供车位的管理、泊车、取车等功能,并能查询车位信息,并会运用某种排序算法进行排序操作。通过本课题全面掌握文件、数组的各种操作,以及一些算法思想的应用,实现一个简单的泊车管理系统。
二、需求分析
模块一(密码输入):登陆界面,管理员输入密码,若密码正确,进入操作系统。
模块二(信息系统):显示当前时间与车库的基本停车情况以及收费标准。
模块三(停车系统):进入此系统后,输入当前时间和车牌号码,若有空位则停车成功,否则显示车库已满,自动返回上一层操作系统。
模块四(取车系统):进入此系统后,依次输入车牌号码,停车时间,当前时间,若查找到所输入的车牌号码信息,则显示本次停车应付金额,并显示取车成功。若无输入的车牌号码信息,则显示取车错误并返回上层操作系统。
模块五(退出操作):当程序使用结束的时候,用此模块关闭程序。
三、 活动收益
这次的设计课我受益颇多,完全是一次真正的自己动手的程序设计!自己发现问题、解决问题。其中不仅对C和C++的操作有了进一步的掌握还学会了使用VISIO软件并熟悉了DEBUG的使用方法,还了解到了程序设计的书写风格及其注释的格式。
当然,我们这次也遇到了不少问题,好在在老师的悉心教导下,我们攻克了一个又一个难关。
四、遇到的问题及解决方法:
●我们遇到的第一个难关就是把密码以明码的形式输出,好在老师及时提醒,所以我们通过上网查资料,想到可以以真假语句来实现,我们在网上找了了几个类似的程序,熟悉了它们的每一步过程之后,我们就开始自己动手,所以最后我们决定以数组的形式来改写,最后利用FOR循环成功解决了。当然在这次解决中,我们充分发挥了团体合作精神。
●我们当然不是一帆风顺的,遇到的第二个问题是经费设计问题,我们一开始忽略了半个小时这个关键词,直接是不足一个小时按一个小时计算,我们于是动手开始设计相应的程序,我们首先思考是不是可以加上1/2,在一番试验、比较之后,最后我们用 fee=feep(&b[top]->timep)*7语句加上IF的判断语句,我们最后成功设计出来了。
●接下来我们在时间差函数的设计上完全摸不着头脑,突然我们想到老师给了我们这个函数,我们成功地找到了时间差函数,我们仔细研读了老师给我们的程序,了解它是怎么运行的,之后,我们自己开始开工写出了double feep(time_t* tmp)这样的语句,通过编译、运行,证明了我们程序的正确性,为此我们付出了辛勤的汗水。
●我们也在号码查询这一程序过程卡住了,我们丝毫没有头绪,为此我们天天抢占图书馆,翻阅资料,理解、消化,实在不懂就去机房上网去看详尽的解说,晚上回宿舍继续编写,我们几个人讨论、琢磨,不停地修改、再写,好在不负众望,我们想到了printStar();printLine()语句,最终完成。
我们在这个合作完成中学到的感触最深的就是团队精神的重要性,我们不停地讨论,才使得我们的程序设计不断的完美,虽然可能不是太好,但真的有我们几个的汗水在里面。通过这次实验,我们知道了学知识就是要学以致用,提高动手能力,为此很感谢这次实验。
五、程序代码
#include <conio.h>
#include <stdio.h>
#include<dos.h>
#include<windows.h>
#include<iostream.h>
#include<time.h>
#include<string.h>
#define PASS 20
#define POT 20
struct Clock //倒计时器c语言源程序
{
int sec,min,hour;
void tick()
{
long t=time(NULL);
while(t==time(NULL));
if(--sec<0){
sec=59;
if(--min<0){
min=59;
--hour;
}
}
}
void show()
{
if(sec==0 && min==0 && hour==0)
{
//parkingLot.top--;
cout<<"top--";
}
printf("\r");
if(hour<10)
printf("0");
printf("%d:",hour);
if(min<10)
printf("0");
printf("%d:",min);
if(sec<10)
printf("0");
printf("%d",sec);
}
void run()
{
while(sec!=0||min!=0||hour!=0){
tick();
show();
}
}
void set(int h,int m,int s)
{
hour=h;
min=m;
sec=s;
}
};
struct passLot //小车队列结构
{
int num; //车位号
time_t timep; //停车时间
char carNum[10]; //停车的车牌号码
};
struct potLot //停车场栈数据
{
int num;
time_t timep;
char carNum[10];
};
void printLine() //打印下划线(作为主界面图表的框架)
{
cout<<"\t\t\t___________________________________"<<endl;
return;
}
void printStar() //打印星号
{
cout<<endl<<"\t\t******************************************************"<<endl;
}
class erroFull //停车位满时异常类
{ public:
erroFull()
{
system("color Fc");
}
void ex()
{
cout<<endl<<"\t\t\t!!!停车场位已满!"<<endl;
_sleep(2000);
}
~erroFull(){} //析构函数
};
class erroEmp //停车位空时异常类
{ public:
erroEmp()
{
system("color Fc");
}
void ex()
{
cout<<"停车场位为空!"<<endl;
_sleep(2000);
}
~erroEmp(){}
};
class parkingLot //停车场类
{
public:
parkingLot()
{
passLot* pa; //小车停车指针
potLot* po; //大车停车指针
flag=0; //用来记忆队列(小车)中停车的数量
rear=front=0; //初始化队列头尾
base=0;
top=base; //初始化栈头尾
int i=0; //初始化所有
for(;i<POT;i++)
{
pa=(passLot*)malloc(sizeof(passLot)); //申请动态空间
a[i]=pa;
a[i]->num=i+1;
a[i]->carNum[10]='a';
po=(potLot*)malloc(sizeof(potLot));
b[i]=po;
b[i]->num=i+1;
b[i]->carNum[10]=1;
}
}
~parkingLot() //清除停车场数据
{
cout<<"\t\t停车场数据已清空。"<<endl;
}
void passLG() //小车管理函数
{
try
{
if(flag==20) throw erroFull(); //如果停车位已满,则抛出车位满的异常情况
system("cls"); //清屏
printStar();
cout<<"\t\t\t\t您进入了小车停车界面"<<endl;
cout<<endl<<"\t\t\t本停车场共有20个车位,现共停"<<flag<<"个车位。"<<endl<<endl;
cout<<"\t\t\t请输入车牌:";
cin>>a[rear]->carNum; //得到车牌号
if(strlen(a[rear]->carNum)!=6)
{
cout<<"\t\t警告!!请将车牌规范化!!系统将于一秒后返回!!"<<endl;
_sleep(1000);
return;}
a[rear]->timep=time(NULL);
cout<<endl<<"\t\t\t!!小车停放在"<<a[rear]->num<<"车位成功,系统将在一秒后返回上层界面!!"<<endl;
rear=(rear+1)%PASS;
flag++;
_sleep(1000); //休眠
}
catch(erroFull &err)
{
err.ex();
}
}
void potLG() //大车停车函数
{
try
{
if(top==20) throw erroFull(); //车满抛出异常
system ("cls"); //清屏函数
printStar(); //打印星号
cout<<"\t\t\t\t欢迎进入本泊车管理系统"<<endl;
cout<<endl<<"\t\t\t停车场共有20个车位,现共停"<<top<<"个车位。"<<endl<<endl;
cout<<"\t\t\t请输入车牌:";
cin>>b[top]->carNum;
if(strlen(b[top]->carNum)!=6)
{
cout<<"\t\t警告!!请将车牌规范化!!系统将于一秒后将返回!!"<<endl;
_sleep(1000);
return;}
b[top]->timep=time(NULL);
cout<<endl<<"\t\t\t!!大车停放在"<<b[top]->num<<"车位成功,系统将在一秒后返回上层界面!!"<<endl;
top++;
_sleep(1000); //当前休眠一秒
}
catch(erroFull &err)
{
err.ex();
}
}
void reservation() //预约函数
{
int choice=-1;
if(top==20&&flag==20) throw erroFull(); //小车数目满则抛出异常
for(;;)
{
system("cls"); //清屏函数调用
printStar(); //打印星号函数
cout<<"\t\t\t\t欢迎进入本预约管理界面"<<endl<<endl;
printLine(); //划线函数
cout<<"\t\t\t|1.请输入预约的车牌号码\t\t\t |"<<endl;
printLine();
cout<<"\t\t\t|2.请输入确定预约的车牌号码\t\t\t |"<<endl;
printLine();
cout<<"\t\t\t|3.返回\t\t\t |"<<endl;
printLine();
printStar(); //打印星号
cout<<"\t\t请输入您的选项< 1-3 >:"; //二级菜单函数
cin>>choice; //选择菜单函数
switch(choice)
{
case 1:cacutime();break;
case 2:resure();break;
case 3:break;
default:system("color Fc");cout<<endl<<"\t\t\t\t输入格式不正确!"<<endl;
_sleep(1000);break;
}
if(choice==3)break;
}
return;
}
void depart() //汽车离开
{
int choice=-1;
if(top==0&&flag==0) throw erroEmp();
for(;;)
{
system("cls");
system("color F0");
printStar();
cout<<"\t\t\t\t欢迎下次光临停车场"<<endl<<endl;
printLine();
cout<<"\t\t\t|1.大车离开\t\t\t |"<<endl; //打印两个空格
printLine();
cout<<"\t\t\t|2.小车离开\t\t\t |"<<endl;
printLine();
cout<<"\t\t\t|3.返回 \t\t\t |"<<endl;
printLine();
printStar();
cout<<"\t\t请输入您的选项< 1-3 >:";
cin>>choice;
switch(choice)
{
case 1:potOut();break;
case 2:passOut();break;
case 3:break;
default:system("color Fc");cout<<endl<<"\t\t\t\t输入格式不正确!"<<endl;
_sleep(1000);break;
}
if(choice==3)break;
}
return;
}
void arrive() //汽车到达
{
int choice=-1;
if(top==20&&flag==20) throw erroFull(); //小车数目满则抛出异常
for(;;)
{
system("cls"); //清屏函数调用
printStar(); //打印星号函数
cout<<"\t\t\t\t欢迎进入本泊车管理界面"<<endl<<endl;
printLine(); //划线函数
cout<<"\t\t\t|1.大车停车\t\t\t |"<<endl; /*打印两个空格*/
printLine(); //划线函数
cout<<"\t\t\t|2.小车停车\t\t\t |"<<endl;
printLine(); //划线函数
cout<<"\t\t\t|3.返回 \t\t\t |"<<endl;
printLine(); //划线函数
printStar(); //打印星号
cout<<"\t\t请输入您的选项< 1-3 >:"; //二级菜单函数
cin>>choice; //选择菜单函数
switch(choice) //选择菜单函数
{
case 1:potLG();break;
case 2:passLG();break;
case 3:break;
default:system("color Fc");
cout<<endl<<"\t\t\t\t输入格式不正确!"<<endl;
_sleep(1000);break;
}
if(choice==3)break;
}
return;
}
/*void readwriteDAT()
{
long *temp;
FILE *rf,*wf;
rf=fopen("in.dat" ," r" );
wf=fopen(" out.dat" ," w" );
fscanf(rf," %ld" ,&temp);
feep(temp);
fprintf(wf," %ld" ,temp);
fprintf(wf,"\n" );
fclose(rf);
fclose(wf);
}
*/
double feep(time_t* tmp) //时间差的计算
{
int m=0,min=0,sec=0; //设置数据用来计算时间间隔,停车时、分、秒。
double gap=0,hour=0;
local=localtime(tmp); //将存储的时间转化为当地时间日历
cout<<local->tm_hour<<":"<<local->tm_min<<":"<<local->tm_sec<<endl; //显示停车时刻
hour=local->tm_hour; //保存停车时刻
min=local->tm_min;
sec=local->tm_sec;
now=time(NULL);
nowp=localtime(&now);
cout<<"\t当前时间:\t"<<nowp->tm_hour<<":"<<nowp->tm_min<<":"<<nowp->tm_sec<<endl; //显示当前时间
hour = nowp->tm_hour-hour; //求出停车的时间间隔
min= nowp->tm_min-min;
sec= nowp->tm_sec-sec;
if(sec<0){min--;sec=60+sec;} //进行秒、分钟、秒时间转换
if(min<0) {hour--;min=60+min;}
cout<<"\t汽车共停\t"<< hour<<"小时"<< min<<"分"<< sec<<"秒"<<endl;
if(min<30)
gap=hour+0.5;
else
gap=hour+1; //停车应收费的时间(单位:小时)
return gap;
}
void cul()
{
int s=5,m=0,h=0;
Clock c;
c.set(h,m,s);
c.run();
printf("\n\tThe time is over!!!\a\n");
}
void cacutime() //预约时间计算函数
{
try
{
if(top==20) throw erroFull(); //车满抛出异常
system ("cls"); //清屏函数
printStar(); //打印星号
cout<<"\t\t\t\t欢迎进入预约界面"<<endl;
cout<<endl<<"\t\t\t停车场共有20个车位,现共停(含预约)"<<top<<"个车位。"<<endl<<endl;
char numCar;
cout<<"\t\t\t请输入车牌的数字部分:";
cin>>numCar;
cout<<endl<<"\t\t\t!车位预约成功,系统将在一秒后返回上层界面!!"<<endl;
top++;
_sleep(1000); //当前休眠一秒
cul();
}
catch(erroFull &err)
{
err.ex();
}
return;
}
void resure()
{
return;
}
void passOut() //小车离开
{ FILE *out;
out = fopen("out.dat", "ab+");
try
{
if(flag==0) throw erroEmp();
double fee=0;
system("cls");
printStar();
cout<<"\t\t\t\t您进入了小车离开界面"<<endl;
cout<<"\t\t\t将要离开车的信息清单:"<<endl;
cout<<"\t车牌号码:\t"<<a[front]->carNum<<"\n\t车位号码:\t小车"<<a[front]->num<<"号\t\t\n\t停车时间:\t";
fprintf(out, "%s",a[front]->carNum);
fee=feep(&a[front]->timep)*5;
cout<<"\t应缴车费:\t"<<fee<<"元"<<endl;
fprintf(out, "%-6g",fee);
cout<<"___________________________________________________________________________";//打印线条
cout<<endl<<"备注:\t计费标准:每小时5元,不足半小时按半小时计算,超过半小时按一小时计算。"<<endl;
cout<<"\t本停车场共有20个车位,现共停"<<flag-1<<"个车位。"<<endl<<endl;
a[front]->carNum[10]=0;
front=(front+1)%PASS;
flag--;
cout<<endl<<"\t\t\t\t\t小车已离开成功,请按任意键返回!!"<<endl;
system("pause");
}
catch(erroEmp &err)
{
err.ex();
}
fprintf(out,"\n");
fclose(out);
}
void potOut() //大车离开
{ FILE *out;
out = fopen("out.dat", "ab+");
try
{
if(top==0) throw erroEmp();
double fee=0;
top--;
system("cls");
printStar();
cout<<"\t\t\t\t您进入了停车场离开界面"<<endl;
cout<<"\t\t\t将要离开车的信息清单:"<<endl;
cout<<"\t车牌号码:\t"<<b[top]->carNum<<"\n\t车位号码:\t大车"<<b[top]->num<<"号\t\t\n\t停车时间:\t";
fprintf(out, "%s",b[top]->carNum);
fee=feep(&b[top]->timep)*7; //计费公式,每小时7元
cout<<"\t应缴车费:\t"<<fee<<"元"<<endl;
fprintf(out, "%-6g",fee);
cout<<"___________________________________________________________________________" ;
cout<<endl<<"备注:\t计费标准:每小时7元,不足小时按半小时计算,超过半小时按一小时计算"<<endl;
cout<<"\t本停车场共有20个车位,现共停"<<top<<"个车位。"<<endl<<endl;
b[top]->carNum[10]=0;
cout<<endl<<"\t\t\t\t\t大车已离开成功.....请按任意键返回!!"<<endl;
system("pause");
}
catch(erroEmp &err)
{
err.ex();
}
fprintf(out,"\n");
fclose(out);
}
void searchNum() //查询车牌号码
{
char numCar[20];int i=0;flag=1;
cout<<"\t\t\t请输入车牌的数字部分:";
cin>>numCar;
if(strlen(numCar)==6)
{
for(;i<PASS;i++)
{
if (strcmp (a[i]->carNum,numCar)==0)
{
cout<<endl<<"\t\t\t车牌号为"<<numCar<<"的车子停在小车道"<<a[i]->num<<"位"<<endl;
flag=0;
}
}
if(flag)for(i=0;i<POT;i++)
{
if (strcmp (b[i]->carNum,numCar)==0){
cout<<endl<<"\t\t\t车牌号为"<<numCar<<"的车子停在大车道"<<b[i]->num<<"位"<<endl;
flag=0;
}
}
if(flag) cout<<endl<<"该汽车未停在本停车场!"<<endl;
system("pause");
}
else
cout<<"请规范化车牌!!"<<endl;
}
void searchPot() //按车wei查找函数
{
int potCar, nn;
cout<<"\t\t操作说明:按照停车类型加位置来输入所要查找的车位信息\n\t\t如:大车10号位,即输入110。大车三号位,103。小车5号位,205"<<endl;
cout<<"\t\t请输入您需要查找的序数:";
cin>>potCar;
if((potCar<121&&potCar>100)||(potCar<221&&potCar>200))
{
if(potCar/100==1)
{
nn=potCar%100-1;
if(b[nn]->carNum[10]==0) cout<<"\t\t您所查询的车位没有停车"<<endl;
else cout<<"停车场"<<nn<<"车位停车的车牌号是:"<<b[nn]->carNum<<endl;
}
if(potCar/100==2)
{
nn=potCar%100-1;
if(a[nn]->carNum[10]==0) cout<<"\t\t您所查询的车位没有停车"<<endl;
else cout<<"便车道"<<nn<<"车位停车的车牌号是:"<<a[nn]->carNum<<endl;
}
}
else cout<<"\t\t您所输入的数字不正确!"<<endl;
system("pause");
}
void search() //号码查询
{
int choice=-1;
if(top==0&&flag==0) throw erroEmp();
for(;;)
{
system("cls");
system("color F0");
printStar();
cout<<"\t\t\t\t您进入了号码查询界面"<<endl<<endl;
printLine();
cout<<"\t\t\t|1.根据车牌号码查询\t\t |"<<endl; //打印两个空格
printLine();
cout<<"\t\t\t|2.直接查询指定车位\t\t |"<<endl;
printLine();
cout<<"\t\t\t|3.返回\t\t\t|"<<endl;
printLine();
printStar();
cout<<"\t\t请输入您的选项< 1-3 >:";
cin>>choice;
switch(choice)
{
case 1:searchNum();break;
case 2:searchPot();break;
case 3:break;
default:system("color Fc");
cout<<endl<<"\t\t\t\t输入格式不正确!"<<endl;
_sleep(1000);break;
}
if(choice==3)break;
}
return;
}
private:
int flag,front,rear,top,base; //设置访问栈和队列
passLot* a[PASS]; //以顺序方式存储栈和队列,并且都设为20个车位
potLot* b[POT];
tm* local,*nowp;
time_t now; //设置时间型变量
}; //停车场类结束
void password() /*密码*/
{
system("color 0A");
int a;
int i=0;
char s1[6]={"admin"};
char s2[6];
char ch;
do
{ if(i<3)
{
print
展开阅读全文