24小时热门版块排行榜    

CyRhmU.jpeg
查看: 414  |  回复: 2

永远的答案

银虫 (小有名气)

[求助] 调试错误

蛋疼的数据结构,我们明明是数学系的,结果还要做数据结构的课程设计,我们只学了二十几节课好不好,数据结构编程不会呀!老师要求还好严苛,要求这个星期五要做完,只好在网上下了一篇,然后自己再改了改,已经改了一个星期了,况且我们还有好几门考试呢,不坑能把所有的时间都放置在这上面。可是这一篇总是有错误,调试的时候总是调试不成功,那位大神帮帮忙给改改呗!我只有34金币,全部给你了。
题目是停车场管理系统。利用站和队列实现的!

#include
#include
#include
#include
#define Size 3                                                           /*车库容量*/
#define Price 5                                                          /*单位价格*/
#define Null 0
typedef struct time
{
        int hour;
        int minute;
}Time;

typedef struct
{
        int car_number;
        Time arrivetime,leavetime;                                           /*车信息结点*/
        float fee;
}car_info;

typedef struct
{
        car_info *north;
        car_info *south;                                                     /*停车场信息*/
        int number;
}car_park;

typedef struct
{
        car_info *west;
        car_info *east;                                                      /*倒车场信息*/
        int number;
}car_park_back;

typedef struct car
{
        car_info *data;
        struct car *next;                                                    /*结点信息*/
}carnode;

typedef struct node
{
        carnode *head;
        carnode *rear;                                                       /*便道信息*/
        int number;
}car_park_temp;

