1、include"stdio.h" #include"string.h" #include"stdlib.h" #include"conio.h" #include"time.h" #define N 20 #define M 20 #define TRUE 1 #define FALSE 0 #define MIN_INPUT ' ' #define MAX_INPUT 127 //127即0x7e struct jilu {float add; //存款金额 float dra; //取款金额 char dname[20]; //辨认账号
2、 char dnum[20];//辨认姓名 char ope[20];//经办人姓名 char time[128]; //系统当前时间 float sy; //剩余金额 }; struct depositor {char num[20]; //客户账号 char name[20]; //客户姓名 char per[20]; //用户身份证号 char sec[20]; //用户密码 float mon; //存款金额 char addr[20]; //储户地址 }; void menu(); int GetPasswo
3、rd(unsigned char* pszPw,int iMaxSize);//使输入的密码显示为* int reads(struct depositor dep[N]);//从文献中读入客户信息 int readsc(struct jilu jl[M]); //从文献读入存款记录 int readsd(struct jilu jl[M]); //从文献读入取款记录 void save(struct depositor dep[N],int n); //保存修改后的客户信息数据 void add(); //开户函数 void del(); //销户函数 void cha
4、nge(); //改密函数 void show(); //显示余额函数 void show1();//存款 void show2();//存款记录 void show3();//取款 void show4();//取款记录 void show5();//清屏函数 void show6(); void show7(char panduan[20]); void main() { int n; system("color 1e"); while(1) { menu(); printf("\n请输入您要选择的操作
5、序号,按回车键确认:"); scanf("%d",&n); switch(n) { case 1: add();break; case 2: show();break; case 3: del();break; case 4: change();break; case 0: exit(0); case 5: show1();break; case 6: show2();break; case 7:
6、 show3();break; case 8: show4();break; case 9: show6();break; default: printf("\n输入错误,请输入列表中存在的序号!\n ");show5(); } } } void menu() //菜单函数 { printf("\n******************************* 银行个人账户管理系统**************************** "); printf("\n
7、 1 储户开户"); printf("\n 2 余额查询"); printf("\n 3 储户销户"); printf("\n 4 密码修改"); printf("\n 5 存款"); printf("\n 6 个
8、人存款记录"); printf("\n 7 取款"); printf("\n 8 个人取款记录"); printf("\n 0 退出"); printf("\n 9 查询所有客户存款记录"); printf("\n\n*****************************************
9、 "); } int reads(struct depositor dep[N]) // 读取储户内容 { FILE *fp; int i=0; if((fp=fopen("account.txt","r"))==NULL) { printf("文献打开失败!\n"); show5(); return 0; } else { for(i=0;!feof(fp);i++) fscanf(
10、fp,"\n%s %s %s %s %f %s\n",dep[i].name,dep[i].num,dep[i].per,dep[i].sec,&dep[i].mon,dep[i].addr);} fclose(fp); return i; } int readsc(struct jilu jl[M]) //读取存款记录 { FILE *fp; int i=0; if((fp=fopen("cun.txt","r"))==NULL) { printf("文献打开失败!没有任何存款记录\n");
11、 return 0; } else {for(i=0;!feof(fp);i++) fscanf(fp,"\n%s %f %s %s %s %f\n",jl[i].dnum,&jl[i].add,jl[i].dname,jl[i].ope,jl[i].time,&jl[i].sy); fclose(fp); return i;} } int readsd(struct jilu jl[M]) //读取取款记录 { FILE *fp; int i=0; if((fp=fopen("qu.tx
12、t","r"))==NULL) { printf("文献打开失败!没有任何取款记录\n"); return 0; } else {for(i=0;!feof(fp);i++) fscanf(fp,"\n%s %f %s %s %s %f\n",jl[i].dnum,&jl[i].dra,jl[i].dname,jl[i].ope,jl[i].time,&jl[i].sy);} fclose(fp); return i; } void save(struct depositor dep[N],int n) // 储
13、户保存后信息
{
FILE *fp;
int i=0;
if((fp=fopen("account.txt","w"))==NULL)
{
printf("文献打开失败!\n");
show5();
return ;
}
else
{
for(i=0;i 14、r);}
}
fclose(fp);
}
void add()/*储户开户*/
{
FILE *fp;
unsigned char pw[99];
struct depositor dep;
char panduan[20];
int iMaxSize=80;
system("cls");
if((fp=fopen("account.txt","a"))==NULL) //假如文献已经存在,可以追加储户信息
{
if((fp=fopen("account.txt","w"))== 15、NULL) // 文献不存在时,创建新文献,输入储户信息
{
printf("用户不存在!\n");
show5();
return ;
}
}
printf("\n请依次填写储户信息,以回车键作为间隔\n");
printf("\n账号: ");
scanf("%s",dep.name);
strcpy(panduan,dep.name);
show7(panduan);
fprintf(fp,"\n%s\n",panduan);
16、 printf("\n姓名: " );
scanf("%s",dep.num);
fprintf(fp,"\n%s\n",dep.num);
printf("\n电话:");
scanf("%s",dep.per);
fprintf(fp,"\n%s\n",dep.per);
printf("\n密码:");
if( GetPassword(pw,iMaxSize) == TRUE )
strcpy(dep.sec,p 17、w);
fprintf(fp,"\n%s\n",dep.sec);
printf("\n\n请重新输入密码,按回车键确认:");
if( GetPassword(pw,iMaxSize) == TRUE )
while(strcmp(pw,dep.sec)!=0)
{printf("\n\n输入的密码错误,请重新输入:");
if( GetPassword(pw,iMaxSize) == TRUE );}
printf("\n\n金额:");
scanf("%f",&dep.mon);
18、 fprintf(fp,"\n%f\n",dep.mon);
printf("\n住址:");
scanf("%s",dep.addr);
fprintf(fp,"\n%s\n",dep.addr);
if(dep.mon<10 )
{ printf("\n 储户金额低于十元,不予开户 \n");
show5();
return ;
}
printf("\n*************************************开户成功****** 19、 ");
show5();
fclose(fp);
}
void show() //余额查询
{ unsigned char pw[99];
int iMaxSize=80;
struct depositor dep[N];
int i,n;
char s[20];
char t[20] ;
system("cls");
n=reads(dep);
printf("\n请用户输入账号,密码,用回车隔开,按回车键确认:\n\n");
s 20、canf("%s",s);
if( GetPassword(pw,iMaxSize) == TRUE )
strcpy(t,pw);
for(i=0;i 21、{printf("\n*********************************储户余额如下*********************************** ");
printf("\n%.2f\n", dep[i].mon);
show5();
}
}
void show1() //存款
{ unsigned char pw[99];
int iMaxSize=80;
FILE *fp;
int i,n;
char s[20];
char t[20] ;
struct depositor 22、 dep[N];
struct jilu jl;
system("cls");
n=reads(dep);
printf("\n请用户输入账号,密码,用回车隔开,按回车键确认:\n\n");
scanf("%s",s);
if( GetPassword(pw,iMaxSize) == TRUE )
strcpy(t,pw);
for(i=0;i 23、rcmp(t,dep[i].sec)!=0)
{
printf("\n 输入错误 \n");
show5();
return ;
}
else
{ if((fp=fopen("cun.txt","a"))==NULL) //假如文献已经存在,可以追加储户信息
{
if((fp=fopen("cun.txt","w"))==NULL) // 文献不存在时,创建新文献,输入储户信息
{
printf("记录不存在!\n");
show5 24、);
return ;
}
} strcpy(jl.dnum,dep[i].num);
fprintf(fp,"\n%s\n",jl.dnum);
printf("\n请输入存款金额,并按回车键确认:\n\n");
scanf("%f",&jl.add);
fprintf(fp,"\n%f\n",jl.add);
strcpy(jl.dname,dep[i].name);
fprintf(fp,"\n%s\n",jl.dname);
prin 25、tf("\n请输入操作员姓名,并按回车键确认:\n\n");
scanf("%s",jl.ope);
fprintf(fp," %s",jl.ope);
_tzset();
_strtime(jl.time);
_strdate(jl.time);
fprintf(fp,"\n%s\n",jl.time);
jl.sy=jl.add+dep[i].mon;
fprintf(fp,"\n%f\n",jl.sy);
dep[i].mon=dep[i].mon+ 26、jl.add;
save(dep,n);
printf("\n您已成功存款%.f\n",jl.add);
printf("\n现在总金额为%.f\n",dep[i].mon);
show5();
}
fclose(fp);
}
void show2() //存款记录
{ unsigned char pw[99];
int iMaxSize=80;
FILE *fp;
int i,n,z,k,l=1;
char s[20];
char t[20];
struct depositor d 27、ep[N];
struct jilu jl[M];
system("cls");
z=readsc(jl);
n=reads(dep);
if((fp=fopen("cun.txt","r"))!=NULL)
{
printf("\n请用户输入账号,密码,用回车隔开,按回车键确认:\n\n");
scanf("%s",s);
if( GetPassword(pw,iMaxSize) == TRUE )
strcpy(t,pw);
for(i=0;i 28、
if (strcmp(s,dep[i].name)==0 &&strcmp(t,dep[i].sec)==0) break;
if (i>=n||strcmp(t,dep[i].sec)!=0)
{
printf("\n 输入错误 \n");
show5();
return ;
}
else
printf("\n存款记录如下:\n\n编号 存款金额 存款时间 剩余金额 操作员\n");
for(k=0;k 29、strcmp(dep[i].name,jl[k].dname)==0)
printf("\n%-8d%-12.f%-12s%-12.f%s\n",l++,jl[k].add,jl[k].time,jl[k].sy,jl[k].ope);
}
show5();
}
else
show5();
}
void show3() //取款
{ unsigned char pw[99];
int iMaxSize=80;
FILE *fp;
int i,n;
char s[20];
char t[20 30、];
struct depositor dep[N];
struct jilu jl;
system("cls");
n=reads(dep);
printf("\n请用户输入账号,密码,用回车隔开,按回车键确认:\n\n");
scanf("%s",s);
if( GetPassword(pw,iMaxSize) == TRUE )
strcpy(t,pw);
for(i=0;i 31、ak;
if (i>=n ||strcmp(t,dep[i].sec)!=0)
{
printf("\n输入错误 \n");
show5();
return ;
}
else
{ if((fp=fopen("qu.txt","a"))==NULL) //假如文献已经存在,可以追加储户信息
{
if((fp=fopen("qu.txt","w"))==NULL) // 文献不存在时,创建新文献,输入储户信息
{
printf("记录不存在!\n" 32、);
show5();
return ;
}
} strcpy(jl.dnum,dep[i].num);
fprintf(fp,"\n%s\n",jl.dnum);
printf("\n请输入取款金额,并按回车键确认:\n\n");
scanf("%f",&jl.dra);
if(jl.dra<=dep[i].mon)
{
fprintf(fp,"\n%f",jl.dra);
strcpy(jl.dname,dep[i] 33、name);
fprintf(fp,"\n%s\n",jl.dname);
printf("\n请输入操作员姓名,并按回车键确认:\n\n");
scanf("%s",jl.ope);
fprintf(fp,"\n%s\n",jl.ope);
_tzset();
_strtime(jl.time);
_strdate(jl.time);
fprintf(fp,"\n%s\n",jl.time);
34、 jl.sy=dep[i].mon-jl.dra;
fprintf(fp,"\n%f\n",jl.sy);
dep[i].mon=dep[i].mon-jl.dra;
save(dep,n);
printf("\n您已成功取款%.f\n",jl.dra);
printf("\n现在总金额为%.f\n",dep[i].mon);
show5();
}
else
{
printf("\n取款金额大于剩余金额,取款失败\n");
35、 show5();
}
}
fclose(fp);
}
void show4() //取款记录
{ unsigned char pw[99];
int iMaxSize=80;
FILE *fp;
int i,n,z,k,l=1;
char s[20];
char t[20];
struct depositor dep[N];
struct jilu jl[M];
system("cls");
z=readsd(jl);
n=reads(dep);
if((fp=fope 36、n("qu.txt","r"))!=NULL)
{
printf("\n请用户输入账号,密码,用回车隔开,按回车键确认:\n\n");
scanf("%s",s);
if( GetPassword(pw,iMaxSize) == TRUE )
strcpy(t,pw);
for(i=0;i 37、p[i].sec)!=0)
{
printf("\n 输入错误 \n");
show5();
return ;
}
else
{printf("\n取款记录如下:\n\n编号 取款金额 取款时间 剩余金额 操作员\n");
for(k=0;k 38、[k].time,jl[k].sy,jl[k].ope);
show5();
}
}
else
show5();
}
void del() //储户信息删除函数
{ unsigned char pw[99];
int iMaxSize=80;
struct depositor dep[N];
char number[20];
char t[20];
int n,i,j;
system("cls");
n=reads(dep);
printf("\n 39、请输入要删除储户账号,密码,用回车隔开,按回车键确认:");
scanf("%s",number);
if( GetPassword(pw,iMaxSize) == TRUE )
strcpy(t,pw);
for(i=0;i 40、
return;
}
else
{
for(j=i+1;j 41、0];
system("cls");
printf("\n请输入要更改密码的储户账号,密码,用空格隔开,按回车键确认:\n");
scanf("%s",number);
if( GetPassword(pw,iMaxSize) == TRUE )
strcpy(t,pw);
n=reads(dep);
for(i=0;i 42、trcmp(t,dep[i].sec)!=0)
{
printf("无此储户信息!");
show5();
return;
}
printf("\n请输入更改后密码,按回车键确认:\n");
scanf("%s",&dep[i].sec);
save(dep,n);
printf("\n修改成功\n");
show5();
}
void show5()//该函数控制清屏
{
int c;
printf("\n确认请按1\n\n");
scanf("%d",& 43、c);
if(c==1)
system("cls");
}
/*函数整体功能为使输入的密码在控制台显示为*
* 所有功能有此函数实现:
* pszPw : 保存密码的缓冲
* iMaxSize :最大的密码长度,该长度必须小于缓冲区大小。
* 返回值为TRUE为成功获取密码。总是返回TRUE
*/
int GetPassword(unsigned char* pszPw,int iMaxSize)
{
unsigned char ch;
int i=0;
int bIsEcho=TRUE;
//while( ! k 44、bhit() && i 45、) /*退格键*/
{
pszPw[i--] = 0;
bIsEcho = FALSE;
putchar( ch );
putchar( ' ' );
putchar( ch );
}
else
bIsEcho = FALSE;
if(bIsEcho)
putchar('*');
}
pszPw[i]=0;
return TRUE;
}
void show6()
{
FILE *fp;
int n,z,k,l,j;
struct depositor dep[N];
struct 46、jilu jl[M];
system("cls");
z=readsc(jl);
n=reads(dep);
if((fp=fopen("cun.txt","r"))!=NULL)
for(j=0;j 47、存款记录如下:\n\n编号 存款金额 存款时间 剩余金额 操作员\n");
for(k=0;k






