ATM管理系统

博客班级 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18
作业要求 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11478
作业目标 能编写一个基本的ATM管理系统
学号 3180701329
一.题目要求

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

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

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

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

二、代码提交与运行截图

2.1 代码运行

(1)头文件

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

(2)结构体与全局变量

struct users
{
  char name[20];//用户名
  char pass[7];//密码
  int account;//账号
  float money;//余额
}user[100];
int count=0;
int account=10000;
int find;
int dFind;
int isLogout=0;

(3)从文件中读出数据

void read()
{	
	FILE *fp;
	fp=fopen("baocun.txt", "r");    //打开文件
	while(feof(fp)==0)
	{
		fscanf(fp,"%s%s%d%ld
",&user[count].name,&user[count].pass,&user[count].account,&user[count].money);//读入文件
		count++;
		account++;
	}
	fclose(fp);    //关闭文件
}

(4)将文件写入文件中

void write()
{	
	FILE *fp;
	fp=fopen("baocun.txt", "w");    //打开文件
	fprintf(fp, "%s %s %d %ld
",user[count].name,user[count].pass,user[count].account,user[count].money);//写入文件
	fclose(fp);    //关闭文件
}

(5)开户

void regist()
{
	int length;
	char rePass[7];
	printf("请输入用户名:
");
	//要使用一个字符串接收输入的用户名
	fflush(stdin);//刷新字符缓冲区
	gets(user[count].name);//读取字符串,回车结束
	while(1)
	{
		while(1)
		{
			printf("请输入密码:
");
			fflush(stdin);//清空输入缓冲区
			inputPass(user[count].pass);
			length=strlen(user[count].pass);//计算字符串长度,其返回值是一个整数
			if(length==6)
			{
				break;
			}
			else
			{
				printf("密码输入有误!请输入6位密码
");
			}
		}
		printf("请再次输入密码:
");
		inputPass(rePass);
		if(strcmp(rePass,user[count].pass)==0)
		{
			break;
		}
		else
		{
			printf("两次密码输入不一致,请重新输入
");
		}
	}
	account=account+1;
    user[count].account=account;
	user[count].money=0;
	write();
	printf("注册成功
");
	printf("您的账号为:%d
",user[count].account);
	if(count>=1)
	{
		printf("前一个注册的账号为:%d
",user[count-1].account);
	}
	count++;
}

(6)销户

void logout()
{
	char confirm;//confirm 确认
	printf("您正在使用注销功能
");
	printf("%d确认注销?
",user[find].account);
	printf("Y表示确定,其它字符表示取消
");
	scanf("%c",&confirm);
	if(confirm=='y'||confirm=='Y')
	{
		printf("正在注销%d
",user[find].account);
		isLogout=1;
	}else
	{
		printf("取消注销帐号%d,返回服务界面
",user[find].account);
		isLogout=0;
	}
}

(7)查询账户余额

void selectMoney()
{	
	printf("您正在使用查询余额功能
");
	printf("您的账户余额为:%lf
",user[find].money);
}

(8)存款

void saveMoney()
{
	int RMB;
	printf("您正在使用存款功能
");
	printf("请输入存款金额:
");
	scanf("%d",&RMB);
	user[find].money=user[find].money+RMB;
	printf("存款成功
");
}

(9)取款

void getMoney()
{
	int RMB;
	printf("您正在使用取款功能
");
	printf("请输入取款金额:
");
	scanf("%d",&RMB);
	if(user[find].money>=RMB)
	{
		user[find].money=user[find].money-RMB;
		printf("取款成功
");
	}
	else
	{
			printf("余额不足
");
	}
}

(10)转账

void transferMoney()
{
	int i,username;//账号
	int isFind=0;
	int RMB;//转账金额		
	printf("您正在使用转账功能
");
	printf("请输入对方的帐号:
");
	scanf("%d",&username);
	for(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("目标帐号不存在
");
	}
}

(11)登录

void login()
{
	int zhanghao;
	int sign=0;
	int i,j,find;
	char loginPassword[7];
	//提示 请输入账号
	read();
	printf("请输入帐号:
");
	//获取输入的账号 
	scanf("%d",&zhanghao);
	//将输入的账号与用户数组里的每一位用户的帐号进行对比
	for(i=0;i<count;i++)
	{
		if(zhanghao==user[i].account)
		{
			sign=1;//将F标记设置为1
			find=i;
			break;
		}
	}
	//如果匹配到了,提示请输入密码
	if(sign==1)
	{
	
		for(j=1;j<=3;j++)
		{
			printf("请输入密码:
");
			inputPass(loginPassword);
			if(strcmp(loginPassword,user[find].pass)==0)
			{
					printf("登陆成功
");
					printf("			进入服务界面
");
					service();
					break;
			}
			else
			{
				if(j==3)
				{
					printf("密码三次输入错误,已锁定
!");
					break;
				}
				printf("密码错误,请重新输入!
");
			}
		}
		
	}
	else
	{
		printf("账号错误
");
	}
}

(12)服务界面

void service()
{
	int choise;
	while(1)
	{	
		printf("	1、查询余额	");
		printf("	2、存款    	");
		printf("	3、取款    
");
		printf("	4、转账    	");
		printf("	6、注销    	");
		printf("	7、退出系统
");
		printf("请选择:");
		scanf("%d",&choise);
		switch(choise)
		{
			case 1:
				selectMoney();break;//查询余额
			case 2:
				saveMoney();break;//存款
			case 3:
				getMoney();break;//取款
			case 4:
				transferMoney();break;//转账
			case 6:
				logout();
				if(isLogout==1)
				{
					return;//直接结束所处函数
				}
				break;//注销
			case 7:
				break;return;//退出系统
			default:
				printf("您的输入有误,请重新输入!
");
		}
	}
}
                printf("				1.用户注册
");
		printf("				2.用户登录
");
		printf("				3.退出系统
");
		printf("				请选择:");
		scanf("%d",&a);
		if(a==1)
		{
			//执行注册函数
			regist();
			//printf("

		执行注册");
		}
		else if(a==2)
		{
			//执行登录函数
			login();
			//printf("

		执行登录");
		}
		else if(a==3)
		{
			  //quit();
			printf("执行退出
");
			break;
		}
		else
		{
			printf("输入有误,请重新输入!");
		}

(13)主函数

void main()
{
	int a;
	printf("			欢迎进入ATM银行管理系统
");
	while(1)
	{
		printf("				1.用户注册
");
		printf("				2.用户登录
");
		printf("				3.退出系统
");
		printf("				请选择:");
		scanf("%d",&a);
		if(a==1)
		{
			//执行注册函数
			regist();
			//printf("

		执行注册");
		}
		else if(a==2)
		{
			//执行登录函数
			login();
			//printf("

		执行登录");
		}
		else if(a==3)
		{
			  //quit();
			printf("执行退出
");
			break;
		}
		else
		{
			printf("输入有误,请重新输入!");
		}
		printf("按任意键继续...
");
		getch();
	}
}

2.2 运行截图

(1)用户信息文件

(2)查询余额

(3)存款

(4)取款

(5)转账

(6)开户

(7)销户

(8)登录

(9)退出系统

三、个人小结

(1).psp表格

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

2)当你完成所有工作,你可以把你遇到的问题,如何解决变成经验与大家分享,共同进步

在这次作业之前,文件的读写对我来说是陌生的,通过这次作业,我基本掌握了文件的读写操作。

原文地址:https://www.cnblogs.com/zhangkai1/p/13953053.html