Projekt w ramach przedmiotu Podstawy Informatyki i Programowania 2023Z
Elektroniczny System Kwaterowania Studentów został stworzony w celu ułatwienia procesu zakwaterowania studentów na Politechnice Warszawskim i lepsze dopasowanie przyszłych współlokatorów do siebie. Obejmuje funkcje importowania danych o akademikach i studentach, wyświetlania informacji o akademikach, studentach oraz zarządzania procesem zakwaterowania.
Projekt podzielony jest na kilka modułów i plików, z których każdy odpowiada za określone zadania. Poniżej przedstawiamy krótki opis każdego z nich:
- student.py: Zawiera definicję klasy
Student, reprezentującej studenta w systemie. - dormitory.py: Odpowiada za definicję klasy
Dormitory, która reprezentuje akademik w systemie. - room.py: Odpowiada za definicję klasy
Room, która reprezentuje pokój w systemie. - segment.py: Odpowiada za definicję klasy
Segment, która reprezentuje segment w systemie. - segmentType.py: Zawiera definicję klasy
SegmentType, reprezentującej typ segmentu w akademiku. - funcStudents.py: Zawiera funkcje związane z przetwarzaniem i manipulacją listy studentów.
- funcDorms.py: Odpowiada za funkcje związane z akademikami, takie jak pobieranie konkretnych segmentów i znajdowanie typów segmentów.
- exceptions: Katalog zawierający moduły definiujące niestandardowe klasy wyjątków używane w projekcie.
- student.py: Zawiera klasy wyjątków związanych z klasą
Student. - dormitory.py: Zawiera klasy wyjątków związanych z klasą
Dormitory. - room.py: Zawiera klasy wyjątków związanych z klasą
Room. - segment.py: Zawiera klasy wyjątków związanych z klasą
Segment. - segmentType.py: Zawiera klasy wyjątków związanych z klasą
SegmentType. - rest.py: Zawiera pozostałe klasy wyjątków.
- student.py: Zawiera klasy wyjątków związanych z klasą
- importFile.py: Zawiera funkcje służące do importu danych z plików zewnętrznych.
- inputOutput.py: Odpowiada za funkcje związane z interakcją z użytkownikiem, takie jak edycja danych, wyświetlanie informacji o akademikach itp.
- accommodationAction.py: Zawiera funkcje związane z procesem akcji kwaterunkowej, czyli przydzielaniem studentów do segmentów akademików.
- graphs.py: Zawiera funkcje związane z operacjami na grafach, wykorzystywane dla studentów, którzy wskazali w systemie, że chcą mieszkać z konkrentym innym studentem.
- main.py: Plik, którego celem jest tylko uruchomienie funkcji
esks() - esks.py: Główny plik aplikacji, zawiera funkcję
esks, która obsługuje interfejs użytkownika. - dorms.json: Plik JSON zawierający dane o akademikach.
- raport.txt: Plik tekstowy, w którym zapisywane są informacje o studentach.
- README.md: Plik z dokumentacją
- generatory: Katalog zawierający pliki służące do generowania danych wejściowych
- siri wygeneruj mi studentów.py: Plik generujący losowe dane wejściowe ze studentami biorącymi udział w danej akcji kwaterunkowej w formacie txt
- siri wygeneruj mi akademiki.py: Plik generujący plik
dorms.jsonbędący danymi wejściowymi z informacjami o akademikach
- pytest files: Katalog zawierający z plikami z testami jednostkowymi za pomocą
pytest- test_student.py: Zawiera testy dla klasy
Student. - test_dormitory.py: Zawiera testy dla klasy
Dormitory. - test_room.py: Zawiera testy dla klasy
Room. - test_segment.py: Zawiera testy dla klasy
Segment. - test_segmentType.py: Zawiera testy dla klasy
SegmentType. - test_funcStudents.py: Zawiera testy dla modułu
funcStudents - test_funcDorms.py: Zawiera testy dla modułu
funcDorms - test_graphs.py: Zawiera testy dla modułu
graphs
- test_student.py: Zawiera testy dla klasy
- Uruchomienie Aplikacji: Uruchom plik
main.pyw terminalu lub IDE, aby uruchomić aplikację. - Interakcja z Aplikacją: Aplikacja poprosi Cię o podjęcie różnych działań, takich jak edycja danych, wyświetlanie informacji o akademikach, składanie wniosków itp.
python3 main.py
- dorms.json: Plik JSON zawierający dane o akademikach. Struktura pliku musi być zgodna z oczekiwanym formatem.
- students.txt: Plik txt zawierający dane o studentach. Struktura pliku musi być zgodna z oczekiwanym formatem.
Klasa Student przechowuje informacje o pojedynczym studencie, takie jak numer identyfikacyjny, rok urodzenia, płeć, wydział, kierunek studiów, preferencje dotyczące zakwaterowania itp.
Klasa Dormitory reprezentuje pojedynczy akademik. Zawiera informacje o dostępnych pokojach, segmentach i innych istotnych szczegółach.
Klasa Room reprezentuje pojedynczy pokój. Zawiera informacje o dostępnych segmentach, wielkości oraz wyposażeniu pokoju.
Klasa Segment reprezentuje pojedynczy segment. Zawiera informacje o dostępnych ilości łóżek oraz mieszkańcach.
Klasa SegmentType definiuje różne typy segmentów w akademiku, takie jak lokalizacja, liczba lokatorów itp.
- Import danych o akademikach i studentach z odpowiednich plików.
- Studenci, którzy wskazali, że chcą mieszkać razem są grupowani i przydzielany jest im segment najbardziej zbliżony im wspólnej preferencji
- Studenci dzieleni są na grupy studentów, którzy będą mieszkać w segmentach o tym samym typie w poniższej kolejności:
- studenci, którzy dokładnie wskazali, gdzie chcą mieszkać
- studenci, którzy wskazali typ segmentu, który faktycznie istnieje
- studenci, którzy wskazali nieistniejący typ segmentu, ale taki, dla którego istnieje inny zdecydowanie lepszy
- pozostali studenci do najbardziej zbliżonego typu segmentu do tego, który wskazali
- Studenci w danych grupach są dobierani w pary, trójki, czwórki itd w taki sposób, żeby jak najbardziej do siebie pasowali jako przyszli współlokatorzy
Niestety w wielu miejscach w kodzie wpisane są sztywne wartości dotyczące informacji o akademikach lub studiach na PW. Należałoby to zamienić na importowany plik np w formacie JSON