飞道的博客

开发成长之路(5)-- C语言从入门到开发(仿ATM机项目,我写的第一个项目)

228人阅读  评论(0)


项目需求分析

时间过得是真的快啊,这么快C语言的基础语法就讲过去了,是时候开始讲项目了。

那就进项目吧,需求分析。

1、需要有操作界面。最好能有光标定位的。
2、实现登录注册功能,其中账号限制六位数字,密码限制八位数字与英文结合。
3、实现存取款功能
4、实现转账功能,双方的数据都需要有改变
5、实现账户信息搜索功能,分精确搜索和模糊搜索。搜索账户、搜索存取款、搜索转账。时间搜索、账号搜索等。
6、以上这些功能都需要持久化,即程序重启之后之前的操作都还在。

各位可以先自行实现,如果对需求有不清楚的可以发在评论区。

几张大图过后放上我当初写的代码,那可是我的处女作啊!!!


单纯写代码多枯燥啊,这都是某些人给我发来的桌面大图。


放码过来


// main.c
#include "public.h"
#include "master.h"
#include "supermaster.h"
#include "user.h"
#include "other.h"


int main ()
{
   
	mymes();

	newuser("info.txt");
	newreport("repo.txt");

	_login(head,3);

	return 0;
}



//public.h

#ifndef _PUBLIC_H_
#define _PUBLIC_H_

/*
为了节约字数,此处省略内容请前往第三篇中获取
https://blog.csdn.net/qq_43762191/article/details/116189876
*/

typedef struct reported
{
   
	int amount;//交易金额
	int rflag; //交易方式	1、存款 2、取款 3、转账转出 4、转账转入
	int lastmoney;//余额
	int lastmoney2;//收款者的余额
	int number1;//付款账户
	int number2;//入款账户
	char time[12];//操作时间
	
} REPORT_T;


typedef struct point
{
   

	void *pData;				//指向数据域
	struct point *next;			//指向下一个节点
	
} POINT_T;



FILE * fp;
FILE * rfp;
POINT_T * pTemp;
REPORT_T * rTemp;
POINT_T * pNode;
POINT_T * rNode;
POINT_T * head ;
POINT_T * rhead;
extern FILE * fp;
extern FILE * rfp;
extern POINT_T * head;			//用户的头
extern POINT_T * rhead;			//账单的头

extern POINT_T * pTemp;			//用户临时指针
extern REPORT_T * rTemp;		//账单临时指针
extern POINT_T * pNode;			//接用户的头
extern POINT_T * rNode;			//接账单的头

//打开文件
FILE * open(char * filename);

//用户信息链表写入文件
void List_to_file(POINT_T * head,FILE * fp,int size);

//账户链表写入文件
void rList_to_file(POINT_T * head,FILE * fp,int size);

//文件写入链表
POINT_T * File_to_list(FILE * fp,int size);

//初始化用户
void newuser();

//初始化账单
void newreport(char * filename);

//创建头结点
POINT_T * creat(TEST_T *data );

//新增节点
void add (POINT_T * head,TEST_T *data );

#endif


// initiaze.c

#include "public.h"

void newuser(char * filename)
{
   	
	
	TEST_T * pData = NULL;
	fp=fopen(filename,"r+");
	if (fp==NULL)
	{
   
		
		fp=fopen(filename,"w+");

		head=creat(NULL);
		pData=(TEST_T *)malloc(sizeof(TEST_T));
		
		if(pData==NULL)
		{
   
			gotoxy(36,14);
			printf("申请内存失败");
			exit(1);
		}
		memset(pData,0,sizeof(TEST_T));
		
		strcpy(pData->name,"admin");
		strcpy(pData->pwd,"123456");//填充第一个数据
		pData->number=10000001;
		pData->flag=0;
		add(head,pData);
		
		
		pData=(TEST_T *)malloc(sizeof(TEST_T));
		if(pData==NULL)
		{
   
			gotoxy(36,14);
			printf("申请内存失败");
			exit(1);
		}
		memset(pData,0,sizeof(TEST_T));
		strcpy(pData->name,"fck");
		strcpy(pData->pwd,"123456");
		pData->number=10000002;
		pData->flag=1;
		add(head,pData);
		
		
		pData=(TEST_T *)malloc(sizeof(TEST_T));
		if(pData==NULL)
		{
   
			gotoxy(36,14);
			printf("申请内存失败");
			exit(1);
		}
		memset(pData,0,sizeof(TEST_T));
		strcpy(pData->name,"lzx");
		strcpy(pData->pwd,"123456");
		pData->number=10000003;
		pData->flag=2;
		pData->money=500;
		add(head,pData);
		
		
		pData=(TEST_T *)malloc(sizeof(TEST_T));
		if(pData==NULL)
		{
   
			gotoxy(36,14);
			printf("申请内存失败");
			exit(1);
		}
		memset(pData,0,sizeof(TEST_T));
		strcpy(pData->name,"lml");
		strcpy(pData->pwd,"123456");
		pData->number=10000004;
		pData->flag=3;
		add(head,pData);
		
		
		pData=(TEST_T *)malloc(sizeof(TEST_T));
		if(pData==NULL)
		{
   
			gotoxy(36,14);
			printf("申请内存失败");
			exit(1);
		}
		memset(pData,0,sizeof(TEST_T));
		strcpy(pData->name,"lzk");
		strcpy(pData->pwd,"123456");
		pData->number=10000005;
		pData->flag=2;
		pData->money=500;
		add(head,pData);
		
		List_to_file(head,fp,sizeof(TEST_T));
		pNode = head ;
	}
	else
	{
   
		head = File_to_list(fp,sizeof(TEST_T));
		pNode = head ;
	}
}



//初始化账单
void newreport(char * filename)
{
   
	REPORT_T * rData = NULL;
	rfp=fopen(filename,"r+");
	if (rfp==NULL)
	{
   
		rfp=fopen(filename,"w+");
		rhead=creat(NULL);
		//add(rhead,rData);
	}
	else
	{
   
		rhead = File_to_list(rfp,sizeof(REPORT_T));
		rNode = rhead;
	}
}


//file.c
#include"public.h"


//打开文件
FILE * open(char * filename)
{
   
	FILE *fp=NULL;
	fp=fopen(filename,"r+");
	if (fp==NULL)
	{
   
		
		fp=fopen(filename,"w+");
	}
	return fp;
}



//用户链表写入文件
void List_to_file(POINT_T * head,FILE * fp,int size)
{
   
	POINT_T * pNode=head;

	rewind(fp);
	while(pNode->next!=NULL)
	{
   
		pNode=pNode->next;	
	//将数据写入文件
		fwrite(pNode->pData,size,1,fp);	
	}
	fflush(fp);
}

//账户链表写入文件
void rList_to_file(POINT_T * rhead,FILE * rfp,int size)
{
   
	REPORT_T * rTemp=NULL;
	POINT_T * rNode=rhead;

	rewind(rfp);
	while(rNode->next!=NULL)
	{
   
		rNode=rNode->next;	
		rTemp=rNode->pData;
		
		//将数据写入文件
		fwrite(rTemp,size,1,fp);	
	}
	fflush(rfp);
}


//文件写入链表
POINT_T * File_to_list( FILE* p, int size)
{
   
	void * data = NULL;
	POINT_T * head  = NULL;
	int ret = -1;
	
	// 创建链表头节点
	head = creat(NULL);
	
	rewind(p);
	// 对数据域开辟空间
	data = malloc(size);
	memset(data, 0, sizeof(size));
	
	while (1)
	{
   
		// 读取大小为size的数据内容
		ret = fread(data, size, 1, p);
		if (ret < 1)
		{
   
			// 未读取到数据内容,表示文件已到结尾
			break;
		}
		// 添加到链表
		add(head, data);
		
		data = malloc(size);
		memset(data, 0, sizeof(size));
		
	}
	
	return head;
}

//other.h

#ifndef _OTHER_H_
#define _OTHER_H_

//统一登录页面
void face();
void face1();
void face2();

//光标定位
void gotoxy(int x,int y);

//打星星
void flouwer(int i);

//光标移动和它的辅助函数
int key_press();
int kreturn();

//显示我的个人信息
void mymes();

//计算节点数
int Count(POINT_T * head);

//查找用户数据
POINT_T * find(POINT_T *head,int index);

//用户名模糊查询
void fuzzyreserch(POINT_T * head);
//辅助函数
char* my_strstr(const char* dest, const char* src);

//输入函数
void getstr(char str[],int maxLen,int type,int isplainText);

//统一登录函数
void _login(POINT_T * head,int p);

//登录选择
void login_choose();

//打印链表
void print(POINT_T * head);

//获取系统当前时间、年、月、日
void getLocalTime(char szTime[]);

#endif

//other.c

#include "public.h"
#include "master.h"
#include "supermaster.h"
#include "user.h"
#include "other.h"

//  辅助函数 

//光标
void gotoxy(int x,int y)
{
   	
	COORD pos={
   x,y};
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOut,pos);	
}

//计算节点数
int Count(POINT_T * head)
{
   
	int count=0;
	POINT_T *pNode1=head;
	while (pNode1->next!=NULL)
	{
   
		if(pNode1->next!=NULL)
		{
   
			pNode1=pNode1->next;
			count++;
		}		
	}	
	return count;
}

//输入输出函数 
/*
为了节约字数,这个函数请前往第二篇寻找,太长了不给发
https://blog.csdn.net/qq_43762191/article/details/116176611
*/


//统一登录界面
void face()
{
   
	printf("学号: XXXXXXXXXX \n");
	printf("姓名: XXX ");
	
	gotoxy(8,5);
	flouwer(80);
	gotoxy(36,9);
	printf("ATM机系统统一登录界面");
	gotoxy(43,10);
	printf("版本1.0");
	gotoxy(8,12);
	flouwer(80);
	
	gotoxy(100,25);
	printf("按ESC键退出");
	gotoxy(20,16);
	printf("1、用户名登录");
	gotoxy(20,17);
	printf("2、账号登录");
	
}
/账号登录页面
void face1()
{
   
	system("cls");
	gotoxy(8,5);
	flouwer(80);
	gotoxy(36,9);
	printf("ATM机系统统一登录界面");
	gotoxy(43,10);
	printf("版本1.0");
	gotoxy(8,12);
	flouwer(80);
	
	gotoxy(100,25);
	printf("按ESC键退出");
	gotoxy(20,16);
	printf("账号(8位):");
	gotoxy(20,17);
	printf("密码(6位):");
}
///用户名登录页面//
void face2()
{
   
	system("cls");
	gotoxy(8,5);
	flouwer(80);
	gotoxy(36,9);
	printf("ATM机系统统一登录界面");
	gotoxy(43,10);
	printf("版本1.0");
	gotoxy(8,12);
	flouwer(80);
	
	gotoxy(100,25);
	printf("按ESC键退出");
	gotoxy(20,16);
	printf("用户名 :");
	gotoxy(20,17);
	printf("密码(6位):");
}



统一登录函数
void _login(POINT_T * head,int p)//p用于限制输入次数
{
   
	char i[1]={
   0};
	int j=0;
	int inum=0;
	char anum[8]={
   0};
	int count=0;
	int q=0;
	char name[8]={
   0};
	char pwd[6]={
   0};
	POINT_T *pNode1=head;
	
	TEST_T * tTemp = NULL;
	q=p;

	if(q<=0)
	{
   
		printf("无法登录");
		exit(-1);
	}
	
	count=Count(pNode1);
	
	face();
	gotoxy(20,18);
	printf("你的选择是:");
	getstr(i,2,1,0);
	
	switch(i[0])
	{
   
	case 49:
		{
   
			face2();
			
			gotoxy(32,16);
			
			getstr(name,9,0,0);
			
			while(pNode1->next!=NULL)
			{
   
				pNode1 = pNode1->next;
				tTemp = pNode1->pData;
				
				
				if (strcmp(tTemp->name,name)==0)
				{
   	
					pTemp = pNode1;
					
					gotoxy(32,17);
					getstr(pwd,7,0,1);
					
					gotoxy(32,19);
					printf("登录验证中,请稍等······");
					
					
					if(strcmp(pwd,tTemp->pwd)==0)
					{
   
						
						Sleep(300);
						system("cls");
						gotoxy(40,10);
						printf("登陆成功");
						Sleep(300);
						system("cls");
						
						if (tTemp->flag==0)
						{
   
							supermaster_fuction_choose(head);
						} 
						else if(tTemp->flag==1)
						{
   
							master_fuction_choose(head);
						}
						else if(tTemp->flag==2)
						{
   
							user_fuction_choose(pTemp,head,rhead);	
						}	
						
						else
						{
   				
							Sleep(300);
							system("cls");
							gotoxy(40,10);
							printf("无效用户,登录失败");
							gotoxy(40,11);
							q=q-1;
							printf("你还有%d次机会",q);
						
							Sleep(1000);
							system("cls");
							_login(head,q);
						}		
					}
					else
					{
   		
						Sleep(300);
						system("cls");
						gotoxy(40,10);
						printf("密码错误,登录失败");
						gotoxy(40,11);
						q=q-1;
						printf("你还有%d次机会",q);
						
						Sleep(1000);
						system("cls");
						_login(head,q);	
					}			
				}
			}
			
			Sleep(300);
			system("cls");
			gotoxy(40,10);
			printf("用户名错误,登录失败");
			gotoxy(40,11);
			q=q-1;
			printf("你还有%d次机会",q);
		
			Sleep(1000);
			system("cls");
			_login(head,q);	
		}break;
	case 50:
		{
   
			face1();
			
			gotoxy(32,16);
			
			getstr(anum,9,1,0);
			inum=atoi(anum);
			
			while(pNode1->next!=NULL)
			{
   
				
				pNode1 = pNode1->next;
				tTemp = pNode1->pData;
				
				if (tTemp->number==inum)
				{
   	
					pTemp = pNode1;
					
					gotoxy(32,17);
					getstr(pwd,7,0,1);
					
					gotoxy(32,19);
					printf("登录验证中,请稍等······");
					
					
					if(strcmp(pwd,tTemp->pwd)==0)
					{
   
						
						Sleep(300);
						system("cls");
						gotoxy(40,10);
						printf("登陆成功");
						Sleep(300);
						system("cls");
						
						if (tTemp->flag==0)
						{
   
							supermaster_fuction_choose(head);
						} 
						else if(tTemp->flag==1)
						{
   
							master_fuction_choose(head);
						}
						else if(tTemp->flag==2)
						{
   
							user_fuction_choose(pTemp,head,rhead);	
						}	
						
						else
						{
   				
							Sleep(300);
							system("cls");
							gotoxy(40,10);
							printf("无效用户,登录失败");
							gotoxy(40,11);
							q=q-1;
							printf("你还有%d次机会",q);
							
							Sleep(1000);
							system("cls");
							_login(head,q);
						}		
					}
					else
					{
   		
						Sleep(300);
						system("cls");
						gotoxy(40,10);
						printf("密码错误,登录失败");
						gotoxy(40,11);
						q=q-1;
						printf("你还有%d次机会",q);
						
						Sleep(1000);
						system("cls");
						_login(head,q);	
					}			
				}	
			}
			
			Sleep(300);
			system("cls");
			gotoxy(40,10);
			printf("用户名错误,登录失败");
			gotoxy(40,11);
			q=q-1;
			printf("你还有%d次机会",q);
			
			Sleep(1000);
			system("cls");
			_login(head,q);	
			
			
		}break;
	default:
		{
   
			system("cls");
			_login(head,q);
		}
	}
	
}



//打星星
void flouwer(int i)
{
   
	int j=0;
	for(j=0;j<i;j++)
	{
   
		printf("*");
	}
}




//个人信息
void mymes()
{
   
	gotoxy(36,12);
	printf("学号: DX190221 ");
	gotoxy(36,14);	
	printf("姓名: 吴林锋 ");
	gotoxy(56,15);
	printf("按任意键继续");
	getch();
	system("cls");
}


/*
为了节约字数,此处省略内容请前往第三篇中获取
https://blog.csdn.net/qq_43762191/article/details/116189876
*/

//光标移动和它的辅助函数
int key_press()
{
   
	int key;//接收键盘位移键
	int k;
	int xpos=36;//这个数据还有待进一步调整
	int ypos=9;
	gotoxy(xpos,ypos);
	
	while(key = getch())
	{
   
		
		if(key=='\n')
		{
   
			printf("tuichu");
			exit(-1);
		}
		switch(key)
		{
   
		case 0xE0:
			switch(key=getch())
			{
   
			case 72:
				{
   
					ypos--;
					gotoxy(xpos,ypos);
					k=kreturn(xpos,ypos);
					return k;
				};break;
			case 80:
				{
   
					ypos++;
					gotoxy(xpos,ypos);
					k=kreturn(xpos,ypos);
					return k;
				};break;
			case 75:
				{
   
					xpos-=16;
					gotoxy(xpos,ypos);
					k=kreturn(xpos,ypos);
					return k;
				};break;
			case 77:
				{
   
					xpos+=16;
					gotoxy(xpos,ypos);
					k=kreturn(xpos,ypos);
					return k;
				};break;		
			}
		}	
	}
}

int kreturn(int xpos,int ypos)
{
   
	if(xpos==36&&ypos==10)
	{
   
		return 1;
	}
	
	if(xpos==52&&ypos==10)
	{
   
		return 2;
	}
	
	if(xpos==68&&ypos==10)
	{
   
		return 3;
	}
	
	if(xpos==36&&ypos==11)
	{
   
		return 4;
	}
}


/查找用户数据//
POINT_T * find(POINT_T *head,int index)
{
   
	int f=0;
	POINT_T *pNode=NULL;
	int count=0;
	pNode=head;
	
	count=Count(head);
	
	system("cls");
	gotoxy(8,3);
	flouwer(83);
	gotoxy(8,14);
	flouwer(83);
	
	if(count<index)
	{
   	
		gotoxy(28,8);
		printf("查无此人");
		Sleep(300);
		system("cls");
		master_fuction_choose(head);
	}
	
	while(pNode->next!=NULL)
	{
   
		
		if(index==f)
		{
   
			return pNode;
		}
		
		pNode=pNode->next;
		f++;		
	}
	
}



/不能直接返回继续输账号//




//获取系统当前时间、年、月、日
void getLocalTime(char szTime[])
{
   
	time_t now ;
	
	struct tm *tm_now ;
	
	time(&now) ;
	
	tm_now = localtime(&now) ;
	
	sprintf(szTime, "%d-%02d-%02d\n",tm_now->tm_year+1900, tm_now->tm_mon+1, tm_now->tm_mday) ;
}



//用户名模糊查询
void fuzzyreserch(POINT_T * head)
{
   

	char r[12]={
   0};//用来接收收入的名字
	char s[12]={
   0};//用来接收数据域中的名字
	POINT_T * pTempp = head;
	TEST_T * tTempp = NULL;
	system("cls");
	printf("请输入用户名中的连续一串");
	getstr(r,7,0,0);
	while(pTempp->next!=NULL)
	{
   
		pTempp=pTempp->next;
		tTempp=pTempp->pData;
		s[12]=NULL;
		strcpy(s,tTempp->name);
	
		if (my_strstr(s,r) == NULL)
		{
   
			printf("");
		}
		else if (my_strstr(s,r) != NULL)
		{
   
			printf("\n");
			printf("用户名:%s\t用户账号:%d\t用户密码:%s\t用户余额:\t",tTempp->name,tTempp->number,tTempp->pwd,tTempp->money);

			if (tTempp->flag==0)
			{
   
				printf("超级管理员\n");
			} 
			else if(tTempp->flag==1)
			{
   
				printf("普通管理员\n");
			}
			else if (tTempp->flag==2)
			{
   
				printf("普通用户\n");
			}
			else
			{
   
				printf("已被注销用户\n");
			}
		}
	}
	printf("此为所有查询结果\n按任意键继续");
	getch();
}

//辅助函数
char* my_strstr(const char* dest, const char* src)
{
   
	char* start = (char*)dest;//在这里需要强制类型转换成char*
	char* substart = (char*)src;
	char* cp = (char*)dest;//cp就是用来保存首地址的
	assert(dest != NULL);
	assert(src != NULL);
	while (*cp)
	{
   
		start = cp;
		while (*start != '\0' && *substart !='\0' && *start == *substart)
		{
   
			start++;
			substart++;
		}
		if (*substart == '\0')
		{
   
			return cp;
		}
		substart = (char*)src;
		cp++;//cp++可以得到原起始位置的下一个位置
	}
	return NULL;
}


//master.h

#ifndef _MASTER_H_
#define _MASTER_H_

//系统管理员功能界面
void master_face();


//管理员功能选择与执行
void master_fuction_choose(POINT_T * head);


//注册新用户
void mnewadd();


//管理员查找用户
void mfind(POINT_T * head);
//管理员精确查找用户
void mjqfind(POINT_T * head);
//管理员显示所有用户
void mprint(POINT_T * head);

//管理员修改用户密码
void mmodify(POINT_T *head);

//注销用户
void cancel(POINT_T * head);


//(管理员)返回上一级
void mback(POINT_T * head);

#endif

//master.c

#include "public.h"
#include "master.h"
#include "other.h"


//系统管理员功能界面
void master_face()
{
   
	gotoxy(8,5);
	flouwer(83);
	gotoxy(8,16);
	flouwer(83);
	gotoxy(36,9);
	printf("ATM机系统管理员功能界面:");
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(43,10);
	printf("版本1.0");
	gotoxy(8,12);
	printf("您需要什么操作?");
	gotoxy(8,13);
	printf("按键 :1、新增用户\t2、查询用户信息\t\t3、修改用户密码");
	gotoxy(15,14);
	printf("4、注销用户\t5、返回上登录页面/退出操作系统");
	gotoxy(8,17);
	printf("请选择:");
	
}


//管理员操作选项
void master_fuction_choose(POINT_T * head)
{
   
	char ii[1]={
   0};		//用于接收选择
	int i=0,j=0,k=0,l=0;
	int index=0;
	master_face();
	getstr(ii,2,1,0);
	switch (ii[0])
	{
   
	case 49:
		{
   	
			system("cls");
			mnewadd(head);	
		};break;
		
	case 50:
		{
   
			system("cls");
			mfind(head);
		};break;
		
	case 51:
		{
   
			system("cls");
			mmodify(pNode);
		};break;
		
	case 52:
		{
   
			system("cls");
			cancel(pNode);
		};break;
		
	case 53:
		{
   
			system("cls");
			mback(head);
		};break;
		
	case 54:
		{
   
			system("cls");
			mback(head);
		}break;

		
	default :
		{
   
			gotoxy(48,15);
			printf("错误指令,请重新输入\n");
			gotoxy(48,16);
			printf("请稍等···");
			Sleep(1000);
			system("cls");
			master_fuction_choose(head);
		}		
	}	
}


