Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.
X
Post

dabravata.com – къща за гости в северна България

Този проект е уебсайт за новата къща за гости, която отваря врати близо до моя роден град.
Като оставим на страна, че аз съм правил проекта – къщата е наистина яка и мястото е супер за релакс.
Силно препоръчвам 🙂

Ето някой от основните фиичъри в проекта:

  • Система за резервации
    • Създаване на резервации както от клиента така и от администратор
    • Проследяване и менажиране на всички резервации
    • Email известяване при нова резервация, както и при потвърждаване на резервация
  • Стаи и кагерогии
    • Създаване, четене, обновяване и изтриване
    • Качване на снимки за всяка стая, изтриване на снимка – отбелязване на снимка като основна за стаята
  • Галерия
    • Интеграция с UniteGallery
    • Интеграция с DropzoneJS
  • Къстъм страници
  • Система за менажиране на Атракции
    • Създаване, четене, обновяване и изтриване
    • Качване на снимка за дадена атракция, изтриване на снимка
  • Контактна форма (Ajax)

Може да видите сайта на следния адрес: www.dabravata.com

rsz_dabravata-index

Aside

Onlinesapani.com – ASP.MVC Application

This was my first asp.mvc project. It uses code first, entity framework, mvc5. It was very interesting and chalenging project. The website has custom backend admin panel.

Some of the core features are:

  • Products with Categories and subcategories
  • Upload multiple images and choose primary image
  • Creation of custom pages
  • Html content editor (tinymce)
  • News system
  • Email notification on product order
  • Ajax autocomplete search field
  • Tags
  • Contact form

You can see the project online at:  http://onlinesapani.com/

rsz_screencapture-onlinesapani-com-1439903418721

Image

MindMap – Strings

Тука стана яко драсканица, но ще свърши работа.
Така е като всичко се оставя за последния момент.mindmap

Aside

C#2 (CSharp) 07-TextFiles

Здравейте,

От доста време не бях поствал нещо свързано с академията, но това е не защото не ми се занимава, ами просто материята във втората част на CSharp е доста по-трудна и бях малко назад с материала.

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

01. Напишете програма която чете от текстов файл и принтира всички четни редове на конзолата.

Обяснение: Опитваме да заредим файла със StreamReader като сме го поставили във using поле, за да сме сигурни, че стриима ще се затвори след прочитане на файла.
Въртим един while цикъл и като условие за цикъла поставяме – докато имаме редове които не са null. Тоест цикъла се върти докато имаме редове в файла.
След това правим проверка на променливата lineCounter, която се увеличава с единица на всеки нов ред, дали е четна или не. Ако е четна – печатаме реда.

 

02. Напишете програма която свързва два текстови файла в трети общ файл.

Обяснение: Първо прочитаме съдържанието и на двата файла и го записваме в две променливи firstFile и secondFile, след това с помощта на StreamWriter записваме двата файла в нов файл combine.txt като добавяме нов ред между тях с помощта на Enviroment.NewLine. Хубаво е да слагате нов ред с Enviroment.NewLine понеже това е универсален клас който работи за всички операционни системи.

 

03. Напишете програма която прочита текстови файл и добавя номера на реда пред всеки ред. Резултата трябва да се запише в нов файл.

Обяснение: Зареждаме файла с StreamReader и въртим цикъл докато имаме редове. При всяко завъртане конкатенираме текущия ред с една нарастваща променлива lineCounter. Записваме резултата в новия файл с помощта на StreamWriter.

 

04. Напишете програма която сравнява два текстови файла ред по ред и принтира на конзолата броя на редовете, които са еднакви и броя на редовете, които са различни.

Обяснение: Записвам редовете и на двата файла в стринг масив. След това въртя един for цикъл до дължината на някой от масивите като за всеки ред правя проверка дали текущия ред съвпада или не. Ако имаме съвпадение – увеличаваме int променливата same++, която всъщност ще ни покаже какъв е броя на еднаквите редове. Броя на различните редове намираме като извадим стойността на same от дължината на масива.

 

