-
C언어로 만든 간단한 온라인 은행 프로그램C언어 기초/C언어 연습 2021. 8. 30. 00:07
입출금, 계좌 계설, 잔액 조회 기능을 가진 은행 프로그램
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdbool.h> #include <Windows.h> #include <string.h> #define SIZE 19 /* 사용자 구조체 관리 */ struct Bank_User { char name[20]; char account[20]; int balance; }; /* 구조체 초기화 */ struct Bank_User BUser[10] = { {"None", "None", 0}, {"None", "None", 0}, {"None", "None", 0}, {"None", "None", 0}, {"None", "None", 0}, {"None", "None", 0}, {"None", "None", 0}, {"None", "None", 0}, {"None", "None", 0}, {"None", "None", 0}, }; /* 함수 선언 */ int Dposit(char name[20], char account[20], int money); // 입금 int Withdraw(char name[20], char account[20], int money); // 출금 void Inquiry(char name[20], char account[20]); // 잔액조회 void make_Account(); // 계좌 계설 /* 전역변수 설정 */ char answer[5] = ""; char answer1[4] = "YES"; char answer2[3] = "NO"; /* main 함수 */ int main() { char menu[20]; int d_money; // 입출금액 char name[20]; // 고객 이름 char account[20]; int nmenu; // 메뉴 선택 문자와 숫자 구별하기 위한 변수 while (1) { printf(" ========================================================================\n"); printf(" [ 1 ~ 5 ] 메뉴를 선택해 주세요!\n [ 1. 입금 ], [ 2. 출금 ], [ 3. 잔액조회 ], [ 4. 계좌 계설 ], [ 5. 종료 ] : "); scanf_s(" %s", &menu, sizeof(SIZE)); printf("\n\n"); // 메뉴입력 정상적으로 입력 됐는지 확인 nmenu = atoi(menu); // 문자로 입력된 메뉴를 atoi함수를 써서 숫자로 바꿔서 입력 if (nmenu < 1 || nmenu > 5 || isdigit(*menu) == 0) { // 범위 내 숫자인지, menu가 숫자가 아닌지 확인 printf(" 메뉴를 잘못 입력하셨습니다.\n\n"); continue; } // 입금(1) 선택 if (nmenu == 1) { printf(" 입금자명을 입력하세요: "); scanf_s(" %s", &name, SIZE); printf("\n"); printf(" 계좌번호를 입력하세요: "); scanf_s(" %s", &account, SIZE); printf("\n"); printf(" 입금할 금액을 입력하세요: "); scanf_s(" %d", &d_money); printf("\n"); printf(" %s, %s, %d", name, account, d_money); // 입금 처리하기 위한 함수 호출 Dposit(name, account, d_money); } // 출금(2) 선택 else if (nmenu == 2) { printf(" 출금자명을 입력하세요: "); scanf_s(" %s", &name, SIZE); printf("\n\n"); printf(" 계좌번호를 입력하세요: "); scanf_s(" %s", &account, SIZE); printf("\n\n"); printf(" 출금할 금액을 입력하세요: "); scanf_s(" %d", &d_money); printf("\n\n"); // 출금 처리하기 위한 함수 호출 Withdraw(name, account, d_money); } // 잔액조회(3) 선택 else if (nmenu == 3) { printf(" 본인 이름을 입력하세요: "); scanf_s(" %s", &name, SIZE); printf("\n"); printf(" 계좌번호를 입력하세요: "); scanf_s(" %s", &account, SIZE); printf("\n"); // 잔액조회 처리하시 위한 함수 호출 Inquiry(name, account); } // 계좌계설(4) 선택 else if (nmenu == 4) make_Account(); // 종료(5) 선택 else if (nmenu == 5) { printf(" 3초 뒤 프로그램을 종료합니다.\n"); Sleep(3000); printf(" Good bye!\n"); exit(0); } } return 0; } // 입금 int Dposit(char name[20], char account[20], int money) { bool chk = false; // bool : 참(0), 거짓(1) 을 나타내는 함수 char tmp[20]; int i; int res; printf("\n"); for (i = 0; i < 10; i++) { strcpy(tmp, BUser[i].account); if (strcmp(tmp, account) == 0) // 두 문자열이 같은 경우(0) { chk = true; break; } } // 계좌가 존재할 때: 구조체 자료에 입금액 더함 if (chk) { BUser[i].balance = BUser[i].balance + money; printf("\n [ %s ]님의 [ %s ]계좌에 [ %d ]원을 입금하여 \n 통장 잔액이 [ %li ]원이 되었습니다.\n\n", BUser[i].name, BUser[i].account, money, BUser[i].balance); } // 계좌가 존재하지 않을 때: 계좌 계설 함수 실행 else { printf(" 계좌가 존재하지 않습니다.\n 계좌를 새로 만드시겠습니까? ( YES | NO ) "); scanf_s(" %s", &answer, 4); printf("\n\n"); res = strcmp(answer, answer1); if (res == 0) { printf(" 계좌를 계설하겠습니다.\n"); make_Account(); // 계좌 계설 함수 호출 } else if (strcmp(answer, answer2) == 0) { printf(" 프로그램을 종료합니다.\n"); exit(0); } else { printf(" YES 와 NO로 입력해 주세요 \n"); } } return 0; } // 출금 int Withdraw(char name[20], char account[20], int money) { bool chk = false; char tmp[20]; int i; int res; int tmoney; printf("\n"); for (i = 0; i < 10; i++) { strcpy(tmp, BUser[i].account); if (strcmp(tmp, account) == 0) { chk = true; break; } } // 계좌가 존재할 때: 구조체 자료에 출금액 빼기 if (chk) { if (BUser[i].balance >= money) { printf(" [ %s ]님의 [ %s ]계좌에서 금액 [ %d ]원이 출금 되었습니다.\n", BUser[i].name, BUser[i].account, money); BUser[i].balance -= money; printf("\n [ %s ]님의 [ %s ]계좌에서 [ %d ]원을 출금하여 \n 통장 잔액이 [ %d ]원이 되었습니다.\n\n", BUser[i].name, BUser[i].account, money, BUser[i].balance); } else { tmoney = money - BUser[i].balance; printf(" [ %s ]님의 [ %s ]계좌에 잔액이 [ %d ]원 부족합니다.\n", BUser[i].name, BUser[i].account, tmoney); } return 0; } // 계좌가 존재하지 않을 때: 계좌 계설 함수 실행 else { printf(" 계좌가 존재하지 않습니다.\n 계좌를 새로 만드시겠습니까? ( YES | NO ) "); scanf_s(" %s", &answer, 4); printf("\n\n"); res = strcmp(answer, answer1); if (res == 0) { printf(" 계좌를 계설하겠습니다.\n"); make_Account(); // 계좌 계설 함수 호출 } else if (strcmp(answer, answer2) == 0) { printf(" 프로그램을 종료합니다.\n"); exit(0); } else { printf(" YES 와 NO로 입력해 주세요 \n"); } } return 0; } // 잔액 조회 void Inquiry(char name[20], char account[20]) { int i; bool chk = false; char tmp[20]; char answer[20]; printf("\n"); for (i = 0; i < 10; i++) { strcpy(tmp, BUser[i].account); if (strcmp(tmp, account) == 0) { chk = true; } else continue; if (chk) { printf(" ----------------------------------------------------------------------------\n"); printf(" [ %s ]님의 [ %s ]계좌에 남아있는 잔액은 [ %d ]원 입니다.\n\n", BUser[i].name, BUser[i].account, BUser[i].balance); } else { printf(" 계좌가 존재하지 않습니다.\n 계좌를 새로 만드시겠습니까? ( YES | NO ) "); scanf_s(" %s\n", &answer, sizeof(SIZE)); if (answer == "YES\0") make_Account(); else exit(0); } } } // 계좌 계설 void make_Account() { for (int i = 0; i < 10; i++) { if (strcmp(BUser[i].account, "None") == 0) { printf(" 이름을 입력하세요: "); scanf_s(" %s", &BUser[i].name, SIZE); printf("\n"); printf(" 계좌를 입력하세요: "); scanf_s(" %s", &BUser[i].account, SIZE); printf("\n"); printf(" 신설된 계좌에 입금하실 금액을 입력해주세요: "); scanf_s(" %d", &BUser[i].balance); printf("\n"); printf("\n [ %s ]님의 [ %s ]계좌를 개설하였습니다.\n 통장잔액은 [ %d ]원 입니다.\n\n", BUser[i].name, BUser[i].account, BUser[i].balance); break; } } }
코딩도리 님께서 블로그에 올리신 코드 내용을 바탕으로 코드를 짰습니다.
추가하면 좋을 것 같은 기능에는
- 비밀번호 입력하는 단계
- 만든 계좌 저장시키는 기능
- 계좌 삭제 기능
- 입출금 기록 저장 기능
이 있습니다. 후에 비슷한 코드를 작성해야 한다면 이 코드도 같이 수정하면 좋을 것 같네요!
작성하면서 가장 오래 고민한 점은 scanf_s를 사용하면서 입력버퍼의 문제 인해 값들이 밀리는 것 이었습니다.
그래서 %앞에 공백문자를 넣고, 같은 줄에 \n를 입력하면 오류가 발생하여 따로 printf() 를 활용하여 입력하는 방법으로 해결했습니다.
ex)
scanf_s(" %s", 변수);
printf("\n");
이 부분에서 아쉬웠던 점은 줄바꿈 문자를 따로 입력한 것입니다. 해결 방법을 찾아 다시 업로드 해보도록 하겠습니다 :)
'C언어 기초 > C언어 연습' 카테고리의 다른 글
C언어로 만든 간단한 행맨 게임 (0) 2021.11.06 C언어 공룡 점프 게임 (0) 2021.08.31 C언어로 만든 간단한 프로그램 1 (0) 2021.08.26