ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

3

2020-11-19 09:02:02  阅读:275  来源: 互联网

标签: Node int system pNode printf fMoney


一、作业信息

博客班级 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18
作业要求 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11478
作业要求 设计一个ATM管理系统
学号 3180701136 曹宇
二、题目要求
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

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

三、代码与运行截图

头文件

、、、

include<stdio.h>

include<stdlib.h>

include<conio.h>

include<string.h>

include<time.h>

、、、
定义

typedef struct tagPerson{
char szUsername[20];//用户名
char szPassword[7];//密码
char szAccountNumber[20];//银行账户
float fMoney;//余额
}Person;

typedef struct tagNode{
Person per;//数据域
struct tagNode *pNext;//指针域
}Node;
Node *g_pHead=NULL;//链表头结点

//开户 int CreateAccount();
//登录 int Login();
//销户 int CancelAccount();
//菜单 void Menu(Node *pNode);
//取款 int WithDrawal(Node *pNode);
//存款 int Deposits(Node *pNode);
//转账 int TransFer(Node *pNode);
//修改密码 int ChangePa(Node *pNode);
//查找 int find(Node *pNode);
开户、销户

int CreateAccount(){
printf("\n\t\t\t\t\t请输入您的姓名:");
char szUsername[20];
scanf("%s",szUsername);//szUsername指针 地址

printf("\n\t\t\t\t\t请设置您的银行卡密码:"); 
char szPassword[7];
scanf("%s",szPassword);

printf("\n\t\t\t\t\t请再次输入您的银行卡密码:"); 
char szRePassword[7];
scanf("%s",szRePassword);

//判断两次输入的密码是否一致 
if(strcmp(szPassword,szRePassword)!=0){//相同为0,不同不为0 
	printf("\n\t\t\t\t\t两次输入的密码不一致!\n");
	return 0;
}

//随机生成银行账号
char szAccountNum[20];//0000 0000 0000 0000 0 0
//1000~9999
srand((unsigned int)time(NULL));
sprintf(szAccountNum,"%d%d%d%d%d%d",rand()%9000+1000,
				rand()%9000+1000,rand()%9000+1000,rand()%9000+1000,rand()%10,rand()%10);//sprintf格式化字符串 
	
//循环找到链表的尾结点	
Node *p=g_pHead;
while(g_pHead!=NULL&&p->pNext!=NULL){
	p = p->pNext;
}

//开辟一个新节点 
Node *pNewNode=(Node*)malloc(sizeof(Node));
strcpy(pNewNode->per.szUsername,szUsername);
strcpy(pNewNode->per.szPassword,szPassword);
strcpy(pNewNode->per.szAccountNumber,szAccountNum);
pNewNode->per.fMoney=0.0f;
pNewNode->pNext=NULL;

//添加到尾结点后面
if(g_pHead==NULL){
	g_pHead=pNewNode;
}
else{
	p->pNext=pNewNode; 
}

//打印信息
printf("\n\t\t\t\t\t您的账户信息如下:\n"); 
printf("\n\t\t\t\t\t\t姓名:%s\n",pNewNode->per.szUsername); 
printf("\n\t\t\t\t\t\t卡号:%s\n",pNewNode->per.szAccountNumber); 
printf("\n\t\t\t\t\t\t余额:%0.2f\n",pNewNode->per.fMoney); 

printf("\n\t\t\t\t\t恭喜!账户申请成功!\n");

return 1; 

}

int CancelAccount(){
char Number[20],passWord[7];
printf("\n\t\t\t\t\t请输入所需要注销的账户卡号:");
scanf("%s",Number);

Node *p=g_pHead,*q=g_pHead;
while(p!=NULL){
	if(strcmp(p->per.szAccountNumber,Number)!=0){
		q=p;
		p=p->pNext;
		continue;
	}
	else{
		int i=0;
		for(i=0;i<3;i++){
			printf("\n\t\t\t\t\t请输入所需要注销的账户卡号密码:");
			scanf("%s",passWord);
			if(strcmp(passWord,p->per.szPassword)!=0){
				printf("\n\t\t\t\t\t密码输入错误,请重新输入密码,剩余次数:%d\n",2-i);
				system("pause");
				system("cls");
				continue;
			}
			else{
				q->pNext=p->pNext;
				free(p);
				printf("\n\t\t\t\t\t注销账户成功!\n");``
				return 1;
			}
			printf("\n\t\t\t\t\t注销账户失败!\n");
			return 0;
		}
	}
}
return 1;

}
登录

int Login(){
char szAccountNum[20];//账号
char szPassword[7];//密码

printf("\n\t\t\t\t\t请输入您的卡号:");
scanf("%s",szAccountNum);

//遍历链表寻找当前账号 
Node *p=g_pHead;
while(p!=NULL){
	if(strcmp(p->per.szAccountNumber,szAccountNum)!=0){
		p=p->pNext;
		continue;
	}
	else{
		int i=0;
		for(i=0;i<3;i++){
			printf("\n\t\t\t\t\t请输入您的密码:");
			scanf("%s",szPassword);
			
			if(strcmp(szPassword,p->per.szPassword)!=0){
				printf("\n\t\t\t\t\t密码输入错误,请重新输入密码,剩余次数:%d\n",2-i);
				system("pause");
				system("cls");
				continue;
			}
			else{
				system("cls");
				//进入菜单页面 
				Menu(p);
				
				return 1; 
			}
		}
	}
} 
printf("\n\t\t\t\t\t请输入您的密码:");

return 1;

}
存款、取款

int Deposits(Node *pNode){
float fMoney;
printf("\n\t\t\t\t\t请输入要存款的金额:");
fflush(stdin);
scanf("%f",&fMoney);
while(fMoney<=0){
printf("\n\t\t\t\t\t存款额不能小于等于零,请重新输入!\n");
printf("\n\t\t\t\t\t请输入要存款的金额:");
scanf("%f",&fMoney);
}
pNode->per.fMoney+=fMoney;
printf("\n\t\t\t\t\t您的账户成功存入%.2f元!\n",fMoney);
return 1;
}

int WithDrawal(Node *pNode){
float fMoney;
printf("\n\t\t\t\t\t请输入要取款的金额:");
fflush(stdin);
scanf("%f",&fMoney);
while(fMoney<=0||fMoney>pNode->per.fMoney){
printf("\n\t\t\t\t\t取款额不能小于等于零或者大于余额,请重新输入!\n");
scanf("%f",&fMoney);
}
pNode->per.fMoney-=fMoney;
printf("\n\t\t\t\t\t您的账户成功取出%.2f元!\n",fMoney);
return 1;
}
转账

int TransFer(Node *pNode){
char szAccountNum[20];
float fMoney;
printf("\n\t\t\t\t\t请输入要转入的账户卡号:");
fflush(stdin);
scanf("%s",szAccountNum);

printf("\n\t\t\t\t\t请输入要转入的金额:");
fflush(stdin);
scanf("%f",&fMoney);

//遍历寻找需要转入的账号
Node *p=g_pHead;
while(p!=NULL){
	if(strcmp(p->per.szAccountNumber,szAccountNum)!=0){
		p=p->pNext; 
		continue;
	}
	else{
		pNode->per.fMoney-=fMoney;
		p->per.fMoney+=fMoney;
		printf("\n\t\t\t\t\t转账成功!\n"); 
		return 1; 
	}
}
printf("\n\t\t\t\t\t转出账户不存在!\n");
return 1;	

}
修改密码

int ChangePa(Node *pNode){
char passWord1[7],passWord2[7];
printf("\n\t\t\t\t\t请输入原密码:");
scanf("%s",passWord1);
printf("\n\t\t\t\t\t请输入新密码:");
scanf("%s",passWord2);
for(int i=0;i<3;i++){
if(strcmp(passWord1,pNode->per.szPassword)!=0){
printf("\n\t\t\t\t\t原密码输入错误!还有%d次输入机会,请重新输入:\n",2-i);
scanf("%s",passWord1);
}
else{
strcpy(pNode->per.szPassword,passWord2);
printf("\n\t\t\t\t\t密码修改完成!\n");
return 1;
}
}
return 1;
}
查询

int Find(Node *pNode){
printf("\n\t\t\t\t\t当前账户余额为%.2f\n",pNode->per.fMoney);
return 1;
}
主函数

void Menu(Node *pNode){
char ch;
start:
printf("\n\n\t\t\t\t\t\t\t请选择您需要的业务:\n\n\n");
printf("\n\t\t\t\t\t 1>取款\t\t\t2>查询\n");
printf("\n\t\t\t\t\t 3>转账\t\t\t4>修改密码\n");
printf("\n\t\t\t\t\t 5>存款\t\t\t6>退出\n");

	ch=getch();
	
	switch(ch){
		case '1'://取款
			WithDrawal(pNode); 
			system("pause");
			system("cls"); 
			break;
		case '2'://查询
			Find(pNode); 
			system("pause");
			system("cls");
			break;
		case '3'://转账 
			TransFer(pNode);
			system("pause");
			system("cls");
			break; 
		case '4'://修改密码
			ChangePa(pNode);
			system("pause");
			system("cls");
			break;
		case '5'://存款 
			Deposits(pNode);
			system("pause");
			system("cls");
			break;
		case '6'://退出 
			return;	
	}
	goto start;

}

int main(){

start:
	printf("\n\n\t\t\tATM管理系统\n\n\n");
	
	printf("\t\t\t  1.开户\n");
	printf("\t\t\t  2.登录\n");
	printf("\t\t\t  3.销户\n");
	printf("\t\t\t  4.退出\n");

	char ch = getch();
	switch(ch){
		case '1':
			CreateAccount();
			system("pause");
			system("cls");
			break;
		case '2':
			Login();
			system("pause");
			system("cls");
			break; 
		case '3':
			CancelAccount(); 
			system("pause");
			system("cls");
			break;
		case '4':
			exit(0); 
			break;	
	}
goto start;
return 0;

}

https://www.icode9.com/i/l/?n=20&i=blog/2205429/202011/2205429-20201119005817673-1230074303.png
https://www.icode9.com/i/l/?n=20&i=blog/2205429/202011/2205429-20201119005838323-97096412.png
https://www.icode9.com/i/l/?n=20&i=blog/2205429/202011/2205429-20201119005933472-132693074.png
https://www.icode9.com/i/l/?n=20&i=blog/2205429/202011/2205429-20201119005947782-4033274.pngs个人小结
四.个人小结
在做本次实验报告,有在网上寻求资源,帮助,解决不会的地点。从开时到完成,整个过程用时一个星期,全是自己动手,想如何设计程序,遇到问题百度。本次实验报告把所学的C语言大部分都用上,对C语言程序设计有很大的帮助和提高和自己都C语言熟悉度。在运用C语言编程有所提高

标签:,Node,int,system,pNode,printf,fMoney
来源: https://www.cnblogs.com/621403cy/p/14003398.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有