#include <iostream>
#include <fstream>
#include <cstring>
struct node {
char ch;
node* next;
};
struct Date {
char dd[3];
char mm[3];
char yy[5];
};
struct Reminder {
char name[50];
Date datebd;
char rel[50];
};
void enterLineText(const char* prompt, char* str, int maxLength) {
std::cout << prompt;
std::cin.getline(str, maxLength);
}
void addReminder(std::fstream& file) {
Reminder rem;
enterLineText("Enter Name: ", rem.name, sizeof(rem.name));
enterLineText("Enter Birth Date (DD MM YYYY): ", rem.datebd.dd, sizeof(rem.datebd.dd));
enterLineText("Enter Relationship: ", rem.rel, sizeof(rem.rel));
file.write(reinterpret_cast<char*>(&rem), sizeof(rem));
std::cout << "Reminder successfully Added!\n";
}
void deleteReminder(std::fstream& file) {
char name[50];
bool found = false;
enterLineText("Enter Name to Delete: ", name, sizeof(name));
std::fstream tempFile("Temp.dat", std::ios::out | std::ios::binary);
Reminder rem;
while (file.read(reinterpret_cast<char*>(&rem), sizeof(rem))) {
if (strcmp(name, rem.name) != 0) {
tempFile.write(reinterpret_cast<char*>(&rem), sizeof(rem));
}
else {
found = true;
}
}
tempFile.close();
file.close();
remove("Birthday.dat");
rename("Temp.dat", "Birthday.dat");
if (found) {
std::cout << "Reminder successfully Deleted!\n";
}
else {
std::cout << "Reminder Not Found!\n";
}
}
void viewReminder(std::fstream& file) {
char name[50];
bool found = false;
enterLineText("Enter Name to View: ", name, sizeof(name));
file.seekg(0, std::ios::beg);
Reminder rem;
while (file.read(reinterpret_cast<char*>(&rem), sizeof(rem))) {
if (strcmp(name, rem.name) == 0) {
std::cout << "Name: " << rem.name << "\n";
std::cout << "Birth Date: " << rem.datebd.dd << "/" << rem.datebd.mm << "/" << rem.datebd.yy << "\n";
std::cout << "Relationship: " << rem.rel << "\n";
found = true;
break; // assuming only one entry per name
}
}
if (!found) {
std::cout << "Reminder not found!\n";
}
}
int main() {
std::fstream bdFile("Birthday.dat", std::ios::in | std::ios::out | std::ios::binary | std::ios::app);
while (true) {
std::cout << "\n1. Add Reminder\n";
std::cout << "2. Delete Reminder\n";
std::cout << "3. View Reminder\n";
std::cout << "4. Exit\n";
std::cout << "Enter your choice: ";
int choice;
std::cin >> choice;
if (std::cin.fail()) {
// Handle invalid input (non-integer)
std::cin.clear(); // Clear the error flag
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Discard invalid input
std::cout << "Invalid input. Please enter a number.\n";
continue; // Restart the loop
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Clear the input buffer
switch (choice) {
case 1:
addReminder(bdFile);
break;
case 2:
deleteReminder(bdFile);
break;
case 3:
viewReminder(bdFile);
break;
case 4:
bdFile.close();
return 0;
default:
std::cout << "Invalid choice. Try again.\n";
}
}
}