用C语言设计简易银行系统

简易银行系统

此银行系统基于C语言,实现了开卡、读卡、转账、存钱、取钱、存文档、都文档以及密码三次输入机会等基本功能。比较简单,容易理解,适合新手学习。(所用软件:DEV-C++)

1. 实现账户用链表表示

  struct band{
  char cardname[20];
  char name[20];
  char mima[6];
  double money;
  struct band *next;
};
struct band *head,*tail,*temp;
void init(){
  head=NULL;
  tail=NULL;
  temp=NULL;
}

2.开卡

void createCard(){
	//开始产生结点 
    char a[20];
    printf("\n=======欢迎您使用开卡功能:========\n");
    printf("\n=======请输入您的卡号:========\n");
    scanf("%s",a);
    
	//卡号不可重复 
    struct band *pd;
	pd=head;
    while(pd!=NULL){
		//
    if(strcmp(a,pd->cardname)==0){
				printf("您输入的卡号已存在,请重新输入。\n");
				scanf("%s",a);
				pd=head;
				//pd=pd->next;
			}else{
				pd=pd->next;
			}
}      
          if(pd==NULL){
				printf("可开卡!请再次输入:\n");
			}
  
    temp=(struct band *)malloc(sizeof(struct band)); 
    temp->next=NULL;
    scanf("%s",temp->cardname );
    printf("\n=======请输入您的姓名:========\n");
    scanf("%s",temp->name );
    printf("\n=======请输入您的密码:========\n");
    scanf("%s",temp->mima );
    printf("\n=======请输入您的余额:========\n");
    scanf("%lf",&temp->money );
    //节点已产生 ,加入到链表中
    if(head==NULL){
			head=temp;
			tail=temp;
		   }else{
			tail->next=temp;
			tail =tail->next ;
		   } 
    write(); 
}

3.读卡(查询)

void query(){
    printf("\n=======欢迎您使用查询功能:========\n");
    char a[20];
    char b[20];
    char c[6];
    int i; 
    temp=head;//temp从头开始 
    printf("\n=======请输入您的卡号:========\n");
    scanf("%s",a);	
    while(1){
    	
       if(strcmp(a,temp->cardname)==0){
    	printf("您输入的卡号正确,请输入您的姓名!\n");
			scanf("%s",b);
			if(strcmp(b,temp->name )==0){
				printf("您输入的姓名正确,请输入您的密码(您有三次机会)!\n");//密码三次机会验证 
				for(i=1;i<=3;i++){
					scanf("%s",c);
				if(strcmp(c,temp->mima )==0){
					printf("您输入的密码正确!\n");
					printf("您的余额是%lf\n",temp->money );
					break;
				}
				else{
					printf("您输入的密码不正确!\n");
					
				}
			}
				if(i>3){
					printf("您的密码错误!"); 
					break; 
				}
				
			}
			else{
				printf("您输入的姓名不正确!\n");
				break;
			}
			break;
	}else{
		temp=temp->next ;
	}
	if(temp==NULL){
		 	printf("您输入的卡号不正确!\n");
		 	break;
		}
}
}

4.存钱

void save(){

     printf("\n=======欢迎您使用存钱功能:========\n");
    char a[20];
    char b[20];
    char c[6];
    double d;
    int i;
    temp=head;
    printf("\n=======请输入您的卡号:========\n");
    scanf("%s",a);
   while(1){
       if(strcmp(a,temp->cardname)==0){
    	printf("您输入的卡号正确,请输入您的姓名!\n");
			scanf("%s",b);
			if(strcmp(b,temp->name )==0){
				printf("您输入的姓名正确,请输入您的密码(您有三次机会)!\n");//三次机会 
				for(i=1;i<=3;i++){
					scanf("%s",c);
					if(strcmp(c,temp->mima )==0){
					printf("您输入的密码正确!\n");
					printf("您的余额是%lf\n",temp->money );
					printf("您要存的钱数为:");
					scanf("%lf",&d);
					while(d<=0)
					{
						printf("您的输入有误!请重新输入。"); 
						scanf("%lf",&d); 
					} 
					temp->money =temp->money +d;
					printf("您此时的余额为:%lf",temp->money );
					write();
							break;
				}else{
					printf("您的密码错误,请重新输入。您还有%d次机会。\n",3-i); 
				}
			}
				if(i>3){
					printf("您输入的密码不正确!\n");
					break;
				}
			}
			else{
				printf("您输入的姓名不正确!\n");
				break;
			}
			break; 
	}else{
		temp=temp->next ;
	}
	if(temp==NULL){
		 	printf("您输入的卡号不正确!\n");
		 	break;
		}

}   
}