05. Напишете програма която чете текстов файл който съдържа квадратна матрица от числа и намира подматрицата която има най-голяма сума. Пъврия ред от файла показва големината на матрицата.

Обяснение: Тук по особената и нова за нас част е парсването на матрицата. Това става като първо прочитаме всички редове от файла и ги записваме в стринг масив. След това вземаме размера на матрицата (matrixSize) от първия ред на файла (int.Parse(lines[0])). След това прочитаме останалите редове от файла и попълваме int[,] matrix матрицата. Тук е важно да започнем въртенето на цикъла един ред надолу, за да пропуснем първия ред. След като сме парснали успешно файла – на получената матрица прилагаме метода FindMaxSubmatrixSum(), който знаем от домашните за многомерни масиви в началото на този курс. Накрая записваме резултата в нов файл с помощта на File.WriteAllText().

 

06. Напишете програма която прочита файл, който съдържа списък с стрингове, сортира ги и ги записва в нов файл.

Обяснение: Доста кратка задачка. Първо четем всички редове и ги записваме в стринг масив с помощта на File.ReadLines(). След това прилагаме Array.sort() и накрая записваме в нов файл с File.WriteAllLines().

 

07. & 08. Напишете програма която заменя всички ‘start’ субстрингове с ‘finish’. Проверете дали програмата Ви работи коректно за големи файлове (Пр. 100mb) 

Обяснение: Отново кратка задачка. Четем и записваме съдържанието на файла в string fileContent след което прилагаме заменяне с регулярен израз @’\bstart\b’ и накрая записваме резултата в файла finish.txt. В програмата съм Ви предоставил и метод който генерира голям текстов файл автоматично. GenerateLargeFile(). Ако имате нужда може да го използвате – като предварително трябва да замените текста <!–PUT SIME TEXT HERE–> със текст по ваш избор.

 

09. Напишете програма която изтрива от даден текстови файл – всички нечетни редове.

Обяснение: тук също не е сложно. Това е почти 1 към 1 като първа задача, само, че вместо да пишем на конзолата – записваме в същия файл с StreamWriter.

 

10. Напишете програма която екстрактва всичкия смислен текст от подаден XML файл (без xml таговете).

Обяснение: Четем ред по ред от xml файла като на всеки ред завъртаме for цикъл който върви по буквите и проверява дали имаме символ ‘>’. Ако сме срещнали ‘>’ правим проверка дали не сме на края на реда и дали следващия символ не е затваряща скоба ‘<‘. Ако минем проверката – завъртаме още един цикъл, който брои дължината на думата докато не срещнем ‘<‘. След края на този цикъл – ние вече знаем началния индекс на текста който ни трябва и дължината му. С помощта на тези две променливи – извличаме субстринга с line.Substring() и го записваме в List с всички текстове.

 

11. Напишете програма която изтрива от текстови файл всички думи които започват с префикс “test”.

Обяснение: Записваме съдържането на файла в променливата fileContent. След това записваме резултата в същия файл с File.WriteAllText като предварително обработваме текста с регулярен израз който изтрива всички срещания на думи с prefix test @”\b(test\w*)\b”

 

12. Напишете програма която приема списък с ключови думи от един текстов файл и изтрива тези думи от друг текстов файл.

Обяснение: Най-важното в този метод е да си генерираме правилен регулярен израз. Това става с този ред: string regex = @”\b(” + String.Join(“|”, File.ReadAllLines(“../../words.txt”)) + @”)\b”; – Това реално ни връща следното нещо: При файл с съдържание:
words.txt:
barbarian
fury
strength
ние получаваме резултат – \b(barbarian|fury|strength)\b, което на практика ни върши перфектна работа за тази задача. След това записваме новия текст в нов файл като предварително сме го обработили с въпросния регулярен израз. Хубаво е да използваме RegexOptions.IgnoreCase,  ако искаме да засичаме и думи с различен case. Накрая си засичаме всички ексепшъни по стандартния начин.

 

