银行卡管理系统

C语言实现简易银行卡管理系统

  • 用结构体数组存放用户信息
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<windows.h>
#define N 100

struct PERSON
{ char name[N];
  char pawd[N];
  char id[N]; 
  int num;
  int money;
  int status;
};
struct PERSON person[N];
struct PERSON record1[N];//记录存款 
struct PERSON record2[N];//记录取款 
int i,j,jine,num;
int a,b,count1=0,count2=0;
int cunkuanjine[100]; 
int qukuanjine[100]; 

功能函数实现个部分功能

void setpawd(char pawd[])//设置密码 
{              
 int i=0;
 printf("\t\t\t  请输入您的密码:");
 while(1)
 {
  pawd[i]=getch();
  if(pawd[i]!='\r')
  {
   printf("*");
      ++i;
	  }
  else break;
 }
 printf("\n");
 if(i>6||i<6) 
  {  

    printf("\t\t\t  您输入的密码格式错误,请重新输入!\n");
    setpawd(pazwd);
   }
 pawd[i]='\0';
}

void put_id(char id[])//输入身份证号 
{ 
 int i=0;
 printf("\t\t\t  请输入您的身份证号码(号码个数应为18位):");
 while(1)
 {
  id[i]=getch();
  if(id[i]!='\r')
  {
   printf("*");
      ++i;
	  }

  else break;
 }
 printf("\n");
 if(i>18||i<18)//
  { 
    printf("\t\t\t  您输入号码的格式错误,请重新输入!\n");
    put_id(id);}
 id[i]='\0';
}

int put_num()//输入卡号 
{
	int z=0;
    int m=-1;
// char pswd[100];
for(j=0;j<3;j++)
 {
    printf("\t\t\t  请输入您的卡号:");
    scanf("%d",&num);
    for(i=0;i<M;i++)
    {
	
    if(person[i].num==num&&person[i].status==0)
      {  return m=1;
          break;
		  }  }
		          // break;  执行到rjeturn语句处,整个程序便结束,不会执行下边的break语 
     printf("\t\t\t  您输入的卡号不存在,请重新输入\n");
 }
      
       if(j==3)
       {
         printf("\t\t\t  您已连续三次输入账号错误!\n");
         Sleep(1000);
         fflush(stdin);
         system("\t\t\t pause");
         menu();
	            }
    //  urn resultnum=-1; 
}
  
 
int put_pawd()//输入密码 
{ int m=-1;
 int z=0;
 char pawd[100];
 fflush(stdin);
 for(j=0;j<3;j++)
 {
    setpawd(pawd);
    for(i=0;i<M;i++)
    {
	
    if(strcmp(person[i].pawd,pawd)==0)
      {   return m=1;
          break;
		  }  }
		          // break;  执行到rjeturn语句处,整个程序便结束,不会执行下边的break语 
     printf("\t\t\t  您输入的密码不存在,请重新输入\n");
 }
 if(j==3) 
  {
    printf("\t\t\t  您已连续三次输入密码错误,系统将在三秒后自动退出!\n\n\n");      
  for(int i=0;i<3;i++)
{ 
    Sleep(1000);
   printf("\t\t\t\t\t  %d\r",3-i);
                        }
           }
           menu();
         //printf("\t\t\t  您输入的密码有误,请重新输入!\n");

    }
 
