Ez az alkalmazás egy háztartás kezelésére szolgáló rendszer, amely lehetővé teszi a hűtőszekrény és a kamra tartalmának kezelését, események alapján történő reagálást, CRUD műveletek végrehajtását, ételek elkészítését, és vásárlás szimulálását.
A megoldás 5 különálló projektre van felosztva:
- Application: Az alkalmazás üzleti logikája és funkcionalitása.
- Model: Az adatmodellek definiálása.
- MsSql: Az adatbázis kapcsolódás és kezelés.
- Console: Felhasználói interakciók CLI környezetben.
- Tests: Tesztelési projekt az alkalmazás funkcióinak ellenőrzésére.
Az Application projekt tartalmazza az üzleti logikát és a különböző adatkezelési műveleteket.
- Funkció: Az alkalmazás működése során előforduló események kezelése.
- Részletek:
- Publikus események deklarálása.
- Események kiváltása más komponensek által.
- Funkció: A hűtőszekrényhez kapcsolódó CRUD műveletek kezelése.
- Metódusok:
KiirAll
: Az összes hűtőben lévő termék listázása.KiirEgy
: Egy adott termék megjelenítése.Hozzaad
: Új termék hozzáadása.Update
: Egy meglévő termék frissítése.Delete
: Egy termék törlése.
- Konstruktor paraméterei:
HouseHoldDBContext
FridgeDataProvider
ProductDataProvider
- Funkció: A CRUD műveletek interfészeinek deklarálása, amelyeket a megfelelő osztályok implementálnak.
- Metódusok:
KiirAll
,KiirEgy
,Hozzaad
,Update
,Delete
(mindvoid
típusú).
- Funkció: Ételkészítési folyamatok és a kapcsolódó adatbázis műveletek kezelése.
- Felhasználói interakció vezérelt folyamat.
- Az ételkészítéshez szükséges összetevők eltávolítása vagy frissítése.
- Konstruktor paraméterei:
HouseHoldDBContext
ProductCRUD
ProductDataProvider
- Funkció: A kamra tartalmának kezeléséhez kapcsolódó CRUD műveletek.
- Metódusok:
KiirAll
: Az összes kamrában lévő termék listázása.KiirEgy
: Egy adott termék megjelenítése.Hozzaad
: Új termék hozzáadása.Update
: Egy meglévő termék frissítése.Delete
: Egy termék törlése.
- Konstruktor paraméterei:
HouseHoldDBContext
PantryDataProvider
ProductDataProvider
- Funkció: A személyek kezeléséhez kapcsolódó CRUD műveletek.
- Metódusok:
KiirAll
: Az összes személy listázása.KiirEgy
: Egy adott személy megjelenítése.Hozzaad
: Új személy hozzáadása.Update
: Egy meglévő személy frissítése.Delete
: Egy személy törlése.
- Konstruktor paraméterei:
HouseHoldDBContext
PersonDataProvider
- Funkció: A termékek kezeléséhez kapcsolódó CRUD műveletek.
- Metódusok:
KiirAll
: Az összes termék listázása.KiirEgy
: Egy adott termék megjelenítése.Hozzaad
: Új termék hozzáadása.Update
: Egy meglévő termék frissítése.Delete
: Egy termék törlése.
- Konstruktor paraméterei:
HouseHoldDBContext
ProductDataProvider
- Funkció: Adatbázis-lekérdezések végrehajtása és adatok exportálása.
- Metódusok:
GetAllStockProduct()
: Az összes raktáron lévő termék lekérdezése.GetLowStockItems()
: Az alacsony készleten lévő termékek lekérdezése.GetExpiringSoon()
: A hamarosan lejáró termékek listázása.ExportToTxt()
: Adatok exportálása szöveges fájlba.
- Funkció: A vásárlás szimulációját kezeli.
- Új termékek hozzáadása a hűtő vagy a kamra adatbázisába.
- Metódusok:
- Vásárlási műveletek szimulációja.
- A termékek megfelelő helyre történő hozzáadása.
- Funkció: A hűtőszekrény adatmodellje.
- Tulajdonságok:
Id
(int): Egyedi azonosító (adatbázis által generált).Capacity
(int): A hűtő maximális kapacitása.Products
(List): A hűtőben tárolt termékek listája.
- Konstruktorok:
Fridge(int capacity)
: Kapacitás megadásával hoz létre egy üres hűtőt.Fridge(int capacity, List<Product> productsToAdd)
: Kapacitással és kezdeti terméklistával hoz létre egy hűtőt.Fridge()
: Üres konstruktor alapértelmezett értékekkel.
- Funkció: A kamra adatmodellje.
- Tulajdonságok:
Id
(int): Egyedi azonosító (adatbázis által generált).Capacity
(int): A kamra maximális kapacitása.Products
(List): A kamrában tárolt termékek listája.
- Konstruktorok:
Pantry(int capacity)
: Kapacitás megadásával hoz létre egy üres kamrát.Pantry(int capacity, List<Product> productsInput)
: Kapacitással és kezdeti terméklistával hoz létre egy kamrát.Pantry()
: Üres konstruktor alapértelmezett értékekkel.
- Funkció: A személyek adatmodellje.
- Tulajdonságok:
Id
(int): Egyedi azonosító (adatbázis által generált).Name
(string): A személy neve (max. 100 karakter).ResponsibleForPurchase
(bool): Jelzi, hogy a személy felelős-e a vásárlásokért.FavoriteProductIds
(List): A személy kedvenc termékeinek azonosítói.
- Konstruktorok:
Person(string name, bool responsibleForPurchase)
: Létrehoz egy személyt névvel és felelősségi állapottal.Person(string name, bool responsibleForPurchase, List<int> favoriteProductIdsInput)
: Névvel, felelősségi állapottal és kedvenc termékek listájával hoz létre egy személyt.Person()
: Üres konstruktor alapértelmezett értékekkel.
- Funkció: A termékek adatmodellje.
- Tulajdonságok:
Id
(int): Egyedi azonosító (adatbázis által generált).Name
(string): A termék neve (max. 100 karakter).Quantity
(decimal): A termék mennyisége.CriticalLevel
(decimal): Az alacsony készletszintet jelző érték.BestBefore
(DateTime): A termék lejárati dátuma.StoreInFridge
(bool): Jelzi, hogy a terméket hűtőben kell-e tárolni.- Navigációs Tulajdonságok:
FridgeId
(int?): A termékhez tartozó hűtő azonosítója.Fridge
(Fridge): A termékhez tartozó hűtő objektum.PantryId
(int?): A termékhez tartozó kamra azonosítója.Pantry
(Pantry): A termékhez tartozó kamra objektum.
- Konstruktorok:
Product(string name, decimal quantity, decimal criticalLevel, DateTime bestBefore, bool storeInFridge)
: Termék létrehozása a szükséges adatokkal.Product()
: Üres konstruktor alapértelmezett értékekkel.
- Funkció: Interfész a termékekkel kapcsolatos műveletekhez.
- Metódusok:
GetExpiringSoon()
: Lekérdezi a hamarosan lejáró termékeket.GetLowStockItems()
: Lekérdezi az alacsony készleten lévő termékeket.GetAllStockProduct()
: Lekérdezi az összes raktáron lévő terméket.
- Funkció: Generikus interfész az alapvető CRUD műveletekhez.
- Metódusok:
Add(T entity)
: Új entitás hozzáadása.Update(T entity)
: Egy meglévő entitás frissítése.Delete(int id)
: Egy entitás törlése azonosító alapján.GetById(int id)
: Egy entitás lekérdezése azonosító alapján.GetAll()
: Az összes entitás lekérdezése.
- Termékek és Tárolók:
- A termékek hűtőben vagy kamrában tárolhatók, navigációs tulajdonságok segítségével kapcsolódnak hozzájuk.
- Személyek és Termékek:
- A személyek kedvenc termékeiket az
FavoriteProductIds
tulajdonságon keresztül definiálják.
- A személyek kedvenc termékeiket az
-
Entitásmodellek:
- Person: A háztartás tagjait reprezentálja, beleértve a vásárlásért felelős személyeket és kedvenc termékeket.
- Product: A háztartásban tárolt termékeket ábrázolja, beleértve a kritikus készletszinteket és lejárati időket.
- Fridge: A romlandó termékek tárolására szolgáló hűtőszekrény kapacitáskorláttal.
- Pantry: Nem romlandó termékek tárolására szolgáló kamra kapacitáskorláttal.
-
Adatbázis-kapcsolat:
- Konfigurálja a kapcsolatokat a
Fridge
,Pantry
ésProduct
között. - MSSQL adatbázis-kapcsolatot hoz létre.
- Konfigurálja a kapcsolatokat a
-
Adatszolgáltatók:
- CRUD műveletek megvalósítása minden entitásra (
Person
,Product
,Fridge
,Pantry
). - Adatellenőrzés és egyedi kivételek dobása érvénytelen műveletek esetén.
- Események kezelése, például alacsony készletszintek figyelése.
- CRUD műveletek megvalósítása minden entitásra (
-
JSON-integráció:
- Alapadatok beolvasása és feldolgozása egy JSON fájlból.
-
Egyedi kivételek:
- Részletes hibaüzenetek az érvénytelen adatokra és az entitások hiányára vonatkozóan.
- .NET 6.0 SDK vagy újabb verzió.
- MSSQL Server (LocalDB vagy teljes SQL Server).
- JSON adatfájl, amely a
jsons/data.json
mappában található.
A kapcsolati karakterlánc a HouseHoldDbContext.cs
fájlban van definiálva:
string connStr = @"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=householddb;Integrated Security=false;MultipleActiveResultSets=true";
A háztartásban tárolt termékeket ábrázolja.
- Tulajdonságok:
Name
: A termék neve (kötelező, legfeljebb 100 karakter).Quantity
: A termék mennyisége (nem lehet negatív).CriticalLevel
: Kritikus készletszint, amely alatt figyelmeztetést ad (nem lehet negatív).BestBefore
: A termék lejárati dátuma (jövőbeli dátum kell, hogy legyen).StoreInFridge
: Logikai érték, amely megadja, hogy a terméket hűtőben kell-e tárolni.
A háztartás tagjait ábrázolja.
- Tulajdonságok:
Name
: A személy neve (kötelező, legfeljebb 100 karakter).ResponsibleForPurchase
: Logikai érték, amely megadja, hogy a személy felelős-e a vásárlásokért.FavoriteProductIds
: Kedvenc termékek listája (egész számok listája).
A hűtőszekrényt reprezentálja, amely korlátozott kapacitással rendelkezik.
- Tulajdonságok:
Capacity
: A hűtő kapacitása (kötelező, nem lehet negatív).Products
: A hűtőben tároltProduct
-ok listája.
A kamrát reprezentálja, amely szintén korlátozott kapacitással rendelkezik.
- Tulajdonságok:
Capacity
: A kamra kapacitása (kötelező, nem lehet negatív).Products
: A kamrában tároltProduct
-ok listája.
A Product
entitások CRUD műveleteinek kezelésére szolgál, és eseményeket vált ki alacsony készletszintek esetén.
-
Metódusok:
Add(Product entity)
: Új termék hozzáadása.Update(Product entity)
: Meglévő termék frissítése.Delete(int id)
: Termék törlése azonosító alapján.GetById(int id)
: Termék lekérése azonosító alapján.GetAll()
: Az összes termék lekérése.
-
Esemény:
ProductBelowCriticalLevel
: Akkor váltódik ki, ha egy termék készlete a kritikus szint alá csökken.
A Person
entitások CRUD műveleteinek kezelésére szolgál.
- Metódusok:
Add(Person entity)
: Új személy hozzáadása.Update(Person entity)
: Meglévő személy frissítése.Delete(int id)
: Személy törlése azonosító alapján.GetById(int id)
: Személy lekérése azonosító alapján.GetAll()
: Az összes személy lekérése.
A Fridge
entitások CRUD műveleteinek kezelésére szolgál.
- Metódusok:
Add(Fridge entity)
: Új hűtő hozzáadása.Update(Fridge entity)
: Meglévő hűtő frissítése.Delete(int id)
: Hűtő törlése azonosító alapján.GetById(int id)
: Hűtő lekérése azonosító alapján.GetAll()
: Az összes hűtő lekérése.
A Pantry
entitások CRUD műveleteinek kezelésére szolgál.
- Metódusok:
Add(Pantry entity)
: Új kamra hozzáadása.Update(Pantry entity)
: Meglévő kamra frissítése.Delete(int id)
: Kamra törlése azonosító alapján.GetById(int id)
: Kamra lekérése azonosító alapján.GetAll()
: Az összes kamra lekérése.
- InvalidProductDataException: Akkor dobódik, ha egy termék adatai érvénytelenek.
- ProductNotFoundException: Akkor dobódik, ha egy termék nem található az adatbázisban.
- InvalidPersonDataException: Akkor dobódik, ha egy személy adatai érvénytelenek.
- PersonNotFoundException: Akkor dobódik, ha egy személy nem található az adatbázisban.
A JsonRead
osztály segítségével tölthetjük be az adatokat a JSON fájlból:
var jsonRead = new JsonRead(context);
jsonRead.SeedDatabase(context);
productDataProvider.ProductBelowCriticalLevel += (sender, args) =>
{
Console.WriteLine($"A(z) '{args.Product.Name}' készletszintje kritikus alá csökkent! Értesítendő: {args.Person.Name}.");
};
var newProduct = new Product("Tej", 1.0M, 0.5M, DateTime.Now.AddDays(7), true);
productDataProvider.Add(newProduct);
Ez az osztály a PersonDataProvider
működésének tesztelésére készült. A tesztek biztosítják, hogy az Person
entitások CRUD műveletei és hibakezelése megfelelően működjenek.
- Ellenőrzi, hogy egy személy sikeresen hozzáadható az adatbázishoz.
- A teszt után ellenőrzi, hogy az adatbázis tartalmazza az újonnan hozzáadott személyt.
- Ellenőrzi, hogy az összes hozzáadott személy lekérhető.
- Több személy hozzáadása után biztosítja, hogy a lekérdezés visszaadja az összes személyt.
- Ellenőrzi, hogy egy konkrét személy azonosító alapján sikeresen lekérhető.
- Biztosítja, hogy a lekért személy adatai helyesek.
- Ellenőrzi, hogy egy meglévő személy adatai frissíthetők.
- A frissítés után biztosítja, hogy az adatbázisban tárolt értékek megfelelően változtak.
- Ellenőrzi, hogy egy személy sikeresen törölhető az adatbázisból.
- A törlés után biztosítja, hogy az adatbázisban már ne legyen jelen az adott személy.
- Ellenőrzi, hogy egy érvénytelen személy hozzáadása kivételt vált ki (
InvalidProductDataException
).
- Ellenőrzi, hogy érvénytelen adatokkal történő frissítés kivételt vált ki (
InvalidProductDataException
).
- Ellenőrzi, hogy nem létező azonosítóval történő lekérés kivételt vált ki (
PersonNotFoundException
).
- Ellenőrzi, hogy nem létező személy frissítése kivételt vált ki (
PersonNotFoundException
).
- Ellenőrzi, hogy nem létező azonosítóval történő törlés kivételt vált ki (
PersonNotFoundException
).
A tesztek a következő objektumokat inicializálják a tesztosztályban:
HouseHoldDbContext
: Az adatbázis kapcsolata.PersonDataProvider
: APerson
entitások kezeléséhez.ProductDataProvider
: A kapcsolódó termékkezeléshez.PersonCRUD
: A CRUD műveletek magasabb szintű kezelésére.
A tesztek minden futtatás előtt újra inicializálják az adatbázist.
Ez az osztály a ProductDataProvider
működésének tesztelésére készült. A tesztek biztosítják, hogy a Product
entitások CRUD műveletei és hibakezelése megfelelően működjenek.
- Ellenőrzi, hogy egy termék sikeresen hozzáadható az adatbázishoz.
- A teszt után biztosítja, hogy az adatbázis tartalmazza az újonnan hozzáadott terméket.
- Ellenőrzi, hogy egy konkrét termék azonosító alapján sikeresen lekérhető.
- Biztosítja, hogy a lekért termék adatai helyesek.
- Ellenőrzi, hogy egy meglévő termék adatai frissíthetők.
- A frissítés után biztosítja, hogy az adatbázisban tárolt értékek megfelelően változtak.
- Ellenőrzi, hogy egy termék sikeresen törölhető az adatbázisból.
- A törlés után biztosítja, hogy az adatbázisban már ne legyen jelen az adott termék.
- Ellenőrzi, hogy az összes hozzáadott termék lekérhető.
- Több termék hozzáadása után biztosítja, hogy a lekérdezés visszaadja az összes terméket.
- Ellenőrzi, hogy érvénytelen termék hozzáadása kivételt vált ki (
InvalidProductDataException
).
- Ellenőrzi, hogy nem létező azonosítóval történő lekérés kivételt vált ki (
ProductNotFoundException
).
- Ellenőrzi, hogy érvénytelen adatokkal történő frissítés kivételt vált ki (
InvalidProductDataException
).
- Ellenőrzi, hogy nem létező azonosítóval történő törlés kivételt vált ki (
ProductNotFoundException
).
A tesztek a következő objektumokat inicializálják a tesztosztályban:
HouseHoldDbContext
: Az adatbázis kapcsolata.ProductDataProvider
: AProduct
entitások kezeléséhez.PersonDataProvider
: A kapcsolódó személykezeléshez.
A tesztek minden futtatás előtt újra inicializálják az adatbázist.
-
Lekérdezések
- Közelgő lejáratú termékek: Azokat a termékeket listázza, amelyek lejárata hamarosan esedékes.
- Kifogyóban lévő termékek: Azokat a termékeket jeleníti meg, amelyek elérték vagy alatta vannak a kritikus készlet szintnek.
- Maradék összkapacitás: Az összes raktárkészlet állapotát összegzi.
-
Étel készítése
- Segíti a felhasználót az ételkészítésben, az elérhető háztartási alapanyagok alapján.
-
Bevásárlás
- Automatikusan pótolja a termékeket a kritikus szint vagy a háztartás tagjainak kedvenc termékei alapján.
-
Adatbeolvasás
- A JSON fájlból adatokat olvas be az adatbázis kezdeti feltöltéséhez.
-
Adatkiírás
- Az adatokat egy szöveges fájlba exportálja biztonsági mentés vagy további felhasználás céljából.
-
Adatbázis-kezelés
- CRUD (Létrehozás, Olvasás, Frissítés, Törlés) műveleteket végezhet a következő entitásokon:
- Termékek
- Személyek
- Hűtők
- Kamrák
- CRUD (Létrehozás, Olvasás, Frissítés, Törlés) műveleteket végezhet a következő entitásokon:
-
Kritikus szint alatti termékek
- Értesíti a felhasználót, amikor egy termék készlete a kritikus szint alá esik.
- Tartalmazza a felelős személy adatait, aki a termék pótlásáért felelős.
-
Kedvenc termék pótolva
- Riaszt, amikor egy háztartási tag kedvenc terméke pótolva lett.
-
Kritikus szint alatti termékek lekérdezése
- A rendszer riasztást küld, ha több termék is elérte a kritikus készletszintet.
Az alkalmazás hierarchikus menürendszert használ, amely lehetővé teszi a felhasználók számára, hogy könnyen navigáljanak a különböző funkciók között.
-
Lekérdezések
- Almenü tartalmazza:
- Közelgő lejáratú termékek
- Kifogyóban lévő termékek
- Maradék összkapacitás
- Almenü tartalmazza:
-
Étel készítése
- Segíti az ételkészítést a háztartás alapanyagai alapján.
-
Bevásárlás
- Pótlja a termékeket a szükségletek alapján.
-
Beolvasás
- JSON fájlból történő adatimportálás.
-
Kiírás
- Adatok exportálása szöveges fájlba.
-
DB Szerkesztés
- Almenü tartalmazza a CRUD műveleteket:
- Termékek
- Személyek
- Hűtők
- Kamrák
- Almenü tartalmazza a CRUD műveleteket:
-
Kilépés
- Kilépés az alkalmazásból.
- Indítsa el az alkalmazást.
- Navigáljon a menüben az adott számjegy megadásával.
- Kövesse a képernyőn megjelenő utasításokat a műveletek végrehajtásához vagy térjen vissza a főmenübe.
- A DB Szerkesztés menüpontban adhat hozzá, frissíthet vagy törölhet adatokat a háztartásról.
- Érvénytelen adat: Hibás adatbevitel esetén megfelelő hibaüzenetek jelennek meg.
- Nem található adat: Ha nem létező rekordra próbál adatot módosítani vagy megjeleníteni, a rendszer értesíti a felhasználót.
- Az alkalmazás adatkezeléshez a
HouseHoldDbContext
adatbázis-kontektszt használ. - JSON fájl szükséges az adatbázis kezdeti feltöltéséhez.
- ProductBelowCriticalLevel: Esemény akkor aktiválódik, amikor egy termék készlete a kritikus szint alá esik.
- FavoriteProductRestock: Esemény akkor aktiválódik, amikor egy háztartási tag kedvenc terméke pótolva lett.
- ProductsBelowCriticalLevel: Esemény akkor aktiválódik, amikor több termék készlete is alá esett a kritikus szintnek.
- A menürendszer interaktív, és minden művelet után visszaáll a főmenübe.
- Az események és műveletek megfelelő kezelése biztosítja a zökkenőmentes működést és a valós idejű frissítéseket.
Élvezze a háztartás hatékony kezelését ezzel az alkalmazással!
- Telepítsd a szükséges csomagokat a projekt buildelése előtt.
- Futtasd az adatbázis inicializálási scriptet az MsSql projektben.
- Használj
Console
projektet a CLI interakciók eléréséhez.
A Tests
projekt tartalmazza az összes funkció tesztelésére szolgáló teszteseteket. A tesztek futtatásához használd az MSTest frameworköt.