#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<windows.h>//Sleep()
#include<string>
#include<conio.h>//getch();
#include<shlobj.h>//MessageBox()
#include<iomanip>
#include<fstream>
using namespace std;
typedef struct member{
char name[10];
char code[8];
char ID[20]; //身份证号
char address[30]; //地址
char TEL[11]; //电话号码
long num; //存款数量
char type; //存款类型
int state; //挂失状态
int year; //存款时间
int month;
int day;
int week;
int hour;
int minute;
int second;
struct member *next;
}Member,*MemberList;
////////////////////////////////////////////////////////////
Member *Init() //初试化用户名链表
{
Member *H;
H=(Member *)malloc(sizeof(Member)); //分配空间
if(!H) exit(1);
H->next=NULL;
return H;
}
////////////////////////////////////////////////////////////////
int Password(char a[])
{
int i,j;
while(1)
{
for(i=0;i<=5;i++)
{
a[i]=getch();
if(isdigit(a[i])||(a[i]==8))//判断字符类型
{
if(a[i]==8) //================回返========================
{
system("cls");
printf("\n输入密码(6位):");
for(j=0;j<=i-2;j++)
cout<<"*";
i-=2;
}
else
cout<<"*";
}
}
break;
}
a[6]='\0';
cout<<endl;
return 1;
}
////////////////////////////////////////////////////////////
int ID(char id[])
{
int i,j;
while(1)
{
for(i=0;i<=17;i++)
{
id[i]=getch();
if(isdigit(id[i])||(id[i]==8))//判断字符类型
{
if(id[i]==8) //================回返========================
{
system("cls");
printf("\n输入身份证号(18位):");
for(j=0;j<=i-2;j++)
cout<<id[j];
i-=2;
}
else
cout<<id[i];
}
else
{
if(i==18&&id[18]==13)//身份证号码为15位的判断
{
id[18]='\0';
break;
}
else
{
if(i==17)
{
while(1)
{
if(id[17]=='x') //输入并验证身份证号第十八位
{
cout<<id[17];
break;
}
MessageBox(0,TEXT("输入类型不正确!"),TEXT("警告!"),0);
}
}
else
{
i--;
MessageBox(0,TEXT("输入类型不正确!"),TEXT("警告!"),0);
}
}
}
}
break;
}
id[18]='\0';
cout<<endl;
return 1;
}
//////////////////////////////////////////////////////////////
int time()
{
SYSTEMTIME sys;
GetLocalTime( &sys );
cout<<sys.wYear<<"年"<<sys.wMonth<<"月"<<sys.wDay<<"日 ";
cout<<sys.wHour<<":"<<sys.wMinute<<":"<<sys.wSecond;
cout<<" 星期"<<sys.wDayOfWeek<<endl;
return 0;
}
////////////////////////////////////////////////////////////
int MemberAdd(MemberList &H)
{
Member *p,*q,*s;
char code1[6],code2[6];
int flag=0;//状态标志,用来表示两次输入密码是否一致
SYSTEMTIME sys;
GetLocalTime( &sys );
p=(Member *)malloc(sizeof(Member));
if(!p) exit(1); //分配空间失败
p->next=NULL;
while(1) //输入用户名,并判断相应的操作
{
cout<<"\n输入用户名(0结束,最多10个字符):";
cin>>p->name;
if(strlen(p->name)>10) //用户名过长
{
cout<<"用户名过长,重新输入!!!\n"<<endl;
continue;
}
for(s=H->next;s!=NULL;s=s->next)
{
if(strcmp(s->name,p->name)==0) //用户名不能重复
{
MessageBox(0,TEXT("同一用户名不能重复注册"),TEXT("提示"),16);
cout<<"同一用户名不能重复注册!"<<endl;
return 0;
}
} //跳出输入用户名的操作
break;
}
//////////////////////////////////////////////////输入密码
while(1)
{
cout<<"输 入 密 码(6位):";
Password(code1);
cout<<"确 认 密 码(6位):";
Password(code2);
if(strcmp(code1,code2)!=0)
{
cout<<"两次输入密码不一致,重新输入!!!"<<endl;
continue;
}
strcpy(p->code,code1);
break;
}
/////////////////////////////////输入身份证号,并判断身份证号是否合法
cout<<"输入身份证(18位):";
ID(p->ID);
////////////////////////////////////////
while(1)
{
cout<<"输入 地 址(最多30个字符):";
cin>>p->address; //地址
if(strlen(p->address)>30)
{
cout<<"地址输入过长,请重新输入!!!"<<endl;
continue;
}
else
break;
}
while(1)
{
cout<<"输入手机号(最多11个字符):";
cin>>p->TEL; //电话号码
if(strlen(p->TEL)>11)
{
cout<<"手机号输入非法!!!"<<endl;
continue;
}
else
break;
}
while(1)
{
cout<<"输入存款数:";
cin>>p->num; //存款数量
if(p->num<=0)
{
cout<<"输入错误,重新输入!!!"<<endl;
continue;
}
break;
}
while(1)
{
cout<<"输入存款类型(1-定期/2-活期):";
p->type=getch();
cout<<p->type; //存款类型
cout<<endl;
if(p->type!='1'&&p->type!='2')
{
cout<<"输入错误!!!"<<endl;
continue;
}
break;
}
p->state=0; //挂失状态
p->year=sys.wYear;
p->month=sys.wMonth;
p->day=sys.wDay;
p->week=sys.wDayOfWeek;
p->hour=sys.wHour;
p->minute=sys.wMinute;
p->second=sys.wSecond;
cout<<"您的开户日期及时间为:"<<p->year<<"年"<<p->month<<"月"<<p->day<<"日"
<<";星期"<<p->week<<";"<<p->hour<<":"<<p->minute<<":"<<p->second<<endl;
if(H->next==NULL)
H->next=p;
else
{
q=H;
while(q->next!=NULL)
q=q->next;
q->next=p;
}
q=p;
cout<<"恭喜您,开户成功!!!"<<endl;
return 1;
}
///////////////////////////////////////////////////////
int Money(MemberList &H) //存款
{
Member *p;
char name1[10];
char code1[8];
int flag=0;//用来表示用户名是否存在
int i,j=0;//j用来表示密码正确
char m[1];
long num1;
int count=3;//用来表示输入密码的次数
system("color 0E");
while(1)
{
cout<<"\n\n\n\t\t **********************************"<<endl
<<"\t\t ***** 银行存款取款管理 *****"<<endl;
cout<<"\t\t*******************************************"<<endl
<<"\t\t***** 1.存 款 *****"<<endl
<<"\t\t***** 2.取 款 *****"<<endl
<<"\t\t***** 0.返 回 *****"<<endl
<<"\t\t*******************************************"<<endl;
cout<<"请选择您的操作:";
cin>>m;
if(m[0]=='0')
return 0;
else if(m[0]!='0'&&m[0]!='1'&&m[0]!='2')
continue;
else
break;
}
p=(Member *)malloc(sizeof(Member));
p=H->next;
cout<<"\n输入用户名:";
cin>>name1;
for(p;p!=NULL;p=p->next)
{
if(strcmp(p->name,name1)==0)
{
flag=1;
while(1)
{
cout<<"输入 密 码:";
Password(code1);
j=0;
count=count-1;
for(i=0;i<6;i++)
{
if(p->code[i]!=code1[i])
{
if(count==0)
{
cout<<"您的输入次数已经达到三次,无法再进行操作!!!"<<endl;
return 1;
}
cout<<"密码错误,重新输入,您还有"<<count<<"次机会!"<<endl;
break;
}
else
j=j+1;
}
if(j==6)
break;
}
if(p->state==0)
{
if(m[0]=='1')
{
while(1)
{
cout<<"\n输入存款数目:";
cin>>num1;
if(num1<=0)
cout<<"输入错误,重新输入!"<<endl;
else
break;
}
p->num+=num1;
cout<<"存款成功!!!"<<endl;
cout<<"当前余额为:"<<p->num<<endl<<endl;
}
if(m[0]=='2')
{
while(1)
{
cout<<"\n输入取款数目:";
cin>>num1;
if(num1<=0)
cout<<"输入错误,重新输入!"<<endl;
else if(p->num<num1)
cout<<"余额不足,您最多可取金额为:"<<p->nu