📄 studentlistfind.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 + -