首页 > 其他分享 >ATM

ATM

时间:2023-09-02 22:03:48浏览次数:23  
标签:account NodeList pNewNode money ATM char printf

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

//个人信息
typedef struct Person {
	char name[20];
	char account[20];
	char password[8];
	float money;
} Person;

typedef struct Node {
	Person p;
	struct Node *next;
} Node, *NodeList;

NodeList head = NULL;

//开函数
void Create_account() {
	NodeList pNewNode = (NodeList)malloc(sizeof(Node));
	pNewNode->next = NULL;
	pNewNode->p.money = 0.0;

	printf("请输入你的姓名,账号和密码\n");
	scanf("%s", pNewNode->p.name);
	scanf("%s", pNewNode->p.account);
	scanf("%s", pNewNode->p.password);

	if (head == NULL)
		head = pNewNode;
	else {
		NodeList p = head;
		while (p->next != NULL)
			p = p->next;
		p->next = pNewNode;
	}
	printf("你的账号信息如下\n");
	printf("\t姓名:%s\n", pNewNode->p.name);
	printf("\t账号:%s\n", pNewNode->p.account);
	printf("\t钱款:%f\n", pNewNode->p.money);
	printf("恭喜你开成功!!!\n");
	printf("---------------------------------\n");
	printf("|\t 1.开\t|\t 2.登录\t|\n");
	printf("|\t 3.退出\t|\n");
	printf("---------------------------------\n");
	getchar();
}

//登录函数
int Login(char *account, char *password) {
	NodeList p = head;
	while (p != NULL) {
		if (strcmp(p->p.account, account) == 0 && strcmp(p->p.password, password) == 0)
			return 1;
		p = p->next;
	}
	return 0;
}

//存款函数
void Cun_money(char *account, float money) {
	NodeList p = head;
	while (p != NULL) {
		if (strcmp(p->p.account, account) == 0) {
			p->p.money += money;
			printf("存款成功,当前余额为%.2f\n", p->p.money);
			return;
		}
		p = p->next;
	}
}

//取款函数
void Qu_money(char *account, float money) {
	NodeList p = head;
	while (p != NULL) {
		if (strcmp(p->p.account, account) == 0) {
			if (p->p.money < money)
				printf("余额不足,取款失败\n");
			else {
				p->p.money -= money;
				printf("取款成功,当前余额为%.2f\n", p->p.money);
			}
			return;
		}
		p = p->next;
	}
}

//显示账户信息函数
void Display(char *account) {
	NodeList p = head;
	while (p != NULL) {
		if (strcmp(p->p.account, account) == 0) {
			printf("姓名:%s\n", p->p.name);
			printf("账号:%s\n", p->p.account);
			printf("余额:%.2f\n", p->p.money);
			return;
		}
		p = p->next;
	}
}

int main() {
	printf("****************************************\n");
	printf("**********欢迎使用ATM存取系统***********\n");
	printf("****************************************\n");
	printf("---------------------------------\n");
	printf("|\t 1.户\t|\t 2.登录\t|\n");
	printf("|\t 3.退出\t|\n");
	printf("---------------------------------\n");
	while (1) {


		char ch = getchar();
		getchar();
		switch (ch) {
			case '1':
				Create_account();
				break;
			case '2': {
				char Account[20], Password[8];
				printf("请输入账号和密码\n");
				scanf("%s", Account);
				scanf("%s", Password);
				getchar();
				if (Login(Account, Password)) {
					printf("登录成功\n");
					printf("-------------------------------------------------\n");
					printf("| 1.存款\t| 2.取款\t| 3.查询\t| 4.退出 |\n");
					printf("-------------------------------------------------\n");
					while (1) {
						char op = getchar();
						if (op == '1') {
							float money;
							printf("请输入存款金额\n");
							scanf("%f", &money);
							Cun_money(Account, money);
							printf("-------------------------------------------------\n");
							printf("| 1.存款\t| 2.取款\t| 3.查询\t| 4.退出 |\n");
							printf("-------------------------------------------------\n");
							continue;
						} else if (op == '2') {
							float money;
							printf("请输入取款金额\n");
							scanf("%f", &money);
							Qu_money(Account, money);
							printf("-------------------------------------------------\n");
							printf("| 1.存款\t| 2.取款\t| 3.查询\t| 4.退出 |\n");
							printf("-------------------------------------------------\n");
							continue;
						} else if (op == '3') {
							Display(Account);
							printf("-------------------------------------------------\n");
							printf("| 1.存款\t| 2.取款\t| 3.查询\t| 4.退出 |\n");
							printf("-------------------------------------------------\n");
							continue;
						}

						else if (op == '4') {
							system("CLS");
							printf("****************************************\n");
							printf("**********欢迎使用ATM存取系统***********\n");
							printf("****************************************\n");
							getchar();
							break;
						}
					}

				} else
					printf("账号或密码错误\n");
				printf("---------------------------------\n");
				printf("|\t 1.户\t|\t 2.登录\t|\n");
				printf("|\t 3.退出\t|\n");
				printf("---------------------------------\n");
			}
			break;
			case '3':
				printf("谢谢使用!\n");
				exit(0);

				break;
		}
	}
}

标签:account,NodeList,pNewNode,money,ATM,char,printf
From: https://blog.51cto.com/u_16030624/7334983

相关文章

  • Swift - 高阶函数介绍(map、flatMap、filter、reduce)
     Swift-高阶函数介绍(map、flatMap、filter、reduce)https://blog.csdn.net/Alexander_Wei/article/details/78543410?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-78543410-blog-127072873.235%5Ev38%5Epc_r......
  • 绘制heatmap(热力图)
    什么是heatmap?热力图在实际中常用于展示一组变量的相关系数矩阵,在展示列联表的数据分布上也有较大的用途,通过热力图我们可以非常直观地感受到数值大小的差异状况。如何绘制heatmap图1.使用matplotlib库绘制2.使用seaborn库绘制简单暴力,直接使用sns.heatmap().详细可查......
  • [宿舍管理模块】的催起事件的热力图(heatmap)设计
    授课老师可以上午第一节开始时或下午第一节开始时,通过平台[教学课堂管理]发起一个可选的催起消息,此消息可以可以发至班主任或宿管或特殊管理员,最好由宿管去完成这个催起任务,班主任也许正在授课,会出现冲突。当宿管通过平台的[宿舍管理模块]接收到他所负责的宿舍的多个班级多个......
  • DevExpress WPF HeatMap组件,一个高度可自定义的热图控件!
    像所有DevExpress UI组件一样,HeatMap组件针对速度进行了优化,包括数十个自定义设置和高级API,因此用户可以快速将美观的数据可视化集成到下一个WPF应用程序中。P.S:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创......
  • Linux下使用消息队实现 ATM 自动取款机功能
    Linux下使用消息队实现ATM自动取款机功能要求功能:        (1)创建账户(2)存款(3)取款(4)查询(5)转账(6)退出(7)销户用到的知识点:   文件操作--创建账户的时候要把用户名,密码,余额,银行卡号。。。。(每个银行卡号单独存放一个文件)创建父子进程进程通信----消息队列模块化编程项目分......
  • ATM系统-Java
    Account.javapackageATMSystem;publicclassAccount{privateStringuserName;privateStringcardId;privatecharsex;privateStringpassWord;privatedoublemoney;privatedoublelimit;publicAccount(StringuserName,Str......
  • 【Python】PySpark 数据计算 ② ( RDD#flatMap 方法 | RDD#flatMap 语法 | 代码示例 )
    文章目录一、RDD#flatMap方法1、RDD#flatMap方法引入2、解除嵌套3、RDD#flatMap语法说明二、代码示例-RDD#flatMap方法一、RDD#flatMap方法1、RDD#flatMap方法引入RDD#map方法可以将RDD中的数据元素逐个进行处理,处理的逻辑需要用外部通过参数传入map函数......
  • #yyds干货盘点#map()和flatMap()的区别?
    在Java8中,map()和flatMap()是StreamAPI中的两个常用方法,用于对流中的元素进行转换操作。它们的主要区别在于它们的返回类型和转换方式。map()方法:map()方法将流中的每个元素都映射到另一个对象。它接收一个函数作为参数,该函数将当前流中的每个元素转换为另一个对象。map()方法的......
  • 解决 heatmap.js 'Cannot assign to read only property 'data' of object' 问题与 p
    一、问题背景问题是这样发生的,因为项目中需要实现热力图的功能,所以使用了第三方的库heatmap.js。但是在一些浏览器中使用它时,会出现这个错误:>UncaughtTypeError:Cannotassigntoreadonlyproperty'data'ofobject'#<ImageData>'出现问题的原因是因为img.data=im......
  • Flux中的map、flatMap、concatMap的区别
    flatMap、map和concatMap都是在Flux中用于进行数据转换和处理的方法,但它们在处理元素和顺序上有一些区别:map方法:map方法用于对Flux中的每个元素进行一对一的转换。对于每个元素,map方法都会应用一个转换函数,并将转换后的结果作为新的元素放入新的Flux中。转换函数的返回值......