数据结构课程设计——银行系统

/*整体结构就是一个单链表,所有银行客户的信息都是尾插法加入,head位全局变量的头节点。*/

#include <iostream>//C++头文件
#include "stdio.h"
#include "string"// 包含string 数据类型
using namespace std;//c++命名空间

struct client //客户的结构体
{
	string name;//姓名
	string mobile;//手机号
	int cardnumber;//卡号
	string password;//密码
	float balance;//余额
    client  *next;//指向下一个节点
};
client *head=NULL;//全局变量头节点,里面装有第一个客户信息
int kahao=1000000;//卡号变量
int compare(int );
/********************************************************* 
* 功能描述: 添加客户信息
* 输入参数: cardnumber 卡号
             password 密码
* 输出参数: 无 
* 返回值  : 0-系统需要 
* 其它说明: 无 
************************************************************/
void addclient(client *a)//添加一个新客户
{
	client *p;//创建一个临时指针,将会指向头节点。
	if(head==NULL)//如果是第一个客户,添加到头节点
	{
		head =a;
		head->next=NULL;
		cout<<"注册成功"<<endl;
	}
	else
	{
		p = head;
		while(p)//只要p不为空就循环
		{
			if(p->next==NULL)//找到尾节点
			{
				p->next =a;
				a->next =NULL;
				cout<<"注册成功"<<endl;
			}
			p= p->next;
		}
	}
}
/********************************************************* 
* 功能描述: 输出所有客户信息
* 输入参数: 无
* 输出参数: name 姓名
             cardnumber 卡号
* 返回值  : 0-系统需要 
* 其它说明: 无 
************************************************************/
void display()//输出所有客户信息。
{
  client *p;
  p=head;
  while(p)
  {
	cout<<p->name<<endl;
	cout<<p->cardnumber<<endl;
	p=p->next;
  }
}


/*void login()
{
    client *p=head;
	int cardnumber;
	cout<<"请输入卡号"<<endl;
	cin>>cardnumber;
	while(p)
	{
		if(p->cardnumber==cardnumber)
		{
			cout<<p->name<<endl;
			cout<<p->cardnumber<<endl;
		}
		p=p->next;
	}
}*/
/********************************************************* 
* 功能描述: 删除客户信息
* 输入参数: cardnumber 卡号
             password 密码
* 输出参数: 无 
* 返回值  : 0-系统需要 
* 其它说明: 无 
************************************************************/
void deleteclient()//删除客户信息。
{
	int cardnumber;
	cout<<"请输入卡号"<<endl;
	cin>>cardnumber;
   if(compare(cardnumber)==1)//若账号密码正确则compare函数返回值为1
   {
			client *p,*pre;
			if (head==NULL)
			{
				cout<<"该卡号不存在,无法注销。"<<endl;
				return;
			}
			p =pre=head;
			while(p)
			{
			
				if (p->cardnumber==cardnumber)
				{
					if(p==head)
					{
							head = head->next;
							free(p);
							p=NULL;
							cout<<"注销成功"<<endl;
							return;
					}
					else
					{
							pre->next =p->next;
							free(p);
							p=NULL;
							cout<<"注销成功"<<endl;
							return;
					}
				}
				else
				{
					pre =p;
					p= p->next;
				}
			}
   }
}
/********************************************************* 
* 功能描述: 判断卡号密码是否正确
* 输入参数: cardnumber 卡号
             password 密码
* 输出参数: 无 
* 返回值  : 0-系统需要 
* 其它说明: 无 
************************************************************/
int compare(int cardnumber)//判断卡号密码是否正确。
{
	client *p=head;
	string password;
	while(p)
	{
		if(p->cardnumber==cardnumber)
		{
				cout<<"请输入密码"<<endl;
	            cin>>password;
		       if(p->password==password)
			   {
				   return 1;
			   }
		}
		p=p->next;
	}
	cout<<"卡号或密码错误"<<endl;
	return 0;
}
/********************************************************* 
* 功能描述: 取款 
* 输入参数:money 金额
            cardnumber 卡号
* 输出参数: 无 
* 返回值  : 0-系统需要 
* 其它说明: 无 
************************************************************/
void drawmoney()//取款
{
	float money;
	int cardnumber;
	cout<<"请输入卡号"<<endl;
	cin>>cardnumber;
   if(compare(cardnumber)==1)
   {

			client *p,*pre;
			if (head==NULL)
			{
				cout<<"卡号不存在"<<endl;
				return;
			}
			p =pre=head;
			while(p)
			{
			
				if (p->cardnumber==cardnumber)
				{
					cout<<"请输入取款金额"<<endl; 
					cin>>money;
					if(p->balance-money<0)
					{
						cout<<"余额不足"<<endl;
						return;
					}
					else
					{
						p->balance=p->balance-money;
						cout<<"取款成功"<<endl;
						return;
					}

				}
				else
				{
					pre =p;
					p= p->next;
				}
			}
   }


}
/********************************************************* 
* 功能描述: 存款 
* 输入参数:money 金额
            cardnumber 卡号
* 输出参数: 无 
* 返回值  : 0-系统需要 
* 其它说明: 无 
************************************************************/
void depositmoney()//存款
{
	float money;
	int cardnumber;
	cout<<"请输入卡号"<<endl;
	cin>>cardnumber;
   if(compare(cardnumber)==1)
   {
			client *p,*pre;
			if (head==NULL)
			{
				cout<<"卡号不存在"<<endl;
				return;
			}
			p =pre=head;
			while(p)
			{
			
				if (p->cardnumber==cardnumber)
				{
					cout<<"请输入存款金额"<<endl; 
					cin>>money;
					p->balance=p->balance+money;
					cout<<"存款成功"<<endl;
					return;

				}
				else
				{
					pre =p;
					p= p->next;
				}
			}
   }
}
/********************************************************* 
* 功能描述: 查询金额 
* 输入参数: cardnumber 卡号
* 输出参数: 无 
* 返回值  : 0-系统需要 
* 其它说明: 无 
************************************************************/
void balanceinquiry()//查询余额
{
	int cardnumber;
	cout<<"请输入卡号"<<endl;
	cin>>cardnumber;
   if(compare(cardnumber)==1)
   {
			client *p,*pre;
			if (head==NULL)
			{
				cout<<"卡号不存在"<<endl;
				return;
			}
			p =pre=head;
			while(p)
			{
			
				if (p->cardnumber==cardnumber)
				{
					cout<<"您的余额为:"<<p->balance<<endl; 
					return;

				}
				else
				{
					pre =p;
					p= p->next;
				}
			}
   }

}
void menu()//菜单
{
	 cout<<"1开户,2注销,3输出所有用户信息,4存款,5取款,6查询余额"<<endl;
}

int main()
{
   int imp;
   menu();
   while(1)
   {   
	 cout<<"请输入选项"<<endl;
	 cin>>imp;
	if(imp==1)//开户
	{
		cout<<"姓名:";
		client *t;
        t=new client;
        cin>>t->name;
		cout<<endl;
		cout<<"手机号:";
        cin>>t->mobile;
		cout<<endl;
		cout<<"请输入密码:";
		cin>>t->password;
		cout<<endl;
		cout<<"您的卡号为:"<<kahao<<endl;
		t->cardnumber=kahao;
		t->balance=0;
		kahao++;
        addclient(t);
	}
	else if(imp==2)//注销卡号
	{ 
	
		deleteclient();
	
	}
	 else if(imp==3)//输出所有用户信息
	{
		display();
	}
	 else if(imp==4)//存款
	{
		 depositmoney();
	}
	 else if(imp==5)
	 {
		 drawmoney();//取款
	 }
	 else if(imp==6)//查询余额
	 {
        balanceinquiry();
	 }
	 else
	 {
		 cout<<"错误选项"<<endl;
	 }
     menu();

   }

return 0;
}


  • 10
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值