A Delphi programozási nyelv

Delphi XE

Borkereskedő

Íme egy példaprogram, mely eredetileg Programozáselmélet tárgy beadandó feladataként készült 2002/2003 tanév első félévében, majd rákövetkező félévben grafikus felhasználói felületet és egyéb kiegészítéseket kapott, hogy Programozási nyelvek III. tárgy beadandó feladataként is megfeleljen. A feladat egy mesterség szimulációja volt, jelen esetben egy borász mindennapjainak azon tevékenységeire fókuszáltunk, melyek borának eladásával kapcsolatosak.

A program menete, működése összefoglalva (dokumentációból)

Adott a borászunk, aki rendelkezik egy kiinduló tőkével, és kifogyhatatlan mennyiségű borral. Elmegy az üzletébe, visz egy adag bort a pincéjéből, majd a szakboltból kellékeket is hoz. Ezután vendégek érkezésére vár, akik ittlétük alatt bort kóstolnak (közben sajtot rágcsálnak, eltörik poharukat, vagy leöntik a terítőt), nagyobb mennyiséget rendelnek, és ha kiszolgálták őket kannákba töltött borukkal, fizetnek és távoznak. A borász a kiszolgálások közben szemmel tartja az üzlet raktárkészletét, és ha bármilyen bornak vagy kelléknek hiányát tapasztalja, elmegy a pincébe avagy a szakboltba, hogy pótolja, amit szükséges. Majd visszatér az üzletbe és várja az újabb vendégeket.

A szimulációban adott számú vendég létezik, akik visszatérő fogyasztók. Számuk legfeljebb hat lehet. Szintén rendelkeznek "pénztárcával", és nekik van alkoholszintjük is. Ha nem az üzletben tartózkodnak, alkoholszintjük csökken, pénzük gyarapszik, közben adott valószínűséggel újra és újra visszatérnek az üzletbe borozgatni, ha az épp nyitva van. Kóstolgatás közben alkoholszintjük növekszik, rendelés után pénzük fogy a fizetés által. Ha túl részegek vagy nem rendelkeznek elegendő pénzzel a rendelésük teljesítéséhez, természetesen a borász nem szolgálja ki és kirúgja őket az üzletből.

Létezik még ellenőr is a programban, csak hogy színesítse az eseményeket. Időnként ellátogat az üzletbe és vizsgálódik. Ellenőrzi hogy a raktáron mindenből elegendő mennyiség áll-e rendelkezésre, valamint ellenőrzi, hogy van-e részeg ember a helyiségben. A tapasztaltak alapján jutalmazza vagy bünteti az üzlet tulajdonosát, de égbekiáltó szabályszegések esetén ki is üríttetheti a borozót. Az ellenőrnek hangulata is van, ami büntetések során javul, jutalmazások során pedig romlik.

A büntetés/jutalmazás mértékének meghatározásakor az ellenőr természetesen figyelembe veszi saját hangulatát is.

A feladat egy 12 osztályból álló hierarchiát kapott maga alá. Az ezt leíró modellek, grafikonok, ábrák megtekinthetők a dokumentációban. A dokumentáció online megtekinthető a programból is, vagy letölthető erről az oldalról. A Borkereskedőnek létezik párhuzamos változata is a Delphi TThread osztályára alapozva, mely a Programozási elmélet tárgy második félévének beadandó feladataként készült.

Hibák

Az osztályhierarchia kialakítása kihasznál egy-két Delphi sajátosságot, emiatt nem a legszerencsésebb megoldás objektumorientált szempontból. Az alkalmazás átírásra került Eiffel nyelvre is, és ezek a nem szerencsés megoldások bizony kiütköztek az átalakítás során, és többletmunkát jelentettek.

Az említett szerencsétlen tervezés eredményeképp nincs a programban dinamikus kötés, mely Delphiben nem is jelentett gondot a futásidejű típusinformációk és a castolás használata mellett, de Eiffelben ezek hiánya miatt újabb osztályokat kellett bevezetni, és az absztrakt metódusok néha üres törzzsel lettek implementálva egy-egy leszármazottban.

A megvalósítás egyik legszembetűnőbb hiányossága talán a propertyk mellőzése. Bár legtöbbször tipikus Get és Set metódusokra volt szükség, ezeket mégsem propertyken keresztül kapcsoltuk a rejtett adattagokhoz.

