数据结构课程设计--立体停车场管理系统(改)

/* 
* Copyright (c)2016,烟台大学计算机与控制工程学院 
* All rights reserved. 
* 文件名称:lalala 
* 作    者:臧新晓 
* 完成日期:2016年12月30日 
* 版 本 号:v1.0 
* 问题描述:立体车库管理系统
* 输入描述:无 
* 程序输出:测试数据 
*/  


 

//dingyi.h
#include   
#include   
#include   
#include //standard library标准库文件  
#include //得到当前时间的头文件  
#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>i;  
        if(i<1||i>3)  
        {  
            cout<<"您的操作非法!!!"<


 

//jiemian.cpp
#include"dingyi.h"  
void Welcome()  
{  
    int i;  
    char choice;  
    for(i=1;i<=160;i++)  
        cout<<"\004";  
    cout<>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<<"请做出正确的选择!"<>choice;  
            }  
    }  
}  
void ShowStarA()  
{  
    cout<<"********************************************************************************"<next;  
    cout<license,license)==0)  
        {  
            cout<date.day<<" "<date.shike<<" "<date.weekday<license;  
            cout.width(8);  
            cout<floor;  
            cout.width(8);  
            cout<pnumber;  
            cout.width(10);  
            cout<ptimecount;  
            cout.width(8);  
            cout<cost;  
            cout<date.day,p->dateleave.day)==0&&strcmp(p->date.shike,p->dateleave.shike)==0 &&strcmp(p->date.weekday,p->dateleave.weekday)==0 )  
                cout<<"                                        出库时间: 未知"<dateleave.day<<" "<dateleave.shike<<" "<dateleave.weekday<next ;  
    }  
}  
/***************************************** 
*功能描述:所有的历史停车信息 
*输入参数:无 
*输出参数:无 
*返回值:无 
*其他声明:无 
*****************************************/  
  
void Message(CustList *clr)  
{  
    cout<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<<"消费"<date.day<<" "<date.shike<<" "<date.weekday<license;  
        cout.width(8);  
        cout<floor;  
        cout.width(8);  
        cout<pnumber;  
        cout.width(10);  
        cout<ptimecount;  
        cout.width(8);  
        cout<cost;  
        cout<date.day,p->dateleave.day)==0&&strcmp(p->date.shike,p->dateleave.shike)==0 &&strcmp(p->date.weekday,p->dateleave.weekday)==0 )  
            cout<<"                                        出库时间: 未知"<dateleave.day<<" "<dateleave.shike<<" "<dateleave.weekday<next;  
    }  
    cout<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<>licen;  
    cout<>licen;  
    }  
    //查看是否有重复  
    while(1)  
    {  
        if(IsSame(cars,licen)==1)  
        {  
            cout<<"已经存在这辆车,请重新输入7标准位车牌号:"<>licen;  
        }  
        else break;  
    }  
    int i,j;  
    if(IsFull(cars)==1)  
    {  
        cout<<"已经没有空车位了,谢谢惠顾!正在跳转到顾客界面。。。"<>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>temf;  
        }  
    }  
    return 1;  
  
}  
/***************************************** 
*功能描述:取车 
*输入参数:要取车辆的车牌号 
*输出参数:可随机选择是否输出数据 
*返回值:无 
*其他声明:无 
*****************************************/  
  
void Leavepark(Car cars[FLOOR][PNUMBER],char license[],int &floor,int &pnumber,int &ptime)  
{  
    //判断车位是否已空  
    if(IsEmpty(cars)==1)  
    {  
        cout<<"停车场已没有车停放!请确定您是否停车。"<>license;  
        }  
    }  
    if(sign==0)  
    cout<<"车已找到,请稍等。。。"<>i;  
        if(i<1||i>3)  
        {  
            cout<<"没有此项操作!!!"<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<<"消费"<>id;  
        cout<<"请输入密码"<>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<<"您今天已累计输错"<>tip;  
            if(tip==1)  
            {cout<<"输入注册密码(知道此密码,才有权注册管理员):";  
            char str[6];  
            cin>>str;  
            if(strcmp(str,"666666")==0)  
            {  
                if(k==2)  
                {  
                    cout<<"很遗憾,系统管理员用户总数达到上限,无法注册,若需注册,请联系管理员"<>id;  
                    strcpy(UserArr[k+1].id ,id);  
                    cout<<"请输入您的姓名"<>name;  
                    strcpy(UserArr[k+1].name ,name);  
                    cout<<"请输入您的密码"<>password;  
                    strcpy(UserArr[k+1].password ,password);  
                    system ("cls");  
                    cout<<"注册成功,系统正在为您跳转到登陆界面"<>i;  
        if(i<1||i>3)  
        {  
            cout<<"您的操作非法!!!"<>a;  
                    }  
                }  
            break;  
            case 2:  
                {  
                    system ("cls");  
                    ShowStarC();  
                    cout<<"\t欢迎取车!"<>licen;  
                    cout<next;  
    while(p)  
    {  
        if(strcmp(p->license,license)==0)  
        {  
            p->cost=cost;  
            p->ptimecount=ptimecount;  
            if(strcmp(note,"0")!=0)  
                MessageIntoFile(note,license);  
			p->dateleave=date;
			strcpy(p->dateleave.day,date.day);  
			strcpy(p->dateleave.shike,date.shike);  
			strcpy(p->dateleave.weekday,date.weekday);
            cout<dateleave.day;
            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<>i;  
        if(i<0||i>6)  
        {  
            cout<<"您的操作非法!!!"<=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


 

 

运行结果:

数据结构课程设计--立体停车场管理系统(改)_第1张图片

数据结构课程设计--立体停车场管理系统(改)_第2张图片

数据结构课程设计--立体停车场管理系统(改)_第3张图片

数据结构课程设计--立体停车场管理系统(改)_第4张图片

数据结构课程设计--立体停车场管理系统(改)_第5张图片

数据结构课程设计--立体停车场管理系统(改)_第6张图片

数据结构课程设计--立体停车场管理系统(改)_第7张图片

数据结构课程设计--立体停车场管理系统(改)_第8张图片

 

数据结构课程设计--立体停车场管理系统(改)_第9张图片

数据结构课程设计--立体停车场管理系统(改)_第10张图片

你可能感兴趣的:(数据结构课程设计--立体停车场管理系统(改))