1.题目描述:
本代码为银行管理系统,整体分为管理员模式和普通用户模式:
(1)在管理员模式中能完成
①用户信息录入
②修改管理员密码
③修改指定账户信息
④信息管理业务
(2)在普通用户模式下,能完成注册和转账
在注册中用户必须输入必要的注册信息
在登录功能中将需要密码,登陆成功厚能实现
①存款 ②取款 ③转账 ④查询余额 ⑤修改个人信息(账号、用户名、密码、身份证号、电话) ⑥显示账户信息
2.分析思路
(1)本银行管理系统下整体通过类来完成,以实现更好的封装性,每一个类对象即为一个独立的账户,在此对象中含有该账号的全部注册信息。
(2)使用链表动态开辟对象空间,以节省空间。
(3)将每个功能独立化,将其设置为单一函数如选择模式函数、注册函数、存款函数、取款函数、转账函数、修改信息函数、显示账户信息函数、显示余额函数。
(4)在设计函数时,将用户的所有误操作进行考虑,即使是用户存在误操作,也会人性化的给予提示,提醒用户再次输入正确操作,使程序更加完整、全面和人性化。
具体功能及结构如下所示:
3.输入:
根据操作指示输入1、2、3等序号以完成选择所需业务
4.输出:
输出引导用户的提示以及客户所要查询的信息
编译器用 dev_c++
#include
#include
using namespace std;
//bool manbermark=0;//标记是否有注册成员
string loginmarknumber ;//记录登录时还没有一个注册的,注册时的账号
class information
{
public :
string num ;//账号
string name;//用户名
string key;//密码
string ID;//身份证号
string tel;//电话号码
double money;//余额
information *next;//记录下一空间地址
};
int cheak_num(string str,information *head)//检查账号是否存在
{
int t=0;//记录该账号是否存在
information * p=head;
if(head==NULL)
t=0;
else
{
while(p->next!=NULL)//对已有账号进行遍历
{
if(p->num!=str)
p=p->next;
else
{t=1;
break;
}
}
if(t==0)
if(p->num==str)
t=1;
}
return t;//若账号已经存在则返回1,否则返回0
}
information * get_information (information *head)//管理员录入信息
{
information *s,*p;
s=new information;
cout<<"请录入信息:"< cout<<"账号:"; cin>>s->num; cout<<"用户名:"; cin>>s->name; cout<<"密码:"; cin>>s->key; cout<<"身份证号:"; cin>>s->ID; cout<<"电话号码:"; cin>>s->tel; cout<<"余额:"; cin>>s->money; cout< while ( 1 ) { char ch; if( head==NULL ) { head = s ; //head->next=NULL;//头指针赋值 } else p->next = s ; //将新结点插入已有链表的最后 cout<<"是否继续录入信息 是(1),(2)否"< cin>>ch; while(ch!='1' && ch!='2'){ cout<<"请重新输入是否继续录入 是(1) 否(2)"; cin>>ch; } if(ch=='1'){ //选择“是? p = s ;// p指向链表中最后的结点 p->next=NULL; s=new information; s->next=NULL; cout<<"请输入注册信息:"< cout<<"账号:"; string str111; cin>>str111; int t; t=cheak_num(str111,head); while(t==1) //对已有账号进行判断 ,直到新注册账号不存在为止 { cout<<"账号已存在,请重新注册:"; cin>>str111; t=cheak_num(str111,head); } s->num=str111; cout<<"用户名:"; cin>>s->name; cout<<"密码:"; cin>>s->key; cout<<"身份证号:"; cin>>s->ID; cout<<"电话号码:"; cin>>s->tel; cout<<"余额:"; cin>>s->money; cout< } else//选择“否” { s->next=NULL; break; } cout< } return head; } void output_information (information *head)//显示所有账号信息 { if(head==NULL){ cout<<"暂无注册信息"; return ; } int i=1; information *s; s=head; while(s->next!=NULL) { cout<<"用户注册编码:"<
cout<<"账号:"< cout<<"用户名: "< cout<<"密码:"< cout<<"身份证号:"< cout<<"电话:"< cout<<"金额:"< s=s->next; i++; } cout<<"用户注册编码:"<
cout<<"账号:"< cout<<"用户名: "< cout<<"密码:"< cout<<"身份证号:"< cout<<"电话:"< cout<<"金额:"< } int check_keys(string number,string keys,information *head)//检查账号是否存在且密码是否正确 { int t=0; information *p=head; while(p->next!=NULL) { if(p->num!=number) p=p->next; else { if(p->key==keys) {t=3;//账号存在且密码正确 break; } else {t=2;//账号存在但是密码不正确 break; } } } if(t==0) if(p->num==number) if(p->key==keys) t=3;//账号存在且密码正确 else t=2;//账号存在但是密码不正确 return t; } void take_money(information * p)//取钱函数 { double m; cout<<"请输入提款金额:"; cin>>m; if(m<=p->money)//判断是否超过账号余额 { p->money=p->money-m; cout<<"取款成功"< } else { while(m>p->money)//若取钱金额超过账户余额 {cout<<"余额不足,请重新操作"< cout<<"请输入提款金额:"; cin>>m; } p->money=p->money-m;//对取现后的余额进行修改 cout< } } void save_money(information *p)//存钱函数 { double m; cout<<"请输入存款金额:"; cin>>m; p->money=p->money+m;//对所存入的账户余额修改 cout< } information*cheak_number(string number,information *head)//在管理员模式下或者是客户在正确输入密码后查找客户信息 { int a=0 ;//标记账户是否存在 information *p=head; while(p->next!=NULL) { if(p->num==number) { a=1; break; } else p=p->next; } if(p->num==number) a=1; if(a==0) p=NULL; return p;//返回所查找的客户地址信息 } void move_money(information *p,information *head)// 转账函数 p是正在登陆的账号地址 { information *x;//记录所转账号地址 x=NULL ; double m;//转账金额 string str;//转账账号 char ch ;//记录用户输入的是否继续转账决定 cout<<"请输入要转账的账号:"; cin>>str; x=cheak_number(str,head);//记录下了所转账好的地址 while(x==NULL)//如果账户不存在 { x=cheak_number(str,head);//记录下了所转账好的地址 cout<<"账号不存在,是否重新操作:(1)是 (2)否"< cin>>ch; if(ch=='1') { cout<<"请重新输入要转账的账户:"; cin>>str; x=cheak_number(str,head);//记录下了所转账好的地址 } else break; } if(x!=NULL)//如果账户存在 { cout<<"请输入转账金额:"; cin>>m; while(p->money {cout<<"余额不足,请重新输入转账金额:"< cin>>m; } x->money=x->money+m ; p->money=p->money-m; cout< } } void revise_information(information *p)//"修改信息" { string str,str1;//记录用户账号信息 char ch;//记录用户决定 while(1) { cout<<"请选择要修改的信息 (1)账号 (2)用户名 (3)密码 (4)身份证号 (5)电话 (6)退出修改当前账户信息 "; cin>>ch; while(ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6')//用户若输入业务已有误 { cout<<"请重新输入有效的业务:"; cin>>ch; } if( ch=='1')//修改账号 { cout<<"请输入新账号:"; cin>>str; p->num=str; cout< } else if( ch=='2')//修改用户名 { cout<<"请输入新的用户名:"; cin>>str; p->name=str; cout< } else if( ch=='3')//修改密码 { cout<<"请输入原密码:"; cin>>str; while(p->key!=str) { cout<<"与原密码不一致,请重新输入原密码:"; cin>>str; } cout<<"请输入新密码:"; cin>>str; cout<<"请确认密码:"; cin>>str1; while(str!=str1) { cout<<"与第一次输入不同,请重新设定:"; cout<<"请输入新密码:"; cin>>str; cout<<"请确认密码:"; cin>>str1; } cout< } else if( ch=='4')//修改身份证号 { cout<<"请输入新身份证号:"; cin>>str; p->ID=str; cout< } else if( ch=='5')//修改电话号码 { cout<<"请输入新电话号码:"; cin>>str; p->tel=str; cout< } else break;//退出修改账户信息 } } void show_information(information*p)//显示当前账户信息 { cout<<"账号:"< cout<<"用户名:"< cout<<"密码:"< cout<<"身份证号:"< cout<<"电话:"< cout<<"金额:"< } void query_money(information *p)//显示当前账户余额 { cout<<"您的余额为:"; cout< } information* logon(information *head)//用户注册账号 { information *s; string str;//记录账号信息 cout<<"请输入注册账号:"; cin>>str; int t; if(head==NULL)//如果链表不存在信息,默认为新注册的账号不存在 t=0; else t=cheak_num(str,head);//判断账号是否已经存在 while(t==1)//账号已经存在 重新输入 { cout<<"账号已存在,请重新注册:"; cin>>str; t=cheak_num(str,head); } s=new information ;//为链表开辟新空间 s->num=str; if(head==NULL) loginmarknumber=str; cout<<"用户名:"; cin>>s->name; cout<<"密码:"; cin>>s->key; cout<<"身份证号:"; cin>>s->ID; cout<<"电话号码:"; cin>>s->tel; cout<<"余额:"; cin>>s->money; if(head==NULL)//如果当前链表没有任何信息 { head=s; head->next=NULL; } else//将新注册的插入当前链表 { s->next=head->next; head->next=s; } cout< return head; } information * choose(information *head)//普通用户登陆账号以及选择需要的业务 { int t,loginmark=0; if(head==NULL){//还没有注册账号 cout< int x; cin>>x; while(x!=1&&x!=2){ cout<<"请重新选择:"; cin>>x; } if(x==1){ head=logon(head); loginmark=1; } else return head ; } information *p;//p是用来记录所查找到的账号的地址的 string number,keys;//number 记录登陆账号 keys记录账密码 if(loginmark==0){ cout<<"请输入账号:"; cin>>number; cout<<"请输入账号密码:"; cin>>keys; t=check_keys(number,keys,head); //t是用来记录是否存在账号以及密码是否正确的,若账号不存在则返回0,若账号密码错误返回2,账号存在且密码正确时返回3 while(t==0||t==2)//如果账号不存在或者是密码输入错误 { if(t==2)//用户输入密码有误 {cout<<"密码输入错误,请重新输入账号及密码"; cout<<"账号:"; } else//账号不存在 cout<<"账号不存在,请重新输入账号及密码,账号:"; cin>>number; cout<<"密码:"; cin>>keys; t=check_keys(number,keys,head);//调用判断密码 账号是否正确 } } else number=loginmarknumber; cout< cout<<"请选择业务:(1)取钱 (2)存钱 (3)转账 (4)修改信息 (5)余额查询 (6)显示账号信息 (7)退出账号"< p=cheak_number(number,head); //记录所登陆的账号地址 char ch; //记录用户所做的选择 cin>>ch; while(1) { while(ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'&&ch!='6'&&ch!='7')//用户若出入业务有误 {cout<<"请重新输入所需业务:(1)取钱 (2)存钱 (3)转账 (4)修改信息 (5)余额查询 (6)显示账号信息 (7)退出账号"< cin>>ch; //重新输入业务 } if(ch=='7') //退出当前账户 break; else { switch(ch) { case '1':take_money(p);break; //取钱 case '2':save_money(p);break; //存钱 case '3':move_money(p,head);break; //转账 case '4':revise_information(p);break; //修改信息 case '5':query_money(p);break; //查询余额 case '6':show_information(p);break; //查看信息 } cout<<"请选择业务:(1)取钱 (2)存钱 (3)转账 (4)修改信息 (5)余额查询 (6)显示账号信息 (7)退出账号"< cin>>ch; } } return head; } string change_monitor_keys(string monitor) { string string1,string2;//记录用户两次输入密码 cout<<"请输入原密码:"; cin>>string1; while(string1!=monitor)//如果管理员密码输入不正确 { cout<<"与原密码不符,是否重新输入 (1)是 (2) 否 "< char chra; cin>>chra;//记录用户是否继续登陆 while(chra!='1'&&chra!='2')//判断用户是否存在误操作 { cout<<"选择有误,请重新选择:(1)是 (2) 否 "< cin>>chra; } if(chra=='1')//继续登陆输入账号 { cout<<"请再次输入原密码:"; cin>>string1; } else{//停止登陆 cout< break; } } if(string1!=monitor)//退出修改管理员密码 return monitor; cout<<"请输入新密码:"; cin>>string1; cout<<"请再次输入确认修改密码:"; cin>>string2; while(string1!=string2)//判断两次输入的新密码是否一致 { cout<<"两次输入密码不相同,请选择是否继续修改:(1)是 (2)否"< char jilu;//记录用户选择是否继续修改 cin>>jilu; while(jilu!='1'&&jilu!='2')//判断用户是否存在误操作,是则提示 { cout<<"请重修选择是否修改:(1)是 (2)否"< cin>>jilu; } if(jilu=='1')//继续修改密码 { cout<<"请输入新密码:"; cin>>string1; cout<<"请再次输入确认修改密码:"; cin>>string2; } else{//退出修改密码 break; } } if(string2==string1)//如果在两次输入修改密码一致,成功修改 { monitor=string1; cout< } else cout< return monitor; } void choose_model(information *head,string monitor)//选择开始界面业务 { information *p; char ch,mon_cho;//记录用户选择 string str;//后面用到的是管理员密码 客户账号 cout<<"==============================欢迎进入银行管理系统=============================="< while(1) { cout<<"请选择进入模式:"< cout<<"(1)管理员模式 (2)普通用户模式 (3)退出系统 "< cin>>ch; while(ch!='1'&&ch!='2'&&ch!='3')//如果用户输入有误,提示 { cout<<"请选择进入模式:"< cout<<"(1)管理员模式 (2)普通用户模式 (3)退出系统 "< cin>>ch; } if(ch=='1')//管理员模式 { cout<<"您已进入管理员模式"< cin>>str; if(monitor!=str) { char judge;//用来记录选择 while(monitor!=str)//判断管理员密码是否正确 { cout<<"管理员密码输入错误,是否重新输入 (1)是 (2)否"< cin>>judge; while(judge!='1'&&judge!='2')//如果用户输入有误,提示 { cout<<"请重新选择是否重新输入密码 (1)是 (2)否"< } if(judge=='1')//继续输入密码 { cout<<"请重新输入管理员密码:"; cin>>str;//重新输入管理员密码 } else {break;//结束本输入密码循环 } } } if(monitor==str)//成功登陆管理员 { cout< while(1) { cout< cout<<"(1)客户信息录入 (2)管理客户信息 (3)修改管理员密码 (4)显示所有账户信息 (5)退出管理员模式"< cin>>mon_cho;//记录用户选择 while(mon_cho!='1'&&mon_cho!='2'&&mon_cho!='3'&&mon_cho!='4'&&mon_cho!='5')//如果用户输入有误,提示 { cout< cout<<"(1)客户信息录入 (2)管理客户信息 (3)修改管理员密码 (4)显示所有账户信息 (5)退出管理员模式"< cin>>mon_cho; } if(mon_cho=='1')//客户信息录入 head=get_information(head); else if(mon_cho=='2')//管理账户信息 { if(head==NULL){ cout<<"对不起,由于暂无账户注册信息,该操作无法执行"< continue; } cout<<"请输入要修改的客户账号:"; cin>>str; p=cheak_number(str,head);//判断账户是否存在 while(p==NULL)//账户不存在,提示重新输入 { cout<<"该账号不存在,请重新输入:"; cin>>str; p=cheak_number(str,head); } revise_information(p);//修改已存在的账户信息 } else if(mon_cho=='5')//结束管理员模式 break; else if(mon_cho=='4')//输出所有账户信息 output_information (head); else//修改管理员密码 monitor=change_monitor_keys(monitor); } } } else if(ch=='2')//选择普通客户模式 { char jilu;//记录用户所选业务 cout<<"==============================欢迎进入银行管理系统=============================="< while(1) { cout<<"请选择需要业务:(1) 注册 (2) 登录 (3)退出普通用户模式 "< cin>>jilu; while(jilu!='1'&&jilu!='2'&&jilu!='3')//判断用户误操作,提示 { cout<<"输入错误,请重新选择业务::(1) 注册 (2) 登录 (3)退出普通用户模式 "< cin>>jilu; } if(jilu=='1')//注册 head=logon(head); else if(jilu=='2')//登陆 head=choose(head); else break;//退出普通用户模式 } } else //退出该系统 break; } } int main () { information *head=NULL; string monitor="123";//monitor为管理员初始密码 choose_model(head,monitor); return 0; } 运行截图如下: 运行效果