Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
5.1 kB
1
Indexable
Never
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max_unsize 20
#define max_passsize 20
#define MAX_LOCATIONS 100
struct User
{
    char username[max_unsize];
    char password[max_passsize];

};

struct Location
 {
    char name[50];
    int available;
    float dist;
}; 

void registerUser() 
{
	system("cls");
	printf("\n\n\t\t\t\t\tREGISTRATION\n\n");
	struct User user;  
	printf("\t\t\t\tEnter your username (maximum %d characters): ",max_unsize);
	scanf("%s", user.username);   
	printf("\t\t\t\tEnter a password (maximum %d characters): ", max_passsize);
	scanf("%s", user.password);    
    FILE* fp = fopen("users.txt", "a");    
    fprintf(fp, "%s %s\n", user.username, user.password);   
    fclose(fp);
    printf("\t\t\t\tRegistration successful!\n");
}
void loginUser() 
{
	system("cls");
	printf("\n\n\t\t\t\t\tLOGIN\n\n");
    struct User user;
    char username[max_unsize];
    char password[max_passsize];   
    printf("\t\t\t\tEnter your username: ");
    scanf("%s", username);   
    printf("\t\t\t\tEnter your password: ");
    scanf("%s", password);  
    FILE* fp = fopen("users.txt", "r");    
    if(fp == NULL) 
	{
        printf("\t\t\t\tUser data fp does not exist.\n");
        return;
    }   
    while(fscanf(fp, "%s %s", user.username, user.password) == 2)
	{        
        if(strcmp(user.username, username) == 0 && strcmp(user.password, password) == 0) 
		{
            printf("\t\t\t\tLogin successful!\n");
            fclose(fp);
            return;
        }
    }
    printf("\t\t\t\tInvalid user.\n");  
    printf("\t\t\t\tPress [1].to Register or [2].to exit\n");
    int a;
    scanf("%d",&a);
    if(a==1)
    registerUser();
    else if(a==2)
    {
    	printf("\t\t\t\tGoodbye!");
    	exit(10);
    }
    else("\t\t\t\tinvalid choice");
    fclose(fp);
}
int main() 
{	
	
	struct User user;
    int choice;
	start:   
	printf("\n\n\n\t\t\t\tWelcome to XYZ cab booking\n\n");
    printf("\t\t\t\t1. Login\n");
    printf("\t\t\t\t2. Register\n");
    printf("\t\t\t\t3. Exit\n");
    printf("\t\t\t\tEnter your choice: ");
    scanf("\t\t\t\t%d", &choice);

    switch(choice) 
	{
		case 1:
            loginUser();
            break;
        case 2:
            registerUser();
            break;        
        case 3:
            printf("\t\t\t\tGoodbye!\n");
            exit(11);
            break;
        default:
            printf("\t\t\t\tInvalid input.\n");
            system("cls");
            goto start;
    }
    system("cls");
    printf("\n\n\t\t\t\t\tCAB BOOKING\n\n");
    
    FILE *fp, *bill_fp;
    struct Location locations[MAX_LOCATIONS];
    int num_locations = 0;
    int i;

    // Read locations from file
    fp = fopen("locations.txt", "r");
    if (fp == NULL) {
        printf("Error opening file\n");
        return 1;
    }
    while (fscanf(fp, "%s %d %f", locations[num_locations].name, &locations[num_locations].available, &locations[num_locations].dist) != EOF) {
        num_locations++;
    }
    fclose(fp);

    // Print available locations
    printf("Available locations:\n");
    for (i = 0; i < num_locations; i++) {
        printf("%d. %s\n", i+1, locations[i].name);
    }

    // Get pickup location from user
    int pickup_index = 0;
    while (pickup_index < 1 || pickup_index > num_locations) {
        printf("Enter pickup location number: ");
        scanf("%d", &pickup_index);
    }
    struct Location pickup = locations[pickup_index-1];
    pickup.available--;

    // Get dropoff location from user
    int dropoff_index = 0;
    while (dropoff_index < 1 || dropoff_index > num_locations) {
        printf("Enter dropoff location number: ");
        scanf("%d", &dropoff_index);
    }
    struct Location dropoff = locations[dropoff_index-1];
    dropoff.available--;

    // Calculate distance and bill amount
    float distance = dropoff.dist - pickup.dist;
    float bill_amount = distance * 10;

    // Update file with new location availability
    fp = fopen("locations.txt", "w");
    for (i = 0; i < num_locations; i++) {
        fprintf(fp, "%s %d %f\n", locations[i].name, locations[i].available, locations[i].dist);
    }
    fclose(fp);
    
    printf("Username: %s\n", user.username);
    printf("Pickup: %s\n", pickup.name);
    printf( "Dropoff: %s\n", dropoff.name);
    printf( "Distance: %.2f km\n", distance);
    printf( "Bill amount: $%.2f\n", bill_amount);

    // Store bill in file
    bill_fp = fopen("bill.txt", "a");
    if (bill_fp == NULL) {
        printf("Error opening file\n");
        return 1;
    }
    fprintf(bill_fp,"Username: %s\n", user.username);
    fprintf(bill_fp, "Pickup: %s\n", pickup.name);
    fprintf(bill_fp, "Dropoff: %s\n", dropoff.name);
    fprintf(bill_fp, "Distance: %.2f km\n", distance);
    fprintf(bill_fp, "Bill amount: $%.2f\n", bill_amount);
    fclose(bill_fp);

    printf("Bill generated and stored in file\n");
       
	return 0;
}