//开户
void mnewadd(POINT_T * head)
{
   
	char ch[5]; //用于添加用户名字
	int count=0;    //用于新增用户编号
	char aflag[1]={
   0}; //添加选择
	int iflag=0;
	int j=0;
	char pwd1[7];
	char pwd2[7];
	TEST_T * newadd =NULL;


	system("cls");
	gotoxy(8,5);
	flouwer(83);
	gotoxy(8,16);
	flouwer(83);
	gotoxy(36,9);
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(36,10);
	printf("添加  1.管理员账号  2.普通用户账号");
	gotoxy(36,11);
	printf("你的选择是 :");
	getstr(aflag,2,1,0);
	iflag=atoi(aflag);

	if(iflag==2)
	{
   
		system("cls");
		gotoxy(8,3);
		flouwer(83);
		gotoxy(8,14);
		flouwer(83);
		
		gotoxy(28,6);
		printf("请输入新添用户名字:");
		getstr(ch,9,2,0);
		
		gotoxy(28,10);
		printf("请输入新添用户密码:");
		getstr(pwd1,7,1,0);
		
		
		if (strlen(pwd1)!=6)
		{
   
			gotoxy(28,14);
			printf("请设置六位数密码!");
			Sleep(500);
			system("cls");
			gotoxy(28,4);
			printf("请设置六位数密码!");
			mnewadd(head);
		}

		gotoxy(28,12);
		printf("请再次输入新添用户密码:");
		getstr(pwd2,7,0,1);
		

		if(strcmp(pwd1,pwd2)==0)
		{
   
			count=Count(head)+10000001;//这个放上面就出问题了
	

			newadd=(TEST_T *)malloc(sizeof(TEST_T));
			if( newadd==NULL )
			{
   
				gotoxy(28,7);
				printf("申请内存失败");
				exit(1);
			}
			memset(newadd,0,sizeof(TEST_T));
			
			strcpy(newadd->name,ch);
			strcpy(newadd->pwd,pwd1);
			newadd->number=count;
			newadd->flag=iflag;
			newadd->money=0;
			add(head,newadd);	
			
		
			getch();

			gotoxy(27,18);
			printf("完成!");
			List_to_file(head,fp,sizeof(TEST_T));

			Sleep(300);
			system("cls");
			gotoxy(0,1);
			
			gotoxy(27,20);
			printf("账号:%d\t用户名:%s\t普通用户",newadd->number,newadd->name);
			
			gotoxy(53,24);
			printf("1.返回功能页面\t2.退出系统3、返回登录页面");
			gotoxy(53,25);
			printf("你的选择是 :");
			scanf("%d",&j);
			system("cls");
			if (j==1)
			{
   
				master_fuction_choose(head);
			} 
			else if (j==3)
			{
   
				_login(head,3);
			}
			else
			{
   
				exit(0);
			}
		}
		else
		{
   
			system("cls");
			gotoxy(40,9);
			printf("两次密码输入不一致,未能成功开户");

			gotoxy(13,17);
			printf("1.返回功能页面\t2.退出系统3、返回登录页面");
			gotoxy(13,20);
			printf("你的选择是 :");
			scanf("%d",&j);
			system("cls");
			if (j==1)
			{
   
				master_fuction_choose(head);
			} 
			else if (j==3)
			{
   
				_login(head,3);
			}
			else
			{
   
				exit(0);
	}
		}
	}	
	else if(iflag==1)
	{
   
		system("cls");
		gotoxy(48,15);
		printf("权限不足,请重新选择");
		gotoxy(48,16);
		printf("请稍等···");
		Sleep(1000);
		system("cls");
		mnewadd(head);
	}
	else
	{
   
		system("cls");
		gotoxy(48,15);
		printf("错误指令,请重新输入");
		gotoxy(48,16);
		printf("请稍等···");
		Sleep(1000);
		system("cls");
		mnewadd(head);
	}	
}


//管理员查找用户
void mfind(POINT_T * head)
{
   
	char t[1]={
   0};
	gotoxy(8,5);
	flouwer(83);
	gotoxy(8,16);
	flouwer(83);
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(26,9);
	printf("请选择");
	gotoxy(26,10);
	printf("添加  1、通过账号精确查询  2、通过用户名模糊查询  3、显示所有用户");
	gotoxy(26,11);
	printf("你的选择是 :");
	getstr(t,2,1,0);

	switch(t[0])
	{
   
	case 49:
		{
   
			system("cls");
			gotoxy(8,5);
			flouwer(83);
			gotoxy(8,16);
			flouwer(83);

			mjqfind(head);

		}break;
	case 50:
		{
   
			system("cls");
			gotoxy(8,5);
			flouwer(83);
			gotoxy(8,16);
			flouwer(83);

			fuzzyreserch(head);

			mback(head);
		}break;
	case 51:
		{
   
			system("cls");
			gotoxy(8,5);
			flouwer(83);
			gotoxy(8,16);
			flouwer(83);

			mprint(head);
			
		}
	default :
		{
   
			system("cls");
			mfind(head);
		}
	}
}

///管理员精确查找用户/
void mjqfind(POINT_T * head)
{
   
	int count=0;
	int iindex=0;//互换
	char aindex[8]={
   0};
	int j=0;
	TEST_T * tTemp = NULL;
	system("cls");
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(3,5);
	printf("请输入查询用户卡号:");
	getstr(aindex,9,1,0);
	iindex=atoi(aindex);

	count=Count(head);

	if(count<iindex-10000000)
	{
   	
		Sleep(300);
		system("cls");
		gotoxy(48,13);
		printf("查无此人");
		gotoxy(48,14);
		printf("请稍等···");
		Sleep(2000);
		system("cls");
		mjqfind(head);
	}	
	
	pTemp=find(head,iindex-10000000);
	tTemp = pTemp->pData;

	if(tTemp->flag!=3)
	{
   
		gotoxy(13,7);
		printf("用户姓名:%s\t用户账号:%d\t用户余额:%d\t",tTemp->name,tTemp->number,tTemp->money);
		if (tTemp->flag==0)
		{
   
			printf("超级管理员");
		} 
		else if(tTemp->flag==1)
		{
   
			printf("普通管理员");
		}
		else if (tTemp->flag==2)
		{
   
			printf("普通用户");
		}
		else
		{
   
			printf("系统故障");
		}
	}
	else if (tTemp->flag==3)
	{
   
		gotoxy(13,7);
		printf("该用户已被注销");				
	}
	else
	{
   
		gotoxy(13,7);
		printf("该用户不存在\n");
	}	


 	gotoxy(63,27);
 	printf("1.返回功能页面\t2.退出系统3、返回登录页面");
 	gotoxy(13,10);
 	printf("你的选择是 :");
 	scanf("%d",&j);
 	system("cls");
 	if (j==1)
 	{
   
 		master_fuction_choose(head);
 	} 
 	else if (j==3)
 	{
   
 		_login(head,3);
 	}
 	else
 	{
   
 		exit(0);
	}
}


//管理员显示所有用户
void mprint(POINT_T * head)
{
   
	int ypos=3;
	POINT_T * pall=head;
	TEST_T * tTemp=NULL;
	
	gotoxy(3,1);
	printf("用户名");
	gotoxy(18,1);
	printf("用户账号");
	gotoxy(33,1);
	printf("用户余额");
	
	while(pall->next!=NULL)
	{
   
		pall=pall->next;
		tTemp=pall->pData;
		if(tTemp->flag!=3)
		{
   
			gotoxy(3,ypos);
			printf("%s",tTemp->name);
			gotoxy(18,ypos);
			printf("%d",tTemp->number);
			gotoxy(33,ypos);
			printf("%d",tTemp->money);
			gotoxy(48,ypos);
			if (tTemp->flag==0)
			{
   
				printf("\t超级管理员\n");
			}
			else if (tTemp->flag==1)
			{
   
				printf("\t管理员\n");
			} 
			else
			{
   
				printf("\t普通用户\n");
			}
			ypos++;
		}
		else
		{
   
			printf("");
		}
		
	}
	gotoxy(100,25);
	printf("请输入任意键继续");
	getch();
	mback(head);
}	

//管理员修改自己、用户密码
void mmodify(POINT_T *head)
{
   
	char ayuan[8]={
   0};//接收账号
	int iyuan=0,j=0;
	int a=0;
	char pwd1[7];	//原密码
	char pwd2[7];	//修改后密码
	char pwd3[7];	//二次输入密码
	int count=0;	//修改位置标杆
	
	POINT_T *pNode=NULL;
	POINT_T *pTemp=NULL;
	TEST_T * tTemp=NULL;

	pNode=head;
	pTemp=head;

	system("cls");
	gotoxy(8,3);
	flouwer(83);
	gotoxy(8,15);
	flouwer(83);
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(28,4);
	printf("请输入要修改的用户的账号:");
	getstr(ayuan,9,1,0);
	iyuan=atoi(ayuan);

	count=Count(head);

	if(count<iyuan-10000000)
	{
   	
		Sleep(300);
		system("cls");
		gotoxy(48,13);
		printf("查无此人");
		gotoxy(48,14);
		printf("请稍等···");
		Sleep(2000);
		system("cls");
		master_fuction_choose(head);
	}	
	
	while(pNode->next!=NULL)
	{
   
		pNode=pNode->next;
		tTemp=pNode->pData;
		if(tTemp->number==iyuan)
		{
   
			if (tTemp->flag==3)
			{
   
				printf("\n该用户已被注销\n");
				printf("按键:1、继续进行撤销操作\t2、返回功能页面\t\t其他任意键:退出系统\n");
				printf("你的选择是:");
				scanf("%d",&a);
				if (a==1)
				{
   
					system("cls");
					mmodify(head);
				} 
				else if (a==2)
				{
   
					system("cls");
					master_fuction_choose(head);
				}
				else
				{
   
					exit(-1);
				}
			}
			for(j=3;j>0;j--)
			{
   
				gotoxy(28,6);
				printf("请输入原密码:");
				getstr(pwd1,7,1,1);
				
				if (strcmp(pwd1,tTemp->pwd)==0)
				{
   
					gotoxy(28,7);
					printf("密码正确,可以开始修改");
					gotoxy(28,8);
					printf("请输入修改后的密码:");
					getstr(pwd2,7,1,1);
					
					if (strlen(pwd2)!=6)
					{
   
						gotoxy(28,14);
						printf("请设置六位数密码!");
						Sleep(500);
						system("cls");
						gotoxy(28,4);
						printf("请设置六位数密码!");
						mmodify(head);
					}

					gotoxy(28,10);
					printf("请再次输入修改后的密码:");
					getstr(pwd3,7,1,1);
					
					if (strcmp(pwd2,pwd3)==0)
					{
   
						strcpy(tTemp->pwd,pwd2);
						
						if (strcmp(tTemp->pwd,pwd2)==0)
						{
   
							gotoxy(28,12);
							printf("修改完成");
							gotoxy(52,13);
							printf("密码为:%s", tTemp->pwd);
							gotoxy(52,14);
							printf("密码请妥善保管");
							List_to_file(head,fp,sizeof(TEST_T));
							
							gotoxy(52,15);
							mback(head);
						}
						else 
						{
   
							Sleep(200);
							system("cls");
							gotoxy(48,15);
							printf("修改失败");
							gotoxy(48,16);
							printf("请稍等···");
							Sleep(1000);
							mmodify(pTemp);
						}
					}
					else
					{
   
						Sleep(300);
						system("cls");
						gotoxy(48,15);
						printf("两次密码输入不一致");
						gotoxy(48,16);
						printf("请稍等···");
						Sleep(1000);
						mmodify(pTemp);
					}
				}
				else
				{
   
					system("cls");
					gotoxy(28,1);
					printf("密码错误,还有%d次机会\n",j-1);
					gotoxy(8,3);
					flouwer(83);
					gotoxy(8,15);
					flouwer(83);
					
					gotoxy(28,4);
					printf("请输入要修改的用户的账号:");
					printf("%d",iyuan);
				}	
			}	
		}	
	}

}


//注销用户
void cancel(POINT_T * head)
{
   
	int count=0;
	char al[8]={
   0};//转换
	int i=0,il=0,j=0;
	POINT_T *pNode=NULL;
	TEST_T * tTemp=NULL;
	pNode=head;
	
	Sleep(100);
	system("cls");
	gotoxy(8,3);
	flouwer(83);
	gotoxy(8,14);
	flouwer(83);
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(28,4);
	printf("请输入注销用户卡号:");
	getstr(al,9,1,0);
	il=atoi(al);
	count=Count(head)+10000000;
	if (count<il||il-10000000<0)
	{
   
		Sleep(300);
		system("cls");
		gotoxy(48,15);
		printf("查无此用户");
		gotoxy(48,16);
		printf("请稍等···");
		Sleep(1000);
		system("cls");
		cancel(head);
	}
	pTemp=find(pNode,il-10000000);
	tTemp=pTemp->pData;
	Sleep(100);
	system("cls");
	if (tTemp->money==0)
	{
   
		if(tTemp->flag==2)
		{
   
			tTemp->flag=3;
			gotoxy(28,5);
			printf("注销成功");
			List_to_file(head,fp,sizeof(TEST_T));

			gotoxy(13,19);
			printf("1.返回功能页面\t2.退出系统3、返回登录页面");
			gotoxy(13,20);
			printf("你的选择是 :");
			scanf("%d",&j);
			system("cls");
			if (j==1)
			{
   
				master_fuction_choose(head);
			} 
			else if (j==3)
			{
   
				_login(head,3);
			}
			else
			{
   
				exit(0);
			}
		}
		else if(tTemp->flag!=0||tTemp->flag!=1)
		{
   
			Sleep(300);
			system("cls");
			gotoxy(48,15);
			printf("权限不足");
		
			gotoxy(23,27);
			printf("1.返回功能页面\t2.退出系统\t3、返回登录页面");
			gotoxy(23,28);
			printf("你的选择是 :");
			scanf("%d",&j);
			system("cls");
			if (j==1)
			{
   
				master_fuction_choose(head);
			} 
			else if (j==3)
			{
   
				_login(head,3);
			}
			else
			{
   
				exit(0);
			}
		}
		else
		{
   
			Sleep(300);
			system("cls");
			gotoxy(48,15);
			printf("查无此用户");
			gotoxy(48,16);
			printf("请稍等···");
			Sleep(1000);
			system("cls");
			cancel(head);
		}
		master_fuction_choose(head);
	}
	else
	{
   
		system("cls");
		gotoxy(48,15);
		printf("该用户还有存款,不予注销");
		gotoxy(48,16);
		printf("请稍等···");
		Sleep(1000);
		system("cls");
		master_fuction_choose(head);
	}	
}




//(管理员)返回上一级
void mback(POINT_T * head)
{
   
	int j=0;
 	
 	Sleep(100);
 	system("cls");
	gotoxy(8,3);
	flouwer(83);
	gotoxy(8,14);
	flouwer(83);
	
	gotoxy(28,6);
	printf("确定返回吗?");
	gotoxy(28,7);
	printf("按键:0、返回登录页面\t1、功能界面\t2、退出系统");
	gotoxy(28,8);
	printf("你的选择是:");
	scanf("%d",&j);
	if(j==0)
	{
   
		system("cls");
		_login(head,3);
	}
	else if(j==1)
	{
   
		system("cls");
		master_fuction_choose(head);
	}
	else if(j==2)
	{
   
		exit(0);
	}
	else
	{
   
		system("cls");
		mback( head)	;
	}
}


//user.h

#ifndef _USER_H_
#define _USER_H_


//系统用户功能界面
void user_face();

//用户功能选择
void user_fuction_choose(POINT_T * pTemp,POINT_T * head,POINT_T * rhead);

//余额查询
void moneyreserch(POINT_T * pTemp);

//存款
void moneyin(POINT_T * pTemp,POINT_T * rhead);

//取款
void moneyout(POINT_T * pTemp,POINT_T * rhead);

//转账
void moneychange(POINT_T * pTemp,POINT_T * head,POINT_T * rhead);

//修改密码
void pwdchange(POINT_T * pTemp);

//(用户)返回上一级
void uback(POINT_T * pTemp,POINT_T * head,POINT_T * rhead);

//用户纪录查询
void reportfind(POINT_T * pTemp,POINT_T * rhead,POINT_T * head);

//交易记录按时间查询
void timereserch(POINT_T * pTemp,POINT_T * rhead);

#endif

//user.c

#include "public.h"
#include "user.h"
#include "other.h"

//系统用户功能界面
void user_face()
{
   
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(8,5);
	flouwer(83);
	gotoxy(36,9);
	printf("ATM机尊敬的用户功能界面");
	gotoxy(43,10);
	printf("版本1.0");
	gotoxy(8,12);
	printf("您需要什么操作?\n");
	gotoxy(8,13);
	printf("按键 :1.余额查询");
	gotoxy(15,14);
	printf("2.存款");
	gotoxy(15,15);
	printf("3.取款");
	gotoxy(15,16);	
	printf("4.转账");
	gotoxy(15,17);	
	printf("5.密码修改");
	gotoxy(15,18);	
	printf("6.所有交易记录查询");
	gotoxy(15,19);
	printf("7.按交易时间查询交易记录");
	gotoxy(15,20);
	printf("8.返回上一级或退出系统");
	gotoxy(8,24);
	flouwer(83);
	gotoxy(8,22);
	printf("请选择:");
}




//用户功能选择
void user_fuction_choose(POINT_T * pTemp,POINT_T * head,POINT_T * rhead)
{
   
	
	char a[1]={
   0};

	user_face();
	getstr(a,2,1,0);
	switch (a[0])
	{
   
	case 49:
		{
   
			system("cls");
			moneyreserch(pTemp);
		}break;
		
	case 50:
		{
   
			system("cls");
			moneyin(pTemp,rhead);
		}break;
		
	case 51:
		{
   	
			system("cls");
			moneyout(pTemp,rhead);
		}break;
		
	case 52:
		{
   
			system("cls");
			moneychange(pTemp,head,rhead);
		}break;
		
	case 53:
		{
   
			system("cls");
			pwdchange(pTemp);	
		}break;
		
	case 54:
		{
   
			system("cls");
			reportfind(pTemp,rhead,head);
		}break;
	case 55:
		{
   
			system("cls");
			timereserch(pTemp,rhead);
		}break;
	case 56:
		{
   
			system("cls");
			uback(pTemp,head,rhead);
		}break;
		
		
	default :
		{
   
			printf("错误指令,请重新输入\n");
			system("cls");
			user_fuction_choose(pTemp,head,rhead);
		}break;
		
	}
	
}

//余额查询
void moneyreserch(POINT_T * pTemp)
{
   
	int b=0;
	TEST_T * tTemp=NULL;
	tTemp=pTemp->pData;
	
	system("cls");
	gotoxy(20,10);
	printf("您的账户余额为 :%d\n",tTemp->money);

	gotoxy(60,27);
	printf("按键:0、返回登录页面\t1、返回功能界面\t2、退出系统");
	gotoxy(68,28);
	printf("你的选择是:");
	scanf("%d",&b);
				
	if(b==0)
	{
   
		system("cls");
		_login(head,3);
	}
	else if(b==2)
	{
   
		exit(0);
	}
	else if(b==1)
	{
   
		system("cls");
		user_fuction_choose(pTemp,head,rhead);
	}
	else
	{
   
		exit(0);
	}
			
}


//存款
void moneyin(POINT_T * pTemp,POINT_T * rhead)
{
   
	char cszTime[10] = {
   0};	//时间数组

	char ack[8]={
   0};
	int ick=0;
	int d=0;
	TEST_T * tTemp=NULL;

	REPORT_T * newadd=NULL;
	tTemp=pTemp->pData;
	
	system("cls");
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(8,5);
	flouwer(83);
	gotoxy(8,16);
	flouwer(83);
	
	gotoxy(20,10);
	printf("当前余额为:%d",tTemp->money);
	gotoxy(20,13);
	printf("请输入整百数额,单次存款上限为万元,谢谢合作\n");
	gotoxy(20,12);
	printf("请输入存款额 :");

	getstr(ack,6,1,0);
	ick=atoi(ack);
	if (ick<=0)
	{
   
		system("cls");
		gotoxy(50,10);
		printf("请不要输入空额");
		Sleep(500);
		moneyin(pTemp,rhead);
	}
	if (ick>=0&&ick%100==0)
	{
   
		
		tTemp->money=tTemp->money+ick;
	
		List_to_file(head,fp,sizeof(TEST_T));
		Sleep(1000);
		system("cls");
		
		
		getLocalTime(cszTime);	//获取时间


		//存款纪录写入文件
		newadd=(REPORT_T *)malloc(sizeof(REPORT_T));
		if( newadd==NULL )
		{
   
			gotoxy(28,7);
			printf("申请内存失败");
			exit(1);
		}
		memset(newadd,0,sizeof(REPORT_T));
		newadd->rflag=1;
		newadd->amount=ick;
		newadd->lastmoney=tTemp->money;
		newadd->number1=0;
		newadd->number2=tTemp->number;

		strcpy(newadd->time,cszTime);	//时间写入

		add(rhead,newadd);

		List_to_file(rhead,rfp,sizeof(REPORT_T));
	
		gotoxy(20,12);
		printf("存款完成!");
		gotoxy(20,13);
		printf("存款后账户余额为:%d",tTemp->money);

		
		gotoxy(60,27);
		printf("按键:0、返回登录页面\t1、返回功能界面\t2、退出系统");
		gotoxy(60,28);
		printf("你的选择是:");
		scanf("%d",&d);
		
		if(d==0)
		{
   
			system("cls");
			_login(head,3);
		}
		else if(d==2)
		{
   
			exit(0);
		}
		else if(d==1)
		{
   
			system("cls");
			user_fuction_choose(pTemp,head,rhead);
		}
		else
		{
   
			exit(0);
		}
		
	}
	
	else
	{
   
		gotoxy(20,15);
		printf("请按提示规格存款\n");
		gotoxy(20,16);
		printf("稍等···");
		Sleep(2000);
		system("cls");
		moneyin(pTemp,rhead);
	}
	
}


