/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者: 臧鹏
* 完成日期: 2012 年 8月 26日
* 版 本 号: 001
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:银行项目(使用链表),账户信息类Record 节点类Node 链表类LinkList
银行类Bank
* 程序输出:
* 程序头部的注释结束
*/
//Record.h
#ifndef HEADER_RECORD
#define HEADER_RECORD
#include<string>
using namespace std;
class Record
{
private:
int Number;
string userName;
string passWord;
double balance;
int flag;
public:
Record();
void set_Number(int Number);
void set_userName(string userName);
void set_passWord(string passWord);
void set_balance(double balance);
void set_flag(int flag);
int get_Number();
string get_userName();
string get_passWord();
double get_balance();
int get_flag();
void display_Record();
};
#endif
//Node.h
#ifndef HEADER_NODE //如果没定义HEADER_NODE,则执行
#define HEADER_NODE
#include "Record.h"
class Node
{
private:
Record *record;
Node *next;
public:
Node();
~Node();
void set_record(Record *record);
void set_next(Node *next);
Record *get_record();
Node *get_next();
void display_Node();
};
#endif
//LinkList.h
#ifndef HEADER_LINKLIST
#define HEADER_LINKLIST
#include"Node.h"
class LinkList
{
private:
Node *head;
int len;
public:
LinkList();
~LinkList();
void set_head(Node *head);
void set_len(int len);
Node *get_head();
int get_len();
Node *make_node(Record *record);
void insert_node(Node *node);
Node *find_node(int Number);
void display_LinkList();
};
#endif
//Bank.h
#ifndef HEADER_BANK
#define HEADER_BANK
#include"LinkList.h"
class Bank
{
private:
LinkList * list;
int account_number;
public:
void welcome();
~Bank();
Bank();
void set_list(LinkList *list);
LinkList *get_list();
LinkList *make_list();
Record *make_record(string userName,string passWord,double balance);
int create_number();
int get_number();
string get_userName();
string get_passWord();
double get_balance();
Record *find_record(int account_number);
void open_account();
void find_account();
void close_account();
void deposit();//存
void withdraw();//取
void tranfser_account();//转账
};
#endif
//Record.cpp
#include"Record.h"
#include<iostream>
using namespace std;
Record::Record()
{
this->Number = 0;
this->userName = " ";
this->passWord = " ";
this->balance = 0;
this->flag = -1;
}
void Record::set_Number (int Number)
{
this->Number = Number;
}
void Record::set_userName (string userName)
{
this->userName = userName;
}
void Record::set_passWord (string passWord)
{
this->passWord = passWord;
}
void Record::set_balance (double balance)
{
this->balance = balance;
}
void Record::set_flag (int flag)
{
this->flag = flag;
}
int Record::get_Number ()
{
return (this->Number);
}
string Record::get_userName ()
{
return (this->userName);
}
string Record::get_passWord ()
{
return (this->passWord);
}
double Record::get_balance ()
{
return (this->balance );
}
int Record::get_flag ()
{
return (this->flag);
}
void Record::display_Record ()
{
cout<<"+------------------------------------------------+"<<endl;
cout<<"| 账号 | 户名 | 密码 | 余额 | 状态 |"<<endl;
cout<<"|------------------------------------------------|"<<endl;
cout<<"|"<<this->get_Number()<<" ";
cout<<"|"<<this->get_userName()<<" ";
cout<<"|"<<this->get_passWord()<<" ";
cout<<"|"<<this->get_balance()<<" ";
cout<<"|";
if(this->get_flag() ==1)
cout<<"正常";
else
cout<<"销户";
cout<<" ";
cout<<"|"<<endl;
cout<<"+------------------------------------------------+"<<endl;
}
//Node.cpp
#include"Node.h"
#include<iostream>
using namespace std;
Node::Node()
{
this->record = NULL;
this->next = NULL;
}
Node::~Node ()
{
delete this->record ;
this->record = NULL;
this->next = NULL;
}
void Node::set_record (Record *record)
{
this->record = record;
}
void Node::set_next (Node *next)
{
this->next = next;
}
Record *Node::get_record ()
{
return this->record ;
}
Node *Node::get_next ()
{
return this->next ;
}
void Node::display_Node ()
{
cout<<"Print Node elements..."<<endl;
if(this->record == NULL) //可能是空指针情况
{
cout<<"Elements of Record is NULL..."<<endl;
}
else
{
Record *r = this->record ;
r->display_Record ();
}
cout<<"Next: "<<this->next <<endl;
cout<<"End of Node..."<<endl;
cout<<endl;
}
//LinkList.cpp
#include "LinkList.h"
#include<iostream>
using namespace std;
LinkList::LinkList()
{
this->head = NULL;
this->len = 0;
}
LinkList::~LinkList ()
{
Node *p,*q;
p = this->head;
while (p != NULL)
{
q = p;
p = p->get_next ();
delete q;
}
this->head = NULL;
this->len = 0;
}
void LinkList::set_head (Node *head)
{
this->head = head;
}
void LinkList::set_len (int len)
{
this->len = len;
}
Node*LinkList::get_head ()
{
return this->head;
}
int LinkList::get_len ()
{
return this->len ;
}
Node * LinkList::make_node (Record *record)
{
Node *node = new Node();
node->set_record(record);
node->set_next(NULL);
return node;
}
void LinkList::insert_node (Node*node )
{
Node *p = this->head;
if(p == NULL)
{
this->head = node;
this->len++;
return;
}
while(p->get_next () != NULL)
{
p = p->get_next ();
}
p->set_next (node);
this->len++;
}
Node *LinkList::find_node (int Number )
{
Node *p = this->head;
while(p != NULL)
{
Record *r = p->get_record();
if(r->get_Number() == Number)
{
return p;
}
else
{
p = p->get_next ();
}
}
return p;
}
void LinkList::display_LinkList()
{
cout<<"Print LinkList element..."<<endl;
Node *p = this->head;
if(p == NULL)
{
cout<<"LinkList is NULL..."<<endl;
cout<<"Len: "<<this->len<<endl;
cout<<"End of LinkList..."<<endl;
return ;
}
while(p != NULL)
{
p->display_Node ();
p = p->get_next ();
}
cout<<"Len: "<<this->len<<endl;
cout<<"End of LinkList..."<<endl;
cout<<endl;
}
//Bank.cpp
#include "Bank.h"
#include<iostream>
#include<string>
using namespace std;
void Bank::welcome ()
{
cout<<"++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
cout<<"+ +"<<endl;
cout<<"+---------------欢迎使用本银行系统-----------------+"<<endl;
cout<<"+ +"<<endl;
cout<<"++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
}
Bank::Bank()
{
this->list = this->make_list();
this->account_number = 10000;
}
Bank::~Bank ()
{
delete this->list;
this->list = NULL;
}
void Bank::set_list(LinkList *list)
{
this->list = list;
}
LinkList *Bank::get_list ()
{
return this->list;
}
LinkList *Bank::make_list ()
{
LinkList *l = new LinkList();
return l;
}
Record *Bank::make_record(string username,string password, double balance)
{
Record *r = new Record();
int number = this->create_number();
r->set_Number(number);
r->set_userName (username);
r->set_passWord (password);
r->set_balance (balance);
r->set_flag (1);
return r;
}
int Bank::create_number()
{
this->account_number++;
return this->account_number ;
}
int Bank::get_number ()
{
int Number;
cout<<"请输入账号...."<<endl;
cin>>Number;
cout<<"number: "<<Number<<endl;
return Number;
}
string Bank::get_userName ()
{
string userName;
cout<<"请输入用户名..."<<endl;
cin>>userName;
cout<<"userName: "<<userName<<endl;
return userName;
}
string Bank::get_passWord ()
{
string passWord;
cout<<"请输入密码..."<<endl;
cin>>passWord;
cout<<"passWord: "<<passWord<<endl;
return passWord;
}
double Bank::get_balance()
{
double balance;
cout<<"请输入金额..."<<endl;
cin>>balance;
cout<<"balance: "<<balance<<endl;
return balance;
}
Record *Bank::find_record (int number)
{
Node *n = this->list->find_node (number);
if(n != NULL)
{
return n->get_record();
}
return NULL;
}
void Bank::open_account ()
{
//1;通过get函数获取用户输入的账户信息
string userName = this->get_userName ();
string passWord = this->get_passWord ();
double balance = this->get_balance();
//2;根据账户信息创建Record账户
Record *r = this->make_record (userName,passWord,balance);
//3;根据record账户创建Node节点
Node *n = this->list->make_node (r);
//4;将Node节点插入到LinkList链表
this->list->insert_node(n);
cout<<"开户成功..."<<endl;
r->display_Record ();
}
void Bank::find_account ()//查找账户
{
int number = this->get_number();
Record *r = find_record ( number);
if (r != NULL)
{
//输入账户密码验证
string passWord = this->get_passWord ();
if(passWord == r->get_passWord())
{
r->display_Record ();
}
else
cout<<"您输入的密码不正确"<<endl;
}
else
cout<<"查无此账户"<<endl;
}
void Bank::close_account ()//销户
{
//1,用户输入帐户
int number = this->get_number ();
Record *r = find_record( number);
//2,根据帐号查找帐户
if (r != NULL)
{
//输入账户密码验证
string passWord = this->get_passWord ();//3,用户输入密码
if(passWord == r->get_passWord())
{
if(r->get_flag() != 0) //4,根据密码进行判断
{
r->set_flag(0) ;//5,修改记录状态
r->display_Record();
}
else
cout<<"此账户已销户或冻结,不能销户"<<endl;
}
else
cout<<"您输入的密码不正确"<<endl;
}
else
cout<<"此账户不存在"<<endl;
}
void Bank::deposit()//存款
{
int number = this->get_number ();
Record *r =find_record(number);
if (r != NULL)
{
//输入账户密码验证
string passWord = this->get_passWord ();
if(passWord == r->get_passWord())
{
if(r->get_flag() == 0)
{
cout<<"此账户已销户,不能存款!"<<endl;
}
else
{
double balance = r->get_balance();
r->set_balance( this->get_balance()+balance );
r->display_Record ();
}
}
else
{
cout<<"您输入的密码不正确,请重新输入。。。"<<endl;
}
}
}
void Bank::withdraw ()//取款
{
int number = this->get_number ();
Record *r =find_record(number);
if (r != NULL)
{
//输入账户密码验证
string passWord = this->get_passWord ();
if(passWord == r->get_passWord())
{
if(r->get_flag() == 0)
{
cout<<"此账户已销户,不能取款!"<<endl;
}
else
{
double balance = this->get_balance();
if(balance >= r->get_balance())//判断取款额度是否大于余额
{
cout<<"取款额度大于余额,不能取款!"<<endl;
}
else
{
r->set_balance( r->get_balance() - balance );
r->display_Record ();
}
}
}
else
{
cout<<"您输入的密码不正确,请重新输入。。。"<<endl;
}
}
}
void Bank::tranfser_account()//转账
{
int number = this->get_number ();
Record *r =this->find_record(number);
if( r != NULL)
{
string passWord = this->get_passWord ();
if(passWord == r->get_passWord())
{
if(r->get_flag() == 0)
{
cout<<"此账户已销户,不能转账!"<<endl;
}
else
{
double balance = this->get_balance();
if(balance >= r->get_balance())//判断转账额度是否大于余额
{
cout<<"转账额度大于余额,不能转账!"<<endl;
}
else
{
int number2 = this->get_number();
Record *n = this->find_record(number2);
n->set_balance (balance+n->get_balance() );
cout<<"转账成功..."<<endl;
r->set_balance( r->get_balance() - balance );
r->display_Record ();
}
}
}
else
{
cout<<"您输入的密码不正确,请重新输入。。。"<<endl;
}
}
}
//TestRecord.cpp
#include"Record.h"
int main()
{
Record *record = new Record();
record->display_Record ();
record->set_Number (000001);
record->set_userName ("zang");
record->set_passWord ("159753");
record->set_balance (50000);
record->set_flag (-1);
record->display_Record ();
return 0;
}
//TestNode.cpp
#include "Node.h"
#include<iostream>
using namespace std;
int main()
{
Node *node = new Node();
node->display_Node ();
Record *r = new Record();
r->set_Number (10001);
r->set_userName ("zang");
r->set_passWord ("125");
r->set_balance (100001);
r->set_flag (1);
node->set_record(r);
node->display_Node ();
return 0;
}
//TestLinkList.cpp
#include"LinkList.h"
#include<string>
using namespace std;
int main()
{
LinkList * list = new LinkList();
list->display_LinkList();
Record * r1 = new Record();
r1->set_Number(10001);
r1->set_userName("zang");
r1->set_passWord("125");
r1->set_balance(100000);
r1->set_flag(1);
r1->display_Record ();
Node * n1 = list->make_node (r1);
list->insert_node(n1);
list->display_LinkList ();
Record *r2 = new Record();
r2->set_Number(100002);
r2->set_userName("zhang");
r2->set_passWord("189");
r2->set_balance(50000);
r2->set_flag(1);
Node *n2 = list->make_node (r2);
list->insert_node (n2);
list->display_LinkList ();
Node *n3 = list->find_node (10001);
n3->display_Node ();
return 0;
}
//TestBank.cpp
#include "Bank.h"
#include<iostream>
using namespace std;
int main()
{
Bank *bank = new Bank();
bank->open_account();
bank-> find_account();
bank->close_account();
bank-> deposit();
bank-> withdraw();
return 0;
}
//Main.cpp
#include"Bank.h"
#include<string>
#include<iostream>
using namespace std;
void login(Bank *bank);
void mainmenu(Bank *bank);
void mainmenu(Bank *bank)
{
int choice = -1;
do
{
cout<<"+-----------------------------------------+"<<endl;
cout<<"| 请选择服务项目 |"<<endl;
cout<<"| 开户 请按1 销户 请按2 |"<<endl;
cout<<"| 查找 请按3 存款 请按4 |"<<endl;
cout<<"| 取款 请按5 转账 请按6 |"<<endl;
cout<<"| 退出 请按0 |"<<endl;
cout<<"+-----------------------------------------+"<<endl;
cin>>choice;
switch (choice)
{
case 0:
cout<<"+---------------------------------------+"<<endl;
cout<<"| |"<<endl;
cout<<"|----------欢迎再次光临本银行-----------|"<<endl;
cout<<"| |"<<endl;
cout<<"+---------------------------------------+"<<endl;
exit(0);
//break;
case 1:
{
bank->open_account();
break;
}
case 2:
{
bank->close_account();
break;
}
case 3:
{
bank->find_account();
break;
}
case 4:
{
bank->deposit();
break;
}
case 5:
{
bank->withdraw();
break;
}
case 6:
{
bank->tranfser_account ();
break;
}
default:
cout<<"出现错误"<<endl;
}
}while(choice != 0);
}
void login(Bank *bank)
{
string admin_userName;
string admin_passWord;
cout<<"请输入用户名..."<<endl;
cin>>admin_userName;
cout<<"请输入密码..."<<endl;
cin>>admin_passWord;
for(int i = 1 ;i<=3;i++)
{
if(admin_userName =="admin"&&admin_passWord =="admin")
{
mainmenu(bank);
}
else
{
if(i <=2)
{
cout<<"请再次输入用户名"<<endl;
cin>>admin_userName;
cout<<"请再次输入密码"<<endl;
cin>>admin_passWord;
continue;
}
else
{
cout<<"so Sorry...."<<endl;
break;
}
}
}
}
int main()
{
Bank *bank = new Bank();
bank->welcome ();
login(bank);
return 0;
}