/*
* Copyright (c)2016,烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:lalala
* 作 者:臧新晓
* 完成日期:2016年12月30日
* 版 本 号:v1.0
* 问题描述:立体车库管理系统
* 输入描述:无
* 程序输出:测试数据
*/
//dingyi.h
#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 ShowStarB();//展示界面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[],Date date);//修改当前的当天的链表 cl
void SaveListTemp(CustList *cl);//将链表的信息保存到历史文件today.dat中
void SaveList(CustList *cl);//保存历史信息至文件
void DeleteAll(CustList *cl);//删除链表
void LoadList(CustList *clr);//加载历史文件
//main.cpp
#include "dingyi.h"
int main()
{
system("color 71");
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)
{
ShowStarB();
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;
}
//jiemian.cpp
#include"dingyi.h"
void Welcome()
{
int i;
char choice;
for(i=1;i<=160;i++)
cout<<"\004";
cout<<endl;
cout<<" 立体停车场管理系统 "<<endl;
cout<<endl;
cout<<" 制作人:Zang xinxiao "<<endl;
cout<<endl;
cout<<" 班级: 计156-2 "<<endl;
cout<<endl;
for(i=1;i<=160;i++)
cout<<"\003";
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 ShowStarB()
{
cout<<"********************************************************************************"<<endl;
cout<<" 欢迎进入停车场系统 "<<endl;
cout<<endl;
cout<<"********************************************************************************"<<endl;
}
void ShowStarC()
{
cout<<"********************************************************************************"<<endl;
cout<<" 你好!顾客 "<<endl;
cout<<endl;
cout<<"********************************************************************************"<<endl;
}