[C++] Program ewidencji studentów
W tym wpisie stworzymy prosty program ewidencji studentów. Program ma mieć następujące możliwości:
- Wyświetlenie listy studentów;
- Dodawanie nowego studenta;
- Usunięcie z listy danego studenta;
Jako bazę danych dla listy studentów wykorzystamy plik tekstowy z rozszerzeniem csv.
Program ma zapisywać i wyświetlać następujące informacje o studentach: ID, imię i nazwisko, rok urodzenia oraz kierunek studiów.
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <sstream>
class Student {
public:
int id; // Numer porządkowy studenta
std::string name; // Imię
std::string surname; // Nazwisko
std::string birthDate; // Data urodzenia w formacie d/m/RRRR
std::string major; // Kierunek studiów
// Konstruktor studenta
Student(int id, std::string n, std::string s, std::string bDate, std::string m)
: id(id), name(n), surname(s), birthDate(bDate), major(m) {}
// Metoda do zapisu studenta w formacie CSV z separatorem ;
std::string toCSV() const {
return std::to_string(id) + ";" + name + ";" + surname + ";" + birthDate + ";" + major;
}
// Metoda do wczytywania studenta z formatu CSV
static Student fromCSV(const std::string &csvLine) {
std::stringstream ss(csvLine);
std::string idStr, n, s, bDate, m;
std::getline(ss, idStr, ';');
std::getline(ss, n, ';');
std::getline(ss, s, ';');
std::getline(ss, bDate, ';');
std::getline(ss, m, ';');
return Student(std::stoi(idStr), n, s, bDate, m);
}
};
class StudentDatabase {
private:
std::vector<Student> students;
const std::string filename = "students.csv";
// Metoda do wczytywania studentów z pliku CSV
void loadStudents() {
std::ifstream file(filename);
if(file) {
std::string line;
while (std::getline(file, line)) {
students.push_back(Student::fromCSV(line));
}
file.close();
}
else {
std::cout << "Plik nie został znaleziony, rozpoczynamy z pustą bazą.\n";
}
}
// Metoda do zapisywania studentów do pliku CSV
void saveStudents() const {
std::ofstream file(filename);
for(const auto& student : students) {
file << student.toCSV() << "\n";
}
file.close();
}
public:
StudentDatabase() {
loadStudents(); // Ładowanie studentów przy inicjalizacji bazy
}
~StudentDatabase() {
saveStudents(); // Zapis do pliku przy zamykaniu bazy
}
void addStudent(const Student& student) {
students.push_back(student);
}
void displayStudents() const {
for(const auto& student : students) {
std::cout << "ID: " << student.id
<< ", Imię: " << student.name
<< ", Nazwisko: " << student.surname
<< ", Data urodzenia: " << student.birthDate
<< ", Kierunek: " << student.major << std::endl;
}
}
// Funkcja do dodawania nowego studenta
void inputNewStudent() {
int id = students.size() + 1; // Generowanie ID na podstawie liczby studentów
std::string name, surname, birthDate, major;
std::cout << "Wprowadź imię: ";
std::getline(std::cin, name);
std::cout << "Wprowadź nazwisko: ";
std::getline(std::cin, surname);
std::cout << "Wprowadź datę urodzenia (d/m/RRRR): ";
std::getline(std::cin, birthDate);
std::cout << "Wprowadź kierunek studiów: ";
std::getline(std::cin, major);
Student newStudent(id, name, surname, birthDate, major);
addStudent(newStudent);
std::cout << "Student dodany\n";
}
// Funkcja do usuwania studenta po ID
void removeStudentById(int id) {
auto it = std::remove_if(students.begin(), students.end(), [id](const Student& amp;student) {
return student.id == id;
});
if(it != students.end()) {
students.erase(it, students.end());
std::cout << "Student o ID " << id << " został usunięty.\n";
}
else {
std::cout << "Nie znaleziono studenta o ID " << id << ".\n";
}
}
};
int main() {
StudentDatabase db;
int choice;
do {
std::cout << "\nMenu:\n";
std::cout << "1. Dodaj studenta\n";
std::cout << "2. Wyświetl studentów\n";
std::cout << "3. Usuń studenta według ID\n";
std::cout << "0. Wyjdź\n";
std::cout << "Wybierz opcję: ";
std::cin >> choice;
std::cin.ignore(); // Ignorowanie znaku nowej linii po wprowadzeniu liczby
switch(choice) {
case 1:
db.inputNewStudent();
break;
case 2:
std::cout << "Lista studentów:\n";
db.displayStudents();
break;
case 3: {
int idToRemove;
std::cout << "Podaj ID studenta do usunięcia: ";
std::cin >> idToRemove;
db.removeStudentById(idToRemove);
break;
}
case 0:
std::cout << "Program zakończony.\n";
break;
default:
std::cout << "Nieprawidłowy wybór, spróbuj ponownie.\n";
break;
}
}
while(choice != 0);
return 0;
}
Komentarze
Prześlij komentarz
Dzięki za komentarz!