5.取钱

void withdraw(){
     printf("\n=======欢迎您使用取钱功能:========\n");
    char a[20];
    char b[20];
    char c[6];
    double d;
    int i; 
    temp=head;
    printf("\n=======请输入您的卡号:========\n");
    	scanf("%s",a);
    while(1){
       if(strcmp(a,temp->cardname)==0){
    	printf("您输入的卡号正确,请输入您的姓名!\n");
			scanf("%s",b);
			if(strcmp(b,temp->name )==0){
				printf("您输入的姓名正确,请输入您的密码(您有三次机会)!\n");
				for(i=1;i<=3;i++){
					scanf("%s",c);
				if(strcmp(c,temp->mima )==0){
					printf("您输入的密码正确!\n");
					printf("您的余额是%lf\n",temp->money );
					printf("您要取的钱数为:");
					scanf("%lf",&d);
					if(d>temp->money ){
						printf("您的余额不足!请重新输入:");
						scanf("%lf",&d); 
					}
					temp->money =temp->money -d;
					printf("您此时的余额为:%lf",temp->money );
					write();
					break;
				}
				else{
					printf("您输入的密码错误!您还有%d次机会。\n",3-i);
				}
				}
				if(i>3){
					printf("您输入的密码不正确!\n");
					break;
				}
			}
			else{
				printf("您输入的姓名不正确!\n");
				break;
		}
		break;
	}else{
		temp=temp->next ;
	}
	if(temp==NULL){
		 	printf("您输入的卡号不正确!\n");
		 	break;
		}
}
}

6.转账

void zhuanzhang(){
	 printf("\n=======欢迎您使用转账功能:========\n");
    char a[20];
    char b[20];
    char c[6];
    char e[20];
    double d;
    int i;
    temp=head;
    struct band *pd; 
	printf("欢迎使用转账服务!\n");
	printf("请输入您的卡号:");
	scanf("%s",a); 
	while(1){
	 	if(strcmp(a,temp->name)==0){
	 		printf("您输入的卡号正确,请输入您的姓名!\n");
	 		scanf("%s",b);
	 		if(strcmp(b,temp->cardname)==0){
			 
	 			printf("您输入的姓名正确,请输入密码(您有三次机会)!\n");
	 			for(i=1;i<=3;i++){
	 				scanf("%s",c);
	 			if(strcmp(c,temp->mima)==0){
	 			printf("您输入的密码正确,请输入要转账人的账号!\n");
	 			scanf("%s",e);
	 		    pd=head;
	 		    while(1){
	 			if(strcmp(e,pd->cardname)==0){
	 				printf("您转账人的卡号在开卡当中!\n");
	 				printf("请输入您要转入的钱数(退出请按-1)!\n");
	 				scanf("%lf",&d);
	 				if(d>temp->money ){
	 					printf("您的余额不足,请重新输入。"); 
	 				
					 }else{
					 	temp->money=temp->money -d;
					 	pd->money =pd->money +d;
					 	printf("您此时的余额为:%lf元",temp->money);
					 	break;
					 }
	 				if(d==-1){
	 	             break;
                    }
	 					}else{
				    pd=pd->next ;	 	 
				}
				if(pd==NULL){
					printf("您输入的转账人的卡号不在我们开的卡当中!\n");
					break;
				}
			}
			break; 
		}else{
		printf("您的密码不正确!您还有%d次机会。",3-i); 
		}
				 } 
	 	if(i>3){
					printf("您输入的密码不正确!\n");
					break;
				}		
       }else{
			printf("您的姓名错误!"); 
			break;
    }
	break; 
	}
	else{
       	temp=temp->next ;
	   }
	   if(temp==NULL){
	   	printf("您的卡号不存在!"); 
	   	break;
	   }   
}
   write();

}

