Собственно вот, что получилось:
| Код | #include <iostream.h> #include <windows.h> const int NotUsed=system("color F0"); int menu(); struct list { char sn[50]; //student name int sid; //student number list *next; list *prev; }; list *list_end=NULL; //sozdanie pustogo spiska list *dobav_nach(list *p); //dobavit v nachalo list *udal_nach(list *p); //udalit iz nachala list *dobav_proizv(list *p); //dobavit v proizvolnoe mesto list *udal_proizv(list *p); //udalit iz proizvolnogo mesta void proverka(list *p); //proverka, pust li spisok list *clean_list(list *p); //ochistit spisok void print(list *p); //vyiti //------------------------------------------------------------ int main() { list *l=NULL; bool ex=true; while (ex) { switch(menu()) { case 1: l=dobav_nach(l); break; case 2: l=udal_nach(l); break; case 3: dobav_proizv(l); break; case 4: if (udal_proizv(l)==NULL) l=NULL; break; case 5: proverka(l); break; case 6: l=clean_list(l); break; case 7: print(l); break; case 0: ex=false; break; default: cout<<"Vyberite punkt!"<<endl; break; } } return 0; } //----------------------------------------------- int menu() { int m; cout<<" --------------------------------"<<endl; cout<<" Vyberite punkt: \n\n"; cout<<" 1 - dobavit v nachalo\n"; cout<<" 2 - udalit iz nachala\n"; cout<<" 3 - dobavit v proizvolnoe mesto\n"; cout<<" 4 - udalit iz proizvolnogo mesta\n"; cout<<" 5 - proverit, pust li spisok\n"; cout<<" 6 - ochistit spisok\n"; cout<<" 7 - pechat spiska\n"; cout<<" 0 - vyiti\n"; cout<<" --------------------------------"<<endl<<endl; cin>>m; return m; } //----------------------------------------------- list *dobav_nach(list *p) { list *t; t=new list; cout<<endl<<" Vvedite imya studenta: "; cin>>(t->sn); cout<<" Vvedite nomer studenta: "; cin>>t->sid; if(p==NULL) { list_end=t; t->next=t; cout<<endl<<" ...Added successfully!\n\n"; } else { t->next=p; list_end->next=t; cout<<endl<<" ...Added successfully!\n\n"; } return t; } //----------------------------------------------- list *udal_nach(list *p) { list *t; if(p==NULL) cout<<" Spisok pyst!"; else { if(p==list_end) { delete p; p=NULL; list_end=NULL; cout<<endl<<" ...Deleted successfully!\n\n"; } else { t=p; p=p->next; list_end->next=p; delete t; cout<<endl<<" ...Deleted successfully!\n\n"; } } return p; } //----------------------------------------------- list *dobav_proizv(list *p) { int sd; list *s,*t; if(p==NULL) cout<<" Spisok pyst!"; else { t=p; cout<<endl<<"Vvedite nomer studenta, posle kotorogo budet vstavlen etot: "; cin>>sd; do { if(t->sid==sd) { s=new list; cout<<"Vvedite imya studenta: "; cin>>(s->sn); cout<<"Vvedite nomer studenta: "; cin>>s->sid; s->next=t->next; t->next=s; cout<<endl<<" ...Added successfully!\n\n"; if(s->next==p) list_end=s; break; } t=t->next; } while(t!=p); } return s; } //----------------------------------------------- list *udal_proizv(list *p) { int sd; list *s,*t; if(p==NULL) cout<<" Spisok pyst!"; else { t=p; cout<<endl<<"Vvedite nomer studenta, kotoruy budet udalen: "; cin>>sd; while(t->next!=p) { if(t->next->sid==sd) { s=t->next; t->next=s->next; delete s; cout<<endl<<" ...Deleted successfully!\n\n"; if(t->next==p) { list_end=t; } break; } t=t->next; } } return t; } //----------------------------------------------- void proverka(list *p) { if(p==NULL) cout<<endl<<" Spisok pyst!\n\n"; else cout<<endl<<" Spisok ne pyst!\n\n"; } //----------------------------------------------- list *clean_list(list *p) { list *t; if(p==NULL) cout<<" Spisok pyst!"; else { while(p!=list_end) { t=p; p=p->next; delete t; } delete p; p=NULL; list_end=NULL; cout<<endl<<" ...Cleaned successfully!\n\n"; } return p; } //----------------------------------------------- void print(list *p) { list *t_p=p; if(t_p) { do { cout<<" ---------------------------"<<endl; cout<<" Imya studenta: "<<t_p->sn<<endl; cout<<" Nomer studenta: "<<t_p->sid<<endl; cout<<" ---------------------------\n\n"; t_p=t_p->next; } while(t_p!=list_end->next); } else cout<<" Spisok pyst!\n\n"; }
|
пожалуйста подскажите, как сделать что бы имя студента можно было записывать с пробелами, а так же что бы номер был максимум 10 символов. и еще интересует, правильно ли вообще составлен "кольцевой двунаправленный список", и что здесь не так? |