void kaihu()//开户 
{
	char id[N];
	int k=M;
    system("cls");
    put_id(id);
    printf("\t\t\t  请输入用户姓名: \n");
    printf("\t\t\t  ");
    scanf("%s",person[k].name);
    setpawd(person[k].pawd);//设置一个密码 
    while(1)
	{
        printf("\t\t\t  请输入初始金额(不少于一元!): \n");
        printf("\t\t\t  ");
        scanf("%d",&jine);
        fflush(stdin);
        if(jine>=1) 
		 break;
        else 
		 printf("\t\t\t  金额不足,请重新输入!\n");
 }
    person[k].money+=jine;
    srand(time(0));                               //使每次产生的随机数不同
 int m=rand();
 person[k].num=m%10000+1000000000;//随机产生的账户 
 person[k].status=0;
 printf("\t\t\t  您的账号为:%d\n",person[k].num);     
 printf("\t\t\t  开户成功,请牢记您的账户信息:\n ");
 printf("\t\t\t  姓名:%s\n\t\t\t  卡号:%d\n\t\t\t  密码:%s\n\t\t\t  余额:%d\n\t\t\t  当前状态:%d\n",person[k].name,person[k].num,person[k].pawd,person[k].money,person[k].status);
 printf("\t\t\t  请按任意键返回!"); 
 M++;
 getch();
system("cls");
menu();
}



void cunkuan()//存款 
{
 count1++;
 system("cls");
 printf("\n\n\n\n\n\n\n");
 int y=put_num(); 
 fflush(stdin);
 if(y==1)
 {
 
 int x=put_pawd();
 if(x==1)
 {
 
 printf("\t\t\t  请输入存款金额:");
    scanf("%d",&jine);
 person[i].money+=jine;
 printf("\t\t\t  您的余额为:");
 printf("%d\n",person[i].money);
 for(a=count1-1;a<count1;a++)
{
 cunkuanjine[a]=jine;
 record1[a].money=person[i].money;
strcpy(record1[a].name,person[i].name);
 record1[a].num=person[i].num;
strcpy(record1[a].pawd,person[i].pawd);

}
 
 printf("\t\t\t  存款成功按任意键返回!"); 
 getch();//从键盘上输入一个,不需要回车符号 
 system("cls");
 menu();
 

}}}

void qukuan()//取款 
{ 
 
  count2++;
  system("cls");
  printf("\n\n\n\n\n\n");
  int y=put_num();
  fflush(stdin);
  if(y==1) 
  {
  int x=put_pawd();
  if(x==1)
  {
  
  while(1)
  { 
   printf("\t\t\t  请输入您的取款金额: ");
   scanf("%d",&jine);
   if(jine>person[i].money)
   printf("\t\t\t  您的余额不足,请重新输入!\n");
   else
   break;
   }
   person[i].money-=jine;
   printf("\t\t\t  您的余额为 :");
   printf("%d\n",person[i].money);
    for(b=count2-1;b<count2;b++)
   {
   qukuanjine[b]=jine;
   record2[b].money=person[i].money;
   strcpy(record2[b].name,person[i].name);
   record2[b].num=person[i].num;
   strcpy(record2[b].pawd,person[i].pawd);
   }
   printf("\t\t\t  取款成功,请按任意键返回!");
   getch() ;
   system("cls");
   menu();
   }
}}

void guashi()          //挂失 
{
	system("cls");
    printf("\n\n\n\n\n\n\n");
    int num4,c;
	int m;
    char a[N+1][100];
    memset(a, 0, sizeof(a));
	int y=put_num();
	if(y==1)
	{
	int x=put_pawd();
	if(x==1)
	{
	
	printf("\t\t\t  确认请按Y/y,返回请按N/n\n  ");
	while(1){
        c=getch();
  if(c=='N'||c=='n')
  {
   system("cls");
   break;
  }
    if(c=='Y'||c=='y'){
	if(person[i].status==0)
        {
            person[i].status=1;
            printf("\t\t\t  挂失成功 请按任意键返回!\n");
            system("cls");break;
            c=getch();
            system("cls");break;
        }
    else if(person[i].status==1)
    {
        printf("\t\t\t  该账户已经处于挂失状态\n");
        system("cls");
        break;
	}
}
}
menu();
}}}

void jiegua()
{ system("cls");
  int i=0;
 for(i=0;i<M;i++)
    {
	
    if(person[i].status==1)
      {  
         person[i].status=0;
         for(j=0;j<3;j++)
      {
         printf("\t\t\t  请输入您的卡号:");
         scanf("%d",&num);
	   if(person[i].num!=num)
      {  
	  printf("\t\t\t  您输入的卡号不存在,请重新输入!\n");}
      else
	  {
	  
         printf("\t\t\t  恭喜您,解挂成功!\n");
         menu();
		 break;}
		    
		          // break;  执行到rjeturn语句处,整个程序便结束,不会执行下边的break语 
        }
       if(j==3)
       {
         printf("\t\t\t  您已连续三次输入账号错误!\n");
         person[i].status=1;
         
	            }
    //  urn resultnum=-1; 
}}}
        
  


void xiaohu()
{                          //销户 
	system("cls");
    printf("\n\n\n\n\n\n\n");
    int num5,c;
	int y=put_num();
	if(y==1)
	{
	int x=put_pawd();
	if(x==1)
	{
	printf("\t\t\t  您确定要注销您的账户?\n \t\t\t  确认请按Y/y,返回请按N/n  ");
	while(1)
	{
        c=getch();
  if(c=='N'||c=='n')
  {
   system("cls");
   break;
  }
    if(c=='Y'||c=='y')
	{
	for(;i<M;i++)
	{
	    person[i].num=person[i+1].num;
		strcpy(person[i].name,person[i+1].name);
		person[i].money=person[i+1].money;
		strcpy(person[i].pawd,person[i+1].pawd);
		person[i].status=person[i+1].status;
	}
M--;
	
    printf("\n\t\t\t  销户成功 请按任意键返回!\n");
    c=getch();
    system("cls");break;
	}
	else printf("\n\t\t\t  输入有误,请重新输入:");
	}
	menu();
}}}

int zhuanzhang()                                         //转账 
{
    system("cls");
    printf("\n\n\n\n\n\n\n");
    int num1,c;
    int y=put_num();//就是验证一下卡号 
    if(y==1)
    {
	int x=put_pawd();//验证一下密码 
    if(x==1)
    {
	
	printf("\t\t\t  请输入对方卡号:");
    scanf("%d",&num1);
    for(j=0;j<1000;j++){
        if(person[j].num==num1&&person[j].status==0)
        break;
        if(person[j].num==0||person[j].status==1){
            j=0;
            printf("\t\t\t  您输入的卡号不存在,请重新输入!\n");
            printf("\t\t\t  请输入对方卡号:");
            scanf("%d",&num1);
  }
 }
 if(num!=num1){
  while(1){
         printf("\t\t\t  请输入您的转账金额:");
         scanf("%d",&jine);
         if(jine>person[i].money)
                printf("\t\t\t  您的余额不足,请重新输入!\n");
         else break;
  }
 }
 else {
  printf("\t\t\t  转账失败,请按任意键返回!");
  getch();
  system("cls");
  return 0;
 }
 printf("\t\t\t  请确认您的转入用户及转账金额:\n");
 printf("\t\t\t  姓名:%s  卡号:%d  金额:%d",person[j].name,person[j].num,jine);
 printf("\n\t\t\t  确认转账请按Y/y,返回请按N/n");
 while(1){
        c=getch();
  if(c=='N'||c=='n'){
   system("cls");
   break;
  }
    if(c=='Y'||c=='y'){
        person[i].money-=jine;
        person[j].money+=jine;
        printf("\n\t\t\t  转账成功,是否显示您的余额(按Y/y显示余额,按任意键返回)");
        c=getch();
        if(c=='Y'||c=='y'){
            printf("\n\t\t\t  您的余额为:%d",person[i].money);
            printf("\n\t\t\t  交易完成 按任意键返回!"); 
            getch();
            system("cls");break;
            }
    else system("cls");break;
  }
   else printf("\n\t\t\t  输入有误,请重新输入:");
 }
 c=getch();
 menu();
}}}

void change_pawd()//修改密码 
{

	char pawd[6];
    int y = put_num();
    if(y==1)
    {
	
	  int x=put_pawd();
	  if(x==1)
	  {
	  
      printf("\t\t\t  请输入原密码:");
	  gets(pawd);
	  if (strcmp(person[i].pawd, pawd) == 0)
	    {
		 // printf("\t\t\t  输入新密码:");
		  fflush(stdin);
		  //astrcpy(person[i].pawd,pawd); 
		  
		 // setpawd(pawd);
		  //strcpy(person[i].pawd,pawd); 
		  gets(person[i].pawd);
		  if (strlen(person[i].pawd) == 6)

		   {
			printf("\t\t\t  新密码: ");
			puts(person[i].pawd);
			fflush(stdin);
			printf("\t\t\t  提示:新密码设置成功,以后请使用新密码登录!\n");
				getch();
		  }
		  else
		   {
		   	strcpy(pawd,person[i].pawd);
			system("cls");
			printf("\t\t\t  提示:修改失败,原因新密码不符合规定!\n");
			getch();
		   }
	    }
	  else
	    {
		 system("cls");
		 printf("\t\t\t  提示:修改失败,原因新密码不符合规定!\n");
		 getch();
	    }
   fflush(stdin);
   menu();	
   }
}}


void chayu()//查找余额 
{
	system("cls");//清屏
	printf("\n\n\n\n\n\n\n");
	int y = put_num();
	if(y==1)
	{
	int x=put_pawd();
	if(x==1)
	{
	
	printf("\t\t\t  您的余额为:");
	printf("%d\n", person[i].money);
	printf("\t\t\t  查询成功按任意键返回!\n");
	getch();//等待你按下任意键,再继续执行下面的语句
	system("cls");
	menu();
}}}



void chajiaoyi()//查询用户交易历史 

{
	int n;
    int y=put_num();
    if(y==1)
    {
	
	int x=put_pawd();
	if(x==1)
	{
	
	printf("\t\t\t  查询存款记录请输入1\n\t\t\t  查询取款记录请输入2\n\t\t\t  查询存款和取款记录请输入3\n");
	scanf("%d",&n);
	switch(n)
	{
		case 1 :{
	            	for(a=0;a<count1;a++)
	                   	printf("\t\t\t  存款记录:账号:%d\n姓名:%s\n存款金额: %d\n余额:%d\n",record1[a].num,record1[a].name,cunkuanjine[a],record1[a].money);
              	}break;
		case 2 :{
		            for(b=0;b<count2;b++)
		
		            	printf("\t\t\t  取款记录:账号:%d\n姓名:%s\n取款金额:%d\n余额:%d\n",record2[b].num,record2[b].name,qukuanjine[b],record2[b].money);
		        }break;
		case 3 :{
					for(a=0;a<count1;a++)
	                printf("\t\t\t  存款记录:账号:%d\n姓名:%s\n存款金额: %d\n余额:%d\n",record1[a].num,record1[a].name,cunkuanjine[a],record1[a].money);
              	    for(b=0;b<count2;b++)
	               printf("\t\t\t  取款记录:账号:%d\n姓名:%s\n取款金额:%d\n余额:%d\n",record2[b].num,record2[b].name,qukuanjine[b],record2[b].money);
			    }break;
				
	}
	
	menu();
	
	
   }}
}

``
利用文件存储数据

```c
/*读取文件内容*/
void readData()
{
	freopen("1.txt", "r", stdin);
	int i=0;
	while(scanf("%d %s %s %d %d\n",&person[i].num,person[i].name,&person[i].pawd,&person[i].money,&person[i].status)!=EOF)	i++;
	M=i;
	fclose(stdin);
	//cin.clear();
	freopen("CON", "r", stdin);
}
void writeData()
{
	freopen("1.txt","w",stdout);
	for(int i=0;i<M;i++)
		printf("%d  %s %s %d %d\n",person[i].num,person[i].name,person[i].pawd,person[i].money,person[i].status);
	fclose(stdout);
}

int main()
{ readData();
  menu();
  writeData();
  return 0;
}
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值