作死向之C++告别演出——课程设计(银行储蓄系统(大BUG+功能不完整版))

咳咳,沉寂了那么多天,终于开始写东西了,估计今后发东西不太会发和技术有关的东西而是一些我比较感兴趣的话题,这有可能不符合这个社区的宗旨,但是由于鄙人实在是水平有限,于是还请见谅。

话不多说,奉上C++告别演出的课程设计项目,由于本项目未完成且含有巨大BUG,有心尝试的小伙伴请谨慎食用。

所有代码总结在10个文件之中,没错是10个不是5个或者6个,还真是有些不好意思。

秉承自顶向下逐步求精的原则,我们的代码从最顶层开始按顺序贴出。

main.cpp如下:

/*
*Copyright (c)2014,烟台大学计算机与控制工程学院
*All rights reserved.
there are so many big BUGs,please be careful.
*文件名称:test.cpp
*作    者:Zeva_angel
*完成日期:2015年7月18日
*版 本 号:v1.0
*
*/
#include "Bank.h"
#include <iostream>
#include <cstdlib>
using namespace std;
void welcome();
void login(Bank * bank);
void mainmenu(Bank * bank);
int main()
{

    Bank * bank = new Bank();
    welcome();
    login(bank);
    delete bank;
    return 0;
}
大家发现了头文件中包含了“Bank.h”的字样,很明显,我们的类就在这个文件里面,接下来贴出的是main文件中所牵扯到的所有的第一级文件。

Bank.h:

#ifndef BANK_H_INCLUDED
#define BANK_H_INCLUDED
#include "LinkList.h"
using namespace std;
class Bank
{
private:
    Linklist * list;
    int account_number;
public:
    Bank();
    ~Bank();
    void set_list(Linklist * list);
    Linklist * get_list();
    Linklist * make_linklist();
    User * make_user(string username, string password, double balance);
    int creat_number();
    int get_number();
    string get_userName();
    string get_passWord();
    double get_balance();
    User * find_user(int account_number);
    void open_account();
    void close_account();
    void find_account();
    void deposit();
    void withdraw();
    void transfer_account();
    void loss_account();
    void disloss_account();
};

#endif // BANK_H_INCLUDED
Bank.cpp:

