Работа с масивами + виснет

Тема в разделе "Общие вопросы по С и С++", создана пользователем byshido, 4 янв 2011.

  1. byshido

    byshido Гость

    задача такая:Составить программу, которая содержит текущую информацию о книгах в библиотеке.Сведения о книгах заключают:

    1) номер УДК.
    2) фамилию и инициалы автора.
    3) название.
    4) год издания
    5) количество экземпляров данной книги в библиотеке.

    Программа должна обеспечивать :
    1) начальное формирование данных обо всех книгах в библиотеке в виде списка;
    2) при выдаче каждой книги на руки вводиться номер УДК, и программа уменьшает значение количества книг на 1
    или выдает сообщение о том, что требуемой книги в библиотеке нет или она находиться на руках;
    3) при возвращении каждой книги вводиться номер УДК, и программа увеличивает значение количества на1;
    4) по запросу выдаются сведения о наличии книг в библиотеке.

    Вот такой вот листинг:

    Код (C++):
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <windows.h>

    using namespace std;

    struct LIBRARY
    {
    char nomer[30];
    char FIO[30];
    char nazvanie[40];
    int Year;
    int kolvo;
    };

    struct STR
    {
    LIBRARY *Library;
    STR *next;
    };

    STR * create(LIBRARY * Library)
    {
    STR *root=new STR;
    root->Library=Library;
    root->next=NULL;
    return root;
    }

    void add(LIBRARY *Library, STR* root) //добавление нового элемента списка
    {
    while(root->next)
    root=root->next;
    root->next=new STR;
    root->next->Library=Library;
    root->next->next=NULL;
    }

    void printLIBRARY(LIBRARY *Library)
    {

    cout<<"Nomer => "<<Library->nomer<<endl;
    cout<<"FIO => "<<Library->FIO<<endl;
    cout<<"Nazvanie => "<<Library->nazvanie<<endl;
    cout<<"Year => "<<Library->Year<<endl;
    cout<<"Kolvo => "<<Library->kolvo<<endl;
    cout<<endl;

    }
    LIBRARY * makeLIBRARY() //добавление книги
    {
    cout<<"Enter book data:"<<endl;
    LIBRARY *Library=new LIBRARY;
    fflush(stdin);
    cout<<"Enter book nomer: => ";
    cin.getline(Library->nomer,30);

    cout<<"Enter Author's FIO: => ";
    cin.getline(Library->FIO,30);

    cout<<"Enter book name: => ";
    cin.getline(Library->nazvanie,40);

    cout<<"Enter made year: => ";
    cin>>Library->Year;

    cout<<"Enter count of books: => ";
    cin>>Library->kolvo;

    return Library;
    }
    int choice()
    {
    int answer;
    getch();
    system("cls");
    cout<<"Main menu"<<endl;
    cout<<"1. Add new books to the list"<<endl;
    cout<<"2. Print LIBRARY at list"<<endl;
    cout<<"3. Search and delete"<<endl;
    cout<<"4. Clear all entries"<<endl;
    cout<<"5. Exit"<<endl;
    cout<<"Enter your choice: ";
    cin>>answer;
    fflush(stdin);
    if(answer>=1 && answer<=5)
    return answer;
    else
    return 0;
    }

    int main()
    {
    STR *root=NULL;
    int ch;
    while(1)
    {
    ch=choice();
    if(ch==1)
    {
    cout<<endl;
    if(root==NULL)
    root=create(makeLIBRARY());
    else
    add(makeLIBRARY(),root);
    }

    else if(ch==2)
    {
    cout<<endl;
    int i=0;
    int N=0;

    STR *proot=root;
    while (root)
    {
    N++;
    root=root->next;
    }

    LIBRARY *buf;
    LIBRARY **pLibrary=new LIBRARY*[N];
    root=proot;

    while (root)
    {
    pLibrary[i]=root->Library;
    root=root->next;
    i++;
    }

    root=proot;


    for (i=0;i<N;i++)
    printLIBRARY(pLibrary[i]);

    }

    else if(ch==3)
    {
    char qwe[30];
    char qw[30], q[1];
    cout<<"Enter nomer of book => "<<endl;
    cin.getline(qwe,30);
    while (root)
    {
    if (!strcmp(qwe,root->Library->nomer))
    {
    {
    printLIBRARY(root->Library);
    cout<<"Do you want clear this entries? (y/n) "<<endl;// Удаление записи
    cin.getline(q,1);
    if (!strcmp(q,"y"))
    {
    root->Library=NULL;
    }
    root=root->next;
    }
    }
    else if (strcmp(qwe,root->Library->nomer))
    root=root->next;
    }

    cout<<"Entries deleted"<<endl;
    }

    else if(ch==4)
    {
    cout<<endl;
    }

    else if(ch==5)
    {
    break;
    cout<<endl;
    }

    }
    return 0;
    }

    Проблема в том что при поиске и удалении модуль выполняется, но потом программа просто висните и ничего не дает сделать, т.е. даже не посмотреть результаты(

    И второй вопрос, как грамотнее всего написать блок удаления всех записей?
     
  2. byshido

    byshido Гость

    Все исправил, все работает "спасибо" за помошь

    Код (C++):
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    using namespace std;

    struct LIBRARY
    {
    char nomer[30];
    char FIO[30];
    char nazvanie[40];
    int Year;
    int kolvo;
    };

    struct STR
    {
    LIBRARY *Library;
    STR *next;
    };

    STR * create(LIBRARY * Library) //начальное формирование списка
    {
    STR *root=new STR;
    root->Library=Library;
    root->next=NULL;
    return root;
    }



    void add(LIBRARY *Library, STR* root) //добавление нового элемента списка
    {
    while(root->next)
    root=root->next;
    root->next=new STR;
    root->next->Library=Library;
    root->next->next=NULL;
    }

    void printLIBRARY(LIBRARY *Library) //вывод на экран
    {

    cout<<"Nomer => "<<Library->nomer<<endl;
    cout<<"FIO => "<<Library->FIO<<endl;
    cout<<"Nazvanie => "<<Library->nazvanie<<endl;
    cout<<"Year => "<<Library->Year<<endl;
    cout<<"Kolvo => "<<Library->kolvo<<endl;   
    cout<<endl;

    }
    LIBRARY * makeLIBRARY() //добавление книги
    {
    cout<<"Enter book data:"<<endl;
    LIBRARY *Library=new LIBRARY;
    fflush(stdin);
    cout<<"Enter book nomer: => ";
    cin.getline(Library->nomer,30);

    cout<<"Enter Author's FIO: => ";
    cin.getline(Library->FIO,30);

    cout<<"Enter book name: => ";
    cin.getline(Library->nazvanie,40);

    cout<<"Enter made year: => ";
    cin>>Library->Year;

    cout<<"Enter count of books: => ";
    cin>>Library->kolvo;

    return Library;
    }
    int choice()
    {
    int answer;
    cout<<"Main menu"<<endl;
    cout<<"1. Add new books to the list"<<endl;
    cout<<"2. Print LIBRARY at list"<<endl;
    cout<<"3. Search and delete"<<endl;
    cout<<"4. Clear all entries"<<endl;
    cout<<"5. Exit"<<endl;
    cout<<"Enter your choice: ";
    cin>>answer;
    fflush(stdin);
    if(answer>=1 && answer<=5)
    return answer;
    else
    return 0;
    }

    STR* search_and_del(STR * str)
    {
    STR *last=str,*root = str;
    char qwe[30];
    char qw[30], q[1];
    cout<<"Enter nomer of book => "<<endl;
    cin.getline(qwe,30);
    while (root)
    {
    if (!strcmp(qwe,root->Library->nomer))
    {
    {
    printLIBRARY(root->Library);
    cout<<"Do you want clear this entries? (y/n) "<<endl;// Удаление записи
    char c;  
    cin.get(c);
    if (c=='y')
    {
    root->Library=NULL;
    if(last==root) str=root->next;
    else last->next=root->next;
    }
    while(cin.get(c) && c!='\n');
    last = root;
    root=root->next;
    }
    }
    else if (strcmp(qwe,root->Library->nomer))
    root=root->next;
    }

    cout<<"Entries deleted"<<endl;
    return str;
    }

    int main()
    {
    STR *root=NULL;
    int ch;
    while(1)
    {
    ch=choice();
    if(ch==1)
    {
    cout<<endl;
    if(root==NULL)
    root=create(makeLIBRARY());
    else
    add(makeLIBRARY(),root);
    }

    else if(ch==2)
    {
    cout<<endl;
    int i=0;
    int N=0;

    STR *proot=root;
    while (root)
    {
    N++;
    root=root->next;
    }

    LIBRARY *buf;
    LIBRARY **pLibrary=new LIBRARY*[N];
    root=proot;

    while (root)
    {
    pLibrary[i]=root->Library;
    root=root->next;
    i++;
    }

    root=proot;


    for (i=0;i<N;i++)
    printLIBRARY(pLibrary[i]);

    }

    else if(ch==3)
    {
    root=search_and_del(root);
    }

    else if(ch==4)
    {
    char e;
    cout<<"Do you want clear all entries? (y/n) "<<endl;// Удаление всех записей
    cin.get(e);
    if(e=='y')   
    {root=NULL;  
    cout<<"All entries successfully deleted!"<<endl;}      
    else if (e=='n') cout<<endl;       
    while(cin.get(e) && e!='\n');
    }    

    else if(ch==5)
    {
    break;
    cout<<endl;
    }

    }
    return 0;
    }
     
  3. Rififi

    Rififi Гость

    byshido

    Все исправил, все работает "спасибо" за помошь

    помощь на самом деле есть.
    если бы за тебя всё разжевали и принесли готовенькое, ты бы не сделал никаких выводов. бездумно сдал бы лабу преподу и успокоился.
    а так - ты разобрался в проге и нашёл её слабые места. теперь тебя врасплох не застать((:) к томуже многие студни страдают от навязчивой фобии под названием "страх перед отладчиком". а тебе и это не грозит;)
     
Загрузка...
Похожие Темы - Работа масивами виснет
  1. Andrey Kha
    Ответов:
    0
    Просмотров:
    26
  2. Hoasker
    Ответов:
    0
    Просмотров:
    64
  3. garri671
    Ответов:
    0
    Просмотров:
    54
  4. lelik200969
    Ответов:
    0
    Просмотров:
    52
  5. Kozolick
    Ответов:
    0
    Просмотров:
    141

Поделиться этой страницей