【CPP课程实训】-----银行系统

这是一个2015年7月的CPP课程实训项目,实现了银行储蓄系统,使用链表储存用户信息,采用继承机制,并将链表定义为模板类。系统支持开户、注销、存款、取款、余额查询、转账、挂失、解除挂失和更改密码等业务操作。所有数据通过二进制文件进行储存。
摘要由CSDN通过智能技术生成

                                                                      CPP课程实训

                                                                         2015年7月

                                                                题目:银行储蓄系统


得分项目:1,功能扩充:按接近实际业务的要求,处理业务实体中较完善的信息,并在相关业务中使用;

                   2,链表:用链表储存用户信息;

                   3,链表:使用了继承机制;

                   4,链表:链表定义成模板类;

                   5,储存:用二进制文件。


(多文件)代码:


                        list.h

</pre><pre name="code" class="cpp">/* 
*版权所有:Copyright (c)2015,烟台大学计算机与控制工程学院 
*All rights reserved. 
* 
*文件名称:CPP-KCSX.cpp 
*文件标识:无 
*内容摘要:银行系统 
*其他说明:无 
*当前版本:V1.0 
*作    者:王**
*完成日期:2015年7月15日 
* 
*修改记录: 
*修改日期: 
*版本号: 
*修改人:
*修改内容: 
*/ 
#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED

/* 单链表的结点定义 */
template<class T>
class LinkNode
{
public:
    T data;
    LinkNode(): next(NULL) {}
    LinkNode(T &item)
    {
        data=item;
        next = NULL;
    }
    LinkNode<T> *next;
};

/* 带头结点的单链表定义 */
template<class T>
class LinkList : public LinkNode<T>
{
public:
    LinkList()                   //无参数的构造函数
    {
        head = current = NULL;
    }
    LinkList(const T &item)     //带参数的构造函数
    {
        head = new LinkNode<T>(item);
    }
    ~LinkList()                 //析构函数(连表清空)
    {
        Clear();
    }
    void Clear();               //链表清空
    T getT();                   //返回head T
    void Pophead();             //头结点移动
    bool FindID(T &item);       //查找ID是否存在
    T ReturnID(T &item);        //定位指定的位置,返回该位置上的结点指针
    bool Replace(T &item);      //更改
    void Append(T &item);       //尾部追加
    bool IsEmpty() const        //判断链表是否为空
    {
        if(*head==NULL)return false;
        else return true;
    }
private:
    LinkNode<T> *head;
    LinkNode<T> *current;
};


///链表模板函数
/*
功能:弹出头结点数据
*/
template<class T>
T LinkList<T>::getT()
{
    LinkNode<T> *poi=new LinkNode<T>;
    poi=head;
    return poi->data;
}
/*
功能:弹出头结点
*/
template<class T>
void LinkList<T>::Pophead()
{
    LinkNode<T> *p ;
    if(head!=NULL)
    {
        p=head;
        head=head->next;
        delete p;
    }
}
/*
功能:尾部添加数据
*/
template<class T>
void LinkList<T>::Append(T &item)
{
    LinkNode<T> *pt=new LinkNode<T>;
    (*pt).data=item;
    if(head==NULL)
        head=pt;
    else
    {
        LinkNode<T> *pts=head;
        LinkNode<T> *pte=pts->next;
        while(pte)
        {
            pts=pte;
            pte=pts->next;
        }
        pts->next=pt;
    }
}
/*
功能:账户信息更新
*/
template<class T>
bool LinkList<T>::Replace(T &item)
{
    current = head;
    while(current != NULL)
    {
        if(current->data==item)
        {
            current->data=item;
            break;
        }              //循链找含x结点
        else current = current->next;
    }
    if(current->next!=NULL)return true;
    else return false;
}
/*
功能:判断ID是否存在
*/
template<class T>
bool LinkList<T>::FindID(T &item)
{
    current = head;
    while(current != NULL)
    {
        if(current->data==item)return true;              //循链找含x结点
        current = current->next;
    }
    return false;
}
/*
功能:弹出头对应ID数据
*/
template<class T>
T LinkList<T>::ReturnID(T &item)
{
    //在表中搜索含数据x的结点,搜索成功时函数返回该结点地址;否则返回NULL值。
    LinkNode<T> *poi=new LinkNode<T>;
    poi=head;
    while(poi != NULL)
    {
        if(poi->data==item)   break;
        else poi = poi->next;
    }
    return poi->data;
    /*T item;
    if(IsEmpty())
        return false;  //检查是否为空
    do{
        if(item.account == id)
            return true;
    }while(getNext(item));
    return false;*/
}

/*
功能:链表清空
*/
template<class T>
void LinkList<T>::Clear()
{
    LinkNode<T> *p ;
    while(head!=NULL)
    {
        p=head;
        head=head->next;
        delete p;
    }
}

#endif // LIST_H_INCLUDED



                      bank.h

#ifndef BANK_H_INCLUDED
#define BANK_H_INCLUDED
#include <cstring>
#include "list.h"
using namespace std;
//class LinkNode;
//class LinkList;
class Bank;
class User
{
public:
    void setUser(int acc, string nam, int pw, double bal,int stam,string id,string pho);
    void showName();//输出姓名
    void showBalance(string prompt); //显示余额,前面加上提示词prompt
    bool passwordIsRight();   //校验密码,输入的密码正确则返回true
    bool isNormalUser(); //存款、取款、转帐等功能,需要账户处于正常姿态,处于正常状态时返回true,其他情形返回false并提示
    friend class Bank;   //将Bank声明为友元类,方便其访问数据成员
    bool operator==(User &b)  // 运算符重载 用于查找用户
    {
        return(account==b.account);
    }
    friend  ostream& operator<<(ostream&, User&);
   // friend  istream& operator>>(istream&, User&);
private:
    string ID;    //身份证号
    string phone; //手机号
    int account; //账号
    int password;  //密码
    string name;   //用户名
    double balance;  //账户余额
    int status;  //状态 0-正常  1-挂失  2-销户
};

class Bank
{
public:
    Bank();  //开始前从文件中读数据,存在链表中
    ~Bank(){};
    void work();  //业务驱动
    void openAccount(); //开户
    void cancelAccount();  //注销账户
    void save();   //存款
    void withdraw();   //取款
    void showAccount(); //查询余额
    void transferAccounts();  //转账
    void reportLoss();  //挂失
    void cancelLoss();  //解除挂失
    void updatePassword();   //更改密码
    void writedate();//存档
private:
    int N;  //实际的用户数目
    ///  User users[upNum];  //User数组,耗空间啊!改进方案:1.对象指针数组;2. 动态数组;3. 链表
    LinkList<User> users;  //采用链表
};




int pass();  //业务员登录
int chooseInMenu(); //显示菜单并由业务员选择
int inputPassword();   //返回键盘输入的密码

#endif // BANK_H_INCLUDED

                main.cpp

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值