Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 10

INCLUDE Irvine32.

inc

.data
accounts DWORD 10 DUP(0) ; array to store account information
accountCount DWORD 0 ; number of accounts created

menuMsg BYTE "Bank Account Management System", 0


option1 BYTE "1. Create Account", 0
option2 BYTE "2. Deposit Money", 0
option3 BYTE "3. Withdraw Money", 0
option4 BYTE "4. Check Account Balance", 0
option5 BYTE "5. Display Account Information", 0
option6 BYTE "6. Exit", 0
promptMsg BYTE "Enter your choice: ", 0
errorMsg BYTE "Error: Invalid operation or insufficient funds.", 0
createAccountPrompt BYTE "Enter account number: ", 0
createAccountBalancePrompt BYTE "Enter initial balance: ", 0
depositPrompt BYTE "Enter account number to deposit: ", 0
depositAmountPrompt BYTE "Enter amount to deposit: ", 0
withdrawPrompt BYTE "Enter account number to withdraw: ", 0
withdrawAmountPrompt BYTE "Enter amount to withdraw: ", 0
balancePrompt BYTE "Enter account number to check balance: ", 0
infoPrompt BYTE "Enter account number to display information: ", 0
accountNotFoundMsg BYTE "Error: Account not found.", 0
insufficientFundsMsg BYTE "Error: Insufficient funds.", 0
accountCreatedMsg BYTE "Account created successfully.", 0
depositedMsg BYTE "Money deposited successfully.", 0
withdrawnMsg BYTE "Money withdrawn successfully.", 0
balanceMsg BYTE "Account balance: ", 0
accountInfoMsg BYTE "Account number: %d, Balance: %d", 0
separatorLine BYTE "+----------------------------+", 0
accountInfoMsgFormat BYTE "Account Number: ", 0
accountInfoMsgBalance BYTE ", Balance: ", 0

; Mobile interface
BY1 BYTE " _____________________________________________",0
BY2 BYTE " | | O ----- O | ____ |",0
BY3 BYTE " | 6:54 o o `---------------` .|| .|____||",0
BY4 BYTE " | |",0
BY5 BYTE " | |",0
BY6 BYTE " | |",0
BY7 BYTE " | |",0
BY8 BYTE " | |",0
BY9 BYTE " | |",0
BY10 BYTE " | |",0
BY11 BYTE " | |",0
BY35 BYTE " | |",0
BY12 BYTE " | |",0
BY36 BYTE " | |",0
BY13 BYTE " | |",0
BY14 BYTE " | |",0
BY15 BYTE " | |",0
BY16 BYTE " | |",0
BY17 BYTE " | |",0
BY18 BYTE " | |",0
BY19 BYTE " | |",0
BY20 BYTE " | |",0
BY21 BYTE " | |",0
BY22 BYTE " | |",0
BY23 BYTE " | |",0
BY24 BYTE " | |",0
BY25 BYTE " | |",0
BY26 BYTE " | |",0
BY27 BYTE " | |",0
BY28 BYTE " | |",0
BY29 BYTE " | |",0
BY30 BYTE " | |",0
BY31 BYTE " | |",0
BY32 BYTE " | _. __ __ |",0
BY33 BYTE " | |__| |__| `__| |",0
BY34 BYTE " |_____________________________________________|",0

.code
main PROC
; initialize accounts array
mov ecx, 10
mov esi, OFFSET accounts
mov eax, 0
;rep stosd

; display menu and handle user choices


loop1:
call readInt
call Clrscr
call displayMenu
call readInt
cmp eax, 1 ; create account
je createAccount
cmp eax, 2 ; deposit money
je depositMoney
cmp eax, 3 ; withdraw money
je withdrawMoney
cmp eax, 4 ; check account balance
je checkBalance
cmp eax, 5 ; display account information
je displayAccountInfo
cmp eax, 6 ; exit
je exitProgram
; invalid choice, display error message
call displayError
jmp loop1

; create account
createAccount:
; get account number
call clrscr
call displayMobileInterface
mov dh, 10
mov dl, 20
call Gotoxy
mov edx, OFFSET createAccountPrompt
call WriteString
call readInt
mov ebx, accountCount
shl ebx, 3 ; ebx = accountCount * 8
mov [accounts + ebx], eax
; get initial balance
mov dh, 11
mov dl, 20
call Gotoxy
mov edx, OFFSET createAccountBalancePrompt
call WriteString
call readInt
mov [accounts + ebx + 4], eax
inc accountCount
call crlf
mov dh, 13
mov dl, 20
call Gotoxy
mov edx, OFFSET accountCreatedMsg
call WriteString
call crlf
call crlf

jmp loop1

