Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Закомментируйте код пожалуйста, подробно если можно, чтоб понять что к чему
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
XakProg XakProg вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.10.2018
По умолчанию Закомментируйте код пожалуйста, подробно если можно, чтоб понять что к чему - 12.10.2018, 14:04

cpp Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
const unsigned int NAME_SIZE = 30;
const unsigned int STREET_SIZE = 40;
const unsigned int CITY_SIZE = 20;
struct Address
{
    char name[NAME_SIZE];
    char street[STREET_SIZE];
    char city[CITY_SIZE];
    Address *next;
    Address *prev;

};
//-----------------------------------------------------------
int menu(void)
{
    char s[80];
    int c;
    cout << endl;
    cout << "1. Ввод имени" << endl;
    cout << "2. Удаление имени" << endl;
    cout << "3. Вывод на экран" << endl;
    cout << "4. Поиск" << endl;
    cout << "5. Сохранить в файл" << endl;
    cout << "6. Загрузить из файла" << endl;
    cout << "7. Выход" << endl; cout << endl;
    do
    {
        cout << "Ваш выбор: ";
        cin.sync();
        gets_s(s);
        cout << endl;
        c = atoi(s);
    } while (c < 0 || c > 7);
    return c;

}
//-----------------------------------------------------------
void create(Address *i, Address **phead, Address **plast)
{
    Address *old = NULL, *p = *phead;
    if (*plast == NULL)
    {
        i->next = NULL;
        i->prev = NULL;
        *plast = i;
        *phead = i;
        return;
    }
    while (p)
    {
        if (strcmp(p->name, i->name) < 0)
        {
            old = p;
            p = p->next;
        }
        else
        {
            if (p->prev)
            {
                p->prev->next = i;
                i->next = p;
                i->prev = p->prev;
                p->prev = i;
                return;
            }
            i->next = p;
            i->prev = NULL;
            p->prev = i;
            *phead = i;
            return;
        }
    }
    old->next = i;
    i->next = NULL;
    i->prev = old;
    *plast = i;
}

//-----------------------------------------------------------
Address* setElement()      // Ввод структуры
{
    Address* temp = new  Address();
    if (!temp)
    {
        cerr << "Ошибка выделения памяти памяти";
        return NULL;
    }  
        cout << "Введите имя: ";
        cin.getline(temp->name, NAME_SIZE-1,'\n');
        cin.ignore(cin.rdbuf()->in_avail());
        cin.clear();
        cout << "Введите улицу: ";
        cin.getline(temp->street, STREET_SIZE-1,'\n');
        cin.ignore(cin.rdbuf()->in_avail());
        cin.clear();
        cout << "Введите город: ";
        cin.getline(temp->city, CITY_SIZE-1,'\n');
        cin.ignore(cin.rdbuf()->in_avail());
        cin.clear();   
    temp->next = NULL;
    temp->prev = NULL; 
    return temp;
}
//-----------------------------------------------------------
void outputList(Address **phead, Address **plast)      //Вывод списка на экран
{
    Address *t = *phead;
    while (t)
    {
        cout << t->name << ' ' << t->street
            << ' ' << t->city << endl;
        t = t->next;
    }
    cout << "" << endl;
}
//-----------------------------------------------------------
void find(char name[NAME_SIZE], Address **phead)    // Поиск имени в списке
{
    Address *t = *phead;
    while (t)
    {
        if (!strcmp(name, t->name))
            break;
        t = t->next;
    }
    if (!t)
        cerr << "Имя не найдено" << endl;
    else
        cout << t->name << ' ' << t->street << ' ' << t->city << endl;
}
//-----------------------------------------------------------
void delet(char name[NAME_SIZE], Address **phead, Address **plast)  // Удаление имени из списка
{
    struct Address *t = *phead;
   
    while (t)
    {
        if (!strcmp(name, t->name))
            break;
        t = t->next;
    }
    if (t)
    {
        if (*phead == t)
        {
            *phead = t->next;
            if (*phead)
                (*phead)->prev = NULL;
            else
                *plast = NULL;
        }
        else
        {
            t->prev->next = t->next;
            if (t != *plast)
                t->next->prev = t->prev;
            else
                *plast = t->prev;
        } delete t;
    }
}
//-----------------------------------------------------------
void writeToFile(Address **phead)       //Запись в файл
{
    struct Address *t = *phead;
    FILE *fp;
    errno_t err = fopen_s(&fp, "mlist", "wb");
    if (err)
    {
        cerr << "Файл не открывается" << endl;
        exit(1);
    }
    cout << "Сохранение в файл" << endl;

    while (t)
    {
        fwrite(t, sizeof(struct Address), 1, fp);
        t = t->next;
    }
    fclose(fp);
}
//-----------------------------------------------------------
void readFromFile(Address **phead, Address **plast)          //Считывание из файла
{
    struct Address *t;
    FILE *fp;
    errno_t err = fopen_s(&fp, "mlist", "rb");
    if (err)
    {
        cerr << "Файл не открывается" << endl;
        exit(1);
    }
    while (*phead)
    {
        *plast = (*phead)->next;
        delete *phead;
        *phead = *plast;
    }
    *phead = *plast = NULL;
    cout << "Загрузка из файла" << endl;
    while (!feof(fp))
    {
        t = new Address();
        if (!t)
        {
            cerr << "Ошибка выделения памяти памяти" << endl;
            return;
        }
        if (1 != fread(t, sizeof(struct Address), 1, fp))
            break;
        create(t, phead, plast);
    }
    fclose(fp);
}
//-----------------------------------------------------------
int main(void)
{
    Address *head = NULL;
    Address *last = NULL;
    setlocale(LC_CTYPE, "Rus");
    while(true)
    {
    switch (menu())
        {
        case 1:  {
                  create(setElement(), &head, &last);
            }
            break;
        case 2:  {
                  char dname[NAME_SIZE];
                  cout << "Введите имя: ";
                  cin.getline(dname, NAME_SIZE-1,'\n');
                  cin.ignore(cin.rdbuf()->in_avail());
                  cin.sync();
                  delet(dname,&head, &last);
                }
                break;
        case 3:  outputList(&head, &last);
                break;
        case 4:  { 
                  char fname[NAME_SIZE];
                  cout << "Введите имя: ";
                  cin.getline(fname, NAME_SIZE - 1, '\n');
                  cin.ignore(cin.rdbuf()->in_avail());
                  cin.sync();
                  find(fname, &head);
                }
                break;
        case 5:  writeToFile(&head);
                break;
        case 6:  readFromFile(&head, &last);
                break;
        case 7:  exit(0);
        default: exit(1);
        }
    }
    return 0;
}

Последний раз редактировалось Alexiski; 12.10.2018 в 16:51 Причина: Тэги кода
Ответить с цитированием
  (#2 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,283
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 12.10.2018, 19:36

Дублирование тем Вам не поможет.

Код слишком длинный, чтобы надеяться, что Вам его бесплатно будут комментировать.
К тому же одно дело - разъяснить неясные моменты, совсем другое - разжёвывать каждую строчку "с нуля"..

И куда делся человек, который написал Вам этот код?
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите понять можно ли воскресить HDD Ak47PROsecurity Накопители 10 26.06.2015 16:05
помогите пожалуйста понять в чем моя ошибка Anasteriya Visual Basic 3 13.01.2012 22:06
Чему равен угол, если два смежных с ним угла составляют в сумме заданное число градус Shhh Haskell 4 19.05.2011 20:20
Пожалуйста,помогите с решением логической задачи!Если можно,не используя спискт pavelr Prolog 10 11.03.2010 17:55
Помогите пожалуйста понять задачу. tmpghost С/С++ 14 20.05.2009 18:59
Помогите пожалуйста сделать так чтоб был интернет и на ПК и на ноутбук Maximka111 Сетевые подключения 2 29.04.2008 21:04
Чему равно k = ++m + ++m + ++m, если m=1 Evgueni С/С++ 29 12.01.2008 23:43
Что можно сделать, чтоб увеличить напряжение в сети питания? Mihan Техническая поддержка 11 10.05.2007 01:39
Можно ли сделать чтоб программу нельзя было запустить 2 раза vain Visual C++ 26 11.07.2006 15:56
Как можно сделать так чтоб отображалось только часть страниц Pytnik_ C++ Builder 1 11.04.2006 20:20
Как можно если можно в RicheEdit впихнуть изображение mefest C++ Builder 2 15.12.2004 00:52



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов