0% found this document useful (0 votes)
44 views

FS Program 3

This program implements methods to pack, unpack, modify and search student records stored in a text file with variable-length records. A Student class contains fields for student details and methods to get/set data, pack/unpack records into a buffer, insert/display records from the file, search by USN, and modify a record based on a key. The main function provides a menu to test the class methods and write/read from the data file.

Uploaded by

RanjithaRanju
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
44 views

FS Program 3

This program implements methods to pack, unpack, modify and search student records stored in a text file with variable-length records. A Student class contains fields for student details and methods to get/set data, pack/unpack records into a buffer, insert/display records from the file, search by USN, and modify a record based on a key. The main function provides a menu to test the class methods and write/read from the data file.

Uploaded by

RanjithaRanju
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Program-3

3. Write a program to read and write student objects with Variable-Length


records using any suitable record structure. Implement pack(), unpack(),
modify() and search() methods.
#include<iostream>
#include<fstream>
#include<string.h>
#define SIZE 55
using namespace std;
char buffer[SIZE + 1];

class Student
{
char usn[15];
char name[20];
char sem[5];
char marks[10];
public:
void getData();
void putData();
void pack();
void unpack();
void insert();
void display();
void modify(char *key);
void search(char *key);
};
void Student::getData()
{
cout << "Enter usn, name, sem, marks: \n";
cin >> usn >> name >> sem >> marks;
}
void Student::putData()
{
cout << usn << "\t" << name << "\t\t" << sem << "\t" << marks << endl;
}

void Student::pack()
{
strcpy(buffer, usn); strcat(buffer, "|");
strcat(buffer, name); strcat(buffer, "|");
strcat(buffer, sem); strcat(buffer, "|");
strcat(buffer, marks);
strcat(buffer, "\n");
}
void Student::unpack()
{
char *p;
p = strtok(buffer, "|"); strcpy(usn, p);
p = strtok(NULL, "|"); strcpy(name, p);
p = strtok(NULL, "|"); strcpy(sem, p);
p = strtok(NULL, "#"); strcpy(marks, p);
}
void Student::insert()
{
getData();
pack(); //packs the data into buffer
ofstream fout("record.txt", ios::app);
fout << buffer;
fout.close();
}
void Student::display()
{
ifstream fin("record.txt");
while(!fin.eof())
{
fin.getline(buffer, SIZE + 1, '\n');
if(fin.fail()) break;
unpack();
putData();
}
fin.close();
}
void Student::search(char *key)
{
ifstream fin("record.txt");
int count = 0;

while(!fin.eof())
{
fin.getline(buffer, SIZE + 1, '\n');
if(fin.fail()) break;
unpack();
if(strcmp(usn, key) == 0)
{
putData();
count++;
}
}
cout << "Total records found: " << count << endl;
fin.close();
}
void Student::modify(char *key)
{
ifstream fin("record.txt");
ofstream fout("temp.txt");
int count = 0;
while(!fin.eof())
{
fin.getline(buffer, SIZE + 1, '\n');
if(fin.fail()) break;
unpack();
if(strcmp(usn, key) == 0)
{
getData();
count++;
}
pack();
fout << buffer;
}
if(count == 0)
cout << "USN not found." << endl;
else
cout << "Modified. " << endl;
fin.close();
fout.close();
remove("record.txt");
rename("temp.txt", "record.txt");
}
int main()
{
int choice;
Student s;
char key[15];
while(1)
{
cout << "1.Insert\n"
<< "2.Display\n"
<< "3.Search\n"
<< "4.Modify\n"
<< "5.Exit\n" << endl;
cin >> choice;
switch(choice)
{
case 1:
s.insert();
cout << "Done!" << endl;
break;
case 2:
cout << "The contents are: " << endl;
s.display();
cout << "Done!" << endl;
break;
case 3:
cout << "Enter the key USN: ";
cin >> key;
s.search(key);
cout << "Done!" << endl;
break;
case 4:
cout << "Enter the USN to modify: ";
cin >> key;
s.modify(key);
cout << "Done!" << endl;
break;
default:
return 0;
}
}
}

You might also like