📄 reinputonenewstuinf.cpp
字号:
#include "StudentList.h" //学生链表类头文件
//函数功能:实现已知一个学生地址修改其学生所有数据
//输入参数:从形参获得一个学生地址,从键盘输入学生信息及相关参数值
//输出参数:相关提示
//返回值:无
//修改人:邹明上
//修改时间:2006.06.18
void CStudentList::InputOneNewStuInf(CStudentObject* pTemp)
{
char cSelect = '\0'; //菜单选择变量
double dbTest = 0.00;//测试双精度的变量,该变量后面未使用
char cSure = '\0'; //判断输入的选项是否正确和确认是否要修改学生信息变量
char* pInputStr = new char[12]; //为指针分配一个12字节堆空间
string sTemp = "\0"; //定义一个字符串,临时存放从键盘输入的字符串,当字符串满足要求后,再分别拷贝到学号,姓名,电话变量中
int nAgeTemp = -1; //定义该变量临时存放输入的学生年龄,满足要求后将其值赋给学生年龄变量
double dbTemp = -1.00; //用于临时存放输入的学生成绩数据变量
char sId[12] = {0};
char sName[12] = {0};
char sSex[3] = {0};
char sTel[12] = {0};
int nAge = 0;
double dbMath = 0.00;
double dbClangue = 0.00;
double dbEnglish = 0.00;
double dbAverage = 0.00;
double dbSum = 0.00; //用于临时存放学生数据变量
printf("\n\t\t 系统提示:请选择您要修改学生那些信息");
printf("\n\t\t_____________________________________________");
printf("\n\t\t\t1. 只修改该学生的学号");
printf("\n\t\t\t2. 只修改该学生的姓名");
printf("\n\t\t\t3. 只修改该学生的性别");
printf("\n\t\t\t4. 只修改该学生的电话");
printf("\n\t\t\t5. 只修改该学生的年龄");
printf("\n\t\t\t6. 只修改该学生的数学成绩");
printf("\n\t\t\t7. 只修改该学生的C++ 成绩");
printf("\n\t\t\t8. 只修改该学生的英语成绩");
printf("\n\t\t\t9. 修改该学生所有信息");
printf("\n\t\t\t Esc 键退出");
while(cSelect != 27 && cSure != 'Y')
{
printf("\n\t\t 系统提示:请您选择:");
fflush(stdin);
cSelect = getch();
switch(cSelect)
{
case '1':
{
while(7) //重新输入修改学生的学号
{
printf("\n\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) || pFind_H.pNext->pNow == pTemp) //当没有找到相同学号时Find(pFind,pInputStr,1) == 0,即跳出循环
{
strcpy(sId,pInputStr);//将输入的学号考贝到学生学号变量中
break;
}
else
{
printf("\n\t\t 系统信息:该学号已存在,请重新输入<任意键继续>\n");
fflush(stdin);
getch();
}
}
}
strcpy(sName,pTemp->m_sName);
strcpy(sSex,pTemp->m_sSex);
strcpy(sTel,pTemp->m_sTel);
nAge = pTemp->m_nAge;
dbMath = pTemp->m_dbMath;
dbClangue = pTemp->m_dbClangue;
dbEnglish = pTemp->m_dbEnglish;
dbAverage = pTemp->m_dbAverage;
dbSum = pTemp->m_dbSum; //只有学生学号改变,其他数据要需要考贝到临时变量中
cSure = 'Y';
break;
}
case '2':
{
while(7) //重新输入修改学生的姓名
{
printf("\n\t\t 请输入学生新的姓名(4个汉字内):");
fflush(stdin);
cin >> sTemp;
if(InputJudge(sTemp,8))
{
strcpy(pInputStr,sTemp.c_str()); //将自定义类型string变量字符串转换成char 字符串
strcpy(sName,pInputStr); //将输入的学号考贝到学生姓名变量中
break;
}
}
strcpy(sId,pTemp->m_sId);
strcpy(sSex,pTemp->m_sSex);
strcpy(sTel,pTemp->m_sTel);
nAge = pTemp->m_nAge;
dbMath = pTemp->m_dbMath;
dbClangue = pTemp->m_dbClangue;
dbEnglish = pTemp->m_dbEnglish;
dbAverage = pTemp->m_dbAverage;
dbSum = pTemp->m_dbSum; //只有学生姓名改变,其他数据要需要考贝到临时变量中
cSure = 'Y';
break;
}
case '3':
{
printf("\n\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';
}
}
}
strcpy(sId,pTemp->m_sId);
strcpy(sName,pTemp->m_sName);
strcpy(sTel,pTemp->m_sTel);
nAge = pTemp->m_nAge;
dbMath = pTemp->m_dbMath;
dbClangue = pTemp->m_dbClangue;
dbEnglish = pTemp->m_dbEnglish;
dbAverage = pTemp->m_dbAverage;
dbSum = pTemp->m_dbSum; //只有学生性别改变,其他数据要需要考贝到临时变量中
cSure = 'Y';
break;
}
case '4':
{
while(7) //重新输入修改学生的Tel
{
printf("\n\t\t 请输入学生新的电话(11位内):");
fflush(stdin);
cin >> sTemp;
if(InputJudge(sTemp,11))
{
strcpy(pInputStr,sTemp.c_str()); //将自定义类型string变量字符串转换成char 字符串
strcpy(sTel,pInputStr); //将输入的学号考贝到学生电话变量中
break;
}
}
strcpy(sId,pTemp->m_sId);
strcpy(sName,pTemp->m_sName);
strcpy(sSex,pTemp->m_sSex);
nAge = pTemp->m_nAge;
dbMath = pTemp->m_dbMath;
dbClangue = pTemp->m_dbClangue;
dbEnglish = pTemp->m_dbEnglish;
dbAverage = pTemp->m_dbAverage;
dbSum = pTemp->m_dbSum; //只有学生电话改变,其他数据要需要考贝到临时变量中
cSure = 'Y';
break;
}
case '5':
{
while(7) //重新输入修改学生的年龄
{
nAgeTemp = -1;
printf("\n\t\t 请输入学生新的年龄(0~99):");
fflush(stdin);
scanf("%d",&nAgeTemp);
if(InputJudge(nAgeTemp,2))
{
nAge = nAgeTemp;
break;
}
}
strcpy(sId,pTemp->m_sId);
strcpy(sName,pTemp->m_sName);
strcpy(sSex,pTemp->m_sSex);
strcpy(sTel,pTemp->m_sTel);
dbMath = pTemp->m_dbMath;
dbClangue = pTemp->m_dbClangue;
dbEnglish = pTemp->m_dbEnglish;
dbAverage = pTemp->m_dbAverage;
dbSum = pTemp->m_dbSum; //只有学生年龄改变,其他数据要需要考贝到临时变量中
cSure = 'Y';
break;
}
case '6':
{
while(7) //重新输入修改学生的数学成绩
{
dbTemp = -1.00;
printf("\n\t\t 请输入学生新的数学成绩(0~999):");
fflush(stdin);
scanf("%lf",&dbTemp);
if(InputJudge(dbTemp,3))
{
dbMath = dbTemp;
dbSum = dbMath + pTemp->m_dbClangue + pTemp->m_dbEnglish;
dbAverage = dbSum / 3;
break;
}
}
strcpy(sId,pTemp->m_sId);
strcpy(sName,pTemp->m_sName);
strcpy(sSex,pTemp->m_sSex);
strcpy(sTel,pTemp->m_sTel);
nAge = pTemp->m_nAge;
dbClangue = pTemp->m_dbClangue;
dbEnglish = pTemp->m_dbEnglish; //只有学生数学成绩改变,其他数据要需要考贝到临时变量中
dbSum = dbMath + dbClangue + dbEnglish;
dbAverage = dbSum / 3; //总成绩,平均成绩也要改变
cSure = 'Y';
break;
}
case '7':
{
while(7) //重新输入修改学生的C++ 成绩
{
dbTemp = -1.00;
printf("\n\t\t 请输入学生新的C++ 成绩(0~999):");
fflush(stdin);
scanf("%lf",&dbTemp);
if(InputJudge(dbTemp,3))
{
dbClangue = dbTemp;
dbSum = pTemp->m_dbMath + dbClangue + pTemp->m_dbEnglish;
dbAverage = dbSum / 3;
break;
}
}
strcpy(sId,pTemp->m_sId);
strcpy(sName,pTemp->m_sName);
strcpy(sSex,pTemp->m_sSex);
strcpy(sTel,pTemp->m_sTel);
nAge = pTemp->m_nAge;
dbMath = pTemp->m_dbMath;
dbEnglish = pTemp->m_dbEnglish; //只有学生C++ 成绩改变,其他数据要需要考贝到临时变量中
dbSum = dbMath + dbClangue + dbEnglish;
dbAverage = dbSum / 3; //总成绩,平均成绩也要改变
cSure = 'Y';
break;
}
case '8':
{
while(7) //重新输入修改学生的英语成绩
{
dbTemp = -1.00;
printf("\n\t\t 请输入学生新的英语成绩(0~999):");
fflush(stdin);
scanf("%lf",&dbTemp);
fflush(stdin);
if(InputJudge(dbTemp,3))
{
dbEnglish = dbTemp;
dbSum = pTemp->m_dbMath + pTemp->m_dbClangue + dbEnglish;
dbAverage = dbSum / 3;
break;
}
}
strcpy(sId,pTemp->m_sId);
strcpy(sName,pTemp->m_sName);
strcpy(sSex,pTemp->m_sSex);
strcpy(sTel,pTemp->m_sTel);
nAge = pTemp->m_nAge;
dbMath = pTemp->m_dbMath;
dbClangue = pTemp->m_dbClangue; //只有学生英语成绩改变,其他数据要需要考贝到临时变量中
dbSum = dbMath + dbClangue + dbEnglish;
dbAverage = dbSum / 3; //总成绩,平均成绩也要改变
cSure = 'Y';
break;
}
case '9':
{
while(7) //重新输入修改学生的学号
{
printf("\n\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) || pFind_H.pNext->pNow == pTemp) //当没有找到相同学号时Find(pFind,pInputStr,1) == 0,即跳出循环
{
strcpy(sId,pInputStr);//将输入的学号考贝到学生学号变量中
break;
}
else
{
printf("\n\t\t 系统信息:该学号已存在,请重新输入<任意键继续>\n");
fflush(stdin);
getch();
}
}
}
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) //重新输入修改学生的年龄
{
nAgeTemp = -1;
printf("\t\t 请输入学生新的年龄(0~99):");
fflush(stdin);
scanf("%d",&nAgeTemp);
if(InputJudge(nAgeTemp,2))
{
nAge = nAgeTemp;
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;
}
}
dbSum = dbMath + dbClangue + dbEnglish;
dbAverage = dbSum / 3;
cSure = 'Y';
break;
}
case 27:
{
printf("\n\t\t 系统信息:您已取消修改该学生信息");
break;
}
default:
{
printf("\n\t\t 系统信息:你的输入有误.<任意键继续>");
fflush(stdin);
getch();
}
}
}
if(cSelect != 27)
{
printf("\n\t\t 确定修改该学生信息?Q退出,其他键确定修改");
fflush(stdin);
cSure = getch();
if(cSure == 'q'||cSure == 'Q')
{
printf("\n\t\t 系统信息:您放弃修改该学生信息操作");
}
else
{ //确定修改学生信息后,将输入合法的学生信息全部COPY到要修改的学生中
strcpy(pTemp->m_sId,sId);
strcpy(pTemp->m_sName,sName);
strcpy(pTemp->m_sSex,sSex);
strcpy(pTemp->m_sTel,sTel);
pTemp->m_nAge = nAge;
pTemp->m_dbMath = dbMath;
pTemp->m_dbClangue = dbClangue;
pTemp->m_dbEnglish = dbEnglish;
pTemp->m_dbAverage = dbAverage;
pTemp->m_dbSum = dbSum;
if(CFileInOut::FileWrite(m_pHead,m_nSum) == false)//确定修改该学生信息后,调用文件保存函数更新文件数据
{
printf("\n\n\t\t 系统警告:文件保存错误");
}
else
{
printf("\n\t\t 系统信息:您已成功完成修改该学生信息");
}
}
}
delete[] pInputStr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -