1.         Table.cpp

#include <vcl.h>

#pragma hdrstop

#include "Table.h"

Table::Table()

{

list = new Record;

list->next = list->prev = list;

list->id = 0;

ID = 0;

}

Table::~Table()

{

Record *t,*q;

for(t=list->next;t!=list;t=q)

{

q = t->next;

delete t->data;

delete t;

}

delete list;

}

Table: Iterator Table: record()

{

Record *r = new Record;

ID++;

r->id = ID;

r->data = create();

r->next = list->next;

r->prev = list;

list->next->prev = r;

list->next = r;

return Iterator(r,this);

}

void Table::clear()

{

Record *t,*q;

for(t=list->next;t!=list;t=q)

{

q = t->next;

delete t->data;

delete t;

}

list->next = list->prev = list;

ID = 0;

}

void Table::save(FILE *f)

{

Fprintf (f,"%d\n", ID);

for(Record *t=list->next;t!=list;t=t->next)

{

fprintf(f,"%7d ",t->id);

t->data->save(f);

fprintf(f,"\n");

}

Fprintf (f,"END");

}

void Table::zvit(FILE *f)

{

fprintf(f,"Ціна Назва Виробник Вид Дата\n");

fprintf(f,"-----------------------------------------------\n");

for(Record *t=list->next;t!=list;t=t->next)

{

t->data->zvit(f);

}

}

void Table::load(FILE *f)

{

int id;

Record *t;

int rez = fscanf(f,"%d\n",&ID);

if((rez!=EOF)&&(rez!=0))

{

while(true)

{

t = new Record;

rez = fscanf(f,"%d",&t->id);

if((rez==EOF)||(rez==0))

{

delete t;

break;

}

t->data = create();

rez = t->data->load(f);

if((rez==EOF)||(rez==0))

{

delete t;

break;

}

t->next = list;

t->prev = list->prev;

list->prev->next = t;

list->prev = t;

}

}

}

void Table::Iterator::remove()

{

r->next->prev = r->prev;

r->prev->next = r->next;

delete r->data;

delete r;

}

void Table::Iterator::operator >>(Iterator &p)

{

if((t==p.t)&&(p.r!=r)&&(p.r!=r->next)&&(p.r!=t->list))

{

p.r->next->prev = p.r->prev;

p.r->prev->next = p.r->next;

p.r->next = r->next;

p.r->prev = r;

r->next->prev = p.r;

r->next = p.r;

}

}

void Table::Iterator::operator <<(Iterator &p)

{

if((t==p.t)&&(p.r!=r)&&(p.r!=r->prev)&&(p.r!=t->list))

{

p.r->next->prev = p.r->prev;

p.r->prev->next = p.r->next;

p.r->next = r;

p.r->prev = r->prev;

r->prev->next = p.r;

r->prev = p.r;

}

}

2.         Table.h

 

#ifndef TableH

#define TableH

#include <stdlib.h>

#include <stdio.h>

#include "Date.h"

#include "My_date.h"

class Table

{

public:

class Data

{

public: virtual ~Data(){}

virtual void save(FILE *f){}

virtual void zvit(FILE *f) {}

virtual int load(FILE *f){return 1;}

};

private:

struct Record

{

int id;

Data *data;

Record *next;

Record *prev;

} *list;

int ID;

public:

class Iterator;

friend class Iterator;

class Iterator

{

friend class Table;

Record *r;

Table *t;

protected:

Iterator(Record *R,Table *T):r(R),t(T){}

Data* data() {return r->data;}

Iterator the_next() {return Iterator(r->next,t);}

Iterator the_prev() {return Iterator(r->prev,t);}

public: Iterator(){}

int id(){return r->id;}// повертає номер запису в таблиці

void operator++() {r = r->next;}// переміщує ітератор на наступний запис

void operator--() {r = r->prev;}// переміщує ітератор на попередній запис

bool operator==(const Iterator &p){return r==p.r;}// порівнює з іншим ітератором

bool operator!=(const Iterator &p){return r!=p.r;}// порівнює з іншим ітератором

bool valid() {return r!=t->list;}// true - вказує на дійсний елемент;false - вказує на нульовий елемент

void operator>>(Iterator &p);// перемістити p після даного ітератора

void operator<<(Iterator &p);// перемістити p до даного ітератора

void remove();// видалити запис з таблиці

};

protected:

Iterator the_first() {return Iterator(list->next,this);}

Iterator the_last() {return Iterator(list->prev,this);}

Iterator record();

virtual Data* create(){return new Data;};

public: Table();

virtual ~Table();

void clear();// очистити таблицю

void save(FILE *f);// зберегти таблицю

void zvit(FILE *f);

void load(FILE *f);// завантажити таблицю

};

template<class MyData> class MyTable : public Table

{

public:

class Iterator : public Table::Iterator

{

friend class MyTable;

Iterator(const Table::Iterator &p):Table::Iterator(p){}

public: Iterator(){}

MyData& operator*() {return *(MyData*)data();}// доступ до полів MyData

MyData* operator->() {return (MyData*)data();}// доступ до полів MyData

Iterator next() {return Iterator(the_next());}// повертає ітератор на наступний елемент

Iterator prev() {return Iterator(the_prev());}// повертає ітератор на попередній елемент

};

protected:

virtual Data* create(){return new MyData;}

public: Iterator record() {return Iterator(Table::record());}// створює новий запис і повертає ітератор на нього

Iterator first() {return Iterator(the_first());}// повертає ітератор на перший запис в таблиці

Iterator last() {return Iterator(the_last());}// повертає ітератор на останній запис в таблиці

};


Информация о работе «Об’єктно-орієнтована програма обліку продуктового магазину»
Раздел: Информатика, программирование
Количество знаков с пробелами: 40325
Количество таблиц: 0
Количество изображений: 3

Похожие работы

Скачать
304576
89
18

... Чарка, стакан 4 320 2 80 400 Столові прибори (комплект) 4 320 2 80 400 Далі наведемо характеристику посуду, який будуть використовувати в комплексному закладі ресторанного господарства (табл. 2.8–2.11). Таблиця 2.8. Характеристика та призначення класичного вітчизняного порцелянового та фаянсового посуду Найменування Розміри, мм Місткість, см3, порцій Призначення ...

Скачать
87719
8
5

... , що в свою чергу призводить до збільшення прибутку. Об’єктом дослідження в курсовій роботі виступає логістична система розподілу продукції на ЖКУВП “Біатрон-3”. Предметом дослідження є сукупність методичних та практичних проблем управління логістичною системою розподілу продукції. Метою написання курсової роботи є вивчення теоретичних аспектів управління логістичною системою розподілу та дослі ...

Скачать
169717
23
3

... кількість робочих місць, та незначний обсяг пенсійних виплат за віком, тиснуть на свідомість, та впливають на поведінку людей. Це має велике значення на становлення та теоретичні аспекти ділових взаємовідносин саме в апараті управління. Тому, перше місце, на нашу думку, займає саме вплив особистісної характеристики керівника (групи, підрозділу, відділу і т. інш.). У зв’язку з цим, ми вважаємо, ...

Скачать
157062
12
4

... для проведення перетворень. Але при такому підході може виникнути ситуація, при якій проведення перетворень нічого не дасть. Справа в тому, що в силу різночасовості змін подій, що відбуваються в параметрах, що впливають на конкурентоспроможність підприємства в стадії загальної зрілості деякі з них будуть знаходитись в стані занепаду, і на їх зміни буде потрібно багато часу. Тому у відповідності з ...

0 комментариев


Наверх