//取款
void moneyout(POINT_T * pTemp,POINT_T * rhead)
{
   
	char aqk[8]={
   0};
	int iqk=0;
	int e=0;

	char qszTime[10];	//时间数组


	TEST_T * tTemp=NULL;
	REPORT_T * newadd=NULL;
	tTemp=pTemp->pData;
	system("cls");
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(8,5);
	flouwer(83);
	gotoxy(8,16);
	flouwer(83);
	
	gotoxy(20,10);
	printf("当前余额为:%d",tTemp->money);
	gotoxy(20,13);
	printf("请输入整百数额,单次取款上限为万元,谢谢合作\n");
	gotoxy(20,12);
	printf("请输入取款额 :");
	getstr(aqk,6,1,0);
	iqk=atoi(aqk);

	if (iqk<=0)
	{
   
		system("cls");
		gotoxy(50,10);
		printf("请不要输入空额");
		Sleep(500);
		moneyout(pTemp,rhead);
	}

	if (iqk>=0&&iqk%100==0&&iqk<=tTemp->money)
	{
   
		
		tTemp->money=tTemp->money-iqk;
	
		List_to_file(head,fp,sizeof(TEST_T));

		getLocalTime(qszTime);	//获取时间


//取款记录存入链表
		newadd=(REPORT_T *)malloc(sizeof(REPORT_T));
		if( newadd==NULL )
		{
   
			gotoxy(28,7);
			printf("申请内存失败");
			exit(1);
		}
		memset(newadd,0,sizeof(REPORT_T));
		newadd->rflag=2;
		newadd->amount=iqk;
		newadd->lastmoney=tTemp->money;
		newadd->number1=tTemp->number;
		newadd->number2=0;

		strcpy(newadd->time,qszTime);	//时间写入

		add(rhead,newadd);
	
	
		List_to_file(rhead,rfp,sizeof(REPORT_T));
	
		system("cls");
		gotoxy(20,12);
		printf("取款完成!尊敬的用户,现金请当面点清,离去概不负责");
		gotoxy(20,13);
		printf("取款后账户余额为:%d",tTemp->money);

		gotoxy(60,27);
		printf("按键:0、返回登录页面\t1、返回功能界面\t2、退出系统");
		gotoxy(68,28);
		printf("你的选择是:");
		scanf("%d",&e);
		
		if(e==0)
		{
   
			system("cls");
			_login(head,3);
		}
		else if(e==2)
		{
   
			exit(0);
		}
		else if(e==1)
		{
   
			system("cls");
			user_fuction_choose(pTemp,head,rhead);
		}
		else
		{
   
			exit(0);
		}
		
	}
	
	else if (iqk>=0&&iqk%100==0&&iqk>=tTemp->money)
	{
   
		
		gotoxy(20,14);
		printf("目前账户余额为 %d,余额不足",tTemp->money);
		gotoxy(20,15);
		printf("稍等···");
		Sleep(2000);
		system("cls");
		moneyout(pTemp,rhead);
	}
	else
	{
   
		gotoxy(20,15);
		printf("请按提示规格取款\n");
		gotoxy(20,16);
		printf("稍等···");
		Sleep(2000);
		system("cls");
		moneyout(pTemp,rhead);
	}
}



//转账
void moneychange(POINT_T * pTemp,POINT_T * head,POINT_T * rhead)
{
   
	char zszTime[10];	//时间数组

	char ah[8]={
   0};//转入账户
	int ih=0;

	char azh[6]={
   0};//转账金额
	int izh=0;

	int g=0;
	int j=0;
	int sure=0;		//转账确认

	int count=0;
	TEST_T * tTemp=NULL;	//付出者
	TEST_T * tTempm2=NULL;	//转账用//接收者
	POINT_T * pNode=head;
	REPORT_T * newadd=NULL;

	tTemp=pTemp->pData;
	system("cls");
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(36,6);
	printf("目前账户余额为:%d",tTemp->money);
	gotoxy(36,8);
	printf("请输入转账账户:");
	getstr(ah,9,1,0);
	ih=atoi(ah);

	if (tTemp->number == ih)
	{
   
		gotoxy(36,9);
		printf("给自己转账是没有意义的,请重新选择");
		Sleep(900);
		system("cls");
		moneychange(pTemp,head,rhead);
	}

	gotoxy(36,9);
	printf("请输入转账金额:");
	getstr(azh,6,1,0);
	izh=atoi(azh);

	if (izh<=0)
	{
   
		system("cls");
		gotoxy(50,10);
		printf("请不要输入空额");
		Sleep(500);
		moneychange(pTemp,head,rhead);
	}

	if (izh>tTemp->money)
	{
   
		gotoxy(36,11);
		printf("当前余额不足");
		moneychange(pTemp,head,rhead);
	} 
	else if(izh < 0 || izh % 100 != 0)
	{
   
		gotoxy(36,11);
		printf("请按规格转账");
		moneychange(pTemp,head,rhead);
	}
	else
	{
   
		count=Count(pNode);
		while(pNode->next!=NULL)
		{
   
			
			for(g=0;g<count;g++)
			{
   
				pNode=pNode->next;
				tTempm2=pNode->pData;
				
				if (tTempm2->number==ih && tTempm2->flag==2)
				{
   
					gotoxy(36,11);
					printf("请再次确认是否转账 》》》确认转账请按  》》》‘1’,取消转账按任意键");
					gotoxy(36,12);
					printf("XX银行竭力保护您的财产安全");
					gotoxy(36,13);
					printf("你的选择是:");
					scanf("%d",&sure);
					if (sure !=1 )
					{
   
						uback(pTemp,head,rhead);
					}
					system("cls");
					gotoxy(36,11);
					printf("转账成功");
				
					tTemp->money=tTemp->money-izh;
					tTempm2->money=tTempm2->money+izh;
					
					List_to_file(head,fp,sizeof(TEST_T));


					getLocalTime(zszTime);	//获取时间


//转账转出纪录写入文件
					newadd=(REPORT_T *)malloc(sizeof(REPORT_T));
					if( newadd==NULL )
					{
   
						gotoxy(28,7);
						printf("申请内存失败");
						exit(1);
					}
					memset(newadd,0,sizeof(REPORT_T));
					newadd->rflag=3;
					newadd->amount=izh;
					newadd->lastmoney=tTemp->money;
					newadd->lastmoney2=tTempm2->money;
					newadd->number1=tTemp->number;//谁出钱
					newadd->number2=tTempm2->number;//谁收钱

					strcpy(newadd->time,zszTime);	//时间写入
					add(rhead,newadd);

//转账转入纪录写入链表


					List_to_file(rhead,rfp,sizeof(REPORT_T));

					gotoxy(36,12);
					printf("当前余额为:%d",tTemp->money);
					
					//光标位置都不对
					gotoxy(60,27);
					printf("按键:0、返回登录页面\t1、返回功能界面\t2、退出系统");
					gotoxy(68,28);
					printf("你的选择是:");
					scanf("%d",&j);
					
					if(j==0)
					{
   
						system("cls");
						_login(head,3);
					}
					else if(j==2)
					{
   
						exit(0);
					}
					else if(j==1)
					{
   
						system("cls");
						user_fuction_choose(pTemp,head,rhead);
					}
					else
					{
   
						exit(0);
					}
				}
			}
			gotoxy(36,11);
			printf("转账失败。可能原因:1、账号错误。2、无法向管理员发起转账。");
			gotoxy(60,27);
			printf("按键:0、返回登录页面\t1、返回功能界面\t2、退出系统");
			gotoxy(68,28);
			printf("你的选择是:");
			scanf("%d",&j);
			
			if(j==0)
			{
   
				system("cls");
				_login(head,3);
			}
			else if(j==2)
			{
   
				exit(0);
			}
			else if(j==1)
			{
   
				system("cls");
				user_fuction_choose(pTemp,head,rhead);
			}
			else
			{
   
				exit(0);
			}
		}
	}

}


//修改密码
void pwdchange(POINT_T * pTemp)
{
   
	int i=0,k=0;
	char pwd1[7];
	char pwd2[7];	//修改后密码
	char pwd3[7];	//二次输入密码
	TEST_T * tTemp=NULL;
	tTemp=pTemp->pData;
	
	system("cls");
	gotoxy(8,3);
	flouwer(83);
	gotoxy(8,14);
	flouwer(83);
	gotoxy(100,25);
	printf("按ESC键退出系统");

	for(k=3;k>0;k--)
	{
   
		gotoxy(28,6);
		printf("请输入原密码:");
		gotoxy(52,6);
		getstr(pwd1,7,1,1);
		
		if (strcmp(pwd1,tTemp->pwd)==0)
		{
   
			gotoxy(28,8);
			printf("请输入修改后的密码:");
			gotoxy(52,8);
			getstr(pwd2,7,1,1);
			
			gotoxy(28,10);
			printf("请再次输入修改后的密码:");
			gotoxy(52,10);
			getstr(pwd3,7,1,1);
			
			if (strcmp(pwd2,pwd3)==0)
			{
   
				strcpy(tTemp->pwd,pwd2);
				
				if (strcmp(tTemp->pwd,pwd2)==0)
				{
   
					gotoxy(28,12);
					printf("修改完成");
					gotoxy(52,12);
					printf("密码为:%s",tTemp->pwd);
					
					
					gotoxy(50,27);
					printf("按键:0、返回登录页面\t1、返回功能界面\t2、退出系统");
					gotoxy(68,28);
					printf("你的选择是:");
					scanf("%d",&k);
					
					if(k==0)
					{
   
						system("cls");
						_login(head,3);
					}
					else if(k==2)
					{
   
						exit(0);
					}
					else if(k==1)
					{
   
						system("cls");
						user_fuction_choose(pTemp,head,rhead);
					}
					else
					{
   
						exit(0);
					}
				}
				else 
				{
   
					gotoxy(28,12);
					printf("修改失败");
					Sleep(200);
					system("cls");
					pwdchange(pTemp);
				}
			}
			else
			{
   
				gotoxy(28,12);
				printf("两次密码输入不一致");
				Sleep(300);
				system("cls");
				pwdchange(pTemp);
			}
		}
		else
		{
   
			gotoxy(28,12);
			printf("密码错误,还有%d次机会\n",k);
		}	
	}	
			

}

