C语言实验报告
题目名称:C语言模拟ATM自动取款机系统
一:问题描述:
C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能;
代码实现的功能:
账号及密码输入:用户输入密码,才能进入。
登陆成功界面:共有六个选项,查询余额、取款、存款、转账,修改密码,退出分别对应1,2,3,4,5,6选项,若序号输入不正确会予以提示。
选定1后,进入查询余额界面; 选定2后,进入取款界面; 选定3后,进入存款界面;
选定4后,修改密码,选定5,进入转账;选定6,退出界面;
如果过程中操作有误,提醒是否继续操作。
二:分析问题
(1)
在main()函数用switch语句现实菜单功能,根据用户选择,进入不同功能区;
(2)
模拟ATM自动取款机功能的实现,需要用自定义函数实现板块化。
所用的自定义函数如下:
登录界面:void enter();
登录成功后的界面:void jiemian();
实现密码输入:void land();
实现余额查询:void inquiry();
实现取款功能:void withdraw();
实现存款功能:void deposit();
实现转账:void zhuangzhang();
实现修改密码:void correctscrect();
结束:void out();
输入有误,提示是否继续:int keep();
(3)
库函数:strcmp();system();
(4)
用户信息
结构体存储个人信息;
结构体数组存储的存储设计数据库知识,本实验模拟ATM机,简化处理,已经注册用户数据信息存储在结构体数组中;
三:解决问题
1. 用户信息
用结构体来描述用户的姓名、卡号、密码以及金额。
假设用户信息在结构体数组中;
2. 主函数函数
Switch语句实现菜单话;
(3)Voidland();
需要解决的问题:1.密码输入2.检查密码是否输入正确3.密码输入次数不能超过3次。(if语句)
(4)void jiemian();
提示用户进行操作printf();
(5)void withdraw();
1.取款时,输入的金额不能为被100整除;
2.取款的金额不能大于余额;
3.修改余额;
(6)void deposit();
1.存款金额不能不被100整除
(7)void correctscrect();
1.修改密码,需要重复输入二遍来确定密码是否修改成功;
(8)void zhuangzhang();
1.转账金额不能不被100整除
2.输入对方账号
3.转账金额是否足够,不能不被100整除
(9)int keep();
1.当输入有误时,提醒是否继续操作;
(8)void out();
1.调用main(),下一个用户操作;
四:程序代码
#include
#include
#include
#include
void enter();//进入界面
void jiemian();//登录成功界面
void land();//登录
void inquiry();//查询余额
void withdraw();//取款
void deposit();//存款
void correctscrect();//修改密码
void out();//退出
void zhuangzhang();//转账
int keep();//当输入有误是否继续
struct essage
{
char
name[20];
long
int acountion;
long
intkeyword;
float
money;
};
struct essage a[5]=
{{"zhangsan",3205,1234,2000},{"wanger",3027,2345,3000},{"lisi",3023,3456,2345}};
int X;
int main()
{
int
i;
land();
jiemian();
while(-1)
{
printf("请输入编号:\n");
scanf("%d",&i);
switch(i)
{
case 1 :
{
system("cls");
inquiry();
printf("按任意键继续!\n");
system("pause");
jiemian();
break;
}
case 2:
{
system("cls");
withdraw();
printf("按任意键继续!\n");
system("pause");
jiemian();
break;
}
case 3:
{
system("cls");
deposit();
printf("按任意键继续!\n");
system("pause");
jiemian();
break;
}
case 4:
{
system("cls");
correctscrect();
printf("按任意键继续!\n");
system("pause");
jiemian();
break;
}
case 5:
{
system("cls");
zhuangzhang();
system("pause");
jiemian();
break;
}
case 6:
{
printf("欢迎下次!\n");
system("cls");
main();
}
default :
{
break;
}
}
}
return
0;
}
void enter()
{
printf("******************************\n");
printf("********welcome to ATM!*******\n");
printf("******************************\n");
}
intkeep()
{
char
a;
printf("是否继续?\n");
while(-1)
{
printf("继续请输入:y退出按n\n");
getchar();
//a= getchar();
//getchar();
scanf("%c",&a);
if(a =='y')
{
return 1;
}
else if(a=='n')
return 0;
else
{
printf("输入有误!\n");
continue;
}
}
}
void land()
{
long
intkeyword;
int
i;
int
count=0;
while(-1)
{
printf("请输入密码:\n");
count++;
scanf("%ld",&keyword);
for(i = 0; i<3; i++)
{
if(keyword==a[i].keyword)
{
X = i;
return;
}
}
if(count==3)
{
printf("你输入的密码次数超过3次!\n");
exit(0);
}
else
{
printf("你输入密码有误!请重新输入!\n");
}
}
}
void inquiry()
{
printf("你当前余额为:%f\n",a[X].money);
}
voidjiemian()
{
printf("**************1.查询余额2.取款*************\n");
printf("**************3.存款4.修改密码*********\n");
printf("**************5.转账6.退出**************\n");
}
void deposit()
{
intn;
int
j;
while(-1)
{
printf("请输入存储金额:\n");
scanf("%d",&n);
if(n0==0)
{
a[X].money+=n;
printf("存款成功!\n");
printf("当前余额:%f",a[X].money);
return;
}
else
{
printf("输入金额有错!\n");
j = keep();
if(j == 1)
{
system("cls");
continue;
}
else
return ;
}
}
}
void withdraw()
{
intn;
int
m;
if(a[X].money<100)
{
printf("余额不足!\n");
return;
}
while(-1)
{
printf("请输入取款金额!\n");
scanf("%d",&n);
if(n>a[X].money)
{
printf("余额不足!\n");
m = keep();
if(m ==1)
continue;
else
return;
}
if(n0!=0)
{
printf("输入有误!请重新输入取款金额!\n");
//system("pause");
m = keep();
if(m==1)
continue;
else
return;
}
else
{
printf("成功!");
a[X].money=a[X].money-n;
return ;
}
}
}
void correctscrect()
{
int
b;
long
int n;
long
int m;
long
intq;
while(-1)
{
printf("请输入旧密码:\n");
scanf("%ld",&q);
if((q!=a[X].keyword))
{
printf("输入有误!\n");
b =keep();
if(b ==1)
continue;
else
return;
}
else
break;
}
while(-1)
{
printf("请输入新密码:\n");
scanf("%ld",&n);
printf("请在一次输入新密码:\n");
scanf("%ld",&m);
if(n!=m)
{
printf("二次密码不一样!\n");
b = keep();
if(b == 1)
continue;
else
return ;
}
else
{
printf("修改密码成功!\n");
a[X].keyword = n;
break;
}
}
}
void zhuangzhang()
{
long
intn;
intm;
int
i;
int
j;
int
leap=1;
printf("转账!\n");
while(leap!=0)
{
printf("输入转账账号!\n");
scanf("%ld",&n);
for(i = 0; i<3; i++)
{
if(a[i].acountion==n)
{
leap=0;
break;
}
}
if(leap!=0)
{
printf("你输入的账号不存在!\n");
j = keep();
if(j == 1)
{
system("cls");
continue;
}
else
return ;
}
}
while(-1)
{
printf("输入转账金额;\n");
scanf("%d",&m);
if(a[X].money<100)
{
printf("余额不足!\n");
j= keep();
if(j ==1)
continue;
else
return;
}
if(m>a[X].money)
{
printf("余额不足!\n");
j= keep();
if(j ==1)
continue;
else
return;
}
if(m0!=0)
{
printf("输入有误!请重新输入取款金额!\n");
j = keep();
if(j==1)
continue;
else
return;
}
else
{
printf("转账成功!");
a[X].money=a[X].money-m;
a[i].money = a[i].money+m;
return ;
}
}
}五:调试与测试
在编写代码:
主要问题就是在输入密码,密码要求次数不能超过3次和在所给人数中和转账过程复杂,易出错!
六:结果截图
void land():
void inquiry()
Void withdraw():
voiddeposite():
Void correctscrect():
Void zhuanzhang()
Void out()
七:总结
(1)收获
在做本次实验报告,有在网上寻求资源,帮助,解决不会的地点。从开时到完成,整个过程用时一个星期,全是自己动手,想如何设计程序,遇到问题百度。
本次实验报告把所学的C语言大部分都用上,对C语言程序设计有很大的帮助和提高和自己都C语言熟悉度。在运用C语言编程有所提高
(2)用到的知识
数据类型;
if语句,switch语句,for语句;
函数的声明,定义,调用;
库函数的运用;
结构体;
(3)不足
1.在C语言运用
缺少对文件的运用,造成模拟ATM机的一部分功能不完整!本实验如果运用文件存储用户信息,访问信息在真正模拟ATM机更接近。
(4)程序改进
1.实现了ATM基本的功能输入密码登录,查询余额,转账,修改密码,取款和存款。相比ATM机的功能,在取款,存款,转账金额方面应该给用户一个选择金额的功能和金额的限制!
2.数据存储存在不足,访问人数有限!从文件中读取用户信息。
3.缺少记录用户操作的时间和记录取款,转账金额;
4.输入登录密码时,操作总数一天不能超过3次,超过需要进行的操作!如果输入有问题一个提醒。
5.转账的账号如果为自己的账号,应该提醒;