银行管理系统(c链表实现)

这篇博客主要展示了如何使用C语言实现一个基于单链表的银行管理系统,是作者作为课程设计的一部分。博客中包含了相关的源代码供读者参考。
摘要由CSDN通过智能技术生成

只是想存个代码源的卑微女大学生
另一个逆波兰式的回答

下附源代码

/********************************头文件调用*********************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#include <windows.h>

/***************************银行客户信息结构体管理员***********************************/
struct Client;                        //银行客户信息结构体声明
typedef struct Client Client, *Ptrone; //结构体指针定义
typedef Ptrone List;                  //链表头指针定义
typedef Ptrone Position;              //链表结点指针定义

/********************************存取款记录结构体**************************************/
struct Records;                         //职称结构体声明
typedef struct Records Records, *PtrRe; //结构体指针定义
typedef PtrRe List1;                    //链表头指针定义
typedef PtrRe Position1;                //链表结点指针定义

/********************************链表函数声明******************************************/
void DeleteList(List L);            //链表删除函数(客户信息
List MakeEmpty(List L);             //空链表创建函数(客户信息
void BianliList(List L);            //遍历客户信息链表函数
List SortMoney(List L);             //链表冒泡排序函数(余额
List SortNum(List L);               //链表冒泡排序函数(账号
void DeleteList1(List1 L);                  //链表删除函数(收支记录
List1 MakeEmpty1(List1 L);                  //空链表创建函数(收支记录
void BianliList1(List1 L);                  //遍历收支记录链表函数
List1 SortNum1(List1 L);                    //操作记录(账号
List1 SortTime1(List1 L);                   //操作记录(时间

/********************************文件函数声明******************************************/
List Load(List L);         //将客户信息加载到内存函数
void Save(List L);         //将客户信息保存到磁盘函数
void MakeFileEmpty();      //清空文件函数
List1 Load1(List1 L);               //将收支记录信息加载到内存函数
void Save1(List1 L);                //将收支记录信息保存到磁盘函数
void MakeFileEmpty1();              //清空文件函数

/********************************菜单函数声明******************************************/
void Choose();                              //访客选择身份
void MainMeun1(List L, List1 L1);            //管理员主菜单
void MainMeun2(char[], List L, List1 L1);     //客户主菜单
void ViewMeun(List L, List1 L1);                      //查询客户信息菜单
void RecordMeun(List1 L);                   //查询客户存取款记录菜单
void OrderMeun(List L, List1 L1);            //客户信息排序菜单
void ModMeun(List L, List1 L1);              //修改菜单
void ModMeun1(Position p, List L, List1 L1);  //修改的部分菜单

/********************************客户信息管理函数声明**********************************/

void Add(List L);                                          //信息录入函数
void ViewNum(char num[], List L);                           //账号显示函数
void ViewName(char name[], List L);                         //姓名信息显示函数
void ViewTel(char tel[], List L);                           //电话信息显示函数
void ViewID(char ID[], List L);                             //身份证显示函数
void ViewCom(List L);                                      //综合查询
void CircleTel(char tel[], Position p, List L, List1 L1);     //电话
void CircleName(char name[], Position p, List L, List1 L1);   //姓名
void CircleID(char ID[], Position p, List L, List1 L1);       //身份证查询
void ModName(Position p, List L, List1 L1);                  //客户姓名修改函数
void ModTel(Position p, List L);                            //客户电话修改函数
void ModPassword(Position p, List L);                       //客户密码修改函数
void ModMoney(Position p, List L, double n);                 //客户余额修改函数
void Delete(List L, List1 L1);                              //删除函数,客户信息

/********************************收支记录管理函数声明**********************************/
void Add1(char sj[], Position p, List L, List1 L1);   //收支记录录入函数
void ViewNum1(char num[], List1 L);       //收支记录查询函数(按账号
void ViewName1(char name[], List1 L);     //收支记录查询函数(按姓名
void ViewCom1(List1 L);                  //综合查询

