程序设计项目实训——银行储蓄系统

注:本程序采用多文件组织的方法Headers:bank.h/**版权所有 (c) 2015, 烟台大学计算机与控制工程学院.*All rights reserved.*文件名称: main.cpp*作者:陆云杰*完成日期:2015年7月15日*版本号:v1.0*内容摘要:对所有类,函数进行了定义*修改内容:1.增加了一个Day类用于记录开户以及进行存取款转
摘要由CSDN通过智能技术生成

注:本程序采用多文件组织的方法

Headers:bank.h

/*

*版权所有 (c) 2015, 烟台大学计算机与控制工程学院.

*All rights reserved.

*文件名称: main.cpp

*作者:陆云杰

*完成日期:2015年7月15日

*版本号:v1.0

*内容摘要:对所有类,函数进行了定义

*修改内容:1.增加了一个Day类用于记录开户以及进行存取款转账等服务时的日期
            2.增加计算两个时间之间的天数之差的函数
            3.增加了根据业务发生的情况来计算活期利息的函数
            4.运用动态数组

*修改日期:2015年7月15日

*修改人:陆云杰

*/
#ifndef BANK_H_INCLUDED
#define BANK_H_INCLUDED
#include <cstring>
using namespace std;
const int upNum=2000; //系统最多容纳的用户数
class Day  //定义一个日期对象用于记录用户的开户日期
{
public:
    Day();
    Day(int y,int m,int d,int i,int ch);
    void set_Day(int y,int m,int d,int i,int ch);
    void showtime_0(); //显示用户的开户日期
    void showtime_1(); //显示用户上次有金额流动的日期
    int year;
    int month;
    int day;
    int I;  //记录下是否有过资金流动(0—没有过 大于0-有过)
    int choice;  //记录下上次资金流动时的选择(3-存款 4-取款 5-转入 6-转账)
};
class Bank;
class User :public Day
{
public:
    void setUser(int acc, char *nam, int pw, double bal,int sta,int y,int m,int d,int i,int ic);
    void showName();
    void showBalance(string prompt); //显示余额,前面加上提示词prompt
    bool passwordIsRight();   //校验密码,输入的密码正确则返回true
    bool isNormalUser(); //存款、取款、转帐等功能,需要账户处于正常姿态,处于正常状态时返回true,其他情形返回false并提示
    friend class Bank;   //将Bank声明为友元类,方便其访问数据成员
private:
    int account; //账号
    int password;  //密码
    char name[20];   //用户名
    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();   //更改密码
    int getUser();  //输入账号查询用户,返回用户在对象数组中的下标
private:
    int N;  //实际的用户数目
    User *users;//改进为动态数组
};

int pass();  //业务员登录
int chooseInMenu(); //显示菜单并由业务员选择
int inputPassword();   //返回键盘输入的密码
double caculate(double ,int );  //计算利息
int DaysBetween2Date(int year1,int month1,int day1,int year2,int month2,int day2);  //计算两个时间之间的天数之差
bool IsLeap(int year);  //判断是否是闰年
int DayInYear(int year, int month, int day); //计算当天是这年的第几天
#endif // BANK_H_INCLUDED


Sources:

main.cpp

/*

*版权所有 (c) 2015, 烟台大学计算机与控制工程学院.

*All rights reserved.

*文件名称: main.cpp

*作者:陆云杰

*完成日期:2015年7月15日

*版本号:v1.0

*

*/
#include <iostream>
#include "bank.h"
using namespace std;
/*主函数:*/
int main()
{
    cout<<"+----------------------+\n";
    cout<<"+    欢迎光临CSDN银行  +\n";
    cout<<"+----------------------+\n";
    if (pass())
    {
        Bank b;
        b.work();

    }
    return 0;
}


bank.cpp

/*

*版权所有 (c) 2015, 烟台大学计算机与控制工程学院.

*All rights reserved.

*文件名称: main.cpp

*作者:陆云杰

*完成日期:2015年7月15日

*版本号:v1.0

*内容摘要:对所有类,函数进行了实现

*修改内容:1.运用二进制文件来存储用户的信息
            2.运用了动态数组
            3.增加了对用户开户,存取款以及转账的日期的记录
            4.根据业务发生的情况来计算活期利息

*修改日期:2015年7月15日

*修改人:陆云杰

*/
#include <iostream>
#include <fstream>
#include <cstdlib>
#include "bank.h"
#include <ctype.h>
using namespace std;
/*
功能:用构造函数读取文件中保存的业务数据
*/
Bank::Bank()
{
    ifstream infile("binary_account.txt",ios::in|ios::binary);//打开二进制文件
    {
        if(!infile)
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        int i=0;
        users=new User[upNum];
        while(infile.read((char *)&users[i],sizeof(users[i])))   //当读取成功……
        {
            i++;
        }
        N = i; //用静态数据成员
        infile.close();
    }
}
/*
功能:用析构函数,在退出系统时,将数据保存到文件中
*/
Bank::~Bank()
{
    ofstream outfile("binary_account.txt",ios::out|ios::binary);
    if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    int i;
    for(i=0; i<N; i++)
    {
        outfile.write((char *)&users[i],sizeof(users[i]));
    }
    delete []users;
    outfile.close();
}
/*
功能:办理业务
*/
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();   //更改密码
            break;
        case 0:
            cout<<"欢迎您再来. "<<endl;
        }
    }
    while(iChoice);
}
/*
功能:开户
说明:在进入系统时,在读入数据过程中,已经记录了用户数为N,在数组中对应下标为0~N-1
  开户时要增加一个用户,只要为下标为N的数组元素置值,并在成功之后令N++即可。
  账号由系统自动生成(10001+序号),保证其连续,这样在顺序增加的时候,就保证了其有序。
*/
void Bank::openAccount()
{
    if(N==upNum)
    {
        cout<<"银行用户数已经达到上限,不能再开户";
        return;
    }
    //下面正常办理开户业务
    int acc;   //账号
    char nam[20];   //姓名
    int pw;   //密码
    double bal;   //金额
    int sta;   //状态
    int y;  //年
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值