piątek, 31 maja 2013

Generowanie hasła PHP

Generowanie hasła PHP

<?php
function generujHaslo() {
    $dlugosc = 8;
    $znaki = "abcdefghijklmnopqrstuwxyz0123456789";
    $zakres = strlen($znaki);
    $haslo = "";
    for ($a=0;$a<$dlugosc;$a++) {
    --$zakres;
    $haslo .= $znaki[$wylosowano=(rand(0,$zakres))];
    $tmp = $znaki[$wylosowano];
    @$znaki[$wylosowano] = $znaki[$zakres];
        @$znaki[$zakres] = $tmp;
    }
    echo $haslo;
}

Wysyłanie TCP

Wysyłanie TCP

if (nw.CanRead)
            {
                byte[] bMessageLength = new byte[4];
                nw.Read(bMessageLength, 0, bMessageLength.Length);

                int msgLength = BitConverter.ToInt32(bMessageLength, 0);

                while (msgLength>0)
                {
                    DataReceive = nw.Read(data, 0, data.Length);
                    ms.Write(data, 0, DataReceive);
                    msgLength -= DataReceive;
                }
               
            }

God Mode w Windows 7

God Mode w Windows 7 / Vista

Należy utworzyć folder i jako nazwę ustawiamy poniższy ciąg znaków.

GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}.

Sklejanie plików VCL, Borland C++ Builder

 Sklejanie plików VCL, Borland C++ Builder

Program napisany w środowisku Borland C++ Builder, mający za zadanie skleić ze sobą pliki wskazane przez użytkownika. Uproszczony interfejs pozwala na łatwiejsze dodawanie/usuwanie plików które mają zostać ze sobą połączone.

Poniżej przykładowe screeny podczas działania programu.


Do pobrania wszystkie pliki projektu, kody źródłowe

Histogram znaków, konsola, C++

Program napisany w środowisku Borland C++ Builder, mający za zadanie wyświetlić histogram znaków ASCII we wskazanym przez parametr pliku. Program uruchamiany z parametrami

Poniżej przykładowe screeny podczas działania programu.

Program należy uruchomić z parametrami - podając jako parametr ścieżkę do pliku.




Biblioteka VCL, C++ Builder projekt

Biblioteka VCL, C++ Builder projekt

Rozszerzona wersja programu konsolowego który napisałem wcześniej, wykorzystałem klasę z poprzedniej wersji programu. Aplikacja wzbogacona o przyjazny interfejs użytkownika i w dodatkowe funkcje.

Do pobrania kody źródłowe - dysk google.





Baza dłużników, konsola, język programowania C

Baza dłużników w C

Kompilator: Dev C++/C
Środowisko C++/C


Program obsługujący bazę danych zawierających dane adresowe, kontaktowe jak i informacje o długach. Był to program zlecony jako jeden z projektów laboratorium programowania komputerów. Wymagane było napisanie go w języku C.  
Poniżej przykładowe screeny podczas działania programu. W załączniku również specyfikacja programu z dokładnym opisem każdej funkcji, oraz dodatkowo przykładowe dane. (wykorzystane zostały fikcyjne dane, możliwa jest zbieżność z faktycznie istniejącymi)


Szerszy opis programu - z dokładną specyfikacją

1.Temat
Baza danych przechowująca listę dłużników”

2.Analiza, projektowanie
Baza danych powinna przechowywać dane różnego typu zdefiniowane na strukturze. Każdy rekord w bazie danych powinien przechowywać własne specyficzne dane. Całość powinna być zapisywana na liście i do pliku, najlepiej do jednego. Przy każdym uruchomieniu aplikacji – jeśli istnieje zdefiniowany plik o podanej nazwie w kodzie, to są z niego czytane dane. Jeżeli plik nie istnieje – a podczas działania programu dodaliśmy jakieś rekordy do bazy danych – to tworzony jest nowy plik i dane są do niego zapisywane. Jeżeli usuniemy wszystkie elementy z listy, to plik z którego wcześniej były wczytywane dane, zostanie usunięty. Pod koniec działania programu powinna być zwalniana przydzielona pamięć. Program powinien być prosty w obsłudze i czytelny, powinien pokazywać dostępne opcje, jakie użytkownik może wybrać. Dobrym rozwiązaniem jest wprowadzanie menu, w którym użytkownik będzie się poruszał za pomocą klawiszy 1 – 7. Po wybraniu odpowiedniej opcji – pokazuje się podmenu lub wykonywana jest żądana funkcja. Takie rozwiązanie ma w niektórych przypadkach wadę a w innych zaletę- otóż gdy zamiast jednego znaku wprowadzimy kilka – wszystkie polecenia dostępne przez te znaki będą się wykonywały. W przypadku przeglądania długiej listy danych wpis po wpisie – wystarczy wpisać ciąg samych „2” aby np. dostać się na koniec listy, co jest bardzo fajnym rozwiązaniem. Aby uniknąć wielokrotnego i może irytującego przepisywania dostępnych opcji w menu – przy każdej modyfikacji lub rozbudowie programu – można użyć funkcji która służyłaby do wyświetlania możliwych opcji menu z dostępnych danych. Zwiększyłoby to czytelność programu, jak i również program byłby bardziej podatny na modyfikacje. W programie powinno być możliwe dodawanie rekordów do bazy danych, jak i edycja i usuwanie wpisów. Program powinien też posiadać kilka funkcji wyświetlających dane.

