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

📄 studentmanager.cpp

📁 呵呵 就是大学二年级的我的课程设计啦
💻 CPP
字号:
#include<stdlib.h>
#include<fstream>
#include<iomanip> 
#include"StudentManager.h"
using namespace std;

char* StudentManager::subject[]={"语文","体育","英语","硬件","概率"};

StudentManager::StudentManager()
{   start();
}


StudentManager::~StudentManager()
{   
}


void StudentManager::start()
{   
	cout<<"\n"
        <<"\t*******************************************\n"
		<<"\t****** 欢迎使用学生成绩管理系统!    *******\n"
		<<"\t*****                                 *****\n"
		<<"\t****         编写人:李薇               ****\n"
		<<"\t***  学号:200502001042   班别:计Y052    ***\n" 
		<<"\t*******************************************\n"
		<<"\n";
    handleMenu();
}

//显示菜单
char StudentManager::menuSelect()
{  
	cout<<"\n"
        <<"**************** 1.显 示 学 生 记 录*********************\n"
		<<"**************** 2.查 询 学 生 记 录*********************\n"
		<<"**************** 3.增 加 学 生 记 录*********************\n"
		<<"**************** 4.删 除 学 生 记 录*********************\n"
		<<"**************** 5.修 改 学 生 记 录*********************\n"
		<<"**************** 6.保 存 学 生 记 录*********************\n"
		<<"**************** 7.读 取 学 生 记 录*********************\n"
		<<"**************** 8.结 束 系 统 运 行*********************\n"
		<<"\n左边数字对应功能选项,请选择1~8: ";
    char choice[5];
    while(true)
	{
	   cin.getline(choice,5);
       if(choice[0]<'1'||choice[0]>'8')
	       cout<<"\n      输入错误,请重选1~8:";
	   	   
	   else
		   break;
	}
		  
	return choice[0];
}


void StudentManager::handleMenu()
{   
	while(true)
	{   switch(menuSelect())
	       {    
				 case'1':
					 displayStudent();
					 break;
				 case'2':
					 researdStudent();
					 break;
				 case'3':
					 addStudent();
					 break;
				 case'4':
					 removeStudent();
					 break;
                 case'5':
					 modifyStudent();
					 break;
				 case'6':
					 saveStudent();
					 break;
				 case'7':
					 loadStudent();
					 break;
				 case'8':
					 quit();
	         }
	}
}


//显示所有记录
void StudentManager::displayStudent()
{   
    if(recList.empty())
	{   cout<<"\n      记录表为空,退出显示学生信息的操作!";
	    return;
	}
	Iterator it=recList.begin();
	Iterator it_end=recList.end();
	cout<<"\n*******************该记录的所有信息为********************";
	cout<<"\n姓名    学号          语文    体育    英语    硬件    概率    总分    平均分"<<endl;
	while(it!=it_end)
	{ 
		
         cout<<setiosflags(ios::left)
		     <<setw(8)<<(*it)->name
		     <<setw(15)<<(*it)->number;
		 for(int j=0;j<NUM_SUBJECT;j++)
	        cout<<setw(8)<<(*it)->score[j];
	     cout<<setw(8)<<(*it)->sum
		    <<setw(8)<<(*it)->average
		    <<endl;
	     
		it++;
	}
}

void StudentManager::clear()
{   
	ScoreList::clear();
}

