封闭货车_xxxx

导航

作业三-ATM管理系统

目录

一、作业信息

二、题目

三、代码提交

四、个人总结

一、作业信息

作业课程|https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18|
-|-|-
作业要求|https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11478|
学号|3180701030|

二、题目

编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...

三、代码提交

1.头文件、宏定义及函数定义


      #include <stdio.h>
      #include<stdlib.h> 
      #include <string.h>
      #include <ctype.h>
      #include <conio.h>
      #define topNum 2000 //系统最多容纳用户数目

      int uActual;//实际人数
      char AccName[topNum][9];//账户名
      int users[topNum][2];//密码、状态,0行不存放
      char nameGroup[topNum][10];//用户姓名,0行不存放
      double balance[topNum];//账户余额,0行不存放
      void uExpotrData();//导出数据
      void uImportData();//写入数据
      void Work();//办理
      int BankMenu();//银行界面
      void Deposit();
      void Withdraw();//取款
      void ChangePWD();//改密
      void Cancellation();//销户
      void Sleep();//挂失
      void Recovery();//解挂
      void TransferAccount();//转账
      void CreateAccount();//开户
      void Qurey();//查询
      void creatAccNum(int );
      int createPWd(int );
      int seek(char []);//账户判断
      int see(char []);//账号查询
      int verifyAll();
      int verifyPAD(int Num);//密码验证
      int inputPWD();

2.主函数与菜单

int main()
{
    printf("+------------------+\n");
    printf("+ 欢迎来到CSDN银行 +\n");
    printf("+------------------+\n");
    uExpotrData();//从文件导出数据
    Work();//业务办理
    uImportData();//写入数据到文件
    return 0;
}
int BankMenu()//银行界面
{
    int Choice;//选择业务办理选项
    do
    {
        printf("\n\n");
        printf("  +---------------------------------+\n");
        printf("  +           办理业务选项          +\n");
        printf("  +---------------------------------+\n");
        printf("  +   1.存款    2.取款    3.改密    +\n");
        printf("  +                                 +\n");
        printf("  +   4.销户    5.开户    6.挂失    +\n");
        printf("  +                                 +\n");
        printf("  +   7.解挂    8.转账    9.查询    +\n");
        printf("  +                                 +\n");
        printf("  +   0.退出系统                    +\n");
        printf("  +---------------------------------+\n");
        printf("\n");
        printf("输入所需办理的业务序号:");
        scanf("%d",&Choice);
        fflush(stdin);
        if(Choice<=9&&Choice>=0)
            break;
        else
            printf("请输入1~9的选项");
    }while(1);
    return Choice;
}

3. 导入文件和保存文件

void uExpotrData()//导入数据
{
    int i=0;
    FILE *fp;
   // if((fp = fopen("account.dat","r")) == NULL)
   if((fp = fopen("account.txt","r")) == NULL)
    {
        printf("File cannot open!\n");
        exit(0);
    }
    if(feof(fp))
    {
        uActual = 0;
    }
    else
    {
        //密码、状态、用户姓名、账号、余额写入
        while(fscanf(fp,"%d %d %s %s %lf",&users[i][0],&users[i][1],nameGroup[i],AccName[i],&balance[i]) != EOF)
            i++;
        fclose(fp);
        uActual = i;
    }
}
void uImportData()//写入数据
{
    int i=0;
    FILE *fp;
    if((fp = fopen("account.txt","w")) == NULL)
    {
        printf("File cannot open!\n");
        exit(0);
    }
    //密码、状态、用户名、账号、余额写入
    for(i=0;i<uActual;i++)
        fprintf(fp,"%d %d %s %s %.2lf\n",users[i][0],users[i][1],nameGroup[i],AccName[i],balance[i]);
    fclose(fp);
}

4.业务办理

void Work()//办理
{
    int uChoice;
    if(uActual == 0)
    {
        printf("系统未存储用户数据,需办理开户\n");
        printf("是否开户:Y/N\n");
        if(tolower(getchar())=='y')//tolower()函数将字母转化为小写,非字母不做处理
        {
            CreateAccount();//开户
        }
        else
        {
            printf("退出系统");
            exit(0);
        }
    }
    do{
        uChoice = BankMenu();//界面菜单选择
        switch(uChoice)
        {
        case 1:
            Deposit();//存款
            break;
        case 2:
            Withdraw();//取款
            break;
        case 3:
            ChangePWD();//改密
            break;
        case 4:
            Cancellation();//销户
            break;
        case 5:
            CreateAccount();//开户
            break;
        case 6:
            Sleep();//挂失
            break;
        case 7:
            Recovery();//解挂
            break;
        case 8:
            TransferAccount();//转账
            break;
        case 9:
            Qurey();//查询
            break;
        case 0:
            printf("欢迎下次光临!\n");//退出
            break;
        default:
            printf("请输入选项中的0~9选项序号:");
            break;
        }
    }while(uChoice);
}

5.存款

void Deposit()//存款
{
    int site;
    double uMoney;
    if((site = verifyAll())!= -1)//身份验证
    {
            printf("请输入存款金额:");
            scanf("%lf",&uMoney);
            balance[site] +=uMoney;
            printf("已存款%0.2lf元\n余额为%0.2lf元\n",uMoney,balance[site]);
    }
}

6.取款

void Withdraw()//取款
{
    int site;
    double uMoney;
    if((site = verifyAll())!= -1)//身份验证
    {
        printf("请输入取款金额:");
        scanf("%lf",&uMoney);
        if(uMoney<balance[site])
        {
            balance[site] -=uMoney;
            printf("已取款%0.2lf元\n余额为%0.2lf元\n",uMoney,balance[site]);
        }
        else
            printf("余额不足!");
    }
}

7.改密码

void ChangePWD()//改密
{
    int site;//查找位置
    if((site = verifyAll())!= -1)//账号查询,并返回位置
    {
        if(createPWd(site))
            printf("修改成功!");
        else
            printf("修改失败");
    }
    else
    {
        printf("修改失败\n");
    }
 
}

8.注销账户

void Cancellation()//销户
{
 
    int site;//查找位置
    if((site = verifyAll())!= -1)
    {
        printf("你的账户余额为%0.2lf元\n",balance[site]);
        printf("是否销户Y/N:");
        if(tolower(getchar())=='y')//tolower()函数将字母转化为小写,非字母不做处理
        {
            users[site][1]=2;//销户
            printf("销户成功\n");
        }
        else
        {
            printf("销户失败\n");
        }
    }
    else
    {
        printf("\n失败\n");
    }
    return;
}

9.开户

void CreateAccount()//开户
{
    if(uActual == topNum)
    {
        printf("系统存储已达上线,不能开户");
        return;
    }
    printf("正在开户中……\n");
    printf("系统生成账号为:");
    creatAccNum(uActual);//生成账号
    printf("请输入姓名:");
    scanf("%s",nameGroup[uActual]);//存入用户名
    if(createPWd(uActual)==1)//创建密码并校验
    {
        printf("请输入存款金额:");
        scanf("%lf",&balance[uActual]);
        printf("您已经存入%lf元",balance[uActual]);
        users[uActual][1]=0;//写入状态代号为正常,0表示
        uActual++;
    }
    else
        {
            printf("返回系统选项\n");
        }
}

10.挂失

void Sleep()//挂失
{
    int site;
    if((site = verifyAll())!= -1)//身份验证
    {
        if(users[site][1]==0)//
        {
            users[site][1]=1;
            printf("\n挂失成功\n");
        }
        else if(users[site][1]==1)
            printf("\n该账已经挂失\n");
        else
            printf("\n该账户已经销户\n");
    }
}

11.接触挂失

void Recovery()//解挂
{
    char Acc_u[20];//账号
    int site;//查找位置
    printf("请输入账号:");
    gets(Acc_u);//标准输入设备读字符串函数
    site = see(Acc_u);//账号查询,并返回位置
    if(site!= -1)
    {
        printf("账户名为:%s\n",nameGroup[site]);
        if(verifyPAD(site))
        {
            if(users[site][1]==1)//
            {
                users[site][1]=0;
                printf("\n解挂成功\n");
            }
            else if(users[site][1]==0)
                printf("\n该账户未挂失\n");
            else
                printf("\n该账户已经销户\n");
        }
    }
 
}

12.转账

void TransferAccount()//转账
{
    int site;
    int Num;
    double uMoney;
    char str[20];//存储输入账号数字
    if((site = verifyAll())!= -1)//身份验证
    {
        printf("请输入需要转入的账户:");
        gets(str);//标准输入设备读字符串函数
        fflush(stdin);
        if((Num = seek(str))!= -1)//
        {
            printf("请输入转账金额");
            scanf("%lf",&uMoney);
            if(uMoney < balance[site])
            {
                balance[site] -= uMoney;
                balance[Num] +=uMoney;
                printf("转账成功\n账户余额为%lf",balance[site]);
            }
            else
            {
                printf("余额不足");
            }
        }
 
    }
    return;
}

13.查询账户

void Qurey()//查询
{
    int site;
    if((site = verifyAll( ))!= -1)//身份验证
    {
        printf("账户余额为%lf",balance[site]);
    }
}

14.密码验证

int verifyPAD(int Num)//密码验证
{
    int Pass_u;
    int judge=0;
    printf("请输入密码:");
    Pass_u = inputPWD();
    if(Pass_u == users[Num][0])
        judge = Num;//返回存在的序号
    else
    {
        printf("\n密码错误\n");
 
    }
    return judge;
}

15.密码创建

int inputPWD()//密码创建
{
    int i;
    char ch;//接受字符型密码
    int uPass=0;//字符型密码转换为数字
    do
    {
        for(i=0;i<6;i++)
        {
            ch=getch();
            printf("*");
            if(isdigit(ch))//检查输入是否为十进制数字字符
                uPass=uPass*10+(ch - '0');
            else
            {
                uPass=0;
                break;
            }
        }
        fflush(stdin);
        if(uPass == 0)
        {
            printf("\n");
            printf("密码仅能够为数字\n");
            printf("请重新输入密码\n\n");
        }
        else
        {
            break;
        }
    }while(1);
 
    return uPass;
}

16.运行截图

四、个人总结

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 10 30
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 10 20
Development 开发 200 300
Analysis 需求分析(包括学习新技术) 10 30
Design Spec 生成设计文档 15 30
Design Review 设计复审 5 10
Coding Standard 代码规范 5 8
Design 具体设计 10 50
Coding 具体编码 100 300
Code Review 代码复审 10 20
Test 测试(自我测试,修改代码,提交修改) 10 30
Reporting 报告 10 10
Test Report 测试报告 5 10
Size Measurement 计算工作量 3 3
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 10 10

posted on 2020-11-18 23:54  封闭货车_xxxx  阅读(97)  评论(0)    收藏  举报