银行信贷管理系统

功能模块设计

          添加功能设计:

  添加分为两部分添加贷款用户基本信息和添加还贷用户基本信息。添加贷款基本信息中要求输入贷款编号、贷款人身份证号码、贷款人姓名、贷款金额、贷款年限。添加还贷用户基本信息要求输入一个贷款编号(要求对贷款编号进行检查,如果没有这条贷款,显示输入编号错误),还款编号、还款人身份证号码、还款人姓名、还款金额、所还贷款编号. 要求还款编号不能重复。其中用结构体来建立输入的用户信息的形式。分别存放在两个结构体数组中。

        查询功能设计:

查询贷款信息可以用输入贷款人身份证号码来进行,先查询是否存在贷款,如果存在显示该贷款人的所有贷款记录,如果不存在显示无记录。 

 还款记录:输入还款编号  调出还款用户信息  输出还款用户信息 

 程序设计语言课程设计报告  查询还贷记录通过输入贷款编号(要求对贷款编号进行检查,如果没有这条贷款,显示输入编号错误)进行,查看对该贷款的所有还贷信息。

 

  3.2 数据结构设计

1.在本程序中定义了两个结构体类型和数组,分别对应贷款记录和还款记录;

struct SDjl sd[max];   //存放申请贷款记录的结构体数组
struct HDjl hd[max];  //存放还贷记录的结构体数组

贷款记录中包含以下数据:

贷款编号、贷款人身份证号码、贷款人姓名、贷款金额、贷款年限
struct SDjl              //用于记录申请贷款数据的结构体 
{
int num;                     //贷款编号
char IDCard[20];    //身份证号
char name[20];     //贷款姓名
float jinE;        //贷款金额
int nianxian;      //贷款年限
};
 
还贷记录中包含以下数据:
还款编号、还款人身份证号码、还款人姓名、还款金额、所还贷款编号
struct HDjl              //用于记录还贷数据的结构体 
{
int num;        //贷款编号
char IDCard[20];     //身份证号
char name[20];     //还款姓名
float jinE;         //贷款金额
int HDnum;       //还款编号
};

 

2. 定义两个全局变量z和x;用于结构体数组的下标,由于函数要循环调用,结构体的下标不能乱


  3.3 函数功能描述

(1)ShenDai()函数:函数原型:int ShenDai(struct SDjl sd[]);用   于实现申请贷款的功能,将输入的贷款信息存放到结构体数组     中; 
   
 (2)HuanDai()函数:函数原型  型:int HuanDai(struct SDjl sd[],struct HDjl hd[]);用于实现还贷功能,  并将还贷记录存放到结构体数组中,调用时,首先查询是否存在这笔  贷款记录,而且还贷编号不能重复; 
   
 (3)ChaDai()函数:函数原  型:int ChaDai(struct SDjl sd[]); 
   
  用于实现查询贷款记录的函数,输入身份证号,输入这个身份证浩所  有的贷款记录,没有就显示无记录 
   
(4)ChaHuan()函数:函数原型:int ChaHuan(struct HDjl hd[]); 
   
  用于查询还贷记录的函数,输入贷款的编号,查询这笔贷款的还贷记  录,没有则显示无记录 
   
(5)save()函数:函数原型:              void save(struct SDjl sd[],struct HDjl hd[]); 
   
  用于系统将要退出时,将当前栈上的贷款记录和还贷记录写入文件   中,以二进制的形式写入,并存入磁盘: 
   
(6)read()函数:函数原  型:void read(struct SDjl sd[],struct HDjl hd[]); 
   
  用于程序启动时,如果是第一次启动,没人文件形式的贷款记录则返  回,如果不是第一次,则将上一次的贷款记录和还款记录从文件中读  入结构体数组; 
   
(7)main()函数:函数原型:void main(); 
   
  为主函数

 

程序实现

       源码分析



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 100

int z=0,x=0;   //定义全局变量

struct SDjl             //用于记录申请贷款数据的结构体 
{
	int num;
	char IDCard[20];
	char name[20];
	float jinE; 
	int nianxian;
};

