<pre name="code" class="cpp">/***************************************** *版权所有(C)2015.LiHao * *文件名称main.cpp *文件标识:无 *内容摘要:该项目的主函数文件 *其他说明:无 *当前版本:V1.0 *作者:李浩 *完成日期:20151224 * *修改记录:无 *修改日期:20151224 *版本号:V1.0 *修改人:lihao *修改内容:无 *****************************************/ #include"liti.h" /***************************************** *功能描述:统筹全局以及全部函数的调用 *输入参数:是否进入系统 *输出参数:系统界面 *返回值:无 *其他声明:无 *****************************************/ int main() { system("color f3"); Welcome(); //初始化还没有出库的车 Car cars[FLOOR][PNUMBER]; int i,j; for(i=0;i<FLOOR;i++) { for(j=0;j<PNUMBER;j++) { cars[i][j].floor =0; cars[i][j].pnumber=0; cars[i][j].ptime=0; cars[i][j].empty=0; strcpy(cars[i][j].license ,"0"); } } Load(cars);//加载最初的四辆车 //加载历史文件 CustList *cl,*clr;//cl保存当天的修改信息,clr保存以前的历史信息,当推出程序时,自动把当天信息cl修改的动态历史保存到clr中 InitCustList1(cl,cars);//cl保存当天的修改信息 InitCustList(clr);//保留历史文件list.txt的内容 while(1) { ShowStarM(); cout<<"1 客户界面"<<endl; cout<<"2 车管界面"<<endl; cout<<"3 退出整个程序"<<endl; cout<<"请选择:"; cin>>i; if(i<1||i>3) { cout<<"您的操作非法!!!"<<endl; continue; } system ("cls"); switch(i) { case 1: { Customer(cars,cl); SaveList(cl); SaveListTemp(cl); } break; case 2: { LoadList(clr); Manage(cars,cl,clr); } break; case 3: { SaveList(cl); SaveListTemp(cl); } exit(-1); } } return 0; } /***************************************** *版权所有(C)2015.LiHao * *文件名称liti.h *文件标识:无 *内容摘要:该项目定义的各种数据的结构体以及各种函数的定义 *其他说明:无 *当前版本:V1.0 *作者:李浩 *完成日期:20151224 * *修改记录:无 *修改日期:20151224 *版本号:V1.0 *修改人:lihao *修改内容:无 *****************************************/ #include <iostream> #include <string.h> #include <stdio.h> #include <stdlib.h>//standard library标准库文件 #include <time.h>//得到当前时间的头文件 #define FLOOR 2 //全局变量定义两层楼 #define PNUMBER 6//全局变量定义每层楼有六个车位 using namespace std; struct Car//定义每辆车的结构体 { char license[8];//车牌号 int floor;//楼层 int pnumber;//对应楼层的车位 int ptime;//停车时间 int empty;//标志位,有车为1,无车为0 }; struct Date//时间结构体 { char day[11];//日期 char shike[9];//时间 char weekday[10];//星期几 }; typedef struct Snode//节点的结构体 { char license[8];//车牌号 Date date;//停车的时刻 Date dateleave;//车离开的的时刻 int floor;//楼层 int pnumber;//对应车位 int ptimecount;//本次停车总时间 float cost;//停车费 Snode *next; }CustList; struct User//管理员结构体 { char id[10];//账户 char name[10];//姓名 char password[10];//密码 }; void Welcome();//欢迎界面 void ShowStarA();//展示界面a void ShowStarM();//展示界面b void ShowStarC();//展示界面c int Enterpark(Car cars[FLOOR][PNUMBER],char *license,int &floor,int &pnumber);//存车函数 void Savecars(Car cars[FLOOR][PNUMBER]);//保存车辆信息 bool IsEmpty(Car cars[FLOOR][PNUMBER]);//取车时判断车场是否为空 bool IsFull(Car cars[FLOOR][PNUMBER]);//存车时判断车场是否为空 bool IsSame(Car cars[FLOOR][PNUMBER],char *license);//查看存的车牌号是否存在 void Print(char license[],int floor,int pnumber,int ptime,float &cost);//输出 收费后 个人 凭据 void Leavepark(Car cars[FLOOR][PNUMBER],char license[],int &floor,int &pnumber,int &ptime);//取车函数 int CarOutMenu(char license[],int &floor,int &pnumber,int &ptime,float &cost,char note[100]);//取车的菜单项 void Customer(Car cars[FLOOR][PNUMBER],CustList *cl);//顾客界面 void Manage(Car cars[FLOOR][PNUMBER],CustList *cl,CustList *clr);//后台程序 void GetDate(Date &date);//得到当前时间 int UsertestAdd();//登陆界面或者注册用户 void Load(Car cars[FLOOR][PNUMBER]);//加载初始化的四辆汽车 void Loadfile(Car cars[FLOOR][PNUMBER],char license[8],int floor,int pnumber,int ptime,int empty);//加载每一个停车位的状态 void Showcars(Car cars[FLOOR][PNUMBER],CustList *cl);//展示现有汽车停车信息 void Message(CustList *clr);//历史停车信息 void MessageIntoFile(char note[100],char license[8]);//保存信息至文件 void CheckOneCar(CustList *clr,char *license);//查找某一车辆的停车信息 void InitCustList(CustList *&cl);//初始化链表 void InitCustList1(CustList *&cl,Car cars[FLOOR][PNUMBER]);//建立链表保存信息 void InsertToFirst(CustList *cl,char *license,int floor,int pnumber,Date date);//头插法,插入节点 void InsertToLst(CustList *cl,char *license,int floor,int pnumber,int ptime,float cost,Date date,Date dateleave);//从文件中读出时,尾差法,使得时间降序排列 void SearchUpdate(CustList *&cl,char *license,float cost,int ptimecount,char note[]);//修改当前的当天的链表 cl void SaveListTemp(CustList *cl);//将链表的信息保存到历史文件today.dat中 void SaveList(CustList *cl);//保存历史信息至文件 void DeleteAll(CustList *cl);//删除链表 void LoadList(CustList *clr);//加载历史文件 /***************************************** *版权所有(C)2015.LiHao * *文件名称liti.cpp *文件标识:无 *内容摘要:该项目的所有函数的具体内容 *其他说明:无 *当前版本:V1.0 *作者:李浩 *完成日期:20151224 * *修改记录:无 *修改日期:20151224 *版本号:V1.0 *修改人:lihao *修改内容:无 *****************************************/ #include"liti.h" void Welcome() { int i; char choice; for(i=1;i<=160;i++) cout<<"\003"; cout<<endl; cout<<" **************** 立体停车场管理系统 **************** "<<endl; cout<<endl; cout<<" ********** 制作人:李浩 ********** "<<endl; cout<<endl; cout<<" ****** 班级:146-2 ****** "<<endl; cout<<endl; cout<<"********************************************************************************"<<endl; cout<<" 是否进入该系统(Y/N)? "<<endl; cin>>choice; while(1) { if(choice=='Y'||choice=='y') { for(i=0;i<100000000;i++); system ("cls");//清屏 break; } else if(choice=='N'||choice=='n') exit(0); else { cout<<"请做出正确的选择!"<<endl; cin>>choice; } } } void ShowStarA() { cout<<"********************************************************************************"<<endl; cout<<" 欢迎进入管理员界面 "<<endl; cout<<endl; cout<<"********************************************************************************"<<endl; } void ShowStarM() { cout<<"********************************************************************************"<<endl; cout<<" 欢迎进入停车场系统 "<<endl; cout<<endl; cout<<"********************************************************************************"<<endl; } void ShowStarC() { cout<<"********************************************************************************"<<endl; cout<<" 你好!顾客 "<<endl; cout<<endl; cout<<"********************************************************************************"<<endl; } /***************************************** *功能描述:用顺序查找的方式进行某一辆车的查找 *输入参数:无 *输出参数:无 *返回值:无 *其他声明:完成单独查找某一辆车的历史信息 *****************************************/ void CheckOneCar(CustList *clr,char *license) { if(!license||!clr) return; CustList *p; p=clr->next ; cout<<endl; cout<<"\t\t--------停车历史信息--------"<<endl; cout<<endl; cout.setf(ios::left); cout.width(8); cout<<"车牌"; cout.width(8); cout<<"楼层号"; cout.width(8); cout<<"车位号"; cout.width(10); cout<<"停车时间"; cout.width(8); cout<<"消费"<<endl; while(p) { if(strcmp(p->license,license)==0) { cout<<endl; cout<<"----------------------------------------------------------------------"<<endl; cout<<" 进库时间:"<<p->date.day<<" "<<p->date.shike<<" "<<p->date.weekday<<endl; cout.setf(ios::left); cout.width(8); cout<<p->license; cout.width(8); cout<<p->floor; cout.width(8); cout<<p->pnumber; cout.width(10); cout<<p->ptimecount; cout.width(8); cout<<p->cost; cout<<endl; if(p->date.day ==p->dateleave.day &&p->date.shike ==p->dateleave.shike &&p->date.weekday ==p->dateleave.weekday ) cout<<" 出库时间: 未知"<<endl; else cout<<" 出库时间:"<<p->dateleave.day<<" "<<p->dateleave.shike<<" "<<p->dateleave.weekday<<endl; cout<<endl; } p=p->next ; } } /***************************************** *功能描述:所有的历史停车信息 *输入参数:无 *输出参数:无 *返回值:无 *其他声明:无 *****************************************/ void Message(CustList *clr) { cout<<endl; cout<<"\t\t--------停车历史信息--------"<<endl; cout<<endl; Snode *p=clr->next; cout.setf(ios::left); cout.width(8); cout<<"车牌"; cout.width(8); cout<<"楼层号"; cout.width(8); cout<<"车位号"; cout.width(10); cout<<"停车时间"; cout.width(8); cout<<"消费"<<endl; while(p) { cout<<"----------------------------------------------------------------------"<<endl; cout<<" 进库时间:"<<p->date.day<<" "<<p->date.shike<<" "<<p->date.weekday<<endl; cout.setf(ios::left); cout.width(8); cout<<p->license; cout.width(8); cout<<p->floor; cout.width(8); cout<<p->pnumber; cout.width(10); cout<<p->ptimecount; cout.width(8); cout<<p->cost; cout<<endl; if(p->date.day ==p->dateleave.day &&p->date.shike ==p->dateleave.shike &&p->date.weekday ==p->dateleave.weekday ) cout<<" 出库时间: 未知"<<endl; else cout<<" 出库时间:"<<p->dateleave.day<<" "<<p->dateleave.shike<<" "<<p->dateleave.weekday<<endl; cout<<endl; p=p->next; } cout<<endl; } //加载历史文件 void LoadList(CustList *clr) { DeleteAll(clr); FILE *fp=fopen("history.txt","rb"); if (fp==NULL) return; int n; Snode p; while(!feof(fp)) { n=fread(&p,sizeof(p),1,fp); if(n!=1) break; InsertToLst(clr,p.license,p.floor,p.pnumber,p.ptimecount,p.cost,p.date,p.dateleave ); } fclose(fp); } //获得尾巴以便于使时间降序排列输出停车信息 Snode* GetTail(CustList *cl) { Snode *p=cl; while(p->next) p=p->next; return p; } /***************************************** *功能描述:从文件中读出时,尾插法,使得时间降序排列 *输入参数:无 *输出参数:无 *返回值:无 *其他声明:辅助查取历史信息功能的实现 *****************************************/ void InsertToLst(CustList *cl,char *license,int floor,int pnumber,int ptime,float cost,Date date,Date dateleave) { Snode *s; s=new Snode; strcpy(s->license,license); s->floor=floor; s->pnumber=pnumber; s->ptimecount=ptime; s->cost=cost; s->date =date; s->dateleave =dateleave; s->next=NULL; Snode *q=GetTail(cl); q->next=s; } //删除链表 void DeleteAll(CustList *cl) { Snode *p=cl->next; Snode *q=NULL; while(p) { q=p; p=p->next; delete q; } cl->next=p; } //将链表的信息保存到历史文件today.dat中 void SaveListTemp(CustList *cl) { FILE* fp = fopen("today.txt","ab"); if(fp==NULL) { FILE* fp = fopen("today.txt","wb"); } Snode *p=cl->next; Snode q; while(p) { strcpy(q.license,p->license); q.cost=p->cost; q.floor=p->floor; q.pnumber=p->pnumber; q.date =p->date ; q.dateleave =p->dateleave ; q.ptimecount=p->ptimecount; fwrite(&q,sizeof(q),1,fp); p=p->next; } fclose(fp); } void SaveList(CustList *cl)//保存历史信息至文件 { FILE* fp = fopen("history.txt","ab"); if(fp==NULL) { FILE* fp = fopen("history.txt","wb"); } Snode *p=cl->next; Snode q; while(p) { strcpy(q.license,p->license); q.cost=p->cost; q.floor=p->floor; q.pnumber=p->pnumber; q.dateleave =p->dateleave; q.date =p->date ; q.ptimecount=p->ptimecount; fwrite(&q,sizeof(q),1,fp); p=p->next; } fclose(fp); } //初始化 void InitCustList(CustList *&cl) { cl=new CustList; cl->next=NULL; cl->floor =0; cl->pnumber =0; cl->ptimecount =0; cl->cost =0; } /***************************************** *功能描述:头插法,插入节点,以便于保存数据 *输入参数:无 *输出参数:无 *返回值:无 *其他声明:只是将之前的信息进行复制,转到链表的形式进行保存 *****************************************/ void InsertToFirst(CustList *cl,char *license,int floor,int pnumber,Date date) { if(license==NULL) return; Snode *c=new Snode; strcpy(c->license,license); c->floor=floor; c->pnumber=pnumber; c->dateleave =date; strcpy(c->date.day,date.day); strcpy(c->date.shike,date.shike); strcpy(c->date.weekday,date.weekday); c->ptimecount =0; c->cost =0; c->next = cl->next; cl->next = c ; } void MessageIntoFile(char note[100],char license[8])//保存信息至文件 { FILE* fp = fopen("message.txt","ab"); if(fp==NULL) { FILE* fp = fopen("message.txt","wb"); } Date date1; GetDate(date1); } /***************************************** *功能描述:存车 *输入参数:车牌号以及车位位置 *输出参数:存车成功 *返回值:1 *其他声明:无 *****************************************/ int Enterpark(Car cars[FLOOR][PNUMBER],char *license,int &floor,int &pnumber) { cout<<endl; //输入车牌号,判断车牌号的有效性 cout<<"请输入7标准位车牌号:"; char licen[8]; cin>>licen; cout<<endl; while((!licen)||(strlen(licen)!=7)) { cout<<"输入有误! "; cout<<"请输入正确的7位车牌号:"; cin>>licen; } //查看是否有重复 while(1) { if(IsSame(cars,licen)==1) { cout<<"已经存在这辆车,请重新输入7标准位车牌号:"<<endl; cin>>licen; } else break; } int i,j; if(IsFull(cars)==1) { cout<<"已经没有空车位了,谢谢惠顾!正在跳转到顾客界面。。。"<<endl; return 0; } int sign=1;//sign 标志第几层有空位0表一,1表二 cout<<"您可以选择的车位"<<endl; cout<<"----------------------------"<<endl; cout.setf(ios::left); cout.width(8); cout<<"楼层"; cout.width(8); cout<<"车位号"; cout<<endl; for(i=0;i<FLOOR;i++) { if(sign==0) break; for(j=0;j<PNUMBER;j++) { if((cars[i][j].empty==0)&&(i==0)) { sign=0; cout.setf(ios::left); cout.width(8); cout<<i+1; cout.width(8); cout<<j+1<<endl; if(j==PNUMBER-1) {break;} } else if((cars[i][j].empty==0)&&(i==1)) { cout.setf(ios::left); cout.width(8); cout<<i+1; cout.width(8); cout<<j+1<<endl; } } } cout<<"----------------------------"<<endl; int temf; cout<<"请输入车位号:"; cin>>temf; while(1) { if((cars[sign][temf-1].empty==0)&&(temf>=1&&temf<=6)) { //修改一个车位的信息 cars[sign][temf-1].empty=1; floor=cars[sign][temf-1].floor=sign+1; pnumber=cars[sign][temf-1].pnumber=temf; strcpy(cars[sign][temf-1].license,licen); strcpy(license,licen); cars[sign][temf-1].ptime=0; //修改整个停车场的信息 for(i=0;i<FLOOR;i++) { for(j=0;j<PNUMBER;j++) { if(cars[i][j].empty==1) cars[i][j].ptime+=5; } } break; } else { cout<<"该车位已经存入车辆!请您重新选择车位号:"; cin>>temf; } } return 1; } /***************************************** *功能描述:取车 *输入参数:要取车辆的车牌号 *输出参数:可随机选择是否输出数据 *返回值:无 *其他声明:无 *****************************************/ void Leavepark(Car cars[FLOOR][PNUMBER],char license[],int &floor,int &pnumber,int &ptime) { //判断车位是否已空 if(IsEmpty(cars)==1) { cout<<"停车场已没有车停放!请确定您是否停车。"<<endl; return; } //查找车位 int sign=1;//标志位,车库有该车为1,没有赋值为零,初始值为0 int i,j; while(sign) { for(i=0;i<FLOOR;i++) { for(j=0;j<PNUMBER;j++) { if(strcmp(cars[i][j].license,license)==0) { sign=0; floor=i; pnumber=j; ptime=cars[i][j].ptime; } } } if(sign) { cout<<"您刚才输入的车牌号不存在!"<<endl; cout<<"请重新输入:"; cin>>license; } } if(sign==0) cout<<"车已找到,请稍等。。。"<<endl; cout<<endl; floor+=1; pnumber+=1; for(i=0;i<100000000;i++); cars[floor-1][pnumber-1].floor =0; cars[floor-1][pnumber-1].pnumber =0; cars[floor-1][pnumber-1].ptime=0; cars[floor-1][pnumber-1].empty=0; strcpy(cars[floor-1][pnumber-1].license," "); } //取车的菜单项 int CarOutMenu(char license[],int &floor,int &pnumber,int &ptime,float &cost,char note[100]) { cout<<"1 输出凭据"<<endl; cout<<"2 直接返回主页"<<endl; int p=0;//标志,若已经输出过凭据,则置为1 int j=0; int i=0; //计算费用 cost=ptime*float (0.2); while(1) { cout<<"请选择:"; int i; cin>>i; if(i<1||i>3) { cout<<"您的操作非法!!!"<<endl; continue; } switch(i) { case 1: { p=1; cout<<endl; cout<<"\t\t--------本辆汽车停车信息--------"<<endl; cout<<endl; Print(license,floor,pnumber,ptime,cost); break; } } if(i==1) continue; else { j=1; break; } } return j; } //得到当前时间 void GetDate(Date &date) { time_t t = time( 0 ); char str[31]; strftime(str, sizeof(str), "%Y/%m/%d %X %A",localtime(&t) ); int sign=1,j=0,k=0,l=0; for(int i=0;i<31;i++) if(sign==1) { if(str[i]==' ') {sign=2;continue;} else { date.day[j]=str[i]; j++; } } else if(sign==2) { if(str[i]==' ') {sign=3;continue;} else { date.shike[k]=str[i]; k++; } } else if(sign==3) { if(str[i]=='\0') break; else { date.weekday[l]=str[i]; l++; } } date.day[j]='\0'; date.shike[k]='\0'; date.weekday[l]='\0'; } //判断车场是否为空 bool IsEmpty(Car cars[FLOOR][PNUMBER]) { int i,j; for(i=0;i<FLOOR;i++) for(j=0;j<PNUMBER;j++) if(cars[i][j].empty==1) return false; return true; } //判断车场是否为空 bool IsFull(Car cars[FLOOR][PNUMBER]) { int i,j; for(i=0;i<FLOOR;i++) for(j=0;j<PNUMBER;j++) if(cars[i][j].empty==0) return false; return true; } //查看存的车牌号是否存在 bool IsSame(Car cars[FLOOR][PNUMBER],char *license) { int i,j; for(i=0;i<FLOOR;i++) for(j=0;j<PNUMBER;j++) if(strcmp(cars[i][j].license,license)==0) return true; return false; } //逐条添加记录到car.dat中 void Savecars(Car cars[FLOOR][PNUMBER]) { FILE* fp = fopen("car.txt","wb"); if(fp==NULL) { cout<<"Can not open this file"<<endl; return; } Car car; int i=0; while(i<FLOOR) { int j=0; while(j<PNUMBER) { if(cars[i][j].empty ==1) { car.floor =cars[i][j].floor ; strcpy(car.license ,cars[i][j].license ); car.pnumber =cars[i][j].pnumber ; car.ptime =cars[i][j].ptime ; car.empty=cars[i][j].empty ; fwrite(&car,sizeof(car),1,fp); } j++; } i++; } fclose(fp); } //加载初始化的四辆汽车 void Load(Car cars[FLOOR][PNUMBER]) { FILE* fp = fopen("car1.txt","rb"); if(fp==NULL) { cout<<"不能自动加载 can not open car1.txt"<<endl; return; } Car car; int n; while(!feof(fp)) { n = fread(&car,sizeof(car),1,fp); if(n!=1) break; Loadfile(cars,car.license ,car.floor,car.pnumber ,car.ptime ,car.empty ); } fclose(fp); } //加载每一个停车位的状态 void Loadfile(Car cars[FLOOR][PNUMBER],char license[8],int floor,int pnumber,int ptime,int empty ) { if(!license) return; if(floor>FLOOR||pnumber>PNUMBER) return; strcpy(cars[floor-1][pnumber-1].license,license); cars[floor-1][pnumber-1].floor =floor; cars[floor-1][pnumber-1].pnumber =pnumber; cars[floor-1][pnumber-1].ptime =ptime; cars[floor-1][pnumber-1].empty =empty; } //输出 收费后 个人 凭据 void Print(char license[],int floor,int pnumber,int ptime,float &cost) { cout.setf(ios::left); cout.width(8); cout<<"车牌"; cout.width(8); cout<<"楼层"; cout.width(8); cout<<"车位号"; cout.width(8); cout<<"停车时间"; cout.width(8); cout<<"消费"<<endl; cout.setf(ios::left); cout.width(10); cout<<license; cout.width(8); cout<<floor; cout.width(8); cout<<pnumber; cout.width(8); cout<<ptime; cout.width(8); cout<<cost<<endl; } void Showcars(Car cars[FLOOR][PNUMBER])//展示现有汽车停车信息 { cout<<endl; cout<<"\t\t--------现有汽车停车信息--------"<<endl; cout<<endl; int i,j; cout.setf(ios::left); cout.width(8); cout<<"车牌"; cout.width(8); cout<<"楼层"; cout.width(8); cout<<"车位号"; cout.width(8); cout<<"停车时间"<<endl; for(i=0;i<FLOOR;i++) { for(j=0;j<PNUMBER;j++) { if(cars[i][j].empty==1) { cout.setf(ios::left); cout.width(8); cout<<cars[i][j].license; cout.width(8); cout<<cars[i][j].floor; cout.width(8); cout<<cars[i][j].pnumber; cout.width(8); cout<<cars[i][j].ptime<<endl; } } } } /***************************************** *功能描述:登陆界面或者注册用户 *输入参数:账户以及密码 *输出参数:进入管理系统 *返回值:0和1 *其他声明:无 *****************************************/ int UsertestAdd() { //simple登陆验证和注册用户功能 User UserArr[10]={"123456789","李浩","123456789"};//默认用户 int count=0;//统计输入用户名和密码错误次数 int i=0;//遍历变量或找到用户的ID int k=1;//表示已存在的用户数 while(1) { int n=0;//标识是否匹配,若匹配,则退出外循环 cout<<"请输入您的管理账号"<<endl; char id[10]; cin>>id; cout<<"请输入密码"<<endl; char password[10]; cin>>password; for(i=0;i<10;i++) { if(!strcmp(UserArr[i].id,id)&&!strcmp(UserArr[i].password,password)) { n=1; break; } } if(n) { break; } i=0; count++; cout<<"密码或账号错误,"; if(count==2||k==2) { cout<<"您今天已累计输错"<<count<<" 次-"; cout<<"您是否要注册用户?(否则您将自动退出系统)"<<endl; cout<<endl; cout<<"输入数字1表示同意注册,其他则表示不同意条款"<<endl; int tip=0; cin>>tip; if(tip==1) {cout<<"输入注册密码(知道此密码,才有权注册管理员):"; char str[6]; cin>>str; if(strcmp(str,"666666")==0) { if(k==2) { cout<<"很遗憾,系统管理员用户总数达到上限,无法注册,若需注册,请联系管理员"<<endl; return 0; } else{ cout<<"请输入要注册账号"<<endl; char id[10]; cin>>id; strcpy(UserArr[k+1].id ,id); cout<<"请输入您的姓名"<<endl; char name[10]; cin>>name; strcpy(UserArr[k+1].name ,name); cout<<"请输入您的密码"<<endl; char password[10]; cin>>password; strcpy(UserArr[k+1].password ,password); system ("cls"); cout<<"注册成功,系统正在为您跳转到登陆界面"<<endl; int j=0; while(j<1000000000){j++;} cout<<endl; ++k; ShowStarA(); } }else return 0; } } } cout<<endl; cout<<"*******************************************"<<endl; cout<<"欢迎进 "<<UserArr[i].name <<" 入停车场后台管理系统"<<endl; cout<<"*******************************************"<<endl; cout<<endl; return 1; } //顾客界面 void Customer(Car cars[FLOOR][PNUMBER],CustList *cl) { ShowStarC(); int j; int sign; while(1) { cout<<"1 存车"<<endl; cout<<"2 取车"<<endl; cout<<"3 返回主页"<<endl; cout<<"请选择:"; int i; char a; cin>>i; if(i<1||i>3) { cout<<"您的操作非法!!!"<<endl; continue; } if(i==1||i==2) { switch(i) { case 1: { system ("cls"); ShowStarC(); cout<<" \t欢迎停车!"<<endl; char license[8]; int floor,pnumber; sign=Enterpark(cars,license,floor,pnumber); //车辆入库 Date date; GetDate(date); InsertToFirst(cl,license,floor,pnumber,date); //修改当天的链表 Savecars(cars);//修改当前的当天的car.txt文件 if(sign==1) { cout<<"退出?(Y:是,N:否)"<<endl; cout<<"请输入:"; cin>>a; } } break; case 2: { system ("cls"); ShowStarC(); cout<<"\t欢迎取车!"<<endl; cout<<endl; int floor,pnumber; int ptime=0; float cost; cout<<"请输入您的车牌号:"; char licen[8]; cin>>licen; cout<<endl; Leavepark(cars,licen,floor,pnumber,ptime); char note[100]="0"; j=CarOutMenu(licen,floor,pnumber,ptime,cost,note); SearchUpdate(cl,licen,cost,ptime,note); Savecars(cars); if(j==1) return; break; } } } else { system ("cls"); break; } if(a=='Y') { system ("cls"); break; } if(sign==0) { for(i=0;i<1000000000;i++); system ("cls"); break; } } } //修改当前的当天的链表 cl void SearchUpdate(CustList *&cl,char *license,float cost,int ptimecount,char note[]) { Snode *p; p=cl->next; while(p) { if(strcmp(p->license,license)==0) { p->cost=cost; p->ptimecount=ptimecount; if(strcmp(note,"0")!=0) MessageIntoFile(note,license); Date date1; GetDate(date1); cl->dateleave =date1; return; } p=p->next; } } //后台程序 void Manage(Car cars[FLOOR][PNUMBER],CustList *cl,CustList *clr) { ShowStarA(); int sign =UsertestAdd(); if(sign==0) return; else { while(1) { cout<<endl; cout<<"1 显示当前的停车场的车辆信息"<<endl; cout<<"2 显示当前时刻所有历史停车信息"<<endl; cout<<"3 查找某一车辆的历史停车信息"<<endl; cout<<"0 退出管理返回主页面"<<endl; cout<<"请选择:"; int i; char a; cin>>i; if(i<0||i>6) { cout<<"您的操作非法!!!"<<endl; continue; } if(i>=1&&i<7) { switch(i) { break; case 1: { system ("cls"); ShowStarA(); Showcars(cars); break; } case 2: { system ("cls"); ShowStarA(); Message(clr); break; } case 3: { system ("cls"); ShowStarA(); cout<<"请您输入车牌号:"; char license[8]; cin>>license; CheckOneCar(clr,license); break; } } if(a=='Y'||a=='y') { system ("cls"); break; } } else { SaveListTemp(cl); SaveList(cl); system ("cls"); break; } } } } /***************************************** *功能描述:建立头结点为保存文件做基础 *输入参数:无 *输出参数:无 *返回值:无 *其他声明: *****************************************/ void InitCustList1(CustList *&cl,Car cars[FLOOR][PNUMBER]) { Date date1; //建立头结点 cl=new CustList; cl->next=NULL; cl->floor =0; cl->pnumber =0; cl->ptimecount =0; cl->cost =0; int i,j; for(i=0;i<FLOOR;i++) { for(j=0;j<PNUMBER;j++) { if(cars[i][j].empty==1) { GetDate(date1); InsertToFirst(cl,cars[i][j].license ,cars[i][j].floor ,cars[i][j].pnumber,date1); } } } }
运行图