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

I\'m working on a program that takes in data from an inventory report and puts t

ID: 3877865 • Letter: I

Question

I'm working on a program that takes in data from an inventory report and puts things in order as well as turns the numeric date (i.e 12 01 2001) and converts it to a something like 'Dec. 1, 2001'

For the latter part I used an array to change the numeric dates to months but I need to use switch cases instead and I'm unsure how and was wondering if someone could show me. Below is my code and the picture will be the data file I'm using to make the report.

#include <iostream>
#include <cstring>
#include <fstream>
#include <ctime>
#include <iomanip>
#include <string.h>

using namespace std;

struct RECORDS
{
int itemNumber;
string itemCategory;
int mo;
int day;
int year;
float itemCost;
int itemCount;
int itemsSold;
RECORDS *next;
};

void insert(RECORDS*& Head, RECORDS * itemPntr)
{
RECORDS* prev = NULL;
RECORDS* curr = NULL;

//If head is empty.
if (Head == NULL)
{
Head = itemPntr;
}
//Compares item numbers at head of list.
else if (Head != NULL && Head->itemNumber > itemPntr->itemNumber)
{
itemPntr->next = Head;
Head = itemPntr;
}
//If the new item number is less than head item number.

//Compares and adds item in middle of list.
else
{
curr = Head;
while(curr != NULL)
{
if (curr->itemNumber > itemPntr->itemNumber)
{
prev->next = itemPntr;
itemPntr->next = curr;
break;
}
prev = curr;
curr = curr->next;
}
//Item placed at end of list.
if(curr == NULL)
prev->next = itemPntr;
}
}

void print(RECORDS * Head)
{
ofstream outF;
outF.open("invrpt.dat");
float totalRevenue = 0;

//Array for month conversion.
string months[13];

months[0]= "def";
months[1]= "Jan.";
months[2]= "Feb.";
months[3]= "Mar.";
months[4]= "Apr.";
months[5]= "May";
months[6]= "June";
months[7]= "July";
months[8]= "Aug.";
months[9]= "Sept.";
months[10]= "Oct.";
months[11]= "Nov.";
months[12]= "Dec.";

//Pointer for date.
time_t t = time(NULL);
tm*timePtr = localtime(&t);
int sub2 = timePtr->tm_mon + 1;

//Print to screen.
cout << endl << setw(51) << right << "Inventory Report" << endl << setw(65)
<< right << "Date: " << months[sub2] << ' ' << (timePtr->tm_mday - 1) << ", "
<< (timePtr->tm_year)+1900 << endl << endl;

cout << endl << endl;

cout << setfill(' ') << setw(12) << left << " Item"
<< setw(22) << left << "Item Purchase"
<< setw(12) << left << "Item"
<< setw(12) << left << "Items"
<< setw(12) << left << "Item"
<< setw(12) << left << "Item" << endl;
cout << setfill(' ') << setw(12) << left << "Number"
<< setw(22) << left << " Date"
<< setw(12) << left << "Cost"
<< setw(12) << left << "Sold"
<< setw(11) << left << "Age*"
<< setw(12) << left << "Revenue" << endl << endl;

//Print to file.
outF << endl << setw(51) << right << "Inventory Report" << endl << setw(65)
<< right << "Date: " << months[sub2] << ' ' << (timePtr->tm_mday - 1) << ", "
<< (timePtr->tm_year)+1900 << endl << endl;

outF << endl << endl;

outF << setfill(' ') << setw(12) << left << " Item"
<< setw(22) << left << "Item Purchase"
<< setw(12) << left << "Item"
<< setw(12) << left << "Items"
<< setw(12) << left << "Item"
<< setw(12) << left << "Item" << endl;
outF << setfill(' ') << setw(12) << left << "Number"
<< setw(22) << left << " Date"
<< setw(12) << left << "Cost"
<< setw(12) << left << "Sold"
<< setw(11) << left << "Age*"
<< setw(12) << left << "Revenue" << endl << endl;

RECORDS * node1 = new RECORDS;
node1 = Head;


while (node1 != NULL)
{
//Calculate age of item.
int age = (timePtr->tm_year) + 1900 - node1->year;
float itmRevenue = node1->itemCost*node1->itemsSold;
totalRevenue += itmRevenue;

if(node1->mo <= (timePtr->tm_mon) + 6)
age += 1;
int sub = node1->mo;

//Print to screen.
cout << setw(12) << left << node1->itemNumber
<< setw(5) << left << months[sub];
cout << setw(2) << right << node1->day << ", "
<< setw(13) << left << node1->year;

cout << setw(13) << left << fixed << showpoint << setprecision(2) << node1->itemCost
<< setw(12) << left << node1->itemsSold
<< setw(9) << left << age << "$ "
<< setw(4) << right << fixed << showpoint
<< setprecision(2) << itmRevenue
<< endl << endl;

//Print to file.
outF << setw(12) << left << node1->itemNumber
<< setw(5) << left << months[sub];
outF << setw(2) << right << node1->day << ", "
<< setw(13) << left << node1->year;

outF << setw(13) << left << node1->itemCost
<< setw(12) << left << node1->itemsSold
<< setw(9) << left << age << "$ "
<< setw(4) << right << fixed << showpoint
<< setprecision(2) << itmRevenue
<< endl << endl;

node1 = node1->next;
};
//Print to screen.
cout << endl << endl << setw(58) << right << "Total Revenue"
<< setw(12) << right << "$ " << totalRevenue << endl;

cout << endl << endl << left << " *Age to the nearest year"
<< endl << endl;

//Print to file.
outF << endl << endl << setw(58) << right << "Total Revenue"
<< setw(12) << right << "$ " << totalRevenue << endl;

outF << endl << endl << left << " *Age to the nearest year"
<< endl << endl;

outF.close();
}
int main()
{
ifstream inF;
inF.open("test.dat");

RECORDS * newNode = NULL;
RECORDS * Head = NULL;

//Read in data from file.
while (!inF.eof())
{
newNode = new RECORDS;

inF >> newNode->itemNumber;
inF >> newNode->itemCategory;
inF >> newNode->mo;
inF >> newNode->day;
inF >> newNode->year;
inF >> newNode->itemCost;
inF >> newNode->itemCount;
inF >> newNode->itemsSold;

insert(Head, newNode);
}

RECORDS *temp = Head;

print(Head);

inF.close();

return 0;

6753 COOL 12 01 2001 67.98 25 1e 6292 ELEC 01 15 1994 56.89 80 01 7581 POPY 01 10 2012 90.90 20 00 9234 KLIO 03 11 2013 01.09 99 08 1010 PECH 02 01 1999 23.90 89 12 1013 KKIO 01 09 2018 34.55 10 01 1012 IXCo 06 19 2016 23.89 88 09 0023 VVIU 11 10 2014 90.90 78 12 1111 UUYY 08 08 2011 99.99 100 10 2221 JKLI 09 02 2010 45.90 150 19 9101 PPIO 04 02 2009 34.89 202 02 8

Explanation / Answer


#include <iostream>
#include <cstring>
#include <fstream>
#include <ctime>
#include <iomanip>
#include <string.h>

using namespace std;

struct RECORDS
{
int itemNumber;
string itemCategory;
int mo;
int day;
int year;
float itemCost;
int itemCount;
int itemsSold;
RECORDS *next;
};

void insert(RECORDS*& Head, RECORDS * itemPntr)
{
RECORDS* prev = NULL;
RECORDS* curr = NULL;

//If head is empty.
if (Head == NULL)
{
Head = itemPntr;
}
//Compares item numbers at head of list.
else if (Head != NULL && Head->itemNumber > itemPntr->itemNumber)
{
itemPntr->next = Head;
Head = itemPntr;
}
//If the new item number is less than head item number.

//Compares and adds item in middle of list.
else
{
curr = Head;
while(curr != NULL)
{
if (curr->itemNumber > itemPntr->itemNumber)
{
prev->next = itemPntr;
itemPntr->next = curr;
break;
}
prev = curr;
curr = curr->next;
}
//Item placed at end of list.
if(curr == NULL)
prev->next = itemPntr;
}
}

string get_month( int month_number){
string month;
switch (month_number)
{
case 0: month = "def";
break;
case 1: month = "Jan.";
break;
case 2: month = "Feb.";
break;
case 3: month = "Mar.";
break;
case 4: month = "Apr.";
break;
case 5: month = "May";
break;
case 6: month = "June";
break;
case 7: month = "July";
break;
case 8: month = "Aug.";
break;
case 9: month = "Sep.";
break;
case 10: month = "Oct.";
break;
case 11: month = "Nov.";
break;
case 12: month = "Dec.";
break;
default: // code to be executed if n doesn't match any cases
month = "def";
}

return month;
}


void print(RECORDS * Head)
{
ofstream outF;
outF.open("invrpt.dat");
float totalRevenue = 0;

//Array for month conversion.
//string months[13];
  

// months[0]= "def";
// months[1]= "Jan.";
// months[2]= "Feb.";
// months[3]= "Mar.";
// months[4]= "Apr.";
// months[5]= "May";
// months[6]= "June";
// months[7]= "July";
// months[8]= "Aug.";
// months[9]= "Sept.";
// months[10]= "Oct.";
// months[11]= "Nov.";
// months[12]= "Dec.";
  
  

//Pointer for date.
time_t t = time(NULL);
tm*timePtr = localtime(&t);
int sub2 = timePtr->tm_mon + 1;

string month = get_month(sub2);

//Print to screen.
cout << endl << setw(51) << right << "Inventory Report" << endl << setw(65)
<< right << "Date: " << month << ' ' << (timePtr->tm_mday - 1) << ", "
<< (timePtr->tm_year)+1900 << endl << endl;

cout << endl << endl;

cout << setfill(' ') << setw(12) << left << " Item"
<< setw(22) << left << "Item Purchase"
<< setw(12) << left << "Item"
<< setw(12) << left << "Items"
<< setw(12) << left << "Item"
<< setw(12) << left << "Item" << endl;
cout << setfill(' ') << setw(12) << left << "Number"
<< setw(22) << left << " Date"
<< setw(12) << left << "Cost"
<< setw(12) << left << "Sold"
<< setw(11) << left << "Age*"
<< setw(12) << left << "Revenue" << endl << endl;

//Print to file.
outF << endl << setw(51) << right << "Inventory Report" << endl << setw(65)
<< right << "Date: " << month << ' ' << (timePtr->tm_mday - 1) << ", "
<< (timePtr->tm_year)+1900 << endl << endl;

outF << endl << endl;

outF << setfill(' ') << setw(12) << left << " Item"
<< setw(22) << left << "Item Purchase"
<< setw(12) << left << "Item"
<< setw(12) << left << "Items"
<< setw(12) << left << "Item"
<< setw(12) << left << "Item" << endl;
outF << setfill(' ') << setw(12) << left << "Number"
<< setw(22) << left << " Date"
<< setw(12) << left << "Cost"
<< setw(12) << left << "Sold"
<< setw(11) << left << "Age*"
<< setw(12) << left << "Revenue" << endl << endl;

RECORDS * node1 = new RECORDS;
node1 = Head;


while (node1 != NULL)
{
//Calculate age of item.
int age = (timePtr->tm_year) + 1900 - node1->year;
float itmRevenue = node1->itemCost*node1->itemsSold;
totalRevenue += itmRevenue;

if(node1->mo <= (timePtr->tm_mon) + 6)
age += 1;
int sub = node1->mo;
string month = get_month(sub);

//Print to screen.
cout << setw(12) << left << node1->itemNumber
<< setw(5) << left << month;
cout << setw(2) << right << node1->day << ", "
<< setw(13) << left << node1->year;

cout << setw(13) << left << fixed << showpoint << setprecision(2) << node1->itemCost
<< setw(12) << left << node1->itemsSold
<< setw(9) << left << age << "$ "
<< setw(4) << right << fixed << showpoint
<< setprecision(2) << itmRevenue
<< endl << endl;

//Print to file.
outF << setw(12) << left << node1->itemNumber
<< setw(5) << left << month;
outF << setw(2) << right << node1->day << ", "
<< setw(13) << left << node1->year;

outF << setw(13) << left << node1->itemCost
<< setw(12) << left << node1->itemsSold
<< setw(9) << left << age << "$ "
<< setw(4) << right << fixed << showpoint
<< setprecision(2) << itmRevenue
<< endl << endl;

node1 = node1->next;
};
//Print to screen.
cout << endl << endl << setw(58) << right << "Total Revenue"
<< setw(12) << right << "$ " << totalRevenue << endl;

cout << endl << endl << left << " *Age to the nearest year"
<< endl << endl;

//Print to file.
outF << endl << endl << setw(58) << right << "Total Revenue"
<< setw(12) << right << "$ " << totalRevenue << endl;

outF << endl << endl << left << " *Age to the nearest year"
<< endl << endl;

outF.close();
}
int main()
{
ifstream inF;
inF.open("test.dat");

RECORDS * newNode = NULL;
RECORDS * Head = NULL;

//Read in data from file.
while (!inF.eof())
{
newNode = new RECORDS;

inF >> newNode->itemNumber;
inF >> newNode->itemCategory;
inF >> newNode->mo;
inF >> newNode->day;
inF >> newNode->year;
inF >> newNode->itemCost;
inF >> newNode->itemCount;
inF >> newNode->itemsSold;

insert(Head, newNode);
}

RECORDS *temp = Head;

print(Head);

inF.close();

return 0;

}

// The months array is replaced with switch statement. To better utilize switch statement, it is placed in a fuction string get_month(int);