0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 19
1

Разработать программу для учета сотрудников с использованием средств ООП

10.06.2015, 23:03. Показов 17047. Ответов 11
Метки нет (Все метки)

Всем привет от новичка.
Мне отправили 2 тестовых задания по вакансии стажер-программист C#. 1-е я сделал консольное, но без применения ООП.
Задание 2
Необходимо разработать программу для учета сотрудников с использованием средств ООП.
Программа должна реализовать следующие функции:
 отображение списка сотрудников;
 прием на работу нового сотрудника:
 увольнение сотрудника;
 поиск сотрудника по имени;
 отображение статистики (кол-во сотрудников, средняя зарплата и т.д.)
Вопрос: как сделать эту задачу с применением ООП?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2015, 23:03
Ответы с готовыми решениями:

Написать программу для учета сведений о командировках сотрудников предприятия
Написать программу для учета сведений о командировках сотрудников предприятия. Каждая запись...

Файлы: Написать программу для учёта сведений об отпусках сотрудников предприятия
Написать программу для учёта сведений бо сотрудников предприятия. Каждая запись содержит поля -...

Разработать ПО для управления справочником с использованием ООП
Здравствуйте. Ребят пожалуйста, конечно если возможно то просто ссылки накидайте на сопутствующую...

Разработать консольное дополнение для работников кинотеатра с использованием принципов ООП
Кто может сделать? Разработать консольное дополнение для работников кинотеатра с использованием...

11
284 / 264 / 173
Регистрация: 27.07.2014
Сообщений: 584
11.06.2015, 11:05 2
Лучший ответ Сообщение было отмечено rusanov-eduard как решение

Решение

