vendor-info/vendorInfo.c

172 lines
3.5 KiB
C
Raw Normal View History

2024-08-28 19:00:25 +07:00
/*
* Win (Thanawin Pattanaphol)
* vendorInfo.c
* 8th August 2024
*/
#include <stdio.h>
#include <stdlib.h>
2024-08-29 11:31:21 +07:00
#include <string.h>
#include <ctype.h>
2024-08-28 19:00:25 +07:00
#define MAX_VENDORS 20
#define MAX_FILENAME_LENGTH 4096
2024-08-29 10:57:19 +07:00
struct vendor_item
{
2024-08-28 19:00:25 +07:00
char vendor_name[20];
char merchandise[15];
int inventory_count;
int item_price_baht;
} vendors[MAX_VENDORS];
int read_input(char str[], int n);
2024-09-01 18:25:50 +07:00
int search(char query[], struct vendor_item vendors[MAX_VENDORS], int total_vendors);
2024-08-29 10:57:19 +07:00
int main()
{
2024-08-28 19:00:25 +07:00
char file_name[MAX_FILENAME_LENGTH];
2024-08-29 15:30:23 +07:00
printf("Enter name of input file: ");
2024-08-28 19:00:25 +07:00
read_input(file_name, MAX_FILENAME_LENGTH);
FILE *fp;
2024-08-29 10:57:19 +07:00
if ((fp = fopen(file_name, "r")) == NULL)
{
2024-08-28 19:00:25 +07:00
printf("%s cannot be opened.\n", file_name);
exit(EXIT_FAILURE);
}
2024-08-29 10:57:19 +07:00
// calculate file size
fseek(fp, 0, SEEK_END);
unsigned long file_size = ftell(fp);
fseek(fp, 0, SEEK_SET);
2024-08-29 11:31:21 +07:00
// read file to buffer
2024-08-29 10:57:19 +07:00
char *file_buffer = (char *) malloc(file_size);
2024-08-29 11:31:21 +07:00
int index = 0;
2024-08-29 10:57:19 +07:00
2024-08-29 15:30:23 +07:00
while ((fgets(file_buffer, 50, fp) != NULL) && (index <= MAX_VENDORS))
2024-08-29 11:31:21 +07:00
{
2024-09-01 18:37:50 +07:00
/* TO-DO: VALIDATE FILE DATA */
2024-08-29 11:31:21 +07:00
char *token = strtok(file_buffer, " ");
2024-08-29 15:30:23 +07:00
strncpy(vendors[index].vendor_name, token, strlen(token) + 1);
2024-08-29 11:31:21 +07:00
token = strtok(NULL, " ");
2024-09-01 18:37:50 +07:00
/* TO-DO: VALIDATE MERCHANDISE BY PUTTING EVERYTHING AS LOWERCASE*/
2024-08-29 15:30:23 +07:00
strncpy(vendors[index].merchandise, token, strlen(token) + 1);
2024-08-29 11:31:21 +07:00
token = strtok(NULL, " ");
vendors[index].inventory_count = atoi(token);
token = strtok(NULL, " ");
vendors[index].item_price_baht = atoi(token);
2024-08-29 15:30:23 +07:00
index++;
2024-08-29 11:31:21 +07:00
}
2024-08-29 15:30:23 +07:00
int total_vendors = index - 1;
printf("\n>>> Read %d vendors from file %s\n", total_vendors, file_name);
2024-08-29 20:04:02 +07:00
// print out each vendor's info
2024-08-29 15:30:23 +07:00
for (int i = 0; i <= total_vendors; i++)
2024-08-29 11:31:46 +07:00
{
2024-08-29 15:30:23 +07:00
char vendor_info[200];
sprintf(vendor_info, "%s sells %s for %d each",
vendors[i].vendor_name,
vendors[i].merchandise,
vendors[i].item_price_baht
);
char vendor_stock[50];
sprintf(vendor_stock, "Inventory %d items",
vendors[i].inventory_count
);
2024-08-28 19:00:25 +07:00
2024-08-29 15:30:23 +07:00
printf("%-50s %s\n", vendor_info, vendor_stock);
}
2024-08-29 20:04:02 +07:00
2024-09-01 18:37:50 +07:00
char user_query[100];
read_input(user_query, 100);
2024-09-01 18:25:50 +07:00
2024-09-01 18:37:50 +07:00
// convert string to lowercase - each character one by one
int user_query_length = strlen(user_query);
for (int i = 0; i < user_query_length; i++)
2024-09-01 18:25:50 +07:00
{
2024-09-01 18:37:50 +07:00
user_query[i] = tolower(user_query[i]);
2024-09-01 18:25:50 +07:00
};
2024-09-01 18:37:50 +07:00
search(user_query, vendors, total_vendors);
2024-08-29 15:30:23 +07:00
2024-08-28 19:00:25 +07:00
fclose(fp);
2024-08-29 10:57:19 +07:00
free(file_buffer);
2024-08-28 19:00:25 +07:00
return 0;
};
2024-09-01 18:37:50 +07:00
/*
custom read input function
str = string itself
n = max amount of characters that the function is able to read into buffer
reads one character at a time into buffer and adds a null terminator when finish reading
*/
2024-08-29 10:57:19 +07:00
int read_input(char str[], int n)
{
2024-08-28 19:00:25 +07:00
int ch, i = 0;
2024-08-29 10:57:19 +07:00
while ((ch = getchar()) != '\n')
{
if (i < n)
{
2024-08-28 19:00:25 +07:00
str[i++] = ch;
}
}
str[i] = '\0';
return i;
2024-08-29 15:30:23 +07:00
};
2024-08-29 20:04:02 +07:00
2024-09-01 18:37:50 +07:00
/*
Search function
Parameters:
- query: search query
- vendors: the vendor table
- total_vendors: the amount of vendors
*/
2024-09-01 18:25:50 +07:00
int search(char query[], struct vendor_item vendors[MAX_VENDORS], int total_vendors)
{
2024-09-01 18:25:50 +07:00
int i;
for (i = 0; i < total_vendors; i++)
{
2024-09-01 18:25:50 +07:00
if (strcmp(query, vendors[i].merchandise) == 0)
{
printf("Query: %s | Result: %s %s\n",
query,
vendors[i].vendor_name,
vendors[i].merchandise
);
break;
};
};
if (i == total_vendors)
{
printf("No results found - %d\n", i);
}
return 0;
};
2024-09-01 18:37:50 +07:00
/*
Purchase function
Parameters:
- item: The item that the user is purchasing
- amount: How many items that the user is purchasing
- vendors: vendor table
*/
int purchase(char item[], int amount, struct vendor_item vendors[MAX_VENDORS])
{
};