一.问题描述
小明是一个计算机专业top student,祝贺他毕业了。并准备到银行参加工作。上班第一天,经理叫他编制一个实现一个活期储蓄处理程序,算作考查。上班第一天, 一定要给领导一个好印象,小明二话没说,就答应了。现要你是小明了,请完成如下题目功能。储户开户、销户、存入、支出活动频繁,系统设计要求:(1)能比较迅速地找到储户的帐户,以实现存款、取款记账;
(2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
二.问题分析
本程序需要先建立节点类模板 (YinHang),然后使用链表的基本操作应用实现各个程序的实现,头插法先建立链表使之成当前操作数据基础,然后可以使用节点的删除进行储户的销户,结点的插入的应用成为程序的开户(注意:建立新的用户要先确认新建的用户号不可以语之前的用户号码相同, 引起系统错误!本程序应用链表节点的比较改进程序。)。储户的存取也是应用节点的比较查找之后进行的账户钱数加减。
三.逻辑结构和存储结构设计
逻辑结构是线性结构,方便存储银行开户信息。存储结构是双链表,能够从任意点开始向前向后快速检索用户资料,操作灵活。方便查找
四.代码分析
1.建立头文件YinHang.h
建立用户结构体
struct YongHu
{
string Name; //姓名
string Sex; //性别
string ID; //ID
string Number; //账号
string Password; //密码
long long Money; //金额
YongHu *pre, *next; //双链表前驱后继指针
YongHu(string, string, string, string, long long); //用户构造函数
};
银行类的声明
class YinHang
{
public:
YinHang();
void KaiHu(); //开户
void ChaKan(); //查看
void Cha_Shan(); //查看并删户
void Cha_Cun(); //查看并存钱
void Cha_Qu(); //查看并取钱
private:
YongHu* ShuRu(); //输入
YongHu* ChaZhao(); //查找
void ShanChu(YongHu*); //删户
void CunQian(YongHu*); //存钱
void QuQian(YongHu*); //取钱
YongHu *Head;
YongHu *Rear;
};
2.建立一个源文件YinHang.cpp,该文件包括类YinHang中成员的定义
(1)#include"YinHang.h"在本源文件中包含头文件YinHang.h。
(2)构造函数YinHang()
YinHang::YinHang() :
Head(nullptr), Rear(nullptr)
{
Head = new YongHu("#", "#", "#", "#", 0); //建立头结点
Rear = new YongHu("#", "#", "#", "#", 0);
Head->next = Rear;
Rear->pre = Head;
cout << "系统启动成功" << endl;
} 定义一个空节点
(3)用户输入定义
YongHu* YinHang::ShuRu()
{
system("cls");
string name;
cout << "请输入您的姓名:" << ends;
cin >> name;
unsigned sex = 0;
string sexual;
while (sex != 1 && sex != 2)
{
cout << "请选择您的性别:1:女,2:男" << ends;
cin >> sex;
if (sex == 1)
sexual = "女";
else sexual = "男";
}
string ID;
cout << "请输入您帐户号码:" << ends;
cin >> ID;
string password;
cout << "请输入您的密码:" << ends;
cin >> password;
long long money;
cout << "请输入您的账户余额:" << ends;
cin >> money;
YongHu *a = new YongHu(name, sexual, ID, password,money);
return a;
}
(4)开户。通过if语句来录入多个用户信息。使用头插法一个个插入:p->next = Head->next
Head->next = p p->next->pre = p p->pre = Head
void YinHang::KaiHu()
{
YongHu *p = nullptr;
while (true)
{
system("cls");
cout << "是否继续录入:Y/N" << endl;
char chosse = 'Y';
cin >> chosse;
if (chosse == 'n' || chosse == 'N')
break;
p = Shu