void init_car_park(car_park *cp)
{
        cp->north=(car_info *)malloc(Size * sizeof(car_info));               /*初始化停车场*/
        if(!cp->north)
                printf("error\n";
        cp->south=cp->north;                                                 /*令栈顶等于栈底*/
        cp->number=0;
}

void enter_car_park(car_park *cp,car_info *car)
{
        *cp->south++=*car;                                                  /*车辆进入停车场*/
        cp->number++;                 
}
int notfull_car_park(car_park *cp)
{
        int e;
        if(cp->south-cp->north>=Size)                                       /*判断停车场是否已满*/
                e=0;
        else
                e=1;
        return(e);
}
int notempty_car_park_back(car_park_back *cpb)
{
        int e;
        if(cpb->east==cpb->west)
                e=0;                                                            /*判断倒车场是否不空*/
        else
                e=1;
        return(e);
}

void back_car_park(car_park *cp,car_info *car)
{
        *car=*cp->south;                                                    /*进行倒车操作*/
        cp->number--;
}

void init_car_park_back(car_park_back *cpb)
{
        cpb->west=(car_info *)malloc(Size *sizeof(car_info));
        if(!cpb->west)
                printf("error\n";                                               /*倒车场初始化*/
        cpb->east=cpb->west;
        cpb->number=0;
}

void enter_car_park_back(car_park_back *cpb,car_info *car)
{
        *cpb->east++=*car;
        cpb->number++;                                                       /*进入倒车场操作*/
}

void leave_car_park_back(car_park_back *cpb,car_info *car)
{
        *car=*--cpb->east;
        cpb->number--;                                                       /*离开倒车场操作*/
}

void init_car_park_temp(car_park_temp *cpt)
{
        cpt->head=cpt->rear=(carnode *)malloc(sizeof(carnode));              /*初始化便道*/
        cpt->head->next=Null;
        cpt->number=0;
}

void enter_car_park_temp(car_park_temp *cpt,car_info *car)
{
        carnode *p;
        p=(carnode *)malloc(sizeof(carnode));                                 /*进入便道操作*/
        p->data=car;
        p->next=Null;
        cpt->rear->next=p;
        cpt->rear=p;
        cpt->number++;
}

void leave_car_park_temp(car_park_temp *cpt,car_info *car,car_park *cp)
{
        carnode *h;
        h=(carnode *)malloc(sizeof(carnode));
        h=cpt->head->next;
        car=h->data;                                                           /*离开便道操作*/
        cpt->head->next=h->next;
        enter_car_park(cp,car);
        cpt->number--;
}
int notempty_car_park_temp(car_park_temp *cpt)
{
        int e;
        if(cpt->head==cpt->rear)                                               /*判断便道是否为空*/
                e=0;
        else
                e=1;
        return(e);
}

void leave_car_park(car_park *cp,car_info *car,car_park_back *cpb)
{
        float e,a1,a2,b1,b2,t;                                                 /*定义时间变量*/
        car_info *car1,*car2;
        car1=(car_info *)malloc(sizeof(car_info));                             /*车辆实体化*/
        car2=(car_info *)malloc(sizeof(car_info));   
        while((--cp->south)->car_number!=car->car_number)                      /*判断车号是否为要出去的车号*/
        {
                back_car_park(cp,car1);                                            /*进行倒车操作*/
                enter_car_park_back(cpb,car1);                                     /*进入倒车场*/
        }
        car->arrivetime.hour=cp->south->arrivetime.hour;
        car->arrivetime.minute=cp->south->arrivetime.minute;
        a1=car->arrivetime.hour;
        a2=car->arrivetime.minute;
        b1=car->leavetime.hour;
        b2=car->leavetime.minute;
        t=((b1-a1)+(b2-a2)/60);
        car->fee=t*Price;                                                       /*计算价格*/
        printf("the time of the car is %2.1f hour ,%2.1f minute",(b1-a1),(b2-a2));
        printf("the money is %3.1f  yuan",car->fee);
        e=notempty_car_park_back(cpb);                                          /*判断倒车场是否为空*/
        while(e==1)
        {
                leave_car_park_back(cpb,car2);                                      /*离开倒车场*/
                enter_car_park(cp,car2);                                            /* 进入停车场*/
                e=notempty_car_park_back(cpb);                                      /*判断倒车场是否为空*/
        }
        cp->number--;
}

void main()                                                                 /*主函数*/
{
        char ch;      
        int e,n,i;                                                              /*定义字符和整形变量*/
        car_park_back *cpb;                                                     /* 定义停车场,倒车场以及便道的变量*/
        car_park *cp;
        car_park_temp *cpt,*cpt2;
        car_info *car;
        cp=(car_park *)malloc(sizeof(car_park));                                /*实体化变量*/
        cpb=(car_park_back *)malloc(sizeof(car_park));
        cpt=(car_park_temp *)malloc(sizeof(car_park_temp));       

        cpt2=(car_park_temp *)malloc(sizeof(car_park_temp));
        init_car_park(cp);                                                      /*实体化停车场,倒车场,便道*/
        init_car_park_back(cpb);
        init_car_park_temp(cpt);
        printf("\nA=车辆到达 L=车辆离开 X=车场信息\n";
        car=(car_info *)malloc(sizeof(car_info));
        do
        {
                printf("input the 'A' or 'L' or 'X'  :";                           /*输入待操作的命令*/
                scanf("%s",&ch);
                e=notfull_car_park(cp);
                                                                            /*判断车场是否为空*/
                switch(ch)                                                          /*判断要输入的命令*/
                {
                case 'A':
                        if(e==1)                                                        /*车场不满,进入车辆*/
                        {
                                printf("input the car_number:";                            /*输入车辆的基本信息*/
                                scanf("%s",&car->car_number);
                                printf("input the arrivetime:";
                                scanf("%d",&(*car).arrivetime.hour);
                                scanf("%d",&(*car).arrivetime.minute);
                                enter_car_park(cp,car);                                    /*进入车场*/
                                printf("the car is in the car_park,the place is %d\n",cp->number);
                        }
                        else                                                           /*若车场满,进入便道*/
                        {
                                enter_car_park_temp(cpt,car);
                            printf("input the car_number:";
                            scanf("%c",&car->car_number);
                            printf("the car is in the car_park_temp,the place of temp is %d\n",cpt->number);
                        }
                        break;
                case 'L':                                                         /*离开停车场*/
                        printf("input the car_number:";                              /*输入要离开车辆的号码以及离开时间*/
                        scanf("%s",&car->car_number);
                    printf("input the leavetime of the car:";
                    scanf("%d",&(*car).leavetime.hour);
                        scanf("%d",&(*car).leavetime.minute);
                    leave_car_park(cp,car,cpb);                                   /*执行离开车场*/
                    i=(*car).leavetime.hour;                                      /*令便道里车辆进入车场的时间和车场里面的车离开的时间相等*/
                    n=notempty_car_park_temp(cpt);                                /*判断便道是否不空*/
                        if(n==1)
                                printf("The car %s",cpt->head->next->data->car_number);   /*记住便道里第一辆车的号码*/
                        leave_car_park_temp(cpt,car,cp);                              /*离开便道,进入停车场*/
                        printf(" is enter the car_park,arrivetime is %d ,the place of carpark is %d\n",i,cp->number);
                        break;
                case 'X':                                                         /*查看车场以及便道里的车辆信息*/
                        printf("\nThere are %d cars in car park!\nFolowing is the carnumber in the car park:\n ",cp->number);
                        for(i=1;i<=cp->number;i++)                                    /*做循环,依次输出停车场里车辆的信息*/
                                printf("%s,",(cp->north++)->car_number);
                        cp->north=cp->north-cp->number;
                        cpt2->head=cpt->head->next;                                   /*设一个虚拟指针使其指向头结点的下一个位置*/
                        if(cpt->number==0)                                            /*便道里没有车的情况*/
                                printf("\nThere is no cars in temp!" ;
                        else
                        {
                                printf("There are %d cars in car temp!\n Folowing is the carnumber in the car temp:\n ",cpt->number);
                                for(i=1;i<=cpt->number;i++)                               /*做一个循环,输出便道里车辆的信息*/
                                {
                                        printf("%d ",cpt2->head->next->data->car_number);     /* 输出车辆的号码*/
                                        cpt2->head=cpt2->head->next;
                                }
                        }
                        break;
                default:
                        printf("ERROR please input again\n";
                        break;
                }
        }
        while(ch!='0');
}
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

岚雾

木虫 (正式写手)

【答案】应助回帖


感谢参与,应助指数 +1
xzhdty(金币+1): 欢迎常来程序语言看看 2011-12-19 19:59:29
jjdg:编辑内容 2011-12-20 01:54
jjdg:编辑内容 2011-12-20 01:55
jjdg:编辑内容 2011-12-20 01:55
jjdg:编辑内容 2011-12-20 01:56
jjdg:编辑内容 2011-12-20 01:57
jjdg:编辑内容 2011-12-20 01:58
jjdg:编辑内容 2011-12-20 01:59
永远的答案(金币+1): 没有帮助, 2011-12-22 12:28:02
#include
#include
#include
#include
#define Size 3                                                           /*车库容量*/
#define Price 5                                                          /*单位价格*/
#define Null 0
typedef struct time
{
        int hour;
        int minute;
}Time;

typedef struct
{
        int car_number;
        Time arrivetime,leavetime;                                           /*车信息结点*/
        float fee;
}car_info;

typedef struct
{
        car_info *north;
        car_info *south;                                                     /*停车场信息*/
        int number;
}car_park;

typedef struct
{
        car_info *west;
        car_info *east;                                                      /*倒车场信息*/
        int number;
}car_park_back;

typedef struct car
{
        car_info *data;
        struct car *next;                                                    /*结点信息*/
}carnode;

typedef struct node
{
        carnode *head;
        carnode *rear;                                                       /*便道信息*/
        int number;
}car_park_temp;

void init_car_park(car_park *cp)
{
        cp->north=(car_info *)malloc(Size * sizeof(car_info)) ;               /*初始化停车场*/
        if(!cp->north)
                printf("error\n" ) ;
        cp->south=cp->north;                                                 /*令栈顶等于栈底*/
        cp->number=0;
}

void enter_car_park(car_park *cp,car_info *car)
{
        *cp->south++=*car;                                                  /*车辆进入停车场*/
        cp->number++;                 
}
int notfull_car_park(car_park *cp)
{
        int e;
        if(cp->south-cp->north>=Size)                                       /*判断停车场是否已满*/
                e=0;
        else
                e=1;
        return(e);
}
int notempty_car_park_back(car_park_back *cpb)
{
        int e;
        if(cpb->east==cpb->west)
                e=0;                                                            /*判断倒车场是否不空*/
        else
                e=1;
        return(e);
}

void back_car_park(car_park *cp,car_info *car)
{
        *car=*cp->south;                                                    /*进行倒车操作*/
        cp->number--;
}

void init_car_park_back(car_park_back *cpb)
{
        cpb->west=(car_info *)malloc(Size *sizeof(car_info));
        if(!cpb->west)
                printf("error\n" ) ;                                               /*倒车场初始化*/
        cpb->east=cpb->west;
        cpb->number=0;
}

void enter_car_park_back(car_park_back *cpb,car_info *car)
{
        *cpb->east++=*car;
        cpb->number++;                                                       /*进入倒车场操作*/
}

void leave_car_park_back(car_park_back *cpb,car_info *car)
{
        *car=*--cpb->east;
        cpb->number--;                                                       /*离开倒车场操作*/
}

void init_car_park_temp(car_park_temp *cpt)
{
        cpt->head=cpt->rear=(carnode *)malloc(sizeof(carnode)) ;              /*初始化便道*/
        cpt->head->next=Null;
        cpt->number=0;
}

void enter_car_park_temp(car_park_temp *cpt,car_info *car)
{
        carnode *p;
        p=(carnode *)malloc(sizeof(carnode)) ;                                 /*进入便道操作*/
        p->data=car;
        p->next=Null;
        cpt->rear->next=p;
        cpt->rear=p;
        cpt->number++;
}

void leave_car_park_temp(car_park_temp *cpt,car_info *car,car_park *cp)
{
        carnode *h;
        h=(carnode *)malloc(sizeof(carnode)) ;
        h=cpt->head->next;
        car=h->data;                                                           /*离开便道操作*/
        cpt->head->next=h->next;
        enter_car_park(cp,car);
        cpt->number--;
}
int notempty_car_park_temp(car_park_temp *cpt)
{
        int e;
        if(cpt->head==cpt->rear)                                               /*判断便道是否为空*/
                e=0;
        else
                e=1;
        return(e);
}

void leave_car_park(car_park *cp,car_info *car,car_park_back *cpb)
{
        float e,a1,a2,b1,b2,t;                                                 /*定义时间变量*/
        car_info *car1,*car2;
        car1=(car_info *)malloc(sizeof(car_info));                             /*车辆实体化*/
        car2=(car_info *)malloc(sizeof(car_info));   
        while((--cp->south)->car_number!=car->car_number)                      /*判断车号是否为要出去的车号*/
        {
                back_car_park(cp,car1);                                            /*进行倒车操作*/
                enter_car_park_back(cpb,car1);                                     /*进入倒车场*/
        }
        car->arrivetime.hour=cp->south->arrivetime.hour;
        car->arrivetime.minute=cp->south->arrivetime.minute;
        a1=car->arrivetime.hour;
        a2=car->arrivetime.minute;
        b1=car->leavetime.hour;
        b2=car->leavetime.minute;
        t=((b1-a1)+(b2-a2)/60);
        car->fee=t*Price;                                                       /*计算价格*/
        printf("the time of the car is %2.1f hour ,%2.1f minute",(b1-a1),(b2-a2));
        printf("the money is %3.1f  yuan",car->fee);
        e=notempty_car_park_back(cpb);                                          /*判断倒车场是否为空*/
        while(e==1)
        {
                leave_car_park_back(cpb,car2);                                      /*离开倒车场*/
                enter_car_park(cp,car2);                                            /* 进入停车场*/
                e=notempty_car_park_back(cpb);                                      /*判断倒车场是否为空*/
        }
        cp->number--;
}

void main()                                                                 /*主函数*/
{
        char ch;      
        int e,n,i;                                                              /*定义字符和整形变量*/
        car_park_back *cpb;                                                     /* 定义停车场,倒车场以及便道的变量*/
        car_park *cp;
        car_park_temp *cpt,*cpt2;
        car_info *car;
        cp=(car_park *)malloc(sizeof(car_park));                                /*实体化变量*/
        cpb=(car_park_back *)malloc(sizeof(car_park));
        cpt=(car_park_temp *)malloc(sizeof(car_park_temp));        

        cpt2=(car_park_temp *)malloc(sizeof(car_park_temp));
        init_car_park(cp);                                                      /*实体化停车场,倒车场,便道*/
        init_car_park_back(cpb);
        init_car_park_temp(cpt);
        printf("\nA=车辆到达 L=车辆离开 X=车场信息\n" );
        car=(car_info *)malloc(sizeof(car_info));
        do
        {
                printf("input the 'A' or 'L' or 'X'  :" );                           /*输入待操作的命令*/
                scanf("%s",&ch);
                e=notfull_car_park(cp);
                /*判断车场是否为空*/
                switch(ch)                                                          /*判断要输入的命令*/
                {
                case 'A':
                        if(e==1)                                                        /*车场不满,进入车辆*/
                        {
                                printf("input the car_number:" );                            /*输入车辆的基本信息*/
                                scanf("%s",&car->car_number);
                                printf("input the arrivetime:" );
                                scanf("%d",&(*car).arrivetime.hour);
                                scanf("%d",&(*car).arrivetime.minute);
                                enter_car_park(cp,car);                                    /*进入车场*/
                                printf("the car is in the car_park,the place is %d\n",cp->number);
                        }
                        else                                                           /*若车场满,进入便道*/
                        {
                                enter_car_park_temp(cpt,car);
                                printf("input the car_number:" );
                                scanf("%c",&car->car_number);
                                printf("the car is in the car_park_temp,the place of temp is %d\n",cpt->number);
                        }
                        break;
                case 'L':                                                         /*离开停车场*/
                        printf("input the car_number:" );                              /*输入要离开车辆的号码以及离开时间*/
                        scanf("%s",&car->car_number);
                        printf("input the leavetime of the car:" );
                        scanf("%d",&(*car).leavetime.hour);
                        scanf("%d",&(*car).leavetime.minute);
                        leave_car_park(cp,car,cpb);                                   /*执行离开车场*/
                        i=(*car).leavetime.hour;                                      /*令便道里车辆进入车场的时间和车场里面的车离开的时间相等*/
                        n=notempty_car_park_temp(cpt);                                /*判断便道是否不空*/
                        if(n==1)
                                printf("The car %s",cpt->head->next->data->car_number);   /*记住便道里第一辆车的号码*/
                        leave_car_park_temp(cpt,car,cp);                              /*离开便道,进入停车场*/
                        printf(" is enter the car_park,arrivetime is %d ,the place of carpark is %d\n",i,cp->number);
                        break;
                case 'X':                                                         /*查看车场以及便道里的车辆信息*/
                        printf("\nThere are %d cars in car park!\nFolowing is the carnumber in the car park:\n ",cp->number);
                        for(i=1;i<=cp->number;i++)                                    /*做循环,依次输出停车场里车辆的信息*/
                                printf("%s,",(cp->north++)->car_number);
                        cp->north=cp->north-cp->number;
                        cpt2->head=cpt->head->next;                                   /*设一个虚拟指针使其指向头结点的下一个位置*/
                        if(cpt->number==0)                                            /*便道里没有车的情况*/
                                printf("\nThere is no cars in temp!" );
                        else
                        {
                                printf("There are %d cars in car temp!\n Folowing is the carnumber in the car temp:\n ",cpt->number ) ;
                                for(i=1;i<=cpt->number;i++)                               /*做一个循环,输出便道里车辆的信息*/
                                {
                                        printf("%d ",cpt2->head->next->data->car_number ) ;     /* 输出车辆的号码*/
                                        cpt2->head=cpt2->head->next;
                                }
                        }
                        break;
                default:
                        printf("ERROR please input again\n" ) ;
                        break;
                }
        }
        while(ch!='0');
}



没有什么问题,数学专业最好也学下程序设计方面,以后找工作应该很有用处的,我也是数学专业的.

[ Last edited by jjdg on 2011-12-20 at 01:59 ]
2楼2011-12-19 18:01:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

永远的答案

银虫 (小有名气)

引用回帖:
: Originally posted by 岚雾 at 2011-12-19 18:01:30:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Size 3                                                           /*车库容量*/
#define P ...

你输入几个数测试一下!当离开停车场的时候就会出来一个提示指向car=h->data;并提示access violation。编译,组建都不会出错,但是调试的时候就会出错。学点程序设计确实挺好,但是我们学的太快,比计算机学院的学的还快,而且要求的还挺高!我们大学期间要学接近十门计算机的课程!
3楼2011-12-20 10:30:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 永远的答案 的主题更新
信息提示
请填处理意见