c - 使用操作文件制作程序
问题描述
我是编程新手,我正在尝试创建一个程序来学习。我在 3 周内完成了这个 ATM 程序,但程序中仍然存在错误。我正在尝试创建一个程序,该程序需要在 nasabah 中存储一个帐户。txt 并且每笔交易都将保存在每个帐户的历史记录中。
当我创建帐户时,名称不会显示在 .txt 文件中,当我想取钱时,金额为 0,这是我输入余额 5000000 的地方,你们能帮我解决这个问题吗?
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <time.h>
FILE *fp, *fr[2];
struct alamat {
char jl[25];
char kota[25];
int pos[6];
};
struct nasabah{
char id[11];
char pin[6];
char nama[50];
struct alamat rumah;
int saldo;
};
struct nasabah user[3];
time_t now;
void bahasa(); void login(); void utama (); void tarik(); void ambil(); void transfer();
void pembayaran(); void cek_saldo(); void ganti_pin(); void payment(); void byr_payment();
void pay(); void byr_tel(); void hp(); void pln(); void nulis(); void mari();
char buff[100], pbahasa, menu, pin[9], pil, bayar, bpln, pilpay, bpayment, btel;
int tambil, cek, nid, bpay, pins, lpin, notel, i, fro,saldo;
void main(){
system("cls");
fp=fopen("nasabah.txt","r+");
while(fgets(buff, sizeof(buff), fp) !=NULL)
{
if (buff[0] !='\n')
sscanf(buff,"%[^,],%[^,],%[^,],%d,%[^,],%[^,],%[^,]",user[i].id,user[i].nama,user[i].pin,&user[i].saldo,user[i].rumah.jl,user[i].rumah.kota,user[i].rumah.pos);
else i--;
i++;
}
system("cls");
printf("\n\t\t\t SELAMAT DATANG DI BANK KG\n\n\n\n");
printf("\t\t\t SILAHKAN MASUKKAN KARTU ANDA\n\n");
printf("\n\n\t\t tekan 1 untuk memasukkan kartu");
printf("\n\n\t\t tekan 2 untuk membuat akun");
pil=getch();
if (pil=='1') bahasa();
else if(pil=='2') buatakun();
else main();
}
void buatakun(){
system("cls");
fp=fopen("nasabah.txt","a");
for(int i=0; i<1; i++){
printf("masukkan nama anda : ");
scanf("%s",user[i].nama);
printf("masukkan nomor rekening yang anda inginkan : ");
scanf("%s",user[i].id);
printf("masukkan pin yang anda inginkan : ");
scanf("%s",user[i].pin);
printf("masukkan saldo untuk setor tunai : ");
scanf("%d",&user[i].saldo);
}
for (int i = 0; i < 1; i++)
{
fprintf(fp, "%s\t%s\t%s\t%d\n", user[i].nama, user[i].id, user[i].pin,user[i].saldo);
}
fclose(fp);
main();
}
void bahasa(){
system("cls");
printf("\n\t\t\t SELAMAT DATANG DI BANK KG\n\n\n\n");
printf("\n\t\t\t SILAHKAN PILIH BAHASA\n\n");
printf("\t\t\t PLEASE SELECT THE LANGUAGE \n\n");
printf("1. ENGILISH \t 2. INDONESIA\n\n");
pbahasa=getch();
if (pbahasa=='1' || pbahasa=='2') login();
else{
system("cls");
printf("\t\t\t MAAF PILIHAN BAHASA TIDAK TERSEDIA.\n\t\t\t MOHON ULANGI PILIH BAHASA\n\n");
printf("\t\t\t SORRY LANGUAGE IS UNAVAILABLE.\n\t\t\t PLEASE CHOICE THE LANGUAGE AGAIN");
Sleep(3000);
}bahasa();
}
void login(){
fp=fopen("nasabah.txt","r+");
char id[11];
int cpin=0;
system("cls");
if (pbahasa=='1'){
printf("\n\t\t\t WELCOME TO BANK KG\n\n\n\\n");
printf("\t\t\t PLEASE ENTER YOUR ID NUMBER :\n\n\t\t\t");
}
else{printf("\n\t\t\t SELAMAT DATANG DI BANK KG\n\n\n\n");
printf("\t\t\t SILAHKAN MASUKKAN ID ANDA :\n\n\t\t\t");};
gets(id);
fscanf(fp, "%s", user[i].id);
for (i=0;i<3;i++){
if(strcmp(id,user[i].id) == 0){
if (strcmp(user[i].pin, "blokir") ==0){
if(pbahasa == '1')
printf("sorry, your account has been blocked.\nplease contact our customer services");
else
printf("maaf, akun anda telah diblokir.\nsilahkan hubyungi customer service kami.");
Sleep(3000);
main();
}
else{
for (cpin=0; cpin<3; cpin++){
system("cls");
if(pbahasa=='1'){
printf("\n\t\t\t WELCOME TO BANK KG\n\n\n\n");
printf("\t\t\t PLEASE ENTER YOUR PIN:\n\t\t\t");
}
else{
printf("\n\t\t\t SELAMAT DATANG DI BANK KG\n\n\n\n");
printf("\t\t\t SILAHKAN MASUKKAN PIN ANDA :\n\t\t\t");
}
gets(pin);
fscanf(fp, "%s", user[i].pin);
if(strcmp(pin,user[i].pin) ==0)
utama();
else
{
if (pbahasa == '1'){system("cls"); printf("\n\n\n\t\t SORRY, YOUR ENTERED THE WRONG PIN."); Sleep(2000);
}
else {
system("cls"); printf("\n\t\t\tMAAF, PIN YANG ANDA MASUKKAN SALAH.\n"); Sleep(2000);
}
}
}
strcpy(user[i].pin,"blokir");
if (pbahasa =='1'){
printf ("\n\nSORRY, YOUR ACCOUNT HAS BEEN BLOCKED.\nBECAUSE YOU ENTERING THE WRONG PIN THREE TIMES.");
printf("\nPLEASE CONTACT OUR CUSTOMER SERVICES");
}
else {
printf("\n\nMAAF, AKUN ANDA TELAH TERBLOKIR.\nKARENA KESALAHAN MEMASUKKAN PIN TIGA KALI.");
printf("\nSILAHKAN HUBUNGI CUSTOMER SERVICES KAMI.");
}
Sleep(3000);
main();
}
}
}
if(pbahasa=='1'){
system("cls");
printf("\n\t\t SORRY, THE ID YOUR ENTERED IS NO REGISTERED.\n\t\t\t PLEASEENTER YOUR ID CORRECTLY.");
}
else
{
system("cls");
printf("\n\t\t MAAF, ID YANG ANDA MASUKKAN TIDAK TERDAFTAR.\n\t\t\t SILAHKAN MASUKKAN ID DENGAN BENAR.");
}Sleep(3000);
login();
fclose(fp);
};
void utama(){
char menu;
system("cls");
if (pbahasa == '1'){
printf("\n\t\t\t MAIN MENU\n\n\t\tBANK NOTES RP.50.000\n\n");
printf("\n1. 100.000\t\t\t2. 200.000\n");
printf("\n3. 300.000\t\t\t4. 500.000\n");
printf("\n5. PAYMENT\t\t\t6. WITHDRAWAL OTHER AMOUNT\n");
printf("\n7. CHECK BALANCE\t\t\t8. CHANGE PIN");
printf("\n9. TRANSFER\n\n");
}
else{
printf("\n\t\t\tMENU UTAMA\n\n\t\t PECAHAN UANG RP.50.000\n\n");
printf("\n1. 100.000\t\t\t2. 200.000\n");
printf("\n3. 300.000\t\t\t4. 500.000\n");
printf("\n5. PEMBAYARAN\t\t\t6. PENARIKAN JUMLAH LAIN\n");
printf("\n7. CEK SALDO\t\t\t8. CHANGE PIN");
printf("\n9. TRANSFER\n\n");
}
menu=getch();
switch(menu){
case '1': tambil = 100000; tarik(); break;
case '2': tambil = 200000; tarik(); break;
case '3': tambil = 300000; tarik(); break;
case '4': tambil = 500000; tarik(); break;
case '5': payment(); break;
case '6': ambil(); break;
case '7': cek_saldo(); break;
case '8': ganti_pin(); break;
case '9': transfer(); break;
default: if (pbahasa =='1'){
printf("\n\nYOUR CHOICE IS UNAVAILABLE. PLEASE RECHOICE");
}
else{
printf("\n\nPILIHAN MENU TIDAK TERSEDIA. SILAHKAN ULANGI");
}
Sleep(1500);
utama();
}
};
void transfer(){
time(&now);
char id[11];
int r, nominal;
if (pbahasa=='1')printf("enter destination ID number : \n\n");
else ("masukkan nomor id tujuan:\n\n");
gets(id);
for(r=0;r<3;r++){
if (strcmp(id, user[r].id)==0){
if (pbahasa== '1'){
printf("\nENTERD AMOUNT: RP.");
}
else{
printf("\nMASUKKAN NOMINAL: RP.|");}
scanf("%d",&nominal);
Sleep(1500);
if (user[i].saldo<nominal){
if(pbahasa=='1'){
printf("SORRY YOUR BALANCE IS INSUFFICIENT\nYOUR BALANCE IS Rp.%d\n",user[i].saldo);
}
else{
printf("MAAF SALDO ANDA TIDAK MENCUKUPI\nSALDO ANDA Rp.%d\n",user[i].saldo);
}
user[i].saldo = user[i].saldo-nominal;
user[i].saldo = user[i].saldo+nominal;
fr[0]=fopen("data_transaksi_0000000000.txt","a+");
fr[1]=fopen("data_transaksi_1111111111.txt","a+");
fr[2]=fopen("data_transaksi_2222222222.txt","a+");
fprintf(fr[i],"+%s TRANSFER TUNAI SEBESAR RP %d KE REKENING %s\n\n",ctime(&now),nominal,user[r].id);
fprintf(fr[r],"+%s MENDAPAT TRANSFER TUNAI SEBESAR RP.%d DARI REKENING %s\n\n",ctime(&now),nominal,user[i].id);
for(i=0;i<2;i++) fclose(fr[i]);
if(pbahasa=='1'){
printf("\nTRANSFER SUCCESS");
nulis();
printf("\n\nENTER 0 FOR BACK TO MAIN MENU.\nENTER 1 FOR EXIT.\n\n");
}
else{
printf("\nTRANSFER BERHASIL");
printf("\n\nMASUKKAN 1 UNTUK KEMBALI KE MENU UTAMA.\nMASUKKAN 0 UNTUK KELUAR.\n\n");
}mari();
}
}if(pbahasa=='1') printf("\nID YOU ENTERED IS NOT REGISTERED.");
else printf("\nID YANG ANDA MASUKKAN TIDAK TERDAFTAR.");
Sleep(2000);
transfer();
}
}
void cek_saldo(){
time(&now);
system("cls");
fscanf(fp,"%d", user[i].saldo);
if(pbahasa=='1'){
printf("YOUR BALANCE : Rp.%d",user[i],saldo);
printf("\n\nENTER 1 FOR BACK TO MAIN MENU.\nENTER 0 FOR EXIT.\n\n");
}
else{
printf("SALDO ANDA : Rp.%d",user[i].saldo);
printf("\n\nMASUKKAN 1 UNTUK KEMBALI KE MENU UTAMA.\nMASUKKAN 0 UNTUK KELUAR.\n\n");
}
fr[0]=fopen("data_transaksi_0000000000.txt","a+");
fr[1]=fopen("data_transaksi_1111111111.txt","a+");
fr[2]=fopen("data_transaksi_2222222222.txt","a+");
fprintf(fr[i],"+%s\nCEK SALDO\n",ctime(&now));
for(i=0;i<2;i++)
fclose(fr[i]);
mari();
};
void ganti_pin(){
time(&now);
system("cls");
if (pbahasa=='1'){printf("ENTER YOUR PIN : ");}
else{
printf("MASUKKAN PIN ANDA : ");
}
gets(pin);
if (strcmp(pin, user[i].pin)==0){
if(pbahasa=='1'){
printf("\bENTER NEW PIN : ");
}
else{
printf("\nMASUKKAN PIN BARU : ");
}
gets(user[i].pin);
if(pbahasa=='1'){
printf("PIN CHANGED SUCCESS");
}
else{printf("\nPIN EBRHASIL DIGANTI");}
Sleep(2000);nulis();
if (pbahasa=='1'){
printf("\n\nENTER 1 FOR BACK TO MAIN MENU.\nENTER 0 FOT EXIT.\n\n");
}
else{printf("\n\nMASUKKAN 1 UNTUK KEMBALI KE MENU UTAMA.\nMASUKKAN 0 UNTUK KELUAR.\n\n");}
fr[0]=fopen("data_transaksi_0000000000.txt","a+");
fr[1]=fopen("data_transaksi_1111111111.txt","a+");
fr[2]=fopen("data_transaksi_2222222222.txt","a+");
fprintf(fr[i],"+%s\nGANTI PIN\n",ctime(&now));
for(i=0;i<2;i++)
fclose(fr[i]);
mari();
}
else{
if(pbahasa=='1'){
printf("\nYOUR PIN ENTERED IS WRONG. PLEASE REENTERED");
}
else{
printf("\nPIN YANG ANDA MASUKKAN SALAH. ULANGI KEMBALI");
}
Sleep(2000);
ganti_pin();
}
};
void ambil(){
system("cls");
if(pbahasa=='1'){printf("PLEASE ENTER NUMBER OF WITHDRAWAL \n\t IN MULTIPLE RP. 50000\nMAXIMUM EACH WITHDRAWAL RP 1250000: \n\t");}
else{
printf("SILAHKAN MASUKKAN JUMLAH PENARIKAN\n\tDALAM KELIPATAN Rp50000\nMAKSIMAL SEKALI PENARIKAN Rp1250000: \n\tRp.");
}
scanf("%d",&tambil);
tarik();
};
void tarik(){
system("cls");
if(pbahasa=='1'){
printf("YOUR REQUEST IS BEING PROCESSED");
}
else{
printf("PERMINTAAN ANDA AKAN SEGERA DI PROSES");
}
Sleep(2000);
if(user[i].saldo<tambil)
{system("cls");
if(pbahasa =='1'){
printf("SORRY YOUR BALANCE IS INSUFFICIENT\nYOUR BALANCE Rp %d \n", user[i].saldo);
printf("\n\nENTER 1 FOR BACK TO MAIN MENU.\nENTER 0 FOT EXIT.\n\n");
}
else{
printf("MAAF SALDO ANDA TIDAK MENCUKUPI.\nSALDO ANDA Rp.%d\n", user[i].saldo);
printf("\n\nMASUKKAN 1 UNTUK KEMBALI KE MENU UTAMA.\nMASUKKAN 0 UNTUK KELUAR.\n\n");
}
mari();
}
else{
user[i].saldo-=tambil;
Sleep(1000);
system("cls");
cek=tambil % 50000;
if (cek!=0|| tambil>1250000){
if(pbahasa=='1'){
printf("SORRY, PLEASE ENTER IN Rp 50000 MULTIPLE\n\tAND MAXIMUM IS Rp1250000");
}
else{
printf("MAAF, MOHON MASUKKAN DALAM KELIPATAN Rp50000\n\tDAN MAKSIMAL Rp1250000");
}
Sleep(3000);
user[i].saldo+=tambil;
ambil();
}
else{
if(pbahasa=='1'){
printf("\nYOUR REQUEST IS PROCESSED\n\n\t PLEASE TAKE YOUR MONEY");
}
else{
printf("\tPERMINTAAN ANDA TELAH DI PROSES \n\n\tSILAHKAN AMBIL UANG ANDA");
}
}
Sleep(2000);
if(pbahasa =='1'){
printf("\n\nENTER 1 FOR BACK TO MAIN MENU.\nENTER 0 FOT EXIT.\n\n");
}
else{
printf("\n\nMASUKKAN 1 UNTUK KEMBALI KE MENU UTAMA.\nMASUKKAN 0 UNTUK KELUAR.\n\n");
}
}
fr[0]=fopen("data_transaksi_0000000000.txt","a+");
fr[1]=fopen("data_transaksi_1111111111.txt","a+");
fr[2]=fopen("data_transaksi_2222222222.txt","a+");
fprintf(fr[i],"+%s\nTARIK TUNAI SEBESAR RP %d\n",ctime(&now),tambil);
for(i=0;i<2;i++)
fclose(fr[i]);
mari();
};
void mari(){
pil =getch();
switch(pil){
case '0': utama();break;
case '1': system("cls");
if (pbahasa=='1'){
printf("THANKYOU FOR BANJKING WITH US");
}
else{ printf("TERIMAKASIH TELAH MENGGUNAKAN LAYANAN KAMI."); }Sleep(3000); main(); break;
default: mari();
}
};
void pln(){
system("cls");
if (pbahasa=='1'){
system("cls");
printf("\tCUSTOMER INFORMATION\n\t---------------------");
printf("\n\nID CUSTOMER \t:%s",user[i].id);
printf("\nCUSTOMER NAME \t:%s",user[i].nama);
printf("\nBILL \t: Rp.150000");
printf("\n\n[y] PROCESS PAYMENT\n[n] CANCEL");
}
else{
system("cls");
printf("\tINFORMASI PELANGGAN\n\t---------------------");
printf("\n\nID PELANGGAN \t:%s",user[i].id);
printf("\nNAMA PELANGGAN \t:%s",user[i].nama);
printf("\nTAGIHAN \t: Rp.150000");
printf("\n\n[y] LAKUKAN PEMBAYARAN\n[n] BATAL");
}
bpln = getch();
if (bpln=='y'){
user[i].saldo = user[i].saldo - 150000;
if(pbahasa=='1'){
printf("TRANSACTION SUCCESS");
}
else{ printf("TRANSAKSI BERHASIL"); } nulis();Sleep(2000);
if(pbahasa =='1'){
printf("\n\nENTER 1 FOR BACK TO MAIN MENU.\nENTER 0 FOT EXIT.\n\n");
}
else{ printf("\n\nMASUKKAN 1 UNTUK KEMBALI KE MENU UTAMA.\nMASUKKAN 0 UNTUK KELUAR.\n\n"); }mari();
}
else if(bpln=='n') payment();
else{ if(pbahasa=='1') printf("\n\nYOUR CHOICE UNAVAILABLE. PLEASE REENTERED.");
else printf("\n\nPILIHAN TIDAK TERSEDIA. SILAHKAN ULANGI");
}pln();
}
void payment(){
system("cls");
printf("\tPAYMENT\n----------\n");
printf("1. KOMPAS\n2. INDIHOME\n3. BIZZNET\n4. FIRST MEDIA");
if(pbahasa=='1') printf("\n\n"); else printf("\n\n");
pilpay=getch();
switch(pilpay){
case '1': pay(); break;
case '2': pay(); break;
case '3': pay(); break;
case '4': pay(); break;
default: if (pbahasa=='1'){ printf("YOUR CHOICE UNAVAILABLE"); }
else{
printf("PILIHAN TIDAK TERSEDIA");
}Sleep(2000);payment();
}
};
void pay(){
system("cls");
if (pbahasa=='1'){
printf("ENTER AMOUNT :Rp.");
scanf("%d",&bpay);
system("cls");
printf("\tCUSTOMER INFORMATION\n\t---------------------");
printf("\nREFERENCE NUMBER : %s",user[i].id);
printf("\nTOTAL : %d",bpay);
printf("\n\n[y] PROCESS PAYMENT\n[n] CANCEL");
}
else{
printf("MASUKKAN NOMINAL :Rp.");
scanf("%d",&bpay);
system("cls");
printf("\tINFORMASI PELANGGAN\n\t---------------------");
printf("\nNOMOR REFERENSI : %s",user[i].id);
printf("\nTOTAL : %d",bpay);
printf("\n\n[y] LAKUKAN PEMBAYARAN\n[n] BATAL");
}; byr_payment();
};
void byr_payment(){
bpayment = getch();
if (bpayment=='y'){
user[i].saldo = user[i].saldo - bpay; system("cls");
if (pbahasa=='1'){ printf("TRANSACTION SUCCESS"); }
else { printf("TRANSAKSI BERHASIL"); }nulis();Sleep(2000);
if(pbahasa=='1'){
printf("\n\nENTER 1 FOR BACK TO MAIN MENU.\nENTER 0 FOR EXIT.\n\n");
}
else{ printf("\n\nMASUKKAN 1 UNTUK KEMBALI KE MENU UTAMA.\nMASUKKAN 0 UNTUK SELESAI.\n\n"); }mari();
}
else if (bpayment=='n') payment();
else byr_payment();
};
void nulis(){
fp=fopen("nasabah.txt","w+");
for(i=0;i<3;i++) {
fprintf(fp,"%s,%s,%s,%d,%s,%s,%s",user[i].id,user[i].nama,user[i].pin,user[i].saldo,user[i].rumah.jl,user[i].rumah.kota,user[i].rumah.pos);
}
fclose(fp);
}
解决方案
推荐阅读
- bash - 删除 N 行以在变量 bash 中仅保留 250 行
- mule - 代理重新启动后 Mule ActiveMQ 连接器无法重新连接
- firebase - Flutter - 必须向 Text 小部件提供非空字符串
- python - windows 7需要安装dlib包
- spring-boot - 在 Spring Boot Oauth2 响应中添加新字段
- react-native - 我应该怎么做才能发布 React Native Expo App?
- c# - 从邮件中打开时,从流中添加的附件不可读
- firebase - 无法将“AuthResult”类型的值分配给“FirebaseUser”类型的变量
- visual-studio-code - 为什么远程工作时 VScode 会永久删除代码?
- laravel - 如何在 laravel 中使用查询字符串制作过滤器