C언어 방향키로 메뉴 선택
다은
질문 제목 : c언어 방향키로 메뉴 선택햇을시 문제질문 내용 :
일단 방향키로 메뉴를 선택하는것을 구현햇는데
실행은 되지만 약간 버그?같은게 잇네요..
직접 실행해 보시고 봐주세요 ㅠㅠ
//은행 프로그램입니다.
#include stdio.h
#include string.h
#include stdlib.h
#include conio.h
static int deposit;//전역변수 deposit을 선언
static int balance;
static int defreyal;
#define right 77
#define left 75
#define up 72
int a;
typedef struct info { //구조체 선언
char name[15];
char id[15];
char id2[15]; //로그인할때 id확인에 사용할 변수
char pw[15];
char pw2[15]; //패스워드 확인에 사용할 변수
char adr[50]; //주소
char tel[15]; //전화번호
char account[20];
}in;
in a;
int print_log() {
printf( ┌──────┐\n);
printf(ㅡ│ 로그인* │ㅡ\n);
printf( └──────┘\n);
printf( ┌──────┐\n);
printf(ㅡ│ 회원가입 │ㅡ\n);
printf( └──────┘\n);
printf( ┌──────┐\n);
printf(ㅡ│ 종료 │ㅡ\n);
printf( └──────┘\n);
a=getch();
switch(a) {
case right:
fflush(stdin);
system(cls);
print_regis();
break;
case left:
fflush(stdin);
system(cls);
print_end();
break;
case up:
fflush(stdin);
system(cls);
print_login();
break;
default :
printf(오른,왼,위쪽 방향키만 입력이 가능합니다.\n);
print_log();
fflush(stdin);
break;
}
}
print_regis() {
printf( ┌──────┐\n);
printf(ㅡ│ 로그인 │ㅡ\n);
printf( └──────┘\n);
printf( ┌──────┐\n);
printf(ㅡ│ 회원가입* │ㅡ\n);
printf( └──────┘\n);
printf( ┌──────┐\n);
printf(ㅡ│ 종료 │ㅡ\n);
printf( └──────┘\n);
a=getch();
switch(a) {
case right:
fflush(stdin);
system(cls);
print_end();
break;
case left:
fflush(stdin);
system(cls);
print_log();
break;
case up:
fflush(stdin);
system(cls);
print_register();
break;
default :
fflush(stdin);
printf(오른,왼,위짜,왼,위쪽 방향키만 입력이 가능합니다.\n);
print_log();
break;
}
}
print_end() {
printf( ┌──────┐\n);
printf(ㅡ│ 로그인 │ㅡ\n);
printf( └──────┘\n);
printf( ┌──────┐\n);
printf(ㅡ│ 회원가입 │ㅡ\n);
printf( └──────┘\n);
printf( ┌──────┐\n);
printf(ㅡ│ 종료* │ㅡ\n);
printf( └──────┘\n);
a=getch();
switch(a) {
case right:
fflush(stdin);
system(cls);
print_log();
break;
case left:
fflush(stdin);
system(cls);
print_regis();
break;
case up:
fflush(stdin);
printf(종료합니다.\n);
break;
default :
fflush(stdin);
printf(오른,왼,위쪽 방향키만 입력이 가능합니다.\n);
print_log();
break;
}
}
print_menu() {
printf(오른쪽 방향키를 눌러서 원하는 메뉴를 선택해 위쪽 방향키를 누르십시오.\n);
print_log();
}
print_register() {//회원가입창을 호출해주는print_register함수 선언&정의
printf(\t\t\t ┏━━━━━━┓\n);
printf(\t\t\t ┃※회원가입※┃\n);
printf(\t\t\t ┗━━━━━━┛\n);
printf(당신의 이름을 입력해 주십시오 :);
scanf(%s, a.name);
printf(당신이 사용하실 id를 입력해 주십시오 :);
scanf(%s, a.id);
printf(당신이 사용하실 패스워드를 입력해 주십시오 :);
scanf(%s, a.pw);
system(cls);
printf(입력이 완료되엇습니다. 메뉴로 돌아갑니다.\n);
main();//모든 입력을 받은 후 메인메뉴로 돌아감
}
print_login() {
printf(\t\t\t ┏━━━━━━┓\n);
printf(\t\t\t ┃※로그인※ ┃\n);
printf(\t\t\t ┗━━━━━━┛\n);
printf(id를 입력해 주세요 :);
scanf(%s, &a.id2);
printf(패스워드를 입력해 주세요 :);
scanf(%s, &a.pw2);
if(strcmp(a.id, a.id2)!=0)//회원가입시 id와 로그인시 입력한 id를(문자열을) 검사해서 0이아닌 수가나오면 로그인 실패
{
printf(id를 확인하여 주십시오.\n);
print_menu();
}
if(strcmp(a.pw, a.pw2)!=0) //회원가입시 pw와 로그인시 입력한 pw를(문자열을) 검사해서 0이아닌 수가나오면 로그인 실패
{
printf(패스워드를 확인하여 주십시오.\n);
print_menu();
}
if(strcmp(a.id, a.id)==0 && strcmp(a.pw, a.pw2)==0) { //id와 pw모두 일치하여 0이 나올시 로그인 성공
printf(로그인 성공\n);
}
}
void print_account() {
int num2;
int num;
printf(\t\t\t ┏━━━━━━━━━┓\n);
printf(\t\t\t ┃고객님!환영합니다!┃\n);
printf(\t\t\t ┗━━━━━━━━━┛\n);
printf(\t\t\t =======================\n);
printf(\t\t\t\t -menu- \n);
printf(\t\t\t -----------------------\n);
printf(\t\t\t\t 1.계좌생성 \n);
printf(\t\t\t\t 2.계좌조회 \n);
printf(\t\t\t\t 3.계좌입금 \n);
printf(\t\t\t\t 4.계좌출금 \n);
printf(\t\t\t =======================\n);
printf(\t\t\t\t [ ]\b\b\b);
scanf(%d, &num);
switch(num) {
case 1:
if(strlen(a.account)==5) {
printf(이미 계좌가 있습니다. 기존 계좌를 사용해 주세요\n);
print_account();
}
printf(비밀번호를 입력해 주십시오 :);
scanf(%s, &a.pw);
if(strcmp(a.pw, a.pw2)!=0) {
printf(패스워드를 확인해 주십시오.\n);
print_account();
}
printf(당신의 계좌번호를 5자로 입력하십시오(-없이숫자만) :);
scanf(%s, a.account);
if(strlen(a.account)!=5)
{
printf(5자로 입력해 주십시오\n);
print_account();
}
printf(당신의 계좌번호는 %s입니다.\n,a.account);
printf(메인 메뉴로 가시려면 1번을, 계좌메뉴로 가시려면 2번을눌러주세요(이외의 숫자입력시 무조건계좌메뉴로 이동) :);
scanf(%d, &num2);
switch(num2) {
case 1:
print_menu();
case 2:
print_account();
default :
printf(1,2가 아닌 숫자를 입력하셧습니다. 계좌메뉴로 이동합니다.);
print_account();
}
case 2:
if(strlen(a.account)!=5)//a.account 문자열의 길이를 검사해서 5자가아니면(여기서 용도는 생성을 햇는지 안햇는지 확인)계좌 없음으로 판단
{
system(cls);
printf(계좌가 없습니다. 계좌를 생성해 주십시오.\n);
print_account();
}
printf(당신의 계좌번호는 :%s\n, a.account);
printf(당신의 계좌에 남은 금액은 :%d\n, balance);
printf(메인 메뉴로 가시려면 1번을, 계좌메뉴로 가시려면 2번을눌러주세요(이외의 숫자입력시 무조건계좌메뉴로 이동) :);
scanf(%d, &num2);
switch(num2) {
case 1:
print_menu();
break;
case 2:
print_account();
break;
default :
printf(1,2가 아닌 숫자를 입력하셧습니다. 계좌메뉴로 이동합니다.\n);
print_account();
break;
}
case 3:
if(strlen(a.account)!=5)
{
system(cls);
printf(계좌가 없습니다. 계좌를 생성해 주십시오.\n);
print_account();
}
printf(입금할 금액을 입력하십시오 :);
scanf(%d, &deposit);
balance=balance+deposit;//잔액(balance)은 잔액+입금한 금액(deposit)
printf(입금이 완료되엇습니다. 잔액은 %d원 입니다.\n, balance);
print_account();
break;
case 4:
if(strlen(a.account)!=5)
{
system(cls);
printf(계좌가 없습니다. 계좌를 생성해 주십시오.\n);
print_account();
}
printf(출금할 금액을 입력하여 주십시오 :);
scanf(%d, &defreyal);
if(balance=defreyal) {//잔액이 출금할 금액(degreyal)보다 적으면 실패
printf(잔액이 출금할 금액보다 많습니다.\n);
print_account();
}
balance=balance-defreyal;//잔액(balance)은 잔액-출금한 금액(defreyal)
printf(출금이 완료되엇습니다. 잔액은 %d원입니다.\n, balance);
print_account();
break;
default :
printf(잘못된 입력입니다.\n);
print_account();
break;
}
}
main() {
print_menu();
}