您的位置:首页 > 其它

2017上半年课程设计银行储蓄系统

2017-04-15 14:02 369 查看
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXNUMBER 10000
//银行卡的数据类型
struct Account
{
long num;//卡号
char name[10];//户主
char mima[7];//密码
double balance;//余额
int zhuangtai;//卡的状态 0:正常  1:冻结  2;销户  3:挂失
};
//银行中所有的卡存放的数组
struct Account a[MAXNUMBER];
//银行中开卡的数量
int  size=0;
//定义函数
int   firstnumber=10001;//第一张卡的卡号
FILE *fp;
int loginNumber=0;

void  weclome();//欢迎界面
void  login();//登陆界面
void  mainForm();//主界面
void  open();//开户功能
long  createnum();//卡号
int   find(long num);//根据卡号查找下标
void  deposit();//存款
void  showAccount(int position);//根据卡号展示卡的信息
void  cost();//取款
int   checkmima(char pass[]);//返回值0:正确1:密码位数不足六位 2:密码不是纯数字
void  nothing();//销户
void  readData();//取读文件中的数据
int  writeData();//写文件
int   checkzhuangtai();//检查银行卡状态
void   zhuan();//转账
void read();//查询界面
void lost();//挂失界面

void turnmain();//返回主界面

void main()
{
readData();
weclome();
login();
}
//欢迎界面
void weclome()
{
printf("+-----------------------------+\n");
printf("|                             |\n");
printf("|   欢迎登陆银行储蓄系统      |\n");
printf("|                             |\n");
printf("+-----------------------------+\n");
}
//登陆界面
void login()
{
char loginName[10];
char loginPwd[10];
printf("请输入用户名:");
scanf("%s",loginName);
printf("请输入密码:");
scanf("%s",loginPwd);
//
if(strcmp(loginName,"lundongcai")==0  && strcmp(loginPwd,"123")==0)
{
printf("登陆成功\n");
mainForm();
}
else
{
if(loginNumber==2)
{
printf("您输入密码三次错误,账户锁定\n");
exit(0);
}
else
{
printf("用户名或密码有误\n");
loginNumber++;
}
}
}
//主界面
void  mainForm()
{
int order;
printf("+----------------------------------+\n");
printf("|  1.开户            5.存款        |\n");
printf("|  2.取款            6.查询        |\n");
printf("|  3.挂失            7.销户        |\n");
printf("|  4.转账            8.退出        |\n");
printf("+----------------------------------+\n");
printf("请输入操作指令\n");
scanf("%d",&order);
switch(order)
{
case 1:
open();
//开户
break;
case 2:
cost();
//取款
break;
case 3:
lost();
//挂失
break;
case 4:
zhuan();
//转账
break;
case 5:
deposit();
//存款
break;
case 6:
read();
//查询
break;
case 7:
nothing();
//销户
break;
case 8:
//退出
exit(0);
break;
default:
printf("操作指令有误,请重新输入\n");
}
}
//开户界面
void open()
{
char accName[10];
char accmima[7];
char secmima[7];
double accBalance;
char sorder;
int state;
printf("请输入户主名");
scanf("%s",accName);
printf("请输入密码");
scanf("%s",accmima);
printf("请再次输入您的密码:");
scanf("%s",secmima);
state=checkmima(accmima);
if(state==1)
{
printf("密码不足六位,请重新输入\n");
open();
}
else if(state==2)
{
printf("密码不是纯数字,请重新输入\n");
open();

}
printf("请输入存款金额");
scanf("%lf",&accBalance);
if(strcmp(accmima,secmima)==0)//
{
//2次输入的密码一致
//将卡的信息存入数组
a[size].num=createnum();
strcpy(a[size].name,accName);
strcpy(a[size].mima,accmima);
a[size].balance=accBalance;
a[size].zhuangtai=0;
size++;
writeData();
printf("开户成功\n");
showAccount(size-1);
printf("请输入y继续开户,任意键返回主菜单\n");
fflush(stdin);//清空缓冲区
scanf("%c",&sorder);
if(sorder=='y')
{
open();
}
else
{

mainForm();
}

}
else
{
printf("输入的密码不一致,请重新操作\n");
open();
}

}
//卡号
long createnum()
{
if(size==0)
{
//第一次生成卡号
return  firstnumber;
}
else
{
return a[size-1].num+1;
}
}
//根据卡号查找下标

//function:根据卡号查找该卡下标
//return:该卡下标若为-1,则卡号输入有误

int find(long num)
{
int i,position=-1;
for(i=0; i<size; i++)
{
if(a[i].num==num)
{
position=i;
break;
}
}
return position;

}

int 	checkzhuangtai(int position)
{
int j;
if(a[position].zhuangtai==0)
{
j=0;
}
else if(a[position].zhuangtai==1)
{
j=1;
}
else
{
j=2;
}
return j;

}

