Skip to content

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.md to'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

python
def f(x, y):
    if x > 0:
        if y > 0:
            r = x + y
            print(r)
            return r
        else:
            return 0
    else:
        return 0

Yaxshi

python
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 + y

5. Error handling

Foydalanuvchi xato kirita oladi. Dasturingiz crash bo'lmasin.

python
# 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

python
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

  1. Happy path — to'g'ri foydalanish
  2. Edge cases — chegara holatlari
  3. Bad input — xato kiritish
  4. Empty state — bo'sh holat

Bank app misoli

TestKutilganOlingan
Akkaunt yaratishOK?
Bo'sh ismXato?
Manfiy balansXato?
1M depositOK?
-100 depositXato?
Yetmagan withdrawXato?
Restart — saqlandimi?OK?

8. README — to'liq versiya

markdown
# Bank Boshqaruv Tizimi 🏦

Terminal-asoslangan bank ilovasi.

## Demo

![Demo](demo.gif)

## 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:

  1. Asosiy menyu
  2. Akkaunt yaratish jarayoni
  3. Login
  4. Deposit
  5. 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:

  1. Salom + loyiha nomi (10 sek)
  2. Nima qiladi? (20 sek)
  3. Live demo (60-90 sek)
  4. Texnologiyalar (15 sek)
  5. Kelajak rejalari (15 sek)
  6. 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

bash
$ 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 push

Versiya 1.0.0 — birinchi rasmiy release.

12. GitHub Release

GitHub'da:

  1. Repo → ReleasesCreate a new release
  2. Tag: v1.0.0
  3. Title: Bank App v1.0.0
  4. Description:
    ## Imkoniyatlari
    - Akkaunt boshqaruvi
    - Tranzaksiyalar
    - Tarix
    - Foiz hisoblash
    
    ## Foundation 6-oy yakuniy loyihasi
  5. Publish release

13. Bugungi vazifa

Sinf vaqtida

  1. Loyihani yakunlang (50 daqiqa)
  2. Test qiling (10 daqiqa)
  3. README to'liq qiling (15 daqiqa)
  4. Final commit + tag (5 daqiqa)
  5. 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

MezonBall
MVP imkoniyatlar ishlaydi30
OOP to'g'ri (class, method)15
File I/O (saqlash/o'qish)10
Error handling10
Kod sifati (toza, modullar)10
GitHub commits (15+, conventional)5
README to'liq10
Demo prezentatsiya10
Jami100

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:

markdown
## Foundation tugadi! 🎓

Yakuniy loyiham: [Bank App](https://github.com/USER/bank-app)

Texnologiyalar: Python, JSON, OOP

Tez orada Mobile/Backend yo'nalishini boshlayman.

Keyingi dars

12-dars: Foundation yakuniy imtihon →

Master IT o'quv markazi — o'qitish rejasi