#define NAME_LEN 20
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#pragma warning(disable:4996)
typedef struct bank
{
char *name[NAME_LEN];
int id;
int money;
struct bank *next;
} bank;
bank *head, *tail; // 노드의 처음과 끝
void Init_account(FILE *fp); // 노드의 처음과 끝에 메모리 할당하고, 파일에서 입력을 받도록 하는 함수
void Make_account(FILE *fp); // 계좌를 생성하는 함수
void Deposit(FILE *fp); // 입금 함수
void WithDraw(FILE *fp); // 출금 함수
void WriteAccount(FILE *fp); // 계좌의 정보를 저장하는 함수
void Account_inquire(void); // 계좌를 조회하는 함수
void ReadAccount(int id, char *name, int money); // 텍스트 파일에서 입력을 받는 함수
void Init_account(FILE *fp)
{
int id;
char name[NAME_LEN];
int money;
head = (bank *)malloc(sizeof(bank));
tail = (bank *)malloc(sizeof(bank));
head->next = tail;
tail->next = tail;
while (fscanf(fp, "%d %s %d", &id, name, &money) == 3){ // 정수형, 문자형, 정수형 3개일 때만 입력을 받음
ReadAccount(id, name, money);
}
}
void ReadAccount(int id, char *name, int money)
{
bank *t;
t = (bank *)malloc(sizeof(bank));
t->id = id;
strcpy(t->name, name);
t->money = money; // this code has problem //
t->next = head->next; // 다음 노드를 가리킴
head->next = t; // 노드의 처음을 가리킴
}
void Make_account(FILE *fp)
{
int id;
char name[NAME_LEN];
int money;
bank *t;
t = (bank *)malloc(sizeof(bank));
printf("\n*********계좌 생성*********\n");
printf("계좌번호 : "); scanf("%d", &id);
printf("예 금 주 : "); scanf("%s", name);
printf("입 금 액 : "); scanf("%d", &money);
t->id = id;
strcpy(t->name, name);
t->money = money;
t->next = head->next;
head->next = t;
WriteAccount(fp); // 저장하는 함수로 파일 포인터를 넘겨줌
}
void Deposit(FILE *fp)
{
int id;
int money;
bank *t;
printf("계좌번호 : "); scanf("%d", &id);
printf("입 금 액 : "); scanf("%d", &money);
for (t = head->next; t != tail; t = t->next)
{
if (t->id == id)
{
t->money += money; // 잔액에 입금할 금액을 더해서
WriteAccount(fp); // 저장
return;
}
}
printf("없는 계좌번호입니다.\n");
}
void WithDraw(FILE *fp)
{
int id;
int money;
bank *t;
printf("계좌번호 : "); scanf("%d", &id);
printf("출 금 액 : "); scanf("%d", &money);
for (t = head->next; t != tail; t = t->next)
{
if (t->id == id)
{
if (t->money
{
printf("출금액이 잔액을 초과할 수 없습니다.\n");
return;
}
else
{
t->money -= money; // 잔액에서 출금액을 빼서
}
WriteAccount(fp); // 저장
return;
}
}
printf("없는 계좌번호입니다.\n");
}
void Account_inquire(void)
{
bank *t;
for (t = head->next; t != tail; t = t->next)
{
printf("\n*********잔액 조회*********\n");
printf("계좌번호 : %d\n", t->id);
printf("예 금 주 : %s님\n", t->name);
printf("잔 액 : %d원\n\n", t->money);
}
}
void WriteAccount(FILE *fp)
{
bank *t;
rewind(fp); // 파일 읽는 포인터 지점을 맨 첨으로 돌리는 함수
for (t = head->next; t != tail; t = t->next)
{
fprintf(fp, "%d %s %d\n", t->id, t->name, t->money);
}
}
int main()
{
int input;
FILE *fp;
fp = fopen("data.txt", "r+"); // 파일모드가 r+일 경우 읽고쓰기를 동시에 수행 합니다.
Init_account(fp);
do
{
printf("계좌 생성&관리 프로그램입니다. 원하시는 번호를 입력하세요.\n");
printf("*********************************************\n");
printf("1)계좌 생성 2)계좌 조회 3)입금 4)출금 5)종료\n");
printf("*********************************************\n");
printf("입력 >");
scanf("%d", &input);
switch (input){
case 1:
Make_account(fp);
break;
case 2:
Account_inquire();
break;
case 3:
Deposit(fp);
break;
case 4:
WithDraw(fp);
break;
case 5:
input = 0;
free(head); // 종료하면서 메모리 반환
free(tail);
break;
default:
printf("잘못 입력하셨습니다. \n");
return main();
}
}
while (input != 0);
}
Я кореец.
И я сделал «код программы управления банком» для своей домашней работы.
Но в моем коде есть проблема (пожалуйста, игнорируйте Корею)
Когда я запускаю свой код, ошибка
не удалось преобразовать 'char **' в 'char *' для аргумента '1' в 'char * strcpy (char *, const char *)'.
Я не знаю об этой проблеме.
Поэтому я добавляю * к этой части.
Но проблема не решается.
Есть ли проблема в моем коде?
Пожалуйста, помогите мне.