「已注销」 2021-12-13 21:29 采纳率: 100%
浏览 634
已结题

银行账户管理系统c++客户账户管理

具体问题
客户账户管理:输入数据建立客户账户表、分账号表,添加、删除、修改、查询客户和账户信息(参考通讯录和广义表)

我的解答思路和尝试过的方法

打算用类似于邻接表的方式,前面的数组存主账户,后面接链表存分帐户,但是怎样根据名字或账号查询所在位置,并执行操作呐

  • 写回答

2条回答 默认 最新

  • 关注
    
    
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    #include "string.h"
    #define N 50
    //银行的结构体
    struct Bank
    {
        char name[20]; //姓名
        char password[20];//登录密码
        int cardno; //卡号
        double money; //帐上余额
    }bank[N];
    //记录系统中已经开户的用户数
    int count=0;
    
    //开户
    void kaihu();
    //存款
    void cunkuan();
    //取款
    void qukuan();
    //登录
    int login();
    //查询
    void find();
    //转账
    void transfer();
    
    void main()
    {
        int num;
        do{
            printf("\t\t\t*******************************************************\n");
            printf("\t\t\t*                                                     *\n");
            printf("\t\t\t*                 欢迎进入中国银行系统                *\n");
            printf("\t\t\t*                                                     *\n");
            printf("\t\t\t*******************************************************\n");
            printf("\t\t\t请选择您要办理的业务:\n");
            printf("\t\t\t\t1.开户:\n");
            printf("\t\t\t\t2.存款:\n");
            printf("\t\t\t\t3.取款:\n");
            printf("\t\t\t\t4.查询余额:\n");
            printf("\t\t\t\t5.转账:\n");
            printf("\t\t\t\t6.退出:\n");
            scanf("%d",&num);
            switch(num)
            {
                case 1://开户
                    kaihu();
                    break;
                case 2://存款
                    cunkuan();
                    break;
                case 3: //取款
                    qukuan();
                    break;
                case 4://查询
                    find();
                    break;
                case 5://转账    
                    transfer();
                    break;
                case 6:
                    
                    break;
            }
            printf("按任意键继续......\n");
            getch();//暂停
            system("cls");
        }while(num!=6);
        
    }
    //开户
    void kaihu()
    {
        printf("请输入您的姓名:");
        scanf("%s",bank[count].name);//字符数组赋值   字符数组,数组传址,所以可以不写 &.
        printf("请输入卡号:");
        scanf("%d",&bank[count].cardno);
        printf("请输入密码:");
        scanf("%s",bank[count].password);
        printf("请输入开户金额:");
        scanf("%lf",&bank[count].money);
        printf("恭喜你开户成功!请妥善保管您的个人信息,详细信息如下:\n");
        printf("您的姓名是:%s,您的卡号是:%d,您的密码是:%s,您的账上余额是:%0.2lf\n",bank[count].name,bank[count].cardno,bank[count].password,bank[count].money);    
        count++;
    }
    //登录,返回数组的下标
    int login()
    {
        int m_cardno;
        int i;
        int index=-1;//登录成功的用户下标
        char m_password[20];
        printf("请输入卡号和密码");
        scanf("%d,%s",&m_cardno,m_password);
        
        for(i=0;i<count;i++)
        {
            if(m_cardno==bank[i].cardno && strcmp(m_password,bank[i].password)==0)    //字符串比较要加头文件 "string.h"
            {
                index = i;
                break; //找到以后立即终止循环
            }
        }
        return index;
    }
    //存款
    void cunkuan()
    {
        double m_money;
        int currentIdx;
        //返回的下标大于等于0时,表示登录成功
        currentIdx=login();
        if(currentIdx>=0)
        {
            printf("请输入你要存款的金额:");
            scanf("%lf",&m_money);
            printf("存款之前您的账上余额是:%0.2lf\n",bank[currentIdx].money);
            bank[currentIdx].money += m_money;
            printf("存款%0.2lf元,您的账上余额是:%0.2lf\n",m_money,bank[currentIdx].money);
            
        }else{
            printf("您输入的卡号或密码错误\n");
        }
    }
    //取款
    void qukuan()
    {
        double m_money;
        int currentIdx;
        //返回的下标大于等于0时,表示登录成功
        currentIdx=login();
        if(currentIdx>=0)
        {
            printf("请输入你要取款的金额:");
            scanf("%lf",&m_money);
            if(bank[currentIdx].money-m_money>=0)
            {
                printf("取款之前您的账上余额是:%0.2lf\n",bank[currentIdx].money);
                bank[currentIdx].money -= m_money;
                printf("取款%0.2lf元,您的账上余额是:%0.2lf\n",m_money,bank[currentIdx].money);
            }else{
                printf("余额不足!\n");
            }
        }else{
            printf("您输入的卡号或密码错误\n");
        }
    }
    //查询
    void find()
    {
        int currentIdx;
        //返回的下标大于等于0时,表示登录成功
        currentIdx=login();
        if(currentIdx>=0)
        {
            printf("您的账上余额是:%0.2lf\n",bank[currentIdx].money);
        }else{
            printf("您输入的卡号或密码错误\n");
        }    
        
    }
    //转账
    void transfer()
    {
        double m_money;
        int currentIdx;
        int parnetcardno;
        int i,parentIdx=-1;
        //返回的下标大于等于0时,表示登录成功
        currentIdx=login();
        if(currentIdx>=0)
        {
            printf("请输入对方卡号:");
            scanf("%d",&parnetcardno);    
            for(i=0;i<count;i++)
            {
                if(bank[i].cardno==parnetcardno){
                    parentIdx=i; //表示对方的账号信息对应的下标
                    printf("请输入转出金额:");
                    scanf("%lf",&m_money);
                    if(bank[currentIdx].money-m_money>=0)
                    {
                        //自己的账号减掉转出的钱
                        bank[currentIdx].money-=m_money;
                        //对方的账号加上转入的钱
                        bank[parentIdx].money+=m_money;
                        printf("转账成功:转出%0.2lf元,账上余额是:%0.2lf\n",m_money,bank[currentIdx].money);
                    }else{
                        printf("转账失败:余额不足\n");
                    }
                    break;
                }    
            }
            if(parentIdx==-1){
                printf("转账失败:对方卡号不存在\n");
            }
        }else{
            printf("您输入的卡号或密码错误\n");
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月18日
  • 已采纳回答 5月10日
  • 创建了问题 12月13日

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况