您的位置:首页

提高第40课时,实践,简易银行系统开发

2017-07-03 20:44 323 查看
/*
*Copyright(c) 2015/6/3 CSDN博客
*All rights reserved.
*文件名:main.c
*作    者:金叶
*完毕日期:2015/6/3
*版本:V1.0
*问题描写叙述:小型银行应用程序
*程序输出:
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
#define upNum 2000
int ipass(); //银行员工password确认
void downdate(); //载入数据
int iChoose(); //银行员工选择功能
int search(int id); //用于查找账户相应的下标
int inputpass(); //用于输入password
void work(); //主菜单
void open_account(); //1开户
void cancellation(); //2注销
void deposit(); //3存款
void withdraw_money(); //4取款
void query(); //5查询
void transfer_accounts(); //6转账
void loss(); //7挂失
void unloss(); //8解挂
void change(); //9该密
void update(); //保存数据,退出
int user[upNum][3];  //账号、password、状态
char name[upNum][10];   //username
double balance[upNum];  //账户剩余金额
int N; //银行用户实际人数

int main()
{
if (ipass()==1)
{
downdate();
work();
update();
}
return 0;
}

int ipass()
{
int i,j=3;
int right=0;
char ch;
char worker[20];
char ipass[20];
char worker1[20];
char ipass1[20];
FILE *fp;
printf("+-------------------+\n");
printf("+  欢迎光临CSDN银行 +\n");
printf("+-------------------+\n");
if ((fp=fopen("worker.txt","r"))==NULL)
{
printf("worker file cannot open!");
exit(0);
}
fscanf(fp,"%s %s",worker,ipass); //读入工作人员username
fclose(fp);
do
{
printf("请输入业务员的username:");
scanf("%s",worker1);
printf("请输入password:");
i=0;
while((ch=getch())!='\r')
{
ipass1[i++]=ch;
putchar('*');
}
ipass1[i]='\0';
fflush(stdin);
printf("\n");
if (strcmp(worker1,worker)==0&&strcmp(ipass1,ipass)==0)
{
right = 1;
break;
}
else
{
j--;
if (j>0)
{
printf("超过3次将退出,你还能够尝试%d次!

\n", j);
}
else
{
printf("对不起,你不能进入系统\n");
}
}
}
while (j);
return right;
}

void downdate()
{
int i=0;
FILE *fp;
if ((fp=fopen("bank.txt","r"))==NULL)
{
printf("bank file cannot open!");
exit(0);
}
while(fscanf(fp,"%d %s %d %lf %d",&user[i][0], name[i], &user[i][1], &balance[i],&user[i][2] ) != EOF)
{
i++;
}
N=i;
fclose(fp);
return;
}

void work()
{
int ichose;
do
{
ichose=iChoose();
switch (ichose)
{
case 1:
open_account(); //开户
break;
case 2:
cancellation(); //2注销
break;
case 3:
deposit(); //3存款
break;
case 4:
withdraw_money(); //4取款
break;
case 5:
query(); //5查询
break;
case 6:
transfer_accounts(); //6转账
break;
case 7:
loss(); //7挂失
break;
case 8:
unloss(); //8解挂
break;
case 9:
change(); //9该密
break;
case 0:
printf("欢迎再来\n");
update(); //保存退出
}
}
while (ichose);
}

int iChoose()
{
int ichose;
while (1)
{
printf("\n");
printf("+----------------------------+\n");
printf("+ 1 开户    2 销户    3 存款 +\n");
printf("+ 4 取款    5 查询    6 转账 +\n");
printf("+ 7 挂失    8 解挂    9 改密 +\n");
printf("+                     0 退出 +\n");
printf("+----------------------------+\n");
printf("请输入操作指令:");
scanf("%d",&ichose);
if (ichose>=0 && ichose<=9)
{
break;
}
else
printf("输入错误。请又一次选择\n\n");
}
return ichose;
}

void open_account()
{
int ipass1,ipass2;
if (N==upNum)
{
printf("银行用户达到上限,不能开户\n");
}
printf("正在进行开户\n");
printf("请输入用户账号:");
scanf("%d",&user
[0]);
printf("请输入用户姓名:");
scanf("%s",name
);
printf("请输入password:");
ipass1=inputpass();
printf("请再次确认password:");
ipass2=inputpass();
if (ipass1==ipass2)
{
user
[1]=ipass1;
user
[2]=0;
printf("存款金额:");
scanf("%lf",&balance
);
printf("开户成功。\n");
N++;
}
else
{
printf("password错误,开户失败!

\n");

}
}

int search(int id)
{
int index;
index=-1;
int i;
for (i=0; i<N; i++)
{
if (user[i][0]==id)
{
index=i;
break;
}
}
return index;
}

int inputpass()
{
char ch;  //接收字符形式password
int iPass=0;   //要转换为数字
int i;
while(1)
{
for(i=0; i<6; i++)
{
ch=getch();  //输入但不显示
putchar('*');   //输出*
if(isdigit(ch))
iPass=iPass*10+(ch-'0');
else
{
iPass=0;
break;  //退出for循环后。再次接受
}
}
fflush(stdin); //清除键盘缓存区中已经有的输入
printf("\n");
if(iPass==0)  //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
{
printf("password要求全为数字。且不能全0。\n");
printf("请又一次输入password: ");
}
else
break;
}
return iPass;
}

void cancellation()
{
int i;
int cancel;
int pass;
printf("输入待销户账号:");
scanf("%d",&cancel);
i=search(cancel);
printf("姓名:%s\n",name[i]);
printf("password:");
pass=inputpass();
if (pass==user[i][1])
{
printf("剩余金额:%.2lf",balance[i]);
printf("确认销户Y/N:");
if(tolower(getchar())=='y')
{
balance[i]=0;  //取款后剩余金额变0
user[i][2]=2;  //状态变为注销
printf("取款 %.2f 元,销户成功!

\n", balance[i]);
}
else
{
printf("你取消了操作。销户失败!\n");
}
}
else
{
printf("password错误,销户失败!\n");
}
}

void deposit()
{
int i;
int id;
int pass;
double money;
printf("请输入账号:");
scanf("%d",&id);
i=search(id);
if (i<0)
{
printf("username不存在。\n");
}
else
{
printf("姓名:%s",name[i]);
printf("password:");
pass=inputpass();
if (pass==user[i][1]&&user[i][2]==0)
{
printf("输入存款金额:");
scanf("%lf",&money);
printf("剩余金额总计%.2lf,存款成功",money+balance[i]);
}
else if (pass==user[i][1]&&user[i][2]==1)
{
printf("卡已挂失,存款失败!

\n");
}
else if (pass==user[i][1]&&user[i][2]==2)
{
printf("卡已注销,存款失败!

\n");
}
else
{
printf("password错误,存款失败!\n");
}
}
}

void withdraw_money()
{
int i;
int id;
int pass;
double money;
printf("请输入账号:");
scanf("%d",&id);
i=search(id);
if(i<0)
{
printf("username不存在。\n");
}
else
{
printf("姓名:%s",name[i]);
printf("password:");
pass=inputpass();
if (pass==user[i][1]&&user[i][2]==0)
{
printf("剩余金额 :%.2lf\n",balance[i]);
printf("取款金额:");
scanf("%lf",&money);
if (money>balance[i])
{
printf("剩余金额不足,取款失败");
}

else
{
balance[i]-=money;
printf("剩余金额:%.2lf",balance[i]);
}
}
else if (pass==user[i][1]&&user[i][2]==1)
{
printf("卡已挂失,取款失败!

\n");
}
else if (pass==user[i][1]&&user[i][2]==2)
{
printf("卡已注销,取款失败!\n");
}
else
{
printf("password错误。取款失败!\n");
}
}
}

void query()
{
int i;
int id;
int pass;
printf("请输入账号:");
scanf("%d",&id);
i=search(id);
printf("姓名:%s",name[i]);
printf("password:");
pass=inputpass();
if (pass==user[i][1])
{
printf("剩余金额:%.2lf\n",balance[i]);
if (user[i][2]==0)
{
printf("当前状态:正常\n");
}
else if (user[i][2]==1)
{
printf("当前状态:挂失\n");
}
else
printf("当前状态:注销\n");
printf("查询完毕!\n");
}
else
{
printf("password错误,查询失败\n");
}
}

void transfer_accounts()
{
int id,id2;
int i,i2;
double money;
int pass;
printf("请输入转出账号:");
scanf("%d",&id);
i=search(id);
printf("姓名:%s",name[i]);
printf("password:");
pass=inputpass();
if (pass==user[i][1]&&user[i][2]==0)
{
printf("请输入转入账号:");
scanf("%d",&id2);
i2=search(id2);
printf("转账金额:");
scanf("%lf",&money);
if (money>balance[i])
{
printf("金额不足,转账失败!

\n");
}
else
{
printf("转账成功。剩余金额 %.2lf\n",balance[i]-money);
balance[i2]+=money;
}
}
}

void loss()
{
int id;
int i;
int pass;
printf("请输入账号:");
scanf("%d",&id);
i=search(id);
printf("姓名:%s",name[i]);
printf("password:");
pass=inputpass();
if (pass==user[i][1])
{
printf("剩余金额:%.2lf\n",balance[i]);
if (user[i][2]==0)
{
printf("当前状态:正常\n");
user[i][2]=1;
printf("挂失成功!

\n");
}
else if (user[i][2]==1)
{
printf("当前状态:挂失\n");
}
else
printf("当前状态:注销\n");
}
else
{
printf("password错误,挂失失败\n");
}
}

void unloss()
{
int id;
int i;
int pass;
printf("请输入账号:");
scanf("%d",&id);
i=search(id);
printf("姓名:%s",name[i]);
printf("password:");
pass=inputpass();
if (pass==user[i][1])
{
printf("剩余金额:%.2lf\n",balance[i]);
if (user[i][2]==0)
{
printf("当前状态:正常\n");
}
else if (user[i][2]==1)
{
printf("当前状态:挂失\n");
user[i][2]=0;
printf("解挂成功!

\n");
}
else
printf("当前状态:注销\n");
}
else
{
printf("password错误。解挂失败\n");
}
}

void change()
{
int id;
int i;
int pass,pass1,pass2;
printf("请输入账号:");
scanf("%d",&id);
i=search(id);
printf("姓名:%s",name[i]);
printf("password:");
pass=inputpass();
if (pass==user[i][1]&&user[i][2]!=2)
{
printf("新password:");
pass1=inputpass();
printf("再次输入:");
pass2=inputpass();
if (pass1==pass2)
{
user[i][1]=pass1;
}
else
{
printf("2次输入不对,改password失败\n");
}
}
else
{
printf("password不对!\n");
}
}

void update()
{
FILE *p;
int i=0;
if ((p=fopen("bank.txt", "w"))==NULL)
{
printf("bank.txt file cannot open!");
exit(0);
}
for(i=0; i<N; i++)
fprintf(p,"%d %s %d %lf %d\n",user[i][0], name[i], user[i][1], balance[i],user[i][2]);
fclose(p);
exit(0);
}












用了一下午才做好这个实践

真的是好累啊

只是最后測试完以后是十分的满足啊

后面还得改进些。得等歇息的时候弄了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