Answer:
#include<iostream>
#include<string>
#include <fstream>
using namespace std;
struct kitten
{
string name,color;
int score;
};
struct roster
{
struct kitten kittens[10];
int size=0;
};
void printMenu()
{
cout<<"MENU\\"<<"a - Add kitten\\b - Delete kitten\\u - Update kitten color and cuteness score\\f - Find kitten\\l - Load kitten info from file\\s - Save kitten info to file\\o - Output roster\\q - Quit\\\\Choose an option : ";
}
int findKitten(string str, struct roster* ros)
{
for(int i=0; i<ros->size; i++)
{
if(ros->kittens[i].name == str)
{
cout<<"KittenName: "<<ros->kittens[i].name<<" Color: "<<ros->kittens[i].color<<" Score: "<<ros->kittens[i].score<<"\\";
return i;
}
}
return -1;
}
void addKitten(struct kitten* kit, struct roster* ros)
{
if(ros->size>=10)
{
cout<<"Impossible to add new kitten: roster is full\\";
return;
}
ros->size++;
ros->kittens[ros->size]=*kit;
cout<<"Successfully added new kitten to roster\\";
}
bool deleteKitten(string name,struct roster* ros)
{
int index = findKitten(name,ros);
if(index == -1)
return false;
while(index<ros->size-1)
{
ros->kittens[index] = ros->kittens[index+1];
}
ros->size--;
return true;
}
bool updateKitten(struct kitten* kit, struct roster* ros)
{
int index = findKitten(kit->name,ros);
if(index == -1)
{
return false;
}
ros->kittens[index] = *kit;
return true;
}
void printRoster(struct roster* ros)
{
cout<<"ROSTER\\";
for(int i=0; i<ros->size; i++)
{
cout<<"Kitten "<<i+1<<" -- Name: "<<ros->kittens[i].name<<", Color: "<<ros->kittens[i].color<<", Score "<<ros->kittens[i].score<<"\\";
}
}
void getKittenFromFile(string str, struct roster* ros)
{
ifstream myfile;
myfile.open(str.c_str());
if(!myfile)
{
cout<<"Error! File not found.\\";
return;
}
for(ros->size=0; myfile; ros->size++)
{
if(!myfile.eof())
{
myfile>>ros->kittens[ros->size].name;
myfile>>ros->kittens[ros->size].color;
myfile>>ros->kittens[ros->size].score;
}
else
break;
}
ros->size++;
}
void printToFile(string str, struct roster* ros)
{
ofstream myfile;
myfile.open(str.c_str());
myfile<<"ROSTER\\";
for(int i=0; i<ros->size; i++)
myfile<<"Kitten "<<i+1<<" -- Name: "<<ros->kittens[i].name<<", Color: "<<ros->kittens[i].color<<", Score "<<ros->kittens[i].score<<"\\";
myfile.close();
}
int main()
{
struct roster kittenRoster;
struct kitten kit;
int index;
char ch;
string name;
bool bol;
int loop =1;
while(loop)
{
printMenu();
cin>>ch;
switch(ch)
{
case 'a' :
cout<<"Enter a new kitten's name: ";
cin>>kit.name;
cout<<"Enter the kittne's color: ";
cin>>kit.color;
cout<<"Enter the kitten's cuteness score: ";
cin>>kit.score;
addKitten(&kit,&kittenRoster);
break;
case 'd' :
if (kittenRoster.size == 0)
{
cout<<"Cannot delete from empty roster.\\";
break;
}
cout<<"Enter kitten name to delete: ";
cin>>kit.name;
bol = deleteKitten(kit.name,&kittenRoster);
if(bol == false)
cout<<"Error! Kitten not found\\";
break;
case 'u' :
cout<<"Enter a kitten's name: ";
cin>>kit.name;
cout<<"Enter the new color: ";
cin>>kit.color;
cout<<"Enter the new score: ";
cin>>kit.score;
bol = updateKitten(&kit,&kittenRoster);
if(bol)
cout<<"Successfully updates kitten info\\";
else
cout<<"Cannot find kitten\\";
break;
case 'f' :
cin>>kit.name;
index = findKitten(kit.name,&kittenRoster);
if (index == -1)
cout<<"Kitten not found.\\";
break;
case 'l' :
cout<<"Enter the file name :";
cin>>name;
getKittenFromFile(name,&kittenRoster);
break;
case 's' :
cout<<"Enter the file name :" ;
cin>>name;
printToFile(name,&kittenRoster);
break;
case 'o' :
printRoster(&kittenRoster);
break;
case 'q' :
loop = 0;
break;
default:
cout<<"Invalid option. Please try again\\";
}
}
}
Step-by-step explanation:
- Define a kitten structure with name, color and score properties.
- Define a roster structure with kittens and size properties.
- Call the printMenu method inside the main method.