课程实训——银行储蓄系统

main.cpp

#include <iostream>
#include "Bank.h"
using namespace std;


int main()
{
	cout<<"+---------------------------------------+"<<endl;
    cout<<"+\t欢迎使用TNT银行系统 \t+"<<endl;
    cout<<"+---------------------------------------+"<<endl<<endl;

   Bank b;
   if (pass())
   {
   	 b.work();
   }
   return 0;
}

bank.h

#ifndef BANK_H_INCLUDED
#define BANK_H_INCLUDED
#include <cstring>
#include <iostream>
using namespace std;

const int upNum=2000;//本系统暂设最多支持2000个账户

int choosemenu();
int pass();//通过业务员账号
int inputcode();//使密码以*号显示

class user
    {
public:
    void set_user(int acc, string nam, int pw, double bal,int sta,string ID,string add);
    void show_name();//显示用户信息
    void show_balance();//显示余额

    bool passwordIsRight();//判断密码和账户是否相符
    bool isNormalUser();
    friend class Bank;

private:
    int ACCOUNT;//用户账户
    string NAME;//用户的名字
    int PASSWORD;//用户密码
    double BALANCE;//用户余额
    int STATUS;//用户状态
    string id;//用户身份证号
    string address;//用户家庭住址
    };

class Bank
    {
public:
    Bank();//开机时从文件中读数据,存在数组中
    ~Bank();//关机前将数据写入到文件中
    void work();
    void openAccount();//开户
    void cancelAccount();//注销账户
    void save();//存款
    void withdraw();//取款
    void showAccount();//查询账户
    void transferAccounts();//转账
    void reportLoss();//挂失
    void cancelLoss();//解挂
    void updatePassword();//更改密码
    int getUser();//输入账号查询用户,返回用户在对象数组中的下标
private:
    int N;//实际用户数目
    user users[upNum];
    };
#endif // BANK_H_INCLUDED


bank.cpp

#include "Bank.h"
#include <iostream>
#include <cstring>
#include <fstream>
#include <cstdlib>
using namespace std;

Bank::Bank()//开机时从文件中读数据,存在数组中
    {
    ifstream infile("account.txt",ios::in);
    if (!infile)
        {
        cerr<<"open account.txt error!"<<endl;
        exit(1);
        }
    int i=0;
    int acc;//账号
    string nam;
    int pw;
    double bal;//金额
    int sta;//状态
    string ID;
    string add;
    while (infile>>acc>>nam>>pw>>bal>>sta>>ID>>add) //读取成功时
        {
        users[i].set_user(acc,nam,pw,bal,sta,ID,add);
        i++;
        }
    N=i;//用静态数据成员储存
    infile.close();
    }
Bank::~Bank()//关机前将数据写入到文件中
    {
    ofstream outfile("account.txt",ios::out);
    if (!outfile)
        {
        cerr<<"open account.txt error!"<<endl;
        exit(1);
        }
    int i=1;
    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].STATUS<<" ";
        outfile<<users[i].id<<" ";
        outfile<<users[i].address<<endl;
        }
    outfile.close();

    }
void Bank::work()
    {
    int iChoice;//选择
    do
        {
        iChoice = choosemenu();
        switch (iChoice)
            {
        case 1:
            openAccount(); //开户
            break;
        case 2:
            cancelAccount();  //注销账户
            break;
        case 3:
            save();  //存款
            break;
        case 4:
            withdraw();   //取款
            break;
        case 5:
            showAccount(); //查询余额
            break;
        case 6:
            transferAccounts();  //转账
            break;
        case 7:
            reportLoss();  //挂失
            break;
        case 8:
            cancelLoss();  //解除挂失
            break;
        case 9:
            updatePassword();   //更改密码
            break;
        case 0:
            cout<<"欢迎您再来. "<<endl;
            }

        }
    while(iChoice);
    }


void Bank::openAccount()//开户
    {
    if(N==upNum)
        {
        cout<<"用户数已经达到上限,无法再开户";
        return;
        }
    int acc;   //账号
    string nam;   //姓名
    int pw1,pw2;   //密码
    double bal;   //金额
    int sta;   //状态
    string ID;
    string add;
    cout<<"开户中…"<<endl;
    acc=10001+N;
    cout<<"账号:"<<acc<<endl;
    cout<<"户主姓名:";
    cin>>nam;
    cout<<"户主身份证号:";
    cin>>ID;
    cout<<"户主家庭住址:";
    cin>>add;
    cout<<"密码:";
    pw1=inputcode();  //输入密码1
    cout<<"确认密码:";
    pw2=inputcode();  //输入密码2
    if(pw1==pw2)
        {
        sta=0; //状态“正常”
        cout<<"存款金额:";
        cin>>bal;
        users[N].set_user(acc, nam, pw1, bal, sta,ID,add);
        N++; //正式用户数增加1
        cout<<"开户成功!"<<endl;
        }
    else
        {
        cout<<"两次密码不一致,未成功开户!"<<endl; //没有N++,则读入的值无效
        }
    }
void Bank::cancelAccount()//注销账户
    {
    int getU;
    getU = getUser();  //根据账号查询用户,返回用户的下标
    if(getU>=0)   //说明id账户存在
        {
        users[getU].show_name();
        if(users[getU].passwordIsRight())
            {
            cout<<"余额:";
            users[getU].show_balance();   //显示金额
            cout<<"是否确认销户(y/n)?";
            if(tolower(getchar())=='y')
                {
                cout<<"销户成功!您的余额";
                users[getU].show_balance();
                cout<<"将被全部取出!"<<endl;
                users[getU].BALANCE=0;  //取款后余额变0
                users[getU].STATUS=2;  //状态变为注销
                }
            else
                {
                cout<<"你取消了操作,销户失败!"<<endl;
                }
            fflush(stdin);  //清除了getchar()时在键盘缓存中的遗留,以免影响后续操作
            }
        }
    }
void Bank::save()//存款
    {
    int getU;
    double money;
    getU = getUser();  //根据账号查询用户,返回用户的下标
    if(getU >=0)   //说明id账户存在
        {
        if(users[getU].STATUS==0)
            {
            users[getU].show_name();
            cout<<"输入存款额:";
            cin>>money;
            users[getU].BALANCE+=money;
            cout<<"存款后,您的账户将有金额:";
            users[getU].show_balance();
            }
        else if(users[getU].STATUS==1)
            {
            cout<<"该用户处于挂失状态,存款失败!"<<endl;
            }
        else
            {
            cout<<"该用户已经销户,存款失败!"<<endl;
            }
        }
    return;
    }
void Bank::withdraw()//取款
    {

    int getU ;
    double money;
    getU = getUser();  //根据账号查询用户,返回用户的下标
    if(getU >=0)   //说明id账户存在
        {
        if(users[getU ].isNormalUser())
            {
            users[getU ].show_name();
            if(users[getU ].passwordIsRight())
                {
                cout<<"输入取款额:";
                cin>>money;
                if(money>users[getU ].BALANCE)  //亲,不玩透支
                    {
                    cout<<"余额不足,取款失败!"<<endl;
                    }
                else
                    {
                    users[getU ].BALANCE-=money;
                    cout<<"取款后,余额为:";
                    users[getU ].show_balance();
                    }
                }
            }

        }
    return;

    }
void Bank::showAccount()//查询账户
    {
    int getU ;
    string sta[3]= {"正常","挂失","已经销户"};
    getU = getUser();  //根据账号查询用户,返回用户的下标
    if(getU >=0)   //说明id账户存在
        {
        users[getU ].show_name();
        if(users[getU ].passwordIsRight())
            {
            cout<<"账户余额为:";
            cout<<"账号身份证号:"<<users[getU].id<<endl;
            cout<<"账号家庭住址:"<<users[getU].address<<endl;
            users[getU ].show_balance();
            cout<<"状态:"<<sta[users[getU ].STATUS]<<endl;
            }
        }
    return;
    }
void Bank::transferAccounts()//转账
    {
    int Win,Wout;
    double money;
    cout<<"转账自";
    Wout= getUser();
    if(Wout>=0)
        {
        if(users[Wout].isNormalUser())
            {
            users[Wout].show_name();
            if(users[Wout].passwordIsRight())
                {
                cout<<"输入转账金额:";
                cin>>money;
                if(money>users[Wout].BALANCE)  //防止透支
                    {
                    cout<<"余额不足,转账失败!"<<endl;
                    }
                else
                    {
                    cout<<"转出到";
                    Win = getUser();
                    if(Win>=0)
                        {
                        if(users[Win].isNormalUser())
                            {
                            users[Wout].BALANCE-=money;
                            users[Win].BALANCE+=money;
                            cout<<"转账后,您的余额为:";
                            users[Wout].show_balance();
                            }
                        }
                    }
                }
            }
        }
    }
void Bank::reportLoss()//挂失
    {
    int getU;
    getU  = getUser();  //根据账号查询用户,返回用户的下标
    if(getU >=0)   //说明id账户存在
        {
        users[getU ].show_name();
        if(users[getU ].passwordIsRight())
            {
            if(users[getU ].STATUS==0)
                {
                users[getU ].STATUS=1;
                cout<<"挂失成功"<<endl;
                }
            else if(users[getU ].STATUS==1)
                {
                cout<<"该账户已经处于挂失状态"<<endl;
                }
            else
                {
                cout<<"该账户已销户,不能挂失"<<endl;
                }
            }
        }
    return;
    }
