Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для Germanarih
3 / 3 / 0
Регистрация: 14.03.2011
Сообщений: 151

Вывести идентификатор работника, имя и среднемесячную зарплату для всех элементов списка

20.07.2013, 15:02. Показов 3647. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Есть такая задача:

Построить три класса (базовый и 2 наследника), которые описывают некоторых работников с почасовой оплатой (один из наследников) и фиксированной оплатой (второй наследник). Описать в базовом классе абстрактный метод для расчёта среднемесячной зарплаты работников. Для почасовой оплаты формула такая: 20.8*8*почасовую ставку, для работников с фиксированной зарплатой, среднемесячная зарплата равна фиксированной месячной оплате.
1) Упорядочить вся последовательность работников по уменьшению среднемесячного заработка. При совпадении зарплаты - упорядочить данные по имени в алфавитном порядке. Вывести идентификатор работника, имя и среднемесячную зарплату для всех элементов списка.
2) Вывести первые 5 имен из полученного выше списка (задача А).
3) Вывести последние 3 идентификатора работника из полученного выше списка (задача А).
4) Организовать запись и чтение коллекции в/из файла.
5) Организовать обработку некорректного формата входного файла.


Очень хотелось бы услышать мнение уже имеющих опыт в программировании, как правильнее было бы решить данную задачу.

Вот, что делал бы я:
Создать три класса - это понятно. Формула вычисления зарплаты реализуется в двух классах и потом работает через ссылку на базовый класс.
Далее в базовом классе должна быть коллекция объектов работников. В каждом объекте будет id работника, имя, зарплата.
Не совсем понятно, как проводить сортировку коллекции, если в ней содержатся объекты, а тем более по двум критериям (зарплата и (если она совпадает) имя по алфавиту).
Пункт 3 вытекает из предыдущего.
Запись и чтение коллекции планирую производить с помощью классов BinaryWriter и BinaryReader.
Что имеется в виду под некорректным форматом входного файла не совсем понимаю. Если имеется в виду, к примеру, что данные были записаны не в том порядке, в котором проходит чтение, то просто должно вылететь исключение и нужно его обработать. Так ли это?

Заранее благодарю за советы!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.07.2013, 15:02
Ответы с готовыми решениями:

Вывести среднюю и максимальную зарплату, и имя работника, получившего максимальную
Таблица сосотоит из трех столбцов: month, name и money. Надо вывести среднею зарплату, максимальную и имя работника, получившего макс....

Определить среднемесячную зарплату по отделу
всем привет.помогите решить задачу Известна заработная плата, полученная 10 сотрудниками отдела в течение года. Определить...

Для каждого работника определить, в какой из месяцев он получил наибольшую зарплату
8.13. Известна зарплата каждого из 12 работников фирмы за каждый месяц первого квартала: (Ниже тип табличка) Работники Месяц 1 2 3 ...

8
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
20.07.2013, 22:09
Не совсем понятно, как проводить сортировку коллекции, если в ней содержатся объекты, а тем более по двум критериям (зарплата и (если она совпадает) имя по алфавиту).
Для базового класса реализовать интерфейс IComparable или написать компаратор для этого класса.
Что имеется в виду под некорректным форматом входного файла
Думается проверка на расширение файла, отсутствие оного по заданному пути, пустоту самого файла.
1
 Аватар для Germanarih
3 / 3 / 0
Регистрация: 14.03.2011
Сообщений: 151
21.07.2013, 00:20  [ТС]
Цитата Сообщение от Kruds Посмотреть сообщение
Для базового класса реализовать интерфейс IComparable или написать компаратор для этого класса.
Думается проверка на расширение файла, отсутствие оного по заданному пути, пустоту самого файла.
Спасибо! Немного стало проясняться. Буду пробовать написать компаратор для этого класса...

Добавлено через 54 минуты
Цитата Сообщение от Kruds Посмотреть сообщение
Для базового класса реализовать интерфейс IComparable или написать компаратор для этого класса.
Думается проверка на расширение файла, отсутствие оного по заданному пути, пустоту самого файла.
Начал писать код и сразу возник такой вопрос:
Базовый класс является абстрактным, то есть экземпляр его мы создать не можем. Куда, тогда, поместить коллекцию (буду использовать ArrayList)? В один из классов-наследников?
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
21.07.2013, 11:13
Классы у вас обозначают конкретных работников, коллекция будет в клиентском коде, просто список List, массив, ну или чего вы там придумаете.
0
 Аватар для Germanarih
3 / 3 / 0
Регистрация: 14.03.2011
Сообщений: 151
21.07.2013, 12:53  [ТС]
Цитата Сообщение от Kruds Посмотреть сообщение
Классы у вас обозначают конкретных работников, коллекция будет в клиентском коде, просто список List, массив, ну или чего вы там придумаете.
И тогда компаратор нужно реализовать в обоих классах, отвечающих за работников и он будет автоматически срабатывать в клиентском коде при сортировке коллекции? Даже, если в одной коллекции у меня будут объекты разных классов?

Но, зачем тогда нужен базовый класс, если мы не собираемся использовать его ссылку для доступа к наследникам?
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
21.07.2013, 22:04
Вот пример чтобы было понятнее:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
abstract class Worker : IComparable
{
    protected int x;
 
    public Worker()
    {
        x = 10;
    }
    public abstract int Salary();
 
    public int CompareTo(object obj)
    {
        if (obj == null) return 1;
        Worker w = obj as Worker;
        if (w != null)
            return this.Salary().CompareTo(w.Salary());
        else
            throw new Exception("Obj is not a Worker!");
    }
}
 
class Worker1 : Worker
{
    public override int Salary()
    {
        return x * 10;
    }
}
 
class Worker2 : Worker
{
    public override int Salary()
    {
        return x * 100;
    }
}
static class Program
    {
        static void Main()
        {
            List<Worker> workers = new List<Worker>();
            workers.Add(new Worker1());
            workers.Add(new Worker2());
            workers.Add(new Worker1());
            workers.Sort();
        }
    }


Чтобы вызвать метод Sort для коллекци объектов, достаточно реализовать интерфейс IComparable для этих объектов. Но сортировать можно разными способами, по разным параметрам, для этого нужны компараторы которые передаются в метод Sort коллекции.
1
7 / 7 / 5
Регистрация: 06.10.2012
Сообщений: 140
22.07.2013, 01:34
код этой задачи на с++, может пригодиться
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>
using namespace std;
 
class Worker
{
  protected:
    string name;
    double salary;
    int ident;
  public:
    Worker(){};
    ~Worker(){};
 
    string getname() {return name;}
    double getsalary() {return salary;}
    virtual void calc()  {}      
    void out()
    {
        cout << name <<  " " << salary << " " << ident << endl;
    }
    void out_in_file()
    {
        ofstream write("E://write.txt", ios_base::app); 
        write << name <<  " " << salary << " " << ident << endl;
    } 
    void in()
    {       
    cout << "Enter name" << endl;
    getline(cin, name);
    cout << "Enter salary" << endl;
    cin >> this->salary; 
     cout << "Enter identification number" << endl;
    cin >> this->ident; 
    cin.ignore();
    }
 };
 
class salPerHour : public Worker
{
public:
    salPerHour(){};
    ~salPerHour(){};
 
    void calc()
    {
        this->salary = salary * 20.8 * 8;
    }
};
class salaryFixed : public Worker
{
    public:
    salaryFixed(){};
    ~salaryFixed(){};
   
    void calc()
    {
      this->salary = salary * 1;
    }
};
 
bool compare(Worker *w1, Worker *w2)  
{  
    if (w1->getsalary() == w2->getsalary())
        return w1->getname() < w2->getname();
    return w1->getsalary() > w2->getsalary();
}
 
void main()
{
   Worker *salaryPerHour[5];
   Worker *fixedSalary[5];
   Worker obj;
   int a, b;
   cout << "Enter data about workers with salary per hour " << endl;
   cout << "Enter number of workers : ";
   cin >> a;
   cin.ignore();
   for(int i = 0; i < a; i++)
   {
       salaryPerHour[i] = new salPerHour;
       salaryPerHour[i]->in();
       salaryPerHour[i]->calc();
   } 
 
   cout << "Enter data about workers with fixed salary " << endl;
   cout << "Enter number of workers : ";
   cin >> b;
   cin.ignore();
   for(int i = 0; i < b; i++)
   {
       fixedSalary[i] = new salaryFixed;
       fixedSalary[i]->in();
       fixedSalary[i]->calc();
   }
  
    sort(salaryPerHour, salaryPerHour + a, compare); 
    sort(fixedSalary, fixedSalary + b, compare); 
  
    for(int i = 0; i < a; i++)
    {
        salaryPerHour[i]->out();
        salaryPerHour[i]->out_in_file();
    }
     for(int i = 0; i < b; i++)
     {
        fixedSalary[i]->out();
        fixedSalary[i]->out_in_file();
     }
    cin.get();
    cin.get();
}
1
 Аватар для Germanarih
3 / 3 / 0
Регистрация: 14.03.2011
Сообщений: 151
22.07.2013, 22:05  [ТС]
Всем спасибо за полезную информацию!
0
0 / 0 / 1
Регистрация: 24.02.2012
Сообщений: 11
29.07.2015, 01:44
Up!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.07.2015, 01:44
Помогаю со студенческими работами здесь

Вывести зарплату работника цеха "Х"
в задании нужно сделать стуктуру с имени, названия цеха, кол исделей класса А, В, С, указать на стоимость каждого из класса и вывести...

Массивы: рассчитать зарплату работника
Уважаемые ГУРУ, дошел до массивов. Суть задачи такова: использовать одномерный массив, вводить валовую прибыль работников за неделю,...

Определить среднюю зарплату работника
Цех по ремонту бытовой техники имеет каждый день прибыль Р,с которой платит налог a%. с части прибыли, которая остается, b% идет на...

Для одноуровневого списка строк сформировать итоговую строку сцеплением всех элементов списка
Определить функцию, которая для одноуровневого списка строк формирует итоговую строку сцеплением всех элементов списка. Элементы в итоговой...

Расчитать зарплату госслужащего исходя из количества отработанных часов и почасовой ставки работника
Здравствуйте, ув. программисты. Наткнулся на задачу. Ниже условия: &quot;Необходимо расчитать зарплату госслужащего исходя из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru