Untitled
unknown
c_cpp
3 years ago
5.5 kB
16
Indexable
#include <iostream>
#include <string>
#include <fstream>
#include <string>
using namespace std;
struct studentRec {
int id, cgpa;
string name;
}stu[10];
int index = -1;
bool isEmpty() {
if (index == -1) {
return true;
}
else {
return false;
}
}
bool isFull() {
if (index == 10) {
return true;
}
else {
return false;
}
}
// function to get index value at start of program
void getIndex() {
fstream getIndex;
getIndex.open("index.txt",ios::in);
getIndex>> index;
getIndex.close();
}
// printing function
void printAllData() {
for (int i = 0; i < index; i++) {
cout << endl << "STUDENT ID :" << stu[i].id << endl << "STUDENT NAME : " << stu[i].name << endl << "STUDENT CGPA : " << stu[i].cgpa << endl;
}
}
// searching function
void searchData() {
if (isEmpty() == true) {
cout << "array underflow.";
}
else {
int x;
bool found = false;
cout << "SEARCH DATA \n \n";
cout << "enter which id you want to search \n \n";
cin >> x;
for (int i = 0; i < index; i++) {
if(stu[i].id == x) {
found = true;
cout << "FOUND!" << endl;
cout << "FOUND AT " << i << endl;
}
}
if (found == false) {
cout << "NOT FOUND ANYWHERE! \n ";
}
}
}
// input function
void inputData() {
if (isFull() == true) {
cout << "array overflow. \n \n";
}
else {
index++;
cout << "Enter ID of " << index << " STUDENT " << endl;
cin >> stu[index].id;
cout << "Enter name of " << index << " STUDENT" << endl;
getline(cin >> ws, stu[index].name);
cout << "Enter CGPA OF " << index << " STUDENT" << endl;
cin >> stu[index].cgpa;
fstream putValue;
putValue.open("data.txt", ios::app);
putValue << stu[index].id << endl << stu[index].name << endl << stu[index].cgpa << endl;
putValue.close();
// now updating the index value inside the index.txt file.
fstream putIndex;
putIndex.open("index.txt", ios::out);
putIndex << index;
putIndex.close();
}
}
// updating function
void updateRec() {
system("CLS");
int x;
cout << "\n \n \t \t UPDATE RECORD \n \n";
cout << "enter id of student to make changes to the record \n \n";
cin >> x;
for (int i = 0; i < index; i++) {
if (stu[i].id == x) {
cout << "enter the changed name. \n \n";
cin >> stu[i].name;
cout << "\n enter the changed cgpa \n \n";
cin >> stu[i].cgpa;
}
}
// now removing and remaking the records to save changes permenantly.
remove("data.txt");
// the arrays were saved in the program, hence the data is saved in arrays, so we are using them to remake the file after changes
fstream remakeData;
remakeData.open("data.txt");
for(int i = 0; i < index; i++) {
remakeData << stu[i].id << endl << stu[i].name << endl << stu[i].cgpa << endl;
}
remakeData.close();
// there is no change in index, hence index remains same, however, in delete function we would have to remake index.txt
}
//deleting function
void delRec() {
system("CLS");
int j;
int x;
if (isEmpty() == true) {
cout << "array underflow.";
}
else {
cout << "DELETE A RECORD \n \n";
// to delete a record, using student id instead of index of array for efficiency
cout << "enter id of student you want to delete \n \n";
cin >> x;
for (int i = 0; i < index; i++) {
if(stu[i].id == x) {
j = i; // j is the index at which the id is found
}
}
// we will use j as the value for i, so that we start from there and then give stu[j] value of stu[j+1] and so and, and give stu[index] = 0
for (int i = j; i < index; i++) {
stu[j].id = stu[j+1].id;
stu[j].name = stu[j+1].name;
stu[j].cgpa = stu[j+1].cgpa;
}
stu[index].id = 0;
stu[index].name = " ";
stu[index].cgpa = 0;
index--;
// now we have to remake index.txt because a change in index variable is made.
remove("index.txt");
fstream remakeIndex;
remakeIndex.open("index.txt", ios::out);
remakeIndex << index;
remakeIndex.close();
// remaking the data.txt file
remove("data.txt");
fstream remakeData;
remakeData.open("data.txt",ios::out); // using ios::out because array has saved data before.
for (int i = 0; i < index; i++) {
remakeData << stu[i].id << endl << stu[i].name << endl << stu[i].cgpa << endl;
}
remakeData.close();
}
}
int main() {
getIndex();
// getting index value from a txt file, which will be ++ whenever an input is given
// getting all values from file to array:::
string temp;
fstream getValues;
getValues.open("data.txt",ios::in);
for(int i = 0; i < index; i++) {
getValues >> stu[i].id >> temp >> stu[i].cgpa;
stu[i].name = temp;
}
// making a menu
int choice;
char cont;
do {
system("cls");
cout << "press 1 to input data \n press 2 to print all data \n press 3 to search data \n press 4 to update data \n press 5 to delete rec" << endl;
cin >> choice;
if (choice == 1) {
inputData();
}
else if (choice == 2) {
printAllData();
}
else if (choice == 3) {
searchData();
}
else if (choice == 4) {
updateRec();
}
else if (choice == 5) {
delRec();
}
else {
cout << "invalid choice";
}
cout << "do you want to continue? y/n" << endl;
cin >> cont;
} while(cont == 'y' || cont == 'Y');
return 0;
}
Editor is loading...