课程实训——银行系统

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

* 问题描述:编写一个银行系统来模拟完成银行的各种业务

* 输入描述:见运行图

* 程序输出:见运行图

 */


利用多文件组织,将程序放在5个文件中。

head.h

/********************************************
*版权所有 (C++)2014,lixiaokai
*
*文件名称:main.cpp
*文件标识:无
*内容摘要:改代码用于获取满足后缀要求的第一个文件
*其他说明:无
*当前版本:V1.0
*作者:李晓凯
*完成日期:2015-7-18
*
*修改记录2:
*修改日期:2015-7-18
*版本号:2015-7-18
*修改人:lixiaokai
*修改内容:创建
*********************************************/
#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED

#include <iostream>
#include <conio.h>
#include <cstring>
#include <cstdio>
#include <fstream>
#include <cstdlib>
#include <ctype.h>
#include "head.h"
using namespace std;
const int upnum=2000;//系统最多容纳的用户数
class Bank;
class User
{
public:
    void setUser(int acc,string na,int pw,double mon,double bal,char id[],int sta);
    void showName();
    void showBalance(string prompt);//显示账户余额
    bool psaaWordISRight();//判断密码是否正确
    bool ISNormalUser();//存款,取款,转账,贷款等功能需要账户处于正常状态,判断账户是否处于正常状态
    friend class Bank;//将Bank设为User的友元类
private:
    int account;//账号
    int password;//密码
    string name;//名字
    double balance;//余额
    double money;//未加利率的金额
    char identificant[18];//身份证号
    int status;//账户状态:0—正常,1—挂失,2—销户
};
class Bank
{
public:
    Bank();//从文件中读取数据
    ~Bank();//程序结束时将数据存入文件中
    void work();//业务驱动
    void openAccount();//开户
    void cancelAccount();//销户
    void save();//存款
    void withdraw();//取款
    void showAccount();//显示余额
    void transferAccount();//转账
    void reportLoss();//挂失
    void canlelLoss();//解除挂失
    void updatePassword();//修改密码
    void showRate();//显示利率
    void repayLoan();//贷款
    int getUser();//输入账号查询用户,返回用户在对象数组的下表
private:
    int N;//实际用户数目
    double rate;//存款利率
    static double rate2;//贷款利率
    User *users;//User指针
};
int pass();//业务员登录
int chooseInMenu();//显示菜单并由业务员选择
int intputPassword();//返回键盘输入的密码

#endif // HEAD_H_INCLUDED


work.cpp