//查询记录
void StudentManager::researdStudent()
{  
	if(recList.empty())
      {
	      cout<<"\n    记录是空表,退出学生信息查询操作!";
		  return;
      }
    char ch[2];
	int type;
	char pattern[20];
	while(true)
	{   
		 cout<<"\n"
	         <<"************1.按学生学号查询\n\n"
			 <<"************2.按学生姓名查询\n\n"
			 <<"请输入查询方式(直接输入回车则结束查询):";
	    
	     cin.getline(ch,2);

		 if(ch[0]=='\0')
		     break;
	     if(ch[0]=='1')
		 {   cout<<"\n请输入欲查询的学生的学号:";
		     type=1;
		 }
	     else if(ch[0]=='2')
		 {   cout<<"\n请输入欲查询的学生的姓名:";
		    type=2;
		 }
	
		 cin.getline(pattern,20);
		 int findCount=0;

		 Iterator it=findStudent(pattern,type,recList.begin());
		 Iterator it_end=recList.end();
         cout<<"\n*****************下面是你所要找的学生的所有记录*****************\n";
         cout<<"\n姓名    学号          语文    体育   英语    硬件    概率    总分   平均分"<<endl;
		 while(it!=it_end)
		 {  
			 findCount++;

		     cout<<setiosflags(ios::left)
		         <<setw(8)<<(*it)->name
		         <<setw(15)<<(*it)->number;
		     for(int j=0;j<NUM_SUBJECT;j++)
	              cout<<setw(8)<<(*it)->score[j];
	         cout<<setw(8)<<(*it)->sum
		         <<setw(8)<<(*it)->average
		         <<endl;
		    
			 it=findStudent(pattern,type,++it);	
				 
		 }
		 if(findCount==0)
		     cout<<"\n没有找到你想找的学生的记录#_#"<<endl;
		 else
		     cout<<"\n**************一共找到了"<<findCount<<"条记录\n"; 	
	}
}

//添加新的记录
void StudentManager::addStudent()
{   
	char ch[5];
	float sum;
	student* rec;
	while(true)
	{ 
	   cout<<"\n你要添加一组信息,确定吗?(Y/N):";
	   cin.getline(ch,5);
	   if(ch[0]=='n'||ch[0]=='N')
		   break;
	  
	   rec=new student;
	   cout<<"\n请输入你的学号:";
	   cin>>rec->number;
	   cin.ignore();
	   cout<<"\n请输入你的姓名:";
	   cin>>rec->name;
	   sum=0;
	   for(int j=0;j<NUM_SUBJECT;j++)
	   {   cout<<"\n*********请输入"<<subject[j]<<"成绩:";
           cin>>rec->score[j];
		   sum+= rec->score[j];
	   }
	   cin.ignore();
	   rec->sum=sum;
	   rec->average=sum/NUM_SUBJECT;
	   ScoreList::addStudent(rec);

	   }
}

//删除记录
void StudentManager::removeStudent()
{   if(recList.empty())
      {  cout<<"\n     记录表为空,退出删除操作!";
         return;
      }
    cout<<"\n\n**********1.通过学号删除"
		<<"\n\n**********2.通过姓名删除"
		<<"\n\n**********请输入你想删除的方式:";
    char ch[2];
	cin.getline(ch,2);

	while(true)
	{   if(ch[0]!='1' && ch[0]!='2')
	      {  cout<<"输入错误,请重选1~2: "<<endl;
	         cin.getline(ch,2);
	      }
	    else
			break;
	}

	int type=static_cast<int>(ch[0])-48;
	if(type=1)
		cout<<"\n请输入学号:";
	else if(type=2)
		cout<<"\n请输入姓名:";
	char pattern[20];
	cin.getline(pattern,20);
    int deleteCount=0;
    Iterator it=findStudent(pattern,type,recList.begin());
	Iterator it_end=recList.end();

	while(it!=it_end)
	{   
		cout<<"\n**********找到一个记录匹配的记录!"<<endl;

    	cout<<"\n姓名    学号          语文   体育    英语    硬件    概率     总分   平均分"<<endl;
        cout<<setiosflags(ios::left)
		    <<setw(8)<<(*it)->name
		    <<setw(15)<<(*it)->number;
		for(int j=0;j<NUM_SUBJECT;j++)
	         cout<<setw(8)<<(*it)->score[j];
	     cout<<setw(8)<<(*it)->sum
		     <<setw(8)<<(*it)->average
		     <<endl;
		    
		cout<<"\n确定要删除这条记录吗?请选(y/n):";
		cin.getline(ch,2);

		if(ch[0]!='n'&&ch[0]!='N')
		{   it=ScoreList::removeStudent(it);
		    deleteCount++;
		}

		if(it!=it_end)
			it=findStudent(pattern,type,++it);
	}

	cout<<"\n一共删除了"<<deleteCount<<"条记录\n";
}

//修改记录
void StudentManager::modifyStudent()
{   
    if(recList.empty())
	{   cout<<"\n      记录表为空,退出修改操作!";
	    return;
	}
	char A[2];
	int type;
	int modifyCount=0;
	char B[2];
	char pattern[20];
	Iterator it;
	Iterator it_end=recList.end();
    while(true)
	{
       cout<<"\n**********1.按照学号方式修改"
	       <<"\n\n**********2.按照姓名方式修改"
	       <<"\n\n请输入你想修改的方式(直接输入回车则结束修改操作!):";
	   cin.getline(B,2);

      if(B[0]=='\0')
		  break;
	  if(B[0]=='1')
	  {	 cout<<"\n请输入你的学号:";
		 cin.getline(pattern,20);
		 type=1;
	  }
	  else
	  {	 cout<<"\n请输入你的姓名:";
		 cin.getline(pattern,20);
		 type=2;
	  }
	
      it=findStudent(pattern,type,recList.begin());

      cout<<"*********************下面是你想修改的记录**************************";
      cout<<"\n\n姓名    学号          语文    体育    英语    硬件    概率    总分   平均分"<<endl;
	  
      while(it!=it_end)
	  { 
		  modifyCount++;

	      cout<<setiosflags(ios::left)
		      <<setw(8)<<(*it)->name
		      <<setw(15)<<(*it)->number;
		  for(int j=0;j<NUM_SUBJECT;j++)
	           cout<<setw(8)<<(*it)->score[j];
	      cout<<setw(8)<<(*it)->sum
		      <<setw(8)<<(*it)->average
		      <<endl;
		    
       
		 cout<<"\n确定要修改以上记录吗?请选(Y/N):";
	     cin.getline(A,2);
		 if(A[0]!='N' && A[0]!='n')
		 {  
           	cout<<"\n**************下面是重新输入该学生的信息:";

		     cout<<"\n\n请输入学号:";
			 cin>>(*it)->number;
			 cin.ignore();

			 cout<<"\n请输入姓名:";
			 cin>>(*it)->name;
			 cin.ignore();

			 float sum=0;
			 for(int i=0;i<NUM_SUBJECT;i++)
			 {   cout<<"\n请输入"<<subject[i]<<"成绩:";
			     cin>>(*it)->score[i];
				 sum+=(*it)->score[i];
			 }
			 cin.ignore();
			 (*it)->sum=sum;
			 (*it)->average=sum/NUM_SUBJECT;
	
		 }
	         it=findStudent(pattern,type,++it);	
		
	   if(modifyCount==0)
		  cout<<"\n\n        没有找到你想修改的记录!"<<endl;
		
	  }	
	}
}
	

//保存记录
void StudentManager::saveStudent()
{   
	if(recList.empty())
	{  cout<<"\n     没有新增记录,无记录可存!#_#\n";
	   return;
	}
	char file_name[20];
	cout<<"\n请输入保存的路径和文件名(格式:E:\\student.txt):";
	cin>>file_name;
    ofstream  ofile(file_name,ios::out);

	ScoreList::saveStudent(ofile);
    ofile.close();
	cout<<"\n信息已经保存成功!!!"<<endl;
	cin.ignore();
   
} 


void StudentManager::loadStudent()
{  
    char file_name[20];

	cout<<"\n请输入要读取的路径和文件名(格式:E:\\student.txt): ";
    cin.getline(file_name,20);

	ifstream ofile(file_name,ios::in);
	if(!ofile)
	{   cout<<"\n       打不开文件!请重新选择"<<endl;
	    return;
	}


	ScoreList::loadStudent(ofile);
	ofile.close();

}

void StudentManager::quit()
{   
	clear();
    cout<<"\n退出操作,再见!^_^";
	delete this;
	exit(0);
}

		     

		 














⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -