Loading...
dimitarnik avatar dimitarnik 93 Точки

[Homework] C# Basics - Primitive Data Types and Variables - Problem {10} Employee Data

Здравейте,

реших малко да си поиграя с тази задача и да направя нещо като програмка за въвеждане на данни. Ако някой има идеи за оптимизация или други по-интересни функции, ще съм му благодарен да ги сподели. Дано съм помогнал на някого поне малко.

 

Problem10.EmployeeData

 

 


СофтУни Онлайн Студенти

5
Programming Basics 02/02/2015 15:10:39
RoYaL avatar RoYaL Trainer 6849 Точки

Ами моите съвети за оптимизация биха били:

- Вместо лист - дикшънъри (или дикшънъри от дикшънърита, ако ще нест-ваш). За да имаш и асоциативни ключове. Да, в твоят случай можеш с цикъл да извъртиш целия лист и да изпринтиш всичко, но освен технически по-лесно, не е никак по-лесно по друг начин (например myEmployee[4] не значи нищо за програмиста, докато myEmployee["IDNumber"] значи)

- Да изнесеш операциите за всичко това в методи т.е. методи които проверят дали всичко е в рамки, и методи, които инициализират листа/хештейбъла/дикшънърито

- За да е валиден обджект наистина, не прави всичките операции в Main-а, а във валидни non-static методи извън него, изкарай myEmployee като пропърти на класа. Направи си един self object, от който можеш да аксесваш non static fields/methods (понеже в Main-а по друг начин ще ти е трудно да извикаш метод, който не е статичен, или пропърти, което не е статично)

така примерно ако имаш

public void setIDnum(int id)

{

    this.myEmployee.Add("ID", id);

}

 

ще можеш инициализирайки обекта (примерно от друг клас) да викаш setIDnum() което в стейта на обджекта ще промени (в случая добави) ключ ID на пропъртито myEmployee със съответното ИД.

Това, което ще постигнеш, естествено е само упражнение и за такава задача, няма нужда да се прави, но практически е следното:

Обекта ти емплойи си има свое API, което позволява на външни хора да добавят ид, пол и т.н., но не позволява да променят ключовете на пропъртито.

така при (class Employee с public конструктор Employee()):

private Dictionary<string, int> _myEmployee = new Dictionary<string, int>();

public void setId(int id)

{

    this._myEmployee.Add("ID", id);

}

 

ако отвън направиш

Employee myEmployeeObject = new Employee();

myEmployeeObject.setId(5);

 

ще добави ID => 5, но няма да позволи да направиш:

myEmployeeObject._myEmployee.Add("sex", 1);

 

заради достъпността на полето

1
vvulevv avatar vvulevv 51 Точки

А дали може да дадете някакво по-елементарно решение на задачата?

0
TsvetinaKoleva avatar TsvetinaKoleva 92 Точки

Браво, че сте задълбочили в задачата, въпреки че не е задължително. И благодаря за варианта, беше ми полезен.

vvulevv, Ето вариант за решение на задачата по най-опростения начин :)

 


Console.Write("Enter First name: ");
string firstName=Console.ReadLine();

Console.Write("Enter Last name: ");
string lastName = Console.ReadLine();

Console.Write("Enter Age: ");
byte age = byte.Parse(Console.ReadLine());

Console.Write("Enter Gender (m or f): ");
string gender = Console.ReadLine();

Console.Write("Enter Personal ID number: ");
string personalID = Console.ReadLine();

Console.Write("Enter Employee Unique number (2756****): ");
uint uniqueNumber = uint.Parse(Console.ReadLine());

 

Console.WriteLine("\n \nEmployee Data: \n"
+ "First name: {0} \n"
+ "Last name: {1} \n"
+ "Age: {2} \n"
+ "Gender: {3} \n"
+ "Personal ID number: {4} \n"
+ "Unique Enmployee number: {5}",
firstName, lastName, age, gender, personalID, uniqueNumber);

3
RoYaL avatar RoYaL Trainer 6849 Точки

Ами най-елементарното, което е максимално straightforward, би трябвало да е:

- Промпт за въвеждане преди всяка променлива (Console.WriteLine("Write name/number/etc...");

- Присвояване на стойност към написания ред от конзолата към променлива (пр. String firstName = Console.ReadLine();)

- В края на изпълнението се извеждат всички инпути (Console.WriteLine(firstName);)

 

Това разбира се изключва всички варианти за хващане на неправилен вход, и неговото handle-ване (например въведен стринг в int поле ще прекрати зипълнението на програмата)

0
dimitarnik avatar dimitarnik 93 Точки

Това ми беше целта, да науча нови неща, Dictionary<> до сега не бях ползвал, сега ще го поразцъкам!

Благодаря!

0
kvalkov avatar kvalkov 5 Точки

Добро решение на проблема...

0
ivailov94 avatar ivailov94 0 Точки

using System;
class EmployeeData          \\Дано ти помогна ,че и аз съм доста....:):):) зле засега де :)
{
     static void Main()
     {
         string firstName = ("Johny");
         string lastName = ("English");
         Console.WriteLine("Johny"+" "+"English:",lastName,firstName);
         int age = 27;
         Console.Write(" {0}",age );
         Console.WriteLine("  years old");
         string gender=("Male");
         Console.Write("Gender:");
         Console.WriteLine("  Male",gender);
         Int64 id = 8306112507;
         Console.WriteLine("His Personal ID number is: ");
         Console.WriteLine(" 8306112507",id);
         long empnum = 2756000027569999;
         Console.WriteLine("His Unique employee number is: ");
         Console.WriteLine(" 2756000027569999");
         Console.WriteLine();
      }
    
}

 

0
Diana avatar Diana 1 Точки

Здравей @Tsvetina,

Прегледах твоето решение на задачата и ми се стори интересно. Можеш ли да ми дадеш малко повече информация за какво служат плюсоветем в края на решението?

Т.е каква е разликата в сравнение с: "Employee Data: \n First name: {0} \n Last name: {1}....." и т.н?

Благодаря!

0
dngeorgiev avatar dngeorgiev 0 Точки

Здравей, @Diana!

Плюсовете служат за конкатенация на стринговете. И в случая, служат навярно за по-добра четимост на кода (разделяне на няколко реда). Разлика в изпълнението не съм сигурен, че има (някой от по-горните нива може да се изрази тук), но вършат една и същата работа. Просто "долепя" отделните части една до друга и в крайна сметка резултатът е абсолютно същият, както би бил от това, което ти си написала.

Надявам се да бях изчерпателен и полезен, разбира се.

Поздрави, Дани!

0
29/12/2015 11:33:51
Diana avatar Diana 1 Точки

Благодаря, Дани, определено ми беше полезен. :)

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.