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

📄 reinputonenewstuinf.cpp

📁 很好的学习C++源码,基于C++版学生管理系统
💻 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 + -