扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
下面的是我自己写的一个, 里面很多细节都没有进行细致的处理, 只是粗略的实现了基本的功能
创新互联公司长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为恩平企业提供专业的成都网站设计、做网站、成都外贸网站建设公司,恩平网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。
后面有我的测试数据, 希望能有帮助
#include stdio.h
#include stdlib.h
#include string.h
typedef struct _account
{
char * UID;
char * pwd;
int balance;
char * UName;
}ACCOUNT, * PACCOUNT;
void InitAccount(PACCOUNT pA); // 初始化账户
void showAccount(ACCOUNT A, bool flag); // 显示账户信息, flag表示是否显示全部信息. 如果是true则需要输入用户密码
bool deposite(PACCOUNT pA); // 存钱, 内部需要密码验证并输入金额
bool withDraw(PACCOUNT pA); // 取钱, 内部需要密码验证并输入金额
bool transfer(PACCOUNT pA, PACCOUNT pB); // 转账, 需要密码验证, 并输入金额
bool conduct(PACCOUNT pA, int chose, PACCOUNT pB); // 处理, 就是根据菜单项处理用户的操作选择
void modifyPwd(PACCOUNT pA); // 更改用户密码
bool Authentication(PACCOUNT pA); // 密码认证, 3次机会输入密码
void memFree(PACCOUNT pA, PACCOUNT pB); // 在堆上分配的内存的释放
int main(void)
{
// 建立两个账户, 分别是操作账户和接受转账的账户
PACCOUNT pMainAcc = (PACCOUNT)malloc(sizeof(ACCOUNT));
PACCOUNT pAssistAcc = (PACCOUNT)malloc(sizeof(ACCOUNT));
// 初始化两个账户的信息
InitAccount(pMainAcc);
InitAccount(pAssistAcc);
// 进行菜单控制, 提供用户操作
int chose = -1;
while(chose != 0)
{
printf("\n1. 存钱\t2. 取钱\t3. 转账\t4. 更改密码\t5. 显示账户信息\t0.退出\n");
scanf("%d", chose);
conduct(pMainAcc, chose, pAssistAcc);
}
return 0;
}
bool conduct(PACCOUNT pA, int chose, PACCOUNT pB)
{
bool rtnflag = true;
switch(chose)
{
case 1:
if(!deposite(pA))
printf("操作失败!");
else
printf("操作成功!");
break;
case 2:
if(!withDraw(pA))
printf("操作失败!");
else
printf("操作成功!");
break;
case 3:
if(!transfer(pA, pB))
printf("操作失败!");
else
printf("操作成功!");
break;
case 4:
modifyPwd(pA);
break;
case 5:
showAccount(*pA, true);
break;
case 0:
rtnflag = false;
memFree(pA, pB);
break;
}
return rtnflag;
}
void InitAccount(PACCOUNT pA)
{
printf("请初始化账户名, 密码, 姓名, 账户余额.\n");
pA-UID = (char *)malloc(sizeof(char)*20);
pA-pwd = (char *)malloc(sizeof(char)*20);
pA-UName = (char *)malloc(sizeof(char)*20);
gets(pA-UID);
gets(pA-pwd);
gets(pA-UName);
scanf("%d", pA-balance);
getchar();
return ;
}
void showAccount(ACCOUNT A, bool flag)
{
if(flag)
{
int i = 0;
getchar();
char * tmpPwd = (char *)malloc(sizeof(char)*20);
while(strcmp(tmpPwd, A.pwd))
{
printf("请输入账户%s的密码:\n", A.UID);
gets(tmpPwd);
if(++i 3)
{
printf("对不起, 密码输入错误!只能显示部分信息!\n");
showAccount(A, false);
free(tmpPwd);
return ;
}
}
printf("账户信息如下:\n账户名\t账户密码\t账户余额\t姓名\n");
printf("%6s\t%8s%8d\t%8\ts\n", A.UID, A.pwd, A.balance, A.UName);
free(tmpPwd);
}
else
{
printf("账户信息如下:\n账户名\t账户余额\t姓名\n");
printf("%6s\t%8d\t%4s\n", A.UID, A.balance, A.UName);
}
return ;
}
bool deposite(PACCOUNT pA)
{
if(!Authentication(pA))
return false;
int val = 0;
printf("请输入金额:\n");
scanf("%d", val);
pA-balance += val;
return true;
}
bool withDraw(PACCOUNT pA)
{
if(!Authentication(pA))
return false;
printf("请输入金额");
int val = 0;
scanf("%d", val);
if(pA-balance = val)
{
pA-balance -= val;
}
else
{
printf("对不起, 余额不足!");
return false;
}
return true;
}
bool transfer(PACCOUNT pA, PACCOUNT pB)
{
if(!Authentication(pA))
return false;
printf("请输入金额");
int val = 0;
scanf("%d", val);
if(pA-balance = val)
{
pA-balance -= val;
pB-balance += val;
}
else
{
printf("对不起, 余额不足!");
return false;
}
return true;
}
void modifyPwd(PACCOUNT pA)
{
if(Authentication(pA))
{
printf("请输入新的密码!");
free(pA-pwd);
pA-pwd = (char *)malloc(sizeof(char)*20);
gets(pA-pwd);
}
else
{
printf("对不起, 您没有权限进行密码修改!");
}
}
bool Authentication(PACCOUNT pA)
{
getchar();
int i = 0;
char * tmpPwd = (char *)malloc(sizeof(char)*20);
while(strcmp(tmpPwd, pA-pwd))
{
printf("请输入%s的密码, 3次机会:\n", pA-UID);
gets(tmpPwd);
if(++i == 3)
{
return false;
}
}
return true;
}
void memFree(PACCOUNT pA, PACCOUNT pB)
{
free(pA);
free(pB);
return ;
}
/*
运行环境: VC6.0
请初始化账户名, 密码, 姓名, 账户余额.
wed
qweasd
wednesday
800
请初始化账户名, 密码, 姓名, 账户余额.
hu
sad
huni
200
1. 存钱 2. 取钱 3. 转账 4. 更改密码 5. 显示账户信息 0.退出
1
请输入wed的密码, 3次机会:
qwe
请输入wed的密码, 3次机会:
qweasd
请输入金额:
54
操作成功!
1. 存钱 2. 取钱 3. 转账 4. 更改密码 5. 显示账户信息 0.退出
5
请输入账户wed的密码:
qwe
请输入账户wed的密码:
qweasd
账户信息如下:
账户名 账户密码 账户余额 姓名
wed qweasd 854 s
1. 存钱 2. 取钱 3. 转账 4. 更改密码 5. 显示账户信息 0.退出
4
请输入wed的密码, 3次机会:
123
请输入wed的密码, 3次机会:
qweasd
请输入新的密码!123qwe
1. 存钱 2. 取钱 3. 转账 4. 更改密码 5. 显示账户信息 0.退出
1
请输入wed的密码, 3次机会:
qweasd
请输入wed的密码, 3次机会:
123qwe
请输入金额:
43
操作成功!
1. 存钱 2. 取钱 3. 转账 4. 更改密码 5. 显示账户信息 0.退出
5
请输入账户wed的密码:
123qwe
账户信息如下:
账户名 账户密码 账户余额 姓名
wed 123qwe 897 s
1. 存钱 2. 取钱 3. 转账 4. 更改密码 5. 显示账户信息 0.退出
Press any key to continue
*/
#
include
#
include
void
main()
{
/*
已知银行整存整取存款不同期限的月息利率分别为:
0.315%(期限一年);0.330%(期限二年);
0.345%(期限三年);0.375%(期限五年);0.420%(期限八年)。
要求:输入存钱的本金和期限,求到期的利息与本金的合计。*/
int
n;
float
money;
printf("请输入存钱本金和期限\n");
scanf("%f%d",money,n);
switch(n)
{case
1:money=money+0.315*0.01*money;break;
case
2:money=money+0.330*0.01*money;break;
case
3:money=money+0.345*0.01*money;break;
case
5:money=money+0.375*0.01*money;break;
case
8:money=money+0.420*0.01*money;break;
default:printf("输入错误");break;
}
printf("%f",money);
}
我%不会输入就换成0.01了,其余的都对
#include stdio.h
#include stdlib.h
#include conio.h
#include string.h
void regist();
void login();
void quite();
void inputpassword(char mima[]);
void service();
struct bank
{
char name[20];
char password[7];
int account;
double money;
}kehu;
int find;
int a[10];
struct bank one;
FILE *fp;
void main()
{
int i;
int t=1;
for(i=0;i100;i++)
{
printf("\t\t\t\t\t\t欢迎使用青软ATM系统\n");
printf("\t\t\t\t\t\t正在进入主界面,请稍等");
int j;
for(j=1;jt;j++)
{
printf(".");
}
t++;
if(t==10)
{
t=1;
}
printf("\n\t\t\t\t\t\t%d%%",i);
system("cls");
}
while(1)
{
printf("\t\t\t\t\t\t服务类型: \n");
printf("\t\t\t\t\t\t[a]: 用户注册\n");
printf("\t\t\t\t\t\t[b]: 用户登录\n");
printf("\t\t\t\t\t\t[c]: 退出系统\n");
printf("\t\t\t\t\t\t请选择服务: ");
fflush(stdin);
char xz;
scanf("%c",xz);
if(xz=='a'||xz=='A')
{
regist();
} else if (xz=='b'||xz=='B')
{
login();
} else if(xz=='c'||xz=='C')
{
quite();
} else
{
printf("输入有误,请重新输入");
}
getch();
system("cls");
}
}
void inputpassword(char mima[])
{
int i=0;
char ch;
while(1)
{
ch=getch();
if(ch!='\r')
{
if(ch!='\b'){
mima[i]=ch;
i++;
printf("*");
}else{
if(i0){
i--;
printf("\b \b");
}
}
}else{
break;
}
}
mima[i]='\0';
printf("\n");
}
void regist()
{
fp=fopen("atm.txt","ab+");
if(fp==NULL)
{
printf("\n\t\t\t文件打开失败!");
return;
}
system("cls");
printf("\t\t\t现在执行的是注册函数的使用\n");
printf("\t\t请输入用户名: ");
fflush(stdin);
gets(kehu.name);
char password1[7];
while(1)
{
while(1)
{
printf("\n\n\t\t请输入密码:");
fflush(stdin);
inputpassword(kehu.password);
int n=strlen(kehu.password);
if(n==6)
{
break;
}else
{
printf("\n\t\t密码必须为6位!");
}
}
printf("\n\t\t请输入正确密码!: ");
fflush(stdin);
inputpassword(password1);
if(strcmp(kehu.password,password1)==0)
{
break;
}else{
printf("\n\n\t\t两次密码必须相同!");
}
}
rewind(fp);
struct bank k;
if(fread(k,sizeof(struct bank),1,fp)==1)
{
fseek(fp,-sizeof(k),2);
fread(k,sizeof(k),1,fp);
kehu.account=k.account+1;
}else{
kehu.account=20170001;
}
kehu.money=0;
fseek(fp,0,2);
fwrite(kehu,sizeof(struct bank),1,fp);
fclose(fp);
printf("\n\n\t\t开户成功! ");
printf("\n\t\t您的账号为%d!",kehu.account);
printf("\n\t\t现在请您重新登录!");
}
void searchmoney()
{
system("cls");
printf("您现在使用的是查询余额功能: \n");
printf("\n\n\t\t您的余额是%0.2lf",one.money);
}
void savemoney()
{
system("cls");
double inmoney;
printf("请您选择您要存款的金额 \n");
scanf("%lf",inmoney);
int q;
int r=1;
for(q=0;q100;q++)
{
int w;
for(w=1;wr;w++)
{
printf(".");
}
r++;
if(r==10)
{
r=1;
}
printf("\n\t\t\t\t\t\t正在存款%d%%",q);
system("cls");
}
one.money=one.money+inmoney;
fseek(fp,-sizeof(one),1);
fwrite(one,sizeof(one),1,fp);
printf("\n\n\t\t\t\t\t\t您已存款成功!");
}
void withdrawalmoney()
{
system("cls");
double outputsomemoney;
printf("请您选择您要取款的金额 \n");
scanf("%lf",outputsomemoney);
if(one.moneyoutputsomemoney){
printf("您的余额已不足,请您注意!");
}else {
int q;
int r=1;
for(q=0;q100;q++)
{
int w;
for(w=1;wr;w++)
{
printf(".");
}
r++;
if(r==10)
{
r=1;
}
printf("\n\t\t\t\t\t\t正在取款%d%%",q);
system("cls");
}
one.money=one.money-outputsomemoney;
fseek(fp,-sizeof(one),1);
fwrite(one,sizeof(one),1,fp);
printf("\n\n\t\t\t\t\t\t您已取款成功!请点清钞票!");
printf("\n\n\t\t\t\t\t\t您现在的余额为%lf",one.money);
}
}
void transfermoney()
{
system("cls");
int duifang;
int qian;
fflush(stdin);
printf("\n\n\n\t\t您现在使用的是转账功能");
printf("\n\t\t\t请输入您要转账的账户:");
scanf("%d",duifang);
int n=ftell(fp);
rewind(fp);
int flag=0;
struct bank temp;
while(fread(temp,sizeof(temp),1,fp)==1)
{
if(temp.account==duifang)
{
flag=1;
break;
}
}
if(flag==1)
{
printf("请输入转账金额:");
scanf("%d",qian);
if(one.money=qian)
{
int q;
int r=1;
for(q=0;q100;q++)
{
int w;
for(w=1;wr;w++)
{
printf(".");
}
r++;
if(r==10)
{
r=1;
}
printf("\n\t\t\t\t\t\t正在转账,请稍后!%d%%",q);
system("cls");
}
temp.money=temp.money+qian;
fseek(fp,-sizeof(temp),1);
fwrite(temp,sizeof(temp),1,fp);
one.money=one.money-qian;
fseek(fp,n-sizeof(one),0);
fwrite(one,sizeof(one),1,fp);
printf("\n\t\t\t\t转账成功!");
}else{
printf("\n\t\t\t\t您的余额已不足!");
}
}
}
void xiugai(){
system("cls");
printf("\n\n\t\t 现在进行的是修改密码功能\n");
char oldpassword[7];
char newpassword[7];
char newpassword1[7];
int i;
for(i=0;i3;i++){
printf("\n\t\t\t 请输入旧密码:\n");
inputpassword(oldpassword);
if(strcmp(oldpassword,one.password)==0){
printf("\n\t\t\t 输入成功!\n");
break;
}else{
printf("\n\t\t\t 密码输入有误,请重新输入!\n");
}
}
if(i3){
while(1){
printf("\n\t\t\t 请输入您的新密码:\n");
inputpassword(newpassword);
printf("\n\t\t\t 请输入您的确认密码:\n ");
inputpassword(newpassword1);
if(strcmp(newpassword,newpassword1)==0){
strcpy(one.password,newpassword);
fseek(fp,-sizeof(one),1);
fwrite(one,sizeof(one),1,fp);
printf("\n\t\t\t 密码修改成功!");
break;
}else{
printf("\n\t\t\t 两次密码输入不一致!");
}
}
}else{
printf("\n\t\t\t 密码输入错误!");
}
}
int zhuxiaozhanghao()
{
system("cls");
int zhuxiaoxitong;
char sf;
printf("你要注销的账号是%d",one.account);
printf("你是否要对此账号进行注销?\n\n\t\t请您选择:注销(Y)or不注销(N):");
fflush(stdin);
scanf("%c",sf);
if(sf=='y'||sf=='Y')
{
printf("正在为您注销!\n",one.account);
zhuxiaoxitong=1;
}else{
printf("不注销系统!\n",one.account);
}
return zhuxiaoxitong;
}
void service()
{
while(1){
system("cls");
printf("\n\n\n\t\t\t\t\t\t现在是服务系统,本系统有以下服务");
printf("\n\t\t\t\t\t\t[a] 查询余额\n");
printf("\n\t\t\t\t\t\t[b] 存款服务\n");
printf("\n\t\t\t\t\t\t[c] 转账服务\n");
printf("\n\t\t\t\t\t\t[d] 取款服务\n");
printf("\n\t\t\t\t\t\t[e] 修改密码\n");
printf("\n\t\t\t\t\t\t[f] 注销 \n");
printf("\n\t\t\t\t\t\t[g] 退出系统\n");
char e;
printf("\n\t\t\t\t\t\t您要选择的服务是:");
fflush(stdin);
scanf("%c",e);
switch(e)
{ case'A':
case'a': searchmoney() ;break;
case'B':
case'b': savemoney() ;break;
case'C':
case'c': transfermoney() ;break;
case'D':
case'd': withdrawalmoney() ;break;
case'E':
case'e': xiugai() ;break;
case'F':
case'f': {int zhuxiaoxitong=zhuxiaozhanghao();{if(zhuxiaoxitong==1) return;}break;}
case'G':
case'g': quite();break;
}
printf("\n\n\n\t\t\t\t按任意键继续......\n");
getch();
}
}
void login()
{
fp=fopen("atm.txt","rb+");
if(fp==NULL)
{
printf("\n\n\n\t\t\t\t文件打开失败!");
return;
}
system("cls");
printf("\n\t\t\t\t\t\t现在执行的是登录函数的使用\n");
int zhanghao;
printf("\n\t\t\t\t\t\t请输入账号:");
scanf("%d",zhanghao);
int flag=0;
while(fread(one,sizeof(one),1,fp)==1)
{
if(zhanghao==one.account){
flag=1;
break;
}
}
char password2[7];
if(flag==1){
int h;
for(h=0;h3;h++){
printf("\n\t\t\t\t\t\t请输入密码:");
fflush(stdin);
inputpassword(password2);
if(strcmp(password2,one.password)==0)
{
printf("\n\t\t\t\t\t\t登陆成功!");
service();
break;
}else{
printf("密码不正确!");
}
}
if(h==3){
printf("\n\t\t\t您的密码三次输入有误,返回");
}
}else{
printf("无此账号!");
}
fclose(fp);
}
void quite()
{
system("cls");
printf("\t\t\t现在执行的是退出函数的使用\n");
exit(0);
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流