
请看以下修改后的代码:
#include <stdioh>
#include <stdlibh>
int main() {
int a, b, c, d, i, q = 4000, r;
printf("-------------------\n");
printf(" 欢迎使用ATM机 \n");
printf("-------------------\n");
printf("请输入您的密码\n");
scanf("%d", &a);
for (b = 0; b < 3; b++) {
if (a == 123) {
printf("请选择您的 *** 作\n");
printf("1查询 ");
printf("2取款\n");
printf("3存款 ");
printf("4转账\n");
printf("5无用选项\n");
break;
} else {
if (b != 2) {
printf("密码错误,请重新输入\n");
scanf("%d", &a);
} else {
printf("密码错误,已达到最大尝试次数\n");
return 0;
}
}
}
scanf("%d", &c);
switch (c) {
case 1:
printf("A您的余额为%d\n", q);
break;
case 2:
printf("取款\n");
printf("请输入取款金额\n");
scanf("%d", &r);
if (r < q) {
printf("取款成功\n");
q = q - r;
} else {
printf("余额不足\n");
}
break;
// 在此处添加其他情况
}
return 0;
}
代码的修改点包括:
将for(b=0;b<3;b++);循环中的分号去掉,因为它会导致循环内部的代码没有执行。
在密码错误时,增加重新输入的逻辑,并在尝试次数达到上限时结束程序。
修改scanf("%d",c);为scanf("%d",&c);,因为scanf函数需要传递变量的指针。
修复了case 1:中的printf("您的余额为%q\n",q);语句,将%q改为了%d,因为q是一个整数。
删除了多余的大括号,以简化代码结构。
修改了case 2:中的scanf("%d\n",&r);为scanf("%d",&r);,删除了多余的换行符。
// ATMcpp : Defines the entry point for the console application
#include "stdafxh"
#include <stdioh>
#include <stringh>
//#include <iostreamh>
#include <stdlibh>
#include <iostreamh>//using namespace std;
#include <windowsh>
int state=0;
#define URL "c:\\1txt"
struct account //结构体定义
{
char name[256];
int cardnum;
int password;
long int money;
// enum type={0,1,2};
char lastlog[512];
};
struct account atm;//全局变量
long offset=0;
int initmenu();
int logo();
int add_money();
int search();
int withdraw();
struct account new_account();
void main() //主函数
{
memset(&atm,0,sizeof(atm));
initmenu();
}
int initmenu()
{
int menu_Num;
while(1)
{ system("cls");
cout<<"\t\t\t\t自助银行系统\n";
cout<<"\t\t############################################\n";
cout<<"\t\t#\t\t 1登录\t\t #\n";
cout<<"\t\t#\t\t 2查询\t\t #\n";
cout<<"\t\t#\t\t 3取现\t\t #\n";
cout<<"\t\t#\t\t 4存款\t\t #\n";
cout<<"\t\t#\t\t 5开户\t\t #\n";
cout<<"\t\t#\t\t 0退出\t\t #\n";
cout<<"\t\t############################################\n";
cout<<"请选择 *** 作编号:";
cin>>menu_Num;
switch (menu_Num)
{
case 1:
logo();
break;
case 2:
if(state)
search();
else
{
printf("请先登录!");
Sleep(2000);
printf("\b\b\b\b ");
}
break;
case 3:
if(state)
withdraw();
else
{
printf("请先登录!");
Sleep(2000);
printf("\b\b\b\b ");
}
break;
case 4:
if(state)
add_money();
else
{
printf("请先登录!");
Sleep(2000);
printf("\b\b\b\b ");
}
break;
case 5:
new_account();
initmenu();
break;
case 0:
printf("请取回您的磁卡\n");
Sleep(2000);
state=0;
memset(&atm,0,sizeof(atm));
break;
default:
cout<<"输入有误!请重新输入!\n";
}
}
}
int logo()//登录
{
int a,b;
FILE fp;
system("cls");
printf("请输入卡号:");
scanf("%d",&a);
printf("\n");
printf("请输入密码:");
scanf("%d",&b);
printf("\n");
// printf("按ESC返回主菜单\n");
if(NULL==(fp=fopen(URL,"r")))
{
printf("数据库连接失败\n");
Sleep(2000);
initmenu();
}
else
{
while(fread(&atm,sizeof(atm),1,fp)!=NULL)
{
offset=ftell(fp);
if((atmcardnum==a)&&(atmpassword==b))
{
printf("登录成功\n");
Sleep(2000);
system("cls");
state=1;
break;//跳出此重循环,continue跳出本次循环
}
}
}
if(state==0)
{
printf("%s\n","帐户或密码错误");
Sleep(2000);
initmenu();
return 0;
}
else
{
return 1;
}
}
int search() //显示帐户余额等信息
{
cout<<"姓名:"<<atmname<<"\n";
cout<<"卡号:"<<atmcardnum<<"\b\b\b\b\n";
cout<<"余额:"<<atmmoney<<"\n";
cout<<"上次登录时间:"<<atmlastlog<<"\n";
return 1;
}
int withdraw()//取钱
{
long int num=0;
FILE fp;
printf("%s:","请输入取款金额");
scanf("%d",&num);
if(atmmoney>=num)
{
atmmoney-=num;
if(NULL==(fp=fopen(URL,"w+")))
{
printf("数据库错误\n");
Sleep(2000);
return 0;
}
else
{
fseek(fp,offset,SEEK_SET);
if((fwrite(&atm,sizeof(atm),1,fp))==NULL)
{
printf("取款失败");
Sleep(2000);
return 0;
}
//吐钱
fclose(fp);
printf("请在30s内取走钞票\n");
Sleep(2000);
}
}
else
{
return 0;
}
return 1;
}
int add_money()//存钱
{
long int num=0;
FILE fp;
if(state)
{
printf("请输入存款金额;");
scanf("%d",&num);
printf("请将钞票放入存钞口\n");
Sleep(4000);
// 验钞成功
atmmoney+=num;
if(NULL==(fp=fopen(URL,"w+")))
{
printf("数据库错误\n");
Sleep(2000);
return 0;
}
else
{
fseek(fp,offset,SEEK_SET);
if((fwrite(&atm,sizeof(atm),1,fp))==NULL)
{
//退还钞票
printf("存钱失败");
Sleep(2000);
return 0;
}
fclose(fp);
printf("存款成功\n");
Sleep(2000);
}
}
else
{
return 0;
}
return 1;
}
struct account new_account() //增加帐户,放入数据库
{
FILE fp;
//缺数据合法性验证
printf("\n请输入姓名:");
scanf("%s",atmname);
printf("\n请输入卡号:");
scanf("%d",&atmcardnum);
printf("\n请输入密码:");
scanf("%d",&atmpassword);
atmmoney=0;
if(NULL==(fp=fopen(URL,"a+")))
{
printf("数据库连接失败\n");
Sleep(2000);
return 0;
}
else
{
if((fwrite(&atm,sizeof(atm),1,fp))==NULL)
{
printf("帐户创建失败");
return 0;
}
}
fclose(fp);
return &atm;
}
细节方面自己去调,如把菜单放在右上角之类的
1、把yhk插入到c语言取款机里面,要将yhk的磁条向下、有磁条的一边向右插入c语言取款机。
2、输入卡密码输入之后有的可以直接进入取款画面,有的还需要按确认键。
3、之后你在屏幕上可以看到"查询""取款""转账""退卡"等选择相对应的按键,就是屏幕两边的8个键,不要着急,看清了再按选项旁边对应的键,取款就按下"取款"。
4、按下"取款"之后要输入取款的金额就可以了。
5、眼睛一定要盯着"出钞口",出钞后的2-5秒如果无人取钞,ATM会把吐钞吞回的。取款时一定清点,发现有可疑的纸币就把纸币冠字编号对准ATM的摄像头多停留几秒,取款完成后按屏幕上提示的"退卡"退出卡片。
#include <stdioh>
int main (void)
{
int i,g,q=10000,qq=0,z;
char mm[6];
const char MM[6]="123456";
printf ("\n\t请输入密码以登入账户:");
while(1)
{
for(i=0;i<6;i++)
{
mm[i]=getch();
if (mm[i]!='\b')
{
putchar ('');
}
else
{
printf ("\b \b");
i--;
i--;
}
if (mm[i]=='\r')
{
printf ("\b \b");
break;
}
}
if (strcmp(mm,MM)==0)
{
printf ("\n\t密码正确!登入银行账户!\n");
printf ("\t[1]查询余额\t[2]取钱\n\t选项:");
scanf ("%d",&g);
switch (g)
{
case 1:printf ("\t你的余额剩余%d元\n",q-qq);break;
case 2:printf ("\请输入提取金额:");scanf ("%d",&qq);printf ("\t提取现金%d元\n",qq);break;
default:printf ("\t选项错误!\n");break;
}
break;
}
else
{
printf ("\n密码错误!\n");
printf ("请重新输入密码:");
}
}
}
本来是想来个简单的结果看到楼下说要登入这些功能。。。
这是简单的
#include <stdioh>int main (void)
{
double a=10000;
int i;
printf ("请输入你要提取的金额:");
scanf ("%d",&i);
printf ("您的账户余额:%g元",a-i);
return 0;
}
再来个稍难得吧。。。
#include <stdioh>int main (void)
{
char mm[6];
double a=10000;
int i=0,g;
printf ("[1]取款[2]查询余额:");
scanf ("%d",&g);
switch (g)
{
case 1:printf ("请输入提取金额:");scanf ("%d",&i);printf ("账户余额%g",a-i);break;
case 2:printf ("账户余额%g",a-i);break;
default:printf ("选项错误!\n");break
}
return 0;
}
从编译器复制下来的代码中文都要乱码。。。
C语言程序:
#include <stdioh>
void showMenu()
{
printf("请选择 *** 作类型:\n");
printf(" 1--存钱\n");
printf(" 2--取钱\n");
printf(" 3--转账\n");
printf(" 0--结束\n");
printf("--------------------------\n");
}
void main()
{
int account1 = 1000; //1号账户余额
int account2 = 1000; //2号账户余额
int choice; // *** 作选择
int num; // *** 作金额
int id; //账户编号
int id1;
do
{
showMenu();
scanf("%d", &choice);
switch(choice)
{
case 1: //存钱
{
printf("账户(1 | 2):");
scanf("%d", &id);
if(id != 1 && id != 2)
{
printf("账户不存在!\n");
break;
}
printf("金额:");
scanf("%d", &num);
if(num <= 0)
{
printf("存入金额必须大于0!");
break;
}
if(id == 1)
{
account1 += num;
printf("1号账户余额:%d\n", account1);
}
else
{
account2 += num;
printf("2号账户余额:%d\n", account2);
}
break;
}
case 2: //取钱
{
printf("账户(1 | 2):");
scanf("%d", &id);
if(id != 1 && id != 2)
{
printf("账户不存在!\n");
break;
}
printf("金额:");
scanf("%d", &num);
if(num <= 0)
{
printf("取款金额必须大于0!\n");
break;
}
if((id == 1 && num > account1) || (id == 2 && num > account2))
{
printf("当前账户余额不足!");
break;
}
if(id == 1)
{
account1 -= num;
printf("1号账户余额:%d\n", account1);
}
else
{
account2 -= num;
printf("2号账户余额:%d\n", account2);
}
break;
}
case 3:
{
printf("转出账户(1 | 2):");
scanf("%d", &id);
if(id != 1 && id != 2)
{
printf("账户不存在!\n");
break;
}
printf("转入账户(1 | 2):");
scanf("%d", &id1);
if(id1 != 1 && id1 != 2)
{
printf("账户不存在!\n");
break;
}
printf("金额:");
scanf("%d", &num);
if(num <= 0)
{
printf("转账金额必须大于0!\n");
break;
}
if((id == 1 && num > account1) || (id == 2 && num > account2))
{
printf("转出账户余额不够!");
break;
}
if(id == 1)
{
account1 -= num;
account2 += num;
printf("1号账户成功转出 %d 元到2号账户\n", num);
printf("1号账户余额:%d\n", account1);
}
else
{
account2 -= num;
account1 += num;
printf("2号账户成功转出 %d 元到1号账户\n", num);
printf("2号账户余额:%d\n", account2);
}
break;
}
default:
{
break;
}
}
} while(choice != 0);
}
运行测试:
按照题目要求编写的C语言程序如下
#include<stdioh>
#include<mathh>
int main()
{
double x;
scanf("%lf",&x);
printf("%f",sqrt(x));
return 0;
}
以上就是关于这个代码怎么运行不出来C语言能不能帮完善一下全部的内容,包括:这个代码怎么运行不出来C语言能不能帮完善一下、C语言 小小的projiect ~~ 小小的ATM、c语言取款机怎样手动输入金额等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)