МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ОДЕССКИЙ НАЦИОНАЛЬНЫЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Институт компьютерных систем
Кафедра информационных систем
Лабораторная работа №3
По предмету: «Теория алгоритмов»
Тема: «Связный список. Хэш таблицы». «Бинарные деревья»
Выполнил:
Студент группы АИ-171
Анищенко Н.А
Проверил:
Шибаева Н.О.
Одесса 2018
Цель работы: Приобретение практических навыков программирования с использованием: списков, хеш-таблицы, бинарные деревья.
Задание
Вариант 1
Разработать базу данных состоящую из 3 таблиц для биржи труда. Обеспечить связь таблиц методом хеш-таблица. Организовать возможность добавление/удаление/редактирование данных. Разработать поиск и учетом возможности добавления поисковых фильтров. В готовом программном решении должен присутствовать графический интерфейс с навигационными элементами.
Код
Main.Cpp
#include<iostream> #include<vector> #include<utility> #include "HashTable.h" #include "Field.h" #include "DBTable.h" #include "reference.h" #include "newfield.h"
using namespace std;
OwnerField* fillOwnerField() { int key; cout << "Enter key: "; cin >> key; string name; cout << "\nEnter name: "; cin >> name; string adress; cout << "\nEnter adress: "; cin >> adress; return new OwnerField(key, name,adress); }
VehicleField* fillVehicleField() { int key; cout << "Enter key: "; cin >> key; int number; cout << "\nEnter number: "; cin >> number; string color; cout << "\nEnter color: "; cin >> color; return new VehicleField(key, number, color); }
PlaceField* fillPlaceField(DBTable* o, DBTable* v) { int key; cout << "Enter key: "; cin >> key; int number; cout << "\nEnter number: "; cin >> number; int o_key; cout << "\nEnter key from Owner table: "; cin >> o_key; int v_key; cout << "\nEnter key from Vehicle table: "; cin >> v_key; return new PlaceField(key, number, make_ref(o_key, o), make_ref(v_key, v)); }
int main() {
DBTable* owner = new DBTable([](int key){ return key/1000+key%1000; });
owner->add(new OwnerField(342322,"Andros","MG")); owner->add(new OwnerField(564522,"Nikitos","rge")); owner->add(new OwnerField(776766,"Vlados","MG43")); owner->add(new OwnerField(847484,"Sanchos","MG46"));
//cout << owner->toString();
DBTable* vehicle = new DBTable([](int key){ return key/100+key%100; });
vehicle->add(new VehicleField(9999,9999,"green")); vehicle->add(new VehicleField(5555,5555,"red")); vehicle->add(new VehicleField(4444,4444,"yellow")); vehicle->add(new VehicleField(1111,1111,"black"));
//cout << vehicle->toString();
DBTable* place = new DBTable([](int key){ return key/10+key%10; });
place->add(new PlaceField(234,9,make_ref(344322,owner),make_ref(9999,vehicle))); place->add(new PlaceField(645,5,make_ref(564522,owner),make_ref(5555,vehicle))); place->add(new PlaceField(492,4,make_ref(776766,owner),make_ref(4444,vehicle))); place->add(new PlaceField(744,1,make_ref(847484,owner),make_ref(1111,vehicle))); /*cout<< "Place: \n"; cout << place->toString();*/
cout << "Hello User\n" << "Coose command from list below:\n"; int table_id = -1;
|
while(table_id) { cout << "1 - Open Owners table\n" << "2 - Open Vehicles table\n" << "3 - Open Places table\n" << "0 - EXIT\n\n";
cin >> table_id; DBTable* temp = NULL; switch (table_id) { case 1: { temp = owner; break;} case 2: { temp = vehicle; break;} case 3: { temp = place; break;} } cout << temp->toString(); int command = -1; cout << "\n\n"; while(command) { cout << "1 - Add row\n" << "2 - Rewrite row\n" << "3 - Delete row\n" << "0 - BACK\n\n"; cin >> command; Field* f = NULL; switch (command) { case 1: { switch(table_id){ case 1: { temp->add(fillOwnerField()); break;} case 2: { temp->add(fillVehicleField()); break;} case 3: { temp->add(fillPlaceField(owner, vehicle)); break; } } break; } case 2: { cout << "Enter rewrited row: \n"; switch(table_id){ case 1: { temp->rewrite(fillOwnerField()); break;} case 2: { temp->rewrite(fillVehicleField()); break;} case 3: { temp->rewrite(fillPlaceField(owner, vehicle)); break; } } break; } case 3: { cout << "Enter row key: "; int k; cin >> k; temp->pop(k); break; } } cout << temp->toString(); cout << "\n\n"; } }
return 0; }
|