Write a C program in to calculate the parking fare for customers who park
their cars in a parking lot when the following information
is given:
A. A character showing the type of vehicle : C for car, B for bus,
T for truck.
B. An integer between 0 and 24 showing the hour the vehicle entered
the lot.
C. An integer between 0 and 60 showing the minute the vehicle entered
the lot.
D. An integer between 0 and 24 showing the hour the vehicle entered
the lot.
E. An integer between 0 and 60 showing the minute the vehicle left
the lot.

Different rates for each type of vechicle, as shown:
VEHICLE : $0.00/hr first 3 hr $1.50/hr after 3 hr
CAR : $1.00/hr first 2 hr $2.30/hr after 2 hr
BUS : $2.00/hr first hr $3.70/hr after 1 hr

No vehicle is allowed to stay in the parking lot later than midnight;
it will be towed away.

Then print the parking lot charge.

PLS HELP ME OUT HERE


/

// Project3.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

void getData(int* ehour, int* emin, int* exhour, int* exmin);
void rate(int exhour, int exmin, int ehour, int emin, int* thour, int* tmin, int* round);
void charge(char* vehic, float* rate1, float* rate2, int ehour);
void result(int exhour, int exmin, int ehour, int emin, int thour, float rate1, float rate2, int round, float total);

int main(void)
{
	char vehic;
	int ehour;
	int emin;
	int exhour;
	int exmin;
	int thour;
	int tmin;
	int round;

	float rate1;
	float rate2;
	float total;

	getData(&ehour, &emin, &exhour, &exmin);
	rate(exhour, exmin, ehour, emin, &thour, &tmin, &round);
	charge(&vehic, &rate1, &rate2, ehour);
	total= rate1 + rate2;
	result( exhour, exmin, ehour, emin, thour, rate1, rate2, round, total);

	return 0;
}

void getData(int* ehour, int* emin, int* exhour, int* exmin)
	{
		char v;

		printf("Enter C for car, B for bus, T for truck: ");
		scanf("%c", &v);
		printf("\nHour vehicle entered 0-24: ");
		scanf("%d", &ehour);
		printf("\nMinute vehicle entered 0-60: ");
		scanf("%d", &emin);
		printf("\nHour vehicle exited 0-24: ");
		scanf("%d", &exhour);
		printf("\nMinute vehicle exited 0-60: ");
		scanf("%d", &exmin);
		return;
	}
	void rate(int exhour, int exmin, int ehour, int emin, int* thour, int* tmin, int* round)
	{
		if(emin < exmin)
		{
			emin= emin + 60;
			exhour= exhour - 1;
		}
		*thour = ehour - exhour;
		*tmin = emin - exmin;
		if ((*tmin > 0 && *tmin <= 60))
		{
			*thour = *thour + 1;
			*round = *tmin * 0;
		}
		return;
	}
void charge(char* vehic, float* rate1, float* rate2, int ehour)
{
	switch (*vehic)
	{
	case 'c': if (ehour <= 3)
			  {
				  *rate1 = 0.00;
			  if (ehour > 3)
				  *rate2 = 1.50 * (ehour - 3);
			  }
			  break;

	case 't': if (ehour <= 2)
			  {
				  *rate1 = 1.00 * ehour;
			  if (ehour > 2)
				  *rate2 = 2.30 * (ehour - 2);
			  }
			  break;
	case 'b': if (ehour <= 1)
			  {
				  *rate1 = 2.00 * ehour;
			  if (ehour > 1)
				  *rate2 = 3.70 * (ehour - 1);
			  }
			  break;
	}
	return;
}
void result(int exhour, int exmin, int ehour, int emin, int thour, float rate1, float rate2, int round, float total)
{
	printf("\n\t\t PARKING LOT CHARGE \t\t\n");
	printf("\nType of vehicle: Car or Bus or Truck");
	printf("\nTIME-IN\t\t %d:%d", ehour, emin);
	printf("\nTIME-OUT\t\t %d:%d", exhour, exmin);
	printf("\n\t\t\t --------");
	printf("\nPARKING TIME\t\t %d:%d", thour, round);
	printf("\n\t\t\t --------");
	total= rate1 + rate2;
	printf("\nTOTAL CHARGE\t\t %4.2f\n\n", total);

	return;
}
WaltP commented: Don't start new threads asking the same question. -3

Dani AI

Generated

Good assignment, . A few things are tripping you up before you even get to the math. is right that you’ll get better help if you pinpoint errors, but here are the concrete fixes and a clean way to structure it.

Key fixes to your approach:

  • Read into the pointers you were given: scanf("%d", ehour); not &ehour. Also store the vehicle type in a variable you actually use; pass it by value or write through the pointer. Use scanf(" %c", &vehic) to skip the leftover newline.
  • Validate input: minutes 0..59, hours 0..24; exit time must be the same day and not past 24:00.
  • Compute duration in minutes, not by hand-borrowing. Then bill whole hours by rounding up: (minutes + 59) / 60.
  • Map the type to its tiered rate table; your current mapping does not align with the spec text (the first row applies to trucks).
  • Keep presentation and calculation separate: one function returns the fare; another prints.

Here is a compact, testable core you can drop into your program and call from main after reading input:

#include <ctype.h>

static int minutes_since_midnight(int h, int m) { return h*60 + m; }

double calc_fare(char type, int inH, int inM, int outH, int outM) {
    if (inH<0||inH>23||inM<0||inM>59||outH<0||outH>24||outM<0||outM>59)
        return -1.0;  // invalid
    int in = minutes_since_midnight(inH, inM);
    int out = minutes_since_midnight(outH, outM);
    if (out < in || out > 24*60) return -1.0;  // violates midnight rule

    int hours = (out - in + 59) / 60;  // bill by whole hours

    int tier; double r_first, r_after;
    switch (toupper((unsigned char)type)) {
        case 'C': tier = 2; r_first = 1.00; r_after = 2.30; break;
        case 'B': tier = 1; r_first = 2.00; r_after = 3.70; break;
        case 'T': tier = 3; r_first = 0.00; r_after = 1.50; break;
        default:  return -1.0;  // unknown vehicle
    }
    int first = hours < tier ? hours : tier;
    int rest  = hours - first;
    return first * r_first + (rest > 0 ? rest * r_after : 0.0);
}

Tip: print the billed hours as (out-in+59)/60 so customers see how you rounded. This structure will make debugging and future rate changes trivial.

So, what is your problem. You want us to analyze your code, but you give no indication where you are having a problem. You have $200USD/hour for my consulting time? Probably not. So, what is your problem?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.