//账户记录查询
void reportfind(POINT_T * pTemp,POINT_T * rhead,POINT_T * head)
{
   
	int l=0;
	int x=0;
	int i=1;//序号计数
	int w=0;//节点偏移
	int y=0;//查询页码
	int countnt=0;
	int ypos=2;//打印列数递增
	char ch='0';
	POINT_T * temp = rhead;
	TEST_T * tt = NULL;//当前登录者
	REPORT_T * nn=NULL;
	tt = pTemp->pData;

	
	countnt=Count(rhead);

	if ( countnt==0 )
	{
   
		printf("您的账户没有一条纪录\n");
		printf("按ESC键退出系统\n");
		printf("按任意键返回功能页面");
		ch=getch();							//用这个来弄ESC
		if(ch==27)
		{
   
			exit(0);
		}
		system("cls");
		user_fuction_choose(pTemp,head,rhead);
	}
	countnt=(countnt-1)/10+1;

	printf("共有%d页纪录\n",countnt);
	printf("请输入要查询的页数,\n如需退出请按0页\n");
	scanf("%d",&y);
	system("cls");
	
	if (y==0)
	{
   
		system("cls");
		uback(pTemp,head,rhead);
	}
	else if(y>=countnt+1||y<0)
	{
   
		printf("无此页");
		Sleep(1000);
		system("cls");
		uback(pTemp,head,rhead);
	}
	else
	{
   
		y=10*(y-1)+1;
		gotoxy(3,1);
		printf("序号");
		gotoxy(18,1);
		printf("时间");
		gotoxy(33,1);
		printf("金额");
		gotoxy(48,1);
		printf("余额");
		gotoxy(63,1);
		printf("摘要");
		gotoxy(78,1);
		printf("交易发生源");
		
		for(w=0;w<y;w++)
		{
   
			temp = temp->next;
		}
		while(temp!= NULL)
		{
   	
		
			nn = temp->pData;
			if(x<10)
			{
   
				if (tt->number==nn->number1)//打印个人纪录//他是出账者或入账者
				{
   
					gotoxy(3,ypos);
					printf("%d",i);//i要递增
					gotoxy(18,ypos);
					printf("%s",nn->time);
					gotoxy(33,ypos);
					printf("%d",nn->amount);
					gotoxy(48,ypos);
					printf("%d",nn->lastmoney);
					gotoxy(63,ypos);
					if(nn->rflag==1)
					{
   
						printf("存款");
					}
					else if(nn->rflag==2)
					{
   
						printf("取款");
					}
					else if(nn->rflag==3)
					{
   
						printf("账户转出");
					}
					else
					{
   
						printf("erro");
					}
					
					gotoxy(78,ypos);
					if(nn->rflag==1||nn->rflag==2)
					{
   
						printf("ATM");
					}
					else if(nn->rflag==3)
					{
   
						printf("%d",nn->number2);
					}
					else if(nn->rflag==4)
					{
   
						printf("%d",nn->number1);
					}
					else
					{
   
						printf("erro");
					}
					ypos++;
					i++;
					x++;
				}
				else if(tt->number==nn->number2)
				{
   
					gotoxy(3,ypos);
					printf("%d",i);//i要递增
					gotoxy(18,ypos);
					printf("%s",nn->time);
					gotoxy(33,ypos);
					printf("%d",nn->amount);
					gotoxy(48,ypos);
					printf("%d",nn->lastmoney2);
					gotoxy(63,ypos);
					printf("账户转入");
					gotoxy(78,ypos);
					printf("%d",nn->number1);
					ypos++;
					i++;
					x++;
				}
				temp = temp->next;
			}
			
			else
			{
   
				printf("按任意键继续");
				getch();
				system("cls");
				reportfind(pTemp,rhead,head);
			}
			printf("\n");
		}
	}
	

	printf("按任意键继续");
	getch();
	system("cls");
	gotoxy(50,27);
	printf("按键:0、返回登录页面\t1、返回功能界面\t2、退出系统");
	gotoxy(68,28);
	printf("你的选择是:");
	scanf("%d",&l);
	
	if(l==0)
	{
   
		system("cls");
		_login(head,3);
	}
	else if(l==2)
	{
   
		exit(0);
	}
	else if(l==1)
	{
   
		system("cls");
		user_fuction_choose(pTemp,head,rhead);
	}
	else
	{
   
		uback(pTemp,head,rhead);
	}
}

//(用户)返回上一级
void uback(POINT_T * pTemp,POINT_T * head,POINT_T * rhead)
{
   
	int m=0;
	
	
	gotoxy(60,27);
	printf("按键:0、返回登录页面\t1、返回功能界面\t2、退出系统");
	gotoxy(50,28);
	printf("你的选择是:");
	scanf("%d",&m);
	
	if(m==0)
	{
   
		system("cls");
		_login(head,3);
	}
	else if(m==2)
	{
   
		exit(0);
	}
	else if(m==1)
	{
   
		system("cls");
		user_fuction_choose(pTemp,head,rhead);
	}
	else
	{
   
		exit(0);
	}
}



//交易记录按时间模糊查询
void timereserch(POINT_T * pTemp,POINT_T * rhead)
{
   
	int i=1;//序号
	int ypos=2;//坐标

	char ch='0';
	 
	int emun1 = 0;//纪录月份//大月为1
	int emun2 = 0;//纪录月份//小月为2

	char ayear1[8] = {
   0};			//起始时间
	char amonth1[4] = {
   0};
	char aday1[4] = {
   0};
	int iyear1 = 0;
	int imonth1 = 0;
	int iday1 = 0;

	char ayear2[8] = {
   0};			//结束时间
	char amonth2[4] = {
   0};
	char aday2[4] = {
   0};
	int iyear2 = 0;
	int imonth2 = 0;
	int iday2 = 0;

	char searchtime_begin[20] = {
   0};
	char searchtime_end[20] = {
   0};

	POINT_T * tmp = rhead;
	REPORT_T * linshi=NULL;
	TEST_T * peo = NULL;
	peo = pTemp->pData;

	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(44,3);
	printf("请输入起始查询年(XXXX)、月(XX)、日(XX)");
	gotoxy(44,4);
	printf("-");
	gotoxy(47,4);
	printf("-");
	gotoxy(40,4);
	getstr(ayear1,5,1,0);
	gotoxy(45,4);
	getstr(amonth1,3,1,0);
	gotoxy(48,4);
	getstr(aday1,3,1,0);
	iyear1 = atoi(ayear1);
	imonth1 = atoi(amonth1);
	iday1 = atoi(aday1);
	sprintf(searchtime_begin,"%d-%02d-%02d",iyear1,imonth1,iday1);

	if (strlen(ayear1)!=4||strlen(amonth1)!=2||strlen(aday1)!=2)
	{
   
		gotoxy(0,7);
		printf("请按格式输入\n按其他任意键重新输入");
		getch();
		system("cls");
		timereserch(pTemp,rhead);
	}

	if (imonth1>12||imonth1<0)
	{
   
		gotoxy(0,7);
		printf("请输入正确月份\n按其他任意键重新输入");
		getch();
		system("cls");
		timereserch(pTemp,rhead);		
	}

	if (imonth1==1||imonth1==3||imonth1==5||imonth1==7||imonth1==8||imonth1==10||imonth1==12)
	{
   
		emun1=1;
	}
	else
	{
   
		emun1=2;
	}

	if (emun1==1)
	{
   
		if (iday1>31||iday1<0)
		{
   
			gotoxy(0,7);
			printf("请输入正确日期\n按其他任意键重新输入");
			getch();
			system("cls");
			timereserch(pTemp,rhead);		
		}
	}

	if (emun1==2)
	{
   
		if (iday1>30||iday1<0)
		{
   
			gotoxy(0,7);
			printf("请输入正确日期\n按其他任意键重新输入");
			getch();
			system("cls");
			timereserch(pTemp,rhead);		
		}
	}

	gotoxy(44,6);
	printf("请输入结束查询年(XXXX)、月(XX)、日(XX)");
	gotoxy(44,7);
	printf("-");
	gotoxy(47,7);
	printf("-");
	gotoxy(40,7);
	getstr(ayear2,5,1,0);
	gotoxy(45,7);
	getstr(amonth2,3,1,0);
	gotoxy(48,7);
	getstr(aday2,3,1,0);
	system("cls");
	iyear2 = atoi(ayear2);
	imonth2 = atoi(amonth2);
	iday2 = atoi(aday2);
	sprintf(searchtime_end,"%d-%02d-%02d",iyear2,imonth2,iday2);


	if (strlen(ayear2)!=4||strlen(amonth2)!=2||strlen(aday2)!=2)
	{
   
		gotoxy(0,9);
		printf("请按格式输入\n按其他任意键重新输入");
		getch();
		system("cls");
		timereserch(pTemp,rhead);
	}

	if (imonth2>12||imonth2<0)
	{
   
		gotoxy(0,7);
		printf("请输入正确月份\n按其他任意键重新输入");
		getch();
		system("cls");
		timereserch(pTemp,rhead);		
	}
	
	if (imonth2==1||imonth2==3||imonth2==5||imonth2==7||imonth2==8||imonth2==10||imonth2==12)
	{
   
		emun2=1;
	}
	else
	{
   
		emun2=2;
	}
	
	if (emun2==1)
	{
   
		if (iday2>31||iday2<0)
		{
   
			gotoxy(0,7);
			printf("请输入正确日期\n按其他任意键重新输入");
			getch();
			system("cls");
			timereserch(pTemp,rhead);		
		}
	}
	
	if (emun2==2)
	{
   
		if (iday2>30||iday2<0)
		{
   
			gotoxy(0,7);
			printf("请输入正确日期\n按其他任意键重新输入");
			getch();
			system("cls");
			timereserch(pTemp,rhead);		
		}
	}

	if (strncmp(searchtime_begin,searchtime_end,10)>0)
	{
   
		gotoxy(20,6);
		printf("起始时间大于结束时间,请重新输入");
		gotoxy(20,7);
		printf("按ESC键退出系统,按其他任意键重新输入");
		ch = getch();
		if(ch==27)
		{
   
			exit(0);
		}
		system("cls");
		timereserch(pTemp,rhead);
	}
//
	

	gotoxy(3,1);
	printf("序号");
	gotoxy(18,1);
	printf("时间");
	gotoxy(33,1);
	printf("金额");
	gotoxy(48,1);
	printf("余额");
	gotoxy(63,1);
	printf("摘要");
	gotoxy(78,1);
	printf("交易发生源");

	
	while(tmp->next != NULL)
	{
   
		tmp = tmp->next;
		linshi = tmp->pData;
		
		if (strncmp(searchtime_begin,linshi->time, 10)>=0&&strncmp(searchtime_end,linshi->time, 10)<=0)
		{
   
		
			if (peo->number==linshi->number1||peo->number==linshi->number2)//打印个人纪录//他是出账者或入账者
			{
   
				gotoxy(3,ypos);
				printf("%d",i);//i要递增
				gotoxy(18,ypos);
				printf("%s",linshi->time);
				gotoxy(33,ypos);
				printf("%d",linshi->amount);
				gotoxy(48,ypos);
				printf("%d",linshi->lastmoney);
				gotoxy(63,ypos);
				if(linshi->rflag==1)
				{
   
					printf("存款");
				}
				else if(linshi->rflag==2)
				{
   
					printf("取款");
				}
				else if(linshi->rflag==3)
				{
   
					printf("转账转出");
				}
				else if(linshi->rflag==4)
				{
   
					printf("转账转入");
				}
				else
				{
   
					printf("erro");
				}
				
				gotoxy(78,ypos);
				if(linshi->rflag==1||linshi->rflag==2)
				{
   
					printf("ATM");
				}
				else if(linshi->rflag==3)
				{
   
					printf("%d",linshi->number2);
				}
				else if(linshi->rflag==4)
				{
   
					printf("%d",linshi->number1);
				}
				else
				{
   
					printf("erro");
				}
				ypos++;
				i++;
			}
		}
		else
		{
   
			getch();
			system("cls");
			timereserch(pTemp,rhead);
		}
		printf("\n");
		
		}
		uback(pTemp,head,rhead);
}

