C语言实现ATM系统程序的完整代码
- 作者: 老湿kfG
- 来源: 51数据库
- 2021-08-29
实现效果如图:

代码如下:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
//开户信息
typedef struct _person
{
char name[20];
char account[20];
char password[7];
float money;
}person;
//结点
typedef struct _node
{
person p; //客户
struct _node* next;
}node;
node* headnode = null;//链表头
/*----------------函数--------------------*/
void login();
void menu();
void register();
void loginmenu(node* pnode);
void findaccount(node* pnode);
void drawmoney(node* pnode);
void deposit(node* pnode);
void transfer(node* pnode);
void loginmenu(node* pnode);
//主菜单
void menu()
{
printf("\n\t\t\t欢迎进入atm银行管理系统\n");
printf("\t\t 1. 注册\n");
printf("\t\t 2. 登录\n");
printf("\t\t 3. 系统帮助\n");
printf("\t\t 4. 查询账号\n");
printf("\t\t 5. 退出\n");
}
//注册
void register()
{
node* newnode = (node*)malloc(sizeof(node));
newnode->next = null;
newnode->p.money = 0;
printf("请输入您的名字:");
scanf("%s", newnode->p.name);
printf("请输入您的密码:");
scanf("%s", newnode->p.password);
char password[7];
printf("请再次输入您的密码:");
scanf("%s", password);
for (int i = 1; i < 4; i++)
{
if (strcmp(newnode->p.password, password) != 0)
{
printf("您输入的密码有误,还有%d次机会.\n", 3 - i);
printf("请再次输入您的密码:");
scanf("%s", password);
}
else
{
srand((unsigned int)time(null));
sprintf(newnode->p.account, "%d%d%d%d%d", rand() % 9000 + 1000, rand() % 9000 + 1000,
rand() % 9000 + 1000, rand() % 9000 + 1000, rand() % 900 + 100);
//头插法
if (headnode == null)
{
headnode = newnode;
}
else
{
newnode->next = headnode;
headnode = newnode;
}
printf("\n\n\n\n\t\t\t\t恭喜你已经成功注册账户,以下是您的账户信息.\n");
printf("\t\t\t\t姓名:%s\n", newnode->p.name);
printf("\t\t\t\t账户:%s\n", newnode->p.account);
printf("\t\t\t\t余额:%.2f\n", newnode->p.money);
getch();
return 1;
}
}
printf("您的账号已被锁定,请稍后再试.");
return 1;
}
//取款
void drawmoney(node* pnode)
{
node* mnode = pnode;
float money = 0;
printf("欢迎进入atm银行管理系统\n");
printf("请选择你取款金额\n");
printf("100\t\t2000\n");
printf("500\t\t5000\n");
printf("10000\t\t其他金额\n");
scanf("%f", &money);
mnode->p.money = mnode->p.money - money;
return mnode;
}
//存款
void deposit(node* pnode)
{
node* mnode = pnode;
float money = 0;
printf("请存取您的金额:");
scanf("%f", &money);
mnode->p.money = mnode->p.money + money;
return mnode;
}
//转账
void transfer(node* pnode)
{
node* tnode = headnode;
char account[20];
printf("请输入转账的号码:");
scanf("%s", account);
while (tnode != null)
{
if (strcmp(tnode->p.account, account) != 0)
{
tnode = tnode->next;
continue;
}
else
{
float money = 0;
printf("请输入您要转账的金额:");
printf("100\t\t2000\n");
printf("500\t\t5000\n");
printf("10000\t\t其他金额\n");
scanf("%f", &money);
tnode->p.money = tnode->p.money + money;
pnode->p.money = pnode->p.money - money;
return 1;
}
}
return 1;
}
//登录菜单
void loginmenu(node * pnode)
{
while (1)
{
printf("欢迎进入atm银行管理系统\n");
printf("请选择以下服务:\n");
printf("1.取款\t\t2.查询\n");
printf("3.存款\t\t4.转账\n");
printf("5.修改密码\t6.退出\n");
char ch = getch();
switch (ch)
{
case '1':
drawmoney(pnode);
break;
case '2':
printf("您的账户余额为:%.2f", pnode->p.money);
getch();
break;
case '3':
deposit(pnode);
break;
case '4':
transfer(pnode);
break;
case '5':
break;
case '6':
return 0;
break;
default:
break;
}
system("cls");
}
}
//登录
void login()
{
system("cls");
node* pnode = headnode;
char p_account[20];
char p_password[7];
printf("请输入您的卡号:");
scanf("%s", p_account);
while (pnode != null)
{
if (strcmp(p_account,pnode->p.account) != 0)
{
pnode = pnode->next;
continue;
}
else
{
for (int i = 1; i < 4; i++)
{
printf("请输入您的密码:");
scanf("%s", p_password);
if (strcmp(p_password, pnode->p.password) != 0)
{
printf("您输入的密码有误,还有%d次机会.\n", 3 - i);
}
else
{
system("cls");
loginmenu(pnode);
return 1;
}
}
printf("\n对不起,您输入的密码有误,请重新登录.\n");
system("pause");
return 1;
}
}
return 1;
}
//系统帮助信息
void help()
{
system("cls");
printf( "\n\n\n\n\t——————————-----—---——atm系统帮助----------------------------------------\n"
"\t1、初始界面:客户插卡前或者退卡后atm显示的界面,提示客户插卡操作及银行广告.\n"
"\t2、身份认证:需要客户插入银行卡后输入密码来验证所有权.\n"
"\t3、吞卡:客服若连续输入密码3次错误后,则将卡吞入atm内.\n"
"\t4、账户:账户由银行卡的卡号、密码、银行系统用户信息组成.\n"
"\t5、业务操作:由查询余额、取款、存款、转账、取卡等事项组成.\n"
"\t6、查询余额:显示该账户中剩余金额.\n"
"\t7、取款:根据客户输入的金额从账户中扣除相应的金额,客户可以提取相应数额的现金.\n"
"\t8、存款:客户存入现金,账户根据现金数额增加剩余金额.\n"
"\t9、转账:客户输入另外一个账户号码和金额,从本账户的余额中减去该金额,增加到那个账号中.\n"
"\t10、打印凭条:凭条由日期,银行卡的卡号,交易流水号组成.\n"
"\t11、取卡:客户取回银行卡.\n"
"\t————————————————-------------------------------------------------------\n"
);
getch();
return 1;
}
//查询账号
void findaccount(node* pnode)
{
node* fnode = pnode;
char accountname[7];
printf("请输入账号姓名:");
scanf("%s", accountname);
while (fnode != null)
{
if (strcmp(accountname, fnode->p.name) != 0)
{
fnode = fnode->next;
continue;
}
else
{
printf("该姓名的账户为:%s", fnode->p.account);
return 1;
}
}
printf("抱歉!该姓名未注册账号.");
return 1;
}
int main()
{
system("color b0");
while (1)
{
system("cls");
menu();
char ch = _getch();
switch (ch)
{
case '1':
register();
break;
case '2':
login();
break;
case '3':
help();
break;
case '4':
findaccount(headnode);
getch();
break;
case '5':
exit(0);
default:
break;
}
}
return 0;
}
到此这篇关于c语言实现atm系统程序的完整代码的文章就介绍到这了,更多相关c语言atm系统程序内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