void Bank::cancelLoss()//解挂
    {
    int getU;
    getU=getUser();
    if (getU>=0)
        {
        users[getU].show_name();
        if(users[getU ].passwordIsRight())
            {
            if(users[getU ].STATUS==1)
                {
                users[getU ].STATUS=0;
                cout<<"解挂成功"<<endl;
                }
            else if(users[getU ].STATUS==0)
                {
                cout<<"该账户无需解挂"<<endl;
                }
            else
                {
                cout<<"该账户已销户,不能挂失"<<endl;
                }
            }
        }
    return;
    }

void Bank::updatePassword()//更改密码
    {
    int getU,pw1,pw2;
    getU=getUser();
    if (getU>=0)
        {
        users[getU].show_name();
        if(users[getU ].passwordIsRight())
            {
            cout<<"请输入新密码:";
            pw1=inputcode();
            cout<<"请重复密码:";
            pw2=inputcode();
            if (pw1==pw2)
                {
                users[getU].PASSWORD=pw1;
                cout<<"密码修改成功!"<<endl;
                }
            else
                {
                cout<<"两次密码不一致,未成功开户!"<<endl;
                }
            }
        }
    return;
    }
int Bank::getUser()//输入账号查询用户,返回用户在对象数组中的下标
    {
    //使用二分查找法查找账户
    int id,mid;
    int ind=-1,high=N-1,low=0;
    cout<<"账号:";
    cin>>id;
    while(low<=high)
        {
        mid=(low+high)/2;
        if (users[mid].ACCOUNT==id)
            {
            ind=mid;
            break;
            }
        else if (users[mid].ACCOUNT>id)
            high=mid-1;
        else
            low=mid+1;
        }
    if(ind<0)
        cout<<"该用户不存在,本次操作失败!"<<endl;
    return ind; //若找到,其值在0~N-1间,否则,保持-1
    }

user.cpp

#include "Bank.h"
#include <iostream>
#include <cstring>
#include <fstream>
#include <cstdlib>
using namespace std;

void user::set_user(int acc,string nam,int pw,double bal,int sta,string ID,string add)
{
    ACCOUNT=acc;
    NAME=nam;
    PASSWORD=pw;
    BALANCE=bal;
    id=ID;
    address=add;
}
void user::show_name()
{
    cout<<"姓名:"<<NAME<<endl;
}
void user::show_balance()//显示余额
{
    cout<<BALANCE<<" 元"<<endl;
}
bool user::passwordIsRight()//校验密码,正确返回true
{
    int pw;
    bool right=true;
    cout<<"输入密码:";
    pw=inputcode();
    if (pw!=PASSWORD)
    {
        right=false;
        cout<<"密码错误,无法继续操作!"<<endl;
    }
    return right;
}
bool user::isNormalUser()//判断是否处于“正常”,是则返回true,否则返回false
{
    bool normal=true;
    if(STATUS!=0)
    {
        normal=false;
        cout<<"该账户处于"<<(STATUS==1?"挂失":"销户")<<"状态,不能继续操作!"<<endl;
    }
    return normal;
}

work.cpp

#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <conio.h>  //getch要用
#include <cstring>
#include "Bank.h"
using namespace std;
int choosemenu()
    {
    int i;
    while(1)
        {
        cout<<endl;;
        cout<<"+--------------------------------------+"<<endl;
        cout<<"+ 1 开户\t2 销户\t\t3 存款 +"<<endl;
        cout<<"+ 4 取款\t5 查询\t\t6 转账 +"<<endl;
        cout<<"+ 7 挂失\t8 解挂\t\t9 改密 +"<<endl;
        cout<<"+ 0 退出\t\t\t       +"<<endl;
        cout<<"+--------------------------------------+"<<endl;
        cout<<"请输入操作指令:";
        cin>>i;
        if(i>=0 && i<=9)
            break;
        else
            cout<<"请重新选择功能"<<endl;;
        }
    return i;
    }

int pass()
    {
    char sNameInFile[20];   //由文件中读出的业务员用户名
    char sPassInFile[20];  //文件中保存的密码,这一版本中,用字符保存密码
    ifstream infile("password.txt",ios::in);
    if(!infile)
        {
        cout<<"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;  //要返回的结果:0-不正确 1-正确

    //进入系统,密码三次不对将退出
    do
        {
        cout<<"请输入业务员用户名:";
        cin>>sName;
        cout<<"请输入密码:";
        int i=0;
        while((ch=getch())!='\r')  //getch在接受输入后,不在屏幕上显示
            {
            sPass[i++]=ch;
            putchar('*');   //接受任何字符,屏幕上只显示*
            }
        sPass[i]='\0';
        fflush(stdin);
        cout<<endl;;
        if(strcmp(sPass,sPassInFile)==0&&strcmp(sName,sNameInFile)==0)
            {
            right = 1;
            break;
            }
        else
            {
            iTry--;
            if(iTry>0)
                cout<<"超过3次将退出,你还可以尝试"<<iTry<<"次!"<<endl;
            else
                {
                cout<<"对不起,你不能进入系统"<<endl;;
                }
            }
        }
    while(iTry);
    return right;

    }
int inputcode()//使密码以*号显示
    {
    char ch;
    int iPass=0;//用于将输入的字符型数字转换为数字型数字
    while(1)
        {
        for(int i=0; i<6; i++)
            {
            ch=getch();
            putchar('*');   //输入后不显示数字而输出*
            if(isdigit(ch))   //!!isdigit(ch)的使用
                iPass=iPass*10+(ch-'0');
            else
                {
                iPass=0;
                break;  //退出for循环后,再次接受
                }
            }
        fflush(stdin); //!!清除键盘缓存区中已经有的输入,fflush(stdin)的使用
        cout<<endl;;
        if(iPass==0)  //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
            {
            cout<<"密码要求全为数字,且不能全0!"<<endl;;
            cout<<"请重新输入密码: ";
            }
        else
            break;
        }
    return iPass;
    }

      一年就那么一晃就过去了,从来没想过大学的时间会过的那么快,真的从来没有那么快的度过一年。

      都说当一个人找到事做,过得充实才会抓不住时间的尾巴,感受时间的飞逝;但我并不是这一种,我空虚,而时光飞逝。

      C++课程学到现在,我只能说我只是略懂皮毛,要到考试的时候就猛看题,很多地方都不是去掌握方法规律,而是死背硬记,如果问我为什么也许我就答不上来了,记得以前班主任骂我说:你不是傻,是你的学习态度有问题。

      而我对生活就是得过且过的态度。

      是的,我的生活没有目标,仿佛每天都在过着同样的日子,那种自认为是享受的日子,其实我也知道我这是自欺欺人。

      有时候安慰自己说谁的青春没有迷茫过,但我还是迷茫得太过了,太久了。最可悲的就是我能意识到自己的不足和知道自己应该改变什么,但从来就没有真正着手改变自己,要不就是三分钟情绪,一阵时间过了又回到了老样子。

      我常常在思考”转折“这个词,因为我时常以为我需要一次转折。每一个转折都需要一个点,而这个点往往就是对你内心深处的一种冲击或者触动,然后促使你想着去改变或者强迫被改变。

       一个迷茫的人,在试着寻找目标然后找到目标开始为之奋斗的时候,自己都会被自己感动,那种感动充满正能量,这种感受我有过,然后又没有了。

      是不是每一个因为打击而变得堕落迷茫的人必须要经过再一次的打击才会重新振作?就像一根用力掰弯的钢筋必须要用同样或者更大的力气才能使他恢复原样甚至做出更完美的形状。

      那天特意去看了看贺老的博客,其中有一篇叫《”差生“,不要再拿兴趣说事》对我感触挺深的,因为我就是那么一个喜欢拿兴趣说事的人,前面提到说我的生活没有目标,所以往往当别人问起我为什么没有目标的时候,一般我都会回答:我还没找到我喜欢做的事,现在所做的正因为不是我喜欢的,所以做得不好也理所当然。对此,贺老的几句话就让我无言以对。1.“表面是成绩差,在大学中,实质上的差是,差在保守,不求改变,虚度光阴。”         2. “而大学生呢,已经进入成年人的年龄,这是一个必须开始面对现实的时候了,这句话有理,但不能全拿兴趣说事。”        3. “没有兴趣,很难投入,这是一个事实;但是,不去投入,兴趣不能从天而降,一定的。在类似先有鸡还是先有蛋的争辩中,我的不少同学放下兴趣论,优先通过投入,通过坚持,在同程序中的bug之间的艰苦卓绝的战斗中找到了真正的专业兴趣。”       4.“不必等待和徘徊,要的只是立刻行动起来。拆掉你思维中的那堵墙,将自己解放出来。立即行动,着手改变!”      5.“用行动去表明,你不是差生。”

                 这本是一篇课程实训报告,却又被我写成了一篇吐槽加思考类的文章,文章的结尾我也不会去写什么从今以后立志要怎样怎样的话。

      我只想感谢每一位鼓励我的人,感谢每一位带给我正能量的人。

      真心谢谢。




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答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编程能力,了解数据获取和处理的方法,熟悉算法的选择和现,掌握界面设计和用户交互的技术,培养系统分析和设计的能力,进一步提升学生的综合践能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值