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