Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2010, 22:42   #1
kolyan_zver
 
Регистрация: 12.06.2010
Сообщений: 9
По умолчанию Класс с использованием списка в С++

Помогите, пожалуйста с программой. Нужно сделать чтоб заполнение с клавиатуры происходило с помощью списков.

#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;
template <class T>
class uzel
{
T inf;
uzel *next;
uzel *prev;
public:
uzel<T>(uzel *_next,uzel *_prev, T n)
{
next = _next;
prev = _prev;
inf = n;
}
uzel* get_next()
{
return next;
}
void set_next(uzel* _next)
{

next = _next;
}
uzel* get_prev()
{
return prev;
}
void set_prev(uzel* _prev)
{
prev = _prev;
}
T* get_inf()
{
return &inf;
}
};

//
//
template <class T>
class spisok
{
uzel<T> *head;
uzel<T> *tail;
uzel<T> *sp;
uzel<T> *mp;
public:
spisok()
{
head=NULL;
tail=NULL;
sp=mp=NULL;
}
void print()
{
sp = head;
while(sp!=NULL)
{
sp->get_inf()->print();
sp = sp->get_next();
}
}

void add_uzel_vkonec( T n)
{
if(!head)
{
head = new uzel<T>(NULL,NULL,n);
}
else
{
sp = head;
while(sp->get_next()!=NULL)sp = sp->get_next();
tail = new uzel<T>(NULL, sp, n);
sp->set_next(tail);
}
}
void add_uzel_vnachalo(T n)
{
if(!head)
{
head = new uzel<T>(NULL,NULL,n);
}
else
{
sp = head;
head = new uzel<T>(sp,NULL,n);
sp->set_prev(head);
}
}


bool add_posle_zadan(T n, int k)
{
if(!head) return 0;
sp = head;
for( int i = 1 ; i < k ; i++ )
{
sp = sp->get_next();
if (!sp) return 0;
}
mp = new uzel<T>(sp->get_next(),sp,n);
sp->get_next()->set_prev(mp);
sp->set_next(mp);
return 1;
}

bool add_posle_zad_skonca( T n, int k)
{
if(!head) return 0;
sp = tail;
for( int i = 1 ; i < k ; i++ )
{
sp = sp->get_prev();
if (!sp) return 0;
}
mp = new uzel<T>(sp, sp->get_prev(),n);
sp->get_prev()->set_next(mp);
sp->set_prev(mp);
return 1;

}
bool del_after(int k)
{
if (!head)return 0;
sp = head;
for( int i = 1 ; i < k ; i++ )
{
if(!sp) return 0 ;
sp = sp->get_next();
}
mp = sp->get_next();
sp->set_next(mp->get_next());
mp->get_next()->set_prev(sp);
delete mp;
return 1;
}
bool del(int k)
{
if (!head)return 0;
sp = head;
if( k == 1)
{
mp = head;
head = head->get_next();
if(!head)
{
delete(mp);
return 0;
}
head->set_prev(NULL);
delete(mp);
return 1;
}
for( int i = 1 ; i < k ; i++ )
{
if(!sp) return 0 ;
sp = sp->get_next();
}
if(!(sp->get_next()))
{
mp = sp;
tail = sp->get_prev();
tail->set_next(NULL);
delete(sp);
return 1;
}
mp = sp;
sp->get_prev()->set_next(sp->get_next());
sp->get_next()->set_prev(sp->get_prev());

delete (mp);
return 1;
}
bool del_before(int k)
{
if (!head)return 0;
sp = tail;
for( int i = 1 ; i < k ; i++ )
{
if(!sp)return 0;
sp = sp->get_prev();
}
mp = sp->get_prev();
sp->set_prev(mp->get_prev());
mp->get_prev()->set_next(sp);
delete mp;
return 1;
}
T* get_uzel(int k)
{
sp = head;
for( int i = 1 ; i < k ; i++ )
{
sp = sp->get_next();
if(sp==NULL) return NULL;
}
return sp->get_inf();
}
bool clear()
{
while(head!=NULL)
{
this->del(1);
}
if(!head) return 1;
return 0;
}

};

int i2=0;

class usd
{ char kvit[100];
char date[10];
double dengi;
public:


usd(char *kvit,char *date, double dengi);
double getDengi(){return dengi;}
};
usd::usd(char *kvit,char *date, double dengi)
: dengi(dengi)
{
strcpy(this->date,date);
strcpy(this->kvit,kvit);
}

class excursion
{
char transp[15];
char dlitel[15];
int hour,min;
int i1;
usd *p[10];
public:
char name[15];
int kopl;
double stoim;
excursion(char *name,char *transp,char *dlitel,double stoim1,int hour,int minute);
void add_money(usd *p1);
int oplacheno;
int getMinute()
{return min;};
int getHour()
{return hour;};
double sum();
double ost_sum();
};
excursion::excursion(char *name,char *transp,char *dlitel,double stoim1,int hour,int minute)
:stoim(stoim1)
{
strcpy(this->name,name);
strcpy(this->transp,transp);
strcpy(this->dlitel,dlitel);
i1=0;
kopl=0;
this->min=minute;
this->hour=hour;
oplacheno=0;
}

void excursion::add_money(usd *p1)
{

p[kopl]=p1;
kopl++;

}
double excursion::sum()
{
double s1=0;
for (int i=kopl-1;i>=0;i--)
s1=s1+p[i]->getDengi();
return s1;
}

double excursion:: ost_sum()
{
return stoim-sum();
}

Последний раз редактировалось kolyan_zver; 09.11.2010 в 23:47.
kolyan_zver вне форума Ответить с цитированием
Старый 09.11.2010, 22:42   #2
kolyan_zver
 
