📄 studentlist.cpp
字号:
#include "StudentList.h" //学生链表类头文件
extern int g_nAddTime; //全局变量声明
int CStudentList::m_nSum = 0; //初始化学生总数为0
//函数功能:构造函数初始化链表参数
//输入参数:无
//输出参数:无
//返回值:无
//修改人:邹明上
//修改时间:2006.06.17
CStudentList::CStudentList()
{
m_pHead = NULL;
m_pEnd = NULL;
m_pNew = NULL;
m_pMove = NULL;
}
//函数功能:析构函数释放学生类链表用过的堆区空间
//输入参数:无
//输出参数:无
//返回值: 无
//修改人:邹明上
//修改时间:2006.06.17
CStudentList::~CStudentList()
{
int nTT = m_nSum;
for(int nI = 0;nI < nTT;nI ++)
{
DeleteOneStuInf(m_pHead);
//printf("\n学生CStudentList类链表析构第%d次",nI + 1);
}
}
//函数功能:增加学生对象及信息
//输入参数:输入学生信息及操作参数
//输出参数:显示学生信息及系统信息
//返回值:无
//修改人:邹明上
//修改时间:2006.06.24
void CStudentList::Add()
{
double dbTest = 0.00;//测试双精度的变量,该变量后面未使用
char cAdd = 'y'; //控制增加学生信息循环是否继续
char cSure = '\0'; //确定是否要将输入的学生信息添加到链表中并保存
char* pInputStr = new char[12]; //为指针分配一个12字节堆空间
string sTemp = "\0"; //定义一个字符串,临时存放从键盘输入的字符串,当字符串满足要求后,再分别拷贝到学号,姓名,电话变量中
double dbTemp = -1.00; //用于临时存放输入的学生成绩数据变量
char sId[12] = {0};
char sName[12] = {0};
char sSex[3] = {0};
char sTel[12] = {0};
int nAge = -1;
double dbMath = 0.00;
double dbClangue = 0.00;
double dbEnglish = 0.00;
double dbAverage = 0.00;
double dbSum = 0.00; //用于临时存放学生数据变量
while(cAdd != 'Q' && cAdd != 'q')
{
m_pNew = new CStudentObject;
m_pNew->m_pFront = NULL; //链表节点的前指针为空
m_pNew->m_pNext = NULL; //链表节点的后指针为空
cout << "\n\n\t\t-------------------------------------" << endl;
while(7) //输入学生学号
{
printf("\t\t 请输入学生学号(11位内):");
fflush(stdin);
cin >> sTemp; //可以用语句getline(cin,sTemp);代替,但要输入两次回车
if(InputJudge(sTemp,11))
{
FindList pFind_H; //定义一个结构体的变量,作为判断输入的学号是否存在使用他
strcpy(pInputStr,sTemp.c_str()); //将自定义类型string变量字符串转换成char 字符串
if(!Find(&pFind_H,pInputStr,1)) //当没有找到相同学号时Find(pFind,pInputStr,1) == 0,即跳出循环
{
strcpy(sId,pInputStr);//将输入的学号考贝到学号临时变量中
break;
}
else
{
printf("\n\t\t 系统信息:该学号已存在,请重新输入<任意键继续>\n");
fflush(stdin);
getch();
delete pFind_H.pNext; //释放找到创建的一个节点空间
}
}
}
while(7) //输入学生姓名
{
printf("\t\t 请输入学生姓名(4个汉字内):");
fflush(stdin);
cin >> sTemp;
if(InputJudge(sTemp,8))
{
strcpy(pInputStr,sTemp.c_str()); //将自定义类型string变量字符串转换成char 字符串
strcpy(sName,pInputStr); //将输入的学号考贝到学生姓名变量中
break;
}
}
printf("\t\t 请选择学生性别\n"); //选择输入学生性别
printf("\t\t 1男(man) 2女(woman):");
char cSex = 'y';
while(cSex != 'N') //当选择性别时输入不是1或者2时就不会执行后面其他的输入操作
{
fflush(stdin);
cSex = getch();
switch(cSex)
{
case '1':
{
cSex = 'N';
printf("男\n");
strcpy(sSex,"男");
break;
}
case '2':
{
cSex = 'N';
printf("女\n");
strcpy(sSex,"女");
break;
}
default:
{
cSex = 'y';
}
}
}
while(7) //输入学生Tel
{
printf("\t\t 请输入学生电话(11位内):");
fflush(stdin);
cin >> sTemp;
if(InputJudge(sTemp,11))
{
strcpy(pInputStr,sTemp.c_str()); //将自定义类型string变量字符串转换成char 字符串
strcpy(sTel,pInputStr); //将输入的学号考贝到学生电话变量中
break;
}
}
while(7) //输入学生年龄
{
nAge = -1;
printf("\t\t 请输入学生年龄(0~99):");
fflush(stdin);
scanf("%d",&nAge);
if(InputJudge(nAge,2))
{
break;
}
}
while(7) //输入学生数学成绩
{
dbTemp = -1.00;
printf("\t\t 请输入学生数学成绩(0~999):");
fflush(stdin);
scanf("%lf",&dbTemp);
if(InputJudge(dbTemp,3))
{
dbMath = dbTemp;
break;
}
}
while(7) //输入学生C成绩
{
dbTemp = -1.00;
printf("\t\t 请输入学生C++ 成绩(0~999):");
fflush(stdin);
scanf("%lf",&dbTemp);
if(InputJudge(dbTemp,3))
{
dbClangue = dbTemp;
break;
}
}
while(7) //输入学生英语成绩
{
dbTemp = -1.00;
printf("\t\t 请输入学生英语成绩(0~999):");
fflush(stdin);
scanf("%lf",&dbTemp);
fflush(stdin);
if(InputJudge(dbTemp,3))
{
dbEnglish = dbTemp;
break;
}
}
//根据输入的数学成绩,C成绩,英语成绩求出总成绩和平均成绩
dbSum = dbMath + dbClangue + dbEnglish;
dbAverage = dbSum / 3;
printf("\n\t\t 确定要添加该学生信息?Y键确定,其他键取消");
fflush(stdin);
cSure = getch();
if(cSure == 'y'||cSure == 'Y')
{
strcpy(m_pNew->m_sId,sId);
strcpy(m_pNew->m_sName,sName);
strcpy(m_pNew->m_sSex,sSex);
strcpy(m_pNew->m_sTel,sTel);
m_pNew->m_nAge = nAge;
m_pNew->m_dbMath = dbMath;
m_pNew->m_dbClangue = dbClangue;
m_pNew->m_dbEnglish = dbEnglish;
m_pNew->m_dbAverage = dbAverage;
m_pNew->m_dbSum = dbSum;
//以下是创建双向链表
if(m_pHead == NULL)
{
m_pHead = m_pNew;
m_pEnd = m_pNew;
}
else
{
m_pNew->m_pFront = m_pEnd;
m_pEnd->m_pNext = m_pNew;
m_pEnd = m_pNew;
}
++g_nAddTime;
++m_nSum;
if(CFileInOut::FileWrite(m_pHead,m_nSum) == false) //添加完成一个学生信息后,调用文件保存函数更新文件数据
{
printf("\n\n\t\t 系统警告:文件保存错误");
}
printf("\n\t\t 系统信息: 添加第%2d位学生信息已成功完成",g_nAddTime);
}
else
{
printf("\n\t\t 系统信息:您已放弃添加该学生信息");
}
printf("\n\t\t 是否继续添加学生信息?Q键退出,其他键继续");
fflush(stdin);
cAdd = getch();
}
delete[] pInputStr; //释放pInputStr指向的内存空间
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -