Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Гаряка Асмик
Статус: Специалист
Рейтинг: 4136
∙ повысить рейтинг »
lamed
Статус: Профессионал
Рейтинг: 2754
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2488
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / C/C++

Номер выпуска:1548
Дата выхода:07.06.2010, 20:00
Администратор рассылки:Verena, Профессионал
Подписчиков / экспертов:382 / 167
Вопросов / ответов:1 / 1
IRC-канал по теме:#C

Вопрос № 178811: Доброе утро уважаемые эксперты! Помогите пожалуйста! Есть массив структур workers, в котором состоит информация о работниках. Добавление и просмотр всех работников я реализовал, а вот удаление(увольнение - пункт 3 в меню) не могу.


Вопрос № 178811:

Доброе утро уважаемые эксперты! Помогите пожалуйста!
Есть массив структур workers, в котором состоит информация о работниках.
Добавление и просмотр всех работников я реализовал, а вот удаление(увольнение - пункт 3 в меню) не могу.
Здесь архив с проектом консольного приложения.
Помогите пожалуйста с оптимальным способом реализации увольнения. Если можно с описанием. Спасибо.

Отправлен: 02.06.2010, 09:16
Вопрос задал: Мироненко Николай Николаевич, Практикант
Всего ответов: 1
Страница вопроса »


Отвечает lamed, Профессионал :
Здравствуйте, Мироненко Николай Николаевич!
Code::Blocks/G++, поэтому есть некоторые отличия, в частности, закомментировал <conio>.
Если находим удаляемую запись, освобождаем память, занятую полями этой записи, после чего в цикле указатель "перебрасываем" на соответствующее поле следующей записи и так до конца массива. Удачи на сессии!

Код:
/*
ФІТБМК МПЗАС 3КС-071
Мироненко Микола Миколайович
СПЗ Лабораторна робота №1
Зкомпільовано в середовищі Borland C++ Builder 6.0
01.06.10
*/

#include <iostream>
////#include <conio>

using namespace std;

struct worker
{
char *name;
char *stage;
char *salary;
char *tel;
};

void Li ne(int length, int code)
{
for(int i = 0; i < length; i++)
{
cout << (char)code;
}
}

void Logo()
{
system("CLS");
cout << (char)201; Line(78, 205); cout << (char)187;
cout << (char)186; Line(17, 32); cout << " Workers // Laboratory work of #1 // ZKS-71 "; Line(17, 32); cout << (char)186;
cout << (char)200; Line(78, 205); cout << (char)188;
}

int main(int argc, char *argv[])
{
worker mas[10];
int numb = 0;
int choice = 0;

while(choice != 4)
{
Logo();
cout << endl;
cout << " Workers: " << numb << endl;
cout << " "; Line(14, 196);
cout << endl;
cout << " 1: New worker " << endl;
cout << " 2: View " << endl;
cout << " 3: Fire " << endl;
cout << " 4: Quit " << endl;
cout << " "; Line(14, 196);
cout << endl;
cout << " Mode: "; cin >> choice;
cout << endl;

switch(choice)
{
case 1:
{
while (choice != 2)
{
Logo();
cout << endl << " Registration of workers [worker #" << (numb + 1) << "]" << endl << endl;

mas[numb].name = new char[64];
cout << " Name of worker : ";
cin >> mas[numb].name;

mas[numb].stage = new char[2];
cout << " Stage(yrs) : ";
cin >> mas[numb].stage;

mas[numb].salary = new char[6];
cout & lt;< " Salary($) : ";
cin >> mas[numb].salary;

mas[numb].tel = new char[16];
cout << " Telephone : ";
cin >> mas[numb].tel;

numb++;

choice = 0;

Logo();
cout << endl << " " << numb << " worker(s) is registered! " << endl << endl;
cout << " "; Line(16, 196);
cout << endl;
cout << " To register yet? " << endl;
cout << " 1: yes " << endl;
cout << " 2: no" << endl;
cout << " "; Line(16, 196);
cout << endl;
cout << " Mode: "; cin >> choice;
}
} break;
case 2:
{
if (numb == 0) cout << " Unfortunately, not the alone from wo rkers is not registered!!! " << endl;
else
{
Logo();
cout << endl << " All registered worker(s): " << numb << endl << endl;
for(int i = 0; i < numb; i++)
{
cout << " "; Line(40, 196);
cout << endl;
cout << " Name : " << mas[i].name << endl;
cout << " Stage : " << mas[i].stage << " yrs " << endl;
cout << " Salary : " << mas[i].salary << " $ " << endl;
}
cout << " "; Line(40, 196);
}
//// cout << endl << " Press any key to continue... " << endl;
//// getch();
system("Pause");
} break;

case 3:
{
int firing_no;
cout << "firing no ";
cin >> firing_no;
if (firing_no < 1 || firing_no > numb)
{
cout << "Not found" << endl;
}
else
{
delete(mas[firing_no-1].name);
delete(mas[firing_no-1].stage);
delete(mas[firing_no-1].salary);
delete(mas[firing_no-1].tel);
for (int i=firing_no; i<numb; i++)
{
mas[i-1].name = mas[i].name;
mas[i-1].stage = mas[i].stage;
mas[i-1].salary = mas[i].salary;
mas[i-1].tel = mas[i].tel;
}
mas[numb ].name = NULL;
mas[numb].stage = NULL;
mas[numb].salary = NULL;
mas[numb].tel = NULL;
numb--;
}
}
}
}
return 0;
}


Ответ отправил: lamed, Профессионал
Ответ отправлен: 04.06.2010, 13:30
Номер ответа: 261871

Оценка ответа: 5
Комментарий к оценке:
Спасибо Вам большое :)

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261871 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.16 от 26.05.2010

    В избранное