前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发成长之路(5)-- C语言从入门到开发(仿ATM机项目,我写的第一个项目)

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

作者头像
看、未来
发布2021-09-18 10:51:26
8980
发布2021-09-18 10:51:26
举报
文章被收录于专栏:CSDN搜“看,未来”

文章目录


项目需求分析

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

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

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

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

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


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


放码过来

代码语言:javascript
复制
// 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;
}

代码语言:javascript
复制
//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

代码语言:javascript
复制
// 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;
	}
}

代码语言:javascript
复制
//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;
}

代码语言:javascript
复制
//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

代码语言:javascript
复制
//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;
}

代码语言:javascript
复制
//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

代码语言:javascript
复制
//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)	;
	}
}

代码语言:javascript
复制
//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

代码语言:javascript
复制
//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);
}

代码语言:javascript
复制
//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

代码语言:javascript
复制
//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);
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 项目需求分析
  • 放码过来
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档