Tartalmi kivonat
ELEMI ALKALMAZÁSOK FEJLESZTÉSE I. Elemenkénti feldolgozás szekvenciális fájlokra Készítette: Gregorics Tibor Lektorálta: Bozsik József •1-n •1-n elemenkénti elemenkénti feldolgozás feldolgozás implementálása implementálása •Szöveges •Szöveges állomány állomány szekvenciális szekvenciális fájlként fájlként kezelése kezelése •Szekvenciális •Szekvenciális fájl fájl típusának típusának osztályként osztályként való való megvalósítása megvalósítása inp.txt Az Az „inp.txt” „inp.txt” szöveges szöveges állomány állomány egy egy könyvtár könyvtár nyilvántartását nyilvántartását tartalmazza. tartalmazza. Ennek Ennek minden minden sorában sorában egy-egy egy-egy könyv könyv adatait adatait szóközzel szóközzel (1 (1 pozíció) pozíció) elválasztva elválasztva helyeztünk helyeztünk el el :: azonosító azonosító (4), (4), szerző szerző (14), (14), cím cím (19), (19), kiadó kiadó (14),
(14), kiadás kiadás éve éve (4), (4), aktuális aktuális példányszám példányszám (3), (3), ISBN szám (14). ISBN szám (14). Válogassuk Válogassuk ki ki egyrészt egyrészt aa nulla nulla példányszámú, példányszámú, másrészt a Móra kiadónál másrészt a Móra kiadónál megjelent megjelent könyvek könyvek azonosítóját, azonosítóját, szerzőjét szerzőjét és és címét, címét, és és aa fenti fenti formában formában helyezzük helyezzük el el őket őket az az „out1.txt” „out1.txt” és és az az „out2.txt” szöveges állományban! „out2.txt” szöveges állományban! Specifikáció A=Infile(Könyv) × Outfile(Könyv2) × Outfile(Könyv2) x y1 y2 Könyv=rec(azon:N, szerző:char*, cím:char, kiadó:char, év:N, darab:N0, isbn:char*) Könyv2=rec(azon:N, szerző:char*, cím:char) B= Infile(Könyv) x’ x’.dom R=( y1 = ⊕ f1(xi’) i=1 Q=( x = x’ ) azon szerző 12 J. K Rowling 15 A. A Milne 17 Gárdonyi Géza 25 Fekete
István cím kiadó év db isbn Harry Potter II. Micimackó A láthatatlan ember Zsellérek Animus Móra Szépirodalmi Nestor 2000 1936 1973 1994 0 963 8386 94 O 10 963 11 1547 X 0 SZ 1823-D-7374 12 963 7523 3 4 O out1.txt azon szerző 12 J. K Rowling 17 Gárdonyi Géza cím Harry Potter II. A láthatatlan ember out2.txt azon szerző cím 15 A. A Milne Micimackó Absztrakt program y:=< > sx,dx,x:read sx=norm dx.darab = 0 x’.dom y1:write(dx) i=1 dx.kiadó = „Móra” ∧ y2 = ⊕ f2(xi’) ) ⎧< rec(dx.azon, dxszerző , dxcím) > ha dxdarab = 0 f1(dx) = ⎨ <> különben ⎩ ⎧< rec(dx.azon, dxszerző , dxcím) > ha dxkiadó =" Móra" f2(dx) = ⎨ <> különben ⎩ y2: write(dx) SKIP SKIP sx,dx,x:read 1 Felhasználói típusok Absztrakt program kódja Könyv= rec(azon:N, szerző:char*, cím:char, kiadó:char, év:N, darab:N0, isbn:char*) a.kiadó, Könyv2 ≈ Könyv ahol a: Könyv int main() { Torzs x (
”inp.txt” ); Eredm y1( ”out1.txt” ); Eredm y2( ”out2.txt” ); Konyv dx; Status sx; x.Read(dx,sx); while (sx==norm) { if (dx.darab==0) y1.Write(dx); if (dx.kiado==”Móra” ) y2Write(dx); x.Read(dx,sx); } return 0; } Törzs = Infile(Könyv) sx,dx,x:read vagy x.read(dx,sx) ahol x : seq(Könyv) dx: Könyv sx: Státusz Eredm = Outfile(Könyv2) y:write(dy) vagy y.write(dy) ahol y :seq(Könyv2) dy :Könyv Státusz = {norm, abnorm} Státusz típus Könyv típus Típusspecifikáció Típusértékek Reprezentáció Reprezentáció Status sx; sx = norm; Típus megvalósítás kiadó darab . struct Konyv Konyv dx; {. string kiado; dx.kiado int darab; dx.darab }; Implementáció enum Status {abnorm, norm}; Könyv Műveletek ={norm,abnorm} Implementáció Status Műveletek Típusértékek Típusspecifikáció Típus megvalósítás sx == norm seq(Könyv) x.Read(dx,sx) x:seq(Könyv) dx:Könyv sx:Status szöveges fájl szöveges fájlból való olvasás Típus
megvalósítás Implementáció Reprezentáció Törzs osztály Típusspecifikáció Műveletek Típusértékek Törzs típus ifstream x; Konyv dx; x >> dx; Az olyan felhasználói típust, amelynek műveleteit nem lehet egyetlen C++ utasítással implementálni osztály segítségével érdemes megvalósítani Torzs x(”inp.txt”); Konyv dx; Status sx; x.Read(dx,sx); class Torzs x.f >> dx; { public: Torzs(const string &fnev); ~Torzs(); void Read(Konyv& dx, Status& sx); private: ifstream f; }; 2 Konstruktor, destruktor x.Read(dx, sx) Torzs::Torzs(const string &fnev) { f.open(fnevc str()); if ( f.fail() ) { cout << ”Nincs törzs fájl” <<endl; char ch; cin>>ch; exit(1); } } Torzs::~Torzs() { f.close(); } dx.azon dx.szerzo . = . = . } év db isbn Animus Móra Szépirodalmi Nestor 2000 1936 1973 1994 0 963 8386 94 O 10 963 11 1547 X 0 SZ 1823-D-7374 12 963 7523 3 4 O Konverzió C karakterláncból int értékbe
Eredm osztály Típusspecifikáció seq(Könyv2) y.write(dy) y:seq(Könyv2) dy:Könyv szöveges fájl szöveges fájlba való írás Implementáció dx.azon = atoi(sor.substr( 0, 4)c str( )); dx.szerzo = sor.substr( 5,14); dx.cim = sor.substr(20,19); dx.kiado = sor.substr(40,14); Rész sztring kivágása dx.ev = sor.substr(55, 4); dx.darab = atoi(sorsubstr(60, 3)c str( )); dx.isbn = sor.substr(64,14); Eredm típus Típusértékek kiadó Reprezentáció cím Harry Potter II. Micimackó A láthatatlan ember Zsellérek Műveletek 12 J. K Rowling 15 A. A Milne 17 Gárdonyi Géza 25 Fekete István getline(f, sor, ’ ’ ); if (!f.eof()) { sx = norm; } else sx = abnorm; inp.txt azon szerző void Torzs::Read(Konyv &dx, Status &sx) { string sor; Típus megvalósítás Konstruktor, destruktor class Eredm { public: Eredm(const string &fnev); ~Eredm(); void Write(const Konyv &dy); private: ofstream f; Eredm y(”out.txt”); }; Konyv dy; y.Write(dy);
Eredm::Eredm(const string &fnev) { f.open(fnevc str()); if ( f.fail() ) { cout << ”Fájl létrehozási hiba” << endl; char ch; cin >> ch; exit(1); } } Eredm::~Eredm() { f.close(); } 3 y.Write(dx) Manipulátorok, formátumjelzők #include <iomanip> void Eredm::Write(const Konyv &dy) { f << setw(4) << dy.azon << ’ ’ << setw(14) << dy.szerzo << ’ ’ << setw(19) << dy.cim << endl; } f << setw(int w) f.width(int w) f << setprecision(int p) f.precision(int p) f << setfill(char c) f.fill(char c) f << endl f.setf(fmtflags fl) f.unsetf(fmtflags fl) manipulátorok #include <iomanip> scientific, fixed, right, left, dec, hex, oct, showpoint, showpos Formátumjelzők: fmtflags skipws ios:: Teljes program #include <fstream> #include <iostream> #include <iomanip> #include <string> #include ”torzs.h” #include ”eredm.h” Teljes program
using namespace std; struct Konyv { . }; enum Status { . }; main() int { . } 4