/********************************************
*版权所有 (C++)2014,lixiaokai
*
*文件名称:main.cpp
*文件标识:无
*内容摘要:改代码用于获取满足后缀要求的第一个文件
*其他说明:无
*当前版本:V1.0
*作者:李晓凯
*完成日期:2015-7-18
*
*修改记录3:
*修改日期:2015-7-18
*版本号:2015-7-18
*修改人:lixiaokai
*修改内容:创建贷款
*********************************************/
#include "head.h"
using namespace std;
/********************************************
*功能描述:输入密码
*输入参数:无
*输出参数:密码
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
int intputPassword()
{
    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;
            }
        }
        fflush(stdin);//清理键盘缓存区已有的输入
        cout<<endl;
        if(iPass==0)
        {
            cout<<"密码要求全为数字且不能都是0!"<<endl;
            cout<<"请重新输入!";
        }
        else
            break;
    }
    return iPass;
}
/********************************************
*功能描述:业务选择
*输入参数:无
*输出参数:选项
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
int chooseInMenu()
{
    int i;
    while (1)
    {
        cout<<endl;
        cout<<"+-------------------------+\n";
        cout<<"+ 1.开户  2.销户  3.存款  +\n";
        cout<<"+ 4.取款  5.查询  6.转账  +\n";
        cout<<"+ 7.挂失  8.解挂  9.改密  +\n";
        cout<<"+ 10.贷款         0.退出  +\n";
        cout<<"+-------------------------+\n";
        cout<<"请输入操作指令";
        cin>>i;
        if(i>=0&&i<=10)
            break;
        else
            cout<<"请重新选择功能!"<<endl;
    }
    return i;
}
/********************************************
*功能描述:验证密码是否正确
*输入参数:无
*输出参数:正确-1   错误-0
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
int pass()
{
    char sNameInFile[20];
    char sPassInFile[20];
    ifstream infile("password.txt",ios::out);
    if(!infile)
    {
        cerr<<"password file cannot open!"<<endl;
        exit(1);
    }
    infile>>sNameInFile>>sPassInFile;
    infile.close();
    char sName[20];
    char sPass[20];
    char ch;
    int itry=3;
    int right=0;
    do
    {
        cout<<"请输入业务员用户名:"<<endl;
        cin>>sName;
        cout<<"请输入密码"<<endl;
        int i=0;
        while((ch=getch())!='\r')
        {
            sPass[i++]=ch;
            putchar('*');
        }
        sPass[i]='\0';
        fflush(stdin);
        cout<<endl;
        if(strcmp(sName,sNameInFile)==0&&strcmp(sPass,sPassInFile)==0)
        {
            right=1;
            break;
        }
        else
        {
            itry--;
            if(itry>0)
            {
                cout<<"超过3次将会退出,您还可以尝试"<<itry<<"次!"<<endl;
            }
            else
            {
                cout<<"对不起,您不能进入系统!"<<endl;
            }
        }
    }
    while(itry);
    return right;
}



main.cpp:

/********************************************
*版权所有 (C++)2014,lixiaokai
*
*文件名称:main.cpp
*文件标识:无
*内容摘要:改代码用于获取满足后缀要求的第一个文件
*其他说明:无
*当前版本:V1.0
*作者:李晓凯
*完成日期:2015-7-18
*
*修改记录1:
*修改日期:2015-7-18
*版本号:2015-7-18
*修改人:lixiaokai
*修改内容:创建
*********************************************/
#include "head.h"
using namespace std;

int main()
{
    cout<<"+-----------------------------------+\n";
    cout<<"+      欢迎使用坑你点没商量银行     +\n";
    cout<<"+-----------------------------------+\n";
    if(pass())
    {
        Bank b;
        b.work();
    }
    return 0;
}



user.cpp

/********************************************
*版权所有 (C++)2014,lixiaokai
*
*文件名称:main.cpp
*文件标识:无
*内容摘要:改代码用于获取满足后缀要求的第一个文件
*其他说明:无
*当前版本:V1.0
*作者:李晓凯
*完成日期:2015-7-18
*
*修改记录4:
*修改日期:2015-7-18
*版本号:2015-7-18
*修改人:lixiaokai
*修改内容:创建
*********************************************/
#include "head.h"
using namespace std;
/********************************************
*功能描述:建立用户
*输入参数:账号,姓名,密码,余额,身份证号,状态等
*输出参数:无
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void User::setUser(int acc,string na,int pw,double mon,double bal,char id[],int sta)
{
    account=acc;
    password=pw;
    name=na;
    money=mon;
    balance=bal;
    strcpy(identificant,id);
    status=sta;
}
void User::showName()
{
    cout<<"户主姓名:"<<name<<endl;
}
void User::showBalance(string prompt)
{
    cout<<prompt<<" "<<balance<<"元"<<endl;
}
/********************************************
*功能描述:验证密码是否正确
*输入参数:无
*输出参数:正确-true  错误-false
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
bool User::psaaWordISRight()
{
    int iPass;
    bool right=true;
    cout<<"请输入密码:"<<endl;
    iPass=intputPassword();
    if(iPass!=password)
    {
        right=false;
        cout<<"密码输入错误,操作失败!"<<endl;
    }
    return right;
}
/********************************************
*功能描述:验证账户是否处于正常状态
*输入参数:无
*输出参数:是-true  否-false
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
bool User::ISNormalUser()
{
    bool normal=true;
    if(status!=0)
    {
        normal=false;
        cout<<"该账户处于"<<(status==1?"挂失":"销户")<<"状态,不能进行操作!"<<endl;
    }
    return normal;
}



bank.cpp

/********************************************
*版权所有 (C++)2014,lixiaokai
*
*文件名称:main.cpp
*文件标识:无
*内容摘要:改代码用于获取满足后缀要求的第一个文件
*其他说明:无
*当前版本:V1.0
*作者:李晓凯
*完成日期:2015-7-18
*
*修改记录1:
*修改日期:2015-7-18
*版本号:2015-7-18
*修改人:lixiaokai
*修改内容:创建身份证号,贷款,利息,记录每笔账单
*********************************************/
#include "head.h"
#include <time.h>
using namespace std;
double Bank::rate2=0.0485;
Bank::Bank()
{
    ifstream infile("account.txt",ios::in);
    if(!infile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    int i=0;
    int acc;
    int pw;
    string na;
    double bal;
    char id[18];
    int sta;
    double mon;
    users=new User[2000];
    while (infile>>acc>>na>>pw>>bal>>id>>sta)//文件读取用户
    {
        users[i].setUser(acc,na,pw,mon,bal,id,sta);
        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<<" ";
        outfile<<users[i].name<<" ";
        outfile<<users[i].password<<" ";
        outfile<<users[i].balance<<" ";
        outfile<<users[i].identificant<<" ";
        outfile<<users[i].status<<" "<<endl;
    }
    outfile.close();
}
/********************************************
*功能描述:系统工作函数
*输入参数:无
*输出参数:无
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
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:
            transferAccount();  //转账
            break;
        case 7:
            reportLoss();  //挂失
            break;
        case 8:
            canlelLoss();  //解除挂失
            break;
        case 9:
            updatePassword();  //修改密码
            break;
        case 10:
            repayLoan();
            break;
        case 0:
            cout<<"欢迎您再来O(∩_∩)O  "<<endl;
        }
    }
    while(ichoice);
}
/********************************************
*功能描述:开户函数
*输入参数:无
*输出参数:无
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::openAccount()
{
    if(N==upnum)
    {
        cout<<"银行用户数目已达上限,不能在开户!"<<endl;
        return ;
    }
    int acc;
    int pw;
    string na;
    double mon;
    double bal;
    char id[18];
    int sta;
    int ipw1,ipw2;
    double year;
    acc=10001+N;
    cout<<"正在开户......"<<endl;
    acc=10001+N;
    cout<<"账号:"<<acc<<endl;
    cout<<"请输入户主的名字:";
    cin>>na;
    while(1)
    {
        cout<<"请输入身份证号:";
        cin>>id;
        if(strlen(id)!=18)
        {
            cout<<"您的身份证号不足18位!"<<endl;
            continue;
        }
        else
            break;
    }
    cout<<"请输入密码:";
    ipw1=intputPassword();
    cout<<"确认密码:";
    ipw2=intputPassword();
    if(ipw1==ipw2)
    {
        pw=ipw1;
        sta=0;
        cout<<"存入金额:";
        cin>>bal;
        ofstream outfile("expence_record.txt",ios::app);
        if(!outfile)
        {
            cerr<<"expence_record file cannot open!"<<endl;
            exit(1);
        }
        time_t timep;
        struct tm *p;
        time(&timep);
        p=localtime(&timep);//读取当前时间
        outfile<<1900+p->tm_year<<" 年 "<<1+p->tm_mon<<" 月 "<<p->tm_mday<<" 日 ";
        outfile<<acc<<" 存入 "<<acc<<" "<<bal<<" 元"<<endl;//存款记录存入文件
        outfile.close();
        showRate();
        cout<<"请输入要存入的期限(年):";
        cin>>year;
        double sum;
        if(year>=1&&year<=3)
            sum=bal+bal*year*0.02;
        else if(year==4||year==5)
            sum=bal+bal*year*0.032;
        else if(year>5)
            sum=bal+bal*year*0.0445;
        cout<<"期限到时,您将拥有"<<sum<<"元"<<endl;
        users[N].setUser(acc,na,pw,mon,sum,id,sta);
        N++;
        cout<<"成功开启!"<<endl;
    }
    else
    {
        cout<<"两次密码不一致,开启账户失败!"<<endl;
    }
}
/********************************************
*功能描述:销户函数
*输入参数:无
*输出参数:无
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::cancelAccount()
{
    int who;
    who=getUser();
    if(who>=0)
    {
        users[who].showName();
        if(users[who].psaaWordISRight())
        {
            users[who].showBalance("余额");
            if(users[who].balance<0)
                cout<<"您还有贷款没处理,不能销户!"<<endl;
            else
            {
                cout<<"确认销户(y/n)?";
                if(tolower(getchar())=='y')
                {
                    users[who].showBalance("销户成功!,本次取款金额为");
                    users[who].balance=0;
                    users[who].status=2;
                }
                else
                {
                    cout<<"您取消了此操作,销户失败"<<endl;
                }
            }
            fflush(stdin);
        }
    }
}
/********************************************
*功能描述:存款函数
*输入参数:无
*输出参数:无
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::save()
{
    int who;
    double year,money;
    who=getUser();
    if(who>=0)
    {
        if(users[who].status==0)
        {
            users[who].showName();
            cout<<"请输入存入的金额:";
            cin>>money;
            ofstream outfile("expence_record.txt",ios::app);
            if(!outfile)
            {
                cerr<<"expence_record file cannot open!"<<endl;
                exit(1);
            }
            time_t timep;
            struct tm *p;
            time(&timep);
            p=localtime(&timep);//读取当前时间
            outfile<<1900+p->tm_year<<" 年 "<<1+p->tm_mon<<" 月 "<<p->tm_mday<<" 日 ";
            outfile<<users[who].account<<" 存入 "<<users[who].account<<" "<<money<<" 元"<<endl;//存款记录存入文件
            outfile.close();
            showRate();
            cout<<"请输入要存入的期限(年):";
            cin>>year;
            if(year>=1&&year<=3)
                users[who].balance+=(money+money*0.02*year);
            else if(year==4&&year==5)
                users[who].balance+=(money+money*0.032*year);
            else if(year>5)
                users[who].balance+=(money+money*0.0445*year);
            users[who].showBalance("存款后,您有");
        }
        else if(users[who].status==1)
        {
            cout<<"该用户的账户处于挂失状态,存款失败!"<<endl;
        }
        else
        {
            cout<<"该用户的账户已经销户,存款失败!"<<endl;
        }
    }
    return;
}
/********************************************
*功能描述:显示函数
*输入参数:无
*输出参数:无
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::showAccount()
{
    int who;
    string sta[3]= {"正常","挂失","已经销户"};
    who=getUser();
    if(who>=0)
    {
        users[who].showName();
        if(users[who].psaaWordISRight())
        {
            users[who].showBalance("余额有");
            cout<<"状态为"<<sta[users[who].status]<<endl;
            cout<<"是否要查看您的每一笔账单(y/n)?";
            char ch;
            cin>>ch;
            if(ch=='y')
            {
                cout<<"您的账单如下:"<<endl;
                ifstream infile("expence_record.txt",ios::in);
                if(!infile)
                {
                    cerr<<"expence_record file cannot open!"<<endl;
                    exit(1);
                }
                //从文件中读取每笔账单
                int r1,r3,y,m,d;
                string r2,r4,r5,ch1,ch2,ch3;
                while(infile>>y>>ch1>>m>>ch2>>d>>ch3>>r1>>r2>>r3>>r4>>r5)
                {
                    if(r1==users[who].account&&r3==users[who].account)
                        cout<<y<<ch1<<m<<ch2<<d<<ch3<<" "<<r2<<" "<<r4<<" "<<r5<<endl;
                    else if(r1==users[who].account)
                        cout<<y<<ch1<<m<<ch2<<d<<ch3<<" "<<r2<<" "<<r3<<"("<<users[r3-10000].name<<")"<<" "<<r4<<" "<<r5<<endl;
                }
                infile.close();
            }
        }
    }
    return ;
}
/********************************************
*功能描述:取款函数
*输入参数:无
*输出参数:无
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::withdraw()
{
    int who;
    double money;
    who=getUser();
    if(who>=0)
    {
        if(users[who].ISNormalUser())
        {
            users[who].showName();
            if(users[who].psaaWordISRight())
            {
                cout<<"输入取款额";
                cin>>money;
                if(money>users[who].balance)
                {
                    cout<<"亲,余额不足呀!"<<endl;
                }
                else
                {
                    users[who].balance-=money;
                    users[who].showBalance("取款后,您还有");
                    ofstream outfile("expence_record.txt",ios::app);
                    if(!outfile)
                    {
                        cerr<<"expence_record file cannot open!"<<endl;
                        exit(1);
                    }
                    time_t timep;
                    struct tm *p;
                    time(&timep);
                    p=localtime(&timep);//读取当前时间
                    outfile<<1900+p->tm_year<<" 年 "<<1+p->tm_mon<<" 月 "<<p->tm_mday<<" 日 ";
                    outfile<<users[who].account<<" 取款 "<<users[who].account<<" "<<money<<" 元"<<endl;//取款记录存入文件
                    outfile.close();
                }
            }
        }
    }
    return ;
}
/********************************************
*功能描述:转账
*输入参数:无
*输出参数:无
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::transferAccount()
{
    int whoout,whoin;
    double money;
    whoout=getUser();
    cout<<"转出自";
    if(whoout>=0)
    {
        if(users[whoout].ISNormalUser())
        {
            users[whoout].showName();
            if(users[whoout].psaaWordISRight())
            {
                cout<<"请输入转入的金额:";
                cin>>money;
                if(money>users[whoout].balance)
                    cout<<"金额不足,转账失败!"<<endl;
                else
                {
                    cout<<"转出到:";
                    whoin=getUser();
                    if(whoin>=0)
                    {
                        if(users[whoin].ISNormalUser())
                        {
                            users[whoout].balance-=money;
                            users[whoin].balance+=money;
                            users[whoout].showBalance("转账户,您有");
                            ofstream outfile("expence_record.txt",ios::app);
                            if(!outfile)
                            {
                                cerr<<"expence_record file cannot open!"<<endl;
                                exit(1);
                            }
                            time_t timep;
                            struct tm *p;
                            time(&timep);
                            p=localtime(&timep);//读取当前时间
                            outfile<<1900+p->tm_year<<" 年 "<<1+p->tm_mon<<" 月 "<<p->tm_mday<<" 日 ";
                            outfile<<users[whoin].account<<" 转账到 "<<users[whoout].account<<" "<<money<<" 元"<<endl;//转账记录存入文件
                            outfile<<1900+p->tm_year<<" 年 "<<1+p->tm_mon<<" 月 "<<p->tm_mday<<" 日 ";
                            outfile<<users[whoout].account<<" 收到 "<<users[whoin].account<<" "<<money<<" 元"<<endl;
                            outfile.close();
                        }
                    }
                }
            }
        }
    }
    return ;
}
/********************************************
*功能描述:挂失
*输入参数:无
*输出参数:无
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::reportLoss()
{
    int who;
    who=getUser();
    if(who>=0)
    {
        users[who].showName();
        if(users[who].psaaWordISRight())
        {
            if(users[who].status==0)
            {
                users[who].status=1;
                cout<<"挂失成功!"<<endl;
            }
            else if(users[who].status==1)
                cout<<"该账户已经挂失!"<<endl;
            else
                cout<<"该账户已经销户,操作失败!"<<endl;
        }
    }
    return;
}
/********************************************
*功能描述:解挂函数
*输入参数:无
*输出参数:无
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::canlelLoss()
{
    int who;
    who=getUser();
    if(who>=0)
    {
        users[who].showName();
        if(users[who].psaaWordISRight())
        {
            if(users[who].status==0)
            {
                cout<<"该用户处于正常状态,不需要解除挂失!"<<endl;
            }
            else if(users[who].status==1)
            {
                users[who].status=0;
                cout<<"解除挂失成功"<<endl;
            }
            else
            {
                cout<<"该用户已销户,操作失败!"<<endl;
            }
        }
    }
    return ;
}
/********************************************
*功能描述:改密函数
*输入参数:无
*输出参数:密码
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::updatePassword()
{
    int who;
    int iPass1,iPass2;
    who=getUser();
    if(who>=0)
    {
        users[who].showName();
        if(users[who].psaaWordISRight())
        {
            cout<<"新密码:"<<endl;
            iPass1=intputPassword();
            cout<<"确认密码:"<<endl;
            iPass2=intputPassword();
            if(iPass1==iPass2)
            {
                users[who].password=iPass1;
                cout<<"密码修改成功!"<<endl;
            }
            else
                cout<<"两次输入的不同,修改失败!"<<endl;
        }
    }

}
/********************************************
*功能描述:贷款函数
*输入参数:无
*输出参数:无
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::repayLoan()
{
    int who;
    double money,year;
    who=getUser();
    if(who>=0)
    {
        if(users[who].ISNormalUser())
        {
            users[who].showName();
            if(users[who].psaaWordISRight())
            {
                cout<<"输入贷款额";
                cin>>money;
                if(money<=users[who].balance)
                {
                    cout<<"您的余额很足,不需要贷款!"<<endl;
                }
                else
                {
                    cout<<"请输入贷款期限(年)";
                    cin>>year;
                    money-=users[who].balance;
                    users[who].balance=-(money+money*rate2);
                    ofstream outfile("expence_record.txt",ios::app);
                    if(!outfile)
                    {
                        cerr<<"expence_record file cannot open!"<<endl;
                        exit(1);
                    }
                    outfile<<users[who].account<<" 贷款 "<<users[who].account<<" "<<users[who].balance<<" 元"<<endl;//贷款记录存入文件
                    outfile.close();
                    cout<<"到期时您需要还"<<users[who].balance<<" 元"<<endl;
                }
            }
        }
    }

}
/********************************************
*功能描述:查询用户函数
*输入参数:无
*输出参数:用户序号
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
int Bank::getUser()
{
    int id;
    cout<<"账号:";
    cin>>id;
    int idex=-1;
    int low=0,high=N-1,mid;
    while (low<=high)
    {
        mid=(low+high)/2;
        if(users[mid].account==id)
        {
            idex=mid;
            break;
        }
        else if(users[mid].account>id)
            high=mid-1;
        else
            low=mid+1;
    }
    if(idex<0)
        cout<<"此用户不存在,本次操作失败!"<<endl;
    return idex;
}
/********************************************
*功能描述:显示利率函数
*输入参数:无
*输出参数:无
*返回值:0-成功  其他-失败
*其他说明:消息字段之间用分号(;)分隔
********************************************/
void Bank::showRate()
{
    cout<<"银行当前的利率情况如下:"<<endl;
    cout<<"   1~3年        2.00%"<<endl;
    cout<<"   4~5年        3.20%"<<endl;
    cout<<"   5年以上      4.45%"<<endl;
}


 

 




学习心得:

虽然是在老师代码的基础上该写了这个庞大的银行系统,但还是从中学到了很多知识,以前多文件存储还不是很熟悉,现在感觉熟练的许多,还有就是在这环环相扣的函数中写来写去,觉得逻辑思维能力明显提高哈,当然也在这其中发现了自己的一些不足,比如多与动态数组就有点陌生,想在个程序里加上的,结果加上之后,也不知道是什么问题,在文件中存储的用户信息都成了代码,所以就没有加成功,望有大神可以来指导我一下,万分感谢!

还有就是,想弄一个活期的存储,结果想了想,然后百度了下,感觉超麻烦,so,就弄了个定取存款,等以后能力在高一点的时候再改吧!↖(^ω^)↗


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 电影推荐系统是一种基于用户兴趣和行为数据的算法系统,它利用机器学习和数据挖掘等技术,分析用户的历史观影记录、评分和偏好,为用户推荐最适合他们的电影。 在Python项目实训中,我们可以使用Python编程语言和相关的库和工具,去构建一个电影推荐系统。首先,我们需要收集和整理电影数据集,包括电影的名称、分类、导演、演员、评分等信息。我们可以通过一些公开的电影数据库或者API来获取这些数据。 接下来,我们可以使用Python中的机器学习库(如scikit-learn)或深度学习库(如Tensorflow)来构建一个协同过滤推荐模型。协同过滤是一种常用的方法,它基于用户的行为数据,比如用户的历史观影记录和评分,来计算用户的电影相似性,并且根据其他用户的评分和观影记录,为用户生成个性化的电影推荐。 通过对电影数据进行特征工程和处理,我们可以使用Python的数据处理库(如pandas)来处理和清洗数据。然后,我们可以使用Python的数据可视化库(如matplotlib和seaborn)来对电影数据进行可视化分析,从而更好地理解数据的分布和规律。 最后,我们可以使用Python的Web开发框架(如Django)来构建一个用户交互界面,用户可以输入自己的偏好和历史观影记录,系统将根据这些信息提供个性化的电影推荐结果。 通过Python项目实训,我们可以学习和实践推荐系统的建模和算法。同时,我们也可以学习和应用Python在数据处理、可视化和Web开发等方面的能力,这对于我们日后的职业发展非常有帮助。 ### 回答2: 电影推荐系统是一种利用机器学习和数据分析技术来为用户提供个性化电影推荐的应用程序。Python项目实训中,我们可以通过以下步骤来开发电影推荐系统。 首先,我们需要收集和准备电影数据集。可以从公开数据集或者电影数据库中获取电影信息,如电影名称、类型、导演、演员和用户评分等。将这些数据导入到Python环境中进行分析和处理。 接下来,我们可以使用机器学习技术来建立推荐算法模型。常见的推荐算法包括协同过滤、基于内容的推荐和深度学习等。可以使用Python库如scikit-learn或者Keras来实现这些算法。 在建立推荐模型之后,我们可以利用该模型为用户生成个性化推荐列表。根据用户的历史行为和偏好,系统可以分析相似用户或者相似电影,并推荐用户可能喜欢的电影。可以使用Python的pandas和numpy库来对数据进行处理和计算。 最后,我们还可以通过用户反馈和评价对推荐系统进行评估和优化。根据用户的反馈,可以调整推荐算法的参数或者引入其他技术来提高推荐的准确性和用户满意度。 总结来说,Python项目实训中的电影推荐系统主要包括数据收集、数据处理、推荐算法建模和用户反馈评估等步骤。通过Python的机器学习和数据分析技术,可以开发出一个个性化、准确度高的电影推荐系统。 ### 回答3: 电影推荐系统是基于Python语言进行开发的一个项目实训项目。该系统的主要目的是根据用户的喜好和观影记录,推荐符合用户口味的电影。 在实现该系统时,首先需要收集电影的相关数据。可以使用爬虫技术从互联网上获取电影的信息,比如电影的名称、导演、演员、类型、时长、评分等。获取到的数据可以存储在数据库中,以便后续使用。 接下来,需要设计一个算法来进行电影的推荐。常用的算法有基于内容的推荐算法和协同过滤推荐算法。基于内容的推荐算法是根据电影的特征,比如类型、导演、演员等,来推荐类似的电影给用户。而协同过滤推荐算法是根据用户的观影历史和其他用户的行为数据,找出相似的用户,并将相似用户喜欢的电影推荐给当前用户。 在系统实现过程中,还可以考虑引入机器学习的算法,比如深度学习和自然语言处理等技术,来提升推荐的准确性和个性化程度。 最后,在界面设计方面,可以使用Python的GUI库,比如Tkinter或PyQt等,来实现一个友好的用户界面,使用户能够方便地输入自己的喜好和查看系统推荐的电影。 该项目的实施可以考虑以下步骤:需求分析、数据库设计、数据采集、算法选择与实现、界面设计与实现、系统测试与调试等。 通过这个项目实训,可以提高学生的Python编程能力,了解数据获取和处理的方法,熟悉算法的选择和实现,掌握界面设计和用户交互的技术,培养系统分析和设计的能力,进一步提升学生的综合实践能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值