struct HDjl             //用于记录还贷数据的结构体 
{
	int num;
	char IDCard[20];
	char name[20];
	float jinE; 
	int HDnum;
};
  //2 	main函数
  //声明要使用的函数,定义两个结构体数组用于存放贷款记录和还贷记录,调用read函数,如若是第二次使用,将上一次保存的记录读取并存放到数组中,循环调用switch语句显示功能主界面;
int main()
{
	int ShenDai(struct SDjl sd[]);     					//1.申请贷款
	int HuanDai(struct SDjl sd[],struct HDjl hd[]);     //2.还贷 
	int ChaDai(struct SDjl sd[]);      					//3.查询贷款记录
	int ChaHuan(struct HDjl hd[]);     					//4.查询还贷记录
	void save(struct SDjl sd[],struct HDjl hd[]);//将申贷记录和还贷记录写入磁盘文件
	void read(struct SDjl sd[],struct HDjl hd[]);//第二次打开系统时读取上一次的记录
	
	struct SDjl sd[max];
	struct HDjl hd[max];
	
	read(sd,hd);
	
	int n;
	while(1)
	{
		printf("\n---------------------------------\n");
		printf("\n        银行信贷管理平台\n");
		printf("\n---------------------------------\n");
		printf("\n        1. 申 请 贷 款\n");
		printf("\n        2.还        贷\n");
		printf("\n        3.查询贷款记录\n");
		printf("\n        4.查询还贷记录\n");
		printf("\n        0. 退 出 系 统\n"); 
		printf("\n---------------------------------\n");
		printf("\n");
		printf(" 请输入你要选择的功能编号(0-4):");   //界面 
		
		scanf("%d",&n);    //使用数字选择功能选项
		switch(n)
		{
			case 0: save(sd,hd);    
					printf("\n*********************************\n");
					printf("\n   已退出系统,感谢您的使用 \n");
					printf("\n*********************************\n");
					return 0;      //退出系统 
					
			case 1: system("cls");
				    ShenDai(sd);
					system("cls");
					break;
					
			case 2: system("cls");
					HuanDai(sd,hd);
					system("cls");
					break;
					
			case 3: system("cls");
					ChaDai(sd);
					system("cls");
					break;
			
			case 4: system("cls");
					ChaHuan(hd);
					system("cls");
					break;
			
			default: printf("\n没有这个功能\n");

		}
	}
}
int ShenDai(struct SDjl sd[])     //1.申请贷款
{
	char s;
	printf("\n--------------------------------\n");
	
	printf("\n  贷  款  编  号:   ");
	scanf("%d",&sd[z].num);
	
	printf("\n  身  份  证  号:   ");
	scanf("%s",sd[z].IDCard);
	
	printf("\n  贷  款  姓  名:   ");
	scanf("%s",sd[z].name);
	
	printf("\n  贷  款  金  额:   ");
	scanf("%f",&sd[z].jinE);
	
	printf("\n  贷  款  年  限:   ");
	scanf("%d",&sd[z].nianxian);
	printf("\n--------------------------------\n");
	printf("\n  请认真核对信息,确定贷款?");
	getchar();
	z++;
	getchar();	
} 

int HuanDai(struct SDjl sd[],struct HDjl hd[])     //2.还  贷 
{
//	struct HDjl hd;
	int i,huanNum,hdbh;
	printf("\n--------------------------------\n");
	printf("\n  贷  款  编  号:  ");
	scanf("%d",&huanNum);
	printf("\n--------------------------------\n");
	
	for(i=0;i<max;i++)
	{
		if(sd[i].num==huanNum)
		{
			printf("\n  还  款  编  号:  ");
			scanf("%d",&hdbh);
			for(i=0;i<max;i++)
			{
				if(hd[i].HDnum==hdbh)
					printf("\n还款编号重复\n");
				else hd[i].HDnum=hdbh;
					break;
			}
	 		
			printf("\n  身  份  证  号:   ");
			scanf("%s",hd[x].IDCard);
	
			printf("\n  贷  款  姓  名:   ");
			scanf("%s",hd[x].name);
	
			printf("\n  贷  款  金  额:   ");
			scanf("%f",&hd[x].jinE);
	
			printf("\n  贷  款  编  号:   ");
			scanf("%d",&hd[x].num);
			
			printf("\n--------------------------------\n");
			printf("\n  请认真核对信息,确定还贷?");
			getchar(); 
			getchar(); 
			x++;
			
			return 0;	
		}
	}
 	printf("\n输入的编号错误!");
	getchar();
	getchar();
	
}

