/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:银行类(银行类与链表类、节点类构成依赖关系)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:银行类(银行类与链表类、节点类构成依赖关系)
* 作 者: 雷恒鑫
* 完成日期: 2012 年 08 月 24 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
Bank.h
#ifndef HEADER_BANK
#define HEADER_BANK
#include "LinkList.h"
#include "Record.h"
class Bank
{
private:
LinkList *list;
int account_number;
public:
Bank();
~Bank();
void set_list(LinkList *list);
LinkList *get_list();
LinkList *make_list();
Record *make_record(string userName, string passWord, double balance);
int creat_number();
int get_number();
string get_userName();
string get_passWord();
double get_balance();
Record *find_record(int number);
void open_account();
void close_account();
void find_account();
void deposit();
void withdraw();
void transfer_account();
};
#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
Node.h
#ifndef 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
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
Bank.cpp
#include "Bank.h"
#include <iostream>
using namespace std;
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()
{
return new LinkList();
}
Record *Bank::make_record(string userName, string passWord, double balance)
{
Record *r = new Record();
int number = this->creat_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::creat_number()
{
return this->account_number = this->account_number+1;
}
int Bank::get_number()
{
int number;
cout << "请输入您的账号..." << endl; //cout<<"please input number..."<<endl;
cin >> number;
cout << "number:" << number << endl;
return number;
}
string Bank::get_userName()
{
string userName;
cout << "请输入您的用户名..." << endl; // cout << "please input userName..." << endl;
cin >> userName;
cout << "userName:" << userName << endl;
return userName;
}
string Bank::get_passWord()
{
string passWord;
cout << "请输入您的密码..." << endl; //cout<<"please input passWord..."<<endl;
cin >> passWord;
cout << "passWord:" << passWord << endl;
return passWord;
}
double Bank::get_balance()
{
double balance;
cout << "请输入您的存款金额..." << endl; //cout << "please input balance..." << 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.获取用户输入的账户信息
string userName = this->get_userName();
string passWord = this->get_passWord();
double balance = this->get_balance();
//使用输入数据创建Record记录
Record *r = this->make_record(userName,passWord,balance);
//创建Node节点
Node *n = this->list->make_node(r);
//将Node节点插入到LinkList链表
this->list->insert_node(n);
cout<<"开户成功!按任意键返回..."<<endl; //cout<<"open account succeed..."<<endl;
getchar();
return;
}
void Bank::close_account()//销户
{
string passWord;
int i, flag;
//1.获取用户输入的账号信息
int number = this->get_number();
//查找账户位置
Node *n = this->list->find_node(number);
if(n != NULL)
{
cout << "请输入您的密码..." << endl; // cout << "Please input Your PassWord..." << endl;
cin >> passWord;
if(passWord == n->get_Record()->get_passWord())
{
if(n->get_Record()->get_flag() == 1)//1为正常状态
{
cout << "确认将此账户销户吗?【1:销户|其他:不销户】" << endl;
cin >> i;
if(i == 1)
{
flag = -1;
n->get_Record()->set_flag(flag);
cout<<"销户成功!按任意键返回..."<<endl;
getchar();
return;
}
else
{
cout << "用户取消销户!按任意键返回..." << endl;
getchar();
return;
}
}
else
{
cout << "该账户已销户!按任意键返回..." << endl;
getchar();
return;
}
}
else
{
cout << "密码不正确!按任意键返回..." << endl;
getchar();
return;
}
}
else
{
cout << "查无此账户!按任意键返回..." << endl;
getchar();
return;
}
}
void Bank::find_account()
{
//1.获取用户输入的账号信息
int number = this->get_number();
//查找账户位置
Node *n = this->list->find_node(number);
if(n != NULL)
{
n->display_Node();
}
else
{
cout << "查无此账户!按任意键返回..." << endl; //cout << "No Found Account Data..." << endl;
getchar();
return;
}
}
void Bank::deposit()
{
//1.获取用户输入的账号信息
int number = this->get_number();
//查找账户位置
Node *n = this->list->find_node(number);
if(n != NULL)
{
n->display_Node();
cout << "请输入您的存款金额..." << endl; //cout << "Please input cash data..." << endl;
double cash;
cin >> cash;
double balance = n->get_Record()->get_balance();
balance = balance + cash;
n->get_Record()->set_balance(balance);
cout << "存款成功!按任意键返回..." << endl;
getchar();
return;
}
else
{
cout<<"查无此账户!按任意键返回..."<<endl; //cout<<"No Found Account Data..."<<endl;
getchar();
return;
}
}
void Bank::withdraw()
{
string passWord;
double cash;
//1.获取用户输入的账号信息
int number = this->get_number();
//查找账户位置
Node *n = this->list->find_node(number);
if(n!=NULL)
{
cout << "请输入您的密码..." << endl; // cout << "Please input Your PassWord..." << endl;
cin >> passWord;
if(passWord == n->get_Record()->get_passWord())
{
if(n->get_Record()->get_flag() == 1)//1为正常状态
{
cout << "请输入您的取款金额..." << endl; // cout << "Please input Withdraw data..." << endl;
cin >> cash;
if(cash <= n->get_Record()->get_balance())
{
cash = n->get_Record()->get_balance() - cash;
n->get_Record()->set_balance(cash);
cout << "取款成功!按任意键返回..." << endl; //cout<<"Withdraw success ..."<<endl;
getchar();
return;
}
else
{
cout << "取款金额大于余额!按任意键返回..." << endl; //cout << "Balance shortage!!! Please re-enter withdraw data..." << endl;
getchar();
return;
}
}
else
{
cout << "该账户已销户!按任意键返回..." << endl;
getchar();
return;
}
}
else
{
cout << "密码不正确!按任意键返回..." << endl;
getchar();
return;
}
}
else
{
cout << "查无此账户!按任意键返回..." << endl;
getchar();
return;
}
}
void Bank::transfer_account()
{
string passWord;
double cash;
int other_number;
//1.获取用户输入的账号信息
int number = this->get_number();
//查找账户位置
Node *n = this->list->find_node(number);
if(n != NULL)
{
cout << "Please input Your PassWord..." << endl;
cin >> passWord;
if(passWord == n->get_Record()->get_passWord())
{
if(n->get_Record()->get_flag() == 1)//1为正常状态
{
cout << "请输入您要转账的账号..." << endl;
cin >> other_number;
//查找账户位置
Node *n_other = this->list->find_node(other_number);
if(n != NULL)
{
if(n_other->get_Record()->get_flag() == 1)//1为正常状态
{
cout << "请输入转账金额..." << endl;
cin >> cash;
if(cash <= n->get_Record()->get_balance())
{
n_other->get_Record()->set_balance((n_other->get_Record()->get_balance() + cash));
n->get_Record()->set_balance((n->get_Record()->get_balance() - cash));
cout << "转账成功!按任意键返回..." <<endl;
getchar();
return;
}
else
{
cout << "您的转账金额大于大于存款金额!转账非法!按任意键返回..." << endl;
getchar();
return;
}
}
else
{
cout << "该账户已销户!按任意键返回..." << endl;
getchar();
return;
}
}
else
{
cout << "查无此账户!按任意键返回..." << endl;
getchar();
return;
}
}
else
{
cout << "该账户已销户!按任意键返回..." << endl;
getchar();
return;
}
}
else
{
cout << "密码不正确!按任意键返回..." << endl;
getchar();
return;
}
}
else
{
cout << "查无此账户!按任意键返回..." << endl;
getchar();
return;
}
}
LinkList.cpp
#include "LinkList.h"
#include <iostream>
using namespace std;
LinkList::LinkList()
{
this->head = NULL;
this->len = 0;
}
LinkList::~LinkList()
{
Node *p, *q=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<<"显示链表..."<<endl; //cout<<"Print LinkList..."<<endl;
//cout<<"Head:"<<this->head<<endl;
Node *p = this->head;
if(p == NULL)
{
cout << "链表为空..." << endl; //cout << "LinkList is NULL..." << endl;
cout << "len:" << this->len << endl;
cout << "链表结束(显示完毕)..." << endl; //cout << "End of LinkList..." << endl;
return;
}
while (p != NULL)
{
p->display_Node();
p = p->get_next();
}
cout << "len:" << this->len << endl;
cout << "链表结束(显示完毕)..." << endl; //cout << "End of LinkList..." << endl;
return;
}
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 << "打印节点(元素)..." << endl; //cout<<"Print Node elements..."<<endl;
if(this->record != NULL)
{
//cout<<"Record*:"<<this->record->display_Record()<<endl;
this->record->display_Record();
cout << "next*:" << this->next << endl;
}
else
{
cout << "节点所指向的记录是空的..." << endl; //cout<<"Record is NULL..."<<endl;
}
cout << "节点显示结束..." << endl; //cout<<"End of Node..."<<endl;
}
/* void display_Node()为了易于了解也可以改成如下结构
void display_Node()
{
Record *r=this->record;
cout<<"Print Node elements..."<<endl;
if(this->record!=NULL)
{
r->display_Record();
cout<<"next*:"<<this->next<<endl;
}
else
{
cout<<"Record is NULL..."<<endl;
}
cout<<"End of Node..."<<endl;
}
*/
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 << "Print Record Elements..." << endl;
cout << "Number:" << endl;
cout << "UserName:" << this->userName << endl;
cout << "PassWord:" << this->passWord << endl;
cout << "Balance:" << this->balance << endl;
cout << "Flag:" << this->flag << endl;
cout << "End of Record..." << endl;
}
TestBank.cpp
#include "Bank.h"
#include <iostream>
using namespace std;
int main()
{
Bank *b=new Bank();
b->open_account();
b->find_account();
cout<<endl;
b->open_account();
b->find_account();
cout<<endl;
b->transfer_account();
b->find_account();
b->find_account();
cout<<endl;
return 0;
}
运行结果:
经验积累:
1.我学会了如何利用类间的依赖关系设计出银行(Bank)类;
2.我对指针的了解更全面了。