⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 studentlistfind.cpp

📁 很好的学习C++源码,基于C++版学生管理系统
💻 CPP
字号:
#include "StudentList.h"       //学生链表类头文件


//函数功能:按学生学号查寻学生数据信息及显示
//输入参数:输入查寻的学生学号及选项值
//输出参数:显示查寻到学生数据信息
//返回值:无
//修改人:邹明上
//修改时间:2006.06.17
void CStudentList::Find_Id()
{
	char cFind = 'y';
	string sTemp = "\0";   //定义一个字符串,临时存放从键盘输入的字符串,当字符串满足要求后,再分别拷贝到学号,姓名,电话变量中
	char* pFindId = new char[12];//存放预查找的学号
	while(cFind == 'Y'||cFind == 'y')
	{
		int nTotalId = 0;
		FindList pFind_H; //定义一个结构体的变量,将查找到的学生节点地址连结成链表
		printf("\n\n\t\t---------------------------------------\n");
		while(7)
		{
			printf("\t\t  请输入学号查寻(11位内):");
			fflush(stdin);
			cin >> sTemp;
			if(InputJudge(sTemp,11))
			{
				strcpy(pFindId,sTemp.c_str());//将自定义类型string变量字符串转换成char 字符串
				break;
			}
		}

		nTotalId = Find(&pFind_H,pFindId,1); //按学号找查时,传入一个整型常数1
		if(nTotalId == 0)  //当pFind[0]为NULL,表示没有找到符合要查找的学生学号,这里也可以用函数返回值来判断
		{
			printf("\n\t\t  系统信息:您查寻的学生信息不存在");
		}
		else
		{
			printf("\n  查寻结果以下:\n");
			printf("  学号是%s的学生信息如下:\n",pFindId);
			printf("  学生学号    姓 名  性别  学生电话   年龄   数学   C++   英语   平均分  总成绩\n");
			ShowOneInf(pFind_H.pNext->pNow);

			delete pFind_H.pNext;   //释放查找到创建的一个节点
		}
		printf("\n\t\t  是否继续按学号查寻?Y键确定,其他键退出");
		fflush(stdin);
		cFind = getch();
	}
	delete[] pFindId;
}

//函数功能:按学生姓名查寻学生数据信息及显示
//输入参数:输入查寻的学生学号及选项值
//输出参数:显示查寻到学生数据信息
//返回值:无
//修改人:邹明上
//修改时间:2006.06.17
void CStudentList::Find_Name()
{
	char cFind = 'y';
	string sTemp = "\0";  //定义一个字符串,临时存放从键盘输入的字符串,当字符串满足要求后,再分别拷贝到学号,姓名,电话变量中
	char* pFindName = new char[12];
	while(cFind == 'Y'||cFind == 'y')
	{
		int nTotalName = 0;
		FindList pFind_H; //定义一个结构体的变量,将查找到的学生节点地址连结成链表
		printf("\n\n\t\t---------------------------------------\n");
		while(7)
		{
			printf("\t\t  请输入姓名查寻(4个汉字内):");
			fflush(stdin);
			cin >> sTemp;
			if(InputJudge(sTemp,8))
			{
				strcpy(pFindName,sTemp.c_str());//将自定义类型string变量字符串转换成char 字符串
				break;
			}
		}

		nTotalName = Find(&pFind_H,pFindName,2);  //按姓名找查时,传入一个整型常数2
		if(nTotalName == 0)
		{
			printf("\n\t\t  系统信息:您查寻的学生信息不存在");
		}
		else if(nTotalName == 1)
		{
			printf("\n  查寻结果以下:\n");
			cout << "  姓名是"<< "\"" << pFindName << "\"" << "的学生信息如下" << endl;
			printf("  学生学号    姓 名  性别  学生电话   年龄   数学   C++   英语   平均分  总成绩\n");
			ShowOneInf(pFind_H.pNext->pNow);

			delete pFind_H.pNext;   //释放创建的一个节点地址
		}
		else
		{
			FindList* pHead = pFind_H.pNext;      //取出查找建立链表的头地址
			printf("\n  查寻结果以下:\n");
			cout << "  姓名是"<< "\"" << pFindName << "\"" << "学生共有" << nTotalName << "位相同" << endl;
			printf("  学生学号    姓 名  性别  学生电话   年龄   数学   C++   英语   平均分  总成绩\n");
			for(int nI = 1;nI <= nTotalName;nI ++,pHead = pHead->pNext)
			{
				printf("  第%d位学生\n",nI);
				ShowOneInf(pHead->pNow);
			}

			FindList* pFind_Del = NULL;//定义一个变量,用于临时存放要释放内存地址
			pHead = pFind_H.pNext;     //因为查找的链表的第一个节点不是堆区分配的内存空间所以,第一个节点不能delete
			while(pHead != NULL)       //释放查找建立的链表空间
			{
				pFind_Del = pHead;
				pHead = pHead->pNext; 
				delete pFind_Del;
			}
		}
		printf("\n\t\t  是否继续按姓名查寻?Y键确定,其他键退出");
		fflush(stdin);
		cFind = getch();
	}
	delete[] pFindName;
}


