# **BÀI TẬP VỀ NHÀ THIẾT KẾ PHẦN MỀM** 1712289 - Phan Lê Hoài Bảo 1712313 - Nguyễn Tạ Phú Cường Lớp: TKPM 17_32 --- # Câu 1 ## a. Tìm ước chung lớn nhất ```mermaid graph TD A(Bắt đầu) --> B[/Nhập 2 số a, b/] B --> C{a=b} C -->|Đúng| D[/Hiển thị ước chung lớn nhất/] E -->|Đúng| F[a=a-b] C -->|Sai| E{a>b} E -->|Sai| G[b=b-a] F --> C G --> C D --> H(Kết thúc) ``` ## b. Giải và biện luận phương trình bậc 2 ```mermaid graph TD A(Bắt đầu) --> B[/Nhập 3 số a, b, c/] B --> C{a=0} C --> |Đúng| M[/Nhập a khác 0/] M --> B C --> |Sai| D[delta = b^2 - 4*a*c] D --> E{delta=0} E --> |Đúng| F["x1=-b/(2*a)"] F --> P[/Phương trình có nghiệm kép, x/] E --> |Sai| H{delta > 0} H --> |Đúng| K["x1=(delta^(1/2)-b)/(2*a*c), x2=(-delta^(1/2)-b)/(2*a*c)"] K --> G[/Phương trình có 2 nghiệm phân biệt, x1,x2/] H --> |Sai| L[/Phương trình vô nghiệm/] G --> T(Kết thúc) L --> T P --> T ``` # Câu 2 ## Class Diagram ```mermaid classDiagram PremiumCustomer --|> Customer RegularCustomer --|> Customer PurchaseDetail -- Product PurchaseDetail -- Customer Bill ..|> PaymentCounter : Accepts Bill ..> Discount Bill ..> PurchaseDetail Bill --o Customer : Belongs to Discount ..> PurchaseDetail Customer "1" -- "*" Product : Is Sold To, Purchases Address "1" --* "1" Customer : Has class Customer{ custName: String custID: Int custPhnum: Int purchaseItem() requestBill() enterCustDetail() } class PremiumCustomer{ premiumDiscount: Int enterCustDetail() } class RegularCustomer{ regularDiscount: Int enterCustDetail() } 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 PurchaseDetail{ custID: Int quantity: Int purchaseDate: Date productID: Int caculateTotalAmt() generatePurchaseList() } class Discount{ discountType discountValue SelectDiscount() } class Bill{ payableAmt caculatePayableAmt() generateBill() } class PaymentCounter{ <<>> caculatePayableAmt() generateBill() } ``` ## Chú thích: **Nguyên mẫu của class PaymentCounter** ``` class PaymentCounter{ <<interface>> caculatePayableAmt() generateBill() } ``` `Em không hiểu tại sao khi em chèn thêm text vào trong cặp dấu "<<>>" thì nó không hiển thị được.` [Class Diagram em vẽ trong Mermaid live editor](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoiY2xhc3NEaWFncmFtXG4gICAgUHJlbWl1bUN1c3RvbWVyIC0tfD4gQ3VzdG9tZXJcbiAgICBSZWd1bGFyQ3VzdG9tZXIgLS18PiBDdXN0b21lclxuICAgIFxuICAgIFB1cmNoYXNlRGV0YWlsIC0tIFByb2R1Y3RcbiAgICBQdXJjaGFzZURldGFpbCAtLSBDdXN0b21lclxuICAgIFxuICAgIEJpbGwgLi58PiBQYXltZW50Q291bnRlciA6IEFjY2VwdHNcbiAgICBCaWxsIC4uPiBEaXNjb3VudFxuICAgIEJpbGwgLi4-IFB1cmNoYXNlRGV0YWlsXG4gICAgQmlsbCAtLW8gQ3VzdG9tZXIgOiBCZWxvbmdzIHRvXG4gICAgXG4gICAgRGlzY291bnQgLi4-IFB1cmNoYXNlRGV0YWlsXG4gICAgXG4gICAgQ3VzdG9tZXIgXCIxXCIgLS0gXCIqXCIgUHJvZHVjdCA6IElzIFNvbGQgVG8sIFB1cmNoYXNlc1xuICAgIFxuICAgIEFkZHJlc3MgXCIxXCIgLS0qIFwiMVwiIEN1c3RvbWVyIDogSGFzXG4gICAgXG5cdGNsYXNzIEN1c3RvbWVye1xuICAgICAgICBjdXN0TmFtZTogU3RyaW5nXG4gICAgICAgIGN1c3RJRDogSW50XG4gICAgICAgIGN1c3RQaG51bTogSW50XG4gICAgICAgIHB1cmNoYXNlSXRlbSgpXG4gICAgICAgIHJlcXVlc3RCaWxsKClcbiAgICAgICAgZW50ZXJDdXN0RGV0YWlsKClcblx0fVxuXG5cdGNsYXNzIFByZW1pdW1DdXN0b21lcntcbiAgICAgICAgcHJlbWl1bURpc2NvdW50OiBJbnRcbiAgICAgICAgZW50ZXJDdXN0RGV0YWlsKClcblx0fVxuXG5cdGNsYXNzIFJlZ3VsYXJDdXN0b21lcntcbiAgICAgICAgcmVndWxhckRpc2NvdW50OiBJbnRcbiAgICAgICAgZW50ZXJDdXN0RGV0YWlsKClcblx0fVxuXG5cdGNsYXNzIEFkZHJlc3N7XG4gICAgICAgIHN0cmVldDogU3RyaW5nXG4gICAgICAgIGNpdHk6IFN0cmluZ1xuICAgICAgICBzdGF0ZTogU3RyaW5nXG4gICAgICAgIHppcGNvZGU6IEludFxuICAgICAgICBlbnRlclN0cmVldCgpXG4gICAgICAgIGVudGVyQ2l0eSgpXG4gICAgICAgIGVudGVyU3RhdGUoKVxuICAgICAgICBlbnRlclppcGNvZGUoKVxuXHR9XG5cblx0Y2xhc3MgUHJvZHVjdHtcbiAgICAgICAgcHJvZHVjdElEOiBJbnRcbiAgICAgICAgcHJvZHVjdE5hbWU6IFN0cmluZ1xuICAgICAgICBwcm9kdWN0UHJpY2U6IEZsb2F0XG4gICAgICAgIGdldFByaWNlKClcbiAgICAgICAgc2V0UHJpY2UoKVxuXHR9XG5cblx0Y2xhc3MgUHVyY2hhc2VEZXRhaWx7XG4gICAgICAgIGN1c3RJRDogSW50XG4gICAgICAgIHF1YW50aXR5OiBJbnRcbiAgICAgICAgcHVyY2hhc2VEYXRlOiBEYXRlXG4gICAgICAgIHByb2R1Y3RJRDogSW50XG4gICAgICAgIGNhY3VsYXRlVG90YWxBbXQoKVxuICAgICAgICBnZW5lcmF0ZVB1cmNoYXNlTGlzdCgpXG5cdH1cblx0Y2xhc3MgRGlzY291bnR7XG4gICAgICAgIGRpc2NvdW50VHlwZVxuICAgICAgICBkaXNjb3VudFZhbHVlXG4gICAgICAgIFNlbGVjdERpc2NvdW50KClcblx0fVxuXG5cdGNsYXNzIEJpbGx7XG4gICAgICAgIHBheWFibGVBbXRcbiAgICAgICAgY2FjdWxhdGVQYXlhYmxlQW10KClcbiAgICAgICAgZ2VuZXJhdGVCaWxsKClcblx0fVxuICAgICAgICBcbiAgIGNsYXNzIFBheW1lbnRDb3VudGVye1xuICAgICAgIDw8aW50ZXJmYWNlPj5cbiAgICAgICAgY2FjdWxhdGVQYXlhYmxlQW10KClcbiAgICAgICAgZ2VuZXJhdGVCaWxsKClcbiAgICB9XG4gICIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In19) # Câu 3 ## Sequence Diagram ```mermaid sequenceDiagram participant Customer participant Search Page participant Search Results Page participant Catalog participant Search Results activate Customer Note left of Customer: The Customer specifies an author <br/> on the Search Page and then <br/>presses the Search button. Customer ->>+ Search Page: 1:onsearch(author) Note left of Customer: The system validates the <br/> Customer's search criterial. Search Page ->> Search Page: 1.1:validateSearchCriteria() alt author entered Note left of Customer: If author is entered, the System <br/>searches the Catalog for books <br/>assoicated with the specified author. Search Page ->> Catalog: 1.2:searchByAuthor(author) activate Catalog Catalog ->> Search Results: 1.2.1:create() activate Search Results Note left of Customer: When the search is complete, the <br/>system displays the search results on <br/>the Search Results Page. Search Results ->> Search Results Page: 1.2.1.1:display() deactivate Search Results activate Search Results Page deactivate Search Results Page else author not entered deactivate Catalog Note left of Customer: If the Customer did not enter the <br/>name of an author before pressing <br/>the Search button, the System displays <br/>an error message. Search Page ->>- Search Page: 1.3:displayErrorMessage() end deactivate Customer ``` ## Chú thích: ``` - Chưa viết được note ra ngoài khu vực alt ``` # Câu 4 ## State Diagram **ATM State Machine Diagram** ```mermaid stateDiagram Idl: Idle state VerifyAccount{ VerC: VerifyCard CV: CardValid VP: VerifyPin PIC: PinIncorrect PC: PinCorrect CV --> VP VerC --> CardValid CardValid --> CV : [cardValid] VP --> PinCorrect PinCorrect --> PIC : [else] PinCorrect --> PC: [PINValid] PIC --> VP: [tries < maxTries]/tries++ VP: pinSubmitted / VP: checkPin / VP: returnCard / VerC: cardSubmitted / VerC: readCard / VerC: returnCard / } PR: PrintReceipt DM: DispenseMoney AAc: AccountActions DM --> PR AAc --> DM AAc --> PR DM --> TransactionComplete PR --> TransactionComplete [*] --> Idl Idl --> VerifyAccount TransactionComplete --> Idl ``` ## Chú thích: ``` - Thiếu chuyển trạng thái từ CardValid --> Idle ```