//Required header files #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <string> #include <algorithm> using namespace std; //To add a single book detail void addBook() { fstream file; file.open("main.csv", ios::out | ios::app); if (!file) { cout << "No CSV file found"; } else { int id, pages, price, year; string bookName, authorName, publisher; cout << "\n\nEnter Book ID:\t"; cin >> id; cin.ignore(); cout << "Enter Book Name:\t"; getline(cin, bookName); cout << "Enter Author Name:\t"; getline(cin, authorName); cout << "Enter Price:\t"; cin >> price; cout << "Enter No. of Pages:\t"; cin >> pages; cin.ignore(); cout << "Enter Publisher:\t"; getline(cin, publisher); cout << "Enter Year of Publishing:\t"; cin >> year; cin.ignore(); file << id << "," << bookName << "," << authorName << "," << price << "," << pages << "," << publisher << "," << year << "\n"; } } //To add multiple book details (overloaded) void addBook(int n) { fstream file; file.open("main.csv", ios::out | ios::app); if (!file) { cout << "No CSV file found"; } else { int id, pages, price, year; string bookName, authorName, publisher; for (int i = 0; i < n; i++) { cout << "\n\nEnter record " << i + 1 << endl; cout << "Enter Book ID:\t"; cin >> id; cin.ignore(); cout << "Enter Book Name:\t"; getline(cin, bookName); cout << "Enter Author Name:\t"; getline(cin, authorName); cout << "Enter Price:\t"; cin >> price; cout << "Enter No. of Pages:\t"; cin >> pages; cin.ignore(); cout << "Enter Publisher:\t"; getline(cin, publisher); cout << "Enter Year of Publishing:\t"; cin >> year; cin.ignore(); file << id << "," << bookName << "," << authorName << "," << price << "," << pages << "," << publisher << "," << year << "\n"; } } } //To count total number of book details in file int rowCount() { string temp; fstream file; file.open("main.csv", ios::in); int i = 0; while (getline(file, temp)) { i++; } return i; } //To view book details void viewBook(int choice) { fstream file; file.open("main.csv", ios::in); int count = rowCount(); string stringData[count][7]; for (int row = 0; row < count; row++) { string line; getline(file, line); if (!file.good()) break; stringstream iss(line); for (int col = 0; col < 7; col++) { string val; getline(iss, val, ','); stringstream converter(val); getline(converter, stringData[row][col]); } } string detailCheck; cout << "Enter detail to check:\t"; getline(cin, detailCheck); int i = 1; for (int row = 1; row < count; row++) { string compCheck = stringData[row][choice]; if (!compCheck.compare(detailCheck)) { cout << "\n\nDetail:\t" << i << endl; cout << "Book ID:\t" << stringData[row][0] << endl; cout << "Book Name:\t" << stringData[row][1] << endl; cout << "Author Name:\t" << stringData[row][2] << endl; cout << "Price:\t" << stringData[row][3] << endl; cout << "No. of Pages:\t" << stringData[row][4] << endl; cout << "Publisher:\t" << stringData[row][5] << endl; cout << "Year of Publishing:\t" << stringData[row][6] << endl; i++; } else{ cout << "\n\nNo detail found." << endl; }break; } } //Extra function for using sort efficiently bool sortcol(const vector<string> &v1, const vector<string> &v2) { string str1 = v1[2]; string str2 = v2[2]; transform(str1.begin(), str1.end(), str1.begin(), ::tolower); transform(str2.begin(), str2.end(), str2.begin(), ::tolower); return str1 < str2; } //Arange book in a new file void arrangeBook() { fstream fin, fout; fin.open("main.csv", ios::in); fout.open("mainChanged.csv", ios::out); int count = rowCount(); string stringData[count][7]; for (int row = 0; row < count; row++) { string line; getline(fin, line); if (!fin.good()) break; stringstream iss(line); for (int col = 0; col < 7; col++) { string val; getline(iss, val, ','); stringstream converter(val); getline(converter, stringData[row][col]); } } vector<vector<string> > vec; for (int i = 1; i < count; i++) { vector<string> temp; for (int j = 0; j < 7; j++) { temp.push_back(stringData[i][j]); } vec.push_back(temp); } sort(vec.begin(), vec.end(), sortcol); fout << "Book ID,Book Name,Author Name,Price,Pages,Publisher,Year of Publishing\n"; for (int i = 0; i < count-1; i++) { for (int j = 0; j < 7; j++) { if (j == 6) { fout << vec[i][j] << "\n"; } else { fout << vec[i][j] << ","; } } } } //Displays the main menu void mainMenu() { cout << "\n\nPlease select a choice to proceed." << endl; cout << "1\tAdd book details." << endl; cout << "2\tSearch specific book details." << endl; cout << "3\tArrange book details by their Author's name." << endl; cout << "4\tExit program." << endl; cout << "Enter your choice:\t" << endl; } //Displays the add book details section void addMenu() { cout << "\n\nYour are in Add details section.\nChoose anyone of the following choices" << endl; cout << "1\tAdd single book detail." << endl; cout << "2\tAdd multiple book details." << endl; cout << "3\tExit section." << endl; cout << "Enter your choice:\t" << endl; } //Displays the search book details section void searchMenu() { cout << "\n\nYour are in Search details section.\nChoose anyone of the following choices" << endl; cout << "1\tSearch by Book ID." << endl; cout << "2\tSearch by Book Name." << endl; cout << "3\tSearch by Author Name." << endl; cout << "4\tSearch by Price." << endl; cout << "5\tSearch by Pages number." << endl; cout << "6\tSearch by Publisher." << endl; cout << "7\tSearch by Year of Publishing." << endl; cout << "8\tExit section." << endl; cout << "Enter your choice:\t" << endl; } //Main function int main() { cout << "Welcome !!!!!" << endl; cout << "\nThis program lets you add, search and arrange book details." << endl; int choice; do { mainMenu(); cin >> choice; if (choice == 1) { do { addMenu(); cin >> choice; cin.ignore(); switch (choice) { case 1: addBook(); break; case 2: int n; cout << "Enter number of books you want to add." << endl; cin >> n; cin.ignore(); addBook(n); break; case 3: cout << "Exiting section....." << endl; break; default: cout << "Invalid Input!!! Try again." << endl; break; } } while (choice != 3); } else if (choice == 2) { do { searchMenu(); cin >> choice; cin.ignore(); if (choice < 8 && choice > 0) { viewBook(choice - 1); } else if (choice == 8) { cout << "Exiting section....." << endl; } else { cout << "Invalid Input!!! Try again." << endl; } } while (choice != 8); } else if (choice == 3) { cout << "\n\nThe book details have been arranged in ascending order by their Author's name." << endl; arrangeBook(); } else if (choice == 4) { cout << "Exiting....." << endl; } else { cout << "Invalid Input!!! Try again." << endl; } } while (choice != 4); return 0; }
Write, Run & Share C++ code online using OneCompiler's C++ online compiler for free. It's one of the robust, feature-rich online compilers for C++ language, running on the latest version 17. Getting started with the OneCompiler's C++ compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as C++
and start coding!
OneCompiler's C++ online compiler supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample program which takes name as input and print your name with hello.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "Enter name:";
getline (cin, name);
cout << "Hello " << name;
return 0;
}
C++ is a widely used middle-level programming language.
When ever you want to perform a set of operations based on a condition If-Else is used.
if(conditional-expression) {
//code
}
else {
//code
}
You can also use if-else for nested Ifs and If-Else-If ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to If-Else-If ladder.
switch(conditional-expression){
case value1:
// code
break; // optional
case value2:
// code
break; // optional
......
default:
code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
//code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while (condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity. Function gets run only when it is called.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
// code
}