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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2010, 15:47   #1
Demonhunterus
Пользователь
 
Регистрация: 16.10.2010
Сообщений: 11
По умолчанию Использование шаблона List(C++)

Доброго времени суток.Столкнулся с такой вот проблемой:
имеется исходный код,к которму нужно применить шаблон List.С этим,собственно,и проблема.Буду признателен за любую помощь.
Вот код и внешний вид,который должен иметь List:
Код:
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <cstring>
 
using namespace std;
 
struct base {
  char shop [30]; // Avtor
  char Title [50]; // Nazvanie
  int kol;         // kol
  base *prev;       // Ukazatel' na predyduschuyu zapis'
  base *next;       // Ukazatel' na sleduyuschuyu zapis'
};
 
base *first = NULL; // Ukazatel' na nachalo spiska
base *last = NULL;  // Ukazatel' na konets spiska
 
// Prototipy funktsii
void Input (void); // Nachal'noe formirovanie spiska
void Find (void);  // Poisk v spiske
int List (void);   // Pechat' vsego spiska
void Clear (void); // Udalenie spiska iz pamyati
int Menu (void);   // Menyu
 
int main (void)
{
        while (Menu ()); // tsikl poka pol'zovatel' ne vybral vyhod
        Clear ();
        return 0;
}
 

void Add (base *db)
{
  if (last != NULL) // esli spisok uzhe suschestvuet
  {
    db->prev = last;
    db->next = NULL;
    last->next = db;
    last = db;
  }
  else              // esli spisok esche ne sozdan
  {
    db->prev = NULL;
    db->next = NULL;
    first = db;
    last = db;
  }
}
 
void Delete (base *db)
{
  if (db)
  {
    if (db->prev) db->prev->next = db->next;
    if (db->next) db->next->prev = db->prev;
    if (db == first) first = first->next;
    if (db == last) last = last->prev;
    delete db;
  }
}

void AddItem (void)
{
  base *db;
 
  // sozdaem novuyu strukturu
  db = new base;
  // zapolnyaem ee
  cout << "Vvedite nazvanie magazina: ";
  cin >> db->shop;
  cout << "Vvedite nazvanie tovara: ";
  cin >> db->Title;
  cout << "Vvedite kol-vo tovara: ";
  cin >> db->kol;
  // dobavlyaem v spisok
  Add (db);
}
 
void DeleteItem (void)
{
  // vyvodim spisok vseh struktur
  int i = List ();
  int num;
 
  cout << "Vvedite nomer udalyaemoi zapisi: ";
  cin >> num;
  if (num < 1 || num > i) return;
 
  base *db = first;
  // nahodim ukazatel' na udalyaemuyu strukturu
  for (i = 1; i < num; i++)
  {
    db = db->next;
  }
  // udalyaem ee
  Delete (db);
}

void Input (void)
{
  bool enough = false;
 
  do
  {
    AddItem (); // zapolnyaem ocherednuyu strukturu
    cout << "Prodolzhit' vvod informatsii? (y/n)" << endl;
    if (getch () == 'n') enough = true;
  }
  while (!enough);
}

void Find (void)
{
  base *db = first;
  char name[20]=" ";
  int k,i=0;
  cout<<"Vvedite nazvanie tovara i trebyemoe kol-vo:";
  cin>>name;cin>>k;
  cout << "Rezul`tat# poiska:" << endl;
  while (db)
  {
    if (!strcmp(db->Title,name)&&(db->kol >=k)) // proveryaem zapis'
    {
                cout << db->shop << " "
                        << db->Title << " "
                        << db->kol << endl;
                i++;
    }
    db = db->next; // perehodim k sleduyuschei zapisi
  }
  if (i==0)cout<<"Poisk ne dal rezyl`tata!!!";
}

int List (void)
{
  base *db = first;
  int i = 0;
 
  cout << endl << "V spiske soderzhatsya:" << endl;
  while (db)
  {
    i++;
    cout << i << ". " << db->shop << " " << db->Title << " " << db->kol << endl;
    db = db->next;
  }
  return i;
}

void Clear (void)
{
  base *db = first;
  while (db)
  {
    base *tmp = db;
    db = db->next;
    Delete (tmp);
  }
}
 
int Menu (void)
{
  char ch = 0;
 
  // Vyvodim spisok vozmozhnyh variantov vybora
  cout << "Vash vybor:" << endl;
  cout << "1. Sformirovat' spisok." << endl;
  cout << "2. Pechat' spiska." << endl;
  cout << "3. Dobavit' v spisok." << endl;
  cout << "4. Udalit' iz spiska." << endl;
  cout << "5. Poisk v spiske." << endl;
  cout << "6. Vyhod." << endl;
 
  // ozhidaem, kogda budet nazhata "pravil'naya" klavisha
  while (ch < '1' || ch > '6')
  {
    ch = getch ();
  }
 
  // osuschestvlyaem vybor soglasno nazhatoi klavishy
  switch (ch)
  {
    case '1': Input (); break;
    case '2': List (); break;
    case '3': AddItem (); break;
    case '4': DeleteItem (); break;
    case '5': Find (); break;
    case '6': return 0;
  };
  return 1;
}
--- сам код
Код:
template <class Item,class Key> class List
{
private:
// программный код,зависящий от реализации
public:
List()
~List();
void add(Item);
Item *search(Key);
Item *insert(Item,Item);
boll remove(Item);
void print();
}
;
--- List
Demonhunterus вне форума Ответить с цитированием
Старый 16.10.2010, 16:20   #2
Demonhunterus
Пользователь
 
Регистрация: 16.10.2010
Сообщений: 11
По умолчанию

Почикал код+подогнал под свое задание.Осталось к этому применить List.
Код:
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <cstring>

using namespace std;

struct base {
  char fio [30]; // ФИО сотрудника
  char bolezn [50]; // Название болезни
  int dlit;         // Длительность болезни
  base *prev;       // Указатель на предыдущую запись
  base *next;       // Указатель на следующую запись
};

base *first = NULL; // Указатель на начало списка
base *last = NULL;  // Указатель на конец списка


int List (void);   

void AddItem (void)
{
  base *db;

  // создаем новую структуру
  db = new base;
  // заполняем её
  cout << "Введите фамилию сотрудника: ";
  cin >> db->fio;
  cout << "Введите название болезни: ";
  cin >> db->bolezn;
  cout << "Введите длительность болезни: ";
  cin >> db->dlit;
  // добавляем в список
  if (last != NULL) // если список уже существует
  {
    db->prev = last;
    db->next = NULL;
    last->next = db;
    last = db;
  }
  else              // если список ещё не создан
  {
    db->prev = NULL;
    db->next = NULL;
    first = db;
    last = db;
  };
}


void DeleteItem (void)
{
  // выводим список всех структур
  int i = List ();
  int num;

  cout << "Введите номер удаляемой записи ";
  cin >> num;
  if (num < 1 || num > i) return;

  base *db = first;
  // находим указатель на удаляемую структуру
  for (i = 1; i < num; i++)
  {
    db = db->next;
  }
  // удаляем её
  if (db)
  {
    if (db->prev) db->prev->next = db->next;
    if (db->next) db->next->prev = db->prev;
    if (db == first) first = first->next;
    if (db == last) last = last->prev;
    delete db;
  };
}


void Input (void)
{
  bool enough = false;

  do
  {
    AddItem (); // заполняем очередную структуру
    cout << "Продолжить ввод информации? (y/n)" << endl;
    if (getch () == 'n') enough = true;
  }
  while (!enough);
}


void Find (void)
{
  base *db = first;
  char name[20]=" ";
  int i=0;
  cout<<"Введите название болезни :";
  cin>>name;
  cout << "Результаты поиска:" << endl;
  while (db)
  {
    if (!strcmp(db->bolezn,name)) // проверяем запись
    {
		cout << db->fio << " "
			<< db->bolezn << " "
			<< db->dlit << endl;
		i++;
    }
    db = db->next; // переходим к следующей записи
  }
  if (i==0)cout<<"Поиск не дал результата";
}


int List (void)
{
  base *db = first;
  int i = 0;

  cout << endl << "В списке содержатся:" << endl;
  while (db)
  {
    i++;
    cout << i << ". " << db->fio << " " << db->bolezn << " " << db->dlit << endl;
    db = db->next;
  }
  return i;
}


int Menu (void)
{
  char ch = 0;

  // Выводим список возможных вариантов выбора
  cout << "Ваш выбор:" << endl;
  cout << "1. Сформировать список" << endl;
  cout << "2. Печать списка" << endl;
  cout << "3. Добавить в список" << endl;
  cout << "4. Удалить из списка" << endl;
  cout << "5. Поиск в списке" << endl;
  cout << "6. Выход" << endl;

  // ожидаем нажатия правильной клавиши
  while (ch < '1' || ch > '6')
  {
    ch = getch ();
  }

  // осуществляем выбор согласно набраной клавише
  switch (ch)
  {
    case '1': Input (); break;
    case '2': List (); break;
    case '3': AddItem (); break;
    case '4': DeleteItem (); break;
    case '5': Find (); break;
    case '6': return 0;
  };
  return 1;
}

int main (void)
{
	while (Menu ()); // цикл,пока пользователь не выбрал Выход
	return 0;
}
Demonhunterus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка PHP шаблона Alex2009 PHP 4 02.09.2009 17:02
Проблема шаблона в IE Cvieri HTML и CSS 9 08.07.2009 18:21
Восстановление шаблона по умолчанию... Busine2009 Microsoft Office Word 1 04.07.2009 22:57
C++ Специализация шаблона opensuse2008 Помощь студентам 7 07.06.2009 18:00
Копирование файла-шаблона Siver Microsoft Office Excel 3 26.12.2008 04:28