//函数功能:输入学生姓名查找与之相关的学生姓名的信息
//输入参数:输入查寻的学生学号及选项值
//输出参数:显示查寻到学生数据信息
//返回值:无
//修改人:邹明上
//修改时间:2006.06.26
void CStudentList::FaintnessFind_Name()
{
	char cFind = 'y';
	string sTemp = "\0";  //定义一个字符串,临时存放从键盘输入的字符串,当字符串满足要求后,再分别拷贝到学号,姓名,电话变量中
	char* pFindName = new char[12];
	while(cFind == 'Y'||cFind == 'y')
	{
		int nTotalName = 0;
		FindList pFind_H; //定义一个结构体的变量,将查找到的学生节点地址连结成链表
		printf("\n\n\t\t---------------------------------------\n");
		while(7)
		{
			printf("\t\t  请输入姓名(相关的)查寻(4个汉字内):");
			fflush(stdin);
			cin >> sTemp;
			if(InputJudge(sTemp,8))    //调用函数判断输入的字符串是否超出范围
			{
				strcpy(pFindName,sTemp.c_str());//将自定义类型string变量字符串转换成char 字符串
				break;
			}
		}

		nTotalName = Find(&pFind_H,pFindName,3);  //按姓名模糊找查时,传入一个整型常数3
		if(nTotalName == 0)
		{
			printf("\n\t\t  系统信息:您查寻的学生信息不存在");
		}
		else
		{
			FindList* pHead = pFind_H.pNext;      //取出查找建立链表的头地址
			printf("\n  查寻结果以下:\n");
			cout << "  姓名与"<< "\"" << pFindName << "\"" << "相关学生信息共有" << nTotalName << "位" << endl;
			printf("  学生学号    姓 名  性别  学生电话   年龄   数学   C++   英语   平均分  总成绩\n");
			for(int nI = 1;nI <= nTotalName;nI ++,pHead = pHead->pNext)
			{
				printf("第%d位学生\n",nI);
				ShowOneInf(pHead->pNow);
			}

			FindList* pFind_Del = NULL;//定义一个变量,用于临时存放要释放内存地址
			pHead = pFind_H.pNext;     //因为查找的链表的第一个节点不是堆区分配的内存空间所以,第一个节点不能delete
			while(pHead != NULL)       //释放查找建立的链表空间
			{
				pFind_Del = pHead;
				pHead = pHead->pNext; 
				delete pFind_Del;
			}
		}
		printf("\n\t\t  是否继续按学姓名查寻?Y键确定,其他键退出");
		fflush(stdin);
		cFind = getch();
	}
	delete[] pFindName;
}

//函数功能:依据形参得到不同的参数情况实现按学号,姓名查找的一个函数
//输入参数:无
//输出参数:当查找到的学生个数超过40位时,才会有出错信息警告
//返回值:返回找到的学生个数
//修改人:邹明上
//修改时间:2006.06.17
/*int CStudentList::Find(CStudentObject* pFind[],char* cFindStr,int nNum)
{
	int nI = 0;
	for(m_pMove = m_pHead;m_pMove != NULL;m_pMove = m_pMove->m_pNext)
	{
		if((!strcmp(m_pMove->m_sId,cFindStr)&&(nNum == 1))||
			(!strcmp(m_pMove->m_sName,cFindStr)&&(nNum == 2)))
		{   //实现按不同方式查找时,判断是否满足查找条件
			if(nI < 40)
			{
				pFind[nI] = m_pMove;
			}
			else
			{
				printf("\t\t  系统警告:您的数据信息过于膀大,请及时升级系统\n");
				break;
			}
			nI ++;
			if(nNum == 1)  //按学号查找时,因为学号是唯一的,当找到一个相同学号时,就终止for循环,提高程序效率
			{
				break;
			}
		}
	}
	return nI;
}

//函数功能:依据形参得到不同的参数情况实现姓名模糊查找的一个函数
//输入参数:无
//输出参数:当查找到的学生个数超过40位时,才会有出错信息警告
//返回值:返回找到的学生个数
//修改人:邹明上
//修改时间:2006.06.17
int CStudentList::Find(CStudentObject* pFind[],char* cFindStr)
{
	int nI = 0;
	if(strlen(cFindStr) == 0) //当输入的字符串为空时,返回未找到学生姓名
	{
		return 0;
	}
	for(m_pMove = m_pHead;m_pMove != NULL;m_pMove = m_pMove->m_pNext)
	{
		if(strstr(m_pMove->m_sName,cFindStr) != NULL)
		{   //strstr函数判断m_pMove->m_sName字符串是否包含cFindStr字符串,不包含时返回为NULL
			if(nI < 40)
			{
				pFind[nI] = m_pMove;
			}
			else
			{
				printf("\t\t  系统警告:您的数据信息过于膀大,请及时升级系统\n");
				break;
			}
			nI ++;
		}
	}
	return nI;
}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -