简单的ATM管理系统

博客班级 班级链接
作业要求 作业链接
作业目标 编写一个ATM管理系统
学号 3180701111

题目要求

编写一个ATM管理系统,语言不限,要求应包括以下主要功能:

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

(5)转账(一个账户转到另一个账户)等...

代码

头文件部分

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define NUM 1001

函数声明

//用户登录
void denglu();
//用户注册
void zhuce();
//一级菜单
void enter();
//二级菜单
void enter2();
//退出系统
void tuichu();
//转账
void zhuanzhang();
//查询
void chaxun();
//取款
void qukuan();
//存款
void cunkuan();
//修改密码
void xiugai();
//读取文件
void load();
//写入文件
void save();

结构体定义

struct yonghu
{
char ID[20];//用户账户
char key[20];//用户密码
int account;//账户余额
}user[NUM];

用户注册

void zhuce()
{
char ch;
if(user[1000].account!=0)
{
j=user[1000].account;
}
printf("

				请设置您的卡号:
				  ");
scanf("%s",user[j].ID);
    printf("
				请设置您的密码:
				  ");
        scanf("%s",user[j].key);
          user[j].account=0;
    printf("卡号:%s 
余额:%4d
",user[j].ID,user[j].account);
user[1000].account=++j;
save();
printf("

				恭喜您注册成功!");
printf("


");
system("pause");
printf("				按回车键返回上一级
");
    printf("


");
system("cls");
ch=getchar();//用来接收最后的回车符
if(ch=='
')
{
       enter();
}
}

用户登陆

void denglu()
{
int i,n,m;
char  id[20],kw[20];
printf("		    连续输错账号或密码三次,将返回主菜单
");

for(i=0;i<3;i++)
{
printf("请输入登录账号
");
scanf("%s",id);
for(k=0;k<NUM-1;k++)
{
if(strcmp(id,user[k].ID)==0)
{
m=1;
break;
}
else
m=0;
}
if(m==0)
{
printf("该账号不存在,剩余输入次数%d
",2-i);
if((2-i)==0)
{
printf("账号输入错误3次,即将返回菜单......
");
system("pause");
enter();
}
}

if(m==1)
{
printf("请输入登录密码
");
for(n=0;n<3;n++)
{
scanf("%s",kw);
if(strcmp(kw,user[k].key)==0)
{
system("cls");
enter2();
}
else
{
printf("密码输入错误,剩余输入次数%d
",2-n);
if((2-n)==0)
{
printf("密码输入错误3次,即将返回菜单......
");
system("pause");
enter();
}
}
}
}
}
}

一级菜单

void enter()//一级菜单函数
{
int a;
load();
system("cls");
printf(" 			      ATM模拟系统
");
printf(" 			  *******************
");
printf("			  |欢迎使用本银行系统|
");
printf(" 			  ********************
");
    printf("

");
printf("			 ****您将有以下选择****
");
printf("

");
printf(" 			  ++++++++++++++++++++
");
printf(" 			  +      1.设置      +
");
printf(" 			  +      2.登录      +
");
    printf(" 			  +      3.退出      +
");
printf(" 			  ++++++++++++++++++++
");
printf("

");
printf(" 			   |请输入您的操作号| 

				  ");
    scanf("%d",&a);
  switch(a)
{
case 1:system("cls");//清屏
zhuce();
break;
    case 2:system("cls");
denglu();
        break;
case 3:system("cls");
        tuichu();
break;
default:printf("				无此操作项
请重新选择
");
system("pause");
system("cls");
enter();
}
}

二级菜单

void enter2()
{
int n;
do
{
printf("


");
printf(" 			+++++++++++++++++++++++++++++
");
printf(" 			+  A T M 系 统 个 人 界 面  +
");
printf(" 			+     您 有 以 下 选 择     +
");
printf(" 			+++++++++++++++++++++++++++++
");
printf(" 			    ++++++++++++++++++++
");
printf(" 			    #     1.  查询     #
");
printf(" 			    #     2.  取款     #
");
printf(" 			    #     3.  转账     #
");
printf(" 			    #     4.  存款     #
");
printf(" 			    #     5.修改密码   #
");
printf(" 			    #     6.返回目录   #
");
printf(" 			    ++++++++++++++++++++

				  ");
scanf("%d",&n);
    switch(n)
{
case 1:system("cls");
chaxun();
break;
    case 2:system("cls");
qukuan();
        break;
case 3:system("cls");
        zhuanzhang();
break;
case 4:system("cls");
        cunkuan();
break;
case 5:system("cls");
        xiugai();
break;
    case 6:system("cls");
        enter();
break;
default:printf("				无此操作项

");
system("pause");
system("cls");
}
}while(n>4&&n<0);
}

程序退出

void tuichu()
{
printf("			**********谢谢**********
");
    printf("			******感谢您的使用******
");
    printf("			******欢迎下次光临******
");
    printf("			**********再见**********
");
    exit(0);
}

转账

void zhuanzhang()
{
int a,x;
char kahao[20];
printf("			       请输入转账卡号:
				  ");
scanf("%s",kahao);
for(a=0;a<NUM-1;a++)
{
if(!strcmp(kahao,user[a].ID))
{
printf("				  卡号正确

");
break;
}
}
if(strcmp(kahao,user[a].ID))
{
printf("				  卡号不存在

");
system("pause");
zhuanzhang();
}
printf("				请输入转账金额
				    ");
scanf("%d",&x);
if(x>user[k].account)
{
printf("				您卡里的余额不足
");
printf("				请重新输入提取金额:
");
}
else
{
user[k].account=user[k].account-x;
user[a].account=user[a].account+x;
save();
}
system("pause");//冻结屏幕
system("cls");
printf("


");
enter2();
}

查询

void chaxun()
{
char ch;
printf("			******欢迎使用查询服务******
");
printf("			     您的余额为%d元

",user[k].account);
system("pause");
    system("cls");
printf("


");
ch=getchar();//用来接收最后的回车符
if(ch=='
')
{
enter2();
}
}

取款

void qukuan()
{
int i,x;
char a,ch;
printf(" 			+++++++++++++++++++++++++++++++
");
printf(" 			+  本银行最低取款金额为100元  +
");
    printf(" 			+       您卡号的余额为        +
");
printf(" 			+       %d元                  +
",user[k].account);
printf(" 			+    请选择你要提取的金额:    +
");
printf(" 			+    1: 100元     2:200元     +
");
printf(" 			+    3.500元      4:1000元    +
");
printf(" 			+    5:2000元     6:5000元    +
");
printf(" 			+        7: 自定义金额        +
");
printf(" 			+++++++++++++++++++++++++++++++

				      ");
scanf("%d",&i);
if(i==1)   
{
    x=100;
}
else
if(i==2)
{
    x=200;
}
else
if(i==3)
{
    x=500;
}
else
if(i==4)
{
    x=1000;
}
else
if(i==5)
{
    x=2000;
}
else
if(i==6)
{
    x=5000;
}
else
if(i==7)
{
printf("				请输入自定义的金额:
				  ");
scanf("%d",&x);
}
if(x<=user[k].account)
{
user[k].account=user[k].account-x;
printf(" 				您取了%d元钱
",x);
            printf(" 				您的余额为%d元
",user[k].account);
}
       else if(x>user[k].account)
{
printf("				您卡里的余额不足
");
printf("				请重新输入提取金额:
");
}
printf(" 				请选择是否继续取款
");
    printf(" 				是:Y          否:N

				  ");
scanf("%s",&a);
if(a=='Y')
{
save();
qukuan();
}
else
if(a=='N')
{
save();
system("pause");//冻结屏幕
system("cls");
printf("


");
}
else
{
save();
system("pause");//冻结屏幕
system("cls");
printf("


");
}
ch=getchar();//用来接收最后的回车符
if(ch=='
')
{
system("cls");
enter2();
        }
}

存款

void cunkuan()
{
int a;
printf("				请输入存入账户的金额:

				  ");
scanf("%d",&a);
user[k].account=user[k].account+a;
save();
printf(" 				您的余额为%d元
",user[k].account);
system("pause");//冻结屏幕
system("cls");
printf("


");
enter2();
}

修改密码

void xiugai()
{
printf("				请输入新的密码
				  ");
scanf("%s",user[k].key);
save();
    system("pause");//冻结屏幕
system("cls");
printf("


");
enter2();
}

读取文件

void load()
{
FILE *fp;
    int i;
if((fp=fopen("data.txt","r"))==NULL)
    {
        printf("不能打开文件
");
        return;
    }
    for(i=0;!feof(fp);i++)
    {
        fread(&user[i],sizeof(struct yonghu),1,fp);
    }
    fclose(fp);
    system("cls");
    printf("文件读取成功
");
}

写入文件

void save()      
{
    FILE *fp;
    if((fp=fopen("data.txt","w"))==NULL)
    {
        printf("无法打开文件
");
        exit(0);
    }
    fwrite(user,sizeof(struct yonghu),NUM,fp);
    printf("文件写入完成
");
    fclose(fp);
}

运行界面

一级菜单

二级菜单

程序退出

用户注册

用户登录

存款

取款

转账

查询

作业小结

psp表格

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

心得和体会

本次ATM管理系统设计的较为简单,许多功能未能加入,界面做的不够美观友好,尚有许多提升空间,希望以后能做的更好。

原文地址:https://www.cnblogs.com/alesoso/p/14001855.html