Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

For mac gcc terminal 1. (100 points) The daily sales of a grocery store are save

ID: 3684772 • Letter: F

Question

For mac gcc terminal

1. (100 points) The daily sales of a grocery store are saved in the file sale.txt. Each line contains the record for a product name, price per pound in dollars, and total number of pounds sold. Write a program that reads file sale.txt, store the data in an array of product structures, and sort the products by sale volume. Output the sorted products, including sale volumes in a text file called sorted_products.txt. A product structure should have the following attributes: string double o name o unit price o total number of pounds sold double o sale volume double You can assume the sale.txt as the following format for each product: product name (one single word), unit price, total numbers of pounds sold. apple, 2.5, 421.4 Name your program product.c. The program should be built around an array of structures, with each structure containing information of a product's name, unit price, total numbers of pounds sold, sale volume (unit price * total numbers of pounds sold). Assume that there are no more than 1000 products in the file. Use fscanf and fprintf to read and write data. Modify the selection_sort function provided to sort an array of product struct. The boxes should be sorted by sale volume in ascending order. The function should have the following prototype: 1. 2. 3. 4. void selection sort (struct product products[], int n); Output the sorted products, including sale volumes, in a text file called sorted products.txt, in the following format. 5.

Explanation / Answer

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

/*
Structure to store students data
*/
struct Product
{
    char *name;
    double unit_price;
    double sale_vol;
    double total_sale;
};

struct Product* readSalesData(int *totalData);
void selection_sort(struct Product a[], int n);
void writeSalesData(struct Product products[], int totalData);

/*
* Entry point
*/
int main()
{
    struct Product *products;
    int totalData = 0;
    products = readSalesData(&totalData);
  
    printf("Total: %d ", totalData);
    //sorting by sales volume
    selection_sort(products, totalData);
  
    //writing to file
    writeSalesData(products, totalData);
  
    return 0;
}


struct Product* readSalesData(int *totalData)
{
    struct Product *products;
  
    FILE *read;
  
    read = fopen("sales.txt", "r");
  
    int i=0;
    products = (struct Product *)malloc(1000*sizeof(struct Product*));
    while(!feof(read))
     {
      
       products[i].name = (char *)malloc(20*sizeof(char));
       fscanf(read,"%s %lf %lf", products[i].name, &products[i].unit_price, &products[i].total_sale);
       products[i].sale_vol = products[i].unit_price * products[i].total_sale;
      
       i++;
       (*totalData)++;
    }
    printf("i= %d ",i);
   fclose(read);
   return products;
}

void writeSalesData(struct Product products[], int totalData)
{
  
    FILE *write;
  
    write = fopen("sorted_products.txt", "w");
  
    int i=0;
    while(i<totalData)
     {
       fprintf(write,"%s %lf %lf %lf ", products[i].name,products[i].unit_price, products[i].total_sale, products[i].sale_vol);
      
       i++;
    }
   fclose(write);
}

void selection_sort(struct Product a[], int n){
   int i, largest = 0;
   if (n == 1)
       return;
   for (i = 1; i < n; i++){

   if (a[i].sale_vol > a[largest].sale_vol)  
       largest = i;
   }
      if (largest < n - 1) {

       double temp = a[n-1].sale_vol;

       a[n-1].sale_vol = a[largest].sale_vol;

       a[largest].sale_vol = temp;
      
       double temp_unit_price = a[n-1].unit_price;
       a[n-1].unit_price = a[largest].unit_price;
       a[largest].unit_price = temp_unit_price;
      
       double temp_total_sale = a[n-1].total_sale;
       a[n-1].total_sale = a[largest].total_sale;
       a[largest].total_sale = temp_total_sale;
      
       char *temp_name = a[n-1].name;
       a[n-1].name = a[largest].name;
       a[largest].name = temp_name;
   }
   selection_sort(a, n - 1);

}