Создаете класс Сотрудник, в нем описываете поля , также создаете список, где будете хранить всех своих сотрудников, а также пишете методы указанные в условии
1
0 / 0 / 0
Регистрация: 14.06.2015
Сообщений: 3
14.06.2015, 15:31 3
Решил попробовать свои силы, вышло так:

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
 
 class Employee
    {
        static int totalEmployees;
 
        static List<Employee> employees = new List<Employee>();
 
        string firstName;
        string lastName;
        int salary;
 
        Employee(string FN, string LN, int salary)
        {
            firstName = FN;
            lastName = LN;
            this.salary = salary;
            totalEmployees++;
        }
 
        public static void PrintEmployeeList()
        {
            if (employees.Count < 1)
            {
                Console.WriteLine("There is no employees");
                return;
            }
            foreach (Employee e in employees)
                Console.WriteLine("{0} {1}", e.firstName, e.lastName);
        }
 
        public static void PrintStatistic()
        {
            if (employees.Count < 1)
            {
                Console.WriteLine("There is no employees");
                return;
            }
 
            int totalSalary = 0;
 
            foreach (Employee e in employees)
                totalSalary += e.salary;
 
            float averageSalary = (float)totalSalary / totalEmployees;
 
            Console.WriteLine("Total Employees: {0}\nAverage Salary: {1}", totalEmployees, averageSalary);
        }
 
        public static void HireEmployee(string FN, string LN, int salary)
        {
            employees.Add(new Employee(FN, LN, salary));
        }
 
        public static void FireEmployee()
        {
            for(int i=0; i < employees.Count; i++)
            {
                Console.WriteLine("{0} - {1} {2}", i, employees[i].firstName, employees[i].lastName);
            }
            int x;
            try
            {
                x = Int16.Parse(Console.ReadLine());
 
                employees.RemoveAt(x);
                totalEmployees--;
            }
            catch ( FormatException ex){
                Console.WriteLine("\n" + ex.Message + "\n");
            }
        }
 
        public static void FindByName()
        {
            string name = null;
            List<Employee> emp = new List<Employee>();
            try
            {
                name = Console.ReadLine();
 
                foreach (Employee e in employees)
                    if (e.firstName.Contains(name) || e.lastName.Contains(name))
                    {
                        emp.Add(e);
                    }
 
                foreach (Employee e in emp)
                    Console.WriteLine("{0} {1} salary: {2}", e.firstName, e.lastName, e.salary);
                
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        
    }
0
.NET C#,ASP.NET MVC
Эксперт .NET
592 / 503 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
14.06.2015, 23:26 4
Нет нет нет и еще раз нет! Не нжно сувать все в одно! У вас класс сотрудник содержит спиоск тех же сотрудников... Если так хочется определите отдельно класс сотрудник, класс фирма, фирма в свою очередь будет содержать список сотрудников и содержать методы приема увольнения и тд.
0
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 19
15.06.2015, 00:53  [ТС] 5
создал список
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _2project
{
    class Spisok
   {
 
        public struct Records
        {
            public int id;
            public string Fam;
            public string Name;
            public string S_name;
            public string S_d;
            public int Sal;
        }
 
        public static List<Records> lines = new List<Records>();
        public static int id = 1;
 
        public Spisok() {}
 
        public List<string> getTableHead()
        {
            List <string> head = new List<string>();
 
            head.Add("Фамилия");
            head.Add("Имя");
            head.Add("Отчество");
            head.Add("Должность");
            head.Add("Зарплата");
            return head;
        }
 
        public int delPerson(int id)
        {
            lines.RemoveAt(id);
            return 0;
        }
 
        public int addPerson(Records p_rec)
        {
            Records rec = new Records();
            rec.id = id++;
            rec.Name = p_rec.Name;
            rec.Fam = p_rec.Fam;
            rec.S_name = p_rec.S_name;
            rec.S_d = p_rec.S_d;
            rec.Sal = p_rec.Sal;
            lines.Add(rec);
            return 0;
        }
 
        public List<Records> getPersons()
        {
            return lines;
        }
 
        public int getRecords()
        {
            return lines.Count;
        }
 
    }
}
как его теперь отобразить в dataGridView1 ?
0
Эксперт .NET
5853 / 4730 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
15.06.2015, 01:12 6
Для полей структуры Records (для тех которые нужно отображать в гриде) нужно сделать открытые свойства.
Затем свойству DataSourse грида присваиваете свой список.
0
.NET C#,ASP.NET MVC
Эксперт .NET
592 / 503 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
15.06.2015, 08:52 7
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
class Employee
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Salary { get; set; }
 
        public Employee(string firstName, string lastName, int salary)
        {
            this.FirstName = firstName;
            this.LastName = lastName;
            this.Salary = salary;
        }
 
        public override string ToString()
        {
            return String.Format("Fitst Name: {0}. Last Name: {1}. Salary: {2}", FirstName, LastName, Salary);
        }
    }
 
    class Company
    {
        public List<Employee> Employees { get; set; }
 
        public void RecruitEmployee(string fisrtName, string lastName, int salary)
        {
            Employees.Add(new Employee(fisrtName, lastName, salary));
        }
 
        public void RecruitEmployee(Employee employee)
        {
            Employees.Add(employee);
        }
 
        public void FireEmployee(string fisrtName, string lastName)
        {
            var employee = Employees.Find(e => e.FirstName.Equals(fisrtName) && e.LastName.Equals(lastName));
            if (employee != null)
            {
                Employees.Remove(employee);
            }
            
        }
 
        public string PrintEmployeesList()
        {
            return Employees.Aggregate("", (current, item) => current + item.ToString() + "\n");
        }
 
        public int GetAverageSalary()
        {
            return Employees.Sum(e => e.Salary)/Employees.Count;
        }
    }
1
0 / 0 / 0
Регистрация: 14.06.2015
Сообщений: 3
15.06.2015, 13:30 8
Я нуб и впервые сталкиваюсь с List<>.Aggregate, List<>.Find и List<>.Sum), не понятно как они работает, хотел попробовать, но
PrintEmployeesList() и GetAverageSalary() ничего не выводят на экран.

Возможно я что-то не так делаю:
C#
1
2
3
4
5
6
7
8
static void Main(string[] args)
{
       Company c1 = new Company();              
       c1.Employees = new List<Employee>();  //без этой строки вылетает unhandled exception
       c1.RecruitEmployee(new Employee("firstname", "lastname", 1000));
       c1.PrintEmployeesList();
       c1.GetAverageSalary();
}
Так же я не понимаю зачем давать возможность создавать объекты класса Company, не разумнее ли сделать его синглтоном(или как там это называется)?
0
.NET C#,ASP.NET MVC
Эксперт .NET
592 / 503 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
15.06.2015, 15:54 9
Цитата Сообщение от Jamille Посмотреть сообщение
PrintEmployeesList() и GetAverageSalary() ничего не выводят на экран.
Функции возвращают значения, кода вывода на экран у вас нету.
К примеру
C#
1
2
Console.WriteLine(c1.PrintEmployeesList());
Console.WriteLine(c1.GetAverageSalary());
Цитата Сообщение от Jamille Посмотреть сообщение
c1.Employees = new List<Employee>(); *//без этой строки вылетает unhandled exception
Код условный, писал на ходу. Здесь инициализурется список сотрудников. Это можно запихнуть в конструктор Company
C#
1
2
3
4
public Company()
{
       Employees = new List<Employee>();
}
Цитата Сообщение от Jamille Посмотреть сообщение
Так же я не понимаю зачем давать возможность создавать объекты класса Company, не разумнее ли сделать его синглтоном(или как там это называется)?
На вкус и цвет... В данном случае я не вижу смысла использовать паттерн синглтон. Будет учитывать то что компаний может быть несколько разных;

