Skip to content
Case Study · Q1

Q.A bank is a financial institution which is involved in borrowing and lending of money. With advancement in technology, online banking, also known as internet banking allows customers of a bank to conduct a range of financial transactions through the bank’s website anytime, anywhere. As part of initial investigation you are suggested to:
• Collect a Bank’s application form. After careful analysis of the form, identify the information required for opening a savings account. Also enquire about the rate of interest offered for a savings account.
• The basic two operations performed on an account are Deposit and Withdrawal. Write a menu driven program that accepts either of the two choices of Deposit and Withdrawal, then accepts an amount, performs the transaction and accordingly displays the balance. Remember every bank has a requirement of minimum balance which needs to be taken care of during withdrawal operations. Enquire about the minimum balance required in your bank.
• Collect the interest rates for opening a fixed deposit in various slabs in a savings bank account. Remembers rate may be different for senior citizens.
Finally, write a menu driven program having the following options (use functions and appropriate data types):
• Open a savings bank account
• Deposit money
• Withdraw money
• Take details such as amount and period for a Fixed Deposit and display its maturity amount for a particular customer.

Sikkim CbseNCERTSubjective· 5mImportance★★★★★est
63% · 19/30 Questions
✓ Free question

A bank account is a natural dictionary record: accounts[acc_no] = {"name":…, "balance":…, "senior":…}.

Deposit adds to the balance; withdrawal must first check balance - amount >= MIN_BALANCE; an FD's maturity uses quarterly compounding: A = P * (1 + r/400) ** (4*t).

1. Information required to open a savings account (form analysis)

A typical savings-account application form asks for:

  • Personal details — full name, date of birth, father's/mother's name, gender.
  • Contact details — address, mobile number, e-mail.
  • KYC documents — PAN number and Aadhaar (identity + address proof), photograph, signature.
  • Account preferences — type of account, mode of operation (single/joint), nominee details.
  • Initial deposit amount.

Rate of interest: it differs from bank to bank and changes over time — most large Indian banks currently offer roughly 2.5%–4% per annum on savings accounts. You must enquire at your bank for the exact current rate (that enquiry is itself part of this exercise).

2. Minimum balance and 3. FD slabs (enquiry results, used as program data)

Banks require a minimum balance (commonly ₹500–₹10,000 depending on bank and branch type) — a withdrawal that would drop the balance below it must be refused. FD rates rise with tenure and are typically +0.50% for senior citizens. The values below are illustrative program data — replace them with the rates your own bank quotes:

TenureRegular (p.a.)Senior citizen (p.a.)
under 1 year5.50%6.00%
1 – under 3 years6.50%7.00%
3 years and above7.00%7.50%

4. The integrated menu-driven program

MIN_BALANCE = 1000        # per our bank's rule — change to your bank's value

def fd_rate(years, senior):
    """Interest slab (% p.a.) by tenure; +0.5% for senior citizens."""
    if years < 1:
        rate = 5.5
    elif years < 3:
        rate = 6.5
    else:
        rate = 7.0
    return rate + 0.5 if senior else rate

def open_account(accounts):
    acc_no = int(input("New account number : "))
    if acc_no in accounts:
        print("That account number already exists.")
        return
    name = input("Account holder name: ")
    senior = input("Senior citizen (y/n): ").lower() == "y"
    amount = float(input(f"Initial deposit (min {MIN_BALANCE}): "))
    if amount < MIN_BALANCE:
        print("Initial deposit must cover the minimum balance.")
        return
    accounts[acc_no] = {"name": name, "balance": amount, "senior": senior}
    print(f"Account {acc_no} opened for {name} with balance {amount}.")

def get_account(accounts):
    acc_no = int(input("Account number: "))
    if acc_no not in accounts:
        print("No such account.")
        return None
    return acc_no

def deposit(accounts):
    acc_no = get_account(accounts)
    if acc_no is None:
        return
    amount = float(input("Amount to deposit: "))
    if amount <= 0:
        print("Amount must be positive.")
        return
    accounts[acc_no]["balance"] += amount
    print(f"Deposited. New balance: {accounts[acc_no]['balance']}")