Érdekességek

Az alkalmazás HTML Helpet kapott, illetve a dokumentáció oldalai érhetők el ilyen módon. Miután ezt a Delphi 7-es verziója sem támogatta, ezért a HTML Help API-t megvalósító unitokat kellett include-olni a projecthez.

Letöltések

Képek




Chateljünk a Delphi Socket interfészén keresztül!

 

A program megírásának a célja a Delphi Socket interfészének programozásának bemutatása volt. A forráskódban számos megjegyzés segíti a megértést, de a fenti cikk elolvasása mindenféleképpen szükséges a megértéshez.

A program működése:

Az egyetlen lenyíló menüből két opció látható (Kapcsolódás, Kapcsolat megszakítása). Ezek segítségével lehet másik számítógéphez csatlakozni annak IP címe vagy hálózati neve alapján. A program a háttérben megteszi a szükséges ellenőrzéseket (van-e ilyen nevű gép), majd ha minden rendben folyt, akkor létrehozza a kapcsolatot. A Kapcsolat megszakítása menüpont kiválasztása esetén a felépült kapcsolatot lehet megszüntetni.

A létrejött kapcsolat után szabadon lehet gépelni a felső mezőbe, annak változásai azonnal megjelennek a célgépen. Pár gomb is el van helyezve még a formon, ezek csak a Font beállítására valók, a kapcsolat meglétében nem játszanak szerepet.

 

Letöltések

Képek




Multiple Document Interface (MDI) - példaprogram

Példa Multiple Document Interface (MDI) alkalmazásra :



A példa program letöltehető verziója megtalálható itt:
Programs/MDI_example_application.zip

Grafikus objektumok

Feladat

Négyféle, 16 darab, méretét tekintve véletlenszerűen generált objektum jelenik meg és mozog az ablakban. Amint egy objektum eléri a képernyő szélét, visszapattan róla. A jobb oldali sávon az egyes alakzatok pozíciói láthatók (K = kör, T = téglalap, H = háromszög, P = paralelogramma).

grafikus objektumok

Bővebben

Az alkalmazás felületét két részre lehet osztani. Az egyik egy TImage komponens, amelyen megjelennek az alakzatok. A formon szabadon hagyott rész a második felület. Itt jelennek meg a TLabel komponensek, melyek segítségével az egyes alakzatok aktuális pozícióját írja ki a program.

Az egyes alakzatokat külön unit tartalmazza. Ezekben a unitokban fejthetők ki az alakzatokra vonatkozó specialitások. Mindegyik objektum a grafobj-ból származik. Az ott meghatározott absztrakt metódusok az alakzatok unitjában vannak megvalósítva.

A grafobj tartalmaz egy TGrafObj osztálydeklarációt a következő publikus metódusokkal:



A Unit1 unit az egész alkalmazás helyes megjelenítéséért felelős. Továbbá tartalmazza az időzítő komponenst, melynek segítségével (mozgás gyorsaságát határozza meg) mozognak az alakzatok. Ennek a unitnak a segítségével jelenítjük meg a koordinátákat is.
unit Unit1; interface uses Windows, SysUtils, Variants, Classes, Graphics, Controls, Forms, Stdctrls, ExtCtrls, grafobj, kor, teglalap, haromszog, math, paralelogramma; type TForm1 = class(TForm) Image1: TImage; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var k: array [1..16] of TGrafObj; procedure TForm1.Timer1Timer(Sender: TObject); var i:integer; begin for i:=1 to 16 do k[i].mozdul; end; procedure TForm1.FormCreate(Sender: TObject); var i, a, b, s, m, m1, m2:integer; mx,my:integer; lab : TLabel; begin randomize; for i:=1 to 16 do begin repeat mx:=random(5)-2; //-2-tol +2 ig veletlenszeru szam az alakzat nagysaga miatt my:=random(5)-2; until (mx<>0) or (my<>0); if (i>=1) and (i<=4) then //1-4-ig kor begin s := random(20)+10; k[i]:=TKor.Create(max(random(Image1.Width-s),s), max(random(Image1.Height-s),s), mx, my, s, Image1); end else if (i>=5) and (i<=8) then //5-8-ig teglalap begin a := random(50)+10; b := random(50)+10; k[i]:=TTeglalap.Create(max(random(Image1.Width-a),a), max(random(Image1.Height-b),b), mx, my, a, b, Image1); end else if (i>=9) and (i<=12) then //9-12-ig haromszog begin a := random(50)+10; m := random(50)+10; k[i]:=THaromszog.Create(max(random(Image1.Width-a),a), max(random(Image1.Height-m),m), mx, my, a, m, Image1); end else if (i>=13) and (i<=16) then //10-16-ig paralelogramma begin a := random(50)+10; m1 := random(50)+10; m2 := random(50)+10; k[i]:=TPara.Create(max(random(Image1.Width-a),a), //max(random(Image1.Height-m1),m1), max(random(Image1.Height+m2),m2), mx, my, a, m1, m2, Image1); end; lab := TLabel.Create(self); lab.Parent := self; lab.Visible := True; lab.Left := Image1.Left + Image1.Width + 8; lab.Top := image1.Top + (i-1)*round(Image1.Height / 15); lab.Font.Name := 'Terminal'; lab.Font.Style := []; k[i].lab := lab; end; timer1.Enabled := true; end; procedure TForm1.FormDestroy(Sender: TObject); //memoria terulet felszabaditasa var i:integer; begin for i:=1 to 16 do k[i].Free; end; end.

