Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitcab933f9d682283a07fdf725ca9034abbbd482d7 (patch)
Author
 Syndamia <kamen@syndamia.com>
2026-03-03 19:19:55 +0200
Committer
 Syndamia <kamen@syndamia.com>
2026-03-03 19:19:55 +0200
Filesf46f056a19c1906ded0ac2f758ce3b66a86aecf2
syndamia.com-cab933f9d682283a07fdf725ca9034abbbd482d7.tar
syndamia.com-cab933f9d682283a07fdf725ca9034abbbd482d7.tar.gz
syndamia.com-cab933f9d682283a07fdf725ca9034abbbd482d7.zip
Parentb7a227c5f3c86d06663a3a2e87e10be6f945d286 (diff)
feat(teaching/oop-2025/w03): Add exercises
3 files changed, 263 insertions, 0 deletions
-rw-r--r--meta/meta.tsv1
-rw-r--r--src/teaching/oop-2025/index.du9
-rw-r--r--src/teaching/oop-2025/week03/index.du253
diff --git a/meta/meta.tsv b/meta/meta.tsv
index 57cba20..dca2136 100644
--- a/meta/meta.tsv
+++ b/meta/meta.tsv
@@ -117,6 +117,7 @@ teaching/oop-2025/index.html Обектно-ориентирано програÐ
teaching/oop-2025/week01/intro.html Уводни бележки - ООП, Седмица 1, 18.02.2026 Бележки относно практикума и курса.
teaching/oop-2025/week01/index.html Задачи - ООП, Седмица 1, 18.02.2026 Условията на задачите за упражнение.
teaching/oop-2025/week02/index.html Задачи - ООП, Седмица 2, 25.02.2026 Условията на задачите за упражнение.
+teaching/oop-2025/week03/index.html Задачи - ООП, Седмица 3, 04.03.2026 Условията на задачите за упражнение.
blog/connect-to-mysql-in-dotnet-ef/index.html Connect to MySql in .NET and Entity Framework Connecting a .NET application to a MySql database (with Entity Framework) can be tricky. Here is what works for me.
diff --git a/src/teaching/oop-2025/index.du b/src/teaching/oop-2025/index.du
index e5062ac..954c0c5 100644
--- a/src/teaching/oop-2025/index.du
+++ b/src/teaching/oop-2025/index.du
@@ -41,3 +41,12 @@
|:
[url ./week02 Задачи]
|| [url https://github.com/Syndamia/oop-2025-solutions/tree/main/Week02 Решения]
+
+|: 3
+|: 04.03.2026
+|: Структурирани програми
+
+|:
+|:
+|:
+[url ./week03 Задачи]
diff --git a/src/teaching/oop-2025/week03/index.du b/src/teaching/oop-2025/week03/index.du
new file mode 100644
index 0000000..1c99504
--- /dev/null
+++ b/src/teaching/oop-2025/week03/index.du
@@ -0,0 +1,253 @@
+# Задачи - ООП, Седмица 3, 04.03.2026
+
+'define expected-reading 4 min
+'define created 03 March 2026
+'define edited 03 March 2026
+[$pagenav]
+
+## За решаване
+
+### Задача 1
+
+Реализирайте система за онлайн магазин.
+Трябва да имате потребители, администратори и продукти.
+
+Всеки потребител (и администратор) си има потребителско име и парола.
+Чрез вход и изход, трябва да може потребител да се регистрира, да влезе в акаунта си и да "купи" продукти.
+
+Администраторски акаунти, [=допълнително=], могат да променят дали акаунти са администраторски и да добавят продукти.
+Всеки продукт си има име, бройка и цена.
+
+Имената и пароли на потребители, както и имена на продукти не съдържат шпации.
+
+При стартирането на програмата, трябва да има наличен администраторски акаунт с потребителско име "admin" и парола "admin".
+
+От входа първо се получава буква, която обозначава команда/действие в платформата.
+Когато няма "логнат" потребител, имаме следните команди налични:
+.bulleted
+- [`l`] - влизане в потребителски акаунт, поискват се потребителско име и парола.
+ Ако не съвпадат на някой регистриран потребител, изкарва се съответното съобщение и процеса се анулира
+- [`r`] - регистриране на потребител, поискват се потребителско име и парола.
+ Ако потребителско имеа се повтаря с този на вече регистриран потребител, изкарва се съответното съобщение
+- [`p`] - изкарване на всички продукти и техните цени.
+ Ако няма въведени продукти, тогава да се изкара съответното съобщение.
+
+Когато потребител влезе в акаунта си, има достъп към следните команди:
+.bulleted
+- [`p`] - изкарване на всички продукти и техните цени.
+ Ако няма въведени продукти, тогава да се изкара съответното съобщение.
+- [`e`] - излизане от акаунта си
+- [`b`] - купуване на продукти, първо потребителя казва колко (различни) продукта ще си купи и след това въвежда за всеки продукт, неговото име и бройка.
+ Ако името е грешно или няма достатъчно количество, изкарва се съответното съобщение и процеса се анулира.
+ При успешно купуване се изкарва общата цена на продуктите и тяхната обща бройка е намалена.
+
+Когато администратор влезе в акаунта си, той има всички команди които и нормалния потребител има, заедно с:
+.bulleted
+- [`a`] - променя дали потребител е администратор (прави администратор на нормален или нормален на администратор)
+- [`s`] - въвежда име на продукт, бройка и цена.
+ Ако продукта не съществува, тогава го създава.
+ Ако съществува (със същото име), тогава го обновява: бройката се добавя към текущата и ценята се заменя.
+
+[=Смесен вход/изход:=] [*(удебеления текст е въведен от потребителя, останалото е изкарано от програмата)*]
+```
+[=r=]
+Username: [=gg=]
+Password: [=ez=]
+Successfully registered user 'gg'!
+[=l=]
+Username: [=gogo=]
+User 'gogo' does not exist!
+[=l=]
+Username: [=gg=]
+Password: [=pie=]
+Incorrect password!
+[=l=]
+Username: [=gg=]
+Password: [=ez=]
+Successful login!
+[=p=]
+No products!
+[=s=]
+No permissions!
+[=e=]
+Logged out!
+[=l=]
+Username: [=admin=]
+Password: [=admin=]
+Successful login!
+[=s=]
+Name: [=Apple=]
+Quantity: [=50=]
+Price: [=0.5=]
+[=s=]
+Name: [=Bread=]
+Quantity: [=20=]
+Price: [=1.15=]
+[=s=]
+Name: [=Apple=]
+Quantity: [=10=]
+Price: [=0.5=]
+[=s=]
+Name: [=Bread=]
+Quantity: [=0=]
+Price: [=2=]
+[=p=]
+Apple 60 0.5
+Bread 20 2
+[=b=]
+Number of products: [=2=]
+Name: [=Apple=]
+Quantity: [=100=]
+Invalid quantity!
+[=b=]
+Number of products: [=3=]
+Invalid number of products!
+[=b=]
+Number of products: [=2=]
+Name: [=Apple=]
+Quantity: [=5=]
+Name: [=Bread=]
+Quantity: [=1=]
+Purchase successful! Total cost: 4.5
+[=p=]
+Apple 55 0.5
+Bread 19 2
+[=a=]
+Username: [=gogo=]
+User 'gogo' does not exist!
+[=a=]
+Username: [=gg=]
+Made user 'gg' into an administrator.
+[=e=]
+Logged out!
+[=l=]
+Username: [=gg=]
+Password: [=ez=]
+Successful login!
+[=s=]
+Name: [=Apple=]
+Quantity: [=0=]
+Price: [=0.75=]
+[=b=]
+Number of products: [=1=]
+Name: [=Apple=]
+Quantity: [=3=]
+Purchase successful! Total cost: 2.25
+[=p=]
+Apple 52 0.75
+Bread 19 2
+
+## За самоподготовка
+
+### Задача 2
+
+Реализирайте система за писане на съобщения между потребители.
+
+Всеки потребител си има потребителско име и парола.
+Чрез вход и изход, трябва да може потребител да се регистрира, да влезе в акаунта си и да изпрати съобщение.
+
+Имената и пароли на потребители не съдържа шпации.
+Съобщенията винаги са едноредови.
+
+От входа първо се получава буква, която обозначава команда/действие в платформата.
+Когато няма "логнат" потребител, имаме следните команди налични:
+.bulleted
+- [`l`] - влизане в потребителски акаунт, поискват се потребителско име и парола.
+ Ако не съвпадат на някой регистриран потребител, изкарва се съответното съобщение и процеса се анулира
+- [`r`] - регистриране на потребител, поискват се потребителско име и парола.
+ Ако потребителско имеа се повтаря с този на вече регистриран потребител, изкарва се съответното съобщение
+
+Когато потребител влезе в акаунта си, има достъп към следните команди:
+.bulleted
+- [`e`] - излизане от акаунта
+- [`u`] - изреждане на имената на всички регистрирани потребители (включително себе си)
+- [`m`] - изпращане на съобщение, поискват се име на потребител и след това самото съобщение
+- [`i`] - изкарване на съобщения, изпратени към текущо влезли потребител.
+ Поисква се бройка и след това се изкарват последните толкова на брой съобщения, които са изпратени към нас.
+ Ако се поискат повече съобщения отколкото има, тогава се изкарват всичките.
+- [`h`] - изкарва се разговора между нас и даден потребител.
+ Поисква се име на потребител и след това се изкарват съобщенията които той е изпратил и които ние сме изпратили, в коректен ред.
+
+[=Смесен вход/изход:=] [*(удебеления текст е въведен от потребителя, останалото е изкарано от програмата)*]
+```
+[=r=]
+Username: [=barry=]
+Password: [=1234=]
+Successfully registered user 'barry'!
+[=r=]
+Username: [=map=]
+Password: [=1234=]
+Successfully registered user 'map'!
+[=r=]
+Username: [=joe=]
+Password: [=1234=]
+Successfully registered user 'joe'!
+[=l=]
+Username: [=map=]
+Password: [=1234=]
+Successful login!
+[=u=]
+barry
+map
+joe
+[=m=]
+Username: [=dd=]
+User 'dd' does not exist!
+[=m=]
+Username: [=barry=]
+Message: [=Hello barry!=]
+[=m=]
+Username: [=barry=]
+Message: [=How are you?=]
+[=e=]
+Logged out!
+[=l=]
+Username: [=joe=]
+Password: [=1234=]
+Successful login!
+[=m=]
+Username: [=barry=]
+Message: [=Are you there?=]
+[=e=]
+Logged out!
+[=l=]
+Username: [=barry=]
+Password: [=1234=]
+Successful login!
+[=m=]
+Username: [=map=]
+Message: [=I'm fine=]
+[=i=]
+Number of messages: [=10=]
+map: Hello barry!
+map: How are you?
+joe: Are you there?
+[=e=]
+Logged out!
+[=l=]
+Username: [=map=]
+Password: [=1234=]
+Successful login!
+[=m=]
+Username: [=barry=]
+Message: [=Good to hear!=]
+[=e=]
+Logged out!
+[=l=]
+Username: [=barry=]
+Password: [=1234=]
+Successful login!
+[=h=]
+Username: [=map=]
+map: Hello barry!
+map: How are you?
+barry: I'm fine
+map: Good to hear!
+[=m=]
+Username: [=barry=]
+Message: [=Note to self: do not talk to map=]
+[=i=]
+Number of messages: [=3=]
+joe: Are you there?
+map: Good to hear!
+barry: Note to self: do not talk to map