반응형
#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);
}
반응형
'-------------코딩------------- > c언어(리눅스)' 카테고리의 다른 글
이중for문으로 별찍기(5) -피라미드 응용 (0) | 2020.10.19 |
---|---|
c언어 이중for문으로 별찍기(3) -빈 상자만들기 (0) | 2020.10.19 |
c언어 이중for문으로 별찍기(2) -피라미드 (0) | 2020.10.19 |
c언어 이중for문으로 별찍기(1) -상자만들기 (0) | 2020.10.19 |
fork 생성하여 원하는 크기의 트리만들기 (0) | 2020.10.19 |
댓글