|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.11.2010, 22:42 | #1 |
Регистрация: 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. |
09.11.2010, 22:42 | #2 |
Регистрация: 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. |
09.11.2010, 23:10 | #3 |
:D
Форумчанин
Регистрация: 26.09.2010
Сообщений: 570
|
код оформите
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Удаление последнего элемента из списка и реверс этого списка. | 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 |