银行储蓄系统

#include <iostream>
#include <fstream>
#include <cstdlib>
#include "bank.h"
#include <ctype.h>
using namespace std;
/*
通过构造函数读取文件中保存的业务数据
*/
Bank::Bank()
{
    ifstream infile("account.txt",ios::in);
    if(!infile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    int i=0;
    int ac;   //账号
    string n;   //姓名
    int p;   //密码
    double b;   //金额
    int s;   //状态
    string Id;//身份证号
    string adr;//家庭住址
    while(infile>>ac>>n>>p>>b>>s>>Id>>adr)   //当读取成功……
    {
        users[i].setUser(ac,n,p,b,s,Id,adr);
        i++;
    }
    N = i; //用静态数据成员
    infile.close();
}
/*
通过析构函数,在退出系统时,将数据保存到文件中
*/
Bank::~Bank()
{
    ofstream outfile("account.txt",ios::out);
    if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    int i;
    for(i=0; i<N; i++)
    {
        outfile<<users[i].account<<" "<<users[i].name<<" "<<users[i].password<<" "<<users[i].balance<<" "<<users[i].status<<" "<<users[i].ID<<" "<<users[i].address<<" ";
    }
    outfile.close();
}
/*
办理业务
*/
void Bank::work()
{
    int choice;   //用于选择系统功能
    //办理业务
    do
    {
        choice = chooseInMenu();  //从菜单中获得功能代码
        switch(choice)
        {
        case 1:
            openaccount(); //开户
            break;
        case 2:
            cancelaccount();  //注销账户
            break;
        case 3:
            deposit();  //存款
            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(choice);
}
/*
功能:开户
说明:在进入系统时,在读入数据过程中,已经记录了用户数为N,在数组中对应下标为0~N-1
  开户时要增加一个用户,只要为下标为N的数组元素置值,并在成功之后令N++即可。
  账号由系统自动生成(10001+序号),保证其连续,这样在顺序增加的时候,就保证了其有序。
*/
void Bank::openaccount()
{
    if(N==upNum)
    {
        cout<<"银行用户数已经达到上限,不能再开户";
        return;
    }
    //下面正常办理开户业务
    int ac;   //账号
    string n;   //姓名
    int p;   //密码
    double b;   //金额
    int s;   //状态
    string Id;//身份证号
    string adr;//家庭住址
    cout<<"正在开户"<<endl;
    ac=10001+N;
    cout<<"账号:"<<ac<<endl;
    cout<<"户主姓名:";
    cin>>n;
    cout<<"身份证号:";
    cin>>Id;
    cout<<"家庭住址:";
    cin>>adr;
    int Pass1, Pass2;
    cout<<"密码:";
    Pass1=inputPassword();  //输入密码1
    cout<<"确认密码:";
    Pass2=inputPassword();  //输入密码2
    if(Pass1==Pass2)
    {
        p=Pass1;
        s=0; //账户状态为“正常”
        cout<<"存入金额:";
        cin>>b;
        users[N].setUser(ac, n, p, b, s,Id,adr);
        N++; //正式用户数增加1,确认了新用户已经加入
        cout<<"成功开户!"<<endl;
    }
    else
    {
        cout<<"两次密码不一致,未成功开户!"<<endl; //没有N++,则读入的值无效
    }
}
/*
功能:注销账户
说明:找到账户,并将其状态改为2-注销即可。
注销前应该检查余额,应该先取款再注销
*/
void Bank::cancelaccount()  //销户
{
    int who;  //查找到该账号在数组中对应的下标
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        users[who].showName();
        if(users[who].passwordIsRight())
        {
            users[who].showBalance("余额");   //提示"余额"二字,显示金额
            cout<<"确认销户(y/n)?";
            if(tolower(getchar())=='y')
            {
                users[who].showBalance("销户成功!本次取款金额为");
                users[who].balance=0;  //取款后余额变0
                users[who].status=2;  //状态变为注销
            }
            else
            {
                cout<<"你取消了操作,销户失败!"<<endl;
            }
            fflush(stdin);  //清除了getchar()时在键盘缓存中的遗留,以免影响后续操作
        }
    }
}
/*
功能:存款
说明:保证账户处于正常状态
*/
void Bank::deposit()
{
    int who;
    double money;
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        if(users[who].status==0)
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {

                cout<<"输入存款额:";
                cin>>money;
                users[who].balance+=money;
                users[who].showBalance("存款后,您有");
            }
        }
        else if(users[who].status==1)
        {
            cout<<"该用户处于挂失状态,存款失败!"<<endl;
        }
        else
        {
            cout<<"该用户已经销户,存款失败!"<<endl;
        }
    }
}
/*
功能:取款
说明:保证账户处于正常状态而且余额要足够
*/
void Bank::withdraw()
{
    int who;
    double money;
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        if(users[who].isNormalUser()) //users[who].isNormalUser() 查看账户状态
        {
            users[who].showName();
            if(users[who].passwordIsRight())
            {
                cout<<"输入取款额:";
                cin>>money;
                if(money>users[who].balance)
                {
                    cout<<"余额不足,取款失败!"<<endl;
                }
                else
                {
                    users[who].balance-=money;
                    users[who].showBalance("取款后,还有");
                }
            }
        }

    }
}
/*
功能:查询账户
说明:显示账户信息
*/
void Bank::showaccount()
{
    int who;
    string sta[3]= {"正常","挂失","已经销户"};    //枚举
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        users[who].showName();
        if(users[who].passwordIsRight())
        {
            users[who].showBalance("余额");
            cout<<"状态:"<<sta[users[who].status]<<endl;
        }
    }
}
/*
功能:转账
说明:需要保证两个账户都存在,且处于正常状态,另外,转出账户的余额要足够
*/
void Bank::transferaccounts()
{
    int out, in;
    double money;
    cout<<"转出自";
    out = getUser();  //根据账号查询用户,返回用户的下标
    if(out>=0)   //说明id账户存在
    {
        if(users[out].isNormalUser())//查看转出账户状态
        {
            users[out].showName();
            if(users[out].passwordIsRight())
            {
                cout<<"输入转账金额:";
                cin>>money;
                if(money>users[out].balance)
                {
                    cout<<"余额不足,转账失败!"<<endl;
                }
                else
                {
                    cout<<"转出到";
                    in = getUser();  //根据账号查询用户,返回用户的下标
                    if(in>=0)   //说明id账户存在
                    {
                        if(users[in].isNormalUser()) //查看转入账户状态
                        {
                            users[out].balance-=money;
                            users[in].balance+=money;
                            users[out].showBalance("转账后,您还有");
                        }
                    }
                }
            }
        }
    }
}
/*
功能:挂失
*/
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
            {
                cout<<"该账户已销户,不能挂失"<<endl;
            }
        }
    }
}
/*
功能:解除挂失
*/
void Bank::cancelloss()
{
    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
            {
                cout<<"该账户已销户,操作无效"<<endl;
            }
        }
    }
}
/*
功能:改密码
*/
void Bank::updatepassword()
{
    int who;
    int Pass1, Pass2;
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        users[who].showName();
        if(users[who].passwordIsRight() && users[who].isNormalUser())
        {
            cout<<"新密码:";
            Pass1=inputPassword();  //输入密码1
            cout<<"确认密码:";
            Pass2=inputPassword();  //输入密码2
            if(Pass1==Pass2)
            {
                users[who].password=Pass1;
                cout<<"修改成功!"<<endl;
            }
            else
            {
                cout<<"两次输入不同,修改失败!"<<endl;
            }
        }
    }
}
/*
功能:输入账号查询用户,返回用户在数组中的下标
入口参数:要查询用户的账号
返回值:如果该用户存在,返回该用户在数组中的下标,否则,返回一个负数(-1)
说明:
  由账号自动产生,使按账号有序,本模块采用二分查找
*/
int Bank::getUser()
{
    int id;
    cout<<"账号:";
    cin>>id;
    int index=-1;
    int low=0, high=N-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
}

