1. Write a menu driven inventory maintenance program using a linked list. Each node of the list should contain three data fields: the item name, the item number and the number of units in stock. Initially the list should be empty. A menu should be developed which allows the programmer to perform the following operations:
a. G – Get the existing data from a binary file (created above)
b. I -- Insert a new item in the list – user must enter item name, item number and number of units.
c. D -- Delete an existing item – user must enter an item number only to do this
d. R – Reduce the number of units for a particular item – user must enter item number and number of units removed.
e. P -- Print all of the items in stock and the number of units of each.
f. Write a new list back to the file.
g. U – Update the original file with new information
Here is what I have so far:
#include<iostream>
#include<fstream>
using namespace std;
typedef struct node
{
int data;
node *next;
}node;
node *insertEnd(node *head, int val);
void getData(node *current_head)
void insertPos(node *current_head)
void delete_spe(node *&head, char *number, int &count)
void reduceInv(node *current_head)
void printList(node *current_head)
void updateData(node *current_head)
void showMenu();
int main()
{
node *head = NULL;
int input, val;
ifstream myfile;
myfile.open("input.txt");
while (myfile >> val)
head = insertEnd(head, val);
while (true) {
showMenu();
cin >> input;
switch (input) {
case 1:
getData (head);
break;
case 2:
insertPos(head);
break;
case 3:
delete_spe (head, num, count);
break;
case 4: reduceInv (head);
break;
case 5: printList (head);
break;
case 6: updateData (head);
break;
case 7: return 0;
break;
default: cout << endl;
}
cout << endl;
}
return 0;
}
node *insertEnd(node *current_head, int val)
{
node *temp;
temp = current_head;
if (temp == NULL) {
node* newnode = new node;
newnode->data = val;
newnode->next = current_head;
return newnode;
}
while (temp->next != NULL)
temp = temp->next;
node* newnode = new node;
newnode->data = val;
newnode->next = NULL;
temp->next = newnode;
return current_head;
}
void showMenu() {
cout << "1. Get the existing data.\n";
cout << "2. Insert a new item in the list .\n";
cout << "3. Delete an existing item .\n";
cout << "4. Reduce the number of units for a particular item .\n";
cout << "5. Print list.\n";
cout << "6. Update File\n";
cout << "7. Quit\n";
cout << "\n Please enter a choice: ";
}
//get data
void getData(node *current_head)
{
string name;
ofstream myfile;
myfile.open("example.txt");
while (!myfile.fail() && !myfile.eof())
{
myfile >> name;
cout << name << endl;
}
myfile.close();
}
//insert new data
void insertPos(node *current_head)
{
int position;
cout << "Please enter the Name: ";
cin >> Data.itemName;
cout << "Please enter the Item Number: ";
cin >> Data.itemNumber;
cout << "Please enter the quantity: ";
cin >> Data.numOfItems;
cout << "Please enter the number after which you want to insert: ";
cin >> position;
node *temp = current_head;
while (temp != nullptr && temp->data != position)
temp = temp->next;
//cout << temp->data << endl;
if (temp != nullptr)
{
node* newnode = new node;
newnode->data = Data.itemName;
newnode->data = Data.itemNumber;
newnode->data = Data.numOfItems;
newnode->next = temp->next;
temp->next = newnode;
cout << "Number inserted into the list." << endl;
}
else
cout << "Element not found in the list." << endl;
}
//delete an item - edit to delete a number specified item
void delete_spe(node *&head, char *number, int &count)
{
node* current, *temp;
temp = head;
current = head;
if (head == NULL) //if head null
{
cout << "\n No element in list";
return;
}
else
{
while (temp != NULL) //travesre till you get name in list
{
/* if(temp->number==number)
break;
*/
//compare name and temp name
if (strcmp(temp->name, number) == 0)
break; //if found come out of the loop
current = temp;
temp = temp->next;
}
current->next = temp->next; //link current next node to temp next node
delete temp; //delete temp
count--;
}
}
//reduce the number of units
void reduceInv(node *current_head)
{
int position, reduction, newTotal;
cout << "Please enter the item number: ";
cin >> position;
node *temp = current_head;
while (temp != nullptr && temp->data != position)
if (temp != nullptr)
{
cout << "How much would you like to reduce the inventory? \n";
cin >> reduction;
newTotal = item.Data.itemNumber - reduction;
item.Data.itemNumber = newTotal;
cout << "Inventory Updated" << endl;
}
else
cout << "Element not found in the list." << endl;
}
//print
void printList(node *current_head)
{
cout << "Linked List: ";
while (current_head != nullptr)
{
cout << current_head->data << " ";
current_head = current_head->next;
}
cout << endl;
}
//update the original file
void updateData(node *current_head)
{
string name;
ofstream myfile;
myfile.open("example.txt");
while (!myfile.fail() && !myfile.eof())
{
while (true) {
showMenu();
cin >> input;
switch (input) {
case 1:
insertPos(head);
break;
case 2:
deleteLast(head);
break;
case 3:
frequency(head);
break;
case 4: sort(head);
break;
case 5: printList(head);
break;
case 6: return 0;
break;
default: cout << endl;
}
cout << endl;
}
myfile.close();
}
//