atm

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

一、题目要求

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

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

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

二、代码部分

头文件

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

函数声明

int mingyan();   //用户名验证
int guayan(int);   //挂失验证
int miyan(int);     //密码函数
float T=0;           定义全局变量T,记录用户一天取款数的总和
void Debit();      //取款函数
void Credit();     //存款函数
void Quary();      //查询函数
void logout();   //销户函数
void Openbit();       //开户函数
void account();  //转账函数
void lose();      //挂失函数
void tuichu();      //退出函数
void chaall();      //查询所有用户信息

定义变量

char gUser[100][30];               //用户名
char gMima[100][30];               //密码
char Ggua[100][30];				   //挂失用户名
float YuE[100];                 //存款余额
int UserShu=0;                 //用户数
int guashu=0;                 //挂失用户数

主函数

void main()
{
	
	int order;          //命令


	while(order)
	{
		printf(" ================================================================ \n");
	    printf("||                    欢迎使用模拟ATM自助存取款                 ||\n");
		printf("||                                                              ||\n");
		printf("||         <1> 开户          <4>  取款         <8> 挂失         ||\n");
		printf("||         <2> 存款          <5> 销户                           ||\n");
		printf("||         <3> 查询          <6> 转账          <0> 退出         ||\n");
		printf("||         <7> 查询所有用户信息                                 ||\n");
		printf("||                                                              ||\n");
		printf(" ================================================================ \n");
		printf("请输入您的指令:  ");
		scanf("%d",&order);
		printf("\n");
		switch(order)
		{
		case 1:                                        //开户
			Openbit();
			break;
		case 2:                                        //存款
			Credit();
			break;
		case 3:                                        //查询
			Quary();
			break;
		case 4:                                        //取款
			Debit();
			break;
		case 5:                                        //销户
			logout();
			break;
		case 6:                                        //转账
			account();
			break;
        case 7:                                        //查询所有用户信息
			chaall();
			break;
		case 8:                                        //挂失
			lose();
			break;
        case 0:
			 printf("欢迎您再次使用!\n");
			 exit(0);
			 break;
		}
	}


}

取款函数

void Debit()       //取款
{
	int i,m;
	float n;
	i=mingyan();
	m=guayan(i);
	if(m==1)
		m=miyan(i);
	while(m==1)
	{
		printf("请输入您的取款金额: ");
		scanf("%f",&n);
		if(n>2000)
		{
			printf("每笔取款不得超过2000\n");
			Debit();
				break;


		}
		T=n+T;
		if(T>20000)
		{
			printf("每天取款总数不能超过20000,请您改天再进行取款");
			break;
		}
		if(n<=YuE[i])
		{
			printf("请取走您的钞票。\n");
			YuE[i]=YuE[i]-n;
			break;
		}
		else
			printf("您的余额不足,请重新输入。\n");
	}
}



存款函数

void Credit()   //存款
{
	int i,m;
	float n;
	i=mingyan();
	m=guayan(i);
	if(m==1)
		m=miyan(i);
	while(m==1)
	{
		printf("请输入您的存款金额: ");
		scanf("%f",&n);
		YuE[i]=YuE[i]+n;
		printf("存款成功!");
		printf("您的当前余额为: %.2f\n",YuE[i]);
		m=0;
	}
	m=1;
	main();
}

查询函数

void Quary()    //查询
{
	int i,m;
	i=mingyan();
	m=guayan(i);
	if(m==1)
		m=miyan(i);
}

开户函数

void Openbit()   //开户
{
	int i,n=UserShu,j=0;
	float m;
	char User[32],mima1[32],mima2[32];
	printf("请输入您的用户名: ");
	getchar();
	scanf("%s",User);
	for(i=0;i<n+1;i++)
	{
		if(strcmp(User,gUser[i])==0)
		{
			printf("该用户名已存在\n");
			break;
		}
		else
		{
			strcpy(gUser[UserShu],User);
			while(j!=1)
			{
				printf("请输入您的密码: ");
				scanf("%s",mima1);
				printf("请再次输入您的密码: ");
				scanf("%s",mima2);
				if(strcmp(mima1,mima2)==0)
				{
					printf("密码设置成功\n");
					printf("请输入您的存款金额: ");
					scanf("%f",&m);
					printf("恭喜您,开户成功\n");
					strcpy(gMima[UserShu],mima1);
					YuE[UserShu]=m;
					j=1;
				}
				else
					printf("两次输入不相同,请重新输入。\n ");
			}
			UserShu++;
			break;
		}
	}
}

销户函数

void logout()    //销户
{
	int i,n,m;
	i=mingyan();
	m=guayan(i);
	if(m==1)
		m=miyan(i);
	while(m==1)
	{
		printf("您确定要注销您的账户?\n   <1>确认    <2>取消   \n");
		scanf("%d",&n);
		if(n==1)
		{
			for(;i<UserShu;i++)
			{
				strcpy(gUser[i],gUser[i+1]);
				strcpy(gMima[i],gMima[i+1]);
				YuE[i]=YuE[i+1];
			}
		}
	UserShu--;
	printf("销户成功!\n");
	m=0;
	}
}

转账函数

void account()      //转账
{
	int i,n,j,s=1;
	float k;
	char User[32];
	i=mingyan();
	n=guayan(i);
	if(n==1)
		n=miyan(i);
	while(n==1)
	{
		printf("请输入目标账户:");
		scanf("%s",User);
		for(j=0;j<UserShu;j++)
		{
			if(strcmp(gUser[j],User)==0)
			{
				n=2;
				break;
			}
		}
		if(j==UserShu)
			printf("目标账户不存在,请重新输入。\n");
	}
	while(n==2)
	{
		printf("请输入转账金额:");
		scanf("%f",&k);
		if(k<=YuE[i])
		{
			YuE[i]=YuE[i]-k;
			YuE[j]=YuE[j]+k;
			printf("转账成功!\n您的当前余额为: %.2f\n",YuE[i]);
			break;
		}
		else
			printf("余额不足,请重新输入。\n");
	}
}

挂失函数

void lose()      //挂失
{
	int n,i,m;
	i=mingyan();
	m=guayan(i);
	if(m==1)
		m=miyan(i);
	if(m==1)
	{
		printf("您确定要挂失您的账户?\n   <1>确认    <2>取消   \n");
		scanf("%d",&n);
		if(n==1)
		{
			strcpy(Ggua[guashu],gUser[i]);
			guashu++;
			printf("%s 账户挂失成功!\n",gUser[i]);
		}
	}
}

剩余实现功能函数

void tuichu()
{


}


void chaall()     //查询所有用户信息
{
	int i;
	for(i=0;i<UserShu;i++)
		printf("用户名:%15s     余额:%.2f\n",gUser[i],YuE[i]);
}


int mingyan()     //用户名验证
{
	int m=1,i;
	char User[32];
	while(m==1)
	{
		printf("请输入您的用户名: ");
		scanf("%s",User);
		for(i=0;i<UserShu;i++)
			if(strcmp(gUser[i],User)==0)
			{
				m=0;
				break;
			}
		if(i==UserShu)
			printf("该用户不存在,请确认后再输入。 \n");
	}
	return i;
}


int guayan(int i)             //挂失验证
{
	int j,n;
	for(j=0;j<guashu;j++)
	{
		if(strcmp(gUser[i],Ggua[j])==0)
		{
			printf("此用户已经挂失,请解挂后再进行操作!\n");
			n=0;
			break;
		}
	}
	if(j==guashu)
		n=1;
	return n;
}




int miyan(int i)     //密码验证
{
	char mima[32];
	while(1)
	{
		printf("请输入您的密码: ");
		scanf("%s",mima);
		if(strcmp(gMima[i],mima)==0)
		{
			printf("登陆成功!\n");
			printf("用户名:%s          余额: %.2f \n",gUser[i],YuE[i]);
			break;
		}
		else
			printf("您输入的密码不正确,请重新输入。\n");
	}
	return 1;
}

运行截图

三.个人小结

1)在软件开发中,掌握时间是一个很重要的技能,请通过psp表格做到:

a.理清开发的完整环节,争取在每个环节都有实际的工作,一开始边界不清楚是正常的,但请尝试按照自己的理解努力对应每个环节的实际工作

b.预估每个环节的时间,并真实统计这些环节的耗时,在完成后填写完整的psp耗时表

c.这些表格是给自己看的,请不要伪造数据

d.psp表格模板如下,表格里的时间只是示意

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