精华内容
下载资源
问答
  •  银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并...
  • 银行管理系统数据流图,其中存取款的流图是不能分开的。
  • 银行储蓄系统.ppt

    千次阅读 2021-01-12 05:12:44
    银行储蓄系统; 需 求 分 析 概 念 设 计 逻 辑 结 构 设 计 物 理 结 构 设 计 数 据 库 实 施;需求分析;处理功能1.能够处理正常的存取款单和存取款活动,其中包括: (1)存款信息审核,反馈信息,计算账户余额,计算...

    银行储蓄系统; 需 求 分 析 概 念 设 计 逻 辑 结 构 设 计 物 理 结 构 设 计 数 据 库 实 施;需求分析;处理功能1.能够处理正常的存取款单和存取款活动,其中包括:   (1)存款信息审核,反馈信息,计算账户余额,计算存款类型和利率     (2)取款信息审核,重新计算账户余额,反馈利息2.能够对一定数量的储户、管理员进行相应的信息存储与管理,这其 中包括:  (1)储户信息的存入,查询,删除,修改 (2)管理员信息的存入,修改,查询,删除 3.能够提供一定的安全机制,提供数据信息授权访问,防止随意删改、查询。;4.对查询、统计的结果能够列表显示。 取款功能:(1) 用户输入自己的密码(2)业务员输入相关信息(3)系统利息计算,在原账户信息中将取款额减去。(4)若为清户,记录注销该账户,将账户余额一并交与 储户。(5)打印利息清单给储户。5.存款功能:(1)系统需要在原账户信息中增加一条记录,包括存款人姓名,存款类型,存款日期,利息等信息。(2)若为储户建立一个新的账户,须记录此次的记录。打印存款单给储户。;安全性和完整性 (1) 安全性要求   系统安全性要求体现在数据库安全性、信息安全性和系统平台的安全性等方面。安全性先通过视图机制,不同的用户只能访问系统授权的视图,这样可提供系统数据一定程度上的安全性,再通过分配权限、设置权限级别来区别对待不同操作者对数据库的操作来提高数据库的安全性;系统平台的安全性体现在操作系统的安全性、计算机系统的安全性和网络体系的安全性等方面。  (2) 完整性要求  系统完整性要求系统中数据的正确性以及相容性。可通过建立主、外键,使用check约束,或者通过使用触发器和级联更新。;数据流图;功能结构图;第二层数据流图(取款活动)

    第二层数据流图(存款活动);第三层数据流图(取款活动)

    第三层数据流图(存款活动);数据字典;活期存取款表

    主键:nID;外键:帐号;被参照表:储户表约束条件:各属性均非空;;定期存款表

    主键:nID;外键:帐号;被参照表:储户表约束条件:各属性均非空;;定期取款表

    主键:nID;外键:nID;被参照表:定期存款表约束条件:各属性非空;定期操作记录表

    主键:nID;外键:nID;被参照表:定期存款表,定期取款表约束条件:各属性非空;流程图;概念设计;合并各分E-R图;个实体E-R图的各属性如下所示:业务员:Maneger(ManegerNo,ManegerNa)储户:C(CName, Cpassword, CID, CSex,Cdate,Cadress,Cno,Cbalance)银行:Bank(BankNo, BankName, address, BankPN)存单:Deposit(money, date, rate,name)取单:take(money, date)

    E-R图中联系的属性如下所示:办理:transaction(MangerNo, MangerNa, C, bankbook)存取款:takeordeposit(money,date,rate);E-R图转化为关系模型储户:C(Cname, Cno, CID, CDate, CAd)银行:BANK(bankID, bankDate, bankno,bankpwd) 业务员:Maneger(MID, MName, Mpwd, MAuth, MTeleph, MAddre)存单类别:DepositTpye(DPID, DPName, DPnum, DPbqx, DPqx)

    各E-R图中联系的属性如下所示:存款信息:Deposit (DepositID, DepositorID, DepositDate, Depositnum)取款历史:Draw(DepositID,Depositpwd, Drawnum, DrawDate)查询信息:Inquire(AccountID,Accountpwd, DepositorName, DepositorID,Accountnum);系统功能模块账户基本信息的查询和更新模块;模型优化

    实体的属性就是关系的属性,实体的码就是关系的码。关系模式Depositor,Account,Maneger,DepositTpye,存在非主属性对主属性的部分函数依赖,也不存在传递函数依赖,已经达到了3NF,但是存款信息关系模式,取款历史关系模式,查询信息关 系模式(Deposit,

    展开全文
  • 银行储蓄系统前期分析 包括项目背景,数据流图,数据字典
  • 银行储蓄管理系统 构架设计 一体系结构 1系统需求 储户用卡取款时不能直接取款要先填取款表交给业务员输入资料再由储 户输入密码以确认身份还要在取款表单上签名以再次确认 最后业务员才把现 金交给储户 库存余额 ...
  • 简述开发软件所具有的功能,采用系统流程图、数据流图表示,数据流图包括顶层、中间层和底层数据流图,至少编写一个数据流的字典条目和一个数据文件的字典条目及相关数据项条目,用结构化语言编写一个加工逻辑说明。
  • 软件名称:银行储蓄系统。 2.软件功能:为银行储户提供开户,销户,补办,挂失,解挂,存款,取款,转账等操作。 3.与其他子系统的关系:此系统为银行系统的一部分,整个银行分为六个部分,另外五个为:贷款业务,...
  • 银行储蓄管理系统_ 课程设计报告 全套,包括: 一、系统定义…………………………………………………..3 二、需求分析…………………………………………………..3 (一)系统综合需求 (二)系统逻辑模型 1.数据...
  • 银行管理系统数据库

    2013-06-22 12:16:28
    银行管理系统分析及代码实现 这次的课程设计,我选择做银行储蓄系统,主要是觉得这个比较简单看起来。不过,在做课程设计的时候,也学了比较多的知识,恶补了很多以前的功课。最开始时,面对这样一些题目,平时也没...
  • 银行储蓄业务系统

    2008-04-17 19:13:54
    我从网上下的,好像还比较好用
  • 数据库结构图(DB的结构,主要指表与表之间的结构,表内部结构(字段、域、数据字典等)。 5.HIPO图(层次化模块控制图、IPO图等等)。 6.系统详细设计方案说明书。 二、系统设计说明书的组成 1.引言 ...
  • 为方便储户,某银行拟开发计算机储蓄系统

    万次阅读 多人点赞 2017-09-19 18:53:11
    1.为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并...

    1.为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。 写出问题定义并分析系统的可行性。

    答:如果是存款,储户填写存款单,然后交给业务员键入系统,同时系统还要记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、利率等信息,完成后由系统打印存款单给储户。

    如果是取款,储户填写取款单,然后交给业务员,业务员把取款金额输入系统并要求储户输入密码以确认身份,核对密码正确无误后系统计算利息并印出利息清单给储户。

          为了满足储户的需求,该系统需要迅速的对用户的要求做出反馈,要对用户输入的信息作出最快的处理,所以就需要很大的主存容量,以及强大的数据库支持。由于是所面向的用户是广泛的储蓄用户群,所以需要系统强大的安全性能支持。可行性研究方法

    条件、假定和限制

    建议开发软件运行的最短寿命:5年

    进行系统方案选择比较的期限:2个月

    经费来源和使用限制:定制银行

    硬件、软件、运行环境和开发环境的条件和限制:

    银行中心拥有大型机以及用来支持的数据库,各个银行网点都有安

    好的PC机,安装有Windows2000及以上的操作系统。

    建议开发软件投入使用的最迟时间:开发完成后试运行1个月。

    可行性研究方法

    通过与银行熟练业务员进行深入讨论,制定详细用户调查问卷,真正了解用户以及银行业务员的实际需求,根据业务员提供的信息以及问题定义再综合调查问卷中用户提出的意见进行改进。最终确定项目需要解决的问题,并确定问题能不能被解决。

    决定可行性的主要因素

    1)项目开发成本

    2)所需设备置办成本

    3)技术是否能满足需求

    4)操作人员的熟练程度

    5)资源有效性

    对现有系统的分析

    1处理流程和数据流程

    系统流程图

    存款流程图:

     

    取款流程图:

     

    数据流图:

    2工作负荷

    当前大多数银行所使用的银行储蓄系统在办理业务时手续繁琐,人工业务操作过多,办理一个客户的业务就需耗费较长的时间,其他客户只有等待。这样太浪费时间,需要大量的业务员处理客户业务。特别是在节假日人流高峰期,导致工作效率非常低,且出错率高,以致客户等待办理手续过长感到不耐烦,降低了银行效率。这也给银行工作人员增加了非常大的负担和额外的工作负荷;同时业务员增多,银行费用支出多,给银行公司的发展带来严重的制约和压力。

    3费用支出

    运行现有系统所需要的费用支出包括:银行业务员及其他工作人员的工资,系统维护所需资金,

    4人员

    需要大量的业务员、客服人员,系统维护人员以及其他工作人员。

    5设备

    现有系统所需要的设备有:打印机、PC机、电脑。

    6局限性

    工作效率底下,不能符合大量群众的及时需求,给群众的生活带来不便。这是现有系统办理业务的流程中出现的一个严重问题。为了解决这一问题,让人们再办理银行业务更加方便快捷,我们急需开发一个更为高效的银行计算机储蓄系统,让储蓄业务不用再排队。

    (1)当前银行使用的银行储蓄系统在办理业务时仅仅靠手工操作,人工业务占据了全部,所以要求银行业务员办理业务时细心耐心,对数字敏感,算术水平高。它严重影响了工作效率,且出错率高,储户办理事务时需要等待时间过长,需要大量的银行业务员才能满足日益增长的存取款要求。

    (2)用纸张记录保存用户存款记录查找繁琐,耗时久,不方便,且容易丢失。且人工记录不能保证万无一失,容易出现数据录入错误。随着用户数的增多,这个缺陷会越发凸显。

    (3)存款记录保密性差,任何一个业务员都可以随意更改查阅用户数据,用户的资料容易泄漏,带来安全隐患。

    (4)业务员服务的时间有限,不能24小时办理业务,没有应急处理,不能更好的解决群众的需求。

    (5)所有客户的业务都由业务员手工办理,浪费人力资源。有的简单的业务经改进可由机器完成,完全不用人工参与,这样节约了人力成本,也提高效率。

    6)对现有系统的改进维护只能依靠增多业务员数量,增多银行分行数目,提高业务员业务素质来实现。增多业务员数量会导致银行人员支出大大增多,同时需要多选址建设分行,或者扩大分行规模,费用代价巨大。业务员的业务素质需要培养,不能短期无限看见成效,及培养新人员需要一定的时间,这又浪费资金和人力资源。对现用系统的改进型维护已经不能解决储户越来越多、储户时间越来越长的问题。


    2.北京某高校可用的电话号码有以下几类:校内电话号码由4位数字组成,第一位数字不是0.校外电话又分为本市电话和外地电话两类。拨校外电话需要先拨0,若是本市电话则接着拨8位数字(第一位不是0),若是外地电话则拨3位区码后再拨8位电话号码(第一位不是0)。

    答: 电话号码=[校内号码|校外号码]
       校内号码=非0数字+3{数字}3
       校外号码=[本市号码|外地号码]
       本市号码=数字0+8位数字
       外地号码=数字0+区码+8位数字
       8位数字=非0数字+7{数字}7
       区码=3{数字}3
       数字=[0|1|2|3|4|5|6|7|8|9]
       非0数字=[1|2|3|4|5|6|7|8|9]
       数字0=0

    展开全文
  • 银行储蓄系统

    千次阅读 2015-07-17 15:19:46
    if(mon>50) //一般银行开户最低金额为50 { users[nownum].setUser(acc,nam,id,di,pho,pw,mon,sta);//出了好几次错的地方 id ++nownum; //正式用户数增加1,确认了新用户已经加入 cout开户成功!") //说明id账户存在...

    /* 
     *Copyright  (c)  2014,烟台大学计算机学院 
     *All rights reserved. 
     *文件名称: test.cpp 
     *作        者:陈丹 
     *完成日期:2015年7月16日 
     *版本号:v1.0 
     * 

    主函数

    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    #include <fstream>
    #include <iomanip>
    #include <cstdio>
    #include "staff.h"
    #include "bank.h"
    #include "user.h"
    #include <ctime>
    using namespace std;
    void ctime();
    int main()
    {
        cout<<"+-----------------------------------+"<<endl;
        cout<<"+ ※※※                             +"<<endl;
        cout<<"+       Welcome to dream bank       +"<<endl;
        cout<<"+                            ※※※  +"<<endl;
        cout<<"+-----------------------------------+"<<endl;
        //ctime();
        Bank b;
        if(!b.passtaff())            //业务员登录
            exit(1);                 //退出系统
        cout<<endl;
        ctime();
        b.showMenu();                //显示菜单
        b.manage();                  //开始工作
        return 0;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:ctime
     *功能描述:获取系统信息
     *输入参数:
     *输出参数:输出现在时间并将其保存到time.txt文件中
     *返回值:
     *说明:     这个函数借鉴的度娘。
     *-----------------------------------------------------------------------------------------*/
    void ctime()
    {
        tm *year; //年
        tm *month; //月
        tm *day; //日
        tm *hour;//时
        tm *minute;
        tm *second;
        time_t t;
        t=time(0);
        year   = localtime(&t);
        month  = localtime(&t);
        day    = localtime(&t);
        hour   = localtime(&t);
        minute = localtime(&t);
        second = localtime(&t);
        cout<<"现在时间:"<<(year ->tm_year+1900)<<"年"  //返回的是今年减1900,所以要加上1900
               <<(month->tm_mon+1)<<"月"     //因为Month (0 – 11; January = 0),所以要加1
               <<day   ->tm_mday<<"日"
               <<hour  ->tm_hour<<"时"
               <<minute->tm_min<<"分"
               <<second->tm_sec<<"秒";
        ofstream outfile("time.txt",ios::app);
        if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        outfile<<(year ->tm_year+1900)<<"年"  //返回的是今年减1900,所以要加上1900
               <<(month->tm_mon+1)<<"月"     //因为Month (0 – 11; January = 0),所以要加1
               <<day   ->tm_mday<<"日"
               <<hour  ->tm_hour<<"时"
               <<minute->tm_min<<"分"
               <<second->tm_sec<<"秒";
    }
    

    bank.h

    #ifndef BANK_H_INCLUDED
    #define BANK_H_INCLUDED
    #include <iostream>
    #include <cmath>
    #include <iomanip>
    #include <ctype.h>
    #include <cstdlib>
    #include <cstdio>
    #include <conio.h>
    #include "user.h"
    #include <ctime>
    using namespace std;
    class Bank
    {
    public:
        Bank()
        {
            nownum=0;
        }
        bool passtaff();             //业务员信息
        void openfile();             //导入文件
        void savefile2(int acc, string nam, char id[18], char di[30],char pho[11],int pw, double mon,int sta);   //保存一行数据
        void caculfile();            //计算
        void savefile();             //保存文件
        void manage();               //开始工作
        void showMenu();             //显示菜单
        void openAccount();          //开户
        void deleteAccount();        //销户
        void saveMoney();            //存款
        void drawMoney();            //取款
        void refer();                //查询
        void transfer();             //转账
        void reportLoss();           //挂失
        void hangSolution();         //解挂
        void changePassword();       //改密
        void changename();           //改姓名
        void changeidcard();         //改身份证
        void changedizhi();          //改地址
        void changephone();          //改电话
        void display();             //显示个人信息
        void changedisplays();      //修改个人信息
        int getUser();              //查找用户
        int jishu();                  //计算用户数
    private:
        int nownum;
        User *users;
        //User数组,动态数组 体现在保存文件方面   delete[]users
    };
    
    
    #endif // BANK_H_INCLUDED
    

    bank.cpp

    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    #include <stdio.h>
    #include <fstream>
    #include "staff.h"
    #include "bank.h"
    #include <ctime>
    using namespace std;
    /*-----------------------------------------------------------------------------------------*
     *函数名称:inputPassword
     *功能描述:接收密码,并且将其转化成数字,最后输出为“******”,并且密码要求不能全为0
     *输入参数:ch一位一位的输入
     *输出参数:"******"
     *返回值:  返回密码
     *说明:    这里要注意如何将字符转化成数字,并且这里只有用getch()和putchar('*')才能成功
                使得密码成为"******"格式
     *-----------------------------------------------------------------------------------------*/
    int inputPassword()
    {
        char ch;  //接收字符形式密码
        int iPass=0;   //要转换为数字
        int i;
        while(1)
        {
            for(i=0; i<6; i++)
            {
                ch=getch();  //输入但不显示
                putchar('*');   //输出*
                if(isdigit(ch))
                    iPass=iPass*10+(ch-'0');
                else
                {
                    iPass=0;
                    break;  //退出for循环后,再次接受
                }
            }
            fflush(stdin); //清除键盘缓存区中已经有的输入
            cout<<endl;
            if(iPass==0)  //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
            {
                cout<<"密码要求全为数字,且不能全0!"<<endl;;
                cout<<"请重新输入密码: ";
            }
            else
                break;
        }
        return iPass;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:passtaff
     *功能描述:用于业务员账户的登录,输入账户号码,并且接收密码,并且将其转化成数字,输出为“***
                ***”,判断账户跟密码是否正确,正确则返回true,成功登录,如果错误则输出"请输入密
                码:"字样,错误三次自动退出系统。
     *输入参数:业务员账户,以及密码ch一位一位的输入
     *输出参数:"******"
     *返回值:  输入的业务员密码true/false
     *说明:    注意业务员的密码的输入,以及错误三次退出
     *-----------------------------------------------------------------------------------------*/
    bool Bank::passtaff()
    {
        Staff s1;
        string acc;
        char ch;
        cout<<"请输入业务员账户:";
        cin>>acc;
        for(int j=0; j<3; ++j)
        {
            int pw=0;
            cout<<"请输入密码:";
            for(int i=0; i<6; i++)
            {
                ch=getch();  //输入但不显示
                putchar('*');   //输出*
                pw=pw*10+(ch-'0');
            }
            if(s1.pass(acc,pw))
            {
                return true;
            }
            else
            {
                cout<<"\n用户名或密码错误。"<<endl;
            }
        }
        cout<<"\n错误三次,系统自动退出。"<<endl;
        return false;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:showMenu
     *功能描述:显示菜单,输出所有的操作选项。
     *输入参数:
     *输出参数:
     *返回值:
     *说明:     输出尽量整齐有序,美观。
     *-----------------------------------------------------------------------------------------*/
    void Bank::showMenu()
    {
        cout<<endl;
        cout<<"+--------------------------------+"<<endl;
        cout<<"+ 1 开户      2 销户      3 存款 +"<<endl;
        cout<<"+ 4 取款      5 查询      6 转账 +"<<endl;
        cout<<"+ 7 挂失      8 解挂      0 退出 +"<<endl;
        cout<<"+ 9 修改信息         10 个人信息 +"<<endl;
        cout<<"+--------------------------------+"<<endl;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:manage
     *功能描述:开始工作菜单,接收操作指令,用switch()语句完成
     *输入参数:输入所选操作
     *输出参数:输出所选操作的具体
     *返回值:
     *说明:    switch()语句的应用
     *-----------------------------------------------------------------------------------------*/
    void Bank::manage()
    {
        int order=1;
        do
        {
            openfile();
            cout<<"请输入操作指令:";
            cin>>order;
            switch(order)
            {
            case 1:
                openAccount();
                break;
            case 2:
                deleteAccount();
                break;
            case 3:
                saveMoney();
                break;
            case 4:
                drawMoney();
                break;//取款
            case 5:
                refer();
                break;//查询
            case 6:
                transfer();
                break;//转账
            case 7:
                reportLoss();
                break;//挂失
            case 8:
                hangSolution();
                break;//解挂
            case 9:
                changedisplays();
                break;//修改个人信息
            case 10:
                display();
                break;//显示个人信息
            case 0:
                cout<<endl;
                cout<<"+--------------------------------------+"<<endl;
                cout<<"+        谢谢您的使用,再见!          +"<<endl;
                cout<<"+--------------------------------------+"<<endl;
                exit(1);
                break;
            }
            savefile();
        }
        while(1);
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:openAccount
     *功能描述:开户,按照提示输入个人信息,如果输入的个人信息合格,即可成功开户,否则不能开户
     *输入参数:输入各个信息
     *输出参数:如果输入合格,则输出"开户成功"
     *返回值:
     *说明:    注意各项输入,身份证号与电话号都是固定位数。
     *-----------------------------------------------------------------------------------------*/
    void Bank::openAccount()  //开户
    {
        int acc;   //账号
        char nam[20];   //姓名
        int pw;   //密码
        char di[30]; //地址
        char pho[11];//电话
        double mon;   //金额
        int sta;   //状态
        char id[18];   //身份证号
    
        cout<<"正在开户"<<endl;
        acc=10001+nownum;
        cout<<"账号:"<<acc<<endl;
        cout<<"户主姓名:";
        cin>>nam;
        cout<<"身份证号:";
        for(int n=0; n<18; n++)
        {
            cin>>id[n];
        }
        cout<<"地址:";
        cin>>di;
        cout<<"联系电话(请输入正确的手机号码):";
        for(int n=0; n<11; n++)
        {
            cin>>pho[n];
        }
        int Pass1, Pass2;
        cout<<"密码:";
        Pass1=inputPassword();  //输入密码1
        cout<<"确认密码:";
        Pass2=inputPassword();  //输入密码2
        if(Pass1==Pass2)
        {
            pw=Pass1;
            sta=0; //账户状态为“正常”
            cout<<"存入金额:";
            cin>>mon;
            if(mon>50) //一般银行开户最低金额为50
            {
                users[nownum].setUser(acc,nam,id,di,pho,pw,mon,sta);//出了好几次错的地方  id
                ++nownum;                           //正式用户数增加1,确认了新用户已经加入
                cout<<"开户成功!"<<endl;
            }
            else
                cout<<"金额少于50元,开户失败"<<endl;
        }
        else
        {
            cout<<"两次密码不一致,未成功开户!"<<endl; //没有N++,则读入的值无效
        }
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:deleteAccount
     *功能描述:销户,输入用户账号以及密码,显示出账户余额,完成销户的功能(在这里保存销户的具体
               ,输出到"time.txt")
     *输入参数:输入用户账号及密码以及'y'/'n'
     *输出参数:输出余额,若输入'y',则输出"销户成功!本次取款金额为:"的字样,若输入'n',则输出
                "你取消了操作,销户失败!"
     *返回值:
     *说明:     注意对业务的保存(输出时间,用户,姓名,业务,保存到time.txt文件中)
     *-----------------------------------------------------------------------------------------*/
    void Bank::deleteAccount()
    {
        int who;  //查找到该账号在数组中对应的下标
        who=getUser();  //根据账号查询用户,返回用户的下标
        if(who>=0)   //说明id账户存在
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                users[who].showMoney("余额:");   //提示"余额"二字,显示金额
                cout<<"确认销户(y/n)?";
                if(getchar()=='y'||getchar()=='Y')
                {
                    users[who].showMoney("销户成功!本次取款金额为:");
                    users[who].money=0;  //取款后余额变0
                    users[who].status=2;  //状态变为注销
    
                }
                else
                {
                    cout<<"你取消了操作,销户失败!"<<endl;
                }
                ofstream outfile("time.txt",ios::app);
                if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
                {
                    cerr<<"open error!"<<endl;
                    exit(1);
                }
                char *ctime(const time_t *time);
                outfile<<'\t'<<users[who].account<<'\t'<<users[who].name<<'\t'<<"改变状态为:"<<users[who].status<<endl;
                outfile.close();
                fflush(stdin);  //清除了getchar()时在键盘缓存中的遗留,以免影响后续操作
            }
        }
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:saveMoney
     *功能描述:存款,输入用户账号,存款完毕后显示出账户余额,完成存款的功能(在这里保存存款的具
                体,输出到"time.txt")
     *输入参数:输入用户账号及存入金额
     *输出参数:若状态为0,则输出余额,若状态为1,输出"该用户处于挂失状态,存款失败!",若状态为
                2,则输出"该用户已经销户,存款失败!"
     *返回值:
     *说明:     注意对业务的保存(输出时间,用户,姓名,业务,保存到time.txt文件中)
     *-----------------------------------------------------------------------------------------*/
    void Bank::saveMoney() //存款
    {
        int who;
        double money;
        who=getUser();  //根据账号查询用户,返回用户的下标
        if(who>=0)   //说明id账户存在
        {
            if(users[who].status==0)
            {
                users[who].showName();
                //cout<<endl;
                cout<<"输入存款额:";
                cin>>money;
                users[who].money+=money;
                users[who].showMoney("存款后,金额为:");
                ofstream outfile("time.txt",ios::app);
                if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
                {
                    cerr<<"open error!"<<endl;
                    exit(1);
                }
                char *ctime(const time_t *time);
                //ctime();
                outfile<<'\t'<<users[who].account<<'\t'<<users[who].name<<'\t'<<"存入金额"<<money<<"元"<<endl;
                outfile.close();
            }
        else if(users[who].status==1)
        {
            cout<<"该用户处于挂失状态,存款失败!"<<endl;
        }
        else if(users[who].status==2)
        {
            cout<<"该用户已经销户,存款失败!"<<endl;
        }
        }
        return;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:drawMoney
     *功能描述:取款,输入用户账号以及密码,通过对账号及密码的判断,输入取款金额,完成取款的功
                能(在这里保存取款的具体,输出到"time.txt")
     *输入参数:输入用户账号,密码,以及取款金额
     *输出参数:若输入的取款金额大于账户中全部金额,则输出"余额不足,取款失败!",否则输出"取
                款后,余额为:"的字样
     *返回值:
     *说明:     注意对业务的保存(输出时间,用户,姓名,业务,保存到time.txt文件中)
     *-----------------------------------------------------------------------------------------*/
    void Bank::drawMoney() //取款
    {
        int who;
        double money;
        who=getUser();  //根据账号查询用户,返回用户的下标
        if(who>=0)   //说明id账户存在
        {
            if(users[who].isNormalUser())
            {
                users[who].showName();
                if(users[who].passwordIsRight())
                {
    
                    cout<<"输入取款额:";
                    cin>>money;
    
                    if(money>users[who].money)
                    {
                        cout<<"余额不足,取款失败!"<<endl;
                    }
                    else
                    {
                        users[who].money-=money;
                        users[who].showMoney("取款后,余额为:");
    
                    }
                     ofstream outfile("time.txt",ios::app);
                if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
                {
                    cerr<<"open error!"<<endl;
                    exit(1);
                }
                char *ctime(const time_t *time);
                //ctime();
                outfile<<'\t'<<users[who].account<<'\t'<<users[who].name<<'\t'<<"取出金额"<<money<<"元"<<endl;
                outfile.close();
                }
            }
        }
        return;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:refer
     *功能描述:查询用户状态以及已办业务,输入用户账号以及密码,通过对账号及密码的判断,输出该
                账户的状态及余额,若选择继续查询,则输出time.txt文件中该账户曾办业务的信息。
     *输入参数:输入用户账号,密码,'y'/'n'
     *输出参数:输出该账户的状态及余额以及用户办业务的详细信息
     *返回值:
     *说明:     注意这里对time.txt文件中用户信息的调用,注意{}的适用范围。
     *-----------------------------------------------------------------------------------------*/
    void Bank::refer()    //查询
    {
        int who;
        int cacc;
        char pan;
        string cnam;
        string sta[3]= {"正常","挂失","已经销户"};
        string hms;
        string cyw;
        who=getUser();  //根据账号查询用户,返回用户的下标
        if(who>=0)   //说明id账户存在
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                users[who].showMoney("余额:");
                cout<<"状态:"<<sta[users[who].status]<<endl;
                cout<<"是否进行详细查询(y/n)?"<<endl;;
    
                cin>>pan;
                if(pan=='y')
                {
                    ifstream infile("time.txt",ios::in);
                    if(!infile)    //测试文件打开操作是否成功,不成功则提示后退出。
                    {
                        cerr<<"open error!"<<endl;
                        exit(1);
                    }
    
                    while(infile>>hms>>cacc>>cnam>>cyw) //天啦撸,一定要注意这里的判断!
                    {
                        if(users[who].account==cacc)
                        {
                            cout<<hms<<'\t'<<cacc<<'\t'<<cnam<<'\t'<<cyw<<endl;
                        }
                    }
    
                        if(users[who].account!=cacc)
                        {
                          cout<<"当前未办理过任何业务。"<<endl;
                        }
                    infile.close();
                }
                else
            {
                cout<<"+-------------查询结束-------------+"<<endl;
                cout<<endl;
            }
            }
    
    
        }
        return;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:transfer
     *功能描述:转账,输入用户账号以及密码,通过对账号及密码的判断,再输入被转用户的账号,
                输入转账金额,若金额不够,则输出"余额不足,转账失败!"的字样,若金额足够,则输
                出转账后余额,完成转账的功能(在这里保存转账的具体,输出到"time.txt")
     *输入参数:输入用户账号,密码,以及被转账者的账号与转账金额
     *输出参数:若输入的转账金额大于账户中全部金额,则输出"余额不足,转账失败!",否则输出"转账
                后,余额为:"的字样
     *返回值:
     *说明:     注意对业务的保存(输出时间,用户,姓名,业务,保存到time.txt文件中)
     *-----------------------------------------------------------------------------------------*/
    void Bank::transfer()   //转账
    {
        int whoout, whoin;
        double money;
        cout<<"转出自";
        whoout=getUser();  //根据账号查询用户,返回用户的下标
        if(whoout>=0)   //说明id账户存在
        {
            if(users[whoout].isNormalUser())
            {
                users[whoout].showName();
                if(users[whoout].passwordIsRight())
                {
                    cout<<"输入转账金额:";
                    cin>>money;
                    if(money>users[whoout].money)
                    {
                        cout<<"余额不足,转账失败!"<<endl;
                    }
                    else
                    {
                        cout<<"转出到";
                        whoin = getUser();  //根据账号查询用户,返回用户的下标
                        if(whoin>=0)   //说明id账户存在
                        {
                            if(users[whoin].isNormalUser())
                            {
                                users[whoout].money-=money;
                                users[whoin].money+=money;
                                users[whoout].showMoney("转账后,余额为:");
    
                            }
                        }
                    }
                    ofstream outfile("time.txt",ios::app);
                                if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
                                {
                                    cerr<<"open error!"<<endl;
                                    exit(1);
                                }
                                  char *ctime(const time_t *time);
                                 //ctime();
                                outfile<<'\t';
                                outfile<<users[whoout].account<<'\t'<<users[whoout].name<<'\t'<<"转出金额"<<money<<"元"<<endl;
                                outfile.close();
                }
            }
        }
        return;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:reportLoss
     *功能描述:挂失,输入用户账号以及密码,通过对账号及密码的判断,使得用户状态变为挂失,
                完成挂失的功能(在这里保存挂失的具体,输出到"time.txt")
     *输入参数:输入用户账号,密码
     *输出参数:若用户状态本为0,则将状态变为1,挂失成功,若用户原来状态为1/2,那么则不能
                成功挂失。
     *返回值:
     *说明:     注意对业务的保存(输出时间,用户,姓名,业务,保存到time.txt文件中)
     *-----------------------------------------------------------------------------------------*/
    void Bank::reportLoss()   //挂失
    {
        int who;
        who = getUser();  //根据账号查询用户,返回用户的下标
        if(who>=0)   //说明id账户存在
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                if(users[who].status==0)
                {
                    users[who].status=1;
                    cout<<"挂失成功"<<endl;
    
                }
                else if(users[who].status==1)
                {
                    cout<<"该账户已经处于挂失状态"<<endl;
                }
                else if(users[who].status==2)
                {
                    cout<<"该账户已销户,不能挂失"<<endl;
                }
                ofstream outfile("time.txt",ios::app);
                                if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
                                {
                                    cerr<<"open error!"<<endl;
                                    exit(1);
                                }
                                  char *ctime(const time_t *time);
                                 //ctime();
                                outfile<<'\t';
                                outfile<<users[who].account<<'\t'<<users[who].name<<'\t'<<"改变状态为:"<<users[who].status<<endl;
                                outfile.close();
            }
        }
        return;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:hangSolution
     *功能描述:解挂,输入用户账号以及密码,通过对账号及密码的判断,使得用户状态变为正常状态0,
                完成解挂的功能(在这里保存解挂的具体,输出到"time.txt")
     *输入参数:输入用户账号,密码
     *输出参数:若用户状态本为1,则将状态变为0,解挂成功,若用户原来状态为2,那么则不能
                成功解挂,若用户原来状态为0,那么则不能做此操作
     *返回值:
     *说明:     注意对业务的保存(输出时间,用户,姓名,业务,保存到time.txt文件中)
     *-----------------------------------------------------------------------------------------*/
    void Bank::hangSolution() //解挂
    {
        int who;
        who = getUser();  //根据账号查询用户,返回用户的下标
        if(who>=0)   //说明id账户存在
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                if(users[who].status==0)
                {
                    cout<<"该账户处于正常状态,不需要解除挂失"<<endl;
                }
                else if(users[who].status==1)
                {
                    users[who].status=0;
                    cout<<"解除挂失成功"<<endl;
                }
               else if(users[who].status==2)
                {
                    cout<<"该账户已销户,操作无效"<<endl;
                }
                 ofstream outfile("time.txt",ios::app);
                                if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
                                {
                                    cerr<<"open error!"<<endl;
                                    exit(1);
                                }
                                  char *ctime(const time_t *time);
                                 //ctime();
                                outfile<<'\t';
                                outfile<<users[who].account<<'\t'<<users[who].name<<'\t'<<"改变状态为:"<<users[who].status<<endl;
                                outfile.close();
            }
        }
        return;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:changePassword
     *功能描述:改密,输入用户账号以及密码,通过对账号及密码的判断,输入两次新密码,如果两
                次相同则成功修改密码,否则,密码修改失败(在这里保存改密的具体,输出到"time.txt")
     *输入参数:输入用户账号,密码以及新密码
     *输出参数:若输入两次密码相同,则输出"密码修改成功!"的字样,若不同,则输出"两次输入不同,
                修改失败!"的字样
     *返回值:
     *说明:     注意对业务的保存(输出时间,用户,姓名,业务,保存到time.txt文件中)
     *-----------------------------------------------------------------------------------------*/
    void Bank::changePassword() //改密
    {
        int who;
        int iPass1, iPass2;
        who = getUser();  //根据账号查询用户,返回用户的下标
        if(who>=0)   //说明id账户存在
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                cout<<"新密码:";
                iPass1=inputPassword();  //输入密码1
                cout<<"确认密码:";
                iPass2=inputPassword();  //输入密码2
                if(iPass1==iPass2)
                {
                    users[who].password=iPass1;
                    cout<<"密码修改成功!"<<endl;
                }
                else
                {
                    cout<<"两次输入不同,修改失败!"<<endl;
                }
                  ofstream outfile("time.txt",ios::app);
                                if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
                                {
                                    cerr<<"open error!"<<endl;
                                    exit(1);
                                }
                                  char *ctime(const time_t *time);
                                 //ctime();
                                outfile<<'\t';
                                outfile<<users[who].account<<'\t'<<users[who].name<<'\t'<<"改变密码:"<<users[who].password<<endl;
                                outfile.close();
            }
        }
        return;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:changename
     *功能描述:修改用户名,输入用户账号以及密码,通过对账号及密码的判断,输入新姓名以及'y'/'n',
                若输入'y',则改名成功,若输入'n',则取消本次修改(在这里保存修改用户名的具体,输出到"t
                ime.txt")
     *输入参数:输入用户账号,密码以及新姓名,'y'/'n'
     *输出参数:若输入'y'则输出"用户名修改成功!"的字样,若输入'n',则输出"你已取消修改!"的字样
     *返回值:
     *说明:     注意对业务的保存(输出时间,用户,姓名,业务,保存到time.txt文件中)
     *-----------------------------------------------------------------------------------------*/
    
    void Bank::changename() //修改用户名
    {
        int who;
        string nam;
        char pan;
        who = getUser();  //根据账号查询用户,返回用户的下标
        if(who>=0)   //说明id账户存在
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                cout<<"新姓名:";
                cin>>nam; //输入用户名
                cout<<"确认修改姓名(y/n)?";
                cin>>pan;
                if(pan=='y')
                {
                    users[who].name=nam;
    
    
                    cout<<"用户名修改成功!"<<endl;
                }
                else
                {
                    cout<<"你已取消修改!"<<endl;
                }
                 ofstream outfile("time.txt",ios::app);
                                if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
                                {
                                    cerr<<"open error!"<<endl;
                                    exit(1);
                                }
                                  char *ctime(const time_t *time);
                                 //ctime();
                                outfile<<'\t';
                                outfile<<users[who].account<<'\t'<<users[who].name<<'\t'<<"改变用户名:"<<users[who].name<<endl;
                                outfile.close();
            }
        }
        return;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:changedizhi
     *功能描述:修改地址,输入用户账号以及密码,通过对账号及密码的判断,输入新地址以及'y'/'n',
                若输入'y',则改地址成功,若输入'n',则取消本次修改(在这里保存修改地址的具体,输出到"t
                ime.txt")
     *输入参数:输入用户账号,密码以及新地址,'y'/'n'
     *输出参数:若输入'y'则输出"地址修改成功!"的字样,若输入'n',则输出"你已取消修改!"的字样
     *返回值:
     *说明:     注意对业务的保存(输出时间,用户,姓名,业务,保存到time.txt文件中)
     *-----------------------------------------------------------------------------------------*/
    void Bank::changedizhi() //修改地址
    {
        int who;
        char di[30];
        char pan;
        who = getUser();  //根据账号查询用户,返回用户的下标
        if(who>=0)   //说明id账户存在
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                cout<<"新地址:";
                gets(di); //输入地址
                cout<<"确认修改地址(y/n)?";
                cin>>pan;
                if(pan=='y')
                {
                    for(int n=0; n<30; n++)
    
                        users[who].dizhi[n]=di[n];
    
    
                    cout<<"地址修改成功!"<<endl;
                }
                else
                {
                    cout<<"你已取消修改!"<<endl;
                }
                ofstream outfile("time.txt",ios::app);
                                if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
                                {
                                    cerr<<"open error!"<<endl;
                                    exit(1);
                                }
                                  char *ctime(const time_t *time);
                                 //ctime();
                                outfile<<'\t';
                                outfile<<users[who].account<<'\t'<<users[who].name<<'\t'<<"改变地址:"<<users[who].dizhi<<endl;
                                outfile.close();
            }
        }
        return;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:changeidcard
     *功能描述:修改身份证号,输入用户账号以及密码,通过对账号及密码的判断,输入新身份证号以及
                'y'/'n',若输入'y',则改身份证号成功,若输入'n',则取消本次修改(在这里保存修改身份
                证号的具体,输出到"time.txt")
     *输入参数:输入用户账号,密码以及新身份证号,'y'/'n'
     *输出参数:若输入'y'则输出"身份证号修改成功!"的字样,若输入'n',则输出"你已取消修改!"的字样
     *返回值:
     *说明:     注意对业务的保存(输出时间,用户,姓名,业务,保存到time.txt文件中)
     *-----------------------------------------------------------------------------------------*/
    void Bank::changeidcard()
    {
        int who;
        char id[18];
        char pan;
        who = getUser();  //根据账号查询用户,返回用户的下标
        if(who>=0)   //说明id账户存在
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                cout<<"新身份证号:";
                gets(id); //输入身份证号
                cout<<"确认修改身份证号(y/n)?";
                cin>>pan;
                if(pan=='y')
                {
                    for(int n=0; n<18; n++)
                    {
                        users[who].idcard[n]=id[n];
                    }
                    cout<<"身份证号修改成功!"<<endl;
                }
    
                else
                {
                    cout<<"你已取消修改!"<<endl;
                }
                 ofstream outfile("time.txt",ios::app);
                if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
                {
                    cerr<<"open error!"<<endl;
                    exit(1);
                }
                char *ctime(const time_t *time);
                //ctime();
                outfile<<'\t'<<users[who].account<<'\t'<<users[who].name<<'\t'<<"修改身份证号:"<<users[who].idcard<<endl;
                outfile.close();
            }
    
        }
        return;
    
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:changephone
     *功能描述:修改手机号,输入用户账号以及密码,通过对账号及密码的判断,输入新电话号以及
                'y'/'n',若输入'y',则改电话号成功,若输入'n',则取消本次修改(在这里保存修改电话号
                的具体,输出到"time.txt")
     *输入参数:输入用户账号,密码以及新电话号,'y'/'n'
     *输出参数:若输入'y'则输出"电话号号修改成功!"的字样,若输入'n',则输出"你已取消修改!"的字样
     *返回值:
     *说明:     注意对业务的保存(输出时间,用户,姓名,业务,保存到time.txt文件中)
     *-----------------------------------------------------------------------------------------*/
    void Bank::changephone()
    {
        int who;
        char pho[11];
        char pan;
        who = getUser();  //根据账号查询用户,返回用户的下标
        if(who>=0)   //说明id账户存在
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                cout<<"新电话号:";
                gets(pho); //输入电话号
                cout<<"确认修改电话号(y/n)?";
                cin>>pan;
                if(pan=='y')
                {
                    for(int n=0; n<11; n++)
                    {
                        users[who].phone[n]=pho[n];
                    }
                    cout<<"电话号修改成功!"<<endl;
                }
    
                else
                {
                    cout<<"你已取消修改!"<<endl;
                }
                  ofstream outfile("time.txt",ios::app);
                                if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
                                {
                                    cerr<<"open error!"<<endl;
                                    exit(1);
                                }
                                  char *ctime(const time_t *time);
                                 //ctime();
                                outfile<<'\t';
                                outfile<<users[who].account<<'\t'<<users[who].name<<'\t'<<"改变电话号:"<<users[who].phone<<endl;
                                outfile.close();
            }
        }
        return;
    
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:changedisplays
     *功能描述:修改个人信息,输入需要操作选项的序号,使其跳转到所选函数内,完成对信息的修改
     *输入参数:输入n,即操作序号
     *输出参数:
     *返回值:
     *说明:     依旧是switch()语句
     *-----------------------------------------------------------------------------------------*/
    void Bank::changedisplays() //修改个人信息
    {
        int n;
        cout<<"+----请输入想要修改的项目:----+"<<endl;
        cout<<"+-----------1.姓名-------------+"<<endl;
        cout<<"+-----------2.身份证号---------+"<<endl;
        cout<<"+-----------3.密码-------------+"<<endl;
        cout<<"+-----------4.地址-------------+"<<endl;
        cout<<"+-----------5.电话-------------+"<<endl;
        cout<<"请输入:";
        cin>>n;
        switch(n)
        {
        case 1:
            changename();
            break;
        case 2:
            changeidcard();
            break;
        case 3:
            changePassword();
            break;
        case 4:
            changedizhi();
            break;
        case 5:
            changephone();
            break;
        }
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:getUser
     *功能描述:查找用户,输入用户账户,利用二分法,查找是否有该用户的存在,返回关键字(找不
                到即为-1,其他即为找到)
     *输入参数:输入用户账号
     *输出参数:
     *返回值:  返回index(关键字)
     *说明:    利用二分法查找账号,更快捷简便
     *-----------------------------------------------------------------------------------------*/
    int Bank::getUser() //查找用户   二分法
    {
        int id;
        cout<<"账号:";
        cin>>id;
        int index=-1;
        int low=0, high=nownum-1, mid;
        while(low<=high)
        {
            mid = (low+high)/2;
            if(users[mid].account==id)
            {
                index=mid;
                break;   //找到了,立即退出循环
            }
            else if (users[mid].account>id)
                high=mid-1;
            else
                low=mid+1;
        }
        if (index<0)
            cout<<"该用户不存在,本次操作失败!"<<endl;
        return index; //若找到,其值在0~N-1间,否则,保持-1
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:openfile
     *功能描述:导出文件,将用户信息从users.txt里面导出,并计算用户数
     *输入参数:
     *输出参数:
     *返回值:
     *说明:    将用户信息从users.txt里面导出,并计算用户数
     *-----------------------------------------------------------------------------------------*/
    void Bank::openfile()//导出文件
    {
        ifstream infile("users.txt",ios::in);
        int i=0;
        if(!infile)
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        nownum=jishu();        //jis里面有return当前总用户数
        users=new User[nownum+1];
        while(infile>>users[i].account>>users[i].name>>users[i].idcard>>users[i].dizhi>>users[i].phone>>users[i].password>>users[i].money>>users[i].status)
        {
            ++i;
        }
        infile.close();
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:savefile
     *功能描述:保存文件,将用户信息保存到users.txt里面,并利用动态数组,delete []users; 在这
                里释放了剩余空间
     *输入参数:
     *输出参数:
     *返回值:
     *说明:    将用户信息保存到users.txt里面
     *-----------------------------------------------------------------------------------------*/
    void Bank::savefile() //保存文件
    {
        ofstream qingkfile("users.txt",ios::trunc);//trunc 打开并清空文件
        qingkfile.close();
        ofstream outfile("users.txt",ios::out);
        if(!outfile)
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        for(int i=0; i<nownum; ++i)          //注意这里的空格即‘\t',关系到是否能正常保存用户信息
        {
            outfile<<users[i].account<<'\t'<<users[i].name<<'\t';
            for(int n=0; n<18; n++)
            {
                outfile<<users[i].idcard[n];
            }
            outfile <<'\t'<<users[i].dizhi<<'\t';
            for(int n=0; n<11; n++)
            {
                outfile<<users[i].phone[n];
            }
            outfile<<'\t'<<users[i].password<<'\t'<<users[i].money<<'\t'<<users[i].status<<endl;
        }
        outfile.close();
        delete []users;                   //释放剩余空间
        return;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:display
     *功能描述:显示个人信息
     *输入参数:输入用户账号以及密码,若验证通过,则调用display()函数显示信息
     *输出参数:输出个人的信息
     *返回值:
     *说明:
     *-----------------------------------------------------------------------------------------*/
    void Bank::display()      //显示个人信息
    {
        int who;
        who = getUser();  //根据账号查询用户,返回用户的下标
        if(who>=0)   //说明id账户存在
        {
            users[who].displays();
        }
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:jishu
     *功能描述:计算用户数
     *输入参数:
     *输出参数:
     *返回值:  返回用户总数
     *说明:    用while()计算用户的总数
     *-----------------------------------------------------------------------------------------*/
    int Bank::jishu()
    {
        int acc;   //账号
        char nam[20];   //姓名
        char id[18]; //身份证号
        char di[30];//地址
        char pho[11];//电话
        int pw;   //密码
        double mon;   //金额
        int sta;   //状态
        int i=0;
        int nownum;
        ifstream infile("users.txt");
        while(infile>>acc>>nam>>id>>di>>pho>>pw>>mon>>sta)
        {
            ++i;
        }
        infile.close();
        return i;
    }
    

    staff.h

    #ifndef STAFF_H_INCLUDED
    #define STAFF_H_INCLUDED
    #include <iostream>
    #include <cmath>
    using namespace std;
    struct staffTatus
    {
        string account;
        int password;
    };
    class Staff
    {
    public:
        bool pass(string sacc,int ps);
    private:
        staffTatus stafft;
    };
    
    
    #endif // STAFF_H_INCLUDED
    

    staff.cpp

    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    #include <fstream>
    #include "staff.h"
    using namespace std;
    /*-----------------------------------------------------------------------------------------*
     *函数名称:pass
     *功能描述:判断业务员的登录信息
     *输入参数:
     *输出参数:
     *返回值:   返回判断
     *说明:     =
     *-----------------------------------------------------------------------------------------*/
    bool Staff::pass(string sacc,int ps)
    {
        bool judge=false;
        fstream infile("staff.txt",ios::in);
        if(!infile)
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        while(!infile.eof())
        {
            infile>>stafft.account>>stafft.password;
            if(stafft.account==sacc&&ps==stafft.password)
            {
                judge=true;
                break;
            }
        }
        infile.close();
        return judge;
    }
    

    user.h

    #ifndef USER_H_INCLUDED
    #define USER_H_INCLUDED
    #include <iostream>
    #include <cmath>
    using namespace std;
    //定义user类
    class User
    {
    public:
        User(){}
        void setUser(int acc, string nam,char id[18],char di[30],char pho[11],int pw, double mon,int sta);
        bool isNormalUser();       //判断用户状态是否正确
        bool passwordIsRight();    //判断密码是否正确
        void showName();          //输出用户名
        void displays();          //输出用户个人信息
        void showMoney(string prompt);//显示余额
        friend class Bank;        //友元类
    private:
        int account;
        string name;
        char dizhi[30];
        char phone[11];
        int password;
        double money;
        char idcard[18];
        int status;
    };
    
    
    #endif // USER_H_INCLUDED
    

    user.cpp

    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    #include <fstream>
    #include <conio.h> //将密码变成*号
    #include "user.h"
    using namespace std;
    /*-----------------------------------------------------------------------------------------*
     *函数名称:inputpassw
     *功能描述:接收密码,并且将其转化成数字,最后输出为“******”,并且密码要求不能全为0
     *输入参数:ch一位一位的输入
     *输出参数:"******"
     *返回值:  返回密码
     *说明:    这里要注意如何将字符转化成数字,并且这里只有用getch()和putchar('*')才能成功
                使得密码成为"******"格式
     *-----------------------------------------------------------------------------------------*/
    int inputpassw()
    {
        char ch;  //接收字符形式密码(这里必须输入字符,因为只有字符才能转化成'*')
        int iPass=0;   //要转换为ascll的形式
        int i;
        while(1)
        {
            for(i=0; i<6; i++)
            {
                ch=getch();  //输入但不显示
                putchar('*');   //输出*
                if(isdigit(ch))
                    iPass=iPass*10+(ch-'0');  //假设第一位输入1,第二位输入2,那么此时密码就应该是1*10+2=12####
                else
                {
                    iPass=0;
                    break;  //退出for循环后,再次接受
                }
            }
            fflush(stdin); //清除键盘缓存区中已经有的输入(不会,copy,详细解释见weizhi)
            cout<<endl;
            if(iPass==0)  //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
            {
                cout<<"密码要求全为数字,且不能全0!"<<endl;;
                cout<<"请重新输入密码: ";
            }
            else
                break;
        }
        return iPass;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:setUser
     *功能描述:建立用户
     *输入参数:
     *输出参数:
     *返回值:
     *说明:    用户的各个信息
     *-----------------------------------------------------------------------------------------*/
    void User::setUser(int acc,string nam,char id[18],char di[30],char pho[11],int pw, double mon,int sta)
    {
        account=acc;
       name=nam;
        for(int n=0;n<30;n++)
        {
            dizhi[n]=di[n];
        }
        for(int n=0;n<11;n++)
        {
            phone[n]=pho[n];
        }
        password=pw;
        money=mon;
        for(int n=0;n<18;n++)
        {
            idcard[n]=id[n];
        }
        status=sta;
    }
    /*-----------------------------------------------------------------------------------------*
     *函数名称:passwordIsRight
     *功能描述:判断用户密码
     *输入参数:输入密码
     *输出参数:
     *返回值:  返回判断结果
     *说明:
     *-----------------------------------------------------------------------------------------*/
    bool User::passwordIsRight()
    {
        int iPass;
        bool right=true;
    
        cout<<"输入密码:";
        iPass=inputpassw();
        if(iPass!=password)
        {
            right = false;
            cout<<"输入密码错误,不能继续操作!"<<endl;
                         }
        return right;
    }
    
    void User::showName()
    {
        cout<<"用户名:"<<name<<endl;
    
    }
    
    void User::showMoney(string prompt)
    {
        cout<<prompt<<money<<endl;
    }
    
    bool User::isNormalUser()            //判断用户状态是否正确
    {
        bool normal = true;
        if(status!=0)
        {
            normal = false;
            cout<<"该账户处于"<<(status==1?"挂失":"销户")<<"状态,不能继续操作..."<<endl;
        }
        return normal;
    }
    void User::displays()
    {
        cout<<"卡号:"<<account<<endl;
        cout<<"姓名:";
        cout<<name<<endl;
        cout<<"地址:";
        cout<<dizhi<<endl;
        cout<<"电话: ";
        for(int n=0;n<11;n++)
        {
            cout<<phone[n];
        }
    cout<<endl;
    }
    

    运行结果

    1.业务员登录


    2.开户


    3.销户


    4.存款


    5.取款


    6.查询


    7.转账


    8.挂失与解挂


    9.修改信息






    10.查看个人信息


    11.退出


    用到的文件:

    staff.txt(业务员)


    users.txt(用户)



    time.txt(业务)


    学习总结:

      总觉得还有bug,这一个星期每天改一点,每天都有新成果,直到今天上午运行成功,心里真的很兴奋,都说写一个程序用不了多久,调程序才费时间,恩,深深地体会到了来自程序的恶意。对于这种大程序,一定要耐住性子,加油!

    展开全文
  • 软件工程导论 习题计算机储蓄系统答案 软件工程导论 习题计算机储蓄系统答案 软件工程导论 习题计算机储蓄系统答案 软件工程导论 习题计算机储蓄系统答案
  • 4、银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,...

    4、银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。

      请用数据流图描绘本系统的功能,并用实体-联系图描绘系统中的数据对象。

     

     

     

     

     

     

     

     

                                       

     

    转载于:https://www.cnblogs.com/lozjl/p/7598816.html

    展开全文
  • 以上两个类是对银行卡的客户的一个初始化,里面都是列写了一下必要的属性,比如补卡得用身份证,这里通过身份证号代替,等等。其中人的属性里的卡就是上面定义的卡,人的这一个卡属性就包括卡的内部几个属性。接下来...
  • 8. 银行自定义数据项:由于银行机构业务和信息系统的差异性,规范中一些数据数据项填报要求注明由银行自定义,此类数据数据项报送应注意使用中文字典或中文描述,避免使用英文或代码表示。对于《规范》中已经列出...
  • 4.2.3 数据字典 ………………………………………………………………………………. 7 4.3 改进 ………………………………………………………………………………………. 7 4.4 新系统的影响 ………………………………...
  • 银行系统

    千次阅读 2019-09-09 11:08:32
    核心系统数据交换报文格式 ,在严肃的负载重的环境中,个人还是 推荐固定长度格式 ,因为固定长度格式打包解包效率高、与数据取值空间无关(相反的例子是分隔符格式需要的转义问题)、随机访问数据域定位速度快、...
  • 银行计算机储蓄系统的工作过程大致如下∶储户填写的存款单或取款单由业务员输入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,...
  • Python简单银行系统

    千次阅读 2018-08-07 20:23:38
    功能: 开户、查询、取款、存款、转账、改密、锁定、...(数据存储也可以用pickle模块,彩票系统已采用,此系统就不用pickle模块,而采用json模块,下文会简单介绍一下json和pickle的优缺点,纯属个人见解) 系统主...
  • 数据库课程设计银行管理系统(SQL Server)

    万次阅读 多人点赞 2013-12-27 23:10:57
    安全、规范、操作简单、功能齐全的银行管理系统能使业务得以顺利流畅的办理,使人们获得极好的用户体验。基于这样的背景,我的选题是银行管理系统。  日常生活中的银行管理系统很复杂,对安全性和完整性要求都很高...
  • 这些的确是银行核心系统中“交易”能表现出的特质,没错也不全对,在不同的角度对它的定义都不一样。有位前辈的回答,觉得总结的非常好,分享给大家:交易是一笔业务完整流程中的某一个环节在计算机处理中的体现。 ...
  • 银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印...
  • 金融银行前置系统简述

    千次阅读 2019-05-27 10:28:39
    金融银行前置系统简述 2012年09月14日 16:09:48 ss123465 阅读数:8019 应用于小型银行的核心体系,主要由前台和后台以及若干小前置组成,前台发起交易给后台,后台处理后返回,如果需要外联,后台联动请求给小...
  • 一、系统开放性  计算机技术发展的潮流之一就是系统的开放性和64位技术。为了使系统具有更强的兼容性和可扩展性,系统应设计成开放式的网络业务系统。...对商业银行来讲,本身没有专业银行的历史包袱,能较快
  • 1 轧差 轧差指的是当日A和B银行有资金来往,早上B要给A银行打10万,下午A要给B打20万,经过轧差,日终...对交易数据依据机构和交易类型进行分类汇总,并计算结算金额的过程。 清算 Settlement 指根据清分结果对交...
  • 软件工程银行存折系统需求分析 要求: (1)根据SA方法画出和存折操作相关的分层数据流图。 (2)定义各种类型的数据字典词条。 

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 425
精华内容 170
关键字:

银行储蓄系统数据字典