: Write a program to take input for n book records from user and write those book records in a file named: ”record”, whose price is less than INR 500 . Program should also perform random access in the file, after taking input for a particular record number to read and it should also perform random record overwriting after taking input of new record and the record number to overwrite. After overwriting record, display all records on the screen [Attributes of book: Book_id, Book_price, Book_name, Book_author_name]
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
struct Book
{
int Book_id;
float Book_price;
string Book_name;
string Book_author_name;
};
void Menu()
{
cout << "\nSelect from the following: "
<< "\n1 - Find the record"
<< "\n2 - Edit the record"
<< "\n3 - Add new record"
<< "\n4 - Show all records"
<< "\n0 - Exit program";
cout << "\nYour select: ";
}
void FindRecord()
{
int Bid;
cout << "\nPlease, enter a book id to read record from file: ";
cin >> Bid;
bool found = false;
ifstream ifs("record.txt");
if (!ifs.is_open())
cout << "File isn`t opened!";
else
{
string line;
while (getline(ifs, line, '\n'))
{
if (line.find(to_string(Bid))!=string::npos)
{
cout << line << endl;
found = true;
}
}
}
if (!found)cout << "\nThe record wasn`t found";
ifs.close();
}
void EditRecord()
{
int Bid;
cout << "\nPlease, enter a book id to read record from file: ";
cin >> Bid;
bool found = false;
fstream fs("record.txt",ios::in|ios::out);
if (!fs.is_open())
cout << "File isn`t opened!";
else
{
string line;
while (getline(fs, line, '\n'))
{
if (line.find(to_string(Bid)) != string::npos)
{
cout << line << endl;
found = true;
fs.seekg(-1, ios::cur);
Book tmp;
cout << "Please, enter a book id: ";
cin>>tmp.Book_id;
fs << tmp.Book_id<<" ";
cout << "Please, enter a book price: ";
cin >> tmp.Book_price;
fs << tmp.Book_price << " ";
cout << "Please, enter a book name: ";
cin >> tmp.Book_name;
fs << tmp.Book_name << " ";
cout << "Please, enter a book author name: ";
cin >> tmp.Book_author_name;
fs << tmp.Book_author_name;
break;
}
}
}
if (!found)cout << "\nThe record wasn`t found";
fs.close();
}
void AddRecord()
{
fstream fs("record.txt", ios::out|ios::app);
if (!fs.is_open())
cout << "File isn`t opened!";
else
{
Book tmp;
cout << "Please, enter a book id: ";
cin >> tmp.Book_id;
fs << tmp.Book_id<<" ";
cout << "Please, enter a book price: ";
cin >> tmp.Book_price;
fs << tmp.Book_price << " ";
cout << "Please, enter a book name: ";
cin >> tmp.Book_name;
fs << tmp.Book_name << " ";
cout << "Please, enter a book author name: ";
cin >> tmp.Book_author_name;
fs << tmp.Book_author_name ;
}
fs.close();
}
void ShowRecords()
{
ifstream ifs("record.txt");
if (!ifs.is_open())
cout << "File isn`t opened!";
else
{
string line;
while (getline(ifs, line, '\n'))
{
cout << line << endl;
}
}
ifs.close();
}
int main()
{
int n;
cout << "Please, enter a number of books: ";
cin >> n;
Book* arr = new Book[n];
for (int i = 0; i < n; i++)
{
cout << "Please, enter a book id: ";
cin>>arr[i].Book_id;
cout << "Please, enter a book price: ";
cin >> arr[i].Book_price;
cout << "Please, enter a book name: ";
cin >> arr[i].Book_name;
cout << "Please, enter a book author name: ";
cin >> arr[i].Book_author_name;
}
ofstream of;
of.open("record.txt");
if (!of.is_open())
cout << "File isn`t opened!";
else
{
for (int i = 0; i < n; i++)
{
if (arr[i].Book_price < 500)
{
of << arr[i].Book_id << " " << arr[i].Book_price << " "
<< arr[i].Book_name << " " << arr[i].Book_author_name << endl;
}
}
}
of.close();
char select;
do
{
Menu();
cin >> select;
switch (select)
{
case '1':
{
FindRecord();
break;
}
case '2':
{
EditRecord();
break;
}
case '3':
{
AddRecord();
break;
}
case '4':
{
ShowRecords();
break;
}
}
} while (select!='0');
delete[]arr;
}
Comments
Leave a comment