#include <conio.h>
#include "Bank.h"
#include <iostream>
#include <cstdio>
#include<cstdlib>
#include<fstream>
using namespace std;
Bank::Bank()
{
    this->list = this->make_linklist();
    ifstream infile("account.txt",ios::in);
    if(!infile)
    {
        cerr<<"open error!"<<'\n';
        exit(1);
    }
    int N=0;
    int number;   //账号
    string userName;   //姓名
    string passWord;   //密码
    double balance;   //金额
    int flag;   //状态
    Node * p=new Node;
    p=this->list->get_head();
    cout<<"ss";
    while(infile>>number>>userName>>passWord>>balance>>flag)   //当读取成功……
    {
        p->get_user()->set_number(number);
        p->get_user()->set_userName(userName);
        p->get_user()->set_passWord(passWord);
        p->get_user()->set_balance(balance);
        p->get_user()->set_flag(flag);
        p=p->make_next();
        cout<<"读取"<<'\n';
        ++N;
    }
    infile.close();
    this->account_number = 10000+N;
    this->list->set_len(N);
    delete p;
    //this->list->display_Linklist();
}
Bank::~Bank()                         //将调用所有类的析构函数
{
    ofstream outfile("account.txt",ios::out);
    if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
    {
        cerr<<"open error!"<<'\n';
        exit(1);
    }
    Node * p=new Node;
    p=this->list->get_head();
    while(this->list->get_head()->get_next()!=NULL)
    {
        cout<<"析构"<<'\n';
        outfile<<p->get_user()->get_number()<<" ";
        outfile<<p->get_user()->get_userName()<<" ";
        outfile<<p->get_user()->get_passWord()<<" ";
        outfile<<p->get_user()->get_balance()<<" ";
        outfile<<p->get_user()->get_flag()<<'\n';
        p=p->get_next();
    }
    cout<<"ffff";
    delete p;
    outfile.close();
    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_linklist()
{
    return new Linklist();
}
User * Bank::make_user(string username, string password, double balance)
{
    User * r = new User();
    int number = this->creat_number();
    r->set_number(number);
    r->set_passWord(password);
    r->set_userName(username);
    r->set_balance(balance);
    r->set_flag(0);
    return r;
}
int Bank::creat_number()
{
    return this->account_number = this->account_number + 1;
}
int Bank::get_number()
{
    int number;
    cout << "请输入账号..." << '\n';
    cin >> number;
    cout << "账号: " << number << '\n';
    return number;
}
string Bank::get_userName()
{
    string username;
    cout << "请输入户名..." << '\n';
    cin >> username;
    cout << "户名: " << username << '\n';
    return username;
}

string Bank::get_passWord()
{
    string password;
    cout << "请输入密码..." << '\n';
    char ch[6];  //接收字符形式密码
    for(int i=0; i<6; i++)
    {
        ch[i]=getch();  //输入但不显示
        putchar('*');   //输出*
    }
    ch[6]='\0';
    fflush(stdin); //清除键盘缓存区中已经有的输入
    password=ch;
    cout<< '\n';
    return password;
}
double Bank::get_balance()
{
    double balance;
    cout << "请输入金额..." << '\n';
    cin >> balance;
    cout << "金额:" << balance << '\n';
    return balance;
}
User * Bank::find_user(int account_number)
{
    Node * n = this->list->find_node(account_number);
    if(n!= NULL)
        return n->get_user();
    else
        return NULL;
}
//开户功能:
void Bank::open_account()
{
    //  获取用户输入的账户信息
    string userName = this->get_userName();
    string passWord = this->get_passWord();
    double balance = this->get_balance();
    //  使用输入数据创建User对象
    User * r  = this->make_user(userName, passWord, balance);
    cout<<"make_user"<<'\n';
    //  创建Node结点,封装User对象
    Node * n = this->list->make_node(r);
    cout<<"make_node"<<'\n';
    //  将Node结点插入到Linklist链表
    this->list->insert_node(n);
    cout<<"insert_node"<<'\n';
    //显示账户信息
    r->display_User();
    cout << "开户成功!按任意键退出..." << '\n';
    getch();
    return;
}
//销户功能:
void Bank::close_account()
{
    // 获取销户账号
    int Number = this->get_number();
    // 查找账户
    User * back_user = this->find_user(Number);
    if(back_user == NULL)
    {
        cout << "查无此帐户!按任意键退出..."  << '\n';
        getchar();
        return;
    }
    //获取账户密码,判断密码是否正确
    string passWord = this->get_passWord();
    if(passWord != back_user->get_passWord())
    {
        cout << "密码不正确!按任意键退出..." << '\n';
        getchar();
        return;
    }
    //判断账户状态
    if(back_user->get_flag() == 2)
    {
        cout << "该帐户已经销户,不能再次销户!" << '\n';
        getchar();
        return;
    }
    //获取用户输入的选择信息,确认是否销户
    char userAnswer;
    cout << "确认销户? [1:销户| 其他:不销户] " << '\n';
    cin >> userAnswer;
    //销户
    if(userAnswer == '1')
    {
        back_user->set_flag(2);
        back_user->set_balance(0);
        back_user->display_User();
        cout << "销户成功!按任意键退出..." << '\n';
        getchar();
        return;
    }
    cout << "销户用户取消销户!" << '\n';
    return;
}
//查询功能:
void Bank::find_account()
{
    // 获取查询账号
    int Number = this->get_number();
    // 查找账户
    User * back_user = this->find_user(Number);
    if(back_user == NULL)
    {
        cout << "查无此帐户!按任意键退出..."  << '\n';
        getch();
        return;
    }
    //获取账户密码,判断密码是否正确
    cout<<'1'<<'\n';
    string passWord = this->get_passWord();
    if(passWord != back_user->get_passWord())
    {
        cout << "密码不正确!按任意键退出..." << '\n';
        getch();
        return;
    }
    //显示查询到的用户信息
    back_user->display_User();
    cout << "查询成功!按任意键退出..." << '\n';
    getch();
    return;
}
//存款功能:
void Bank::deposit()
{
    //获取存款账号
    int Number = this->get_number();
    //查找账号
    User * back_user = this->find_user(Number);
    //判断用户是否存在
    if(back_user == NULL)
    {
        cout << "查无此帐户!按任意键退出..."  << '\n';
        getch();
        return;
    }
    //显示账户信息
    back_user->display_User();
    //判断账户是否销户
    if(back_user->get_flag() == 2)
    {
        cout << "该帐户已经销户!按任意键退出..." << '\n';
        getch();
        return;
    }
    double cash = 0;
    cout << "输入存款金额: " << '\n';
    cin >> cash;
    cout << "存款金额为:" << cash << '\n';
    cash = back_user->get_balance() + cash;
    back_user->set_balance(cash);
    //显示账户信息
    back_user->display_User();
    cout << "存款结束! 按任意键退出..." << '\n';
    getch();
    return;
}
//取款功能:
void Bank::withdraw()
{
    // 获取取款账号
    int Number = this->get_number();
    // 查找账户
    User * back_user = this->find_user(Number);
    if(back_user == NULL)
    {
        cout << "查无此帐户!按任意键退出..."  << '\n';
        getch();
        return;
    }
    //获取账户密码,判断密码是否正确
    string passWord = this->get_passWord();
    if(passWord != back_user->get_passWord())
    {
        cout << "密码不正确!按任意键退出..."<<'\n';
        getch();
        return;
    }
    // 确定用户账户状态
    if(back_user->get_flag() == 2)
    {
        cout << "该帐户已经销户!按任意键退出..." << '\n';
        getch();
        return;
    }
    else if(back_user->get_flag()==1)
    {
        cout<<"该账户已经挂失!按任意键退出..."<<'\n';
    }
    double cash = 0;
    cout << "请输入取款金额:" << '\n';
    cin >> cash;
    if(cash > back_user->get_balance())
    {
        cout << "账户余额不足!按任意键退出..." << '\n';
        getch();
        return;
    }
    cash = back_user->get_balance() - cash;
    back_user->set_balance(cash);
    //显示账户信息
    back_user->display_User();
    cout << "取款结束! 按任意键退出..." << '\n';
    getch();
    return;
}
//转账功能:
void Bank::transfer_account()
{
    int number;
    cout << "请输入转出账号:" << '\n';
    cin >> number;
    // 查找账号
    User * back_user = this->find_user(number);
    if(back_user == NULL)
    {
        cout << "查无此帐户!按任意键退出..."  << '\n';
        getch();
        return;
    }
    //获取账户密码,判断密码是否正确
    string passWord=this->get_passWord();
    if(passWord != back_user->get_passWord())
    {
        cout << "密码不正确!按任意键退出..." << '\n';
        getch();
        return;
    }
    // 确定用户账户状态
    if(back_user->get_flag() == 2)
    {
        cout << "该帐户已经销户!按任意键退出..." << '\n';
        getch();
        return;
    }
    //获取转账账号
    int transfer_number;
    cout << "请输入转入账号:" << '\n';
    cin >> transfer_number;
    //查找转账账户
    User * transfer_user = this->find_user(transfer_number);
    if(back_user == NULL)
    {
        cout << "查无此帐户!按任意键退出..."  << '\n';
        getch();
        return;
    }
    // 确定用户账户状态
    if(back_user->get_flag() == 2)
    {
        cout << "该帐户已经销户!按任意键退出..." << '\n';
        getch();
        return;
    }
    //获取转账金额
    double cash = 0;
    cout << "请输入转入金额:" << '\n';
    cin >> cash;
    //判断转账金额是否合法
    if(cash > back_user->get_balance())
    {
        cout << "账户余额不足!按任意键退出..." << '\n';
        getch();
        return;
    }
    //资金转账
    transfer_user->set_balance(transfer_user->get_balance() + cash);
    back_user->set_balance(back_user->get_balance() - cash);
    //显示当前帐户信息及转账账户信息
    cout << "转出帐户信息:" << '\n';
    back_user->display_User();
    cout << "转入账户信息:" << '\n';
    transfer_user->display_User();
    //转账结束
    cout << "转账结束! 按任意键退出..." << '\n';
    getch();
    return;
}
//挂失功能
void Bank::loss_account()
{
    //获得挂失账号
    int number= this->get_number();
    User * back_user = this->find_user(number);
    if(back_user == NULL)
    {
        cout << "查无此帐户!按任意键退出..."  << '\n';
        getch();
        return;
    }
    //获取账户密码,判断密码是否正确
    string passWord = this->get_passWord();
    if(passWord != back_user->get_passWord())
    {
        cout << "密码不正确!按任意键退出..." << '\n';
        getch();
        return;
    }
    //判断账户状态
    if(back_user->get_flag() == 1)
    {
        cout << "该帐户已经挂失,不能再次挂失!" << '\n';
        getchar();
        return;
    }
    if(back_user->get_flag()==2)
    {
        cout << "该帐户已经销户,不能再次挂失!" << '\n';
        getchar();
        return;
    }
    //获取用户输入的选择信息,确认是否销户
    char userAnswer;
    cout << "确认挂失? [1:挂失| 其他:不挂失] " << '\n';
    cin >> userAnswer;
    //销户
    if(userAnswer == '1')
    {
        back_user->set_flag(1);
        back_user->display_User();
        cout << "挂失成功!按任意键退出..." << '\n';
        getchar();
        return;
    }
    cout << "用户取消挂失!" << '\n';
    return;
}
void Bank::disloss_account()
{
    //获得解挂账号
    int number= this->get_number();
    User * back_user = this->find_user(number);
    if(back_user == NULL)
    {
        cout << "查无此帐户!按任意键退出..."  << '\n';
        getch();
        return;
    }
    //获取账户密码,判断密码是否正确
    string passWord = this->get_passWord();
    if(passWord != back_user->get_passWord())
    {
        cout << "密码不正确!按任意键退出..." << '\n';
        getch();
        return;
    }
    //判断账户状态
    if(back_user->get_flag() == 0)
    {
        cout << "该帐户正常,无需解挂!" << '\n';
        getchar();
        return;
    }
    if(back_user->get_flag()==2)
    {
        cout << "该帐户已经销户,不能解挂!" << '\n';
        getchar();
        return;
    }
    string userAnswer;
    cout << "确认解挂? [1:解挂| 其他:不解挂] " << '\n';
    cin >> userAnswer;
    //销户
    if(userAnswer=="1")
    {
        back_user->set_flag(1);
        back_user->display_User();
        cout << "解挂成功!按任意键退出..." << '\n';
        getchar();
        return;
    }
}
此Bank.cpp记录的全部为Bank类的成员函数,而一些其他的普通函数则在另一个文件中。

work.cpp:

#include<iostream>
#include<cstring>
#include"Bank.h"
#include<cstdlib>
#include<fstream>
#include <conio.h>
using namespace std;
void welcome()
{
    cout << "+--------------------------------------+" << '\n';
    cout << "|                                      |" << '\n';
    cout << "|       欢迎使用zeva银行服务系统       |" << '\n';
    cout << "|                                      |" << '\n';
    cout << "+--------------------------------------+" << '\n';
}

void mainmenu(Bank * bank)
{
    int choice = -1;
    do
    {
        cout << '\n';
        cout << "+---------------------------+" << '\n';
        cout << "| 开户请按1        取款请按5|" << '\n';
        cout << "| 销户请按2        转账请按6|" << '\n';
        cout << "| 查询请按3        挂失请按7|" << '\n';
        cout << "| 存款请按4        解挂请按8|" << '\n';
        cout << "|         退出请按0         |" << '\n';
        cout << "+---------------------------+" << '\n';
        cout << "请输入您的选择: " << '\n';
        cin >> choice;
        switch(choice)
        {
        case 0:
            exit(0);
        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->transfer_account();
            break;
        case 7:
            bank->loss_account();
            break;
        case 8:
            bank->disloss_account();
            break;
        default:
            cout << "无效选项!" << '\n';
            break;
        }
    }
    while(true);
}

void login(Bank * bank)
{
    char sNameInFile[20];   //由文件中读出的业务员用户名
    char sPassInFile[20];  //文件中保存的密码,这一版本中,用字符保存密码
    ifstream infile("password.txt",ios::in);
    if(!infile)
    {
        cout<<"password file cannot open!"<<'\n';
        exit(1);
    }
    infile>>sNameInFile>>sPassInFile;
    infile.close();
    char sName[20];   //业务员登录时输入的用户名
    char sPass[20];  //业务员登录时输入的密码
    char ch;
    int iTry=3;   //进入系统时尝试的次数

    //进入系统,密码三次不对将退出
    do
    {
        cout<<"请输入业务员用户名:";
        cin>>sName;
        cout<<"请输入密码:";
        int i=0;
        while((ch=getch())!='\r')  //getch在接受输入后,不在屏幕上显示
        {
            sPass[i++]=ch;
            putchar('*');   //接受任何字符,屏幕上只显示*
        }
        sPass[i]='\0';
        fflush(stdin);
        cout<<'\n';
        if(strcmp(sPass,sPassInFile)==0&&strcmp(sName,sNameInFile)==0)
        {
            mainmenu(bank);
            break;
        }
        else
        {
            iTry--;
            if(iTry>0)
                cout<<"超过3次将退出,你还可以尝试"<<iTry<<"次!"<<'\n';
            else
            {
                cout<<"对不起,你不能进入系统"<<'\n';
            }
        }
    }
    while(iTry);
}
此文件里面保存了最表面上的函数,包括欢迎界面啊菜单选项啊之类的,该文件依旧包含了Bank.h,其目的为顺利启用该类的成员函数完成各种业务操作,main函数中骚包的动态创立bank对象也是为了再此进行指针变量的调用,而且诸多成员函数的返回值为各种类型的指针,为了提高运行效率不惜滥用指针,这也是之后巨大BUGs存在的原因。

如果同学们记性好的话还会发现上文的Bank.h中包括了一个Linklist.h的文件,这是另一个类,链表类。

LinkList.cpp:

#include "Linklist.h"
#include <iostream>
using namespace std;
Linklist::Linklist()
{
    User * user=new User();
    this->head = make_node(user);
    this->len = 0;
    cout<<"LinkList"<<'\n';
}
Linklist::~Linklist()
{
    Node * p, * q;
    cout<<"~LinkList"<<'\n';
    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(User * user)
{
    Node * node = new Node(user);
    return node;
}
void Linklist::insert_node(Node * node)
{
    cout<<'1'<<'\n';
    Node * p = this->head;
    cout<<'2'<<'\n';
    if(p == NULL)
    {
        this->head = node;
        this->len++;
        return;
    }
    cout<<'3'<<'\n';
    while(p->get_next() != NULL)
    {
        p = p->get_next();
    }
    cout<<'4'<<'\n';
    p->set_next(node);
    this->len++;
    return;
}

Node * Linklist::find_node(int number)
{
    Node * p=this->head;
    while(p->get_user()->get_userName()!="")
    {
        cout<<"test"<<'\n';
        User * r = p->get_user();
        if(r->get_number() == number)
        {
            return p;                    //返回找到的结点
        }
        else
        {
            p = p->get_next();
        }
    }
    return p;                     //return NULL;
}
void Linklist::display_Linklist()
{
    cout << "打印用户信息中...(LinkList)" << '\n';
    Node * p = this->head;
    if(p == NULL)
    {
        cout << "链表为空..." << '\n';
        cout << "链长: " << this->len << '\n';
        cout << "记录结束..." << '\n';
        return;
    }
    while(p != NULL)
    {
        p->display_Node();
        p = p->get_next();
    }
    cout << "链长: " << this->len << '\n';
    cout << "链表结束..." << '\n';
}
LinkList.h:
#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED

#include "Node.h"
using namespace std;
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(User * user);
    void insert_node(Node * node);
    Node * find_node(int number);
    void display_Linklist();
};

#endif // LINKLIST_H_INCLUDED
由此可看出,链表类的数据成员只包含一个指向另一种类的指针和一个len(长度)而从中亦可看出,带有返回值的成员函数皆为类指针类型。而包含的Node.h文件则在下贴出。

Node.h:

#ifndef NODE_H_INCLUDED
#define NODE_H_INCLUDED

#include "User.h"
using namespace std;
class Node
{
private:
    User * user;
    Node * next;
public:
    Node();
    Node(User * user);
    ~Node();
    void set_user(User * user);
    void set_next(Node * next);
    User * get_user();
    Node  * get_next();
    Node * make_next();
    void display_Node();
};

#endif // NODE_H_INCLUDED
Node.cpp:
 #include "Node.h"
#include <iostream>
using namespace std;
Node::Node()
{
    cout<<"Node"<<'\n';
    User * user=new User();
    this->user = user;
    this->next = NULL;
}
Node::Node(User * user)
{
    cout<<"Node(user)"<<'\n';
    this->user=user;
    this->next=NULL;
}
Node::~Node()
{
    cout<<"~Node\n";
    delete this->user;
    this->user = NULL;
    this->next = NULL;
}

void Node::set_user(User * user)
{
    this->user = user;
}
void Node::set_next(Node * next)
{
    this->next = next;
}
Node * Node::make_next()
{
    Node * node=new Node();
    this->next=node;
    cout<<"make_next"<<'\n';
    return this->next;
}
User * Node::get_user()
{
    return this->user;
}
Node * Node::get_next()
{
    return this->next;
}
void Node::display_Node()
{
    cout << "打印用户信息中...(Node)" << '\n';
    if(this->user != NULL)                              //当出现空链表时执行
    {
        User * r =this->user;
        r->display_User();
    }
    else
    {
        cout << "记录为空..." << '\n';
    }
    cout << "Next * : " << this->next << '\n';
    cout << "结点结束..." << '\n';
}
由此,我们又看到一大堆成员函数以及这个Node(结点)类的成员:*next和*user,一个指向用户,一个指向下一个,下一个什么?下一个节点,也就是在这一步,我们实现了“链表”这一概念。

User.h:

#ifndef USER_H_INCLUDED
#define USER_H_INCLUDED

#include <string>
using namespace std;
class User
{
private:
    int number;
    string userName;
    string passWord;
    double balance;
    int flag;
public:
    User();
    ~User();
    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_User();
};

#endif // USER_H_INCLUDED
User.cpp:
#include "User.h"
#include <iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
User::User():number(0),userName(""),passWord(""),balance(0),flag(-1){cout<<"User"<<'\n';}
User::~User()
{
    cout<<"~user"<<'\n';
}
void User::set_number(int number)
{
    this->number = number;
}
void User::set_userName(string userName)
{
    this->userName = userName;
}
void User::set_passWord(string passWord)
{
    this->passWord = passWord;
}
void User::set_balance(double balance)
{
    this->balance = balance;
}
void User::set_flag(int flag)
{
    this->flag = flag;
}
int User::get_number()
{
    return this->number;
}
string User::get_userName()
{
    return this->userName;
}
string User::get_passWord()
{
    return this->passWord;
}
double User::get_balance()
{
    return this->balance;
}
int User::get_flag()
{
    return this->flag;
}
void User::display_User()                         //用于显示打印信息
{
    cout << "打印用户信息中...(User)" << '\n';
    cout << "+-------------------------------+" << '\n';
    cout << "|" << "账号" << '\t' << "|" << "户名" << '\t' << "|" << "余额" << '\t' << "|" << "状态" << '\t' << "|"<< '\n';
    cout << "+-------------------------------+" << '\n';
    cout << "|" << this->number << '\t' << "|" << this->userName << '\t' << "|"  << this->balance << '\t' << "|" ;
    if(this->flag == 0)
    {
        cout << "正常";
    }
    else if(this->flag==1)
    {
        cout << "挂失";
    }
    else if(this->flag==2)
    {
        cout << "销户";
    }
    cout << '\t' << "|" << '\n';
    cout << "+-------------------------------+" << '\n';
}
好!有耐心看到这里的同学我要先说声谢谢,因为就算不看内容仅仅动鼠标滚轮就要动25下了。

而我们的BUG,首先说一个最最直白的,看似在Bank类里面加了析构函数并且进行输出到文件的操作,但是,真正在运行这个程序的时候,最后退出程序时并不会执行析构函数,没错不会执行,所有的都不会执行,这是第一个表面上的BUG,而在这个BUG的后面肯定还隐藏着更多更多的BUG。

其次,就是存在的另一个问题那就是野指针,不知在何处有一个野指针,或者说有N个野指针,麻烦受累把进度条翻回Bank.cpp的Bank的构造函数中(看完下一句再翻),我们会发现再构造函数中我们注释掉了一句话是://this->list->display_Linklist();该成员函数本来意为输出整张链表,而在没有注释掉这一条命令时,整个代码没有任何错误,但是在整体程序运行的过程中,在构造函数里面打印构造完成之后的最初链表,而结果我们会发现,程序整体发生了大崩坏。

补充一句每个类都加了私有成员的公共接口,不知这是一种好习惯还是自欺欺人……

<img src="https://img-blog.csdn.net/20150718164330509?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
请小伙伴们注意图片最右侧的进度条,这是整个窗口的最上方,而链表在打印了第三个用户之后便开始出现乱码,整体已经开始有一点点走样。
<img src="https://img-blog.csdn.net/20150718164503576?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
而从此往后,整个程序开始不停地输出乱码,如果说最上面还有点表单的样子的话,那么再下面就已经完全崩坏了。
<img src="https://img-blog.csdn.net/20150718164612703?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
后来查找代码,也没发现个所以然……
诚然,指针是一把绝世好武器,但是……但是如果使用者功力不够,往往使用者会不慎伤了自己,屏幕上出了这种大BUG,同时机箱蜂鸣器也一直在滴滴滴滴响个不停,吓得我以为要爆炸了呢……好在是学校的主机,要是在自己的小本本上运行,真是心疼死我……
如果我还有信心的话,我会继续修改这些代码同时并发出来一个最终的完美版本,具体时间……可能要等到猴年马月了,额老师您要是愿意指导我一下的话我会不胜感激的,毕竟在这实训的一周里面,我可是一直很认真的在面对这些东西,尽管……马上就要考大学物理了……尽管……马上就要考数字逻辑了……尽管……这两科我学的不怎么好不好好复习就是稳挂的节奏吧……但是!!!但是!!我还是很认真的思考每一处BUG修改每一处代码,从最开始的文件无法读取,到读取之后但有信息丢失,再到信息不丢失但是野指针遍地,我都没有放弃DEBUG,但是就在今天早上,看到诸多同僚开始验收写报告,我开始感到不安,开始感到不知所措,同时连带着心情变得很低落,我预感这门课可能离我远去了,我预感如果我未来不从事IT的工作的话,C++可能就永远成为了我的回忆,可能永远也没有什么机会再敲下cin and cout。
以后和别人提到了自己学的专业,我有可能会回想下:哦,计算机啊,我学过,可是没学出来啥名堂,那些语言我都不会,尤其是那个C++。
尽管不愿意沦落到这样的地步,但是我整个人一直都是出于“嘴上说不要但是身体很诚实”的状态。
或许我和老师你有一点相似的地方吧,你说学校重视科研不重视教育,你感到很迷茫。我看到周围各种大神和学渣上演各种各样的剧本,书写各种各样的生活,我也感到很迷茫。感谢上帝让你我于茫茫人海中相遇,若不是某一个不经意的决定,也许我们一生都不会见面,不会有所交流,不会相识。
最后的最后,表示C++程序设计课,完结撒花。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值