Használt verzió

Delphi7.

Készítette

Bakos Natália

Letöltés

Grafobj.zip


Egyszerű számológép

Feladat

Egyszerű számológép készítése grafikus felülettel.


Bővebben

Egy tipikus számológép felület segítségével tudunk valós számokkal alapvető aritmetikai (összeadás, kivonás, szorzás, osztás) műveleteket végrehajtani. Az = jel lenyomásáig számol, figyelembe veszi a műveletek precedenciáját is. A kis példaprogramban találhatunk példát néhány tipikus vezérlési szerkezetre, bemutatja a formok valamint a unitok használatát (egy különálló unit tartalmazza az aritmetikai műveletek megvalósítását).

Használt verzió

Delphi7.

Készítette

Kőszegi Judit

Letöltés

szamologep.zip


Szótár program

Leírás

A program egy Magyar-Angol és Angol-Magyar szótárprogram, amely értelemszerűen szótározásra használható! Ezen kívül lehetőség van a szótár karbantartására, azaz további szavakkal való bővítésre, illetve a már meglévő szavak törlésére. Miután eléggé kiszélesítettük a tudásunkat, lehetőségünk van annak letesztelésére. A program képes mindegyik nyelven felmérni a tudásunkat. A kérdezett szavak lehetnek véletlenszerűek, illetve magunk is kiválaszthatjuk őket. A kiválasztott szavak elmenthetők, és később ismét betölthető, hogy a tudásunk ismét lemárjük. Rendelkezésünkre áll tovább még egy segítség menü is, ahol leírást kapunk a program működéséről, illetve a program alján is olvasható kis segítség. A program az angol és a magyar nyelvet támogatja, azaz Angol-Magyar és Magyar-Angol szótár található benne. Így a fent említett funkciók is e két nyelven érhetőek el. Mindenféleképpen hasznos kisebb gyerekek tudásának bővítésére és annak felmérése.

Továbbfejlesztés

Képek

Szótár

Tudáspróba

Használt verzió

      Delphi 2005

Készítő

      Batha Dorián

Letöltés

      dictionary.zip




Torpedó

Leírás

A szoftver a torpedó nevezetű táblás játék számítógépes változata Windows operációs rendszert futtató számítógépek számára. A programban lehetőség van hálózaton történő játékra is TCP/IP protokollon keresztül.

Használt verzió

      Delphi 5

Készítő

      Ézsiás Tamás

Letöltés

      Torpedo.zip




Mesterlogika

Leírás

A Mesterlogika játék számítógépes megvalósítása. A számítógép "gondol" egy négy színből álló összeállításra, a felhasználó pedig megpróbálja azt kitalálni. Hat színből lehet választani: piros, kék, zöld, sárga, magenta és világoskék. A felhasználó kirak egy színösszeállítást, a gép pedig értékeli. Az értékelés menete:

A felhasználó akkor nyer, ha kitalálja a színösszeállítást (négy halványszürke négyzet). Ha ez 12 próbálkozásból nem sikerül, a gép nyer.

Mesterlogika

Használt verzió

      Delphi 7

Készítő

      Kovács Péter

Letöltés

      Mesterlogika.zip