大一c++程序设计实训 银行储蓄系统

代码:

bank.h

/* 
*版权所有 (c) 2015, 烟台大学计算机与控制工程学院. 
*All rights reserved. 
*文件名称: main.cpp 
*作者:冷基栋 
*完成日期:2015年7月16日 
*版本号:v1.0 
*内容摘要:对所有类,函数进行了声明 
*修改内容:1.运用二进制文件来存储用户的信息 
           2.运用了动态数组 
           3.增加了对用户开户,存取款以及转账的日期的记录 
           4.新增了一个基类,包含日期数据成员 
*修改日期:2015年7月16日 
*修改人:冷基栋
*/ 
#ifndef BANK_H_INCLUDED
#define BANK_H_INCLUDED
#include <cstring>
using namespace std;
class Bank;
const int upNum=2000; //系统最多容纳的用户数
/*
功能:基类,用于菜单选择,业务员登录和密码输入等先前业务
说明:相当于登录页面
*/
class BASE
{
public:
    int year; //年
    int month; //月  .
    int day; //日
public:
    int chooseInMenu();//显示菜单并由业务员选择
    int inputPassword();//返回键盘输入的密码
};
/*
功能:用户信息的声明和输入,为Bank类做准备
说明:成员函数为Bank类做辅助
*/
class User:public BASE
{
public:
    void setUser(int acc, char nam[30], int pw, double bal,char ide[50],int sta,int y,int m,int d);
    void showName();
    void showBalance(string prompt); //显示余额,前面加上提示词prompt
    bool passwordIsRight();   //校验密码,输入的密码正确则返回true
    bool isNormalUser(); //存款、取款、转帐等功能,需要账户处于正常姿态,处于正常状态时返回true,其他情形返回false并提示
    friend class Bank;   //将Bank声明为友元类,方便其访问数据成员
    char id[50];
private:
    int account; //账号
    int password;  //密码
    char name[30];   //用户名
    double balance;  //账户余额
    int status;  //状态 0-正常  1-挂失  2-销户

};
/*
功能:主要用于业务办理,信息读取和存储
说明:User类指针用于动态存储
*/
class Bank:public User
{
public:
    Bank();  //开始前从文件中读数据,存在数组中
    ~Bank();   //程序结束前,将数组中的数据写入到文件中
    void work();  //业务驱动
    void openAccount(); //开户
    void cancelAccount();  //注销账户
    void save();   //存款
    void withdraw();   //取款
    void showAccount(); //查询余额
    void transferAccounts();  //转账
    void reportLoss();  //挂失
    void cancelLoss();  //解除挂失
    void updatePassword();   //更改密码 需要验证身份ID 实际系统中应该是扫磁
    int getUser();//输入账号查询用户,返回用户在对象数组中的下标
    void savework(int usernum,string infor);//记录用户的每一笔业务
private:
    int N;  //实际的用户数目
    User *users;  //User数组,耗空间啊!改进方案:1.对象指针数组;2. 动态数组;3. 链表
};

int pass();  //业务员登录
#endif // BANK_H_INCLUDED

bank.cpp

/* 
*版权所有 (c) 2015, 烟台大学计算机与控制工程学院. 
*All rights reserved. 
*文件名称: main.cpp 
*作者:冷基栋 
*完成日期:2015年7月16日 
*版本号:v1.0 
*内容摘要:对bank类,函数进行了定义 
*修改内容:1.运用二进制文件来存储用户的信息 
           2.运用了动态数组 
           3.增加了对用户开户,存取款以及转账的日期的记录 
           4.新增了一个基类,包含日期数据成员 
*修改日期:2015年7月16日 
*修改人:冷基栋
*/ 
#include <iostream>
#include <fstream>
#include <cstdlib>
#include "bank.h"
#include <ctype.h>
#include <time.h>
using namespace std;
/*
功能:用构造函数读取文件中保存的业务数据
*/
Bank::Bank()
{
    ifstream infile("account.txt",ios::in|ios::binary);
    if(!infile)   //检测文件是否成功打开
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }

    //利用文件指针计算文件的长度,从而计算出用户对象的个数
    infile.seekg (0, ios::end);   //将文件指针标记在文件末尾
    int length = infile.tellg();  //计算出文件的长度
    N=length/sizeof(User);        //计算出对象的个数,然后用静态数据成员保存用户个数
    users=new User[N+1];          //动态数组建立对象数组
    infile.seekg(0,ios::beg);     //操作完文件指针后一定要把指针重新定义在文件首的位置
    int i=0;      //用户数目
    while(infile.read((char *)&users[i],sizeof(users[i])))
    {
        infile.read((char *)&users[i],sizeof(users[i]));
        ++i;
    }
    //用静态数据成员保存用户个数
    infile.close();
}
/*
功能:用析构函数,在退出系统时,将数据保存到文件中
*/
Bank::~Bank()
{
    ofstream outfile("account.txt",ios::binary);
    if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
    {
        cerr<<"open error!"<<endl;
        exit(1);

    }
    int i;//将users数组内的内容写回文件
    for(i=0; i<N; i++)
    {
        outfile.write((char *)&users[i],sizeof(users[i]));
    }

    outfile.close();
    free(users);      //对应realloc()函数
    delete[] users;   //切记释放动态数组占用的空间7
}
/*
功能:办理业务
*/
void Bank::work()
{
    int iChoice;   //用于选择系统功能
    //办理业务
    do
    {
        iChoice = chooseInMenu();  //从菜单中获得功能代码
        switch(iChoice)
        {
        case 1:
            openAccount(); //开户
            break;
        case 2:
            cancelAccount();  //注销账户
            break;
        case 3:
            save();  //存款
            break;
        case 4:
            withdraw();   //取款
            break;
        case 5:
            showAccount(); //查询余额
            break;
        case 6:
            transferAccounts();  //转账
            break;
        case 7:
            reportLoss();  //挂失
            break;
        case 8:
            cancelLoss();  //解除挂失
            break;
        case 9:
            updatePassword();   //更改密码
            brea

猜你喜欢

转载自blog.csdn.net/ljd939952281/article/details/46933091