7.修改密码

void change(){
	printf("\n=======欢迎您使用修改密码功能:========\n");
    char a[20];
    char b[20];
    char c[6];
    int i; 
    temp=head;
    printf("\n=======请输入您的卡号:========\n");
    scanf("%s",a);	
    while(1){
    	
       if(strcmp(a,temp->cardname)==0){
    	printf("您输入的卡号正确,请输入您的姓名!\n");
			scanf("%s",b);
			if(strcmp(b,temp->name )==0){
				printf("您输入的姓名正确,请输入您的密码!(您有三次机会)\n");
				for(i=1;i<=3;i++){
					scanf("%s",c);
				if(strcmp(c,temp->mima )==0){
					printf("您输入的密码正确!\n");
					printf("请输入新的密码:");
					scanf("%s",temp->mima );
					printf("\n您的新密码为:%s",temp->mima ); 
					break; 
				}
				else{
					printf("您输入的密码不正确!您还有%d次机会\n",3-i);
				}
				}
				if(i>3){
					printf("您输入的密码不正确!\n");
					break;
				}
			}
			else{
				printf("您输入的姓名不正确!\n");
				break;
			}
			break;
	}else{
		temp=temp->next ;
	}
	if(temp==NULL){
		 	printf("您输入的卡号不正确!\n");
		 	break;
		}
}
write();
} 

8.写入文件

void write(){
	FILE *fp=fopen("2.txt","w");
	temp=head;
	while(temp!=NULL){
		fprintf(fp,"%s %s %s %lf\n",temp->cardname,temp->name,temp->mima,temp->money);
		temp=temp->next;
	}
	fclose(fp);
}

9.读出文件

void read(){
	int flag=0;
	FILE *fp=fopen("2.txt","r");
	init();
	while(1){
		temp=(struct band *)malloc(sizeof(struct band));
		flag=fscanf(fp,"%s %s %s %lf",temp->cardname,temp->name,temp->mima,&temp->money);
		if(flag==-1){
			break;
		}else{
			temp->next=NULL;
		    if(head==NULL){
			head=temp;
			tail=temp;
		   }else{
			tail->next=temp;
			tail =tail->next ;
		   } 
		}
	}
	fclose(fp);
}

基本功能如上,下面是

全部代码

//银行卡管理系统
//实现功能:开卡  查询内容 存钱 取钱 转账 修改密码服务
//运用链表 指针 循环 数组 写入文件 读取文件等功能 
#include<stdio.h>
#include<malloc.h>
#include<string.h>
//结构体 实现账户用链表表示 
  struct band{
  char cardname[20];
  char name[20];
  char mima[6];
  double money;
  struct band *next;
};
struct band *head,*tail,*temp;
void init(){
  head=NULL;
  tail=NULL;
  temp=NULL;
}
//写入文件
void write(){
	FILE *fp=fopen("2.txt","w");
	temp=head;
	while(temp!=NULL){
		fprintf(fp,"%s %s %s %lf\n",temp->cardname,temp->name,temp->mima,temp->money);
		temp=temp->next;
	}
	fclose(fp);
}
//读出文件 
void read(){
	int flag=0;
	FILE *fp=fopen("2.txt","r");
	init();
	while(1){
		temp=(struct band *)malloc(sizeof(struct band));
		flag=fscanf(fp,"%s %s %s %lf",temp->cardname,temp->name,temp->mima,&temp->money);
		if(flag==-1){
			break;
		}else{
			temp->next=NULL;
		    if(head==NULL){
			head=temp;
			tail=temp;
		   }else{
			tail->next=temp;
			tail =tail->next ;
		   } 
		}
	}
	fclose(fp);
}
//提示信息 
void printUsage(){
   printf("\n\t=======欢迎您使用白王银行=======\n");
   printf("\n\t=======开卡请按1========\n");
   printf("\n\t=======查询请按2========\n");
   printf("\n\t=======存钱请按3========\n");
   printf("\n\t=======取钱请按4========\n");
   printf("\n\t=======转账请按5========\n");
   printf("\n\t=======读文档请按6========\n");
   printf("\n\t=======修改密码请按7========\n");
   printf("\n\t=======结束请按0========\n");
   printf("\n\t=======请输入您的选择:========\n");
   printf("\n\t======(使用前请先使用读文档功能)========\n");
}
//开卡 
void createCard(){
	//开始产生结点 
    char a[20];
    printf("\n=======欢迎您使用开卡功能:========\n");
    printf("\n=======请输入您的卡号:========\n");
    scanf("%s",a);
    
	//卡号不可重复 
    struct band *pd;
	pd=head;
    while(pd!=NULL){
		//
    if(strcmp(a,pd->cardname)==0){
				printf("您输入的卡号已存在,请重新输入。\n");
				scanf("%s",a);
				pd=head;
				//pd=pd->next;
			}else{
				pd=pd->next;
			}
}      
          if(pd==NULL){
				printf("可开卡!请再次输入:\n");
			}
  
    temp=(struct band *)malloc(sizeof(struct band)); 
    temp->next=NULL;
    scanf("%s",temp->cardname );
    printf("\n=======请输入您的姓名:========\n");
    scanf("%s",temp->name );
    printf("\n=======请输入您的密码:========\n");
    scanf("%s",temp->mima );
    printf("\n=======请输入您的余额:========\n");
    scanf("%lf",&temp->money );
    //节点已产生 ,加入到链表中
    if(head==NULL){
			head=temp;
			tail=temp;
		   }else{
			tail->next=temp;
			tail =tail->next ;
		   } 
    write(); 
}

 //查询功能 