//supermaster.h

#ifndef _SUPERMASTER_H_
#define _SUPERMASTER_H_



//系统管理员功能界面
void supermaster_face();


//管理员功能选择与执行
void supermaster_fuction_choose(POINT_T * head);


//注册新用户
void snewadd(POINT_T * head);


//超级管理员查找用户
void sfind(POINT_T * head);

//超级精确查找用户数据
void sfinded(POINT_T * head);
//分类查询
void breakfind(POINT_T * head);


//显示所有用户
void print(POINT_T * head);


//超级管理员修改用户密码//
void smodify(POINT_T *head);


//注销用户
void scancel(POINT_T * head);


//(管理员)返回上一级
void sback(POINT_T * head);


#endif

//supermaster.c

#include "public.h"
#include "other.h"
#include "supermaster.h"


//超级管理员功能界面
void supermaster_face()
{
   
	gotoxy(8,5);
	flouwer(83);
	gotoxy(36,9);
	printf("ATM机超级管理员功能界面");
	gotoxy(43,10);
	printf("版本1.0");
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(8,12);
	printf("您需要什么操作?");
	gotoxy(8,13);
	printf("按键 :1.新增用户或管理员\t2.查询人员信息\t\t3.查询所有用户");
	gotoxy(15,14);
	printf("4.注销用户或管理员\t5.人员密码修改\t\t6.返回登录/退出系统");
	gotoxy(8,16);
	flouwer(83);
	gotoxy(8,17);
	printf("请选择:");
}




//超级管理员操作选项
void supermaster_fuction_choose(POINT_T * head)
{
   
	char i[1]={
   0};
	int j=0,k=0,l=0;
	int index=0;
	supermaster_face();
	getstr(i,2,1,0);
	switch (i[0])
	{
   
	case 49:
		{
   	
			system("cls");
			snewadd(head);
		}break;
		
	case 50:
		{
   
			system("cls");
			sfind(head);
		}break;
		
	case 51:
		{
   
			system("cls");
			print(head);		
		} break;
		
	case 52:
		{
   
			system("cls");
			scancel(head);
		}break;

	case 53:
		{
   
			system("cls");
			smodify(head);
		}break;
		
	case 54:
		{
   
			system("cls");
			sback(head);
		}break;
		
	default :
		{
   
			gotoxy(48,15);
			printf("错误指令,请重新输入");
			gotoxy(48,16);
			printf("请稍等···");
			Sleep(1000);
			system("cls");
			supermaster_fuction_choose(head);
		}break;
		
	}
	
}



//开户
void snewadd(POINT_T * head)
{
   
	char ch[12]; //用于添加用户名字
	int count=0;    //用于新增用户编号
	char aflag[1]={
   0}; //添加选择
	int iflag=0;
	int j=0;
	char pwd1[8];//密码需要满6位
	char pwd2[8];
	TEST_T * newadd =NULL;
	
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(38,10);
	printf("添加  1.管理员账号  2.普通用户账号  3.算了不加了");
	gotoxy(38,11);
	printf("你的选择是:");
	getstr(aflag,2,1,0);
	iflag=atoi(aflag);

	
	
	
	system("cls");
	gotoxy(8,3);
	flouwer(83);
	gotoxy(8,14);
	flouwer(83);
	gotoxy(100,25);
	printf("按ESC键退出系统");
	
	if(iflag==1)
	{
   		
		gotoxy(28,6);
		printf("请输入新添管理员名字(限8位):");
		getstr(ch,9,2,0);
		
		gotoxy(28,10);
		printf("请输入新添管理员密码(限6位):");
		getstr(pwd1,7,1,1);
		
		if (strlen(pwd1)!=6)
		{
   
			gotoxy(28,14);
			printf("请设置六位数密码!");
			Sleep(500);
			system("cls");
			gotoxy(28,4);
			printf("请设置六位数密码!");
			snewadd(head);
		}


		gotoxy(28,12);
		printf("请再次输入新添管理员密码:");
		getstr(pwd2,7,1,1);
	}
	else if(iflag==2)
	{
   
		gotoxy(28,6);
		printf("请输入新添用户名字(限8位):");
		getstr(ch,9,2,0);
		
		gotoxy(28,10);
		printf("请输入新添用户密码(限6位):");
		getstr(pwd1,7,1,1);
		
		if (strlen(pwd1)!=6)
		{
   
			gotoxy(28,14);
			printf("请设置六位数密码!");
			Sleep(500);
			system("cls");
			gotoxy(28,4);
			printf("请设置六位数密码!");
			snewadd(head);
		}

		gotoxy(28,12);
		printf("请再次输入新添用户密码:");
		getstr(pwd2,7,1,1);
		
	}
	else if(iflag==3)
	{
   
		gotoxy(48,16);
		printf("请稍等···");
		Sleep(1000);
		system("cls");
		supermaster_fuction_choose(head);		
	}
	else
	{
   
		system("cls");
		gotoxy(48,15);
		printf("格式错误,请重新选择");
		gotoxy(48,16);
		printf("请稍等···");
		Sleep(1500);
		system("cls");
		snewadd(head);
	}
	
	
	
	if(strcmp(pwd1,pwd2)==0)
	{
   
		newadd = (TEST_T *)malloc(sizeof(TEST_T));
		if(newadd==NULL)
		{
   
			gotoxy(28,7);
			printf("申请内存失败");
			exit(1);
		}
		memset(newadd,0,sizeof(TEST_T));

		count=Count(head)+10000001;
	
		strcpy(newadd->name,ch);
		strcpy(newadd->pwd,pwd1);
		newadd->number=count;
		newadd->flag=iflag;
		newadd->money=0;
		add(head,newadd);
		
		gotoxy(28,15);
		printf("添加完成");
		gotoxy(28,16);
		
		if (iflag == 1)
		{
   
			printf("用户名:%s\t账号:%d\t余额:%d\t普通管理员",newadd->name,newadd->number,newadd->money);
		} 
		else 
		{
   
			printf("用户名:%s\t账号:%d\t余额:%d\t普通用户",newadd->name,newadd->number,newadd->money);
		}
		
		
		List_to_file(head,fp,sizeof(TEST_T));
		
	}
	
	
	gotoxy(50,19);
	printf("按键 :1、返回操作页面\t2、保存并退出");
	gotoxy(50,20);
	printf("你的选择是:");
	scanf("%d",&j);
	system("cls");
	if (j==1)
	{
   
		supermaster_fuction_choose(head);
	} 
	else
	{
   
		exit(0);
	}
	
}



//超级管理员查找用户
void sfind(POINT_T * head)
{
   
	char l[1]={
   0};
	char s[1]={
   0};
	int j=0;
	system("cls");
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(40,8);
	printf("1、分类查询\t2、条件查询");
	gotoxy(40,9);
	printf("你的选择是:");
	getstr(l,2,1,0);
	
	switch(l[0])
	{
   
	case 49:
		{
   
			system("cls");
			breakfind(head);	
		}break;
	case 50:
		{
   
			gotoxy(40,11);
			printf("1、依账号查询\t2、用户名模糊查询");
			gotoxy(40,12);
			printf("你的选择是:");
			getstr(s,2,1,0);
			if (s[0]=='1')
			{
   
				system("cls");
				sfinded(head);
			}
			else if(s[0]=='2')
			{
   
				system("cls");
				fuzzyreserch(head);
				system("cls");
				supermaster_fuction_choose(head);
			}
			else
			{
   
				system("cls");
				sfind(head);
			}
			
		}break;
	default:
		{
   
			sfind(head);
		}break;
	}	
	
}
//超级精确查找用户数据
void sfinded(POINT_T * head)
{
   
	int count=0;
	char aindex[8]={
   0};
	int iindex=0,j=0;
	TEST_T * tTemp = NULL;
	//这一块属于精确查询///
	system("cls");
	gotoxy(100,25);
	printf("按ESC键退出系统");
	printf("请输入查询用户卡号\n");
	getstr(aindex,9,1,0);

	iindex=atoi(aindex);
	
	count=Count(head);
	
	if(count<iindex-10000000)
	{
   	
		Sleep(300);
		system("cls");
		gotoxy(48,13);
		printf("查无此人");
		gotoxy(48,14);
		printf("请稍等···");
		Sleep(2000);
		system("cls");
		supermaster_fuction_choose(head);
	}	

	pTemp=find(head,iindex-10000000);
	tTemp=pTemp->pData;
	if(tTemp->flag==1)
	{
   
		gotoxy(13,7);
		printf("用户名:%s\t用户账号%d\t用户余额:%d\t普通管理员",tTemp->name,tTemp->number,0);
	}
	else if (tTemp->flag==2)
	{
   
		gotoxy(13,7);
		printf("用户名:%s\t用户账号:%d\t用户余额:%d\t普通用户",tTemp->name,tTemp->number,tTemp->money);
	}
	else if (tTemp->flag==0)
	{
   
		gotoxy(13,7);
		printf("姓名:%s\t账号:%d\t超级管理员",tTemp->name,tTemp->number,tTemp->pwd);
	}
	else if (tTemp->flag==3)
	{
   
		gotoxy(13,7);
		printf("用户名:%s\t用户账号:%d\t该用户已被注销",tTemp->name,tTemp->number);				
	}
	else
	{
   
		gotoxy(13,7);
		printf("该用户不存在\n");	
	}

	gotoxy(68,27);
	printf("按键:0、返回\t1、功能界面\t2、退出系统");
	gotoxy(68,28);
	printf("你的选择是:");
	scanf("%d",&j);
	
	if(j==0)
	{
   
		system("cls");
		_login(head,3);
	}
	else if(j==2)
	{
   
		exit(0);
	}
	else
	{
   
		system("cls");
		supermaster_fuction_choose(head);
	}
}


//分类查询
void breakfind(POINT_T * head)
{
   
	int ypos=15;//位置变量		//为什么被初始化成0了

	int j=0;
	char index[2]={
   0};
	POINT_T * pfind=head;
	TEST_T * tTmep=NULL;
	
	gotoxy(40,10);
	printf("选择查询:1、所有管理员\t2、所有活跃用户");
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(40,11);
	printf("你的选择是:");
	getstr(index,2,1,0);
	
	gotoxy(3,13);
	printf("用户名");
	gotoxy(18,13);
	printf("用户账号");
	gotoxy(33,13);
	printf("用户余额");
	
	
	
	while(pfind->next!=NULL)							
	{
   
		pfind=pfind->next;
		tTmep=pfind->pData;
		if(tTmep->flag!=3)
		{
   
			switch(index[0])
			{
   
			case 49:
				{
   
					if (tTmep->flag==1)
					{
   
						gotoxy(3,ypos);
						printf("%s",tTmep->name);
						gotoxy(18,ypos);
						printf("%d",tTmep->number);
						gotoxy(33,ypos);
						printf("%d",tTmep->money);
						gotoxy(48,ypos);
						printf("普通管理员");
						ypos++;
					}
				} break;
				
			case 50:
				{
   
					if (tTmep->flag==2)
					{
   
						gotoxy(3,ypos);
						printf("%s",tTmep->name);
						gotoxy(18,ypos);
						printf("%d",tTmep->number);
						gotoxy(33,ypos);
						printf("%d",tTmep->money);
						gotoxy(48,ypos);
						printf("普通用户");
						ypos++;
					}		
				} break;
				
			default :
				{
   
					gotoxy(40,13);
					printf("格式错误,请重新选择");
					Sleep(400);
					breakfind(pfind);
				}break;
			}
		}
	}
	
	
	gotoxy(58,27);
	printf("按键:0、返回登录页面\t1、返回功能界面\t2、退出系统");
	gotoxy(58,28);
	printf("你的选择是:");
	scanf("%d",&j);
	
	if(j==0)
	{
   
		system("cls");
		_login(head,3);
	}
	else if(j==2)
	{
   
		exit(0);
	}
	else
	{
   
		system("cls");
		supermaster_fuction_choose(head);
	}
}





