47808 (608380), страница 3

Файл №608380 47808 (Об’єктно-орієнтована програма обліку продуктового магазину) 3 страница47808 (608380) страница 32016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

Додаток Б

Лістинг програми

  1. Table.cpp

#include

#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;

}

}

  1. Table.h

#ifndef TableH

#define TableH

#include

#include

#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 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());}// повертає ітератор на останній запис в таблиці

};

  1. Number.cpp

#include

#pragma hdrstop

#include "Number.h"

void Number::save(FILE *f)

{char s[1000];

char s1[1000];

char s2[1000];

sprintf(s,"%s",str.c_str());

sprintf(s1,"%s",str1.c_str());

sprintf(s2,"%s",str2.c_str());

for(int i=0;s[i];i++) if(s[i]==' ') s[i]='_';

fprintf(f,"%d %s %s %s %d %d %d ",d,s,s1,s2,day,month,year);

}

void Number::zvit(FILE *f)

{

char s[1000];

char s1[1000];

char s2[1000];

sprintf(s,"%s",str.c_str());

sprintf(s1,"%s",str1.c_str());

sprintf(s2,"%s",str2.c_str());

fprintf(f,"%5d %10s %10s %10s %2d %2d %4d ",d,s,s1,s2,day,month,year);

fprintf(f,"\n");

}

int Number::load(FILE *f)

{ char s[1000];

char s1[1000];

char s2[1000];

int rez = fscanf(f,"%d %s %s %s %d %d %d",&d,s,s1,s2,&day,&month,&year);

if(rez==7)

{ for(int i=0;s[i];i++) if(s[i]=='_') s[i]=' ';

for(int i=0;s1[i];i++) if(s1[i]=='_') s1[i]=' ';

for(int i=0;s2[i];i++) if(s2[i]=='_') s2[i]=' ';

str = AnsiString(s);

str1 = AnsiString(s1);

str2 = AnsiString(s2);

}

return rez;

}

  1. Number.h

#ifndef NumberH

#define NumberH

#include "Table.h"

#include "Date.h"

#include "My_date.h"

class Number : public Table::Data

{

public: int d;

int day; // число випуска

int year; // год випуска

int month; // месяц випуска

AnsiString str; // название мебели

AnsiString str1; // производитель

AnsiString str2; // вид мебели

void save(FILE *f);

void zvit(FILE *f);

int load(FILE *f);// 0 - помилка завантаження; EOF - кінець файла; >0 - завантаження успішне

};

5. Date.cpp

#include

#pragma hdrstop

#include "Date.h"

bool Date::load(int d,int m,int y)

{ if(y>=1900)

{ switch(m)

{

case 1:// січень 31 день

case 3:// березень 31 день

case 5:// травень 31 день

case 7:// липень 31 день

case 8:// серпень 31 день

case 10:// жовтень 31 день

case 12:// грудень 31 день

if((d31)) return false;

break;

case 2:// лютий 28-29 день

if(y%4)

{

if((d29)) return false;

}

else

{

if((d28)) return false;

}

break;

case 4:// квітень 30 день

case 6:// червень 30 день

case 9:// вересень 30 день

case 11:// листопад 30 день

if((d30)) return false;

break;

default: return false;

}

Day = d;

Month = m;

Year = y;

X = d + m*100 + year*10000;

Name = StrToInt(d)+"."+StrToInt(m)+"."+StrToInt(y);

}

else return false;

}

bool Date::load(const AnsiString &s)

{

int x = s.Pos(".");

if(x)

{

AnsiString str = s.SubString(1,x-1);

int d = StrToInt(str);

str = s.SubString(x+1,s.Lenth-x);

int y = str.Pos(".");

if(y)

{

str = s.SubString(x+1,y+x-1);

int m = StrToInt(str);

str = s.SubString(y+x+1,s.Lenth-x-y);

int y = StrToInt(str);

return load(d,m,y);

}

else return false;

}

else return false;

}

6. Date.h

#ifndef DateH

#define DateH

class Date

{ int Day;

int Month;

int Year;

long X;

AnsiString Name;

public: bool load(int d,int m,int y);

bool load(const AnsiString &s);

int day(){return Day;}

int month(){return Month;}

int year(){return Year;}

const char& str(){return Str.c_str();}

const Date& operator=(const Date &D){Day = D.Day; Month = D.Month; Year = D.Year;}

bool operator>(const Date &D){return X>D.X;}

bool operator>=(const Date &D){return X>=D.X;}

bool operator<(const Date &D){return X

bool operator<=(const Date &D){return X<=D.X;}

bool operator==(const Date &D){return X==D.X;}

bool operator!=(const Date &D){return X==D.X;}

};

7. Main.cpp

#include

#pragma hdrstop

#include "Main.h"

#include "My_date.h"

#include "Date.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TMainForm *MainForm;

__fastcall TMainForm::TMainForm(TComponent* Owner)

: TForm(Owner)

{

}

//------------------------------------------------------------------------void __fastcall TMainForm::Add(TObject *Sender)

{

Ptr p = list.record();

p->d = StrToInt(NewInt->Text);

p->day = StrToInt(Day->Text);

p->year = StrToInt(Year->Text);

p->month = StrToInt(Month->Text);

//p->x = StrToFloat(NewDouble->Text);

p->str = String->Text;

p->str1 = FirmaString->Text;

p->str2 = WidString->Text;

redraw();

}

void TMainForm::redraw()

{ List->Clear();

StrList->Clear();

for(Ptr p = list.first();p.valid();++p)

{

List->Items->Add(IntToStr(p->d));

StrList->Items->Add(p->str);

}

}

//------------------------------------------------------------------------void __fastcall TMainForm::Del(TObject *Sender)

{ int n = List->ItemIndex;

int i;

Ptr p;

for(i=0,p=list.first();p.valid()&&(i

if((i==n)&&p.valid())

{

p.remove();

redraw();

}

}

//------------------------------------------------------------------------void __fastcall TMainForm::Find(TObject *Sender)

{ int x = StrToInt(NewInt->Text);

Ptr p;

int i;

for(i=0,p=list.first();p.valid()&&(p->d!=x);++p,++i);

if(p.valid())

{ List->ItemIndex = i;

StrList->ItemIndex = i;

NewInt->Text = IntToStr(p->d);

Day->Text = IntToStr(p->day);

Year->Text = IntToStr(p->year);

Month->Text = IntToStr(p->month);

//NewDouble->Text = FloatToStr(p->x);

String->Text = p->str;

FirmaString->Text = p->str1;

WidString->Text = p->str2;

}

else List->ItemIndex = -1;

}

//------------------------------------------------------------------------

void __fastcall TMainForm::Sort(TObject *Sender)

{

Ptr t,p,q;

for(t=list.first().next();t.valid();t=q)

{

q = t.next();

for(p=t.prev();p.valid()&&(p->d>t->d);--p);

p>>t;

}

redraw();

}

//------------------------------------------------------------------------

void __fastcall TMainForm::Save(TObject *Sender)

{

FILE *f;

if(SaveDialog->Execute())

{

f = fopen(SaveDialog->FileName.c_str(),"w");

if(f!=NULL)

{

list.save(f);

fclose(f);

}

}

}

//------------------------------------------------------------------------

void __fastcall TMainForm::ZvitClick(TObject *Sender)

{

FILE *f;

if(SaveDialog->Execute())

Характеристики

Тип файла
Документ
Размер
2,3 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6952
Авторов
на СтудИзбе
264
Средний доход
с одного платного файла
Обучение Подробнее