只是想存个代码源的卑微女大学生
另一个逆波兰式的回答
下附源代码
/********************************头文件调用*********************************************/
#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