-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMain.kt
104 lines (90 loc) · 3.25 KB
/
Main.kt
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
package com.app
import com.app.model.*
import java.time.*
import java.util.concurrent.*
/**
* Created by IntelliJ IDEA.<br>
* User: Alexey<br>
* Date: 25.03.2017<br>
* Time: 1:10<br>
* Версия с консольным интерфейсом
*/
object Main {
/**
* Точка входа в программу
*/
@JvmStatic
fun main(args: Array<String>) {
testWorker(SalaryType.Hour);
testWorker(SalaryType.Wage);
}
/**
* Сообщения о начале тестирования для каждого типа работников
*/
private val greets = mapOf(
SalaryType.Hour to "Тестирование работника с почасовой ставкой.",
SalaryType.Wage to "Тестирование работника с окладом."
)
/**
* Запросы значений для каждого типа работников
*/
private val ratePrompts = mapOf(
SalaryType.Hour to "Введите почасовую ставку: ",
SalaryType.Wage to "Введите оклад: "
)
/**
* Тестовые имена работников мужского пола
*/
private val testMaleNames = listOf("Александр", "Сергей", "Алексей", "Дмитрий", "Андрей")
/**
* Тестовые имена работников женского пола
*/
private val testFemaleNames = listOf("Елена", "Ольга", "Анна", "Ирина", "Мария")
/**
* Тестовые фамилии
*/
private val testSurnames = listOf("Иванов", "Смирнов", "Кузнецов", "Попов", "Соколов")
/**
* Чтение double с клавиатуры
*/
private fun readDouble(prompt: String): Double {
println(prompt)
var result: Double? = null
while (result == null)
try {
result = readLine()!!.toDouble()
} catch (e: Exception) {
println("Неправильный ввод!")
println(prompt)
}
return result
}
/**
* тест расчетов
*/
private fun testWorker(type: SalaryType) {
println(greets[type])
val rate = readDouble(ratePrompts[type] as String)
val workTime = readDouble("Введите количество отработанных часов: ")
var workTimeNorm = .0
if (type == SalaryType.Wage) {
workTimeNorm = readDouble("Введите норму рабочего времени: ")
}
val beginDate = LocalDate.of(2017, 1, 9)
val rnd = ThreadLocalRandom.current()
var name = ""
var surname = testSurnames[rnd.nextInt(4)]
if (rnd.nextBoolean()) {
name = testMaleNames[rnd.nextInt(4)]
} else {
name = testFemaleNames[rnd.nextInt(4)]
surname += "а"
}
try {
val worker = WorkerFactory.create(type, name, surname, beginDate, null, rate, workTime, workTimeNorm)
println("Зарплата: ${worker.getSalary()}")
} catch (ex: Exception) {
println(ex.message)
}
}
}