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

I need help with this project, from start to finish. Programming Assignment 1 Yo

ID: 3727309 • Letter: I

Question

I need help with this project, from start to finish.

Programming Assignment 1

You will write, run, and test a C++ program to simulate the operation of a grocery store checkout system. Your program should first build a data structure to contain information on all the products available in the store. Then the program should print the cash register receipt for each customer.

Input

The input for this program has two sources: the inventory information is an input from a text file, and the customer transactions are inputs from the keyboard.

The information about each product carried by the store is listed on a single line in the inventory file "Invent.dat", in the following format:

<product number> escription> <price> <tax>

where is a five-digit positive (nonzero) integer, is a string of at most 12 characters with no embedded blanks, is a real number, and is a character ('T' if the product is taxable; 'N' if it is not taxable). The data in the inventory file is ordered from the smallest to the largest product number.

Customer transactions are input from the keyboard, in the following format:

<product number> <times>

where, is as described above, and is an integer in the range 1 to 100, indicating the quantity of this product desired. A zero input for indicates the end of the customer's order. (The store will soon be using a scanner to input the product number, but for now it is typed in by the cashier.)

Output

The program outputs should be written to a text file called "Receipts.out."

The inventory information is echo-printed to the output file.

The cash register receipt for each customer is written to the output file. The receipts should be nicely formatted, with the product description (not the product number), number of items, item price, and total price for each product printed on a single line. At the end of each customer's order, the subtotal for all items, amount of tax on taxable items, and total bill should be printed, clearly labeled. (The tax rate is 7.5% for taxable items.)

Processing

The program first reads in all of the inventory information from file "Invent.in." echo-printing the information to the output file.

The program then prompts the cashier to begin inputting the order for the first customer.

This customer's order is processed, and the receipt is printed to the output file.

After each customer's order is processed, the program asks the cashier if another customer is to be processed. If the answer is 'Y', the program sets up to process the next customer; if the answer is 'N', the program terminates with a friendly message.

Error Checking

The following input errors are possible and should be handled by an exception class:

Duplicate in inventory file. Write an error message to the output file and skip the second entry.

not in inventory file. Write an error message on the receipt, ignore that product number, and continue with the next item.

not in the specified range. Write an error message to the output file, ignore that line, and continue with the next item.

Example

        From File "Invent.in":

        11012    gallon-milk           1.99        N

        11014   butter           2.59 N

        11110   pie-shells              0.99        N

        20115            laundry-soap       3.60        T

        30005   homestyle-br     0.99        N

       

        From keyboard (one customer):

        11110 2

        40012 3

        20115 1

        0

        To "Receipts.out" file:

------------------------------------------------------

SEP 10, 1998 6:00 pm (* date and time optional *)

Customer 1

pie-shells    2 @ 0.99 1.98

*** item 40012 not in inventory ***

laundry-soap 1 @ 3.60 3.60 TX

                Subtotal 5.58

                Tax       0.27

        Total     5.85

Data Structures

        The inventory information can be stored in an array of product records. Assume that the maximum number of products is 50, for purposes of writing this program. You should specify this data structure as an ADT, as described in the chapter and define and implement a set of operations to encapsulate it. The ADT should be tested using a test driver.

Deliverables

Your design (either object-oriented or top-down)

A listing of the ADT

A listing of the test driver for the ADT

A listing of the test plan as input for the driver

A listing of the output from the test driver

A listing of your program

A listing of your test plan as input to the program

A listing of the output file

Explanation / Answer

#include <iostream>

#include <fstream>

#include <string>

#include <iomanip>

#include "Product.h"

using namespace std;

//Global variable

const double TAXamt = 0.075; //The tax amount is 7.5%

//Function Prototype

int binarySearch(Product inventory[][], int, int); //To search for the product to be purchased

int main()

