作业三-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 |
浙公网安备 33010602011771号