Program faktury.exe
Autor: Ryszard Madejski
Program tworzący, modyfikujący oraz wypisujący bazę danych zawierającą faktury. Aby uzyskać dostęp do jego funkcji należy go wywołać z odpowiednimi parametrami:
-d Dodawanie faktur do bazy danych
-u Usuwanie faktur z bazy danych
-w Wypisywanie faktur z bazy danych
Wywołanie programu: faktury -opcja <plik.in>plik.out
W plik.in powinny się znajdowac w zależności od opcji instrukcje dla programu bądź dane wejściowe.
Dla opcji -d plik.in powinien zawierać liczbę faktur do wczytania, oraz następujące po sobie dane dla faktur. Dla opcji -u musi zawierać ilość faktur do usunięcia a następnie numery tych faktur. Dla opcji
-w należy podać dodatkowo parametry określające sposoby wyświetlania faktur i zaleznie od tego
dalsze dane:
'z' a następnie liczbe faktur oraz numery tych faktur
Parametry niedostepne w tej wersji programu:
's' a następnie przedział <a, b> oraz typ sortowania wg którego mają być wyswietlane faktury
'f' a następnie przedział <a, b> określający wielkość/wysokość danych oraz ich typ:
(1-kupujacy, 2-sprzedajacy, 3-kwoty sumaryczne faktur, 4-terminy zapłaty)
w przypadku 1 i 2 trzeba podac słowo leksykograficznie mniejsze badz rowne od sprzedajacych/kupujacych
majacych byc wyswietlonych oraz slowo ograniczajace ich odgórnie np. 1 Politechnika Politechnika
spowoduje wyswietlenie wszystkich faktur gdzie kupujący to Politechnika
Moduły programu
Moduł Faktury: moduł główny programu
Moduł wczytaj: moduł wczytujący faktur do bazy faktur
Moduł usun: moduł usuwający faktury z bazy faktur
Moduł wypisz: moduł wypisujący na różne sposoby faktury z bazy faktur czasami opierając się na tablicach sortowań
Moduł tools: zawiera funkcje pomocnicze programu
Moduł Faktury (główny)
sprawdz parametry
if (parametry bledne)
wypisz "Błędnie podane parametry"
else{
switch(parametr){
case 'd': Moduł wczytaj
case 'u': Moduł usuń
case 'w': Moduł wypisz
inne : wypisz "Nie rozpoznawalny parametr"
}
}
Moduł wczytaj
otworz plik baza_faktur do edycji
zapamietaj wsk //wskaznik do konca pliku
n = numer poprzedniej faktury //pobiera numer poprzedniej faktury
wczytaj t //t - ilosc faktur
while(t--){
n+=1
zapisz do pliku(n, separator)
wczytaj sprzedajacy
zapisz do pliku(sprzedajacy, separator)
wczytaj kupujacy
zapisz do pliku(kupujacy, separator)//sprzedajacy oraz kupujacy:
//pelne adresy
wczytaj data_sprzedazy
zapisz do pliku(data_sprzedazy, separator)
suma = 0
wczytaj i //i - ilosc produktow
zapisz do pliku(i, separator)
while(i--){
do_zaplacenia = 0
wczytaj nazwa_produktu
zapisz do pliku(nazwa_produktu, separator)
wczytaj miara
zapisz do pliku(miara, separator)
wczytaj ilosc
zapisz do pliku(ilosc, separator)
wczytaj cena_jednostkowa
zapisz do pliku(cena_jednostkowa, separator)
wczytaj VAT
zapisz do pliku(VAT, separator)
do_zaplacenia+=cena_jednostkowa*ilosc*(VAT/100+1)
zapisz do pliku(do_zaplacenia, separator)
suma+=do_zaplacenia
}
zapisz do pliku(suma, separator)
wczytaj forma_platnosci
zapisz do pliku(forma_platnosci, separator)
if (forma_platnosci != zaplacono)
wczytaj termin_platnosci
else
termin_platnosci = -1
zapisz do pliku(termin_platnosci, separator)
zapisz do pliku(koniec_faktury)
}
zamknij plik
aktualizujsort(wsk) //aktyalizacja tablic sortowan, wsk-poczatek nowego bloku
Moduł usun
wczytaj n //ilosc faktur do usuniecia
while(n--){
wczytaj numer_faktury
while(faktura!=faktura do usuniecia)
przepisuj wszystko do pliku tymczasowego
pomin fakture do usuniecia
dopisz reszte faktur do pliku tymczasowego
usun baze faktur
utworz nowa baze faktur
przepisz wszystko z pliku tymczasowego do nowej bazy faktur
usun plik tymczasowy
}
Moduł wypisz
wczytaj sposob //sposob wypisywania danych
if(sposob dobrze zadany){
switch(sposob){
case 'z': wczytaj n
wczytaj n razy numery_faktur[]
wypiszfakt(n, numery_faktur[])
//s i f niedostepne
case 's': wczytaj typ, a,b //a-poczatek przedzialu, b-koniec
sortwypisz(a, b, typ)
case 'f': wczytaj typ, a,b //a-element dolny, b-koncowy
selectwypisz(a, b, typ)
inne: wypisz "Nieznane parametry"
}
}
else
wypisz "Źle podane parametry"
Moduł tools (ważniejsze funkcje pomocnicze - niewywoływalny)
//funkcja niedostepna
funkcja aktualizujsort(wsk){ //wsk do poczatku nowego bloku w pliku
otworz plik baza_faktur do odczytu //aktualizuje tablice sortowan po wstawieniu bloku faktur
otworz plik tablicesort do edycji //baza_faktur
While(wskaznik nie wskazuje na koniec pliku){
kupujacy = wsk kupujacego z bazy faktur
i=1
iter_srt = wsk tablicesort(1,i) //1 linia tablic_sortowan zawiera wskazniki
While(iter_srt(1,i) >L kupujacy) //do linii faktur w takiej kolejnosci, aby
i+=1 //kupujacy byli uporzadkowani leksykograficznie
wstaw wsk
sprzedajacy = wsk sprzedajacego z bazy faktur
i=1
iter_srt = wsk tablicesort(2,i) //2 linia tablic_sortowan zawiera wskazniki
While(iter_srt(2,i) >L sprzedajacy) //do linii faktur w takiej kolejnosci, aby
i+=1 //sprzedajacy byli uporzadkowani leksykograficznie
wstaw wsk
kwota = wsk kwoty do zaplacenia z bazy faktur
i=1
iter_srt = wsk tablicesort(3,i) //3 linia tablic_sortowan zawiera wskazniki
While(iter_srt(3,i) > kwota) //do linii faktur w takiej kolejnosci, aby
i+=1 //kwoty do zaplacenia były uporzadkowane rosnaco
wstaw wsk
termin = wsk terminu do zaplacenia z bazy faktur
i=1
iter_srt = wsk tablicesort(3,i) //4 linia tablic_sortowan zawiera wskazniki
While(iter_srt(4,i) > termin) //do linii faktur w takiej kolejnosci, aby
i+=1 //terminy do zaplacenia były uporzadkowane rosnaco
wstaw wsk
wsk <- wsk na nastepna linie
}
zamknij pliki
}
//funkcja niedostepna
funkcja repairsort(wsk){ //wsk - do usuwanej faktury
otworz plik tablicesort do edycji //naprawia tablice sortowan po usunieciu 1 faktury
j=1
while(j<=4){
i=1
while(iter_srt(j,i)!=EOL){
if (iter_srt(j,i)==wsk)
usun iter_srt(j,i) z tablicesort
else if(iter_srt(j,i)->numer faktury > wsk-> numer faktury){
iter_srt(j,i)-=1 //bedzie wskazywal na wiersz cofniety w pliku o 1
}
}
j+=1;
}
zakmnij plik
}
funkcja wypiszfakt(n){ //wypisuje fakture o numerze n
otworz plik baza_faktur do odczytu
znajdz fakture o numerze n
wypisz fakture
zamknij plik
}
//funkcja niedostepna
funkcja sortwypisz(a,b, typ){ //wypisuje faktury od a-tej to b-tej w zadanej kolejnosci
otworz pliki tablicesort i baza_faktur do odczytu //kol(1-kupujacy, 2-sprzedajacy, 3-kwoty, 4-terminy)
i=0
while(a+i<=b){
wypisz fakture na ktora wskazuje wskaznik (typ,a+i)
}
zamknij pliki
}
//funkcja niedostepna
funkcja selectwypisz(a,b,typ){ //wypisuje faktury z przedzialu <a,b> dla zadanego typu
otworz pliki tablicesort i baza_faktur do odczytu
i=1
while(iter_srt(typ,i)->typ < a)
i+=1
while(iter_srt(typ,i)->typ <= b){
wypisz fakture na ktora wskazuje wskaznik (typ, i)
i+=1
}
zamknij pliki
}
Diagram hierarchii modułów
Schematy strukturalne
Moduł główny
Moduł wczytaj
Moduł usun
Moduł wypisz
RYSZARD MADEJSKI gr. 5 INF
Moduł główny
Faktury
Moduł wczytaj
Moduł usun
Moduł wypisz
tools
START
parametry błędne
TAK
NIE
switch
parametr
'z'
wczytaj
's'
usun
'f'
wypisz
default
wypisz "Nie rozpoznawalny parametr
STOP
START
n = numer poprzedniej faktury
wczytaj t
zapamietaj wsk
t-=1
n+=1
wczytaj/zapisz do pliku sprzedajacy, kupujacy, data_sprzedarzy
suma=0
wczytaj/zapisz i
i-=1
do_zaplacenia = 0
wczytaj/zapisz nazwa_pr, miara, ilosc, cena_jedn, VAT
zapisz do_zaplacenia += cena_jednostkowa * ilosc*(VAT/100+1)
suma+=do_zaplacenia
i=0
NIE
TAK
zapisz suma
wczytaj/zapisz forma_platnosci
forma_platnosci != zaplacono
NIE
TAK
termin_platnosci = -1
termin_platnosci = -1
zapisz termin_platnosci
zapisz koniec_faktury
t=0
NIE
TAK
aktualizujsort(wsk)
STOP
wczytaj n
START
n-=1
wczytaj numer_faktury
numer_faktury istnieje
TAK
NIE
Przejdz do linii: numer_faktury
repairsort(wskaznik do usuwanej lini)
Usun linie
wypisz "Nie ma faktury o numerze numer_faktury w bazie faktur
jestesmy na koncu pliku
NIE
TAK
Zamien:
numer_faktury -> numer_faktury-1
Przejdz do nastepnej linii
n=0
NIE
TAK
STOP
STOP
wypisz "Nieznane parametry"
default
'f'
wczytaj typ, a,b
selectwypisz(a, b, typ)
's'
wczytaj typ, a,b
sortwypisz(a, b, typ)
'z'
wczytaj n
wczytaj n razy numery_faktur[]
wypiszfakt(n, numery_faktur[])
switch
sposob
NIE
TAK
sposob zle podany
START
wczytaj sposob
wypisz "Źle podany parametr"