提高第40课时,实践,简易银行系统开发

/*
*Copyright(c) 2015/6/3 CSDN博客
*All rights reserved.
*文件名称:main.c
*作    者:金叶
*完成日期:2015/6/3
*版本号:V1.0
*问题描述:小型银行应用程序
*程序输出:
*/


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
#define upNum 2000
int ipass(); //银行员工密码确认
void downdate(); //加载数据
int iChoose(); //银行员工选择功能
int search(int id); //用于查找账户对应的下标
int inputpass(); //用于输入密码
void work(); //主菜单
void open_account(); //1开户
void cancellation(); //2注销
void deposit(); //3存款
void withdraw_money(); //4取款
void query(); //5查询
void transfer_accounts(); //6转账
void loss(); //7挂失
void unloss(); //8解挂
void change(); //9该密
void update(); //保存数据,退出
int user[upNum][3];  //账号、密码、状态
char name[upNum][10];   //用户名
double balance[upNum];  //账户余额
int N; //银行用户实际人数

int main()
{
    if (ipass()==1)
    {
        downdate();
        work();
        update();
    }
    return 0;
}

int ipass()
{
    int i,j=3;
    int right=0;
    char ch;
    char worker[20];
    char ipass[20];
    char worker1[20];
    char ipass1[20];
    FILE *fp;
    printf("+-------------------+\n");
    printf("+  欢迎光临CSDN银行 +\n");
    printf("+-------------------+\n");
    if ((fp=fopen("worker.txt","r"))==NULL)
    {
        printf("worker file cannot open!");
        exit(0);
    }
    fscanf(fp,"%s %s",worker,ipass); //读入工作人员用户名
    fclose(fp);
    do
    {
        printf("请输入业务员的用户名:");
        scanf("%s",worker1);
        printf("请输入密码:");
        i=0;
        while((ch=getch())!='\r')
        {
            ipass1[i++]=ch;
            putchar('*');
        }
        ipass1[i]='\0';
        fflush(stdin);
        printf("\n");
        if (strcmp(worker1,worker)==0&&strcmp(ipass1,ipass)==0)
        {
            right = 1;
            break;
        }
        else
        {
            j--;
            if (j>0)
            {
                printf("超过3次将退出,你还可以尝试%d次!\n", j);
            }
            else
            {
                printf("对不起,你不能进入系统\n");
            }
        }
    }
    while (j);
    return right;
}

void downdate()
{
    int i=0;
    FILE *fp;
    if ((fp=fopen("bank.txt","r"))==NULL)
    {
        printf("bank file cannot open!");
        exit(0);
    }
    while(fscanf(fp,"%d %s %d %lf %d",&user[i][0], name[i], &user[i][1], &balance[i],&user[i][2] ) != EOF)
    {
        i++;
    }
    N=i;
    fclose(fp);
    return;
}

void work()
{
    int ichose;
    do
    {
        ichose=iChoose();
        switch (ichose)
        {
        case 1:
            open_account(); //开户
            break;
        case 2:
            cancellation(); //2注销
            break;
        case 3:
            deposit(); //3存款
            break;
        case 4:
            withdraw_money(); //4取款
            break;
        case 5:
            query(); //5查询
            break;
        case 6:
            transfer_accounts(); //6转账
            break;
        case 7:
            loss(); //7挂失
            break;
        case 8:
            unloss(); //8解挂
            break;
        case 9:
            change(); //9该密
            break;
        case 0:
            printf("欢迎再来\n");
            update(); //保存退出
        }
    }
    while (ichose);
}


int iChoose()
{
    int ichose;
    while (1)
    {
        printf("\n");
        printf("+----------------------------+\n");
        printf("+ 1 开户    2 销户    3 存款 +\n");
        printf("+ 4 取款    5 查询    6 转账 +\n");
        printf("+ 7 挂失    8 解挂    9 改密 +\n");
        printf("+                     0 退出 +\n");
        printf("+----------------------------+\n");
        printf("请输入操作指令:");
        scanf("%d",&ichose);
        if (ichose>=0 && ichose<=9)
        {
            break;
        }
        else
            printf("输入错误,请重新选择\n\n");
    }
    return ichose;
}

void open_account()
{
    int ipass1,ipass2;
    if (N==upNum)
    {
        printf("银行用户达到上限,不能开户\n");
    }
    printf("正在进行开户\n");
    printf("请输入用户账号:");
    scanf("%d",&user[N][0]);
    printf("请输入用户姓名:");
    scanf("%s",name[N]);
    printf("请输入密码:");
    ipass1=inputpass();
    printf("请再次确认密码:");
    ipass2=inputpass();
    if (ipass1==ipass2)
    {
        user[N][1]=ipass1;
        user[N][2]=0;
        printf("存款金额:");
        scanf("%lf",&balance[N]);
        printf("开户成功!\n");
        N++;
    }
    else
    {
        printf("密码错误,开户失败!\n");

    }
}

int search(int id)
{
    int index;
    index=-1;
    int i;
    for (i=0; i<N; i++)
    {
        if (user[i][0]==id)
        {
            index=i;
            break;
        }
    }
    return index;
}

int inputpass()
{
    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); //清除键盘缓存区中已经有的输入
        printf("\n");
        if(iPass==0)  //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
        {
            printf("密码要求全为数字,且不能全0!\n");
            printf("请重新输入密码: ");
        }
        else
            break;
    }
    return iPass;
}

void cancellation()
{
    int i;
    int cancel;
    int pass;
    printf("输入待销户账号:");
    scanf("%d",&cancel);
    i=search(cancel);
    printf("姓名:%s\n",name[i]);
    printf("密码:");
    pass=inputpass();
    if (pass==user[i][1])
    {
        printf("余额:%.2lf",balance[i]);
        printf("确认销户Y/N:");
        if(tolower(getchar())=='y')
        {
            balance[i]=0;  //取款后余额变0
            user[i][2]=2;  //状态变为注销
            printf("取款 %.2f 元,销户成功!\n", balance[i]);
        }
        else
        {
            printf("你取消了操作,销户失败!\n");
        }
    }
    else
    {
        printf("密码错误,销户失败!\n");
    }
}

void deposit()
{
    int i;
    int id;
    int pass;
    double money;
    printf("请输入账号:");
    scanf("%d",&id);
    i=search(id);
    if (i<0)
    {
        printf("用户名不存在!\n");
    }
    else
    {
        printf("姓名:%s",name[i]);
        printf("密码:");
        pass=inputpass();
        if (pass==user[i][1]&&user[i][2]==0)
        {
            printf("输入存款金额:");
            scanf("%lf",&money);
            printf("余额总计%.2lf,存款成功",money+balance[i]);
        }
        else if (pass==user[i][1]&&user[i][2]==1)
        {
            printf("卡已挂失,存款失败!\n");
        }
        else if (pass==user[i][1]&&user[i][2]==2)
        {
            printf("卡已注销,存款失败!\n");
        }
        else
        {
            printf("密码错误,存款失败!\n");
        }
    }
}

void withdraw_money()
{
    int i;
    int id;
    int pass;
    double money;
    printf("请输入账号:");
    scanf("%d",&id);
    i=search(id);
    if(i<0)
    {
        printf("用户名不存在!\n");
    }
    else
    {
        printf("姓名:%s",name[i]);
        printf("密码:");
        pass=inputpass();
        if (pass==user[i][1]&&user[i][2]==0)
        {
            printf("余额 :%.2lf\n",balance[i]);
            printf("取款金额:");
            scanf("%lf",&money);
            if (money>balance[i])
            {
                printf("余额不足,取款失败");
            }

            else
            {
                balance[i]-=money;
                printf("余额:%.2lf",balance[i]);
            }
        }
        else if (pass==user[i][1]&&user[i][2]==1)
        {
            printf("卡已挂失,取款失败!\n");
        }
        else if (pass==user[i][1]&&user[i][2]==2)
        {
            printf("卡已注销,取款失败!\n");
        }
        else
        {
            printf("密码错误,取款失败!\n");
        }
    }
}

void query()
{
    int i;
    int id;
    int pass;
    printf("请输入账号:");
    scanf("%d",&id);
    i=search(id);
    printf("姓名:%s",name[i]);
    printf("密码:");
    pass=inputpass();
    if (pass==user[i][1])
    {
        printf("余额:%.2lf\n",balance[i]);
        if (user[i][2]==0)
        {
            printf("当前状态:正常\n");
        }
        else if (user[i][2]==1)
        {
            printf("当前状态:挂失\n");
        }
        else
            printf("当前状态:注销\n");
        printf("查询完毕!\n");
    }
    else
    {
        printf("密码错误,查询失败\n");
    }
}

void transfer_accounts()
{
    int id,id2;
    int i,i2;
    double money;
    int pass;
    printf("请输入转出账号:");
    scanf("%d",&id);
    i=search(id);
    printf("姓名:%s",name[i]);
    printf("密码:");
    pass=inputpass();
    if (pass==user[i][1]&&user[i][2]==0)
    {
        printf("请输入转入账号:");
        scanf("%d",&id2);
        i2=search(id2);
        printf("转账金额:");
        scanf("%lf",&money);
        if (money>balance[i])
        {
            printf("金额不足,转账失败!\n");
        }
        else
        {
            printf("转账成功,余额 %.2lf\n",balance[i]-money);
            balance[i2]+=money;
        }
    }
}

void loss()
{
    int id;
    int i;
    int pass;
    printf("请输入账号:");
    scanf("%d",&id);
    i=search(id);
    printf("姓名:%s",name[i]);
    printf("密码:");
    pass=inputpass();
    if (pass==user[i][1])
    {
        printf("余额:%.2lf\n",balance[i]);
        if (user[i][2]==0)
        {
            printf("当前状态:正常\n");
            user[i][2]=1;
            printf("挂失成功!\n");
        }
        else if (user[i][2]==1)
        {
            printf("当前状态:挂失\n");
        }
        else
            printf("当前状态:注销\n");
    }
    else
    {
        printf("密码错误,挂失失败\n");
    }
}

void unloss()
{
    int id;
    int i;
    int pass;
    printf("请输入账号:");
    scanf("%d",&id);
    i=search(id);
    printf("姓名:%s",name[i]);
    printf("密码:");
    pass=inputpass();
    if (pass==user[i][1])
    {
        printf("余额:%.2lf\n",balance[i]);
        if (user[i][2]==0)
        {
            printf("当前状态:正常\n");
        }
        else if (user[i][2]==1)
        {
            printf("当前状态:挂失\n");
            user[i][2]=0;
            printf("解挂成功!\n");
        }
        else
            printf("当前状态:注销\n");
    }
    else
    {
        printf("密码错误,解挂失败\n");
    }
}

void change()
{
    int id;
    int i;
    int pass,pass1,pass2;
    printf("请输入账号:");
    scanf("%d",&id);
    i=search(id);
    printf("姓名:%s",name[i]);
    printf("密码:");
    pass=inputpass();
    if (pass==user[i][1]&&user[i][2]!=2)
    {
        printf("新密码:");
        pass1=inputpass();
        printf("再次输入:");
        pass2=inputpass();
        if (pass1==pass2)
        {
            user[i][1]=pass1;
        }
        else
        {
            printf("2次输入不正确,改密码失败\n");
        }
    }
    else
    {
        printf("密码不对!\n");
    }
}

void update()
{
    FILE *p;
    int i=0;
    if ((p=fopen("bank.txt", "w"))==NULL)
    {
        printf("bank.txt file cannot open!");
        exit(0);
    }
    for(i=0; i<N; i++)
        fprintf(p,"%d %s %d %lf %d\n",user[i][0], name[i], user[i][1], balance[i],user[i][2]);
    fclose(p);
    exit(0);
}









用了一下午才做好这个实践


真的是好累啊


不过最后测试完以后是十分的满足啊


后面还得改进些,得等休息的时候弄了。


本文的目标读者是准备从事银行核心系统开发、维护的从业人员。请注意,是“准备”,换句话说,可以理解为一份对科技人员,尤其是对新入门的科技人员业务知识方面的培训手册,旨在让诸位从业务方面迅速上手(从技术角度上手的手册我已经贴过一份了,所以如果是用400的同行,可以结合本手册双剑合璧,效力倍增)。这里的着重点将会主要在于简单的银行会计原理,以及银行整体的业务流程,还有相应的模块实现手法和注意事项,对金融的会计知识方面应该可能会比较粗浅,这一点与金融系统常见的业务培训手册有所不同,注意体会。 基于此,本文将会假设读者具备一定的计算机技术,具备少量银行方面的业务知识,所以如果有从事非IT部门的读者(比如财务信贷的同事们),就请不要太计较里面的表述。当然如果有错误,还是非常欢迎指出的。 对于已具备了若干开发、维护知识,或者是即将采用国外系统来建设的同行们而言,本文的内容可能就过于浅显了,看得不爽不要怪我没有事先提醒。 考虑到某方面的问题,这里的系统简介将尽可能的脱离某个具体的系统,仅就银行业务核心系统的共性,进行介绍以及探讨。 最后再说一下,没有什么手册、心得是万能的,个人的LEVEL UP始终是要靠自己的领悟,这里只是希望能让诸位新人不用象很多人当年一样,独自摸索与徘徊。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值