{

//Declare variable

const int NUM_ROWS = 50; //Number of rows for the array; 50 products total

const int NUM_COLS = 4; //Number of columns for the array: product number, description, price, tax status

Product inventory[NUM_ROWS][NUM_COLS]; //An array of products

Product receipt[NUM_ROWS][NUM_COLS]; //An array for the receipt

ifstream inputFile;

ofstream outFile;

int count = 0, num, quant, prods;

double price, subtotal, total;

string item;

double itemPrice;

char itemTax, taxable;

//Open the file.

inputFile.open("C:\Users\Beverly\OneDrive\School\CISS 350\Week1_GroceryStore\Week1_GroceryStore\Inventory.txt");

if (!inputFile) //If the file cannot open, exit gracefully.

{

cout << "Error: File could not be opened." << endl;

exit(1);

}

//Initialize the array.

for (int row = 0; row < NUM_ROWS; row++)

{

for (int col = 0; col < NUM_COLS; col++)

{

inputFile >> inventory[NUM_ROWS][NUM_COLS];

}

}

//Close the file.

inputFile.close();

//Display the array

cout << " Welcome to Wideman Grocery! " << endl;

cout << "----------------------------------------" << endl;

cout << endl;

cout << "Product Number" << setw(15) << "Description" << setw(15) << "Price" << setw(8) << "Tax Status" << endl;

cout << "----------------------------------------" << endl;

for (count = 0; count < NUM_ROWS; count++)

cout << inventory[NUM_ROWS][NUM_COLS] << endl;

cout << endl;

cout << "----------------------------------------" << endl;

cout << endl;

//Determine how many products are being purchased

cout << "How many products are being purchased: ";

cin >> prods;

if (prods < 0)

{

cout << "Please enter a number greater than 0: ";

cin >> prods;

}

for (int i = 0; i < prods; i++)

{

cout << "Please enter the product number: " << endl;

cin >> num;

cout << "Please enter the quantity to be purchased: ";

cin >> quant;

//Search inventory array for the item

int element = binarySearch(inventory[NUM_ROWS][NUM_COLS], NUM_ROWS, num);

//If found, get product information **************************************************What do I do here?? I want to get the product info stored in the array inventory

item = inventory.getProd_Descr(element);

itemPrice = inventory.getPrice(element);

itemTax = inventory.getTax(element);

//Calculates the tax

if (taxable == 'T')

{

subtotal = (TAXamt)*(itemPrice * quant);

}

else //Non-taxable items

{

subtotal = (TAXamt)*(itemPrice * quant);

}

//Calculate the total for entire purchase.

total += subtotal;

//Add each product and info to the receipt

for (int numProd = 0; numProd < prods; numProd++)

{

receipt.setProd_num(num);

receipt.setProd_Descrip(item);

receipt.setPrice(itemPrice);

receipt.setTax(itemTax);

//*************************************************************How will I add the quantity of each??

}

}

//Print the receipt

//Open the file

outFile.open("C:\Users\Beverly\OneDrive\School\CISS 350\Week1_GroceryStore\Week1_GroceryStore\Receipt.txt");

if (!outFile) //If the file cannot open, print receipt on the screen and exit gracefully.

{

cout << "Error: File could not be opened." << endl;

cout << fixed << setprecision(2) << "Here is your receipt! Thanks for shopping at Wideman Grocery. " << endl;

cout << "Product Number" << setw(15) << "Description" << setw(15) << "Price" << setw(8) << "Tax Status" << endl;

cout << "--------------------------------------------------------------------------------------------------" << endl;

for (count = 0; count < NUM_ROWS; count++)

cout << receipt[NUM_ROWS][NUM_COLS] << endl;

cout << "Thank you. Have a nice day." << endl;

exit(1);

}

outFile << fixed << setprecision(2) << "Here is your receipt! Thanks for shopping at Wideman Grocery. " << endl;

outFile << "Product Number" << setw(15) << "Description" << setw(15) << "Price" << setw(8) << "Tax Status" << endl;

outFile << "--------------------------------------------------------------------------------------------------" << endl;

cout.setf(ios::left);

for (count = 0; count < NUM_ROWS; count++)

cout << receipt[NUM_ROWS][NUM_COLS] << endl;

outFile << "TOTAL " << setw(60) << "$" << total << endl;

outFile << "Thank you. Have a nice day." << endl;

//Close the file

outFile.close();

//Free Memory

delete[] inventory;

delete[] receipt;

return 0;

} //End of main()

//*****************************************************************************************

//Binary Search of the array to find the right product

int binarySearch(Product inventory[][NUM_COLS], int NUM_ROWS, int num)

{

int first = 0, //First array element

last = NUM_ROWS - 1, //Last array element

middle, //Midpoint of search

position = -1; //Position of search value

bool found = false; //Flag

while (!found && first <= last)

{

middle = (first + last) / 2; //Calculate midpoint

if (inventory[NUM_ROWS][NUM_COLS] == num) //If value is found at mid

{

found = true;

position = middle;

}

else if (inventory[NUM_ROWS][NUM_COLS] > num) //If value is in lower half

last = middle - 1;

else

first = middle + 1; //If value is in upper half

}

return position;

} //End of binarySearch

Edit & Run