Moortiii icon

C - ATM Machine

Moortiii | PRO | 10/15/17 11:03:35 PM UTC | 0 ⭐ | 423 👁️ | Never ⏰ | []
C |

6.74 KB

|

None

|

0 👍

/

0 👎

#include <stdio.h>
#include <string.h>
#include "bank.h"
 
// TO:DO Create an account automatically for the user upon creating a new user
// TO:DO Handle spaces inside cell-phone input in createAccount();
// TO:DO Add area codes for cell phone
 
// Create the main bank object
void createBank( struct Bank *bank ) {
    strcpy(bank->name, "Bank of Morten");
    strcpy(bank->owner, "Morten Hauge");
    bank->customer_index = 0;
}
 
// Add a new customer to the bank
void createCustomer(struct Bank *bank) {
    struct Customer customer;
    char input[35];
    char first_name[35], last_name[35], address[35], city[35];
    long int cell;
    int zip;
 
    // Fill out necessary customer information
    printf("You are creating a new customer.\n\n");
 
    printf("Enter first name:\n\n");
    fgets(input, sizeof(input), stdin);
    input[strlen(input) - 1] = '\0';
    sscanf(input, "%s", first_name);
    strcpy(customer.first_name, first_name);
 
    printf("Enter last name:\n\n");
    fgets(input, sizeof(input), stdin);
    input[strlen(input) - 1] = '\0';
    sscanf(input, "%s", last_name);
    strcpy(customer.last_name, last_name);
 
    printf("Enter address:\n\n");
    fgets(input, sizeof(input), stdin);
    input[strlen(input) - 1] = '\0';
    sscanf(input, "%30[^\n]", address);
    strcpy(customer.address, address);
 
    printf("Enter zip:\n\n");
    fgets(input, sizeof(input), stdin);
    input[strlen(input) - 1] = '\0';
    sscanf(input, "%i", &zip);
    customer.zip = zip;
 
    printf("Enter city:\n\n");
    fgets(input, sizeof(input), stdin);
    input[strlen(input) - 1] = '\0';
    sscanf(input, "%s", city);
    strcpy(customer.city, city);
 
    printf("Enter cell number:\n\n");
    fgets(input, sizeof(input), stdin);
    input[strlen(input) - 1] = '\0';
    sscanf(input, "%li", &cell);
    customer.cell = cell;
 
    customer.num_accounts = 0;
    printf("\n"); // For cleaner formatting
 
    bank->customers[bank->customer_index] = customer;
    bank->customer_index += 1; // The next customer now gets a unique ID
}
 
// Add a new bank account to an already existing user, each user can have 10 accounts
void createAccount( struct Bank *bank ) {
    printf("You have chosen to create a new account\n\n");
    listCustomers( bank );
    printf("Please enter a customer id:\n\n");
    int id = promptForId();
    char input[35], name[35];
 
    if(id > bank->customer_index) {
        printf("There is no customer with that ID");
    } else {
        struct Account account;
        struct Customer customer = bank->customers[id];
        printf("Enter account name:\n\n");
        fgets(input, sizeof(input), stdin);
        input[strlen(input) - 1] = '\0';
        sscanf(input, "%30[^\n]", name);
 
        strcpy(account.account_type, name);
        account.owner_id = customer.id;
        account.balance = 1000;
        customer.accounts[customer.num_accounts] = account;
        bank->customers[id] = customer;
        customer.num_accounts += 1;
 
        printf("\n"); // For cleaner formatting
    }
}
 
// Print information about a given user
void printCustomer( struct Bank *bank ) {
    printf("You have chosen to print information about a customer\n\n");
    listCustomers( bank );
    printf("Please enter a customer id:\n\n");
    int id = promptForId();
 
    if(id >= bank->customer_index) {
        printf("There is no customer with that id\n");
    } else {
        struct Customer customer = bank->customers[id];
        printf("First name: %s\n", customer.first_name);
        printf("Last name: %s\n", customer.last_name);
        printf("Mobile: %li\n", customer.cell);
        printf("Address: %s\n", customer.address);
        printf("Zip Code: %i\n", customer.zip);
        printf("\n"); // For cleaner formatting
    }
}
 
// Print information about a given account
void printAccount( struct Bank *bank ) {
    printf("You have chosen to print information about an account\n\n");
    listCustomers( bank );
    printf("Please enter a customer id:\n\n");
    int id = promptForId();
 
    if(id >= bank->customer_index) {
        printf("There is no customer with that id\n");
    } else {
        struct Customer customer = bank->customers[id];
        printf("Please enter an account number\n\n");
        int account_id = promptForId();
        if(account_id > customer.num_accounts) {
            printf("There is no account with that id\n\n");
        } else {
            struct Account account = customer.accounts[account_id];
            printf("Account type: %s\n", account.account_type);
            printf("Balance: %g\n", account.balance);
            printf("Account owner: %s %s", customer.first_name, customer.last_name);
            printf("\n"); // For cleaner formatting
        }
    }
}
 
// List all current customers of the bank
void listCustomers( struct Bank *bank ) {
    printf("Customers:\n");
    for(int i = 0; i < bank->customer_index; i++) {
        struct Customer customer = bank->customers[i];
        printf("[%i]: %s %s\n", i, customer.first_name, customer.last_name);
    }
    printf("\n");
}
 
// Ask the user to enter an id and returns it - can be used for customer id, account id etc.
int promptForId() {
    char id_input[20];
    int id = 0;
    fgets(id_input, sizeof(id_input), stdin);
    id_input[strlen(id_input) - 1] = '\0';
    sscanf(id_input, "%i", &id);
    return id;
}
 
// Main loop of the program - might consider having no arguments and creating the bank inside it directly
void bankChoiceLoop( struct Bank *bank ) {
    createBank ( bank );
    int user_answer;
    char user_input[15];
 
    do {
        printf("1. Create new customer\n");
        printf("2. Create new account\n");
        printf("3. Show customer information\n");
        printf("4. Show account information\n");
        printf("5. Exit the program\n");
        printf("\n"); // For cleaner formatting
        fgets(user_input, sizeof(user_input), stdin);
        user_input[strlen(user_input) - 1] = '\0';
        sscanf(user_input, "%i", &user_answer);
 
        switch(user_answer) {
            case 1:
                createCustomer( bank );
                break;
            case 2:
                createAccount( bank );
                break;
            case 3:
                printCustomer( bank );
                break;
            case 4:
                printAccount( bank );
                break;
            case 5:
                printf("You have chosen to exit the program\n");
                break;
            default: // Handle wrong input from the user
                printf("Something went wrong, please review your input\n\n");
                continue;
        }
    } while(user_answer != 5);
}

Comments