银行项目(使用链表进行操作)

本文介绍了一个银行项目的实现,重点讨论了如何利用链表数据结构进行插入和删除操作,涉及系统设计的关键环节。
摘要由CSDN通过智能技术生成
/* (程序头部注释开始) 
* 程序的版权和版本声明部分 
* 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;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值