13. Напишете програма която приема списък с ключови думи от файл words.txt, намира колко пъти всяка дума се среща в друг файл test.txt и накрая записва резултата в трети файл – result.txt. Резултата трябва да бъде сортиран по брой срещания – в намаляващ ред.

Обяснение: Тук е по-интересно. Ще се наложи да използваме dictionary за целта. Или с други думи – асоциативен масив. (задачата може да се реши и без dictionary, но така е най-приятно). Първо си четем думите и ги записваме в масив words[], иницираме си Dictionary. Започваме да четем файла – ред по ред, като за всеки ред завъртаме по един for цикъл който ни върти всички думи. При този for цикъл правим проверка с регулярен израз дали думата се среща и ако да – колко пъти. Ако имаме срещане на думата – проверяваме дали тази дума вече е записана в dictionary-то – ако да -> увеличаваме бройката с 1ца. Ако не -> добавяме думата в речника. След като сме намерили всички думи и техните бройки – въртим един foreach цикъл при който с помощта на Lambda израз – сортираме речника по подходящия начин и печатим в файла result.txt

 

Това са задачките от домашното – като цяло са доста лесни и приятни. В същото време са практични и полезни.
Силно ви препоръчвам да прочетете повече за регулярните изрази. Те са изключително полезни при работа с стрингове и текст.

Ако имате някакви въпроси или критика – пишете в коментарите.
Полезни връзки:
Тестър за Регулярни изрази
Полезна статия за работа с файлове в C#

Video

C# Fundamentals 2011/2012 Part 1 – Test Exam

Здравейте,
В това видео ще се опитам да обясня логиката зад решаването на задачите от C# Fundamentals 2011/2012 Part 1 – Test Exam в bgcoder: Problem 1 – Math Expression, Problem 2 – Least Majority Multiple, Problem 3 – Trapezoid, Problem 4 – Odd Number и Problem 5 – Fall Down.
На последната задача малко се затрудних да обясня добре какво точно се случва в кода, но мисля, че успях да предам основната логика зад решението.

Кода от задачите може да видите в моя github профил: https://github.com/nzhul/TelerikAcademy/tree/master/CSharpPartOne/Exam

Video

C# CSharp – Spiral Matrix

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

Aside

C# (CSharp) 05.Conditional Statements

Здравейте отново.

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

Най-интересна беше 11-та задача. При нея първоначално разделям с един метод подаденото число на отделни цифри и след това разглеждам ситуациите при които числото има съответно 1, 2 или 3 цифри. След това просто изписвам думичките от предварително създаден масив, на база на позицията им в масива спрямо подаденото число.

https://github.com/nzhul/TelerikAcademy/CSharpPartOne/05.Conditional-Statements

!NB Ъпдейтнал съм задачата с новото – ПРАВИЛНО решение :)!

Прегледай останалите задачи: More…

Aside

C# (CSharp) 04.Console-Input-Output

Пускам и задачите от тема “04. Console Input Output”.
Кода може да свалите от тук: Console Input Output – АРХИВ

Прегледай останалите задачи: More…

Aside

C# (CSharp) 03.Operators-Expressions-and-Statements

Пускам и темата задачите за Operators Expressions and Statements.
Очаквайте видео скоро 🙂

Архив с целия код от главата “Operators Expressions and Statements” може да свалите от тук: Operators Expressions and Statements – АРХИВ

Прегледай останалите задачи: More…

Video

C# (CSharp) 02.Promitive-Data-Types-And-Variables

Здравейте,
Ще пусна кода от темата за Примитивни типове и данни в C# и се надявам, че до няколко дена ще мога да добавя и видео към темата.

Архив с целия код от главата “Primitive Data Types and Variables” може да свалите от тук: Primitive Data Types and Variables – АРХИВ

Ето и видеото което обещах:

Прегледай останалите задачи: More…