diff --git a/.idea/workspace.xml b/.idea/workspace.xml index f5214e2..75e322a 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -80,6 +80,7 @@ + @@ -102,6 +103,6 @@ - + \ No newline at end of file diff --git a/changelog-UC.txt b/changelog-UC.txt index 74da955..8e7a1d8 100644 --- a/changelog-UC.txt +++ b/changelog-UC.txt @@ -24,3 +24,9 @@ - Doprowadzenie programu do podstawowego stanu użyteczności (występuje błąd: nie można dodać drugiej ścieżki poprzez wybór) - Utworzenie systemu crashlogów - Zastosowanie systemu crashlogów dla głównego modułu + +4.0 Alpha (Build 19349.2) +- Nowy system dialogowy +- Stworzenie pliku formatu +- Usunięcie plików format.py i dataprocess.py +- Przygotowanie do dalszych prac diff --git a/components/__pycache__/dialog.cpython-38.pyc b/components/__pycache__/dialog.cpython-38.pyc index 7ef5676..ebafbb8 100644 Binary files a/components/__pycache__/dialog.cpython-38.pyc and b/components/__pycache__/dialog.cpython-38.pyc differ diff --git a/components/__pycache__/load_config.cpython-38.pyc b/components/__pycache__/load_config.cpython-38.pyc index 64f87e9..3474cb2 100644 Binary files a/components/__pycache__/load_config.cpython-38.pyc and b/components/__pycache__/load_config.cpython-38.pyc differ diff --git a/components/__pycache__/load_format.cpython-38.pyc b/components/__pycache__/load_format.cpython-38.pyc new file mode 100644 index 0000000..d5847b2 Binary files /dev/null and b/components/__pycache__/load_format.cpython-38.pyc differ diff --git a/components/__pycache__/processing.cpython-38.pyc b/components/__pycache__/processing.cpython-38.pyc index 2c3e1dc..51255a3 100644 Binary files a/components/__pycache__/processing.cpython-38.pyc and b/components/__pycache__/processing.cpython-38.pyc differ diff --git a/components/dataprocess.py b/components/dataprocess.py deleted file mode 100644 index 9bc6c9b..0000000 --- a/components/dataprocess.py +++ /dev/null @@ -1,38 +0,0 @@ -import time as TM - -def plr(text): - text1 = text.replace('ę', 'e') - text2 = text1.replace('ó', 'o') - text3 = text2.replace('ą', 'a') - text4 = text3.replace('ś', 's') - text5 = text4.replace('ł', 'l') - text6 = text5.replace('ż', 'z') - text7 = text6.replace('ź', 'z') - text8 = text7.replace('ć', 'c') - text9 = text8.replace('ń', 'n') - text10 = text9.replace('Ę', 'E') - text11 = text10.replace('Ó', 'O') - text12 = text11.replace('Ą', 'A') - text13 = text12.replace('Ś', 'S') - text14 = text13.replace('Ł', 'L') - text15 = text14.replace('Ż', 'Z') - text16 = text15.replace('Ź', 'Z') - text17 = text16.replace('Ć', 'C') - text = text17.replace('Ń', 'N') - return text - -def ctc(Klasa): - czas = TM.localtime() - miesiac = czas[1] - if miesiac >= 9: - rokpodst = czas[0] - else: - rokpodst = czas[0] - 1 - nrklasy = int(Klasa[0]) - literaklasy = Klasa[1] - szkola = Klasa.split(' ')[1] - if szkola == 'BS': - znacznik = str((4 - nrklasy) + rokpodst) + szkola - else: - znacznik = str((5 - nrklasy) + rokpodst) + literaklasy - return znacznik \ No newline at end of file diff --git a/components/dialog.py b/components/dialog.py index e022e84..36c1e05 100644 --- a/components/dialog.py +++ b/components/dialog.py @@ -14,11 +14,41 @@ + + + +# ----------------------------------------------- # Kody dialogowe # ------------------------------------------------- # + +E = [] # Błędy +E.append(["Nie znaleziono pliku konfiguracyjnego (config.cfg).\nPrzywróć plik. (E01x0000)", True]) #0 +E.append(["Błąd pliku konfiguracyjnego (config.cfg).\nNiepoprawna ilość wierszy w pliku\nPrzywróć plik. (E01x0001)", True]) #1 +E.append(["Bład pliku konfiguracyjnego (config.cfg).\nNiepoprawne dane w wierszu 1\nPrzywróć plik. (E01x0011)", True]) #2 +E.append(["Bład pliku konfiguracyjnego (config.cfg).\nNiepoprawne dane w wierszu 2\nPrzywróć plik. (E01x0012)", True]) #3 +E.append(["Nie znaleziono pliku składowego (instruction.txt)\nPrzywróć plik. (E03x0010)", False]) #4 + + + +I = [] # Informacje +I.append(["Pomyślnie zapisano!\nDla niektórych zmian może być wymagane ponowne uruchomienie programu", False]) #0 (I0001) + + + +A = [] # Zapytania + + + + + + + + # ----------------------------------- # Import bibliotek zewnętrznych i modułów # ------------------------------------ # # Biblioteki zewnętrzne import sys as SS + + # Biblioteki zewnętrzne interfejsu graficznego from tkinter import messagebox as TKmsb @@ -32,25 +62,25 @@ from tkinter import messagebox as TKmsb # --------------------------------------------------- # Funkcje # ---------------------------------------------------- # # Okno dialogowe błędu -def Err(KodBledu): - Message = 'Wystąpił błąd!\n' + KodBledu[0] +def err(ErrorIndex): + Message = 'Wystąpił błąd!\n' + E[ErrorIndex][0] TKmsb.showerror('Błąd', Message) - if KodBledu[1]: + if E[ErrorIndex][1]: SS.exit(0) # Okno dialogowe informacyjne -def Inf(KodInformacji): - TKmsb.showinfo('Informacja', KodInformacji[0]) - if KodInformacji[1]: +def inf(InfoIndex): + TKmsb.showinfo('Informacja', I[InfoIndex][0]) + if I[InfoIndex][1]: SS.exit(0) # Okno dialogowe zapytania -def Ask(KodZapytania): - if TKmsb.askokcancel('Pytanie', KodZapytania): +def Ask(AskIndex): + if TKmsb.askokcancel('Pytanie', A[AskIndex]): return True else: return False diff --git a/components/format.py b/components/format.py deleted file mode 100644 index 69472dc..0000000 --- a/components/format.py +++ /dev/null @@ -1,141 +0,0 @@ -# Oznaczenia zmiennych: -# K - Klasa -# N - Nazwisko -# I - Imie -# L - Login do librusa - - - - - -import codecs as cd - -def SprawdzKlasa(K): - if len(K.split(' ')) != 2: # Wywołuje błąd jeżeli napis nie dzieli się w pożądanym formacie - blad = int('x') # - - for x in range(0,10): # - if K[1:].find(str(x)) != -1: # Wywołuje bląd jeżeli w nazwie klasy (poza numerem klasy) znajduje się liczba - blad = int('x') # - - numery_niedozwolone = [0,9,8,7,6,5,4] # Określa numery klas które nie istnieją - - for x in numery_niedozwolone: # - if K[0] == str(x): # Wywołuje błąd jeżeli numer klasy jest równy numerowi niedozwolonemu - blad = int('x') # - - szkoly = ['BS', 'LO'] # Określa istniejące szkoly - - if K.split(' ')[1] not in szkoly: # Wywołuje błąd jeżeli szkola nie należy do szkół istniejących - blad = int('x') # - - oddzialy = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'w', 'y', 'z'] # Określa istniejące oddzialy - - if K[1] not in oddzialy: # Wywołuje błąd jeżeli oddział nie należy do oddziałów istniejących - blad = int('x') # - - -def SprawdzNazwisko(N): - for a in N: - for x in range(0,10): # - if a.find(str(x)) != -1: # Wywoluje blad jeżeli nazwisko zawiera liczbę - blad = int('x') # - - -def SprawdzImie(I): - for x in range(0,10): # - if I.find(str(x)) != -1: # Wywoluje blad jeżeli imie zawiera liczbę - blad = int('x') # - - -def SprawdzLogin(L, CzyUczen): - if CzyUczen and L[-1] != 'u': # Wywoluje blad jeżeli login ucznia nie zawiera na końcu 'u' - blad = int('x') # - - if CzyUczen: # - blad = int(L[:-1]) # Wywoluje blad jeżeli login (-'u' dla ucznia) nie jest liczbą - else: # - blad = int(L) # - - - - -def przetworz(dane): - dane = dane.split('\n\n') # dzielenie danych na pojedyńcze osoby - - przetworzone = [] # tworzenie kontenera na przetworzone dane - - for osoba in dane: # - try: # - x = int(osoba[0]) # - except ValueError: # Sprawdza czy osoba jest nauczycielem czy uczniem - CzyUczen = False # - else: # - CzyUczen = True # - - # Dla uczniów - if CzyUczen: - K = osoba.split(', ')[0].split(' ')[:2] - K = K[0] + ' ' + K[1] - N = osoba.split(', ')[0].split(' ')[2:] - I = osoba.split(', ')[1].split(' ')[0] - L = osoba.split(', ')[1].split(' ')[2] - - # Sprawdzenie poprawności - SprawdzKlasa(K) - SprawdzNazwisko(N) - SprawdzImie(I) - SprawdzLogin(L, CzyUczen) - - dane = [K, N, I, L, CzyUczen] - przetworzone.append(dane) - # Dla nauczycieli - else: - N = osoba.split(', ')[0].split(' ') - I = osoba.split(', ')[1].split(' ')[-4] - L = osoba.split(', ')[1].split(' ')[-2] - - # Sprawdzenie poprawnosci - SprawdzNazwisko(N) - SprawdzImie(I) - SprawdzLogin(L, CzyUczen) - - dane = [N, I, L, CzyUczen] - przetworzone.append(dane) - return przetworzone - - - - - - -# Legenda do części dokumentacji poniżej: -# X - Dane nieznaczące -# Q - Pusta linia - - -# Format danych dla uczniów: -# , -# - -# Przykład: -# 1a BS Nowak, Adam 1234567u -# - - -# Format danych dla nauczycieli: -# , -# - -# Przykład: -# Nowak, Adam 1234567 -# - - - - -# Inne: -# - skrypt akceptuje prefix 'ks.', nieuwzględnia go w przetwarzaniu -# - skrypt akceptuje nazwiska holenderskie (typu 'van X', 'van der X' itp.) i uwzględnia je w przetwarzaniu -# - skrypt nie akceptuje nazwisk złożonych (np. Nowak-Kowalska) -# - skrypt wymaga kodowania ANSI diff --git a/components/load_config.py b/components/load_config.py index f8cca29..4032213 100644 --- a/components/load_config.py +++ b/components/load_config.py @@ -17,35 +17,19 @@ -# ----------------------------------------- # Definicja kodów dialogowych # ------------------------------------------ # - -E000x01 = "Brak modułu wywołującego okna dialogowe ('dialog.py').\nPrzywróć plik. (E000x01)" -E001x01 = ["Brak pliku konfiguracyjnego ('config.cfg').\nPrzywróć plik. (E001x01)", True] -E002x00 = ["Bład pliku konfiguracyjnego ('config.cfg').\nNiepoprawna ilość wierszy w pliku\nPrzywróć plik. (E002x00)", True] -E002x01 = ["Bład pliku konfiguracyjnego ('config.cfg').\nNiepoprawne dane w wierszu 1\nPrzywróć plik. (E002x01)", True] -E002x02 = ["Bład pliku konfiguracyjnego ('config.cfg').\nNiepoprawne dane w wierszu 2\nPrzywróć plik. (E002x02)", True] - -I001 = ["Pomyślnie zapisano!\nDla niektórych zmian może być wymagane ponowne uruchomienie programu", False] - - - - - - - - - # ----------------------------------- # Import bibliotek zewnętrznych i modułów # ------------------------------------ # # Biblioteki zewnętrzne import sys as SS + + # Moduły składowe programu try: import dialog as MDdlg except ModuleNotFoundError: - print('Nieoczekiwany wyjatek - nie mozna wygenerowac okna dialogowego bledu\n\nBŁĄD KRYTYCZNY!\n%s') %E000x01 - wait = input('Naciśnij ENTER aby zakończyć') + print('Nie znaleziono modułu programu (dialog.py)\nNie można załadować programu\nKod błędu: E00x0001') + wait = input('Naciśnij ENTER aby wyjść') SS.exit(0) @@ -64,7 +48,7 @@ def CheckConfig(settings): if len(settings) != 2: error = int('x') except ValueError: - MDdlg.Err(E002x00) + MDdlg.err(1) # Linia 1 (0/1) try: @@ -72,15 +56,15 @@ def CheckConfig(settings): if 0 > check > 1: error = int('x') except ValueError: - MDdlg.Err(E002x01) - + MDdlg.err(2) # Linia 2 (utf-8) + DostepneKodowanieWyjsciowe = ['utf-8'] try: if settings[1] not in DostepneKodowanieWyjsciowe: error = int('x') except ValueError: - MDdlg.Err(E002x02) + MDdlg.err(3) @@ -89,7 +73,7 @@ def read(): try: check = open('.\config.cfg') except FileNotFoundError: - MDdlg.Err(E001x01) + MDdlg.err(0) else: with open('.\config.cfg', 'r') as cfg: config = cfg.read().split('\n') @@ -107,7 +91,7 @@ def edit(settings): try: check = open('.\config.cfg') except FileNotFoundError: - MDdlg.Err(E001x01) + MDdlg.err(0) else: SettingsToSave = [] SettingsToSave.append('Ciemny motyw(0/1): ' + str(settings[0]) + '\n') @@ -115,4 +99,4 @@ def edit(settings): with open('.\config.cfg', 'w') as cfg: for x in SettingsToSave: cfg.write(x) - MDdlg.Inf(I001) \ No newline at end of file + MDdlg.inf(0) \ No newline at end of file diff --git a/components/load_format.py b/components/load_format.py new file mode 100644 index 0000000..6bda8c5 --- /dev/null +++ b/components/load_format.py @@ -0,0 +1,40 @@ +""" +# GeneratorCSV +# Wersja 4.0 Experimental +# by Mateusz Skoczek +# luty 2019 - grudzień 2019 +# dla ZSP Sobolew + +# +# Moduł zarządzający plikiem formatu +# +""" + + + + + + + + +# ----------------------------------- # Import bibliotek zewnętrznych i modułów # ------------------------------------ # + +# Biblioteki zewnętrzne +import sys as SS + +# Moduły składowe programu +try: + import dialog as MDdlg +except ModuleNotFoundError: + print('Nie znaleziono modułu programu (dialog.py)\nNie można załadować programu\nKod błędu: E00x0001') + wait = input('Naciśnij ENTER aby wyjść') + SS.exit(0) + + + + + + + + +# --------------------------------------------------- # Funkcje # ---------------------------------------------------- # \ No newline at end of file diff --git a/components/main.py b/components/main.py index e98f86d..daffd0a 100644 --- a/components/main.py +++ b/components/main.py @@ -14,6 +14,9 @@ + + + # -------------------------------------------- # Informacje o programie # -------------------------------------------- # Nazwa = 'GeneratorCSV' @@ -28,10 +31,6 @@ Wersja = '4.0 Experimental' # ----------------------------------------- # Definicja kodów dialogowych # ------------------------------------------ # -E000x01 = "Brak modułu wywołującego okna dialogowe ('dialog.py').\nPrzywróć plik. (E000x01)" -E000x02 = ["Brak modułu zarządzającego plikiem konfiguracyjnym ('load_config.py').\nPrzywróć plik. (E000x02)", True] -E001x01 = ["Brak pliku formatu 'format.py'.\nPrzywróć plik. (E001x01)", True] -E001x02 = ["Brak pliku instrukcji ('instruction.txt').\nPrzywróć plik. (E001x02)", False] E003x01 = ["Nie podano lokalizacji plików do importu. (E003x01)", False] E003x02 = ["Nie podano lokalizacji zapisu wygenerowanych plików. (E003x02)", False] @@ -61,24 +60,31 @@ import sys as SS try: import dialog as MDdlg except ModuleNotFoundError: - print('Nieoczekiwany wyjatek - nie mozna wygenerowac okna dialogowego bledu\n\nBŁĄD KRYTYCZNY!\n%s') %E000x01 - wait = input('Naciśnij ENTER aby zakończyć') + print('Nie znaleziono modułu programu (dialog.py)\nNie można załadować programu\nKod błędu: E00x0001') + wait = input('Naciśnij ENTER aby wyjść') SS.exit(0) try: import load_config as MDlcg except ModuleNotFoundError: - MDdlg.Err(E000x02) + print('Nie znaleziono modułu programu (load_config.py)\nNie można załadować programu\nKod błędu: E00x0002') + wait = input('Naciśnij ENTER aby wyjść') + SS.exit(0) try: - import format as MDfmt + import load_format as MDlfm except ModuleNotFoundError: - MDdlg.Err(E000x02) + print('Nie znaleziono modułu programu (load_format.py)\nNie można załadować programu\nKod błędu: E00x0003') + wait = input('Naciśnij ENTER aby wyjść') + SS.exit(0) try: import processing as MDprc except ModuleNotFoundError: - MDdlg.Err(E000x02) + print('Nie znaleziono modułu programu (processing.py)\nNie można załadować programu\nKod błędu: E00x0004') + wait = input('Naciśnij ENTER aby wyjść') + SS.exit(0) + # Biblioteki zewnętrzne interfejsu graficznego @@ -93,7 +99,7 @@ import tkinter as TK - +#TODO # ------------------------------------- # Uruchomienie interfejsu graficznego # -------------------------------------- # # Zmienne globalne środowiska graficznego diff --git a/components/processing.py b/components/processing.py index 7c9b316..12f2077 100644 --- a/components/processing.py +++ b/components/processing.py @@ -1,3 +1,4 @@ +#TODO import dataprocess as MDdtp import load_config as MDlcg import dialog as MDdlg diff --git a/format.fmt b/format.fmt new file mode 100644 index 0000000..e69de29 diff --git a/generator.py b/generator.py index af82ea4..b765a01 100644 --- a/generator.py +++ b/generator.py @@ -17,45 +17,13 @@ -# ------------ # Import bibliotek zewnętrznych i modułów oraz inicjacja funkcji zapisywania crashlogów # ------------- # - -# Funkcja zapisująca crashlogi -def crash(ErrorCode): - import sys as SS - import time as TM - d = TM.localtime() - name = 'crashlogs/crash_' + str(d[2]) + str(d[1]) + str(d[0]) + str(d[3]) + str(d[4]) + str(d[5]) + '.txt' - with open(name, 'w') as crash: - crash.write('Critical error!\n' + ErrorCode) - SS.exit(0) - -# Błędy -E000x00 = "Brak głównego pliku składowego programu ('main.py'). Przywróć plik. (E000x00)" - - - - - - - - -# ----------------------------------- # Import bibliotek zewnętrznych i modułów # ------------------------------------ # - -import os as OS - - - - - - - - - # ----------------------------------------- # Uruchomienie głównego modułu # ----------------------------------------- # try: fck = open("components/main.py") except: - crash(E000x00) + print('Nie znaleziono głównego modułu programu (main.py)\nNie można załadować programu\nKod błędu: E00x0000') + wait = input('Naciśnij ENTER aby wyjść') else: - OS.system("components\main.py") \ No newline at end of file + import os + os.system("components\main.py") \ No newline at end of file