Регистрация: 12.06.2010
Сообщений: 9
По умолчанию

продолжение:
class travel
{
public:
excursion *S[100];
travel (excursion *s1);
int add_exc(excursion *s1);
double ost_sum();
double ob_sum();
char* poisk(double st)
{
for (int i=i2-1;i>=0;i--)
{
if (st==S[i]->stoim)
return S[i]->name;
}
};
};
double travel:: ost_sum()
{
double sum4=0;
for (int i4=i2-1;i4>=0;i4--)
{
sum4=sum4+S[i4]->ost_sum();
}
return sum4;
}
double travel:: ob_sum()
{
double sum2=0;
for (int i3=i2-1;i3>=0;i3--)
{
if (S[i3]->kopl==0)
break;
else
sum2=sum2+S[i3]->sum();
}
return sum2;
}
int travel::add_exc(excursion *s1)
{
if ((s1->getHour())<0 ||(s1->getHour())>23 || (s1->getMinute())<0 || (s1->getMinute())>59)
return 0;
else
{
S[i2]=s1;
i2++;
return 1;
}
}
travel::travel (excursion *s1)
{
if ((s1->getHour())>=0 && (s1->getHour())<=23 && (s1->getMinute())>=0 && (s1->getMinute())<=59){
S[i2]=s1;
i2++;
}
}
int main()
{
setlocale(0,"Rus");
char nazv[15],trans[15],dlit[15],kvit1[100],date1[10];
int min1,hour1;
double stoim1,dengi1;
int qwer,menu,nomer,a4;
cout<<"Введите название экскурсии"<<endl;
cin>>nazv;
cout<<"Введите транспорт"<<endl;
cin>>trans;
cout<<"Ведите длительность экскурсии"<<endl;
cin>>dlit;
cout<<"Введите время отправления(часы)"<<endl;
cin>>hour1;
cout<<"Введите время отправления(минуты)"<<endl;
cin>>min1;
cout<<"Введите стоимость экскурсии"<<endl;
cin>>stoim1;
excursion *A=new excursion(nazv,trans,dlit,stoim1,ho ur1,min1);
travel A1(A);

while(true){
system("cls");
cout<<"Турагенство <Супер экскурсия>:\n 1.добавить экскурсию"<<endl;
cout<<" 2.узнать сколько уже оплачено"<<endl;
cout<<" 3.узнать сколько осталось оплатить"<<endl;
cout<<" 4.заплатить за экскурсию"<<endl;
cout<<" 5.узнать сколько осталось заплатить за экскурсии"<<endl;
cout<<" 6.узнать сколько уже оплачено за экскурсии"<<endl;
cout<<" 7.поиск экскурсии по стоимости"<<endl;
cout<<" 8.выход"<<endl;
cout<<"\n Всего экскурсий - "<<i2<<endl;
cin>>menu;
switch (menu)
{
case 4:
{
cout<<"Введите номер экскурсии ";
cin>>nomer;
cout<<"Введите сумму"<<endl;
cin>>dengi1;
cout<<"Введите дату оплаты"<<endl;
cin>>date1;
cout<<"Введите номер квитанции"<<endl;
cin>>kvit1;
usd *p1= new usd(kvit1,date1,dengi1);
A1.S[nomer-1]->add_money(p1);
system("pause");
break;
}
case 2:
{
cout<<"Введите номер экскурсии ";
cin>>nomer;
cout<<"Всего оплачено - "<<A1.S[nomer-1]->sum()<<" из - "<<A1.S[nomer-1]->stoim<<endl;
system("pause");
break;
}
case 3:
{
cout<<"Введите номер экскурсии ";
cin>>nomer;
cout<<"Осталось заплатить - "<<A1.S[nomer-1]->ost_sum()<<endl;
system("pause");
break;
}
case 1:
{
cout<<"Введите название экскурсии"<<endl;
cin>>nazv;
cout<<"Введите транспорт"<<endl;
cin>>trans;
cout<<"Введите длительность экскурсии"<<endl;
cin>>dlit;
cout<<"Введите время отправления(часы)"<<endl;
cin>>hour1;
cout<<"Введите время отправления(минуты)"<<endl;
cin>>min1;
cout<<"Введите стоимость экскурсии"<<endl;
cin>>stoim1;
excursion *A=new excursion(nazv,trans,dlit,stoim1,ho ur1,min1);
a4=A1.add_exc(A);

if(a4==1)
cout<<"Выполнено!\n"<<endl;
else
cout<<"Ошибка\n"<<endl;
system("pause");
break;
}
case 6:
{
cout<<"Уже оплачено за экскурсии = "<<A1.ob_sum()<<endl;
system("pause");
break;
}
case 5:
{
cout<<"Осталось заплатить за экскурсии = "<<A1.ost_sum()<<endl;
system("pause");
break;
}
case 7:
{
cout<<"Введите стоимость экскурсии"<<endl;
cin>>stoim1;
cout<<"Название экскурсии - "<<A1.poisk(stoim1)<<endl;
system("pause");
break;
}
case 8:
{ return 0;}
}

}

}



Заранее спасибо.

Последний раз редактировалось kolyan_zver; 09.11.2010 в 23:48.
kolyan_zver вне форума Ответить с цитированием
Старый 09.11.2010, 23:10   #3
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

код оформите
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12
Анимация c использованием GDI Alexcomeback Общие вопросы C/C++ 5 16.04.2010 23:10
Процедура "считалки" с использованием кольцевого списка FYBVFPFYBC Помощь студентам 2 19.01.2010 17:43
Создание класс с использованием методов доступа к данным El_Bint0 Помощь студентам 1 14.03.2007 10:16