3.Specyfikacja zewnętrzna

3.1 Obsługa programu i format danych wejściowych:
Użytkownik przy dodawaniu nowego wpisu do bazy danych wpisuje ciąg znaków
Przy wpisywaniu długu – użytkownik podaje również ciąg znaków – nawet jeśli popełni błąd podczas wpisywania kwoty – obsługa wyjątku została przewidziana.
Przy poruszaniu się po menu użytkownik wprowadza dane typu znakowego.
Zwykle są to:
1-wywołaj akcje 1,
2-wywołaj akcje 2,
...
6-wywołaj akcje 6,
itd.
Przy dodawaniu danych do bazy użytkownik wypełnia dane ciągiem znaków. Znaki/ciągi znaków po spacji będą traktowane jako kolejna dana w strukturze.
Dodatkowo przy dodawaniu danych do bazy użytkownik może zostać poproszony o wybranie jakiejś opcji, wtedy warto pamiętać, że wybranie innego znaku niż opisany w komunikacie powoduje powtórzenie się pytania o tą opcję.


3.2 Komunikaty
Struktura menu:
+"Pokaz wpisy";
-"Pokaz kontakty";
-"Pokaz dluznikow";
-"Cofnij";
+"Przegladaj wpisy";
-"Poprzedni";
-"Nastepny";
+"Edytuj";
-"Imie";
-"Nazwisko";
-"Kontakt";
-"Miasto";
-”Dlug”;
-”Cofnij”;
-"Dodaj dlug";
-"Anuluj dlug";
-"Usun kontakt";
-"Cofnij";
-"Dodaj wpis";
-"Szukaj";
-"Imie";
-"Nazwisko";
-"Kontakt";
-"Miasto";
-"Cofnij";
-"Pomoc";
-"Wyjscie";
Dodawanie danych:
"Imie: ";
"Nazwisko: ";
"Kontakt: ";
"Miasto: ";
"Dlug: ";

Dodatkowe komunikaty:
"ERROR 0: Lista jest pusta"; -pokazuje ten komunikat jeśli nie ma w pamięci żadnych danych
"Aby zobaczyc wiecej nacisnij [ENTER]\n";
"Nic nie znaleziono\n"; -pokazuje ten komunikat jeśli nie znaleziono szukanego wpisu w bazie
"Zakonczono wyszukiwanie\n"; -pojawia się pod koniec wyszukiwania jeśli zostaną już wyświetlone wszystkie szukane wpisy.
„Obecny dlug wynosi: %.2f "; -pojawia się przy edycji długu.
"Zakonczono wyswietlanie"; -pojawia się pod koniec wyświetlania danych.
"Baza dluznikow\nWersja 1-0\n"; -pojawia się w pomocy i pod koniec działania programu
"\nAutor: Michal Prokopiuk\n";-pojawia się w pomocy i pod koniec działania programu
"Kontakt: Prokopiuk.M@gmail.com\n";-pojawia się w pomocy i pod koniec działania programu
"\nAby zakonczyc dzialanie programu nacisnij [ENTER]";
"tekst pomocy"; -tekst pomocy
"Obecne dane: \n"; - wyświetla obecne dane wpisu przy edycji.
"Czy dodac dlug? [t/n]\n"; -komunikat się pojawia gdy chcemy dodać lub edytować dług
"\nBrak dlugow"; -pojawia się gdy w bazie nie będzie żadnych dłużników
"Dlugi: %.2f"; -pokazuje informacje o łącznej sumie długów
"\nIlosc dlugow: %i"; -pokazuje informacje o ilości długów w danych
"\nSrednia : %.2f\n"; -informuje o średniej z wypisanych długów

