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
GoShow avatar GoShow 595 Точки

Готино си го измислил с всички try catch блокове.Аз бих те посъветвал да извадиш Systen.Threading - в началото на програмата, вместо да го пишеш на всеки ред и вместо толкова редове ConsoleWrite(".") можеш да им врътнеш един for цикъл и ще стане на 3 реда.На пръв поглед е това :)

2
ViValDam avatar ViValDam 15 Точки

На това ниво няма нужда от толкова сложни неща , но за теб е отлично упражнение , браво !

1
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
GogoK avatar GogoK 80 Точки

Здравейте,
Има ли някакъв семпъл начин, с който при въвеждането, например: "Enther first name: ", ако не отговаря на проверка да се връща пак, докато издържи проверката. Ето ми го кода, не съм вкарвал проверки, заради това което питам. Благодаря!

2
Filkolev avatar Filkolev 4482 Точки

За числа или други типове (например дати), прочети за метода TryParse(). Може да го ползваш в комбинация с цикъл и да искаш вход от потребителя докато парсването не е успешно, като може да добавиш и други условия, примерно числото да е между 0 и 100.

За по-сложни проверки, например дали даден стринг отговаря на някакви условия, трябва в общия случай да се ползват регулярни изрази, за които е малко рано в подготвителното ниво.

2
GogoK avatar GogoK 80 Точки

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

 

пп. ахааа, чак от 3-то четене те разбрах, какво ми казваш. Грашката е моя сори :)

Благодаря ще се пробвам.

0
29/01/2015 00:49:12
Filkolev avatar Filkolev 4482 Точки

TryParse е метод, който връща булева стойност - дали парсването е успешно или не, едновременно с това записва резултата от парсването в посочената променлива след ключовата дума out.

Може да го използваш като в while цикъл кажеш "докато парсването не е успешно" и да искаш наново вход. Ползвал съм го доста пъти и съм чел коментари, че е удачен, т.е. работи бързо.

Виждам, че бързо се ориентираш, така че няма да ти поствам готов код, ако имаш затруднения питай. 

Но пак уточнение - това ще сработи за проверки на типове, които се парсват - числа, дати. Ако искаш да провериш дали даден стринг започва с главна буква, след това има само малки букви и е с  обща дължина между 2 и 20 символа да речем - има начин, но с техники за малко по-напреднали.

0
AntonPortenov avatar AntonPortenov 102 Точки

Здравейте,

имам питане относно Threading.Thread.Sleep метода.

Има ли подобна алтернатива при принтирането на конзолата?

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

 

мерси

 

0
AntonPortenov avatar AntonPortenov 102 Точки

Намерих това, което исках.

Предлагам решението си. Ще се радвам да чуя вашите коментари по кода.

Поздрави

http://pastebin.com/nD4U835E

 

1
alex.mitev avatar alex.mitev 20 Точки

Не го пробвах, но не следва ли stringa da go napravish na string array i товава да изреждаш елементите?

 

 

0
AntonPortenov avatar AntonPortenov 102 Точки

Не съм се замислял. Може би това, което казваш е правилния начин, но не съм запознат с placeholders в array и затова го оставих така.

0
ioanna.konova avatar ioanna.konova 47 Точки

Ето и моето извратено решение на задача 10 с бегли опити за проверки - http://pastebin.com/tF74XCXw laugh

Благодарна съм на всякакви критики, мнения и т.н.smiley

0
raging avatar raging 92 Точки

Никъде не брейкваш while циклите :)

1
ioanna.konova avatar ioanna.konova 47 Точки

А какво означава това и защо трябва да се използва, ако ти се обяснява, де?smiley

0
raging avatar raging 92 Точки

С две думи - програмата ти няма да има край , ще се изпълнява до безкрая  + че тия 3 вложени цикъла няма смисъл от тях :)
http://www.dotnetperls.com/while прочети това и ще ти стане по - ясно

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