Bank Management System in C (Full
Source Code)
Date: 2025-06-01 12:58:21
Source Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_ACCOUNTS 100
#define MAX_TRANSACTIONS 100
typedef struct {
char type[20];
float amount;
char timestamp[30];
} Transaction;
typedef struct {
char account_number[15];
char name[50];
char account_type[10];
char pin[5];
float balance;
Transaction transactions[MAX_TRANSACTIONS];
int transaction_count;
} BankAccount;
BankAccount accounts[MAX_ACCOUNTS];
int account_count = 0;
int logged_in_user_index = -1;
// Utility Functions
char* generate_account_number() {
static char acc[15];
sprintf(acc, "9%09d", 100000000 + rand() % 900000000);
return acc;
}
char* current_time() {
static char buffer[30];
time_t now = time(NULL);
struct tm *t = localtime(&now);
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);
return buffer;
}
int find_account_index(const char *acc_num, const char *pin) {
for (int i = 0; i < account_count; i++) {
if (strcmp(accounts[i].account_number, acc_num) == 0 && strcmp(accounts[i].pin, pin)
== 0)
return i;
}
return -1;
}
int find_account_by_number(const char *acc_num) {
for (int i = 0; i < account_count; i++) {
if (strcmp(accounts[i].account_number, acc_num) == 0)
return i;
}
return -1;
}
void add_transaction(BankAccount *acc, const char *type, float amount) {
if (acc->transaction_count < MAX_TRANSACTIONS) {
Transaction *t = &acc->transactions[acc->transaction_count++];
strcpy(t->type, type);
t->amount = amount;
strcpy(t->timestamp, current_time());
}
}
// User Functions
void create_account() {
if (account_count >= MAX_ACCOUNTS) {
printf("🚫 Account limit reached!\n");
return;
}
BankAccount acc;
strcpy(acc.account_number, generate_account_number());
printf("Enter Full Name: ");
getchar();
fgets([Link], sizeof([Link]), stdin);
[Link][strcspn([Link], "\n")] = 0;
printf("Enter Account Type (Savings/Current): ");
scanf("%s", acc.account_type);
printf("Set a 4-digit PIN: ");
scanf("%s", [Link]);
printf("Enter Initial Deposit: ₹");
scanf("%f", &[Link]);
acc.transaction_count = 0;
add_transaction(&acc, "Initial Deposit", [Link]);
accounts[account_count++] = acc;
printf("✅ Account created! Account Number: %s\n", acc.account_number);
}
void login_user() {
if (logged_in_user_index != -1) {
printf("⚠️A user is already logged in.\n");
return;
}
char acc_num[15], pin[5];
printf("Enter Account Number: ");
scanf("%s", acc_num);
printf("Enter PIN: ");
scanf("%s", pin);
int idx = find_account_index(acc_num, pin);
if (idx != -1) {
logged_in_user_index = idx;
printf("✅ Welcome, %s! You are now logged in.\n", accounts[idx].name);
} else {
printf("❌ Login failed. Invalid credentials.\n");
}
}
void logout_user() {
if (logged_in_user_index == -1) {
printf("⚠️No user is currently logged in.\n");
} else {
printf("👋 Logged out from %s's account.\n", accounts[logged_in_user_index].name);
logged_in_user_index = -1;
}
}
void deposit_money() {
if (logged_in_user_index == -1) {
printf("❌ Please login first.\n");
return;
}
float amount;
printf("Enter amount to deposit: ₹");
scanf("%f", &amount);
if (amount > 0) {
BankAccount *acc = &accounts[logged_in_user_index];
acc->balance += amount;
add_transaction(acc, "Deposit", amount);
printf("₹₹%.2f deposited. New balance: ₹ %.2f\n", amount, acc->balance);
} else {
printf("❌ Invalid amount.\n");
}
}
void withdraw_money() {
if (logged_in_user_index == -1) {
printf("❌ Please login first.\n");
return;
}
float amount;
printf("Enter amount to withdraw: ₹");
scanf("%f", &amount);
BankAccount *acc = &accounts[logged_in_user_index];
if (amount > 0 && amount <= acc->balance) {
acc->balance -= amount;
add_transaction(acc, "Withdrawal", amount);
printf("₹₹%.2f withdrawn. Remaining balance: ₹ %.2f\n", amount, acc->balance);
} else {
printf("❌ Insufficient funds or invalid amount.\n");
}
}
void check_balance() {
if (logged_in_user_index == -1) {
printf("❌ Please login first.\n");
return;
}
BankAccount *acc = &accounts[logged_in_user_index];
printf("💼 Account Holder: %s\n", acc->name);
printf("₹Balance: ₹ %.2f\n", acc->balance);
}
void view_transactions() {
if (logged_in_user_index == -1) {
printf("❌ Please login first.\n");
return;
}
BankAccount *acc = &accounts[logged_in_user_index];
printf("\n📄 Transactions for %s:\n", acc->name);
for (int i = 0; i < acc->transaction_count; i++) {
printf(" - [%s] %s: ₹%.2f\n", acc->transactions[i].timestamp,
acc->transactions[i].type, acc->transactions[i].amount);
}
}
// Admin Panel
void view_all_accounts() {
if (account_count == 0) {
printf("⚠️No accounts available.\n");
return;
}
printf("\n📊 All Accounts:\n");
for (int i = 0; i < account_count; i++) {
printf(" - %s | %s | %s | ₹%.2f\n", accounts[i].account_number,
accounts[i].name, accounts[i].account_type, accounts[i].balance);
}
}
void search_account() {
char acc_num[15];
printf("Enter Account Number: ");
scanf("%s", acc_num);
int idx = find_account_by_number(acc_num);
if (idx == -1) {
printf("❌ Account not found.\n");
} else {
printf("₹Found: %s (%s), Balance ₹ %.2f\n",
accounts[idx].name, accounts[idx].account_type, accounts[idx].balance);
}
}
void delete_account() {
char acc_num[15];
printf("Enter Account Number to delete: ");
scanf("%s", acc_num);
int idx = find_account_by_number(acc_num);
if (idx == -1) {
printf("❌ Account not found.\n");
return;
}
for (int i = idx; i < account_count - 1; i++) {
accounts[i] = accounts[i + 1];
}
account_count--;
printf("✅ Account deleted.\n");
}
void admin_menu() {
char user[10], pass[10];
printf("Admin Username: ");
scanf("%s", user);
printf("Admin Password: ");
scanf("%s", pass);
if (strcmp(user, "admin") != 0 || strcmp(pass, "1234") != 0) {
printf("❌ Invalid admin credentials!\n");
return;
}
int choice;
while (1) {
printf("\n🔐 Admin Panel\n");
printf("1. View All Accounts\n");
printf("2. Search Account\n");
printf("3. Delete Account\n");
printf("4. Exit Admin Panel\n");
printf("Choice: ");
scanf("%d", &choice);
switch (choice) {
case 1: view_all_accounts(); break;
case 2: search_account(); break;
case 3: delete_account(); break;
case 4: return;
default: printf("❌ Invalid option.\n");
}
}
}
// Main Menu
void main_menu() {
srand(time(NULL));
int choice;
while (1) {
printf("\n🏦 Bank Management System\n");
printf("1. Create Account\n");
printf("2. Login\n");
printf("3. Deposit\n");
printf("4. Withdraw\n");
printf("5. Check Balance\n");
printf("6. View Transactions\n");
printf("7. Logout\n");
printf("8. Admin Login\n");
printf("9. Exit\n");
printf("Choice: ");
scanf("%d", &choice);
switch (choice) {
case 1: create_account(); break;
case 2: login_user(); break;
case 3: deposit_money(); break;
case 4: withdraw_money(); break;
case 5: check_balance(); break;
case 6: view_transactions(); break;
case 7: logout_user(); break;
case 8: admin_menu(); break;
case 9:
printf("👋 Thank you for using our bank system!\n");
exit(0);
default:
printf("❌ Invalid option. Try again.\n");
}
}
}
int main() {
main_menu();
return 0;
}