4.Specyfikacja wewnętrzna
4.1 Typy zdefiniowane
Nazwa
Zmienne
Kontakty
char imie[18];
char nazwisko[18];
char komunikator[18];
char adres[18];
char czy_dlug;
float kasa;
Kontakty *nast, *poprz;
Kontakty*
poczatek_listy
koniec_listy

4.2 Zmienne i stałe
Stałe:
Nazwa
Typ
Dane
IMIE
const char*
"Imie: "
NAZWISKO
const char*
"Nazwisko: "
KOMUNIKATOR
const char*
"Kontakt: "
ADRES
const char*
"Miasto: "
DLUG
const char*
"Dlug: "
NIE
const char
'n'
TAK
const char
't'
SEPARATOR
const char*
"\n--------------------------------------------------------------------------------"
MAX_WYSWIETLANE
int
3
NAZWA_PLIKU
const char*
"dane.database"
CLS
const char*
"cls"
PAUSE
const char*
"PAUSE"
NOWA_LINIA
const char*
"\n"
Zmienne globalne:
Zmienna
Typ
Opis
poczatek_listy
Kontakty*
Zmienna wskazująca początek listy
koniec_listy
Kontakty*
Zmienna wskazująca koniec listy

4.3 Funkcje

int main(void)
Na początku jest wywoływana funkcja wczytania danych z pliku, następnie funkcja menu(); Po zakończeniu działania funkcji sprawdzana jest zmienna poczatek_listy i w zależności od wyniku przeprowadzane są odpowiednie czynności. Jeżeli lista istnieje to dane są zapisywane do pliku – a pamięć jest zwalniana. W przeciwnym wypadku usuwany jest plik – o nazwie określonej przez stałą NAZWA_PLIKU. Następnie pokazywane są informacje i program jest zakańczany.
void menu(void);
Funkcja włączająca menu główne, trwa dopóki użytkownik nie wybierze opcji „Wyjście”. Za pomocą odpowiednich przełączników aktywuje żądane przez użytkownika funkcje.
void kreator_podmenu(int,int,int);
Funkcja wyświetlająca dostępne opcje w menu. Funkcja odwołuje się do zdefiniowanej wewnątrz tablicy. W funkcji zdefiniowane są odpowiednie dane zapisane w tablicy które służą do generowania menu. Pierwsze dwa argumenty służą do pobrania zakresu z którego będą wyświetlane opcje, a ostania zmienna – odpowiada za dodatkową opcję. Wyświetlane są napisy, przed każdy napis – zgodnie z kolejnością dodawana jest cyfra – która informuje użytkownika jaką opcje może wybrać – gdy widzi takie wygenerowane menu. Jeżeli chcemy wyświetlić tylko jedną opcję, należy podać jako dwa pierwsze argumenty tą samą liczbę, a gdy nie chcemy dodatkowej opcji to wpisujemy jako trzeci argument 0.
char* pokaz_error(int);
Jest to funkcja odpowiadająca za przekazanie żądanego przez nas komunikatu, zwraca napis z tablicy, którego indeks jest określony przez argument funkcji.
float sprawdz_liczby(char*);
Funkcja pobiera jako argument ciąg znaków, następnie sprawdza które z tych znaków są cyframi. Tworzy ciąg cyfr, następnie przypisuje zmiennej float liczba = konwertuj(ciag2) i zwraca przekonwertowany przez funkcję konwertuj ciąg znaków jako liczbę.
float konwertuj(const string&);
Konwertuje ciąg na liczbę, zwraca liczbę.
void rysuj_tabelke(char*);
Rysuje górną część tabelki, jako argument pobierany jest znak który będzie separatorem pomiędzy napisami. Na dole i u góry wstawia jeszcze ciągi znaków dla estetycznego wyglądu.
Kontakty* dodaj_kontakt(void);
Tworzy nowy wpis do bazy danych, alokuje miejsce w pamięci, pobiera odpowiednie dane i dodaje całą strukturę do listy dwukierunkowej. Zwraca wskaźnik na nowo dodany element do listy.
Kontakty* usun_kontakt(Kontakty*);
Usuwa wpis z bazy danych, usuwa go również z listy dwukierunkowej, zwalnia przydzieloną pamięc. Zwraca wskaźnik na poprzedni element co jest wykorzystywane w funkcji przegladaj_kolejno.
void wyswietl_kontakt(Kontakty*);
Wyświetla kontakt o podanym adresie jako argument. Wewnątrz wywoływana jest funkcja dlug.
void wyswietl_tabelke(Kontakty*);
Funkcja wyświetlająca wszystkie elementy listy za pomocą tabelki. W tabelce są wyświetlane wszystkie dane wpisu w bazie za wyjątkiem długu. Funkcja na początku wywołuje funkcję rysowania tabelki, następnie w każdej nowej linii wyświetla wpis z bazy danych. Każda komórka tabeli posiada po 18 znaków. Reszta znaków to zapełnienie. Najpierw wyświetlane są dane – a liczba znaków pozostałych – jest zapełniana „.”, liczbę pozostałych znaków do zapełnienia uzyskuje się poprzez 18-strlen(dane). W funkcji działa ograniczenie na ilość wyświetlonych wierszy – jeżeli liczba wierszy ==17 to program się zatrzymuje i wyświetlany jest odpowiedni komunikat. Po naciśnięciu ENTER wywoływana jest kolejna funkcja rysowania tabelki i wyświetlane są kolejne dane – jeśli istnieją, w przeciwnym wypadku działanie funkcji zostaje zakończone.
void edytuj_kontakty(Kontakty*);
Wyświetlane jest podmenu z dostępnymi opcjami do edycji oraz obecne dane edytowanego wpisu w bazie. Po wybraniu odpowiedniej opcji – edytujemy odpowiednie dane.
void przegladaj_kolejno(Kontakty*);
Wyświetlane jest podmenu z dostępnymi opcjami oraz wpis w liście którego wskaźnik został przekazany w argumencie. Użytkownik wywołuje odpowiednie funkcje, poprzez wybranie odpowiednich opcji.
void zapisz_do_pliku(Kontakty*);
Jeżeli lista nie jest pusta – dane są zapisywane do pliku którego nazwa jest zdefiniowana w stałej NAZWA_PLIKU
void wczytaj_z_pliku(void);
Jeżeli plik istnieje zostaną wczytane z niego odpowiednie dane i zostaną zaalokowane w pamięci, w liście dwukierunkowej.
void dlug(Kontakty*,int)
Funkcja mająca dwa działania które wybiera się poprzez drugi argument. Dla argumentu ==0 funkcja sprawdza czy w określonym przez pierwszy argument wpisie znajduje się dana kasa, poprzez porównanie danej czy_dlug. Dla argumentu ==1 funkcja odpowiada za dodanie długu do struktury danych określonej przez wskaźnik podany w pierwszym argumencie.
void zwolnij_pamiec(Kontakty*);
Funkcja zwalnia pamięć zarezerwowaną wcześniej dla elementów listy
void szukaj(char*, int);
Funkcja wyszukująca odpowiedni ciąg znaków wpisany przez użytkownika, wcześniej użytkownik określa jaki typ danych ma być przeszukiwany. Rozróżniane są duże znaki i małe. Za pomocą strncmp porównywane są odpowiednie dane. Następnie wyświetlane są wszystkie pasujące wpisy. Ograniczenie wpisów wyświetlonych na ekranie określone jest przez stałą MAX_WYSWIETLANE. Pod koniec wyświetlania pokazywany jest odpowiedni komunikat.
void sortuj(Kontakty*);
Sortuje wpisy w bazie danych.


