PROJEKT Budzet domowy (C++), sprawozdanie

background image

Program: Budżet domowy

Autor: Dariusz Mikołajczuk

UWAGA:

Przed uruchomieniem programu należy jego folder skopiować na dysk gdyż program

modyfikuje swoje pliki.

Wstęp

Program budżet domowy pozwala na gromadzenie wpisów przedstawiających wpływy i

wydatki. Do każdego wpisu można przypisać kategorie: praca, żywność, rozrywka itp. Wprowadza
się też kwotę, datę i opis operacji.

Dane wyświetlane są w tabeli pozwalającej na przeglądanie wpisów, ich edycję oraz dodawanie

nowych i usuwanie istniejących wpisów.

Przy zamknięciu programu lista zapisywana jest do pliku, przy starcie lista jest automatycznie

wczytywane.

Niestety nie zaimplementowałem obsługi bilansów i planów wydatkowych ze względu na brak

czasu.

Działanie programu

Program działa w oparciu na listę dwukierunkową składających się z obiektów klasy Wpis.

Klasa Wpis przechowuje dane dotyczące pojedynczego wpisu, pozwala na wyświetlanie, edycje

i tworzenie nowego wpisu.

Klasa Lista pozwala na elementarne operacje na liście dwukierunkowej: tworzenie, dodawanie

elementów, usuwanie.

Klasa Baza zajmuje się wyświetlaniem listy operacji, przeprowadza odczyt i zapis bazy do pliku.

Z uwagi na konieczność intensywnego korzystania z pól klasy Lista, klasa ta dziedziczy z klasy
Lista. Pozwoliło to na wykorzystanie konstruktora i destruktora klasy Baza do operacji
wczytywanie i zapisywania pliku.

Klasa Menu wyświetla menu główne.

Dodatkowymi elementami są:

1) przestrzeń nazw Kategoria (pierwotnie klasa zawierająca tylko składowe statyczne) pozwala

na wyświetlanie listy dostępnych kategorii operacji. Konwertuje numer kategorii na jej
nazwę. Identyfikuje na podstawie numer rodzaj operacji: wpływ, wydatek.

2) Klasa Data przechowuje datę operacji, pozwala na wczytywanie i sprawdzanie poprawności

daty. Dodatkowo sprawdza, czy dana data jest wcześniejsza od innej, co wykorzystane jest
przy dodawaniu nowych wpisów (wpisy ułożone są w kolejności od najstarszych do
najnowszych)

3) Metody statyczne dokonujące konwersji string → uint, string → float, oraz sprawdzająca

czy dany string zawiera liczbę typu unsigned int

background image

Listing klas, metod i pól:

static bool isUint(string str) // czy str jest typu unsigned int

static int toUint(string str) // konwersja string → unsigned int
static float toFloat(string str) // konwersja string → float

namespace Kategorie

const int countWplyw

; // liczba kategorii wpływów

const string catWplyw[countWplyw]

; // tablica kategorii wpływów

const int countWydat;

// liczba kategorii wydatków

const string catWydat[countWydat];

// tablica kategorii wydatków

void wyswietlKategorie();

// wyświetla listę kategorii wraz z przypisanymi numerami

int iloscKategorii();

// zwraca łączną ilość kategorii

string getKategoria(int nr);

// zwraca opis kategorii o danym numerze

bool czyWplyw(int nr);

// sprawdza czy kategoria o danym numerze jest wpływem

class Data // data operacji

private int dzien;
private int miesiac;
private int rok;
private bool czyPrzestepny(int& rok)

// sprawdza czy rok jest przestępny

private bool czyPoprawna(string& str)

// czy data jest poprawna, czy postaci: dd-mm-rrrr, d-mm-rrrr, dd-m-rrrr, d-m-rrrr

Data()

// konstruktor domyślny

void pobierzData(string txt="Podaj datę operacji (DD-MM-RRRR)")

// prosi o podanie i pobiera datę

int getDzien()

// zwraca dzień operacji

int getMiesiac()

// zwraca miesiąc

int getRok()

// zwraca rok

void setDzien(int& d)

// ustawia dzień operacji

void setMiesiac(int& m)

// ustawia miesiąc

void setRok(int& r)

// ustawia rok

bool czyWczesniejszaOd(Data Tej)

// czy data (this) jest wcześniejsza od parametru

string toString()

// przekształca datę na string postaci dd-mm-rrrr

class Wpis // przechowuje pojedynczą operacje

private string kategoria;
private Data *date;
private float kwota;
private bool wplyw;

// true - wpis oznacza wpływ, false - wpis oznacza wydatek

private string opis;

background image

private void pobierzKategoria(string str="Wybierz kategorie operacji:")

// prosi o podanie i pobiera kategorię

private void pobierzKwota(string str="Podaj kwotę operacji")

// prosi o podanie i pobiera kwotę

private void pobierzOpis(string str="Podaj opis operacji (opcjonalnie)")

// prosi o podanie i pobiera opis

Wpis()

// konstruktor domyślny

// prosi o podanie wszystkich danych wpisu i zapisuje je

Wpis(string &dataline)

// konstruktor– tworzy nowy wpis na podstawie pełnej linii pliku

Wpis(Wpis& wp)

// konstruktor kopiujący

bool edytuj()

