银行信贷管理系统
功能模块设计
添加功能设计:
添加分为两部分添加贷款用户基本信息和添加还贷用户基本信息。添加贷款基本信息中要求输入贷款编号、贷款人身份证号码、贷款人姓名、贷款金额、贷款年限。添加还贷用户基本信息要求输入一个贷款编号(要求对贷款编号进行检查,如果没有这条贷款,显示输入编号错误),还款编号、还款人身份证号码、还款人姓名、还款金额、所还贷款编号. 要求还款编号不能重复。其中用结构体来建立输入的用户信息的形式。分别存放在两个结构体数组中。
查询功能设计:
查询贷款信息可以用输入贷款人身份证号码来进行,先查询是否存在贷款,如果存在显示该贷款人的所有贷款记录,如果不存在显示无记录。
还款记录:输入还款编号 调出还款用户信息 输出还款用户信息
程序设计语言课程设计报告 查询还贷记录通过输入贷款编号(要求对贷款编号进行检查,如果没有这条贷款,显示输入编号错误)进行,查看对该贷款的所有还贷信息。
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);
}