본문 바로가기
-------------코딩-------------/c언어(리눅스)

c언어 은행관리 프로그램

by 탶선 2020. 10. 19.
반응형
#include<stdio.h>
#include<stdarg.h>
#include<stdlib.h>

#define START_NUM 11111111
//입출금 내역(날짜)
struct account{
 char name[100]; //예금주
 int num;    //계좌번호
 int money;   //잔액
 }account;

int u_account(){
 int a;
 do{
 system("clear");
  printf("==|y|s|==\n");
  printf("=====계좌관리=====\n");
  printf("==1번== 계좌 추가\n");
  printf("==2번== 계좌 해지\n");
  printf("==3번== 이전 메뉴\n");
     printf("==4번== 종료 \n");

  printf(":");
  scanf("%d",&a);
  switch(a){
  case 1:
   u_account_add();
   break;
  case 2:
   u_account_delete();
   break;
  case 3:
   u_main();
   break;
  case 4:
   exit(1);
 }
  }while(a !=4);
}

int u_account_add(){
 struct account;
 FILE *fp;
 int num;
 int i;
 int money=0;
 system("clear");
 fp = fopen("account","rb+");
 
 printf("추가할 계좌의 예금주를 입력하시오\n:" );
 scanf("%s",account.name);
 
 printf("추가할 계좌번호 를 입력하시오\n:" );
 scanf("%d",&num);

 account.num=num;
 account.money=money;

 fseek(fp,(num-START_NUM)*sizeof(account),SEEK_SET);
 fwrite(&account,sizeof(account),1,fp);

 for(i=0; i<100; i++)
 {
  account.name[i]='\0';
 }
 fclose(fp);
 fflush(fp);

 } 

int u_account_delete(){
 struct account;
 FILE *fp;
 int num;
 int i;
 system("clear");
 fp = fopen("account","rb+");

 printf("삭제할 계좌번호를 입력하시오\n");
 printf(":");
 scanf("%d",&num);

 fseek(fp,(num-START_NUM)*sizeof(account),SEEK_SET);
 fread(&account,sizeof(account),1,fp);
 for(i=0;i<100;i++){
 account.name[i] = '\0';
 }
 account.num = 0;
 fseek(fp,0,SEEK_SET);
 fseek(fp,(num-START_NUM)*sizeof(account),SEEK_SET);
 fwrite(&account,sizeof(account),1,fp);
 account.num = 0;
 }

int u_money(){//예금 관리 프로그램
 int a;
 do{
 system("clear");
 printf("==|y|s|==\n예금 관리\n");
 printf("==1번==입금 \n");
 printf("==2번==출금 \n");
 printf("==3번==이전 메뉴 \n");
    printf("==4번==종료 \n");
 
 printf(":");
 scanf("%d",&a);
  switch(a){
  case 1:
   u_money_input();
   break;
  case 2:
   u_money_output();
   break;
  case 3:
   u_main();
   break;
  case 4:
   exit(1);
 }
  }while(a != 3);
 }
//20160714 코딩중
int u_money_input(){
 struct account;
 FILE *fp;
 int num;
 int i;
 int imoney;
 system("clear");
 printf("==|y|s|==\n입금\n\n");

 fp = fopen("account","rb+");
 printf("입금할 계좌의 계좌번호를 입력해 주세요\n:");

 if(scanf("%d",&num) ==1) {
  fseek(fp,(num-START_NUM)*sizeof(account),SEEK_SET);
  if((fread(&account,sizeof(account),1,fp)> 0)&&(account.num !=0)) {
  printf("계좌:%d 이름:%s 잔액:%d\n",account.num,account.name,account.money);

   printf("입금할 금액을 입력해 주세요\n:");
   scanf("%d",&imoney);
   
   account.money = account.money + imoney;  
 
   fseek(fp,-sizeof(account),SEEK_CUR);
   fwrite(&account,sizeof(account),1,fp);
   }else printf("계좌: %d 없음\n",num);
 } else printf("입력오류\n");

 fclose(fp);
 fflush(fp);
}

int u_money_output(){
 struct account;
 FILE *fp;
 int num;
 int i;
 int omoney;
 system("clear");
 printf("==|y|s|==\n출금\n\n");

 fp = fopen("account","rb+");
 printf("출금할 계좌의 계좌번호를 입력해 주세요\n:");

 if(scanf("%d",&num) ==1) {
  fseek(fp,(num-START_NUM)*sizeof(account),SEEK_SET);
  if((fread(&account,sizeof(account),1,fp)>0)&&(account.num !=0)) {
  printf("계좌:%d 이름:%s 잔액: %d\n",account.num,account.name,account.money);

  printf("출금할 금액을 입력해 주세요\n:");
  scanf("%d",&omoney);

  account.money = account.money - omoney;

  fseek(fp,-sizeof(account),SEEK_CUR);
  fwrite(&account,sizeof(account),1,fp);
 }else printf("계좌: %d 없음\n",num);
}else printf("입력오류\n");
fclose(fp);
fflush(fp);

}

int u_main(){
 int a;
 do{
 system("clear");
 printf("=======ys은행=======\n");
 printf("======메인메뉴======\n");
    printf("==1번== 계좌관리 \n");
    printf("==2번== 예금관리 \n");
    printf("==3번== 이전메뉴 \n");
    printf("==4번== 종료 \n");
 printf(":");
  
 scanf("%d",&a);
 switch(a){
 case 1:
  u_account();
  break;
 case 2:
  u_money();
  break;
 case 3:
  main();
  break;
 case 4:
  exit(1);
  }
 }while(a !=3);
}

int account_print(){
 FILE *fp;
 int c;
 int num;
 char name[100];
 struct account;
 int i;
 
 system("clear");
 printf("\t==|y|s|==\n은행계좌 전체 출력\n");
  printf("계좌번호          예금주        잔액\n");
  printf("=======================================\n");
 fp = fopen("account","rb");
 
 if(fp == NULL) {
  fprintf(stderr,"파일을 불러오는데 실패\n");
 }
 while(fread(&account,sizeof(account),1,fp)){
  if(account.num==0)
    continue;
  printf("계좌번호:%d 예금주:%s 잔액:%d\n",account.num,account.name,account.money);
  
 }
fflush(fp);
fclose(fp);
 printf("\n");
}
int account_edit(){
 system("clear");
 int a;
 FILE *fp;
 int num;
 int i;
 char name[100];
 struct account;

  printf("==|y|s|==\n계좌 수정\n");
 fp = fopen("account","rb+");
 printf("수정할 계좌의 계좌번호를 입력하세요\n입력:");
 
 if(scanf("%d",&num) ==1) {
  fseek(fp,(num-START_NUM)*sizeof(account), SEEK_SET);
  
  if((fread(&account,sizeof(account),1,fp)>0) &&(account.num !=0))
           printf("계좌: %8d 이름: %4s\n", account.num, account.name);
    //여기 이상해 수정   
  else printf("계좌 %d 없음\n", num);
  
  printf("수정할 계좌의 예금주를 입력하시오\n:");
  scanf("%s",account.name);
  
  fseek(fp,(num-START_NUM)*sizeof(account),SEEK_SET);

  fwrite(&account,sizeof(account),1,fp);

   for(i=0; i<100; i++)
   {
    account.name[i]='\0';
   }

  account.num = num;
 }
 fclose(fp);
 fflush(fp);
}

int account_search(){
 FILE *fp;
 int num;
 char name[100];
 struct account;
 system("clear");
 printf("==계좌검색==\n");
 
 fp = fopen("account","rb");

      printf("계좌번호\n입력: ");
      if (scanf("%d", &num) == 1) {
         fseek(fp, (num - START_NUM) *sizeof(account),  SEEK_SET);
         if ((fread(&account, sizeof(account), 1, fp) > 0)   &&  (account.num != 0))
            printf("\n계좌:%8d 이름:%4s 잔액:%d\n", account.num, account.name,account.money);
          else printf("계좌 %d 없음\n", num);
      }

 fclose(fp);
}

int manager(){
 int a;
 system("clear");
 do{
 printf("==|y|s|==\n");
 printf("관리자 프로그램\n");
 printf("==1번==모든 계좌출력 \n");
 printf("==2번==계좌 수정 \n");
 printf("==3번==계좌 검색 \n");
 printf("==4번==초기 메뉴로 돌아가기 \n");
 printf("==5번==종료 \n");
 printf(":");
 scanf("%d",&a);
 
 switch(a){
  case 1: 
   account_print();
   break;
  case 2:
   account_edit();
   break;
  case 3:
   account_search();
   break;
  case 4:
   main();
   break;
  case 5:
   exit(1);
  
 }
  }while(a !=5);
}
int main(){
 int b;
 do{
  system("clear");
  printf(" ===============ys 은행================\n\n");
     printf(" □□□□□□□■■□□□□□□■■□□□□□■■■□□□□□□□□□□□□□\n");
      printf(" □□□□□□□■■□□□□□□■■□□□□■■■■□□□□□□□□□□□□□\n");
     printf(" □□□□□□□□■■□□□□■■□□□□■■□□□□□□□□□□□□□□□□\n");
     printf(" □□□□□□□□□■■□□■■□□□□□■■□□□□□□□□□□□□□□□□\n");
     printf(" □□□□□□□□□□■■■■□□□□□□■■■■□□□□□□□□□□□□□□\n");
     printf(" □□□□□□□□□□□■■□□□□□□□□■■■■□□□□□□□□□□□□□\n");
     printf(" □□□□□□□□□□□■■□□□□□□□□□□■■□□□□□□□□□□□□□\n");
     printf(" □□□□□□□□□□□■■□□□□□□□□□□■■□□□□□□□□□□□□□\n");
     printf(" □□□□□□□□□□□■■□□□□□□□□□■■□□□□□□□□□□□□□□\n");
     printf(" □□□□□□□□□□□■■□□□□□□□■■■■□□□□□□□□□□□□□□\n");
     printf(" □□□□□□□□□□□■■□□□□□□□■■□□□□□□□□□□□□□□□□\n");
  printf(" ======================================\n");
   
  printf("\n==1번== 사용자 프로그램\n");
  printf("\n==2번== 종료\n");
  printf(":");
  scanf("%d",&b);
  switch(b){
   case 1234:
    manager();
    break;
   case 1:
    u_main();
   case 2:
    exit(1);
   default :
    printf("다시 입력하시오\n");
    }
  }while(b !=2);
}
반응형

댓글