tag:blogger.com,1999:blog-3723751624676923784.post1961995021399254312..comments2023-10-29T06:15:39.850-07:00Comments on IT Notes: Разбор тестового задания на C#kavayiihttp://www.blogger.com/profile/02542403208503982321noreply@blogger.comBlogger7125tag:blogger.com,1999:blog-3723751624676923784.post-51253110363249482242013-05-24T10:44:36.872-07:002013-05-24T10:44:36.872-07:00// Основная программа
class Program
{
... // Основная программа<br /> class Program<br /> {<br /> static int Main(string[] args)<br /> {<br /> Employee employee = new Employee();<br /> ReturnCodes returnCode = employee.Parse(args);<br /><br /> if (returnCode == ReturnCodes.OK)<br /> {<br /> Console.WriteLine(employee);<br /><br /> decimal bonus = employee.Bonus;<br /> int TaxRate = 0;<br /><br /> if (TaxGetter.PayTax(ref bonus, out TaxRate))<br /> Console.WriteLine("Включая налог: 13 %");<br /> else<br /> Console.WriteLine("Не включая налог: 13 %");<br /> }<br /> else<br /> {<br /> Console.WriteLine("Программа завершилась с ошибкой. Код ошибки: {0}", (int)returnCode);<br /> }<br /><br /> Console.ReadKey();<br /><br /> return (int)returnCode;<br /> }<br /> }<br />Anonymoushttps://www.blogger.com/profile/05333999527199282207noreply@blogger.comtag:blogger.com,1999:blog-3723751624676923784.post-23408523122064076292013-05-24T10:44:05.742-07:002013-05-24T10:44:05.742-07:00// Класс "Получатель налогов"
public... // Класс "Получатель налогов"<br /> public static class TaxGetter<br /> {<br /> // Константа "Налоговая ставка"<br /> const int taxrate = 13;<br /> // Константа "Порог налогообложения"<br /> const int maxvalue = 10;<br /><br /> // Функция, которая снимает % налога, если премия больше или равна порогу налогообложения<br /> public static bool PayTax(ref decimal bonus, out int TaxRate)<br /> {<br /> TaxRate = taxrate;<br /> <br /> if (bonus < maxvalue) return false;<br /><br /> bonus = decimal.Round(bonus * (100 - taxrate)/100, 2);<br /><br /> return true;<br /> }<br /> }<br />Anonymoushttps://www.blogger.com/profile/05333999527199282207noreply@blogger.comtag:blogger.com,1999:blog-3723751624676923784.post-52964579310650175552013-05-24T10:43:26.377-07:002013-05-24T10:43:26.377-07:00// Класс "Сотрудник"
public class Em... // Класс "Сотрудник"<br /> public class Employee<br /> {<br /> // Свойство "Имя сотрудника"<br /> public string Name { get; set; }<br /> // Свойство "Должность"<br /> public Ranks Rank { get; set; }<br /> // Свойство "Отдел"<br /> public Departments Department { get; set; }<br /><br /> // Свойство "Зарплата"<br /> public int Salary { get; set; }<br /> // Свойство "Процент премии"<br /> public byte SalaryPercent { get; set; }<br /> // Свойство "Поправочный коэффициент"<br /> public double Coefficient { get; set; }<br /> // Свойство "Бонус"<br /> public decimal Bonus<br /> {<br /> // Значения свойства вычисляется по формуле<br /> get<br /> {<br /> return decimal.Round((decimal)Salary * (decimal)SalaryPercent * (decimal)Coefficient / 100, 2);<br /> }<br /><br /> // Значение свойства нельзя установить напрямую<br /> protected set<br /> {<br /><br /> }<br /> }<br /><br /> // Конструктор<br /> public Employee()<br /> {<br /> // Значения по умолчанию<br /> Salary = 500;<br /> SalaryPercent = 10;<br /> Coefficient = 0.96;<br /> }<br /><br /> // Процедура инициализации свойств объекта из массива строк<br /> public ReturnCodes Parse(string[] args)<br /> {<br /> // Количество аргументов (по заданию не превышает четырех)<br /> byte argsCount = unchecked((byte)args.Count());<br /> <br /> // Первый аргумент обязательный<br /> if (argsCount < 1) return ReturnCodes.MissedArgument;<br /><br /> // В первом аргументе должно быть не менее 4 символов (1-Отдел, 2-Должность, 3-Запятая, 4-Имя)<br /> if (args[0].Length < 4) return ReturnCodes.InvalidArgument;<br /> <br /> // Проверка на запятую<br /> if (args[0].Substring(2, 1) != ",") return ReturnCodes.InvalidArgument;<br /><br /> // Получение отдела<br /> int department;<br /> if (!int.TryParse(args[0].Substring(0, 1), out department)) return ReturnCodes.InvalidArgument;<br /> if (!Enum.IsDefined(typeof(Departments), department)) return ReturnCodes.CantFindDept;<br /> this.Department = (Departments)department;<br /><br /> // Получение должности<br /> int rank;<br /> if (!int.TryParse(args[0].Substring(1, 1), out rank)) return ReturnCodes.InvalidArgument;<br /> if (!Enum.IsDefined(typeof(Ranks), rank)) return ReturnCodes.CantFindRank;<br /> this.Rank = (Ranks)rank;<br /><br /> // Получение имени<br /> this.Name = args[0].Substring(3);<br /><br /> // Получение з/п<br /> if (argsCount > 1)<br /> {<br /> int salary;<br /> if (!int.TryParse(args[1], out salary)) return ReturnCodes.InvalidArgument;<br /> this.Salary = salary;<br /> }<br /><br /> // Получение %<br /> if (argsCount > 2)<br /> {<br /> byte salaryPercent;<br /> if (!byte.TryParse(args[2], out salaryPercent)) return ReturnCodes.InvalidArgument;<br /> this.SalaryPercent = salaryPercent;<br /> }<br /><br /> // Получение поправочного коэффициента<br /> if (argsCount > 3)<br /> {<br /> double coefficient;<br /> if (!double.TryParse(args[3], out coefficient)) return ReturnCodes.InvalidArgument;<br /> this.Coefficient = coefficient;<br /> }<br /><br /> return ReturnCodes.OK;<br /> }<br /><br /> // Процедура вывода информации о сотруднике<br /> public override string ToString()<br /> {<br /> return "Сотрудник: " + Name.ToUpper()<br /> + "\nДолжность: " + Rank<br /> + "\nОтдел: " + Department<br /> + "\nПремия: " + Bonus;<br /> }<br /> }<br />Anonymoushttps://www.blogger.com/profile/05333999527199282207noreply@blogger.comtag:blogger.com,1999:blog-3723751624676923784.post-66727940112294689582013-05-24T10:42:52.359-07:002013-05-24T10:42:52.359-07:00Вот моя версия, когда делал авторскую не смотрел, ...Вот моя версия, когда делал авторскую не смотрел, только потом сравнил, где-то подход совпадал, где-то нет.<br /><br /> // Перечисление "Возвращаемые коды"<br /> public enum ReturnCodes<br /> {<br /> OK = 0,<br /> MissedArgument = -1,<br /> CantFindDept = -2,<br /> CantFindRank = -3,<br /> InvalidArgument = -4<br /> }<br /><br /> // Перечисление "Отделы"<br /> public enum Departments<br /> {<br /> RD = 0, //Отдел разработок <br /> QA, //Отдел тестирования <br /> Support, //Отдел технической поддержки <br /> Sales, //Отдел продаж <br /> Marketing, //Отдел маркетинга <br /> }<br /><br /> // Перечисление "Должности"<br /> public enum Ranks<br /> {<br /> Employee = 0,<br /> Lead,<br /> Manager,<br /> Director<br /> }<br />Anonymoushttps://www.blogger.com/profile/05333999527199282207noreply@blogger.comtag:blogger.com,1999:blog-3723751624676923784.post-40866764842378459022013-05-24T10:37:12.217-07:002013-05-24T10:37:12.217-07:00bonus = (decimal)((salary * percentOfSalary / 100)...bonus = (decimal)((salary * percentOfSalary / 100) * correctionFactor); - есть риск, что будет переполнение при вычислении выражения "salary * percentOfSalary", int * byte -> int, если исходный int был большим, то в итоговый произведение не поместится.Anonymoushttps://www.blogger.com/profile/05333999527199282207noreply@blogger.comtag:blogger.com,1999:blog-3723751624676923784.post-16086289849203082002013-05-24T09:45:35.577-07:002013-05-24T09:45:35.577-07:00Не нашел в задании о том какой код должна вернуть ...Не нашел в задании о том какой код должна вернуть программа, если формат аргументов неверный. Например в первом аргументе не запятая, а точка или вообще одно слово, а также если аргументы-цифры не могут быть "отпарсены". В общем, отойду немного от задания и создам еще один возвращаемый код.Anonymoushttps://www.blogger.com/profile/05333999527199282207noreply@blogger.comtag:blogger.com,1999:blog-3723751624676923784.post-34056139248099735792013-05-24T09:41:34.916-07:002013-05-24T09:41:34.916-07:00"...C суммы премии большей чем 10..."
на..."...C суммы премии большей чем 10..."<br />наверное правильно так: "... С суммы большей или равной 10...", потому что ниже идет "В случае же если премия составила < 10 и налог не взимался "Не включая налог: 13%"Anonymoushttps://www.blogger.com/profile/05333999527199282207noreply@blogger.com