问题描述
- 数据结构课设停车场问题
-
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define n 3//定量小,好观察
#define price 0.05 // 定义价格为每分钟0.05 元typedef struct TIME//时间的结构
{
int hour;
int min;
}time;
typedef struct record
{
int num;//汽车牌照号码
time reach;//到达时刻
time leave;//离开时刻
}datatype;
typedef struct node
{
datatype data;//结点数据域
struct node next;//结点的指针域
}link;
link *head;//头指针
link *park(head,i)//车达到的函数,i是全局变量,不声明
link *head;
{
link *p;
if(i<=n)
{
p=(struct node)malloc(sizeof(link));//给一个存放结点的内存空间
printf("
请输入车牌号(例:鄂B1234):");
scanf("%d",&(p->data.num));
printf("
车辆到达时间:");
scanf("%d:%d",&(p->data.reach.hour),&(p->data.reach.min));//":"是为了控制时间的输入格式
p->next=head->next;//把头指针的地址域给p
head->next=p;//头指针再指向p
}else
{
printf("
停车场已满,请在便道稍等!
");
return (head);//返回头指针
}
return(head);//最后返回头指针
}
void PRINT(link *p,int x)// 车辆收费
{
int A1,A2,B1,B2;
printf("
车辆离开的时间:");
scanf("%d:%d",&(p->next->data.leave.hour),&(p->next->data.leave.min));//这是根据查找而写的,表示返回的p是前驱结点
printf("
其到达时间为: %d:%d",p->next->data.reach.hour,p->next->data.reach.min);
printf("
离开时间为: %d:%d",p->next->data.leave.hour,p->next->data.leave.min);
A1=p->next->data.reach.hour;
A2=p->next->data.reach.min;
B1=p->next->data.leave.hour;
B2=p->next->data.leave.min;
printf("
应交费用为: %-8.3f 元
",((B1-A1)*60+(B2-A2))*price);//钱的算法
}link *key_search(head,key)//查找key被删除功能调用,找前驱结点
link *head;int key;
{
link *p;
p=head;
while(p->next!=NULL)
{
if(p->next->data.num!=key)
p=p->next;
else
return(p);
}
return(NULL);//查找失败,返回空指针NULL
}link *key_delete(head)
link *head;
{
link *p;int x;
printf("离开的车请输入车牌号:");
scanf("%d",&x);
p=key_search(head,x);//前驱结点
if(p!=NULL)
{
PRINT(p,x);
p->next=p->next->next;//把结点删除
return(head);
}
else
{
printf("
输入的%d车牌不在,请重新输入数据!
",x);
return(head);
}
}void list(head)//列表
link head;
{
link *p;
p=head;
while(p->next!=NULL)//就如头指向第一个结点
{
printf("车号%d,进去时间%d:%d
",p->next->data.num,p->next->data.reach.hour,p->next->data.reach.min);
p=p->next;
}
}
main()
{
link *head;
int ch;
int i=1;
head=(struct node)malloc(sizeof(link));
head->next=NULL;
while(1)//用于循环
{
printf("
*************** 欢迎使用停车场系统.***************");
printf("
1. 车辆到达登记.
");
printf("
2. 车辆离开登记.
");
printf("
3. 车辆列表显示.
");
printf("
4. 退出系统.");
printf(" 请选择: ");
while(1)//选项输入限制
{
scanf("%d",&ch);
if(ch>=1&&ch<=4)break;
else printf("
输入有误,请重新选择: 1~4: ");
}
switch(ch)
{
case 1:head=park(head,i);i++;list(head);break;//i用于循环
case 2:head=key_delete(head);i--;list(head);break;//i用于控制车数,减少
case 3:list(head);break;
case 4:exit(0);
default: break;
}
}
}
解决方案
解决方案二:
只有代码,什么错误呢?