ATM管理系统

这个作业属于哪个课程 计算机18级
这个作业要求在哪里 ATM管理系统
学号 3180301230

题目要求

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

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

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

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

函数说明

账户结构体

typedef struct									//定义账户结构体
{
	int id;
	int password;
	float money;
}account;

创建账户

void create(account user[],int n)				//创建账户
{	
	user[n].id = user[n - 1].id + 1;			//自动生成用户卡号
	printf("卡号为:%d
", user[n].id);
	printf("请输入密码:");
	scanf_s("%d", &user[n].password);
	user[n].money = 0;							//初始化存款为0;
}

注销账户

int cancel(account user[], int n)			    //注销账户
{
	int cancelid, cancelpw;
	printf("请输入需要注销的账号:");
	scanf_s("%d", &cancelid);
	for (int i = 0; i <= n + 1; i++)
	{
		if (user[i].id == cancelid)				//寻找需要注销的账户
		{
			for (int j = 0; j != 1;)
			{
				printf("请输入密码:");
				scanf_s("%d", &cancelpw);		//密码匹配
				if (user[i].password == cancelpw)
				{
					user[i].id = 0;				//重置账户状态
					user[i].password = 0;
					user[i].money = 0;
					printf("销户成功!
");
					return 0;
				}
				else
				{
					printf("密码错误!
");				//输错密码提示及反馈
					printf("是否重输密码?Y/N
");
					char flag;
					scanf_s("%c", &flag, 1);
					if (flag == 'n' || flag == 'N') return 1;
				}
			}
		}
	}
}

查询余额

int query(account user[], int n)				//查询余额
{
	int queryid, querypw;
	printf("请输入需要查询余额的账号:");
	scanf_s("%d", &queryid);
	for (int i = 0; i <= n + 1; i++)
	{
		if (user[i].id == queryid)
		{
			for (int j = 0; j != 1;)
			{
				printf("请输入密码:");
				scanf_s("%d", &querypw);
				if (user[i].password == querypw)
				{
					printf("账户的余额为:%f
", user[i].money);
					return 0;
				}
				else
				{
					printf("密码错误!
");
					printf("是否重输密码?Y/N
");
					char flag;
					scanf_s("%c", &flag, 1);
					if (flag == 'n' || flag == 'N') return 1;
				}
			}
		}
	}
}

存款函数

int save(account user[], int n)				//存款函数
{
	int saveid, savepw;
	printf("请输入需要存款的账号:");
	scanf_s("%d", &saveid);
	for (int i = 0; i <= n + 1; i++)
	{
		if (user[i].id == saveid)
		{
			for (int j = 0; j != 1;)
			{
				printf("请输入密码:");
				scanf_s("%d", &savepw);
				if (user[i].password == savepw)
				{
					printf("请输入存款数额:
");
					float addmoney;
					scanf_s("%f", &addmoney);
					user[i].money += addmoney;				//将存入钱款加入存款中
					printf("存款成功!,当前余额为:%f", user[i].money);
					return 0;
				}
				else
				{
					printf("密码错误!
");
					printf("是否重输密码?Y/N
");
					char flag;
					scanf_s("%c", &flag, 1);
					if (flag == 'n' || flag == 'N') return 1;
				}
			}
		}
	}
}

取款函数

int draw(account user[], int n)							//取款函数
{
	int drawid, drawpw;
	printf("请输入需要取款的账号:");
	scanf_s("%d", &drawid);
	for (int i = 0; i <= n + 1; i++)
	{
		if (user[i].id == drawid)
		{
			for (int j = 0; j != 1;)
			{
				printf("请输入密码:");
				scanf_s("%d", &drawpw);
				if (user[i].password == drawpw)
				{
					printf("请输入取款数额:
");
					float addmoney;
					scanf_s("%f", &addmoney);
					user[i].money -= addmoney;				//将存款中的取款金额减去
					printf("取款成功!,当前余额为:%f", user[i].money);
					return 0;
				}
				else
				{
					printf("密码错误!
");
					printf("是否重输密码?Y/N
");
					char flag;
					scanf_s("%c", &flag,1);
					if (flag == 'n' || flag == 'N') return 1;
				}
			}
		}
	}
}

转存钱款

int transfer(account user[], int n)							//转存钱款
{
	int transferid1, transferid2,transferpw;
	printf("请输入需要取款的账号:");
	scanf_s("%d", &transferid1);
	for (int i = 0; i <= n + 1; i++)
	{
		if (user[i].id == transferid1)
		{
			for (int j = 0; j != 1;)
			{
				printf("请输入密码:");
				scanf_s("%d", &transferpw);
				if (user[i].password == transferpw)
				{
					printf("请输入所要转入的账户卡号:
");
					scanf_s("%d", &transferid2);
					printf("请输入转入数额:
");
					float tranmoney;
					scanf_s("%f", &tranmoney);
					user[i].money -= tranmoney;
					for (int k = 0; k <= n + 1; k++)				//寻找被转入账户
					{
						if (user[k].id == transferid2)
						{
							user[k].money += tranmoney;
							k = n + 2;
						}
					}
					printf("转钱成功!,当前账户余额为:%f", user[i].money);
					return 0;
				}
				else
				{
					printf("密码错误!
");
					printf("是否重输密码?Y/N
");
					char flag;
					scanf_s("%c", &flag, 1);
					if (flag == 'n' || flag == 'N') return 1;
				}
			}
		}
	}
}

主函数

int main()
{
	int n = 1,choose;
	account user[100];
	user[0].id = 1000000;				//初始化第一个账户
	user[0].password = 0;
	user[0].money = 0;
	int end = 0;					 //是否结束,0记为不结束
	do {
		printf("请选择您需要进行的操作:
1.开户	2.销户
3.查询当前余额
4.存款	5.取款
6.转账	0.退出
");
		scanf_s("%d", &choose);
		switch (choose)
		{
		case 0:
			exit(0);
		case 1:
			create(user, n); n++; break;
		case 2:
			if (cancel(user, n) == 0) {
				n--; break;			//n相当于指针,此处能让下次开户正常进行
			}
			else n++; break;
		case 3:
			query(user, n); n++; break;
		case 4:
			save(user, n); n++; break;
		case 5:
			draw(user, n); n++; break;
		case 6:
			transfer(user, n); n++; break;
		default:
			break;
		}printf("请问您是否需要继续进行其他操作?输入1继续进行其他操作,输入0则退出
");
		scanf_s("%d", &end);
		if (end == 1)system("cls");
	} while (end);
}

运行截图

小结

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

源码

#include <iostream>
#include <vector>
typedef struct									//定义账户结构体
{
	int id;
	int password;
	float money;
}account;
void create(account user[],int n)				//创建账户
{	
	user[n].id = user[n - 1].id + 1;			//自动生成用户卡号
	printf("卡号为:%d
", user[n].id);
	printf("请输入密码:");
	scanf_s("%d", &user[n].password);
	user[n].money = 0;							//初始化存款为0;
}
int cancel(account user[], int n)			    //注销账户
{
	int cancelid, cancelpw;
	printf("请输入需要注销的账号:");
	scanf_s("%d", &cancelid);
	for (int i = 0; i <= n + 1; i++)
	{
		if (user[i].id == cancelid)				//寻找需要注销的账户
		{
			for (int j = 0; j != 1;)
			{
				printf("请输入密码:");
				scanf_s("%d", &cancelpw);		//密码匹配
				if (user[i].password == cancelpw)
				{
					user[i].id = 0;				//重置账户状态
					user[i].password = 0;
					user[i].money = 0;
					printf("销户成功!
");
					return 0;
				}
				else
				{
					printf("密码错误!
");				//输错密码提示及反馈
					printf("是否重输密码?Y/N
");
					char flag;
					scanf_s("%c", &flag, 1);
					if (flag == 'n' || flag == 'N') return 1;
				}
			}
		}
	}
}
int query(account user[], int n)				//查询余额
{
	int queryid, querypw;
	printf("请输入需要查询余额的账号:");
	scanf_s("%d", &queryid);
	for (int i = 0; i <= n + 1; i++)
	{
		if (user[i].id == queryid)
		{
			for (int j = 0; j != 1;)
			{
				printf("请输入密码:");
				scanf_s("%d", &querypw);
				if (user[i].password == querypw)
				{
					printf("账户的余额为:%f
", user[i].money);
					return 0;
				}
				else
				{
					printf("密码错误!
");
					printf("是否重输密码?Y/N
");
					char flag;
					scanf_s("%c", &flag, 1);
					if (flag == 'n' || flag == 'N') return 1;
				}
			}
		}
	}
}
int save(account user[], int n)				//存款函数
{
	int saveid, savepw;
	printf("请输入需要存款的账号:");
	scanf_s("%d", &saveid);
	for (int i = 0; i <= n + 1; i++)
	{
		if (user[i].id == saveid)
		{
			for (int j = 0; j != 1;)
			{
				printf("请输入密码:");
				scanf_s("%d", &savepw);
				if (user[i].password == savepw)
				{
					printf("请输入存款数额:
");
					float addmoney;
					scanf_s("%f", &addmoney);
					user[i].money += addmoney;				//将存入钱款加入存款中
					printf("存款成功!,当前余额为:%f", user[i].money);
					return 0;
				}
				else
				{
					printf("密码错误!
");
					printf("是否重输密码?Y/N
");
					char flag;
					scanf_s("%c", &flag, 1);
					if (flag == 'n' || flag == 'N') return 1;
				}
			}
		}
	}
}
int draw(account user[], int n)							//取款函数
{
	int drawid, drawpw;
	printf("请输入需要取款的账号:");
	scanf_s("%d", &drawid);
	for (int i = 0; i <= n + 1; i++)
	{
		if (user[i].id == drawid)
		{
			for (int j = 0; j != 1;)
			{
				printf("请输入密码:");
				scanf_s("%d", &drawpw);
				if (user[i].password == drawpw)
				{
					printf("请输入取款数额:
");
					float addmoney;
					scanf_s("%f", &addmoney);
					user[i].money -= addmoney;				//将存款中的取款金额减去
					printf("取款成功!,当前余额为:%f", user[i].money);
					return 0;
				}
				else
				{
					printf("密码错误!
");
					printf("是否重输密码?Y/N
");
					char flag;
					scanf_s("%c", &flag,1);
					if (flag == 'n' || flag == 'N') return 1;
				}
			}
		}
	}
}
int transfer(account user[], int n)							//转存钱款
{
	int transferid1, transferid2,transferpw;
	printf("请输入需要取款的账号:");
	scanf_s("%d", &transferid1);
	for (int i = 0; i <= n + 1; i++)
	{
		if (user[i].id == transferid1)
		{
			for (int j = 0; j != 1;)
			{
				printf("请输入密码:");
				scanf_s("%d", &transferpw);
				if (user[i].password == transferpw)
				{
					printf("请输入所要转入的账户卡号:
");
					scanf_s("%d", &transferid2);
					printf("请输入转入数额:
");
					float tranmoney;
					scanf_s("%f", &tranmoney);
					user[i].money -= tranmoney;
					for (int k = 0; k <= n + 1; k++)				//寻找被转入账户
					{
						if (user[k].id == transferid2)
						{
							user[k].money += tranmoney;
							k = n + 2;
						}
					}
					printf("转钱成功!,当前账户余额为:%f", user[i].money);
					return 0;
				}
				else
				{
					printf("密码错误!
");
					printf("是否重输密码?Y/N
");
					char flag;
					scanf_s("%c", &flag, 1);
					if (flag == 'n' || flag == 'N') return 1;
				}
			}
		}
	}
}
int main()
{
	int n = 1,choose;
	account user[100];
	user[0].id = 1000000;				//初始化第一个账户
	user[0].password = 0;
	user[0].money = 0;
	int end = 0;					 //是否结束,0记为不结束
	do {
		printf("请选择您需要进行的操作:
1.开户	2.销户
3.查询当前余额
4.存款	5.取款
6.转账	0.退出
");
		scanf_s("%d", &choose);
		switch (choose)
		{
		case 0:
			exit(0);
		case 1:
			create(user, n); n++; break;
		case 2:
			if (cancel(user, n) == 0) {
				n--; break;			//n相当于指针,此处能让下次开户正常进行
			}
			else n++; break;
		case 3:
			query(user, n); n++; break;
		case 4:
			save(user, n); n++; break;
		case 5:
			draw(user, n); n++; break;
		case 6:
			transfer(user, n); n++; break;
		default:
			break;
		}printf("请问您是否需要继续进行其他操作?输入1继续进行其他操作,输入0则退出
");
		scanf_s("%d", &end);
		if (end == 1)system("cls");
	} while (end);
}
原文地址:https://www.cnblogs.com/ebym/p/14003166.html