<img src="https://img-blog.csdn.net/20150718104149362?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="https://img-blog.csdn.net/20150718104114253?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="https://img-blog.csdn.net/20150718104306299?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

<img src="https://img-blog.csdn.net/20150718104336462?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="https://img-blog.csdn.net/20150718104415638?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="https://img-blog.csdn.net/20150718104520394?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一、基本目的: 1.使学生把软件工程的基本原理和技术应用于实践 。 2.使学生掌握实际大型软件的开发过程和组织方式。 3.使学生增强开发大型软件的能力。 二、实验环境: 文档制作工具为WORD、EXCEL、VISIO、ROSE等,编程环境自选。 三、背景知识: 从理论上而言,软件生存期一般都可分为计划、需求分析、设计、编码、测试、运行维护六个步骤。根据软件工程实施过程中的各阶段活动,我们可以把它归结为不同的软件生存期模型,并归结出每一阶段的实施的行为特征。在软件工程的实施过程中,需要制做相应的文档。 1.计划阶段 计划阶段指技术人员辅助管理人员或市场部人员根据项目意向,做出初步需求调查、进行可行性论证,在论证通过后做系统方案,如委托开发,还需签定项目开发合同,并制定项目开发计划。 2.需求分析阶段 需求分析阶段,管理人员提出需求分析阶段计划,分析人员制作软件需求说明书,包括软件需求子系统需求说明书、数据要求说明书、子系统数据要求说明书、系统数据流图、子系统数据流图及其相应的词典。系统需求说明书完成后应通过项目需求评审,经用户确认后出具需求分析验收报告。初步制定测试计划。 3.设计阶段 在设计阶段需要制定系统实现方案,设计阶段计划,填写数据库设计说明书、详细设计说明书,详细设计应通过详细设计评审、出具详细设计验收报告,设计阶段完成后应开始制做用户手册、管理员手册、测试计划与测试案例设计。 4.编码阶段 在编码阶段应有数据库编程规范、编程语言编程规范、内部公用函数(模块)目录等。设计和执行模块测试。 5.测试阶段 设计完成后,就应该进入测试阶段,测试阶段中,应该制定测试规范、填写测试计划与测试说明,测试过程中应填写软件测试报告。 6.运行维护阶段 测试阶段完成后,应进行系统交付,进入运行维护阶段。系统维护阶段,用户发现问题时,应填写计算机软件问题报告单,提交信息部主管或根据合同约定向设计单位提交。 四、实验要求: 每班分为5-6个小组,每组从实验题目中任选一题,也可自选题目作为课程实践题目。每组指定一名组长,负责分工和制定标准等管理工作。 1.项目开发过程建议采用快速原型与增量开发相集合的模式,在基本明确需求的情况下建立系统整体原型供需求的讨论和确定,在需求和系统架构确定后,选取一个具有代表性或系统核心部分的子系统进行详细的设计开发。开发方式要求采用面向对象方法。 2.实验内容包括进行需求分析、系统设计、系统实现及测试、系统交付。每个组员必须参加这个系统开发过程的部分工作,扮演某种角色,并书写部分实验报告。 3.实验报告要求包括项目开发计划、需求规格说明书、设计规格说明书、源程序清单、测试报告和用户手册。全组文档格式、内容参照附件中模板,提交一份完整的实验报告(提交打印和电子两种形式)。 4.每组所选软件工程课程实践题目也作为数据库原理课程的课程实践题目,文档编制部分主要在软件工程课程实践中完成,程序编写部分主要在数据库原理课程的课程实践中完成。 五、实验题目: 1. 银行帐户管理、储蓄业务处理系统 为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员键入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息(若为新储户须建立帐户),并打印存款单给储户;如果是取款,系统计算利息并打印利息清单给储户(若为清户记录注销该帐户);还可向储户提供余额查询功能。 2. 机票预定系统 为方便旅客,某航空公司拟开发一个机票预定系统。旅客可向该系统查询航班情况(按目的地、起飞时间、航班班次等)。旅行社把预定机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入该系统系统为旅客安排航班,打印取票通知和帐单,旅客在收到取票通知和帐单后可交费并于飞机起飞前24小时凭取票通知和交款单经系统校对无误后打印机票给旅客。旅客也可向系统提出退票要求,系统针对具体情况计算手续费后进行相应退票处理。 3. 高校学生综合素质评测系统系统主要用于辅助高校学生管理部门对学生在校期间综合表现进行评测,系统可以实现学生基本个人信息的管理,并实现学习成绩、奖励情况等考量信息及考量指标的录入。系统还要能够设定个考量指标的不同权重,并根据每个学生的各项测评内容给出相应的成绩,且能够对成绩进行汇总。 4. 仓库管理信息系统 仓库管理是企业供应链管理中的重要环节。良好高效的仓库管理软件能够帮助企业有效的降低库存水平和缩减库存持有天数,从而有助于利润增长、提高股东权益、释放更多的资金用于其他方面的投资,有助于提高供应链的整体竞争力。 该系统要求包括但不限定于以下内容:物品的采购进仓、入库、出库、领用、调拨、盘点、报表汇总等功能;支持分区位管理和多仓库管理;还要具有系统设置、权限维护、密码维护等系统管理功能。 5. 学生成绩信息管理系统 学生成绩的手工录入,是一项非常繁重而枯燥的劳动,随着计算机的发展,应用数据库技术实现学生成绩的计算机管理是可行和必要的工作。本课题建立学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高办学效益和现代化水平。本课题要求:原始数据录入(包括学生信息,课程信息,学生成绩录入);课程查询、学生信息和成绩查询;报表输出,包括学生成绩汇总表,需重修的学生统计报表,班级单科成绩报表等;根据学生选修课程学分情况,获取学籍变动学生名单等功能。 6. 计算机专业课程在线考试管理系统的设计 随着考试类型的不断增加及考试要求的不断提高,传统的考试方式已经不能适应现代考试的需要。随着计算机应用的迅猛发展,网络应用不断扩大,人们迫切要求进行在线考试,以减轻教师的工作负担及提高工作效率,与此同时也提高了考试的质量,从而使考试更趋于公证、客观,更加激发学生的学习兴趣。计算机专业课程在线考试管理系统要求能够管理参加考试学生的相关信息,能够构件课程知识点、划分题型、建立题库、自动出卷,客观题自动评分及成绩汇总等功能。 7. 高校课程信息管理系统 高校课程安排是学校每学期重要的教学管理工作,使用计算机对课程信息进行管理能够提高课程信息管理的有效性和科学性。本系统的功能包括但不限定于以下内容:各学院教学办可以应用该系统录入学期教学任务书,系统能够按学院及专业对任务书进行汇总;教务处能够根据任务书规定课程情况、教室情况,进行自动排课,并能手动进行调整,排课要求一位老师在同一时间只能给一个合班上课,一个教室同一时间只能有一个合班上课;用户只要将班级、课程和教室的各项资料输入,剩下的排课部分则完全交给计算机。如果资料输入有错误,可以对各项资料进行添加、删除和修改,各项资料有所变动之后,系统要能够保存一段时间内的变更记录。 8. 教学计划管理系统 教学计划管理是高校教学管理系统中重要的组成部分。传统的管理方法和手段已经不再适应发发展。本课题包括三种角色,管理员、教师、学生。管理员管理和维护课程信息,设定培养计划,建立专业与课程之间的对应关系,包括开设的课程、课程学分、课程上课学期、课程学分、实验学分、课程考核方式等信息。教师可以查看本学期开设课程信息和自己所授课程,并能够自现制定课程教学计划,设定教学重点。学生可以查看课程信息和自己的培养计划。 9.汽车俱乐部管理系统 为实现汽车俱乐部行业信息的规范化管理,某软件开发商要求开发一汽车俱乐部管理系统,面向俱乐部工作人员进行会员信息的管理。主要功能包括:用户(俱乐部工作人员)身份验证和用户权限组织;提醒服务(提醒各种该执行的车务活动);会员管理(会员信息、会员费收缴记录录入,查询,修改);车务管理(新车上牌代办,保险代办,验证代办,落户代办等);救援服务(呼救记录,救援情况记录以及救援车辆管理);旅行服务(旅行信息记录、修改、查询);统计报表、图表(所有当日、当月、当年向会员提供的各种服务信息及其收费的详细情况列表及汇总);系统管理(设置提醒提前日期,用户管理等);俱乐部管理(俱乐部部门、工作人员、救援车辆管理);系统帮助。 10.设备管理系统 实现公司设备的有效管理、维护记录。 购入新设备,登记设备购入时间、名称、型号、种类、内部编号、所属部门、存放位置等。 设备转借时,记录借用部门、经手人员、用途、拟还日期等。 设备故障时,记录故障情况、维修情况(时间、人员、结果)等。 设备报废时,记录报废原因、批准人员、经手人员、处理方式等。 对设备管理人员和使用人员提供各种设备处理的按部门、设备类型、处理日期等查询和修改等功能。 11.客户关系管理系统 客户关系管理是一个“热门”的计算机应用领域。客户关系管理系统(CMS)是现代企业管理不可缺少的重要软件工具,是ERP的重要组成。系统能够对与客户相关的各种业务进行管理,如:客户信息管理、行动管理、客户反馈管理、客户服务管理、系统管理等等;系统数据库可以对各种客户信息进行管理(包括个人信息、行动信息和服务信息等),并实现信息的录入、查询、导出、导入等基本功能; 12. 汽车销售管理系统 汽车销售管理系统要包括汽车销售机会管理、门店导购管理、试车管理、报

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值