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

#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;
                //取款后展示卡的信息
                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();
	}

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值