11-dars: Yakuniy loyiha — 2-qism (Yakunlash)
Dars
Davomiyligi: 90 daqiqa Maqsad: Loyihani yakunlash, test qilish, hujjat qilish, demo tayyorlash.
1. Joriy holatni tekshirish
10-darsdan keyin sizda bo'lishi kerak:
- ✅ GitHub repo (Public)
- ✅
PLAN.mdto'liq - ✅ Skeleton kod
- ✅ Kamida 1 ta feature ishlaydi
- ✅ 5-10 commit
Yo'q bo'lsa — birinchi navbatda shu.
2. Bugungi maqsadlar
3. Yakunlash uchun checklist
Asosiy
- [ ] Barcha MVP feature'lar ishlaydi
- [ ] Error handling (try/except)
- [ ] Validation (foydalanuvchi inputi)
- [ ] File saqlash ishlaydi (JSON/CSV)
- [ ] OOP — class to'g'ri tuzilgan
Sifat
- [ ] Kod toza, indentatsiya to'g'ri
- [ ] O'zgaruvchi nomlari aniq
- [ ] Funksiyalar — bir vazifa
- [ ] Kommentlar (kerakli joyda)
- [ ] No commented-out code
- [ ] No print debug code
Hujjat
- [ ] README.md to'liq
- [ ] Screenshot/GIF qo'shilgan
- [ ] Imkoniyatlar ro'yxati
- [ ] O'rnatish ko'rsatma
- [ ] Foydalanish misoli
- [ ] Muallif va aloqa
4. Kod sifati — best practices
Yomon
def f(x, y):
if x > 0:
if y > 0:
r = x + y
print(r)
return r
else:
return 0
else:
return 0Yaxshi
def add_if_positive(x: int, y: int) -> int:
"""X va Y ikkalasi musbat bo'lsa — yig'indi, aks holda 0."""
if x <= 0 or y <= 0:
return 0
return x + y5. Error handling
Foydalanuvchi xato kirita oladi. Dasturingiz crash bo'lmasin.
# Yomon
amount = float(input("Summa: "))
balance -= amount
# Yaxshi
try:
amount = float(input("Summa: "))
if amount <= 0:
print("Xato: musbat summa kiriting")
elif amount > balance:
print("Xato: yetarli pul yo'q")
else:
balance -= amount
print(f"Yangi balans: {balance}")
except ValueError:
print("Xato: raqam kiriting")6. Validation funksiyalari
def get_int(prompt, min_val=None, max_val=None):
"""Foydalanuvchidan to'g'ri int olish."""
while True:
try:
value = int(input(prompt))
if min_val is not None and value < min_val:
print(f"Xato: kamida {min_val}")
continue
if max_val is not None and value > max_val:
print(f"Xato: ko'p emas {max_val}")
continue
return value
except ValueError:
print("Xato: butun raqam kiriting")
def get_float(prompt, min_val=0):
"""Float olish, musbat."""
while True:
try:
value = float(input(prompt))
if value < min_val:
print(f"Xato: kamida {min_val}")
continue
return value
except ValueError:
print("Xato: raqam kiriting")
def get_choice(prompt, options):
"""Tanlov olish."""
while True:
value = input(prompt).strip().lower()
if value in options:
return value
print(f"Xato: tanlovlar — {options}")7. Test qilish
Manual test
- Happy path — to'g'ri foydalanish
- Edge cases — chegara holatlari
- Bad input — xato kiritish
- Empty state — bo'sh holat
Bank app misoli
| Test | Kutilgan | Olingan |
|---|---|---|
| Akkaunt yaratish | OK | ? |
| Bo'sh ism | Xato | ? |
| Manfiy balans | Xato | ? |
| 1M deposit | OK | ? |
| -100 deposit | Xato | ? |
| Yetmagan withdraw | Xato | ? |
| Restart — saqlandimi? | OK | ? |
8. README — to'liq versiya
# Bank Boshqaruv Tizimi 🏦
Terminal-asoslangan bank ilovasi.
## Demo

## Imkoniyatlari
- ✅ Akkaunt yaratish (login + parol)
- ✅ Balans ko'rish
- ✅ Pul kiritish (deposit)
- ✅ Pul olib chiqish (withdraw)
- ✅ Boshqa akkauntga o'tkazma
- ✅ Tranzaksiyalar tarixi
- ✅ Foiz hisoblash (compound)
- ✅ JSON saqlash (persistent)
- ✅ Bir nechta foydalanuvchi
## Texnologiyalar
- Python 3.11
- JSON (built-in)
- datetime (built-in)
## O'rnatish
\`\`\`bash
git clone https://github.com/USER/bank-app.git
cd bank-app
\`\`\`
Tashqi kutubxona kerak emas (faqat Python 3.10+).
## Foydalanish
\`\`\`bash
python3 main.py
\`\`\`
### Akkaunt yaratish
1. Menyu → "1. Akkaunt yaratish"
2. Ism kiriting
3. Parol qo'ying
4. Boshlang'ich balans
### Pul kiritish
1. Login
2. "3. Deposit"
3. Summa
## Loyiha tuzilmasi
\`\`\`
bank-app/
├── main.py # Asosiy ishga tushadigan
├── models/
│ ├── account.py # Account class
│ └── transaction.py # Transaction class
├── utils/
│ ├── validation.py # Input validation
│ └── storage.py # JSON saqlash
├── data/
│ └── accounts.json # Saqlangan ma'lumot
├── README.md
└── PLAN.md
\`\`\`
## Ekran ko'rinishlari
### Asosiy menyu
\`\`\`
=== BANK BOSHQARUV TIZIMI ===
1. Akkaunt yaratish
2. Login
3. Chiqish
Tanlov:
\`\`\`
### Akkaunt ichida
\`\`\`
Salom, Akmal!
Balans: 1,500,000 so'm
1. Balans
2. Deposit
3. Withdraw
4. Transfer
5. Tarix
6. Foiz hisobi
7. Chiqish
\`\`\`
## Cheklovlar
- Min deposit: 1,000
- Max withdraw: 5,000,000
- Tarix: oxirgi 50 tranzaksiya
- Yillik foiz: 5%
## Kelajak rejalari
- [ ] GUI (tkinter)
- [ ] Kredit hisoblash
- [ ] Multi-currency
- [ ] Database (SQLite)
## Muallif
**Akmal Karimov**
GitHub: [@akmalkarimov](https://github.com/akmalkarimov)
Email: akmal@example.com
Foundation 6-oy yakuniy loyihasi (2026).
## Litsenziya
MIT — istalgan tarzda foydalanish mumkin.9. Screenshot va GIF
Asosiy ekranlar:
- Asosiy menyu
- Akkaunt yaratish jarayoni
- Login
- Deposit
- Tarix ko'rinishi
Screenshot olish:
- Mac:
Cmd + Shift + 4 - Windows:
Win + Shift + S
GIF yaratish:
- Mac:
Kap(bepul) yoki QuickTime + convert - Windows:
ScreenToGif - Online:
ezgif.com
Repo'ga screenshots/ papkasi qo'shing.
10. Demo tayyorlash
12-dars uchun 2-3 daqiqalik demo:
Tuzilma:
- Salom + loyiha nomi (10 sek)
- Nima qiladi? (20 sek)
- Live demo (60-90 sek)
- Texnologiyalar (15 sek)
- Kelajak rejalari (15 sek)
- Aloqa va GitHub (10 sek)
Mashq qiling:
- 3 marta o'qib chiqing
- Vaqtni tekshiring
- Yozma yo'l-yo'riq (script) tayyorlang
11. Final commit'lar
$ git add .
$ git commit -m "feat: complete transfer functionality"
$ git add .
$ git commit -m "feat: add transaction history"
$ git add .
$ git commit -m "fix: handle edge cases"
$ git add .
$ git commit -m "refactor: extract validation"
$ git add .
$ git commit -m "docs: complete README"
$ git add screenshots/
$ git commit -m "docs: add screenshots"
$ git tag v1.0.0
$ git push --tags
$ git pushVersiya 1.0.0 — birinchi rasmiy release.
12. GitHub Release
GitHub'da:
- Repo → Releases → Create a new release
- Tag:
v1.0.0 - Title:
Bank App v1.0.0 - Description:
## Imkoniyatlari - Akkaunt boshqaruvi - Tranzaksiyalar - Tarix - Foiz hisoblash ## Foundation 6-oy yakuniy loyihasi - Publish release
13. Bugungi vazifa
Sinf vaqtida
- Loyihani yakunlang (50 daqiqa)
- Test qiling (10 daqiqa)
- README to'liq qiling (15 daqiqa)
- Final commit + tag (5 daqiqa)
- Demo skript yozing (10 daqiqa)
Imtihondan oldin
- Demo'ni 3 marta mashq qiling
- README'ni boshqa odamga ko'rsating — tushunarli?
- Loyihani noldan clone qilib sinab ko'ring
14. Loyiha baholash
| Mezon | Ball |
|---|---|
| MVP imkoniyatlar ishlaydi | 30 |
| OOP to'g'ri (class, method) | 15 |
| File I/O (saqlash/o'qish) | 10 |
| Error handling | 10 |
| Kod sifati (toza, modullar) | 10 |
| GitHub commits (15+, conventional) | 5 |
| README to'liq | 10 |
| Demo prezentatsiya | 10 |
| Jami | 100 |
15. Eslatma
Eng katta xato
Loyihani oxirgi daqiqaga qoldirmang.
12-darsda — demo va imtihon. Kod yozish vaqti emas.
Bu hafta — har kuni ishlang.
Topshiriqlar (uy)
1 — Yakunlash
Hamma MVP feature'lar to'liq ishlasin.
2 — Test
Manual test jadvali to'ldiring va xatolarni tuzating.
3 — README
To'liq README — kamida 100 qator Markdown.
4 — Screenshot
Kamida 3 ta screenshot screenshots/ papkasida.
5 — Demo skript
2-3 daqiqalik demo uchun yozma yo'l-yo'riq.
6 — Release
v1.0.0 tag va GitHub release.
7 — Mashq
Demo'ni 3 marta mashq qiling (taymerda).
8 — Foundation portfolio
GitHub profil README'ni yakuniy ishingiz bilan yangilang:
## Foundation tugadi! 🎓
Yakuniy loyiham: [Bank App](https://github.com/USER/bank-app)
Texnologiyalar: Python, JSON, OOP
Tez orada Mobile/Backend yo'nalishini boshlayman.