I'm working on an assignment where my program acts as a vending machine and everytime a user runs and makes a "purchase", the program will return and write the new data back into the file called "drinks.txt". I have no idea where to start with this for I'm very new to C.
Here's my code:
Code:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef struct {
char prod_name [20];
double price;
int quantity;
} Product;
int display_choice ();
void remove_line (Product all_products [], int size);
char return_data ();
int main (void)
{
Product all_products[7];
int size = 7, i = 0;
double amount_put_in = 0.0, change, total = 0;
FILE *infile;
infile = fopen("drinks.txt", "r");
if (infile == NULL) {
printf("ERROR: file doesn't exist\n");
exit(EXIT_FAILURE);
}
int status = fscanf(infile, "%lf", &all_products[i].price);
while (status != EOF) {
fgets(all_products[i].prod_name, 20, infile);
remove_line (all_products, size);
fscanf(infile, "%lf", &all_products[i].price);
fscanf(infile, "%d", &all_products[i].quantity);
status = fscanf(infile, "%lf", &all_products[i].price);
i++;
}
int choice = display_choice ();
do {
switch (choice)
{
case 1:
printf("Enter money amount: ");
scanf("%lf", &amount_put_in);
if (amount_put_in > 1.00) {
printf("Amount is too much. Please try again.\n");
}
all_products[0].quantity = all_products[0].quantity - 1;
if (all_products[0].quantity < 0) {
printf("Sold Out\n\n");
}
change = amount_put_in - all_products[0].price;
if (change < 0) {
printf("Not enough money. Enter more money\n\n");
}
if (change > 0 && all_products[0].quantity > 0) {
printf("Amount of change: $%.2lf\n\n", change);
}
break;
case 2:
printf("Enter money amount: \n");
scanf("%lf", &amount_put_in);
if (amount_put_in > 1.00) {
printf("Amount is too much. Please try again.\n");
}
all_products[1].quantity = all_products[1].quantity - 1;
if (all_products[1].quantity < 0) {
printf("Sold Out\n\n");
}
change = amount_put_in - all_products[1].price;
if (change < 0) {
printf("Not enough money. Enter more\n");
}
if (change > 0 && all_products[1].quantity > 0) {
printf("Amount of change: $%.2lf\n\n", change);
}
break;
case 3:
printf("Enter money amount: \n");
scanf("%lf", &amount_put_in);
if (amount_put_in > 1.00) {
printf("Amount is too much. Please try again.\n");
}
all_products[2].quantity = all_products[2].quantity - 1;
if (all_products[2].quantity < 0) {
printf("Sold Out\n\n");
}
change = amount_put_in - all_products[2].price;
if (change < 0) {
printf("Not enough money. Enter more\n");
}
if (change > 0 && all_products[2].quantity > 0) {
printf("Amount of change: $%.2lf\n\n", change);
}
break;
case 4:
printf("Enter money amount: \n");
scanf("%lf", &amount_put_in);
if (amount_put_in > 1.00) {
printf("Amount is too much. Please try again.\n");
}
all_products[3].quantity = all_products[3].quantity - 1;
if (all_products[3].quantity < 0) {
printf("Sold Out\n\n");
}
change = amount_put_in - all_products[3].price;
if (change < 0) {
printf("Not enough money. Enter more\n");
}
if (change > 0 && all_products[3].quantity > 0) {
printf("Amount of change: $%.2lf\n\n", change);
}
break;
case 5:
printf("Enter money amount: \n");
scanf("%lf", &amount_put_in);
if (amount_put_in > 1.00) {
printf("Amount is too much. Please try again.\n");
}
all_products[4].quantity = all_products[4].quantity - 1;
if (all_products[4].quantity < 0) {
printf("Sold Out\n\n");
}
change = amount_put_in - all_products[4].price;
if (change < 0) {
printf("Not enough money. Enter more\n");
}
if (change > 0 && all_products[4].quantity > 0) {
printf("Amount of change: $%.2lf\n\n", change);
}
break;
case 6:
printf("Enter money amount: \n");
scanf("%lf", &amount_put_in);
if (amount_put_in > 1.00) {
printf("Amount is too much. Please try again.\n");
}
all_products[5].quantity = all_products[5].quantity - 1;
if (all_products[5].quantity < 0) {
printf("Sold Out\n\n");
}
change = amount_put_in - all_products[5].price;
if (change < 0) {
printf("Not enough money. Enter more\n");
}
if (change > 0 && all_products[5].quantity > 0) {
printf("Amount of change: $%.2lf\n\n", change);
}
break;
case 7:
printf("Enter money amount: \n");
scanf("%lf", &amount_put_in);
if (amount_put_in > 1.00) {
printf("Amount is too much. Please try again.\n");
}
all_products[6].quantity = all_products[6].quantity - 1;
if (all_products[6].quantity < 0) {
printf("Sold Out\n\n");
}
change = amount_put_in - all_products[6].price;
if (change < 0) {
printf("Not enough money. Enter more\n");
}
if (change > 0 && all_products[6].quantity > 0) {
printf("Amount of change: $%.2lf\n\n", change);
}
break;
case 8:
total += all_products[i].price;
printf("Total: $%.2lf\n", total);
exit(1);
break;
}
} while (display_choice () != 8);
fclose(infile);
return (0);
}
int display_choice ()
{
int choice;
printf("Please make a selection:\n\n");
printf("1. Coca Cola 0.75\n");
printf("2. Root Beer 0.75\n");
printf("3. Grape Soda 0.80\n");
printf("4. Cream Soda 0.80\n");
printf("5. Mocha Frappuccino 1.00\n");
printf("6. Diet Sprite 0.75\n");
printf("7. Nestea Iced Tea 0.85\n");
printf("8. Quit\n");
printf("> ");
scanf("%d", &choice);
return choice;
}
void remove_line (Product all_products [], int size)
{
size_t len = strlen(all_products[7].prod_name);
for (int i = 0; i < size; i++) {
if (all_products[i].prod_name[len-1] == '\n') {
all_products[i].prod_name[len-1] = '\0';
}
}
}
char return_data ()
{
}