C#
1
2
Company microsoft = new Company();
Company google = new Company();
и т.д
1
0 / 0 / 0
Регистрация: 14.06.2015
Сообщений: 3
15.06.2015, 16:30 10
Цитата Сообщение от lvlkoo Посмотреть сообщение
Функции возвращают значения, кода вывода на экран у вас нету.
К примеру
C#
1
2
Console.WriteLine(c1.PrintEmployeesList());
Console.WriteLine(c1.GetAverageSalary());
Я не догадался вывести результат функции на экран думал она все за меня сделает. ^_^
Цитата Сообщение от lvlkoo Посмотреть сообщение
На вкус и цвет... В данном случае я не вижу смысла использовать паттерн синглтон. Будет учитывать то что компаний может быть несколько разных;
Тут дело не во вкусе и цвете, а в моей неопытности уже много месяцев не могу освоить ООП как надо. В любом случае спасибо за наставления ^_^


PS Извиняюсь что запрыгнул на чужую тему со своей неграмотностью
0
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 19
15.06.2015, 19:01  [ТС] 11
Вот что получилось
Список
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _2project
{
    class Spisok
   {
        public struct Sotrudnik
        {
            public int id;
            public string Fam;
            public string Name;
            public string S_name;
            public string S_d;
            public int Sal;
        }
 
        public static List<Sotrudnik> lines = new List<Sotrudnik>();
        public static int id = 1;
 
        public List<string> getTable()
        {
            List <string> head = new List<string>();
            head.Add("Фамилия");
            head.Add("Имя");
            head.Add("Отчество");
            head.Add("Должность");
            head.Add("Зарплата");
            return head;
        }
 
        public int delMass(int id)
        {
            lines.RemoveAt(id);
            return 0;
        }
 
        public int addMass(Sotrudnik p_rec)
        {
            Sotrudnik rec = new Sotrudnik();
            rec.id = id++;
            rec.Name = p_rec.Name;
            rec.Fam = p_rec.Fam;
            rec.S_name = p_rec.S_name;
            rec.S_d = p_rec.S_d;
            rec.Sal = p_rec.Sal;
            lines.Add(rec);
            return 0;
        }
 
        public List<Sotrudnik> getMass()
        {
            return lines;
        }
 
        public int getSotr()
        {
            return lines.Count;
        }
 
    }
}
Работа со списком
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
 
namespace _2project
{
    public partial class Form1 : Form
    {
        String a, b, c;         
        
        private Spisok cont = new Spisok();
        public Form1()
        {
            InitializeComponent();
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
 
            Spisok.Sotrudnik rec = new Spisok.Sotrudnik();
            rec.Name = "Арина";
            rec.Fam = "Милеева";
            rec.S_name = "Александровна";
            rec.S_d = "директор";
            rec.Sal = 200000;
            cont.addMass(rec);
            this.VivodTable();
 
        }
 
       private int Poisk(string find_str)
        {
            if (find_str == "") 
            {
                MessageBox.Show("Введите имя сотрудника", "Ошибка");
                return 0;
            }
            List<string> Head = this.cont.getTable();
            List<Spisok.Sotrudnik> Persons = this.cont.getMass();
            int rec_count = this.cont.getSotr();
            dataGridView1.RowCount = Persons.Count + 1;
            dataGridView1.ColumnCount = 5;
            
 
            int i, j;
 
            for (j = 0; j < 5; ++j)
                dataGridView1.Rows[0].Cells[j].Value = Head[j];
 
            i = 1;
            int find_i = 1;
            float count_s = 0;
            if (rec_count > 0)
            {
                foreach (Spisok.Sotrudnik person in Persons)
                {
                    
                    if (person.Name == find_str)
                    {
                        dataGridView1.Rows[i].Cells[1].Value = person.Name;                        
                        i++;
                        dataGridView1.Rows[find_i].DefaultCellStyle.BackColor = Color.LightCoral;
                    }
                    find_i++;
                }
            }
            int sotr = i - 1;
            a = "Количество сотрудников : " + sotr.ToString();
            b = "Общая зарплата : " + count_s.ToString();
            if (sotr > 0) c = "Средняя зарплата : " + (count_s / sotr).ToString();
            return 0;
        }
 
        private void VivodTable()
        {
            List<string> Head = this.cont.getTable();
            List<Spisok.Sotrudnik> Persons = this.cont.getMass();
            int rec_count = this.cont.getSotr();
            dataGridView1.RowCount = Persons.Count + 1;
            dataGridView1.ColumnCount = 5;
 
            int i, j;
 
            for (j = 0; j < 5; ++j)
                dataGridView1.Rows[0].Cells[j].Value = Head[j];
 
            i = 1;
            float count_s = 0;
            if (rec_count > 0)
            {
                foreach (Spisok.Sotrudnik person in Persons)
                {
                    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.White;
                    dataGridView1.Rows[i].Cells[0].Value = person.Fam;
                    dataGridView1.Rows[i].Cells[1].Value = person.Name;
                    dataGridView1.Rows[i].Cells[2].Value = person.S_name;
                    dataGridView1.Rows[i].Cells[3].Value = person.S_d;
                    dataGridView1.Rows[i].Cells[4].Value = person.Sal.ToString();
                    i++;
                    count_s = count_s + person.Sal;
                    
                }
            }
            int sotr = i-1;
            a = "Количество сотрудников : " + sotr.ToString();
            b = "Общая зарплата : " + count_s.ToString();
            if (sotr>0) c = "Средняя зарплата : " + (count_s / sotr).ToString();
        }
 
        public void refreshTable()
        {
            this.VivodTable();
        }      
 
          
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void label1_Click(object sender, EventArgs e)
        {
 
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
                refreshTable();
                //Создаем объект формы 2
                Form2 fr2 = new Form2();
                //Передаем данные через свойство
                fr2.TextForm = a;
                fr2.TextForm1 = b;
                fr2.TextForm2 = c;
                //Показываем форму
                fr2.Show();
            
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
 
            Spisok cont = new Spisok();
            Spisok.Sotrudnik rec = new Spisok.Sotrudnik();   
 
            rec.Name = textBox6.Text;
            rec.Fam = textBox5.Text;
            rec.S_name = textBox4.Text;
            rec.S_d = textBox3.Text;
            rec.Sal = Convert.ToInt32(textBox2.Text);
            cont.addMass(rec);           
            refreshTable();
            textBox6.Clear();
            textBox5.Clear();
            textBox4.Clear();
            textBox3.Clear();
            textBox2.Clear();
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            this.Poisk(textBox1.Text);
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            int index = dataGridView1.CurrentRow.Index - 1;
            if (index > 0) this.cont.delMass(index);
            this.VivodTable();
        }        
    }
}
форма статистика
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace _2project
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
 
        public string TextForm
        {
            get { return label1.Text; }
            set { label1.Text = value; }
        }
        public string TextForm1
        {
            get { return label2.Text; }
            set { label2.Text = value; }
        }
        public string TextForm2
        {
            get { return label3.Text; }
            set { label3.Text = value; }
        }
        private void Form2_Load(object sender, EventArgs e)
        {
 
        }
 
        private void label1_Click(object sender, EventArgs e)
        {
 
        }
    }
}
Подскажите косяки в коде пожалуйста
0
0 / 0 / 0
Регистрация: 11.04.2022
Сообщений: 1
15.04.2022, 08:22 12
скиньте файл
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2022, 08:22
Помогаю со студенческими работами здесь

Создать программу учета сотрудников.
Лабораторная работа по теме структуры Создать программу учета сотрудников. О сотруднике...

Разработать программу для расчета отношения величины средней зарплаты сотрудников фирмы
Разработать программу для расчета отношения величины средней зарплаты сотрудников фирмы к...

Программа для учета продаж транспортных средств
нужно написать программу для учета продаж транспортных средств на visual basic. Помогите пожалуйста.

Разработать программу «Система учета работников предприятия»; разработать собственный тип «Работник»
Всем привет. Есть задача: Разработать программу «Система учета работников предприятия»....


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru