本人才疏学浅,刚学习c语言不久,也是第一次写博客,以下内容如有不足之处欢迎大家指正。
用c语言实现简易ATM系统:该ATM共10个功能 1,开户 2,存款 3,取款 4,查询 5,转账 6,挂失 7,解挂 8,销户 9,改密 10,退出(全部的代码在最后)
总体思路:通过打印和死循环完成主界面的输出和多次使用,通过函数完成调用各个功能,为了使用函数调用变量我们要进行操作的变量应该全局定义,要实现多个用户操作应当使用数组或者结构体变量来完成全局变量的定义(本代码使用的是结构体变量,只用数组也是可以的),具体功能的实现在之后说明。
主函数(主界面的输出和多次使用):通过键盘对a进行赋值从而选择调用函数,再通过死循环多次调用。
int main()
{
int j=1,a;
for(j=1;j<=10;j++)
{
zh[j].money=0;
zh[j].status=0;
}
printf("欢迎使用本系统\n");
while(control==1)
{
printf("===============================================\n");
printf("请选择你的操作\n");
printf("1,开户 2,存款 3,取款 4,查询 5,转账 \n");
printf("6,挂失 7,解挂 8,销户 9,改密 10,退出\n");
printf("===============================================\n");
printf("选择的操作为:");
scanf_s("%d",&a);
menu(a);
}
return 0;
}
int menu(int a)
{
switch(a)
{
case 1:authoring();;break;
case 2:save_money();break;
case 3:get_money();break;
case 4:inquire();break;
case 5:shift_money();break;
case 6:lose();break;
case 7:undo();break;
case 8:eliminate();break;
case 9:change_password();break;
case 10:close();break;
}
return 0;
}
定义结构体:要实现以上功能一个账号应该有 账号,用户名,秘密,余额,状态这些变量,在这里定义了10个用户zh【10】当然你也可以定义更多。(在这使用的是结构体,当然也可以一个一个定义全局变量的数组,在这使用结构体可以使程序更可读)
typedef struct
{
int account; //账号
char username[10]; //用户名
int password; //密码
double money; //钱
int status; //状态:0正常 1挂失 2销户
}Account;
Account zh[10]; //创建10个用户
定义其它变量和函数:控制结束的变量是死循环的条件,通过函数void close改变它的值就可以结束死循环达到关闭的目的。控制顺序的变量是为了进行操作时能够找到相对应的变量,既用它来找到要进行操作的数组或是结构体。确认用的密码只在开户功能中使用所以单独定义。在这10个功能中需要多次判断用户名的存在和状态,所以单独写2个函数完成这2个功能方便使用。
#include<stdio.h>
int control=1; //控制结束的变量
int order=1; //控制顺序的变量
int confirmpassword[10]; //确认用的密码
int menu(int a); //菜单
void authoring(); //创建用户
void save_money(); //存钱
void get_money(); //取钱
void inquire(); //查询
void shift_money(); //转账
void lose(); //挂失
void undo(); //解挂
void eliminate(); //销户
void change_password(); //改密
void close(); //退出
int judge_exist(int a); //判断用户名存在 输入用户名,若存在返回用户名的值,若不存在输出提示并返回0
int judge_status(int a); //判断用户状态 输入用户名,若正常返回0,若挂失返回1并提示,若冻结返回2并提示
具体功能的实现:在这里就不具体说明10个功能的实现了,选取其中最具代表的3个功能进行说明,其它功能的实现的方法与其类似。在主函数中已经对每个用户的钱和状态都进行了定义。钱都为0,状态也都为0既都正常。
开户功能 函数 void authoring() :每一次开户都对一个用户的账号赋值,每完成一次就使order自加使下次调用函数时能对下一个用户的账号赋值。
void authoring()
{
zh[order].account=1000+order;
printf("正在开户.....\n");
printf("账号:%d\n",zh[order].account);
printf("输入户主姓名:");
scanf_s("%s",&zh[order].username);
printf("请输入密码:");
scanf_s("%d",&zh[order].password);
printf("请再次确认密码:");
scanf_s("%d",&confirmpassword[order]);
if(zh[order].password==confirmpassword[order])
{
printf("开户成功!\n\n");
order++;
}
else
{
printf("密码不一致开户失败\n\n");
zh[order].password=0;
confirmpassword[order]=0;
}
}
转账功能 void shift_money() 该函数是本代码中最复杂的,通过if语句对进行的赋值进行判断若正确进行相关操作,若不正确进行提示并返回,通过多次if判断一步步完成。由于转账系统涉及2个用户所以进行了较多次判断。
void shift_money()
{
int exist2,status2,account2,password2,order2,account3,exist3,order3,status3;
double money2;
printf("请输入你的账号:");
scanf_s("%d",&account2);
exist2=judge_exist(account2);
if(exist2!=0)
{
order2=account2-1000;
status2=judge_status(zh[order2].status);
if(status2==0)
{
printf("请输入密码:");
scanf_s("%d",&password2);
if(password2==zh[order2].password)
{
printf("户主姓名:%s\n",zh[order2].username);
printf("请输入转账账号:");
scanf_s("%d",&account3);
exist3=judge_exist(account3);
if(exist3!=0)
{
order3=account3-1000;
status3=judge_status(zh[order3].status);
if(status3==0)
{
printf("请输入你要转账的金额:");
scanf_s("%lf",&money2);
zh[order2].money=zh[order2].money-money2;
zh[order3].money=zh[order3].money+money2;
if(zh[order2].money>=0)
{
printf("转账成功,你的余额为%lf\n\n",zh[order2].money);
}
else
{
printf("余额不足,转账失败\n\n");
zh[order2].money=zh[order2].money+money2;
zh[order3].money=zh[order3].money-money2;
}
}
}
}
else
{
printf("密码错误\n\n");
}
}
}
}
销户功能:void eliminate() 简单的判断和对变量修改这里改的是账号,挂失,解挂,改密,和这差不多只是修改的变量不同。
void eliminate()
{
int exist2,account2,password2,order2;
printf("请输入你的账号:");
scanf_s("%d",&account2);
exist2=judge_exist(account2);
if(exist2!=0)
{
order2=account2-1000;
printf("请输入密码:");
scanf_s("%d",&password2);
if(password2==zh[order2].password)
{
printf("销户成功\n\n");
zh[order2].account=0;
}
else
{
printf("密码错误\n\n");
}
}
}
原代码:
#include<stdio.h>
int control=1; //控制结束的变量
int order=1; //控制顺序的变量
int confirmpassword[10]; //确认用的密码
int menu(int a); //菜单
void authoring(); //创建用户
void save_money(); //存钱
void get_money(); //取钱
void inquire(); //查询
void shift_money(); //转账
void lose(); //挂失
void undo(); //解挂
void eliminate(); //销户
void change_password(); //改密
void close(); //退出
int judge_exist(int a); //判断用户名存在 输入用户名,若存在返回用户名的值,若不存在输出提示并返回0
int judge_status(int a); //判断用户状态 输入用户名,若正常返回0,若挂失返回1并提示,若冻结返回2并提示
typedef struct
{
int account; //账号
char username[10]; //用户名
int password; //密码
double money; //钱
int status; //状态:0正常 1挂失 2销户
}Account;
Account zh[10]; //创建10个用户
int main()
{
int j=1,a;
for(j=1;j<=10;j++)
{
zh[j].money=0;
zh[j].status=0;
}
printf("欢迎来到旭日银行\n");
while(control==1)
{
printf("===============================================\n");
printf("请选择你的操作\n");
printf("1,开户 2,存款 3,取款 4,查询 5,转账 \n");
printf("6,挂失 7,解挂 8,销户 9,改密 10,退出\n");
printf("===============================================\n");
printf("选择的操作为:");
scanf_s("%d",&a);
menu(a);
}
return 0;
}
int menu(int a)
{
switch(a)
{
case 1:authoring();;break;
case 2:save_money();break;
case 3:get_money();break;
case 4:inquire();break;
case 5:shift_money();break;
case 6:lose();break;
case 7:undo();break;
case 8:eliminate();break;
case 9:change_password();break;
case 10:close();break;
}
return 0;
}
void authoring()
{
zh[order].account=1000+order;
printf("正在开户.....\n");
printf("账号:%d\n",zh[order].account);
printf("输入户主姓名:");
scanf_s("%s",&zh[order].username);
printf("请输入密码:");
scanf_s("%d",&zh[order].password);
printf("请再次确认密码:");
scanf_s("%d",&confirmpassword[order]);
if(zh[order].password==confirmpassword[order])
{
printf("开户成功!\n\n");
order++;
}
else
{
printf("密码不一致开户失败\n\n");
zh[order].password=0;
confirmpassword[order]=0;
}
}
void save_money()
{
int exist2,status2,account2,password2,order2;
double money2;
printf("请输入你的账号:");
scanf_s("%d",&account2);
exist2=judge_exist(account2);
if(exist2!=0)
{
order2=account2-1000;
status2=judge_status(zh[order2].status);
if(status2==0)
{
printf("请输入密码:");
scanf_s("%d",&password2);
if(password2==zh[order2].password)
{
printf("户主姓名:%s\n",zh[order2].username);
printf("请输入存款金额:");
scanf_s("%lf",&money2);
zh[order2].money=zh[order2].money+money2;
printf("你当前的余额为:%lf\n\n",zh[order2].money);
}
else
{
printf("密码错误\n\n");
}
}
}
}
void get_money()
{
int exist2,status2,account2,password2,order2;
double money2;
printf("请输入你的账号:");
scanf_s("%d",&account2);
exist2=judge_exist(account2);
if(exist2!=0)
{
order2=account2-1000;
status2=judge_status(zh[order2].status);
if(status2==0)
{
printf("请输入密码:");
scanf_s("%d",&password2);
if(password2==zh[order2].password)
{
printf("户主姓名:%s\n",zh[order2].username);
printf("请输入取款金额:");
scanf_s("%lf",&money2);
zh[order2].money=zh[order2].money-money2;
if(zh[order2].money>=0)
{
printf("取款成功,你当前的余额为:%lf\n\n",zh[order2].money);
}
else
{
printf("余额不足取款失败\n\n");
zh[order2].money=zh[order2].money+money2;
}
}
else
{
printf("密码错误\n\n");
}
}
}
}
void inquire()
{
int account2,exist2,order2,password2;
printf("请输入你的账号:");
scanf_s("%d",&account2);
exist2=judge_exist(account2);
if(exist2!=0)
{
order2=exist2-1000;
printf("请输入密码:");
scanf_s("%d",&password2);
if(password2==zh[order2].password)
{
switch(zh[order2].status)
{
case 0:printf("账号:%d 姓名:%s\n",account2,zh[order2].username);
printf("状态:正常 余额:%lf\n\n",zh[order2].money);
break;
case 1:printf("账号:%d 姓名:%s\n",account2,zh[order2].username);
printf("状态:挂失 余额:%lf\n\n",zh[order2].money);
break;
case 2:printf("账号:%d 姓名:%s\n",account2,zh[order2].username);
printf("状态:销户 余额:%lf\n\n",zh[order2].money);
break;
}
}
else
{
printf("密码错误\n\n");
}
}
}
void shift_money()
{
int exist2,status2,account2,password2,order2,account3,exist3,order3,status3;
double money2;
printf("请输入你的账号:");
scanf_s("%d",&account2);
exist2=judge_exist(account2);
if(exist2!=0)
{
order2=account2-1000;
status2=judge_status(zh[order2].status);
if(status2==0)
{
printf("请输入密码:");
scanf_s("%d",&password2);
if(password2==zh[order2].password)
{
printf("户主姓名:%s\n",zh[order2].username);
printf("请输入转账账号:");
scanf_s("%d",&account3);
exist3=judge_exist(account3);
if(exist3!=0)
{
order3=account3-1000;
status3=judge_status(zh[order3].status);
if(status3==0)
{
printf("请输入你要转账的金额:");
scanf_s("%lf",&money2);
zh[order2].money=zh[order2].money-money2;
zh[order3].money=zh[order3].money+money2;
if(zh[order2].money>=0)
{
printf("转账成功,你的余额为%lf\n\n",zh[order2].money);
}
else
{
printf("余额不足,转账失败\n\n");
zh[order2].money=zh[order2].money+money2;
zh[order3].money=zh[order3].money-money2;
}
}
}
}
else
{
printf("密码错误\n\n");
}
}
}
}
void lose()
{
int exist2,account2,password2,order2;
printf("请输入你的账号:");
scanf_s("%d",&account2);
exist2=judge_exist(account2);
if(exist2!=0)
{
order2=account2-1000;
printf("请输入密码:");
scanf_s("%d",&password2);
if(password2==zh[order2].password)
{
printf("挂失成功,该卡已挂失\n\n");
zh[order2].status=1;
}
else
{
printf("密码错误\n\n");
}
}
}
void undo()
{
int exist2,account2,password2,order2;
printf("请输入你的账号:");
scanf_s("%d",&account2);
exist2=judge_exist(account2);
if(exist2!=0)
{
order2=account2-1000;
printf("请输入密码:");
scanf_s("%d",&password2);
if(password2==zh[order2].password)
{
printf("解挂成功\n\n");
zh[order2].status=0;
}
else
{
printf("密码错误\n\n");
}
}
}
void eliminate()
{
int exist2,account2,password2,order2;
printf("请输入你的账号:");
scanf_s("%d",&account2);
exist2=judge_exist(account2);
if(exist2!=0)
{
order2=account2-1000;
printf("请输入密码:");
scanf_s("%d",&password2);
if(password2==zh[order2].password)
{
printf("销户成功\n\n");
zh[order2].account=0;
}
else
{
printf("密码错误\n\n");
}
}
}
void change_password()
{
int exist2,account2,order2;
printf("请输入你的账号:");
scanf_s("%d",&account2);
exist2=judge_exist(account2);
if(exist2!=0)
{
order2=account2-1000;
printf("正在验证身份....\n");
printf("验证成功请输入新密码:");
scanf_s("%d",&zh[order2].password);
printf("改密成功\n\n");
}
}
void close()
{
control=2;
}
int judge_exist(int a)
{
int i,j=0;
for(i=1;i<=10;i++)
{
if(a==zh[i].account)
{
j=1;
break;
}
}
if(j==0)
{
a=0;
printf("对不起该用户不存在\n\n");
}
return a;
}
int judge_status(int a)
{
if(a==0)
{
return 0;
}
if(a==1)
{
printf("该用户已挂失\n\n");
return 1;
}
if(a==2)
{
printf("该用户已被冻结\n\n");
return 2;
}
return 0;
}
以上便是所有内容,希望对你有所帮助。