//存款界面
void deposit()
{
long num;
double accBalance;
int position;
char sorder;
int j;
printf("请输入存款卡号:");
scanf("%ld",&num);
printf("请输入存款金额:");
scanf("%lf",&accBalance);
position=find(num);//
//判断该卡是否存在
if(position==-1)
{
//该卡不存在
printf("你输入的卡号有误,请重新输入\n");
deposit();
}
else if(position!=-1)
{
j=checkzhuangtai(position);
if(j==1)
{
printf("您的银行卡属于冻结状态,无法存款\n");
deposit();
}
else if(j==2)
{
printf("您的银行卡属于销户状态,无法进行存款\n");
deposit();
}
else if(j==3)
{
printf("您的银行卡已经挂失,无法进行存款\n");
deposit();
}
else if(j==0)
{
//该卡存在
//存款前展示卡的信息
showAccount(position);
a[position].balance=a[position].balance+accBalance;
//存款后展示卡的信息
showAccount(position);
writeData();
printf("请输入y继续存款,按任意键返回主菜单\n");
fflush(stdin);//清空缓冲区
scanf("%c",&sorder);
if(sorder=='y')
{
open();
}
else
{
mainForm();
}
}

}
}
//展示用户信息界面
void showAccount(int position)
{
printf("+--------------------------------------+\n");
printf("|%-6s|%-8s|%-7s|%-9s|%-4s|\n","卡号","户主","密码","金额","状态");
printf("+--------------------------------------+\n");
if(a[position].zhuangtai==0)
{
printf("|%-6ld|%-8s|%-7s|%-9.2lf|%-4s|\n",a[position].num,a[position].name,a[position].mima,a[position].balance,"正常");
}
else if(a[position].zhuangtai==1)
{
printf("|%-6ld|%-8s|%-7s|%-9.2lf|%-4s|\n",a[position].num,a[position].name,a[position].mima,a[position].balance,"冻结");
}
else if(a[position].zhuangtai==2){
printf("|%-6ld|%-8s|%-7s|%-9.2lf|%-4s|\n",a[position].num,a[position].name,a[position].mima,a[position].balance,"销户");
}
else if(a[position].zhuangtai==3){
printf("|%-6ld|%-8s|%-7s|%-9.2lf|%-4s|\n",a[position].num,a[position].name,a[position].mima,a[position].balance,"挂失");
}

printf("+--------------------------------------+\n");
}
//取款界面
void  cost()
{
long num;
char accmima[7];
int position;
double accBalance;
char sorder;
printf("请输入取款卡号:");
scanf("%ld",&num);
printf("请输入你的银行卡密码");
scanf("%s",accmima);
printf("请输入取款金额:");
scanf("%lf",&accBalance);
position=find(num);
//判断该卡是否存在
if(position==-1)
{
printf("你输入的卡号有误,请重新输入\n");
cost();
}
else if(strcmp(a[position].mima,accmima)==0)
{
if(a[position].balance<accBalance)
{
printf("你的余额已经不足,请及时存款\n");
}
else
{
//存款前展示卡的信息
showAccount(position);
a[position].balance=a[position].balance-accBalance;
/
4000
/取款后展示卡的信息
showAccount(position);
writeData();
printf("请输入y继续取款,按任意键返回主菜单\n");
fflush(stdin);//清空缓冲区
scanf("%c",&sorder);
if(sorder=='y')
{
cost();
}
else
{
mainForm();
}
}
}
else{
printf("您输入的密码有误,请重新输入\n");
cost();

}

}
int checkmima(char pass[])
//返回值0:正确1:密码位数不足六位 2:密码不是纯数字
{
int state=0,i;
if(strlen(pass)==6)
{
//密码位数是六位数
for(i=0; i<6; i++)
{
if(pass[i]<'0'||pass[i]>'9')
{
state=2;
break;
}
}
}
else
{
//
state=1;
}
return state;
}
void   nothing()
{
int position;
char mima[7];
long  num;
char sorder;
printf("请输入您要销户的的银行卡号");
scanf("%ld",&num);
printf("请输入您的密码");
scanf("%s",mima);
position=find(num);//判断该卡是否存在
if(position==-1)
{
//该卡不存在
printf("你输入的卡号有误,请重新输入\n");
nothing();
}
else
{
//该卡存在
if(strcmp(a[position].mima,mima)!=0)
{
printf("输入密码错误,请从新输入\n");
nothing();
}
else
{
//存款前展示卡的信息
showAccount(position);
a[position].balance=0;
a[position].zhuangtai=2;
showAccount(position);
writeData();
printf("请输入y继续存款,按任意键返回主菜单\n");
fflush(stdin);//清空缓冲区
scanf("%c",&sorder);
if(sorder=='y')
{
open();
}
else
{
mainForm();
}
}

}
}
void readData()
{
int i=0;
//1.打开文件
fp=fopen("new.txt","r+");
//判断文件打开是否有问题
if(fp==NULL){
printf("文件打开出现错误");
exit(1);
}
//2.读取文件
while(!feof(fp))//feof这个函数在读到头时返回真,即非零值
{
fscanf(fp,"%ld %s %s %lf %d\n",&a[i].num,a[i].name,a[i].mima,&a[i].balance,&a[i].zhuangtai);
//printf("|%-6ld|%-8s|%-7s|%-9.2lf|%-4d|\n",a[i].num,a[i].name,a[i].mima,a[i].balance,a[i].zhuangtai);
if(a[i].num!=0){
i++;
size=i;
}
}
//3.关闭文件
fclose(fp);
}