; deposit money
depositMoney:
; get account number
call clrscr
call displayMobileInterface
mov dh, 10
mov dl, 20
call Gotoxy
mov edx, OFFSET depositPrompt
call WriteString
call readInt
mov ebx, eax
mov esi, OFFSET accounts
mov ecx, accountCount
loop2:
cmp ebx, [esi]
je foundAccount
add esi, 8
loop loop2
; account not found, display error message
mov dh, 11
mov dl, 20
call Gotoxy
mov edx, OFFSET accountNotFoundMsg
call WriteString
call crlf
call crlf
jmp loop1
foundAccount:
; get amount to deposit
mov dh, 11
mov dl, 20
call Gotoxy
mov edx, OFFSET depositAmountPrompt
call WriteString
call readInt
add [esi+4], eax
mov dh, 13
mov dl, 20
call Gotoxy
mov edx, OFFSET depositedMsg
call WriteString
call crlf
call crlf
jmp loop1

; withdraw money
withdrawMoney:
; get account number
call clrscr
call displayMobileInterface
mov dh, 10
mov dl, 20
call Gotoxy
mov edx, OFFSET withdrawPrompt
call WriteString
call readInt
mov ebx, eax
mov esi, OFFSET accounts
mov ecx, accountCount
loop3:
cmp ebx, [esi]
je foundAccount2
add esi, 8
loop loop3
; account not found, display error message
mov dh, 11
mov dl, 20
call Gotoxy
mov edx, OFFSET accountNotFoundMsg
call WriteString
call crlf
call crlf
jmp loop1
foundAccount2:
; get amount to withdraw
mov dh, 11
mov dl, 20
call Gotoxy
mov edx, OFFSET withdrawAmountPrompt
call WriteString
call readInt
cmp eax, [esi+4]
ja insufficientFunds
; subtract amount from account balance
sub [esi+4], eax
mov dh, 13
mov dl, 20
call Gotoxy
mov edx, OFFSET withdrawnMsg
call WriteString
call crlf
call crlf
jmp loop1
insufficientFunds:
; display error message
mov dh, 13
mov dl, 20
call Gotoxy
mov edx, OFFSET insufficientFundsMsg
call WriteString
call crlf
call crlf
jmp loop1

; check account balance


checkBalance:
; get account number
call clrscr
call displayMobileInterface
mov dh, 10
mov dl, 20
call Gotoxy
mov edx, OFFSET balancePrompt
call WriteString
call readInt
mov ebx, eax
mov esi, OFFSET accounts
mov ecx, accountCount
loop4:
cmp ebx, [esi]
je foundAccount3
add esi, 8
loop loop4
; account not found, display error message
mov dh, 11
mov dl, 20
call Gotoxy
mov edx, OFFSET accountNotFoundMsg
call WriteString
call crlf
call crlf
jmp loop1
foundAccount3:
; display account balance
mov dh, 11
mov dl, 20
call Gotoxy
mov edx, OFFSET balanceMsg
call WriteString
mov eax, [esi+4]
call Writedec
call crlf
call crlf
jmp loop1

; display account information


displayAccountInfo:
; get account number
call clrscr
call displayMobileInterface
mov dh, 10
mov dl, 20
call Gotoxy
mov edx, OFFSET infoPrompt
call WriteString
call readInt
mov ebx, eax
mov esi, OFFSET accounts
mov ecx, accountCount
loop5:
cmp ebx, [esi]
je foundAccount4
add esi, 8
loop loop5
; account not found, display error message
mov dh, 11
mov dl, 20
call Gotoxy
mov edx, OFFSET accountNotFoundMsg
call WriteString
call crlf
call crlf
jmp loop1
foundAccount4:
; display account number and balance
; print a separator line
mov dh, 11
mov dl, 20
call Gotoxy
mov edx, OFFSET separatorLine
call WriteString
call crlf
call crlf
; display account information
mov dh, 13
mov dl, 20
call Gotoxy
mov edx, OFFSET accountInfoMsgFormat
call WriteString
mov eax, [esi]
call Writedec
mov edx, OFFSET accountInfoMsgBalance
call WriteString
mov eax, [esi+4]
call Writedec
call crlf
; print a separator line
mov dh, 15
mov dl, 20
call Gotoxy
mov edx, OFFSET separatorLine
call WriteString
call crlf
call crlf
jmp loop1

exitProgram:
; exit the program
ret

main ENDP

displayMenu PROC
; Display the menu options
call displayMobileInterface
mov dh, 10
mov dl, 20
call Gotoxy
mov edx, OFFSET menuMsg
call WriteString
mov dh, 11
mov dl, 20
call Gotoxy
mov edx, OFFSET option1
call WriteString
mov dh, 12
mov dl, 20
call Gotoxy
mov edx, OFFSET option2
call WriteString
mov dh, 13
mov dl, 20
call Gotoxy
mov edx, OFFSET option3
call WriteString
mov dh, 14
mov dl, 20
call Gotoxy
mov edx, OFFSET option4
call WriteString
mov dh, 15
mov dl, 20
call Gotoxy
mov edx, OFFSET option5
call WriteString
mov dh, 16
mov dl, 20
call Gotoxy
mov edx, OFFSET option6
call WriteString
mov dh, 18
mov dl, 20
call Gotoxy
mov edx, OFFSET promptMsg
call WriteString
ret
displayMenu ENDP

displayError PROC
; Display an error message
call displayMobileInterface
mov dh, 10
mov dl, 20
call Gotoxy
mov edx, OFFSET errorMsg
call WriteString
call crlf
ret
displayError ENDP

displayMobileInterface PROC
; Display the mobile-like interface
mov dh, 1
mov dl, 1
call Gotoxy
mov edx, OFFSET BY1
call WriteString
mov dh, 2
mov dl, 1
call Gotoxy
mov edx, OFFSET BY2
call WriteString
mov dh, 3
mov dl, 1
call Gotoxy
mov edx, OFFSET BY3
call WriteString
mov dh, 4
mov dl, 1
call Gotoxy
mov edx, OFFSET BY4
call WriteString
mov dh, 5
mov dl, 1
call Gotoxy
mov edx, OFFSET BY5
call WriteString
mov dh, 6
mov dl, 1
call Gotoxy
mov edx, OFFSET BY6
call WriteString
mov dh, 7
mov dl, 1
call Gotoxy
mov edx, OFFSET BY7
call WriteString
mov dh, 8
mov dl, 1
call Gotoxy
mov edx, OFFSET BY8
call WriteString
mov dh, 9
mov dl, 1
call Gotoxy
mov edx, OFFSET BY9
call WriteString
mov dh, 10
mov dl, 1
call Gotoxy
mov edx, OFFSET BY10
call WriteString
mov dh, 11
mov dl, 1
call Gotoxy
mov edx, OFFSET BY11
call WriteString
mov dh, 12
mov dl, 1
call Gotoxy
mov edx, OFFSET BY12
call WriteString
mov dh, 13
mov dl, 1
call Gotoxy
mov edx, OFFSET BY13
call WriteString
mov dh, 14
mov dl, 1
call Gotoxy
mov edx, OFFSET BY14
call WriteString
mov dh, 15
mov dl, 1
call Gotoxy
mov edx, OFFSET BY15
call WriteString
mov dh, 16
mov dl, 1
call Gotoxy
mov edx, OFFSET BY16
call WriteString
mov dh, 17
mov dl, 1
call Gotoxy
mov edx, OFFSET BY17
call WriteString
mov dh, 18
mov dl, 1
call Gotoxy
mov edx, OFFSET BY18
call WriteString
mov dh, 19
mov dl, 1
call Gotoxy
mov edx, OFFSET BY19
call WriteString
mov dh, 20
mov dl, 1
call Gotoxy
mov edx, OFFSET BY20
call WriteString
mov dh, 21
mov dl, 1
call Gotoxy
mov edx, OFFSET BY21
call WriteString
mov dh, 22
mov dl, 1
call Gotoxy
mov edx, OFFSET BY22
call WriteString
mov dh, 23
mov dl, 1
call Gotoxy
mov edx, OFFSET BY23
call WriteString
mov dh, 24
mov dl, 1
call Gotoxy
mov edx, OFFSET BY24
call WriteString
mov dh, 25
mov dl, 1
call Gotoxy
mov edx, OFFSET BY25
call WriteString
mov dh, 26
mov dl, 1
call Gotoxy
mov edx, OFFSET BY26
call WriteString
mov dh, 27
mov dl, 1
call Gotoxy
mov edx, OFFSET BY27
call WriteString
mov dh, 28
mov dl, 1
call Gotoxy
mov edx, OFFSET BY28
call WriteString
mov dh, 29
mov dl, 1
call Gotoxy
mov edx, OFFSET BY29
call WriteString
mov dh, 30
mov dl, 1
call Gotoxy
mov edx, OFFSET BY30
call WriteString
mov dh, 31
mov dl, 1
call Gotoxy
mov edx, OFFSET BY31
call WriteString
mov dh, 32
mov dl, 1
call Gotoxy
mov edx, OFFSET BY32
call WriteString
mov dh, 33
mov dl, 1
call Gotoxy
mov edx, OFFSET BY33
call WriteString
mov dh, 34
mov dl, 1
call Gotoxy
mov edx, OFFSET BY34
call WriteString
ret
displayMobileInterface ENDP

readIntt PROC
; read an integer from the keyboard
call ReadInt
ret
readIntt ENDp

END main

You might also like