Pliki do pobrania:

Kod źródłowy + Specyfikacja w doc
Cały projekt



Sorki za brak komentarzy w niektórych miejscach albo wszędzie ;)

Wstęp - o projektach i zawartości strony

Witam na moim blogu, postanowiłem się podzielić z Wami starymi projektami, które sobie leżą bezużytecznie na dysku.

Możecie je dowolnie wykorzystywać, większość programów powinna działać.

Swoją przygodę z programowaniem zacząłem jakoś pod koniec gimnazjum, zafascynowanie trwa dalej.

Opublikowane projekty były pisane w środowiskach, językach i technologiach:
-Visual Studio C++ 2008
-Visual Studio C++ 2010
-Visual Studio C# 2010
-Borland C++ Builder 6

-C++, C, C#, Assembler, PHP

Opublikowane tutaj projekty tworzone są w różnych językach i środowiskach.
Można też zauważyć ze nie wszystkie są idealnie i można było je napisać wydajniej - więc jeśli ktoś chce krytykować stary kod proszę bardzo - powiem szczerze że jak patrzę na to po latach - mając obecne doświadczenie - bym to napisał lepiej :)

W większości są to małe programiki bazodanowe albo proste programy na zaliczenia na studiach.

Liczę na to że komuś się to może przydać w zrozumieniu niektórych kwestii, lub pomoże to komuś w nauce programowania.

środa, 1 maja 2013

Baza pająków, konsola, C++

Baza pająków, konsola C++


Zwykły program konsolowy z obsługą listy dwukierunkowej, baza danych przechowująca specyficzne dane tekstowe. Poniżej przykładowe screeny podczas działania programu.





 Dane i pliki do pobrania w Google Drive