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());}// повертає ітератор на останній запис в таблиці
};
... Чарка, стакан 4 320 2 80 400 Столові прибори (комплект) 4 320 2 80 400 Далі наведемо характеристику посуду, який будуть використовувати в комплексному закладі ресторанного господарства (табл. 2.8–2.11). Таблиця 2.8. Характеристика та призначення класичного вітчизняного порцелянового та фаянсового посуду Найменування Розміри, мм Місткість, см3, порцій Призначення ...
... , що в свою чергу призводить до збільшення прибутку. Об’єктом дослідження в курсовій роботі виступає логістична система розподілу продукції на ЖКУВП “Біатрон-3”. Предметом дослідження є сукупність методичних та практичних проблем управління логістичною системою розподілу продукції. Метою написання курсової роботи є вивчення теоретичних аспектів управління логістичною системою розподілу та дослі ...
... кількість робочих місць, та незначний обсяг пенсійних виплат за віком, тиснуть на свідомість, та впливають на поведінку людей. Це має велике значення на становлення та теоретичні аспекти ділових взаємовідносин саме в апараті управління. Тому, перше місце, на нашу думку, займає саме вплив особистісної характеристики керівника (групи, підрозділу, відділу і т. інш.). У зв’язку з цим, ми вважаємо, ...
... для проведення перетворень. Але при такому підході може виникнути ситуація, при якій проведення перетворень нічого не дасть. Справа в тому, що в силу різночасовості змін подій, що відбуваються в параметрах, що впливають на конкурентоспроможність підприємства в стадії загальної зрілості деякі з них будуть знаходитись в стані занепаду, і на їх зміни буде потрібно багато часу. Тому у відповідності з ...
0 комментариев