个人作业三-ATM管理系统

ATM管理系统

这个作业属于哪个课程https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/
这个作业要求在哪里 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11478
这个作业的目标 培养对于一个完整作业流程和相关数据的处理能力
学号 3180701301

 

 

 

 

 

题目要求:

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

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

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

允许网上查询参考,但请注意不要直接抄袭,可以理解看懂别人的代码,再自己编写
代码提交:

(1)开户,销户

void regist(){
    system("cls");//清屏
    char rePass[7];
    printf("



				请输入用户名:");
    //要使用一个字符串接收输入的用户名
    fflush(stdin);//刷新字符缓冲区
    gets(user[count].name);//读取字符串,回车结束
    while(1){
        while(1){
            printf("

				请输入密码:");
            fflush(stdin);//清空输入缓冲区
            inputPass(user[count].pass);
            int length=strlen(user[count].pass);//计算字符串长度,其返回值是一个整数
            if(length==6){
                break;
            }else{
                printf("

				密码输入有误!请输入6位密码");
            }
        }
        printf("

				请再次输入密码:");
        fflush(stdin);//清空输入缓冲区
        inputPass(rePass);
        if(strcmp(rePass,user[count].pass)==0){
            break;
        }else{
            printf("

				两次密码输入不一致,请重新输入");
        }
    }
    account=account+1;
        user[count].account=account;
    user[count].money=0;
    system("cls");//清屏
    printf("



				注册成功
");
    printf("

				您的账号为:%d
",user[count].account);
    if(count>=1){
        printf("

				前一个注册的账号为:%d
",user[count-1].account);
    }
count++;
}
void logout(){
    system("cls");//清屏
    char confirm;//confirm 确认
    printf("



		您正在使用注销功能");
    printf("



		%d确认注销?",user[find].account);
    fflush(stdin);//清空输入缓冲区
    scanf("%c",&confirm);
    if(confirm=='y'||confirm=='Y'){
        printf("



		正在注销%d",user[find].account);
        isLogout=1;
    }else{
        printf("



		取消注销帐号%d,返回服务界面",user[find].account);
        isLogout=0;
    }
}

(2)查询账户余额

void selectMoney(){
    system("cls");//清屏
    printf("



				您正在使用查询余额功能");
    printf("

				您的账户余额为:%lf",user[find].money);
}

(3)存款

void saveMoney(){
    system("cls");//清屏
    printf("



				您正在使用存款功能");
    int RMB;
    printf("

				请输入存款金额:");
    scanf("%d",&RMB);
    user[find].money=user[find].money+RMB;
    printf("

				存款成功");
}

(4)取款

void getMoney(){
    system("cls");//清屏
    printf("



		您正在使用取款功能");
    int RMB;
    printf("

		请输入取款金额:");
    scanf("%d",&RMB);
    if(user[find].money>=RMB){
        user[find].money=user[find].money-RMB;
        printf("

		取款成功");
    }else{
            printf("

		余额不足");
    }
}

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

void transferMoney(){
    system("cls");//清屏
    int username;//账号
    int isFind=0;
    int RMB;//转账金额
    printf("



		您正在使用转账功能");
    printf("

		请输入对方的帐号:");
    scanf("%d",&username);
    for(int i=0;i<count;i++){
        if(username==user[i].account){
            dFind=i;
            isFind=1;
            break;
        }
    }
    if(isFind==1){
        printf("

		请输入转账金额:");
        scanf("%d,",&RMB);
        if(user[find].money>=RMB){
            user[find].money=user[find].money-RMB;
            user[dFind].money=user[dFind].money+RMB;
            printf("

		转账成功");
        }else{
            printf("

		余额不足");
        }
    }else{
        printf("

		目标帐号不存在");
    }
}

(6)功能界面

void service(){
    char choise;
    while(1){
        system("cls");
        printf("



		A、查询余额");
        printf("

		B、存款");
        printf("

		C、取款");
        printf("

		D、转账");
        printf("

		E、修改密码");
        printf("

		F、注销");
        printf("

		G、退出系统");
        printf("

		请选择:");
        fflush(stdin);//清屏
        scanf("%c",&choise);
        switch(choise){
            case 'a':
            case 'A':
                selectMoney();break;//查询余额
            case 'b':
            case 'B':
                saveMoney();break;//存款
            case 'c':
            case 'C':
                    //printf("

		执行取款功能");break;
                getMoney();break;//取款
            case 'd':
            case 'D':
                transferMoney();break;//转账
            case 'e':
            case 'E':
                printf("

		执行修改密码功能");break;
                //updatePass();break;//修改密码
            case 'f':
            case 'F':
                logout();
                if(isLogout==1){
                    return;//直接结束所处函数
                }
                break;//注销
            case 'g':
            case 'G':
                quit();break;//退出系统
            default:
                printf("

		您的输入有误,请重新输入!");break;
        }
        printf("

		按任意键继续");
        getch();//不回显函数,不需按回车
    }
}

源码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define NUM 1001
void denglu();
void shezhi();
void enter();
void enter2();
void tuichu();
void zhuanzhang();
void chaxun();
void qukuan();
void cunkuan();
void xiugai();
void load();


int j=0,k;




struct yonghu
{
char ID[20];
char key[20];
int account;
}user[NUM];
void main()
{
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");//清屏
shezhi();
break;
    case 2:system("cls");
denglu();
        break;
case 3:system("cls");
        tuichu();
break;
default:printf("				无此操作项
请重新选择
");
system("pause");
system("cls");
enter();
}
}
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);
}
void shezhi()
{
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 tuichu()
{
printf("			**********谢谢**********
");
    printf("			******感谢您的使用******
");
    printf("			******欢迎下次光临******
");
    printf("			**********再见**********
");
    exit(0);
}
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 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 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 zhuanzhang()
{
int a,b,c,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();
}

运行截图:

系统界面:

 开户:

 

功能界面:

查询账户余额:

取款:

转账:

 个人小结:

通过这次作业对结对编程有了一个大概的了解,由于对结对编程还不够熟练 ,所以对现在的我来说我还是比较喜欢一个人编程。

psp2.1任务内容计划完成需要的时间实际完成需要的时间
planning 计划 15 15
estimate 估计这个任务需要多少时间,并规划大致工作步骤 15 30
development 开发 20 25
analysis 需求分析 16 16
design spec 生成设计文档 21 12
design review 设计复审 6 5
coding standard 代码规范 5 5
design 具体设计 10 16
coding 具体编码 35 35
code review 代码复审 6 8
test 测试 10 8
reporting 报告 6 10
test reporting 测试报告 3 2
size measurement 计算工作量 3 2
postmortem & process improvement plan 总结并提出改进计划 5 8
原文地址:https://www.cnblogs.com/yuwenhan/p/13996303.html