鱼C论坛

 找回密码
 立即注册
查看: 1632|回复: 1

银行账户管理系统代码及问题

[复制链接]
发表于 2015-1-4 15:30:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
<P> </P>
<P> </P>
<P> </P>
<P> </P>
<P>#include <string.h> 
#include <stdio.h> 
#include <stdlib.h>
char cfile[] = "date.txt";//创建一个文件
struct bank
{
char id[10+1];
char psw[6+1];
float money; //定义账号,密码,金额
};

menu1()
{
printf("*************欢迎使用虚拟银行服务!*****************\n"); 
printf("***************************************************\n"); 
printf(" || 请输入序号 ||\n"); 
printf(" || 1.新用户开户。 ||\n"); 
printf(" || 2.老用户登陆。 ||\n");
printf(" || 3.退出系统。 ||\n"); 
printf("***************************************************\n"); 
printf("请选择功能:\n"); 
}//一级菜单,实现新用户注册和老用户




menu2()
{
printf("************** 欢迎进入虚拟银行系统 ***************\n");
printf("***************************************************\n");
printf("**************1.取款; ***************\n");
printf("**************2.存款; ***************\n");
printf("**************3.查询余额; ***************\n");
printf("**************4.返回主页面; ***************\n");
printf("**************任意键退出. ***************\n");
printf("***************************************************\n");
}//二级菜单实现老用户登陆后的各种功能



int search(char* user, char* pwd, char* real_pwd)//将注册的账号与已注册的账号对比是否重复
{
FILE* file;
char user_no[256], pwd_no[256];
file = fopen(cfile, "r");//以只读方式打开文本文件。
if (!file)
return 0;
while (!feof(file))//feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。
{ 
if (fscanf(file, "%s%s\n", user_no, pwd_no) == EOF)
return 0;
if (!strcmp(user_no, user))//字符串的比较,(前1,后2)若str1==str2,则返回零;若str1>str2,则返回正数;若str1<str2,则返回负数。
{
if (real_pwd) strcpy(real_pwd, pwd_no);//将字符串2复制到字符串1中,应确保字符数组1足够大以便于存储字符串2。
return 1;
}
}
fclose(file);//把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。
return 0;
}


int add(char* user, char* pwd)//如果新注册的账号不重复,则将其添加至文件data.txt中
{ 
FILE* file;
file = fopen(cfile, "a");//以只写的方式打开文本文件,位置指针指向文件末尾,原文件数据保留。
if (!file)
return 0;
fprintf(file, "%s %s \n", user, pwd );
fclose(file);
return 0;
}



int wenjian(char* user, char* pwd )
{
if (search(user, pwd, NULL))
return 0;
else add(user, pwd );
return 1;
}




zhuce()//新用户注册
{ 
struct bank *p; 
int i=0; 
char name[30]; 
float money; 
char sh[18],n;
p=(struct bank*)malloc(sizeof(struct bank));//p创造动态存储空间
printf("请输入您的名字:");
gets(name);
fflush(stdin); //清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);)
printf("请输入您的身份证号码:");
gets(sh);
fflush(stdin);
printf("请输入您的帐号10位:\n"); 
fflush(stdin); 
scanf("%s",p->id);
fflush(stdin); 
printf("请输入您的密码(6位数字):\n"); 
fflush(stdin); 
scanf("%s",p->psw);
fflush(stdin); 
printf("请输入您的存款:\n"); 
fflush(stdin); 
scanf("%f",&money);
fflush(stdin); 
if (wenjian(p->id,p->psw))
{ 
system("cls");
printf("注册成功!");
printf("您的注册信息如下:\n");
printf("名字:");
puts(name);
printf("身份证号码:");
puts(sh);
printf("帐号:");
puts(p->id);
printf("密码:");
puts(p->psw);
printf("存款");
printf("%f",money);
printf("按1返回主页面. 按任意键退出:");
fflush(stdin);
scanf("%c",&n);
fflush(stdin);
if(n=='1')
{
system("cls");
return 0;
}
else 
exit(0);//当输入1时返回上一级菜单,否则程序终止
}
else
{
system("cls"); 
printf("您输入的帐号已经存在注册失败!按1返回,按任意键退出\n");

scanf("%c",&n);
if(n=='1')
{
system("cls");
return 0;
}
else 
exit(0);
} 
}




gongneng(char Account[10],char Password[6],float Money)//实现老用户登陆后的各种功能
{
FILE *ps;
struct bank xin[100];
int k=0,j=0,n;
char Chiose;

float inmoney,outmoney;
menu2();
fflush(stdin);
scanf("%c",&Chiose);
fflush(stdin);
ps=fopen(cfile,"r");
if (!ps) 
{
exit(0); 
}
if(Chiose=='1')
{
printf("输入您的取款金额:");
fflush(stdin);
scanf("%lf",&outmoney);
fflush(stdin);
while(!feof(ps))
{
fscanf(ps, "%s %s %lf",&xin[k].id,&xin[k].psw,&xin[k].money);
k++;
}
fclose(ps);
ps=fopen(cfile,"wb");
if (!ps) 
{
exit(0); 
}

for (j=0;;j++)


{if ((strcmp(Account, xin[j].id)==0)&&(strcmp(Password, xin[j].psw)==0)) 

{ xin[j].money=xin[j].money-outmoney;

printf("%.2lf\n",xin[j].money);
fprintf(ps, "%s %s %.2lf\n", xin[j].id, xin[j].psw, xin[j].money);
j++; break;}

}//实现菜单2中的取款功能
printf("按1返回主页面. 按任意键退出:");
fflush(stdin);
scanf("%c",&n);
fflush(stdin);
if(n=='1')
{
system("cls");
return 0;
}
else 
exit(0);

} 

if(Chiose=='2')

{
printf("输入您的存款款金额:");
fflush(stdin);
scanf("%lf",&inmoney);
fflush(stdin);
while(!feof(ps))
{
fscanf(ps, "%s %s %lf",&xin[k].id,&xin[k].psw,&xin[k].money);
k++;
}
fclose(ps);
ps=fopen(cfile,"wb");
if (!ps) 
{
exit(0); 
}

for (j=0;;j++)
{

{ if ((strcmp(Account, xin[j].id)==0)&&(strcmp(Password, xin[j].psw)==0))

xin[j].money=xin[j].money+inmoney;

printf("%.2lf\n",xin[j].money);
fprintf(ps, "%s %s %.2lf\n", xin[j].id, xin[j].psw, xin[j].money);
j++; break;
} }//实现菜单2中的存款功能

printf("按1返回主页面. 按任意键退出:");
fflush(stdin);
scanf("%c",&n);
fflush(stdin);
if(n=='1')
{
system("cls");
return 0;
}
else 
exit(0);



} 

if(Chiose=='3')
{
while(!feof(ps))
{
fscanf(ps, "%s %s %lf",&xin[k].id,&xin[k].psw,&xin[k].money);
k++;
}

fclose(ps);
ps=fopen(cfile,"r");
if (!ps) 
{
exit(0); 
}

for(j=0;;j++)
{

{if ((strcmp(Account, xin[j].id)==0)&&(strcmp(Password, xin[j].psw)==0))

printf("%.2lf\n",xin[j].money);
fprintf(ps, "%s %s %.2lf\n", xin[j].id, xin[j].psw, xin[j].money);
j++; break;
} }


}//实现菜单2中的查询余额的功能

printf("按1返回主页面. 按任意键退出:");
fflush(stdin);
scanf("%c",&n);
fflush(stdin);
if(n=='1')
{
system("cls");
return 0;
}
else 
exit(0);


if(Chiose=='4')

return 0;


}

denglu()
{
FILE *fp;
char account[10],password[6],h;
int m=0;
char real_account[10]; 
char real_password[6]; 
float real_money=0.0; 

fp = fopen(cfile, "r");
if (!fp) 
{
exit(0); 
}
while (m<=2)
{ 
printf("请输入您的帐号(10位):");

gets(account);
fflush(stdin); 
printf("请输入您的密码(6位):");

gets(password); 
fflush(stdin);
while(fscanf(fp, "%s %s %lf", &real_account, &real_password,&real_money) != EOF) 
{
if ((strcmp(real_account, account)==0)&&(strcmp(real_password, password)==0)) 
{ 
system("cls");
printf("登陆成功!"); 
gongneng(real_account,real_password,real_money);
fclose(fp); 
return 0;
}//输入曾经注册过的账号进行登陆,账号或密码输入错误则有三次重新输入的机会,否则退出程序
else
rewind (fp);
printf("您输入的帐号不不正确!请重新输入:\n");
m++;


printf("请输入您的帐号(10位):");

gets(account);
fflush(stdin); 
printf("请输入您的密码(6位):");

gets(password); 
fflush(stdin);
} }
fclose(fp);
printf("您输入帐号密码不正确已经3次,被强制退出(按任意键退出)!");
fflush(stdin);
scanf("%c",&h);
fflush(stdin);
exit(0);
}










int main() 
{ 
char chiose; 


char flag;
while (flag!='N')
{menu1();
scanf("%c",&chiose); 
getchar(); 
if(chiose <='0' ||chiose>='4') 
{ 
while(chiose <='0' || chiose>='4') 
{ 
printf("您的输入有误,请重新输入:"); 
scanf("%c",&chiose);
getchar(); //在一级菜单中所输入的账号必须在1~5之间,否则无法进行下一步操作
} 
} 
if(chiose=='1') 
{ 
system("cls"); 
zhuce(); printf ("继续请按任意键,退出请按N"); scanf ("%c",&flag);
} 
if(chiose=='2') 
{ 
system("cls"); 
denglu(); printf ("继续请按任意键,退出请按N"); scanf ("%c",&flag);
} 
if(chiose=='3')
{ 
printf("谢谢您的使用!");
exit(0);
}
}
}//一级菜单中按3直接退出程序

#include <string.h> 
#include <stdio.h> 
#include <stdlib.h>
char cfile[] = "date.txt";//创建一个文件
struct bank
{
char id[10+1];
char psw[6+1];
float money; //定义账号,密码,金额
};

menu1()
{
printf("*************欢迎使用虚拟银行服务!*****************\n"); 
printf("***************************************************\n"); 
printf(" || 请输入序号 ||\n"); 
printf(" || 1.新用户开户。 ||\n"); 
printf(" || 2.老用户登陆。 ||\n");
printf(" || 3.退出系统。 ||\n"); 
printf("***************************************************\n"); 
printf("请选择功能:\n"); 
}//一级菜单,实现新用户注册和老用户




menu2()
{
printf("************** 欢迎进入虚拟银行系统 ***************\n");
printf("***************************************************\n");
printf("**************1.取款; ***************\n");
printf("**************2.存款; ***************\n");
printf("**************3.查询余额; ***************\n");
printf("**************4.返回主页面; ***************\n");
printf("**************任意键退出. ***************\n");
printf("***************************************************\n");
}//二级菜单实现老用户登陆后的各种功能



int search(char* user, char* pwd, char* real_pwd)//将注册的账号与已注册的账号对比是否重复
{
FILE* file;
char user_no[256], pwd_no[256];
file = fopen(cfile, "r");//以只读方式打开文本文件。
if (!file)
return 0;
while (!feof(file))//feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。
{ 
if (fscanf(file, "%s%s\n", user_no, pwd_no) == EOF)
return 0;
if (!strcmp(user_no, user))//字符串的比较,(前1,后2)若str1==str2,则返回零;若str1>str2,则返回正数;若str1<str2,则返回负数。
{
if (real_pwd) strcpy(real_pwd, pwd_no);//将字符串2复制到字符串1中,应确保字符数组1足够大以便于存储字符串2。
return 1;
}
}
fclose(file);//把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。
return 0;
}


int add(char* user, char* pwd)//如果新注册的账号不重复,则将其添加至文件data.txt中
{ 
FILE* file;
file = fopen(cfile, "a");//以只写的方式打开文本文件,位置指针指向文件末尾,原文件数据保留。
if (!file)
return 0;
fprintf(file, "%s %s \n", user, pwd );
fclose(file);
return 0;
}



int wenjian(char* user, char* pwd )
{
if (search(user, pwd, NULL))
return 0;
else add(user, pwd );
return 1;
}




zhuce()//新用户注册
{ 
struct bank *p; 
int i=0; 
char name[30]; 
float money; 
char sh[18],n;
p=(struct bank*)malloc(sizeof(struct bank));//p创造动态存储空间
printf("请输入您的名字:");
gets(name);
fflush(stdin); //清空输入缓冲区,通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);)
printf("请输入您的身份证号码:");
gets(sh);
fflush(stdin);
printf("请输入您的帐号10位:\n"); 
fflush(stdin); 
scanf("%s",p->id);
fflush(stdin); 
printf("请输入您的密码(6位数字):\n"); 
fflush(stdin); 
scanf("%s",p->psw);
fflush(stdin); 
printf("请输入您的存款:\n"); 
fflush(stdin); 
scanf("%f",&money);
fflush(stdin); 
if (wenjian(p->id,p->psw))
{ 
system("cls");
printf("注册成功!");
printf("您的注册信息如下:\n");
printf("名字:");
puts(name);
printf("身份证号码:");
puts(sh);
printf("帐号:");
puts(p->id);
printf("密码:");
puts(p->psw);
printf("存款");
printf("%f",money);
printf("按1返回主页面. 按任意键退出:");
fflush(stdin);
scanf("%c",&n);
fflush(stdin);
if(n=='1')
{
system("cls");
return 0;
}
else 
exit(0);//当输入1时返回上一级菜单,否则程序终止
}
else
{
system("cls"); 
printf("您输入的帐号已经存在注册失败!按1返回,按任意键退出\n");

scanf("%c",&n);
if(n=='1')
{
system("cls");
return 0;
}
else 
exit(0);
} 
}




gongneng(char Account[10],char Password[6],float Money)//实现老用户登陆后的各种功能
{
FILE *ps;
struct bank xin[100];
int k=0,j=0,n;
char Chiose;

float inmoney,outmoney;
menu2();
fflush(stdin);
scanf("%c",&Chiose);
fflush(stdin);
ps=fopen(cfile,"r");
if (!ps) 
{
exit(0); 
}
if(Chiose=='1')
{
printf("输入您的取款金额:");
fflush(stdin);
scanf("%lf",&outmoney);
fflush(stdin);
while(!feof(ps))
{
fscanf(ps, "%s %s %lf",&xin[k].id,&xin[k].psw,&xin[k].money);
k++;
}
fclose(ps);
ps=fopen(cfile,"wb");
if (!ps) 
{
exit(0); 
}

for (j=0;;j++)


{if ((strcmp(Account, xin[j].id)==0)&&(strcmp(Password, xin[j].psw)==0)) 

{ xin[j].money=xin[j].money-outmoney;

printf("%.2lf\n",xin[j].money);
fprintf(ps, "%s %s %.2lf\n", xin[j].id, xin[j].psw, xin[j].money);
j++; break;}

}//实现菜单2中的取款功能
printf("按1返回主页面. 按任意键退出:");
fflush(stdin);
scanf("%c",&n);
fflush(stdin);
if(n=='1')
{
system("cls");
return 0;
}
else 
exit(0);

} 

if(Chiose=='2')

{
printf("输入您的存款款金额:");
fflush(stdin);
scanf("%lf",&inmoney);
fflush(stdin);
while(!feof(ps))
{
fscanf(ps, "%s %s %lf",&xin[k].id,&xin[k].psw,&xin[k].money);
k++;
}
fclose(ps);
ps=fopen(cfile,"wb");
if (!ps) 
{
exit(0); 
}

for (j=0;;j++)
{

{ if ((strcmp(Account, xin[j].id)==0)&&(strcmp(Password, xin[j].psw)==0))

xin[j].money=xin[j].money+inmoney;

printf("%.2lf\n",xin[j].money);
fprintf(ps, "%s %s %.2lf\n", xin[j].id, xin[j].psw, xin[j].money);
j++; break;
} }//实现菜单2中的存款功能

printf("按1返回主页面. 按任意键退出:");
fflush(stdin);
scanf("%c",&n);
fflush(stdin);
if(n=='1')
{
system("cls");
return 0;
}
else 
exit(0);



} 

if(Chiose=='3')
{
while(!feof(ps))
{
fscanf(ps, "%s %s %lf",&xin[k].id,&xin[k].psw,&xin[k].money);
k++;
}

fclose(ps);
ps=fopen(cfile,"r");
if (!ps) 
{
exit(0); 
}

for(j=0;;j++)
{

{if ((strcmp(Account, xin[j].id)==0)&&(strcmp(Password, xin[j].psw)==0))

printf("%.2lf\n",xin[j].money);
fprintf(ps, "%s %s %.2lf\n", xin[j].id, xin[j].psw, xin[j].money);
j++; break;
} }


}//实现菜单2中的查询余额的功能

printf("按1返回主页面. 按任意键退出:");
fflush(stdin);
scanf("%c",&n);
fflush(stdin);
if(n=='1')
{
system("cls");
return 0;
}
else 
exit(0);


if(Chiose=='4')

return 0;


}

denglu()
{
FILE *fp;
char account[10],password[6],h;
int m=0;
char real_account[10]; 
char real_password[6]; 
float real_money=0.0; 

fp = fopen(cfile, "r");
if (!fp) 
{
exit(0); 
}
while (m<=2)
{ 
printf("请输入您的帐号(10位):");

gets(account);
fflush(stdin); 
printf("请输入您的密码(6位):");

gets(password); 
fflush(stdin);
while(fscanf(fp, "%s %s %lf", &real_account, &real_password,&real_money) != EOF) 
{
if ((strcmp(real_account, account)==0)&&(strcmp(real_password, password)==0)) 
{ 
system("cls");
printf("登陆成功!"); 
gongneng(real_account,real_password,real_money);
fclose(fp); 
return 0;
}//输入曾经注册过的账号进行登陆,账号或密码输入错误则有三次重新输入的机会,否则退出程序
else
rewind (fp);
printf("您输入的帐号不不正确!请重新输入:\n");
m++;


printf("请输入您的帐号(10位):");

gets(account);
fflush(stdin); 
printf("请输入您的密码(6位):");

gets(password); 
fflush(stdin);
} }
fclose(fp);
printf("您输入帐号密码不正确已经3次,被强制退出(按任意键退出)!");
fflush(stdin);
scanf("%c",&h);
fflush(stdin);
exit(0);
}










int main() 
{ 
char chiose; 


char flag;
while (flag!='N')
{menu1();
scanf("%c",&chiose); 
getchar(); 
if(chiose <='0' ||chiose>='4') 
{ 
while(chiose <='0' || chiose>='4') 
{ 
printf("您的输入有误,请重新输入:"); 
scanf("%c",&chiose);
getchar(); //在一级菜单中所输入的账号必须在1~5之间,否则无法进行下一步操作
} 
} 
if(chiose=='1') 
{ 
system("cls"); 
zhuce(); printf ("继续请按任意键,退出请按N"); scanf ("%c",&flag);
} 
if(chiose=='2') 
{ 
system("cls"); 
denglu(); printf ("继续请按任意键,退出请按N"); scanf ("%c",&flag);
} 
if(chiose=='3')
{ 
printf("谢谢您的使用!");
exit(0);
}
}
}//一级菜单中按3直接退出程序
</P>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-1-4 15:35:22 | 显示全部楼层
对不住啊!第一次发帖,格式有点错误,问题没有发出去,现在补一下。这个是我们学校的课程设计——银行账户管理系统的代码,在运行时只有老用户登陆的存款取款和查询余额会出现-107374176.00这个数字,解决不了,麻烦小甲鱼帮忙看看,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 14:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表