//超级管理员显示所有用户
void print(POINT_T * head)
{
   
	int ypos=3;
	POINT_T * pall=head;
	TEST_T * tTemp=NULL;
	
	gotoxy(3,1);
	printf("用户名");
	gotoxy(18,1);
	printf("用户账号");
	gotoxy(33,1);
	printf("用户余额");

	while(pall->next!=NULL)
	{
   
		pall=pall->next;
		tTemp=pall->pData;
		if(tTemp->flag!=3)
		{
   
			gotoxy(3,ypos);
			printf("%s",tTemp->name);
			gotoxy(18,ypos);
			printf("%d",tTemp->number);
			gotoxy(33,ypos);
			printf("%d",tTemp->money);
			gotoxy(48,ypos);
			if (tTemp->flag==0)
			{
   
				printf("\t超级管理员\n");
			}
			else if (tTemp->flag==1)
			{
   
				printf("\t管理员\n");
			} 
			else
			{
   
				printf("\t普通用户\n");
			}
			ypos++;
		}
		else
		{
   
			printf("");
		}
		
	}
	sback(head);
}	




//超级管理员修改用户密码
void smodify(POINT_T *head)
{
   
	char ai[8]={
   0};//修改哪一个数据
	int ii=0;
	int j=0;//计数
	char pwd1[7];	//原密码
	char pwd2[7];	//修改后密码
	char pwd3[7];	//二次输入密码
	int count=0;	//修改位置标杆
	
	POINT_T *pNode=NULL;
	POINT_T *pTemp=NULL;
	TEST_T * tTemp1=NULL;

	pNode=head;
	pTemp=head;
	

	gotoxy(8,3);
	flouwer(83);
	gotoxy(8,14);
	flouwer(83);
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(28,4);
	printf("请输入要修改的用户的账号:");
	getstr(ai,9,1,0);
	ii=atoi(ai);

	count=Count(head);
	if(count<ii-10000000||ii-10000000<=0)
	{
   	
		gotoxy(28,8);
		printf("查无此人");
		Sleep(300);
		system("cls");
		smodify(pNode);
	}			
	
	while(pNode->next!=NULL)
	{
   
		
		pNode=pNode->next;
		tTemp1=pNode->pData;
		
		if(tTemp1->number==ii)
		{
   
			
			if (tTemp1->flag==3)
			{
   
				gotoxy(28,8);
				printf("该用户已注销,打扰了");
				gotoxy(58,27);
				printf("按键:0、返回登录页面\t1、返回功能界面\t2、退出系统");
				gotoxy(58,28);
				printf("你的选择是:");
				scanf("%d",&j);
			
				if(j==0)
				{
   
					system("cls");
					_login(head,3);
				}
				else if(j==2)
				{
   
					exit(0);
				}
				else if(j==1)
				{
   
					system("cls");
					supermaster_fuction_choose(head);
				}
				else
				{
   
					exit(0);
				}
			}
			for(j=3;j>0;j--)
			{
   
				gotoxy(28,6);
				printf("请输入原密码:");
				gotoxy(52,6);
				getstr(pwd1,7,1,1);
				
				if (strcmp(pwd1,tTemp1->pwd)==0)
				{
   
					gotoxy(28,8);
					printf("请输入修改后的密码:");
					gotoxy(52,8);
					getstr(pwd2,7,1,1);
					
					if (strlen(pwd2)!=6)
					{
   
						gotoxy(28,14);
						printf("请设置六位数密码!");
						Sleep(500);
						system("cls");
						gotoxy(28,4);
						printf("请设置六位数密码!");
						smodify(head);
					}


					gotoxy(28,10);
					printf("请再次输入修改后的密码:");
					gotoxy(52,10);
					getstr(pwd3,7,1,1);
					
					if (strcmp(pwd2,pwd3)==0)
					{
   
						strcpy(tTemp1->pwd,pwd2);
						if (strcmp(tTemp1->pwd,pwd2)==0)
						{
   
							gotoxy(28,12);
							printf("修改完成");
							gotoxy(52,12);
							printf("密码为:%s", tTemp1->pwd);
						

							List_to_file(head,fp,sizeof(TEST_T));


							gotoxy(68,27);
							printf("按键:0、返回\t1、功能界面\t2、退出系统");
							gotoxy(68,28);
							printf("你的选择是:");
							scanf("%d",&j);
							
							if(j==0)
							{
   
								system("cls");
								_login(head,3);
							}
							else if(j==2)
							{
   
								exit(0);
							}
							else
							{
   
								system("cls");
								supermaster_fuction_choose(head);
							}
						}
						else 
						{
   
							Sleep(200);
							system("cls");
							gotoxy(28,12);
							printf("修改失败");
							gotoxy(28,13);
							printf("请稍等···");
						
							Sleep(1000);
							system("cls");

							gotoxy(28,4);
							printf("请输入要修改的用户的账号:");
							printf("%d",ii);
						}
					}
					else
					{
   
						gotoxy(28,12);
						printf("两次密码输入不一致");
						gotoxy(28,13);
						printf("请稍等···");
						Sleep(1000);
						system("cls");

						gotoxy(8,3);
						flouwer(83);
						gotoxy(8,15);
						flouwer(83);

						gotoxy(28,1);
						printf("还有%d次机会\n",j-1);
						gotoxy(28,4);
						printf("请输入要修改的用户的账号:");
						printf("%d",ii);
					}	
				}
				else
				{
   
					system("cls");
					gotoxy(28,1);
					printf("密码错误,还有%d次机会\n",j-1);
					gotoxy(8,3);
					flouwer(83);
					gotoxy(8,15);
					flouwer(83);
					
					gotoxy(28,4);
					printf("请输入要修改的用户的账号:");
					printf("%d",ii);
				}	
			}
			system("cls");
			supermaster_fuction_choose(head);				
		}
	}
}



//注销账号
void scancel(POINT_T * head)
{
   
	int count=0;
	char al[8]={
   0};//转换
	int i=0,il=0,j=0;
	POINT_T *pNode=NULL;
	TEST_T * tTemp=NULL;
	pNode=head;
	
	Sleep(100);
	system("cls");
	gotoxy(8,3);
	flouwer(83);
	gotoxy(8,14);
	flouwer(83);
	gotoxy(100,25);
	printf("按ESC键退出系统");
	gotoxy(28,4);
	printf("请输入注销用户卡号:");
	getstr(al,9,1,0);
	il=atoi(al);

	count=Count(head);
	if(count<il-10000000||il-10000000<=0)
	{
   	
		gotoxy(28,8);
		printf("查无此人");
		Sleep(300);
		system("cls");
		scancel(pNode);
	}		
	pTemp=find(pNode,il-10000000);
	tTemp=pTemp->pData;
	
	Sleep(100);
	system("cls");
	if (tTemp->money==0)
	{
   
		if(tTemp->flag==1||tTemp->flag==2)
		{
   
			tTemp->flag=3;
			gotoxy(28,5);
			printf("注销成功");
			List_to_file(head,fp,sizeof(TEST_T));

			gotoxy(58,27);
			printf("按键:0、返回登录页面\t1、返回功能界面\t2、退出系统");
			gotoxy(58,28);
			printf("你的选择是:");
			scanf("%d",&j);
			
			if(j==0)
			{
   
				system("cls");
				_login(head,3);
			}
			else if(j==2)
			{
   
				exit(0);
			}
			else
			{
   
				system("cls");
				supermaster_fuction_choose(head);
			}
		}

		else if(tTemp->flag==0)
		{
   
			gotoxy(28,5);
			printf("不要注销自己,你会后悔\n");
			
			gotoxy(48,27);
			printf("按键:0、返回\t1、功能界面\t2、退出系统\t3、继续注销其他用户");
			gotoxy(48,28);
			printf("你的选择是:");
			scanf("%d",&j);
			
			if(j==0)
			{
   
				system("cls");
				_login(head,3);
			}
			else if(j==2)
			{
   
				exit(0);
			}
			else if(j==3)
			{
   
				system("cls");
				scancel(head);
			}
			else
			{
   
				system("cls");
				supermaster_fuction_choose(head);
			}
		}

		else if(tTemp->flag==3)
		{
   
			gotoxy(28,5);
			printf("已被注销账户\n");

			gotoxy(48,27);
			printf("按键:0、返回\t1、功能界面\t2、退出系统\t3、继续注销其他用户");
			gotoxy(48,28);
			printf("你的选择是:");
			scanf("%d",&j);
			
			if(j==0)
			{
   
				system("cls");
				_login(head,3);
			}
			else if(j==2)
			{
   
				exit(0);
			}
			else if(j==3)
			{
   
				system("cls");
				scancel(head);
			}
			else
			{
   
				system("cls");
				supermaster_fuction_choose(head);
			}
		}

		else
		{
   
			gotoxy(28,5);
			printf("查无此用户\n");

			gotoxy(48,27);
			printf("按键:0、返回\t1、功能界面\t2、退出系统\t3、继续注销其他用户");
			gotoxy(48,28);
			printf("你的选择是:");
			scanf("%d",&j);
			
			if(j==0)
			{
   
				system("cls");
				_login(head,3);
			}
			else if(j==2)
			{
   
				exit(0);
			}
			else if(j==3)
			{
   
				system("cls");
				scancel(head);
			}
			else
			{
   
				system("cls");
				supermaster_fuction_choose(head);
			}
		}
	}
	else
	{
   
		gotoxy(28,5);
		printf("该用户还有存款,不予注销");

		gotoxy(48,27);
		printf("按键:0、返回\t1、功能界面\t2、退出系统\t3、继续注销其他用户");
		gotoxy(48,28);
		printf("你的选择是:");
		scanf("%d",&j);
		
		if(j==0)
		{
   
			system("cls");
			_login(head,3);
		}
		else if(j==2)
		{
   
			exit(0);
		}
		else if(j==3)
		{
   
			system("cls");
			scancel(head);
		}
		else
		{
   
			system("cls");
			supermaster_fuction_choose(head);
		}
	}	
}




//(超级管理员)返回上一级
void sback(POINT_T * head)
{
   
	int j=0;
	gotoxy(58,27);
	printf("按键:0、返回登录页面\t1、返回功能界面\t2、退出系统");
	gotoxy(68,28);
	printf("你的选择是:");
	scanf("%d",&j);
				
	if(j==0)
	{
   
		system("cls");
		_login(head,3);
	}
	else if(j==2)
	{
   
		exit(0);
	}
	else if(j==1)
	{
   
		system("cls");
		supermaster_fuction_choose(head);
	}
	else
	{
   
		exit(0);
	}
}

转载:https://blog.csdn.net/qq_43762191/article/details/116208753
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场