Лаба 1

Run Settings
LanguageC++
Language Version
Run Command
/* Задание на дом. Лабораторная №1. Связный список, классы - Создать класс Карточка (библиотечная, кадрова и т.п. - тему выбрать самостоятельно). - Создать список (однонаправленный или двунаправленный) из карточек. - Реализовать следующие функции: X создание пустого списка X создание элемента списка (данные из консоли) X добавление карточки в конец списка X включение карточки после текущей X поиск карточки (по ключу, по имени..) X удаление карточки из списка X изменение карточки X печать карточки (в консоль) X печать всего списка загрузка списка из файла сохранение списка в файл При этом карточка обязательно должна содержать данные с типом char. char *title; //Заголовок книги Использовать в функциях передачу параметров с помощью указателей и по ссылке, при этом везде, где не требуется изменять значение, использовать const.*/ /* 2 Helen Rouger 01.11.2007 Pushkin lyceum Mark Gordon 01.11.2007 School №7 Annie Leonhart 01.11.2007 104th Training Corps */ #include <iostream> #include <string> #include <cstring> using namespace std; class Student { private: int id; int get_new_id() { static int id = 0; return id++; } void input_field(char *field, int size, const char *description) { // Выводит приглашение для ввода такого типа: // > Description (value): // (value) выводится только если field[0] != '\0' cout << "> " << description; if (field[0]) { cout << " (" << field << ")"; } cout << ": "; string input; getline(cin, input); // Если юзер ничего не ввел, то в input[0] будет хранится '\0', и if не сработает. if (input[0]) { int length = input.copy(field, size); field[length] = '\0'; } cout << "\n"; } public: char fname[30]; char lname[30]; char birthday[11]; char school[50]; Student *next; Student() { id = get_new_id(); fname[0] = '\0'; lname[0] = '\0'; birthday[0] = '\0'; school[0] = '\0'; next = nullptr; input(); } void print() { //вывод карточки cout << id << "\n" << fname << "\n" << lname << "\n" << birthday << "\n" << school << "\n"; } void input() { // ввод карточки this->input_field(fname, sizeof fname, "Firstname"); this->input_field(lname, sizeof lname, "Lastname"); this->input_field(birthday, sizeof birthday, "Birthday"); this->input_field(school, sizeof school, "School"); } int get_id() { // для уникального ID return id; } }; class Students { Student *head; int length; public: Students() { head = nullptr; } void print() { // печатаем список Student *current = head; while (current) { current->print(); current = current->next; } } void push(Student *student) { student->next = head; head = student; } bool remove(int id) { Student *student = head; Student *prev = nullptr; while (student) { if (student->get_id() == id) { if (prev) { prev->next = student->next; } else { head = student->next; } delete student; return true; } prev = student; student = student->next; } return false; } bool append(int id, Student *student) { //вставка Student *predecessor = get(id); if (predecessor) { Student *tmp = predecessor->next; predecessor->next = student; student->next = tmp; return true; } return false; } Student * get(int id) { // поиск по ID Student *student = head; while (student) { if (student->get_id() == id) { return student; } student = student->next; } return nullptr; } Student * find(string query, bool continue_from_last = false) { static Student *student = nullptr; student = continue_from_last ? (student->next) : head; while (student != nullptr) { string fullname = string(student->fname) + ' ' + string(student->lname); if (fullname.find(query) != -1) { return student; } student = student->next; } return nullptr; } }; int main() { Students students = Students(); int slaves_num; cout << "How much slaves do you want? "; cin >> slaves_num; cin.ignore(); while(slaves_num--) { // добавляем студентво Student *st = new Student(); students.push(st); } cout << "\nBefore append\n"; students.print(); // выводим их students.append(0, new Student()); // функция вставки cout << "\nAfter append\n"; students.print(); // воводим со вставкой cout << "\nFind\n"; students.find("An")->print(); // ищем и выводим студента по имени //students.find("An", true)->print(); // продолжение поиска cout << "\n"; students.get(1)->print(); // ищем и выводим студента по ID cout << "\nDelete\n"; students.remove(1); // удаляем первого студента students.print(); // выводим их cout << "\nGet\n"; //редактирование Student * student = students.get(0); if (student) { student->input(); } students.print(); // выводим их*/ }
Editor Settings
Theme
Key bindings
Full width
Lines