/********************************功能函数声明******************************************/
Position Logon(List L);
int Mimayincan(char a[]);         //密码隐藏函数
void PrintRecords(Position1 p);    //收支记录打印函数
void PrintClient(Position P);      //客户信息打印函数
int Testl(int a, int b, int c);      //菜单输入检测函数
void jieshuo(List L, List1 L1);

/*********************************结构体定义*******************************************/
struct Client//客户信息结构体客户
{
   
	char num[30];               //账号
	char ID[19];           //身份证号
	char name[10];         //姓名
	char tel[12];          //电话
	char password[20];     //密码
	char loc[10];          //办卡地址
	double money;          //余额
	char sd[5];            //锁定
	char time[20];         //还款日期
	int type;              //卡类型1.储蓄卡,2.信用卡
	int point;             //信用积分
	Position next;         //next指针 (指向下一结构体)
};
struct Records//操作记录结构体
{
   
	char num[30];               //账号
	char name[20];         //姓名
	char ID[20];
	char time[20];         //操作时间 年/月/日,时:分 2019/2/6-17.40
	double rmb;            //存取款
	char sd[5];                 //锁定
	struct Records *next;  //next指针
};
/********************************函数定义**********************************************/
int main()//主函数
{
   
	system("color B0");
	List L = NULL;
	List1 L1 = NULL;
	int x;
	system("cls");
	printf("\n\n\n\n\t\t\t欢迎进入小仙雕银行~~~~~\n\n");
	L = Load(L);
	L1 = Load1(L1);
	printf("\n\t\t输入回车键继续");
	getchar();
	system("cls");                      //实现清屏
	Choose();                           //调用访客选择身份函数
	scanf("%d", &x);
	x = Testl(x, 0, 2);
	while (1)
	{
   
		fflush(stdin);                      //清除键盘缓冲区
		switch (x)
		{
   
		case 1:  system("cls");  char a[] = "123123";
			if (Mimayincan(a) == 1)
				MainMeun1(L, L1);
			exit(0);                    //调用管理员主菜单函数
		case 2:  system("cls");  Position p = Logon(L);
			if (p)
				MainMeun2(p->num, L, L1);                      //调用客户主菜单函数
			else
				main();
		case 0:  exit(0);                                               //退出系统
		}
	}
	return 0;
}

/********************************链表函数定义******************************************/
void DeleteList(List L)//链表删除函数
{
   
	Position P;
	P = L->next;           //取链表头后的所有结点
	L->next = NULL;        //链表头指向空结点
	while (P != NULL);       //依次释放链表头后所有结点的空间
	{
   
		free(P);
		P = P->next;
	}
}
void DeleteList1(List1 L)
{
   
	Position1 p;
	p = L->next;           //取链表头后的所有结点
	L->next = NULL;        //链表头指向空结点
	while (p != NULL);       //依次释放链表头后所有结点的空间
	{
   
		free(p);
		p = p->next;
	}
}
List MakeEmpty(List L)//空链表创建函数
{
   
	if (L)                                      //相当于 if(L!=NULL) ,即指针L指向的空间不为空
		DeleteList(L);                       //删除原先链表
	L = (List)malloc(sizeof(struct Client));   //创建新的空链表
	if (!L)                                     //相当于 if(L==NULL) ,即指针L指向的空间为空
	{
   
		printf("创建失败,内存不足!!!");        //创建失败,提示内存不足
		system("pause");                       //暂停屏幕显示
		return NULL;                           //返回上一级菜单
	}
	L->next = NULL;                              //Next指针指向空
	return L;                                  //返回链表头
}
List1 MakeEmpty1(List1 L)
{
   
	if (L)                                               //相当于 if(L!=NULL) ,即指针L指向的空间不为空
		DeleteList1(L);                                //删除原先链表
	L = (List1)malloc(sizeof(struct Records));             //创建新的空链表
	if (!L)                                              //相当于 if(L==NULL) ,即指针L指向的空间为空
	{
   
		printf("创建失败,内存不足!!!");                  //创建失败,提示内存不足
		system("pause");                                 //暂停屏幕显示
		return NULL;                                     //返回上一级菜单
	}
	L->next = NULL;                                        //Next指针指向空
	return L;                                           //返回链表头
}
void BianliList(List L)//遍历链表函数
{
   
	Position p = L->next;
	printf("\n客户信息如下:\n");
	printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
	printf("账号\t\t\t姓名\t\t电话\t\t办卡地址\t余额\t\t状态                  \n");
	while (p)
	{
   
		printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
		printf("%-20s\t%-10s\t%-11s\t%-10s\t%-.2lf\t\t%-5s\n", p->num, p->name, p->tel, p->loc, p->money, p->sd);
		p = p->next;
	}
	printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - -\n");
	system("pause");
}
void BianliList1(List1 L)
{
   
	printf("\n\t\t\t\t收支记录如下:\n");
	printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
	printf("账号\t\t\t姓名\t\t操作日期\t\t存取款                  \n");
	Position1 p = L->next;
	while (p)
	{
   
		printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
		printf("%-20s\t%-10s\t%-18s\t%-.2lf          \n", p->num, p->name, p->time, p->rmb);
		p = p->next;
	}
	printf("- - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - -\n");
	system("pause");
}