// pozwala na edycje istniejącego wpisu, zwraca true jeśli edytowano datę

// należy wówczas ponownie dodać wpis w odpowiednim miejscu listy aby
// zachować kolejność operacji

void wyswietl()

// wyświetla pojedynczą linijkę zawierającą dane wpisu, podczas przeglądania bazy

bool czyWczesniejszyOd(Wpis &Tego)

// sprawdza czy wpis (this) ma wcześniejszą datę operacji od parametru

bool getWplyw()

// zwraca wartość true jeśli wpis opisuje operacje wpływu

Data getData()

// zwraca datę operacji

Data* getpData()

// zwraca wskaźnik do obiektu daty operacji

float getKwota()

// zwraca kwotę operacji

string getKategoria()

// zwraca kategorię operacji

string getOpis()

// zwraca opis operacji

~Wpis()

// destruktor usuwa pole Data

class Lista // przechowuje i przeprowadza elementarne operacje na liście dwukierunkowej

protected struct element

{ // zawartość pojedynczego elementu listy

Wpis *oper;

// wszystkie pola są protected, aby klasa dziedzicząca: Baza

struct element *prev;

// miała dostęp do pól klasy Lista

struct element *next;

};

protected typedef struct element element;
protected typedef element* list;
protected list first, actual, last, temp;

// wskaźniki do elementów listy wykorzystywane w metodach klasy Lista i Baza

protectedlist pWpisToList(Wpis* nowy_wpis)

{

// tworzy nowy element listy zapisując w nim wskaźnik do utworzonego zewnętrznie Wpisu

protected int count;

// ilość elementów listy

Lista()

// konstruktor domyślny, inicjalizuje listę

void addLast(Wpis* nowy_wpis)

// dodaje nowy wpis na końcu listy

void addPrzed(list Tym, Wpis* nowy_wpis)

// dodaje nowy wpis przed konkretnym elementem listy

bool empty()

// sprawdza czy lista jest pusta

void usunAktualny()

// usuwa element wskazywany przez wskaźnik actual

int ileElementow()

// zwraca ilość elementów listy

~Lista()

// usuwa listę z pamięci (na zakończenie programu)

background image

class Baza : public Lista // klasa zarządzająca bazą wpisów

private const char* dbfname;

// nazwa pliku (inicjalizacja w konstruktorze na „baza.txt”)

privatebool writeList;

// czy zapisać listę przy wyjściu (klawisz q przy przeglądaniu wychodzi bez zapisu)
// ESC – wyjście z zapisem listy

Baza() : Lista()

// konstruktor domyślny, wywołuje konstruktor Listy. Sam odczytuje plik z bazą (jeśli istnieje)

void dodajWpis(Wpis* nowy_wpis)

// szuka miejsca w jakie należy dodać nowy wpis aby zachować porządek chronologiczny
// następnie wywołuje odpowiednie metody listy w celu jego dodania

void reAddActual()

// usuwa wpis wskazywany przez wskaźnik Lista::actual

// tworzy nowy wpis na podstawie usuniętego i przekazuje go metodzie dodajWpis

void dodajWpis()

// powoduje pobranie danych nowego wpisu i jego dodanie

bool przegladajWpisy()

// wyświetla interfejs pozwalający na przeglądanie bazy i jej edycje
// zwraca true jeśli wyjście nastąpiło przy pomocy klawisza ESC i należy zapisać
// listę, jeśli za pomocą klawisza q – nie zapisuj listy (false)

virtual char zapisz(const char *dbfname)

// zapisuje listę do pliku (wirtualna gdyż wykorzystywana w destruktorze)

~Baza()

// zapisuje listę do pliku (następnie usuwana lista)

// wykrywa przypadek niemożliwości zapisania pliku, pozwalając na podjęcie decyzji

class Menu // wyświetla menu główne (klasa jest mało uzyteczna)

private Baza* db

// baza wpisów

Menu()

// konstruktor domyślny – tworzy bazę

void wyswietl()

// wyświetla menu główne

~Menu()

// destruktor – usuwa bazę

Program został stworzony dla systemu Windows XP, kompiluje się poprawnie w programie

Dev – C++ .


Document Outline


Wyszukiwarka

Podobne podstrony:
projekt 1, elementy wykonawcze sprawozdanie
budzet domowy pod ostrzalem
projekt budzetu
Projekt I Sztuczna Inteligencja, Sprawozdanie, Techniczne zastosowanie sieci neuronowych
Budzet domowy pod ostrzalem
Budzet domowy pod ostrzalem
Projekt budżetu na 2012 województwa pomorskiego
I0E1S1 Kamil Maślanka Projekt PSy, I0E1S1 Kamil Maślanka sprawozdanie projekt, Microsoft Word - spra
budzet domowy pod ostrzalem
Budzet domowy pod kontrola Jak rozsadnie wydawac oszczedzac i inwestowac pieniadze buddom
Projekt budżetu w samorządzie
Budzet domowy pod ostrzalem
budzet domowy pod ostrzalem
Budżet państwa i postępowanie w Sejmie z projektem budżetu państwa
projekt budzetu gminy na 2012 rok v4 (1)
Budżet państwa i postępowanie w Sejmie z projektem budżetu państwa
Jak stworzyć budżet domowy w 7 prostych krokach
Budżet domowy pod ostrzałem

więcej podobnych podstron