void query(){
    printf("\n=======欢迎您使用查询功能:========\n");
    char a[20];
    char b[20];
    char c[6];
    int i; 
    temp=head;//temp从头开始 
    printf("\n=======请输入您的卡号:========\n");
    scanf("%s",a);	
    while(1){
    	
       if(strcmp(a,temp->cardname)==0){
    	printf("您输入的卡号正确,请输入您的姓名!\n");
			scanf("%s",b);
			if(strcmp(b,temp->name )==0){
				printf("您输入的姓名正确,请输入您的密码(您有三次机会)!\n");//密码三次机会验证 
				for(i=1;i<=3;i++){
					scanf("%s",c);
				if(strcmp(c,temp->mima )==0){
					printf("您输入的密码正确!\n");
					printf("您的余额是%lf\n",temp->money );
					break;
				}
				else{
					printf("您输入的密码不正确!\n");
					
				}
			}
				if(i>3){
					printf("您的密码错误!"); 
					break; 
				}
				
			}
			else{
				printf("您输入的姓名不正确!\n");
				break;
			}
			break;
	}else{
		temp=temp->next ;
	}
	if(temp==NULL){
		 	printf("您输入的卡号不正确!\n");
		 	break;
		}
}
}
//存钱 
void save(){

     printf("\n=======欢迎您使用存钱功能:========\n");
    char a[20];
    char b[20];
    char c[6];
    double d;
    int i;
    temp=head;
    printf("\n=======请输入您的卡号:========\n");
    scanf("%s",a);
   while(1){
       if(strcmp(a,temp->cardname)==0){
    	printf("您输入的卡号正确,请输入您的姓名!\n");
			scanf("%s",b);
			if(strcmp(b,temp->name )==0){
				printf("您输入的姓名正确,请输入您的密码(您有三次机会)!\n");//三次机会 
				for(i=1;i<=3;i++){
					scanf("%s",c);
					if(strcmp(c,temp->mima )==0){
					printf("您输入的密码正确!\n");
					printf("您的余额是%lf\n",temp->money );
					printf("您要存的钱数为:");
					scanf("%lf",&d);
					while(d<=0)
					{
						printf("您的输入有误!请重新输入。"); 
						scanf("%lf",&d); 
					} 
					temp->money =temp->money +d;
					printf("您此时的余额为:%lf",temp->money );
					write();
							break;
				}else{
					printf("您的密码错误,请重新输入。您还有%d次机会。\n",3-i); 
				}
			}
				if(i>3){
					printf("您输入的密码不正确!\n");
					break;
				}
			}
			else{
				printf("您输入的姓名不正确!\n");
				break;
			}
			break; 
	}else{
		temp=temp->next ;
	}
	if(temp==NULL){
		 	printf("您输入的卡号不正确!\n");
		 	break;
		}

}   
}
//取钱 
void withdraw(){
     printf("\n=======欢迎您使用取钱功能:========\n");
    char a[20];
    char b[20];
    char c[6];
    double d;
    int i; 
    temp=head;
    printf("\n=======请输入您的卡号:========\n");
    	scanf("%s",a);
    while(1){
       if(strcmp(a,temp->cardname)==0){
    	printf("您输入的卡号正确,请输入您的姓名!\n");
			scanf("%s",b);
			if(strcmp(b,temp->name )==0){
				printf("您输入的姓名正确,请输入您的密码(您有三次机会)!\n");
				for(i=1;i<=3;i++){
					scanf("%s",c);
				if(strcmp(c,temp->mima )==0){
					printf("您输入的密码正确!\n");
					printf("您的余额是%lf\n",temp->money );
					printf("您要取的钱数为:");
					scanf("%lf",&d);
					if(d>temp->money ){
						printf("您的余额不足!请重新输入:");
						scanf("%lf",&d); 
					}
					temp->money =temp->money -d;
					printf("您此时的余额为:%lf",temp->money );
					write();
					break;
				}
				else{
					printf("您输入的密码错误!您还有%d次机会。\n",3-i);
				}
				}
				if(i>3){
					printf("您输入的密码不正确!\n");
					break;
				}
			}
			else{
				printf("您输入的姓名不正确!\n");
				break;
		}
		break;
	}else{
		temp=temp->next ;
	}
	if(temp==NULL){
		 	printf("您输入的卡号不正确!\n");
		 	break;
		}
}
}
//转账 
void zhuanzhang(){
	 printf("\n=======欢迎您使用转账功能:========\n");
    char a[20];
    char b[20];
    char c[6];
    char e[20];
    double d;
    int i;
    temp=head;
    struct band *pd; 
	printf("欢迎使用转账服务!\n");
	printf("请输入您的卡号:");
	scanf("%s",a); 
	while(1){
	 	if(strcmp(a,temp->name)==0){
	 		printf("您输入的卡号正确,请输入您的姓名!\n");
	 		scanf("%s",b);
	 		if(strcmp(b,temp->cardname)==0){
			 
	 			printf("您输入的姓名正确,请输入密码(您有三次机会)!\n");
	 			for(i=1;i<=3;i++){
	 				scanf("%s",c);
	 			if(strcmp(c,temp->mima)==0){
	 			printf("您输入的密码正确,请输入要转账人的账号!\n");
	 			scanf("%s",e);
	 		    pd=head;
	 		    while(1){
	 			if(strcmp(e,pd->cardname)==0){
	 				printf("您转账人的卡号在开卡当中!\n");
	 				printf("请输入您要转入的钱数(退出请按-1)!\n");
	 				scanf("%lf",&d);
	 				if(d>temp->money ){
	 					printf("您的余额不足,请重新输入。"); 
	 				
					 }else{
					 	temp->money=temp->money -d;
					 	pd->money =pd->money +d;
					 	printf("您此时的余额为:%lf元",temp->money);
					 	break;
					 }
	 				if(d==-1){
	 	             break;
                    }
	 					}else{
				    pd=pd->next ;	 	 
				}
				if(pd==NULL){
					printf("您输入的转账人的卡号不在我们开的卡当中!\n");
					break;
				}
			}
			break; 
		}else{
		printf("您的密码不正确!您还有%d次机会。",3-i); 
		}
				 } 
	 	if(i>3){
					printf("您输入的密码不正确!\n");
					break;
				}		
       }else{
			printf("您的姓名错误!"); 
			break;
    }
	break; 
	}
	else{
       	temp=temp->next ;
	   }
	   if(temp==NULL){
	   	printf("您的卡号不存在!"); 
	   	break;
	   }   
}
   write();

}
//修改密码 
void change(){
	printf("\n=======欢迎您使用修改密码功能:========\n");
    char a[20];
    char b[20];
    char c[6];
    int i; 
    temp=head;
    printf("\n=======请输入您的卡号:========\n");
    scanf("%s",a);	
    while(1){
    	
       if(strcmp(a,temp->cardname)==0){
    	printf("您输入的卡号正确,请输入您的姓名!\n");
			scanf("%s",b);
			if(strcmp(b,temp->name )==0){
				printf("您输入的姓名正确,请输入您的密码!(您有三次机会)\n");
				for(i=1;i<=3;i++){
					scanf("%s",c);
				if(strcmp(c,temp->mima )==0){
					printf("您输入的密码正确!\n");
					printf("请输入新的密码:");
					scanf("%s",temp->mima );
					printf("\n您的新密码为:%s",temp->mima ); 
					break; 
				}
				else{
					printf("您输入的密码不正确!您还有%d次机会\n",3-i);
				}
				}
				if(i>3){
					printf("您输入的密码不正确!\n");
					break;
				}
			}
			else{
				printf("您输入的姓名不正确!\n");
				break;
			}
			break;
	}else{
		temp=temp->next ;
	}
	if(temp==NULL){
		 	printf("您输入的卡号不正确!\n");
		 	break;
		}
}
write();
} 
void main(){
    int op;
    while(1){
    printUsage();
    scanf("%d",&op);
    if(op==0){
     printf("\n========感谢您的使用,欢迎下次光临!=========\n");
     break;
    }
   switch(op){
   	case 1:
   		createCard();
   		break;
   	case 2:
   		query();	
   		break;
   	case 3:
   		save();
   		break;
   	case 4:
   		withdraw();
   		break;
   	case 5:
   		zhuanzhang();
   		break;	
   	case 6:
   		read();
   		printf("文件读取成功!"); 
   		break;
   	case 7:
   		change();
   		break;
   	default:
   		printf("您的输入有误!"); 
   }
   }
   
}

代码编写不易!!!如有借鉴,请点赞收藏!

  • 66
    点赞
  • 201
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
初学者 很浅的代码 系统说明: 银行前台处理系统包含开户、销户、存取业务。1)、开户功能中银行可以创建新用户,用户名可以重名,但是银行账号必须唯一。银行用户基本信息包括:用户名、账号、密码(初始密码都为000000)、身份证、创建时间、销户时间、销户标记、余额。开户后将开户信息存储到文件”user.dat”中。2)销户处理只需要更改用户销户标记即可。3)账务处理稍微复杂:a)账务处理菜单设计:(账号、姓名、身份证、发生额、存取标记、日期、余额)。b)工作流程:银行工作人员输入账号后,系统根据用户信息自动输出姓名、身份证、银行工作人员输入发生额(正数代表存,负数代表取,取钱时应检查用户是否透支,如透支给于提示。)存取标记根据发生额自动生成(1表示存,-1表示取)、日期(包含年月日时分)自动生成、余额自动更改, 输入完毕后,系统询问是否确定?是(1)否(0)。输入1,系统将此信息存入到文件”bankrecord.dat”中,bankrecord.dat记录发生的流水账信息。同时将用户信息中的余额进行更改。系统继续提问:是否继续记账?(1:继续0:退出记账系统银行客户自助系统包含:首先用户根据账号与初始密码进入自助系统。可以选择1)更改密码(密码应进行加密后,存储到“user.dat“文件中。2)查询余额。3)浏览对账单。浏览对账单稍显复杂:用户输入起始日期,和结束日期。系统在”bankrecord.dat”文件中进行查询,将符合条件的记录显示出来。显示项为:发生额、日期、余额。 功能扩展:银行主管子系统,用于管理普通工作人员的基本信息、银行存款总额、银行流水的发生等内容。自己扩展思路。客户查询功能可以扩展:只查取款业务、存款业务、某一天业务等。银行前台业务可以自己对账。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值