/********************************文件函数定义******************************************/
List Load(List L)//初始化函数
{
   
	FILE *fp;
	Position a;
	int num = 0;
	fp = fopen("客户信息.txt", "r+");
	if (fp == NULL)
	{
   
		printf("\n\t\t无法打开文件或文件不存在\n");         //提示错误
		printf("\n\t\t正在尝试创建新文件....\n");
		fp = fopen("客户信息.txt", "w");                     //创建客户信息文件
		if ((fp = fopen("客户信息.txt", "r+")) == NULL)
		{
   
			printf("\t\t文件创建失败!!!\n");
			system("pause");                                //暂停屏幕显示
			return NULL;
		}
	}
	fp = fopen("客户信息.txt", "r+");                           //以只读的方式打开"客户信息.txt"文本文件
	L = MakeEmpty(L);                                          //创建链表,以便存储文本文件中的信息
	while (1)
	{
   
		a = (List)malloc(sizeof(struct Client));                    //创建新结点
		if (a == NULL)
		{
   
			printf("\n\t\t文件信息读取失败,系统内存不足!");
			system("pause");                                 //暂停屏幕显示
			return NULL;
		}
		if (fscanf(fp, "%s %s %s %s %s %s %lf %s %d %d %s", a->num, a->ID, a->name, a->tel, a->password, a->loc, &a->money, a->time, &a->type, &a->point, a->sd)<0)
			break;                                        //将客户信息录入文件
		a->next = L->next;                                   //头插法
		L->next = a;
		num++;
	}
	printf("\n\t\t客户信息读取完成,目前共有%d名客户\n", num);
	fclose(fp);
	return L;
}
List1 Load1(List1 L)
{
   
	FILE *fp;
	Position1 a;
	int num = 0;
	fp = fopen("收支记录.txt", "r+");
	if (fp == NULL)
	{
   
		printf("\n\t\t无法打开文件或文件不存在\n");         //提示错误
		printf("\n\t\t正在尝试创建新文件....\n");
		fp = fopen("收支记录.txt", "w");                     //创建客户信息文件
		if ((fp = fopen("收支记录.txt", "r+")) == NULL)
		{
   
			printf("\t\t文件创建失败!!!\n");
			system("pause");
			return NULL;                                //暂停屏幕显示
		}
	}
	fp = fopen("收支记录.txt", "r+");                           //以只读的方式打开"收支记录.txt"文本文件
	L = MakeEmpty1(L);                                          //创建链表,以便存储文本文件中的信息
	while (1)
	{
   
		a = (List1)malloc(sizeof(struct Records));                    //创建新结点
		if (a == NULL)
		{
   
			printf("\n\t\t文件信息读取失败,系统内存不足!");
			system("pause");                                 //暂停屏幕显示
			return NULL;
		}
		if (fscanf(fp, "%s %s %s %s %lf %s\n", a->num, a->name, a->time, a->ID, &a->rmb, a->sd)<0)
			break;                                        //将客户收支记录录入文件
		a->next = L->next
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值