Доброго времени суток.Столкнулся с такой вот проблемой:
имеется исходный код,к которму нужно применить шаблон 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