---
# System prepended metadata

title: 'Seminar #1 - Mermaid'
tags: [TKPM-Mermaid]

---

---
title: 'Seminar #1 - Mermaid'
disqus: hackmd
---

Seminar #1 - Mermaid - 17/32
===
* 1712795 - Phan Tấn Thịnh
* 1712827 - Trần Quốc Toản



## Flow Chart
### Euclide GCD

> Ước chung lớn nhất của 2 số tự nhiên A, B
```mermaid
graph TD
    start([START]) --> step1[INPUT A, B]
    step1 --> tinyCircle(( ))
    tinyCircle --> step2{B = 0}
    step2 -- No --> step3{A > B}
    step3 -- No --> step4[B = B - A]
    step3 -- YES --> step5[A = A - B]
    step2 -- YES --> step6[PRINT A]
    step4 --> goto2[BACK TO STEP 2]
    step5 --> goto2
    step6 --> finish([END])
    goto2 --> tinyCircle   

    classDef yellow fill:#fbc71c,stroke-width:2px,stroke:#000,font-size:11px,font-weight:bold
    classDef cyan fill:#8acee7,stroke-width:2px,stroke:#000,font-size:11px,font-weight:bold
    classDef green fill:#81d981,stroke-width:2px,stroke:#000,font-size:11px,font-weight:bold
    class step1,tinyCircle,step4,step5,step6,goto2 cyan
    class step2,step3 yellow
    class start,finish green
```

### Quadratic Equation
> ax<sup>2</sup> + bx + c = 0

```mermaid
graph TD
    start(Bắt đầu) --> step1[INPUT a, b, c]
    step1 --> step2{a = 0}
    step2 -- Đúng --> step3{b = 0}
    step3 -- Đúng --> step4{c = 0}
    step4 -- Đúng --> resultR[Vô số nghiệm]
    step4 -- Sai --> result01[Vô nghiệm]
    step3 -- Sai --> result11[Một nghiệm<br>x = -c/b <br>]
    step2 -- Sai --> step5["#8710; = b^2 - 4ac"]
    step5 --> step6{"#8710;>= 0"}
    step6 -- Sai --> result02[Vô nghiệm]
    step6 -- Đúng --> step7{"#8710; = 0"}
    step7 -- Đúng --> result12[Một nghiệm<br>x = -b/2a]
    step7 -- Sai --> result2["Hai nghiệm<br>x1 = (-b - #8730;#8710;)/2a<br>x2 = (-b + #8730;#8710;)/2a"]
    
    resultR --> finish(Kết thúc)
    result01 --> finish
    result02 --> finish
    result11 --> finish
    result12 --> finish
    result2 --> finish
    
    classDef yellow fill:#fbc71c,stroke-width:2px,stroke:#000,font-size:12px,font-weight:bold
    classDef cyan fill:#8acee7,stroke-width:2px,stroke:#000,font-size:12px,font-weight:bold
    classDef green fill:#81d981,stroke-width:2px,stroke:#000,font-size:12px,font-weight:bold
    class step1,step5,resultR,result01,result02,result11,result12,result2 cyan
    class step2,step3,step4,step6,step7 yellow
    class start,finish green
```

## Class Diagram

```mermaid
classDiagram
Address "1" --* "1" Customer : Has
Customer "1" -- "*" Product : Purchases
Product "*" -- "1" Customer : Is Sold To
Customer -- PurchaseDetail
Product -- PurchaseDetail
PremiumCustomer --|> Customer
RegularCustomer --|> Customer
Bill --o Customer : Belongs To
Bill ..> PurchaseDetail
Bill ..> Discount
Discount ..> PurchaseDetail
Bill ..|> PaymentCounter : Accepts
class Address{
    street: String
    city: String
    state: String
    zipcode: Int
    enterStreet()
    enterCity()
    enterState()
    enterZipcode()
}

class Product{
    productID: Int
    productName: String
    productPrice: Float
    getPrice()
    setPrice()
}

class Customer{
    custName: String
    custID: Int
    custPhnum: Int
    purchaseItem()
    requestBill()
    enterCustDetail()
}

class PremiumCustomer{
    premiumDiscount: Int
    enterCustDetail()
}

class RegularCustomer{
    regularDiscount: Int
    enterCustDetail()
}

class PurchaseDetail{
    custID: Int
    quantity: Int
    purchaseDate: Date
    productID: Int
    calculateTotalAmt()
    generatePurchaseList()
}

class Discount{
    discountType
    discountValue
    SelectDiscount()
}

class Bill{
    payableAmt
    calculatePayableAmt()
    generateBill()
}

class PaymentCounter {
        << interface >>
        calculatePayableAmt()
        generateBill()
}

```

## Sequence Diagram

**Search Book : Use Case**

- **Main scenario**
  1. The Customer specifies an author on the Search Page and then presses the Search button.
  1. The system validates the Customer's search criteria.
  1. If author is entered, the System searches the Catalog for books associated with the specified author.
  1. When the search is complete, the system displays the search results on the Search Results page.
- **Altenate path**
  If the Customer did not enter the name of an author before pressing the Search button, the System displays an error message

```mermaid
sequenceDiagram
activate Customer
Customer ->> SearchPage : 1: onSearch(author)
activate SearchPage
SearchPage ->> SearchPage : 1.1: validateSearchCriteria()

alt author entered
    SearchPage ->> Catalog : 1.2: searchByAuthor(author)
    activate Catalog
    Catalog ->> SearchResults : 1.2.1: create()
    activate SearchResults
    SearchResults ->> SearchResultPage : 1.2.1.1: display()
    activate SearchResultPage
    deactivate SearchResultPage
    deactivate SearchResults
    deactivate Catalog
else author not entered
    SearchPage ->> SearchPage : 1.3: displayErrorMessage()
end
deactivate SearchPage
deactivate Customer
```




## State Chart Diagram
> ATM Machine State Diagram

```mermaid
stateDiagram
[*] --> Idle
Idle --> VerifyAccount
state VerifyAccount {
    state VerifyCard {
        cardSubmitted
        readCard
        returnCard
    }

    VerifyCard --> CheckIfCardValid
    CheckIfCardValid --> Idle : else
    CheckIfCardValid --> CardValid : cardValid
    CardValid --> VerifyPin
    state VerifyPin {
        pinSubmitted
        checkPin
        returnCard
    }
    VerifyPin --> CheckIfPinCorrect
    CheckIfPinCorrect --> PinCorrect : PINValid
    CheckIfPinCorrect --> PinIncorrect : else
    PinIncorrect --> VerifyPin : [tries < maxTries]/tries ++
}

TransactionComplete --> Idle
PrintReceipt --> TransactionComplete
DispenseMoney --> PrintReceipt
DispenseMoney --> TransactionComplete
AccountAction --> DispenseMoney
AccountAction --> PrintReceipt
 
```

> [Github Repo](https://github.com/yato511/Markdown)
###### tags: `TKPM-Mermaid`