def withdraw(accounts):
    acc_no = get_account(accounts)
    if acc_no is None:
        return
    amount = float(input("Amount to withdraw: "))
    if accounts[acc_no]["balance"] - amount < MIN_BALANCE:
        print(f"Denied: balance cannot fall below minimum {MIN_BALANCE}.")
    else:
        accounts[acc_no]["balance"] -= amount
        print(f"Withdrawn. New balance: {accounts[acc_no]['balance']}")

def fixed_deposit(accounts):
    acc_no = get_account(accounts)
    if acc_no is None:
        return
    p = float(input("FD amount   : "))
    t = float(input("Period (yrs): "))
    r = fd_rate(t, accounts[acc_no]["senior"])
    maturity = p * (1 + r / 400) ** (4 * t)     # compounded quarterly
    print(f"Rate applied: {r}% p.a. (compounded quarterly)")
    print(f"Maturity amount after {t} years: {round(maturity, 2)}")

def main():
    accounts = {}
    while True:
        print("\n1. Open savings account\n2. Deposit money\n3. Withdraw money"
              "\n4. Fixed Deposit maturity\n5. Exit")
        choice = input("Enter choice (1-5): ")
        if choice == "1":
            open_account(accounts)
        elif choice == "2":
            deposit(accounts)
        elif choice == "3":
            withdraw(accounts)
        elif choice == "4":
            fixed_deposit(accounts)
        elif choice == "5":
            print("Thank you for banking with us!")
            break
        else:
            print("Invalid choice.")

main()

Expected output (sample run)

1. Open savings account
2. Deposit money
3. Withdraw money
4. Fixed Deposit maturity
5. Exit
Enter choice (1-5): 1
New account number : 5001
Account holder name: Meera
Senior citizen (y/n): n
Initial deposit (min 1000): 5000
Account 5001 opened for Meera with balance 5000.0.

Enter choice (1-5): 3
Account number: 5001
Amount to withdraw: 4500
Denied: balance cannot fall below minimum 1000.

Enter choice (1-5): 2
Account number: 5001
Amount to deposit: 100000
Deposited. New balance: 105000.0

Enter choice (1-5): 4
Account number: 5001
FD amount   : 100000
Period (yrs): 2
Rate applied: 6.5% p.a. (compounded quarterly)
Maturity amount after 2.0 years: 113763.9

Enter choice (1-5): 5
Thank you for banking with us!

Why the key lines work

  • accounts[acc_no]["balance"] - amount < MIN_BALANCE — the whole point of the withdrawal rule: we test the balance after the hypothetical withdrawal, and refuse before touching the account. The balance is only mutated in the else branch.
  • p * (1 + r / 400) ** (4 * t) — Indian banks compound FDs quarterly: the annual rate r% is divided by 4 (and by 100 to make it a fraction — hence 400), and the number of compounding periods is 4 * t.
  • fd_rate(years, senior) returns the slab rate and adds the senior-citizen premium of 0.50% — one function, so the rate table lives in exactly one place.
  • Every menu option is its own function taking accounts as a parameter, as the question requires — main() only routes choices.
✓Final answer

(1) A savings-account form needs personal details, contact details, KYC (PAN/Aadhaar, photo, signature), nominee and initial deposit; savings interest varies by bank (roughly 2.5%–4% p.a. — verify with your bank). (2)–(4) The menu-driven program above opens accounts (accounts[acc_no] = {...}), deposits, withdraws only when balance − amount ≥ MIN_BALANCE, and computes FD maturity with quarterly compounding A = P(1 + r/400)^(4t), applying the tenure slab plus 0.50% extra for senior citizens — e.g. ₹1,00,000 for 2 years at 6.5% matures to ₹1,13,763.90.

Unlock everything free for 14 days

  • Full step-by-step solutions
  • Concept-first explanations
  • Methods, shortcuts & mistakes
  • PYQ mapping + timed mock tests

Full access for 14 days. No credit card required.