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

📄 studentlist.cpp

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