Здравствуйте... пытаюсь разобраться и написать программу, связанную с работой со списком. Была сделана попытка оформить каждое действие(добавление, удаление, печать и ввод, вот только редактирование элемента списка ума не приложу как сделать) в виде структуры... да столкнулась с проблемами... помогите пожалуйста исправить. И не судите код строго... я все-таки только учусь
#include<iostream>
#include<conio.h>
#include<fstream>
using namespace std;
struct mebel
{
int n_nakl;
char izgotovitel[15];
char tovar[10];
int kolvo;
mebel *next;//
mebel *prev; //
};
//--ВВОД--//
void vvod(mebel *ukazatel_na_tek, int n)
{
//заполнение 1-го элемента//
cout<<"Введите номер накладной\t"; cin>>ukazatel_na_tek->n_nakl;
cout<<"Введите поставщика\t"; cin>>ukazatel_na_tek->izgotovitel;
cout<<"Введите наименование мебели\t"; cin>>ukazatel_na_tek->tovar;
cout<<"Введите количество мебели\t"; cin>>ukazatel_na_tek->kolvo;
//конец заполнения 1-го элемента//
for(int i=1; i<n; i++)
{
ukazatel_na_tek->next=new mebel;
ukazatel_na_tek=ukazatel_na_tek->next;
//заполнение оставшихся элементов//
cout<<"Введите номер накладной\t"; cin>>ukazatel_na_tek->n_nakl;
cout<<"Введите поставщика\t"; cin>>ukazatel_na_tek->izgotovitel;
cout<<"Введите наименование мебели\t"; cin>>ukazatel_na_tek->tovar;
cout<<"Введите количество мебели\t"; cin>>ukazatel_na_tek->kolvo;
//конец заполнения//
}
ukazatel_na_tek->next=0;/
}
//--ВЫВОД--//
void print(mebel *ukazatel_na_tek)
{
if(!ukazatel_na_tek)
cout<<"\n В списке отсутствуют элементы";
else
while(ukazatel_na_tek)
{
cout<<"Данные о поставщике: "<<ukazatel_na_tek->n_nakl<<"\t"<<ukazatel_na_tek->izgotovitel<<"\t"<<ukazatel_na_tek->tovar<<"\t"<<ukazatel_na_tek->kolvo<<endl;
ukazatel_na_tek=ukazatel_na_tek->next;
}
}
//--СОРТИРОВКА ПУЗЫРЬКОМ--//
void sort(mebel *ukazatel_na_tek, mebel *first, int n)
{
for(int i=0; i<n; i++)
{
ukazatel_na_tek=first;
for(int j=0; j<n-i-1; j++)
{
if(strcmp(ukazatel_na_tek->izgotovitel, ukazatel_na_tek->next->izgotovitel)==1)
{
//-меняем местами содержимое элементов-//
mebel tmp=*ukazatel_na_tek;
ukazatel_na_tek->n_nakl=ukazatel_na_tek->next->n_nakl;
strcpy_s(ukazatel_na_tek->izgotovitel, ukazatel_na_tek->next->izgotovitel);
strcpy_s(ukazatel_na_tek->tovar, ukazatel_na_tek->next->tovar);
ukazatel_na_tek->kolvo=ukazatel_na_tek->next->kolvo;
ukazatel_na_tek=ukazatel_na_tek->next;
ukazatel_na_tek->n_nakl=tmp.n_nakl;
ukazatel_na_tek->kolvo=tmp.kolvo;
strcpy_s(ukazatel_na_tek->izgotovitel, tmp.izgotovitel);
strcpy_s(ukazatel_na_tek->tovar, tmp.tovar);
//-end-//
}
else ukazatel_na_tek=ukazatel_na_tek->next;
}
}
}
//--УДАЛЕНИЕ--//
void delet(mebel *first)
{
int max_kol;
mebel *ukazatel_na_tek, *del;
//-поиск максимально количества товара-//
max_kol=first->kolvo;/
ukazatel_na_tek=first->next;
while(ukazatel_na_tek)
{
if(max_kol==ukazatel_na_tek->kolvo)
max_kol=ukazatel_na_tek->kolvo;
ukazatel_na_tek=ukazatel_na_tek->next;
}
cout<<"\nМаксимальное количество мебели="<<max_kol;
//-endl-//
ukazatel_na_tek=first;
while(ukazatel_na_tek)
{
if(max_kol==ukazatel_na_tek->kolvo)
{
del=ukazatel_na_tek;
ukazatel_na_tek=ukazatel_na_tek->next;
//-перенаправление указателей в соседних элементах-//
if(del->next && del->prev)
{
ukazatel_na_tek->prev=del->prev;
del->prev->next=ukazatel_na_tek;
}
else if(del->next && !del->prev)
{
ukazatel_na_tek->prev=0;
first=ukazatel_na_tek;
}
else if(!del->next && del->prev)
del->prev->next=0;
else first=0;
//-endl-//
delete del;
}
else ukazatel_na_tek=ukazatel_na_tek->next;
}
}
//--ДОБАВЛЕНИЕ НОВЫХ ЗАПИСЕЙ--//
void novaya(mebel *first, mebel *ukazatel_na_tek, int n)
{
int n2, i;
mebel *tmp2;
bool f;
cout<<"\n Введите желаемое количество новых записей:\t";
cin>>n2;
i=0;
if(!first && i<n2)//если список пуст
{
i++;
ukazatel_na_tek=new mebel;
first=ukazatel_na_tek;
ukazatel_na_tek=ukazatel_na_tek->next=0;
cout<<"\nВведите номер накладной, поставщика, товар и его количество:\n";
cin>>ukazatel_na_tek->n_nakl>>ukazatel_na_tek->izgotovitel>>ukazatel_na_tek->tovar>>ukazatel_na_tek->kolvo;
}
if(!first->next && i<n2)
{
i++;
tmp2=new mebel;
cout<<"\nВведите номер накладной, поставщика, товар и его количество:\n";
cin>>tmp2->n_nakl>>tmp2->izgotovitel>>tmp2->tovar>>tmp2->kolvo;
if(strcmp(first->izgotovitel, tmp2->izgotovitel)==1)
{
first->prev=tmp2;
tmp2->prev=0;
tmp2->next=first;
first=tmp2;
}
else
{
first->next=tmp2;
tmp2->prev=first;
tmp2->next=0;
}
}
for(;i<n;i++);
{
f=1;/
tmp2=new mebel;
cout<<"\nВведите номер накладной, поставщика, товар и его количество:\n";
cin>>ukazatel_na_tek->n_nakl>>ukazatel_na_tek->izgotovitel>>ukazatel_na_tek->tovar>>ukazatel_na_tek->kolvo;
if(strcmp(first->izgotovitel, tmp2->izgotovitel)==1)
{
first->prev=tmp2;
tmp2->prev=0;
tmp2->next=first;
first=tmp2;
f=0;
}
else
{
ukazatel_na_tek=first;
while(ukazatel_na_tek->next)
{
if(strcmp(ukazatel_na_tek->izgotovitel, tmp2->izgotovitel)==1)
{
tmp2->next=ukazatel_na_tek;
tmp2->prev=ukazatel_na_tek->prev;
ukazatel_na_tek->prev=tmp2;
f=0;
break;
}
else ukazatel_na_tek=ukazatel_na_tek->next;
}
if(f)
{
tmp2->next=0;
ukazatel_na_tek->next=tmp2;
tmp2->prev=ukazatel_na_tek;
}
}
}
}
void main()
{
int n;
setlocale(LC_ALL, "Rus");
mebel *ukazatel_na_tek, *first;
ukazatel_na_tek=new mebel;
first=ukazatel_na_tek;
cout<<"Введите количество поставщиков мебели: "; cin>>n;
vvod(first, n);
cout<<endl<<endl;
cout<<"ТЕКУЩИЙ СПИСОК"<<endl;
print(first);
cout<<endl<<endl;
sort(first, first, n);
cout<<"ОТСОРТИРОВАННЫЙ СПИСОК"<<endl;
print(first);
cout<<endl<<endl;
novaya(first, first, n);
cout<<"СПИСОК ПОСЛЕ ДОБАВЛЕНИЯ\n";
print(first);
cout<<endl<<endl;
delet(first);
cout<<"СПИСОК ПОСЛЕ УДАЛЕНИЯ\n";
print(first);
cout<<endl;
_getch();
}