int ChaDai(struct SDjl sd[])            //3.查询贷款记录
{
	char sfid[18];
	int s=0;
	
	printf("\n--------------------------------\n");
	printf("\n  身  份  证  号:  ");
	scanf("%s",sfid);
	
	for(int i=0;i<max;i++)
	{
		if((strcmp(sfid,sd[i].IDCard))==0)
		{
			printf("\n--------------------------------\n");
			printf("\n  贷  款  编  号:   %d\n",sd[i].num);
			printf("\n  贷  款  姓  名:   %s\n",sd[i].name);
			printf("\n  贷  款  金  额:   %10.2f\n",sd[i].jinE);
			printf("\n  贷  款  年  限:   %d\n",sd[i].nianxian);
			printf("\n--------------------------------\n");	
			s++;
		}	
	}
	if(s==0)
	{	
		printf("\n--------------------------------\n"); 
		printf("\n    无  记  录");
	}
	
	getchar();
	getchar();
}
int ChaHuan(struct HDjl hd[])  //4.查询还贷记录
{
	int i,num;
	printf("\n--------------------------------\n");
	printf("\n  贷  款  编  号:  ");
	scanf("%d",&num);
	
	for(i=0;i<max;i++)
	{
	 	if(hd[i].num==num)
		{
			printf("\n--------------------------------\n");
			printf("\n  贷  款  编  号:   %d\n",hd[i].num);
			printf("\n  贷  款  姓  名:   %s\n",hd[i].name);	
			printf("\n  身  份  证  号:   %s\n",hd[i].IDCard);
			printf("\n  贷  款  金  额:   %10.2f\n",hd[i].jinE);
			printf("\n  还  贷  编  号:   %d\n",hd[i].HDnum);
			printf("\n--------------------------------\n");
			
			getchar();
			getchar();
			return 0;			
		}
		
	}
	printf("\n--------------------------------\n");
	printf("\n    输 入 的 编 号 错 误\n");	
			
	getchar();
	getchar();	
}


void save(struct SDjl sd[],struct HDjl hd[]) //将申贷记录
//贷记录写入磁盘件 
{
	FILE *fp1,*fp2;
	int i;
	
	fp1=fopen("sdjl.dat","a");//申贷记录文件名 
	for(i=0;i<z;i++)
	{
		fwrite(&sd[i],sizeof(struct SDjl),1,fp1);
	}
	
	fp2=fopen("hdjl.dat","a");//还贷记录文件名 
	for(i=0;i<x;i++)
	{
		fwrite(&hd[i],sizeof(struct HDjl),1,fp2);
	}

	fclose(fp1);
	fclose(fp2);
}

void read(struct SDjl sd[],struct HDjl hd[])//第二次打开系统时//读取上一次的记录 
{
	FILE *fp1,*fp2;
	int i;

	if((fp1=fopen("sdjl.dat","rb"))==NULL)
	{
		return;
	}
	for(i=0;feof(fp1)==0;i++)
	{
		fread(&sd[i],sizeof(struct SDjl),1,fp1);
		
	}
	z==i+1;//第二次使用时,给全局变量赋值 
	
	fp2=fopen("hdjl.dat","rb");
	for(i=0;feof(fp2)==0;i++)
	{
		fread(&hd[i],sizeof(struct HDjl),1,fp2);
	}	
	x==i+1;//第二次使用时,给全局变量赋值
	fclose(fp1);
	fclose(fp2);

}