int writeData()
{
int i;
//1.打开文件
fp=fopen("new.txt","w+");
//判断文件打开是否有问题
if(fp==NULL){
printf("文件打开出现错误");
exit(1);
}
//2.写文件
for(i=0;i<size;i++){
fprintf(fp,"%ld %s %s %lf %d\n",a[i].num,a[i].name,a[i].mima,a[i].balance,a[i].zhuangtai);
}
//3.关闭文件
fclose(fp);
return 0;
}
//转账

void zhuan()
{
long firstNumber,secNumber;
char pass[7];
double accBalance;
char sorder;
int fistPosition,secPosition;
printf("请输入转出方卡号:\n");
scanf("%ld",&firstNumber);
printf("请输入转出方密码:\n");
scanf("%s",pass);
printf("请输入转入方卡号:\n");
scanf("%ld",&secNumber);
printf("请输入转出金额:\n");
scanf("%lf",&accBalance);
//查找转出方卡号的下标
fistPosition=find(firstNumber);
secPosition=find(secNumber);
if(fistPosition==-1){
//转出方卡号不存在
printf("转出方卡号输入错误,请重新操作\n");
zhuan();
}else if(secPosition==-1){
//转入方卡号不存在
printf("转入方卡号输入错误,请重新操作\n");
zhuan();
}else if(strcmp(a[fistPosition].mima,pass)!=0){
//密码不对的时候
printf("转出方密码输入错误,请重新操作\n");
zhuan();
}else if(a[fistPosition].zhuangtai!=0){
//转出方卡不正常
printf("转出方卡不正常,请重新操作\n");
zhuan();
}else if(a[secPosition].zhuangtai!=0){
//转入方卡不正常
printf("转入方卡不正常,请重新操作\n");
zhuan();
}else if(a[fistPosition].balance<accBalance){
//金额不足的时候
printf("转账金额不足,请重新操作\n");
zhuan();
}else{
printf("转账前卡的信息如下:\n");
showAccount(fistPosition);
//输出方金额减少
a[fistPosition].balance-=accBalance;
//输入方金额增加
a[secPosition].balance+=accBalance;
printf("转账后卡的信息如下:\n");
showAccount(fistPosition);
//写
writeData();
printf("输入y继续操作,输入其他字符返回主菜单\n");
//清空缓冲区
fflush(stdin);
scanf("%c",&sorder);
if(sorder=='y'){
zhuan();
}else{
mainForm();
}
}
}
//查询界面
void read()
{
int position;
char mima[7];
long  num;
char sorder;
printf("请输入您的银行卡卡号:\n");
scanf("%ld",&num);
printf("请输入您的银行卡密码:\n");
scanf("%s",mima);
position=find(num);
if(position==-1)
{
printf("您输入的卡号有误,请重新输入:\n");
read();
}
else if(strcmp(a[position].mima,mima)!=0){
printf("您输入的密码有误,请重新输入\n");
read();
}
else
{
showAccount(position);
}
printf("输入y继续操作,输入其他字符返回主菜单\n");
//清空缓冲区
fflush(stdin);
scanf("%c",&sorder);
if(sorder=='y'){
read();
}else{
mainForm();
}

}
void lost()
{
int position;
char mima[7];
long  num;
char sorder;
printf("请输入您的银行卡卡号:\n");
scanf("%ld",&num);
printf("请输入您的银行卡密码:\n");
scanf("%s",mima);
position=find(num);
if(position==-1)
{
printf("您输入的卡号有误,请重新输入:\n");
lost();
}
else if(strcmp(a[position].mima,mima)!=0){
printf("您输入的密码有误,请重新输入\n");
lost();
}
else
{
a[position].zhuangtai=3;
showAccount(position);
writeData();
}
printf("输入y继续操作,输入其他字符返回主菜单\n");
//清空缓冲区
fflush(stdin);
scanf("%c",&sorder);
if(sorder=='y'){
lost();
}else{
mainForm();
}

}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: