Loading...
Dominik avatar Dominik 82 Точки

Задача 11 Employee Data

Здравейте колеги,

Бихте ли ми казали къде бъркам за да ми хвърля FormatException? Ето го и кода:

string FirstName = "John";
        string LastName = "Smith";
        byte Age = 18;
        string Gender = "male";
        long PersonIDNumber = 8306112507l;
        string UniqueEmployeeID = "2756000892327569999";
        Console.WriteLine("The Employee {0} {1} is {2} years old he is from gender {3}."+
            "His Personal ID Number is {4} and his Unique "+
            "Employee ID is  {5}",FirstName,LastName,Age,PersonIDNumber,UniqueEmployeeID);

Благодаря предварително 

1
Programming Basics
ViValDam avatar ViValDam 15 Точки

 Здравейте !

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

Надявам се да е от полза на някой ! laughing

 

class EmployeeData {

 

 // we are creating new type object - Employee  

struct Employee  

{

public string firstName;

public string familyName;

public byte age;

public bool isFemale;

public string gender;

public ushort ID; // 0,.......1,.......to 9999

public string uniqueNumber; // 2756-0000, 2756-0001,...to 27569999;

}

static void Main()

{

     // we are creating new object of type Enloyee = employee Violina Lang  (me or you or Pesho)

     Employee mcEmployee = new Employee(); 

     mcEmployee.firstName = "Violina";

     mcEmployee.familyName = "Lang";

     mcEmployee.isFemale = true;

     mcEmployee.gender = "female";

     mcEmployee.ID = 9491;

     mcEmployee.uniqueNumber = "2756";

 

   

     // we are geting and printing the data from employ Violina Lang

     Console.WriteLine("name : " + mcEmployee.firstName); 

     Console.WriteLine("family name : " + mcEmployee.familyName ); 

     Console.WriteLine("age : " + mcEmployee.age );

     Console.WriteLine("gender : " + mcEmployee.gender); 

     Console.WriteLine("ID : " + mcEmployee.ID);

     Console.WriteLine("N: " + mcEmployee.uniqueNumber + mcEmployee.ID); 

    Console.WriteLine("ID = {0}, \nperson number = {1}" , mcEmployee.ID, mcEmployee.uniqueNumber) ;

}

1
LinAdmin avatar LinAdmin 78 Точки

Здравейте,

Бих искал да добавя 2 неща:
Първото е, че за Employee Unique Number ни е даден диапазон: 27560000…27569999 - т.е. променят се само последните 4 символа. За мен типа данни тук е ushort (0-65535) и логичното решение е следното:

 

ushort EmployeeUniqueNumber = 1234;
Console.WriteLine("Employee Unique Number: " + 2756 + EmployeeUniqueNumber);

 

Мисляв, че няма нужда една и съща информация да се пази десет хиляди пъти в 10 хиляди различни променливи и да заема памет. Представете си например, че имаме 1М работника (както каза Наков на лекцията за типовете данни, по принцип се използва int, но ако имате 1 000 000 малки числа използвате ...)

 

От друга страна, виждам, че някои от вас са оутпутнали на един ред, а в условието това не е изришно указано. Там се казва "Print the data at the console", но не се казва да е на един ред. Така няма да бъркате с плейсхолдерите.

0
RoYaL avatar RoYaL Trainer 6849 Точки

@LinAdmin И какво ако от 24560000 до 26560000 са чистачите, а от 27560000 до 27569999 са бояджиите? За да започва някой номер от 2, а не от 0, явно има защо. Как тогава EmployeeUniqueNumber е unique? 1234 може да попадне и в диапазона започваш с 2456. Ако някога в апликейшъна ти се наложи да правиш подобна променя, ще трябва да подмениш всички номера на работниците от 4 цифрени на 8 цифрени, и съответно техния тип, също. Заради някакъв нероден перформънс проблем? Известна практика е: Не фиксвай перформънс проблеми, ако нямаш такива.

 

http://ericlippert.com/2012/12/17/performance-rant/

 

don't make performance-based changes unless you've identified a performance problem.

0
LinAdmin avatar LinAdmin 78 Точки

Здравей RoYaL,

В интерес на истината незнаех за подобно правило. Благодаря, че сподели!

 

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

Казвам това, защото си спомням, сякаш беше вчера, какво казваше мой преподавател от РУ - "Докато работите върху проектите си, ще се отнасяме с тях, сякаш утре продукта ще се произвежда, а след като ги предадете/защитите ги забравяме и отиват в архива и никой повече не го отваря."

 

Нека дадем друг пример:

Представи си (нека опростим), че отдел 1 има 3-ма служителя, отдел 2 има 5 и отдел 3 има 7. С този сетъп, би стигнало двуцифрено число. Значи: отдел 1 - номера на служители от 10 до 19, отдел 2 от 20 до 29 и отдел 3 от 30 до 39. Сега представи си, че отдел едно е маркетинг и за за една кампания имат нужда от още 10 човека. Оказва, се, че всеки служител от другите отдели ще претърпи промяна на номера си. Затова си мисля, че номера може да е отделно.

Задълбавайки малко повече, амплкейшъна който споменаваш вероятно ще има база данни, а там това е разрешено с т.нар. Multiple-Column Indexes

 

0
RoYaL avatar RoYaL Trainer 6849 Точки

@LinAdmin,

Multiple-Column indexes решава един голям тип проблеми, но в случая не фит-ва в условието. Ако говорим за бази данни, най-вероятно ще имаш

 

Table: Employees

 

Columns: id | name | department

 

Като в случая започваш да инсъртваш в ID от 1 нататък. В департмент отдела (enum, или нещо от сорта?)

 

В този случай, ако се присъедини нов човек, той просто става едно ИД отгоре, а това че е от отдел, в който всичките записи до момента са от 1 до 10, не би трябвало да значи, че ще претърпят всички промяна на номерата (просто е ситуация в риъл уърлда, която не трябва да се случва). Но винаги ще знаем, че това е човекът с ИД 321 във фирмата. А вече може да имаш:

 

Table: Departments_employees

 

Columns id | department_id | employee_id

 

Където там може да имаш запис 11 | 1 | 321. Така винаги ще знаем, че 321вия е 11ти в този отдел (1).

 

----

 

" ги забравяме и отиват в архива и никой повече не го отваря". Това не е съвсем така и зависи какъв тип работа ще си намериш. Ако успяваш да продаваш проектите си one time и не предлагаш повече maintainance/support по тях - ще си супер надалавера. Само, че това в реалния свят е трудно достижимо. Повечето клиенти искат да им поддържаш проекта, за да продължават да бъдат твои клиенти. Отмина времето на flextype/winamp аповете, които се продават и създателят им не се вясва повече. Въпреки, че ако говоря с конкретни примери, последният апп до последно имаше съпорт. Просто се опитвах да направя референция с близкото минало (от преди повече от декада).

 

Ако следваш логиката, която този твой преподавател е втълтил, означава че не трябва да се съобразяваш с никой от съвременните методи на работа. По тази логика дори не е нужно да пишеш добър и качествен код. А качествен код - такава дисциплина в СофтУни ще имаме. Ако ще забравиш за проекта - напиши го максимално бързо и с краката си, но трябва да си сигурен че никой, дори ти самия, повече няма да се налага да бъркаш по този код. Това по-скоро вече става не дивелъпърско мислене, а занаятчийско и code monkey style. Което аз лично не удобрявам.

 

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

0
LinAdmin avatar LinAdmin 78 Точки

RoYaL,

Направихме доста Off-Topic, надявам се да не ни бият laughing

Като гледам, хванал си се за втората част на изречението, а не за първата, която е по-важната.

Това, което исках да кажа е, че проектите са университетски, и единствената цена, която ще има за тях ще е отразена в студентстката ни книжка, но въпреки това ще се "отнасяме към тях, все едно утре ще се произвеждат". Т.е. въпреки, че няма да се произведе нито едно изделие, на проектите ще се гледа като на реални такива. Защото понякога при по-сложните неща, преподавателите си затварят очите и ти пишат оценка, а това а релания живот няма как да стане.

Относно real world experience-а, не съм програмист, работя като системен администратор от много години насам и пиша само скриптове. А там рядко се пправят апликейшъни от такъв калибър, че да се чудим какъв тип дадни да обявим за дадена променлива.

 

Нека ти цитирам един мой съсед, забележи, математик laughing

Бях 10-ти клас и намерих грешка в една задача по стереометрия и му разказах. Тогава той каза, че в задачите понякога умишлено се допуска грешка, за да се търси определено решение. 

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

 

 

0
AdriyanMihaylov avatar AdriyanMihaylov 25 Точки

Здравей, грешката ти е в това,че placeholder-ите: {0},{1} и т.н. са ти повече от аргументите. В случая си забравил да добавиш gender.
Целия ти Console.WriteLine() можеш да го направиш по този начин:
Console.WriteLine(" The Employee {0} {1} is {2} years old\n The gender: {3}", FirstName, LastName, Age, Gender);
Console.WriteLine(" His Personal ID Number : {0}\n UniqueEmployee ID: {1}",PersonIDNumber, UniqueEmployeeID);

Също така е прието, че  в добре форматирания код променливите започват с малка буква.Така че няма да е лошо и тях да ги преименуваш.
Също така има упътване (в книгата на Светлин Наков) да използваме тип char за променливата "gender"  и че  "уникалният номер на служителя" е в диапазон ( 27560000 ; 27569999 )

 Ето ти част от кога,който аз съм направил по тази задача.Ако го копнеш ти остава единствено да избереш подходящ тип за променливите и да ги отпечаташ. Дано ти помогне :)

        Console.WriteLine("First name:\t");

        firstName = Console.ReadLine();

        Console.WriteLine("Last name:\t");

        lastName = Console.ReadLine();

        Console.WriteLine("Age:\t");

        age = byte.Parse(Console.ReadLine());

        Console.WriteLine("Please enter you ID number:");

        idNumber = double.Parse(Console.ReadLine());

        do

        {

            Console.WriteLine("Please enter your Employee number");

            empNumber = int.Parse(Console.ReadLine());

            if (empNumber < 27560000 || empNumber > 27569999)

            {

                Console.WriteLine("The Employee number must be in the interval ( 27560000 ; 27569999 ) ");

            }

        } while (empNumber < 27560000 || empNumber > 27569999);


 

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