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

📄 manage.cpp

📁 学生管理系统
💻 CPP
字号:
#include ".\manage.h"
#include "Student.h"
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;

#using <mscorlib.dll>




Manage::Manage(void)
:m_nEditNum(0),m_bEdit(false)
{
}


Manage::~Manage(void)
{
}


void Manage::Input()
{
    int score[6];
	string name;
	vector<int> NumVec;
	AllNums(NumVec);
	ofstream outfile("student.stu",ios_base::app);
    
	cout<<"学号:";
	cin>>score[0];
	while(!IfNumUnique(score[0],NumVec))
               cin>>score[0];
	cout<<"\n姓名:";
	cin>>name;
		
	cout<<"依次输入C语言,数据库,英语,数学,物理的成绩:\n";  
    for(int i=1;i<6;i++)
	{   
		cin>>score[i];
	    while(!ScoreCheck(score[i]))
			cin>>score[i];
	}
	Student stu(score,name);
	 outfile<<stu;
	 cout<<stu<<endl;
	 cout<<"按照使用说明继续进行其它操作!\n";
	 Start();
	
}

void Manage::Edit()
{
  char ch;
  m_bEdit = true;
  NumInquire();
  cout<<"要删除此学生成绩,输入d/D;\n"
	  <<"要修改,请输入m/M;\n";
  cin>>ch;
  switch(ch)
  {
  case 'd':
  case 'D': Del();break;
  case 'm':
  case 'M': Modify();break;
  default:break;
  }
}


void Manage::Del()
{ 
  char ch;
  Student stu;
  ifstream infile("student.stu");
  vector<Student> StuVec;

   infile>>stu;
  while(infile.get(ch))
  {
   
	if(stu.m_nNum != m_nEditNum)
		StuVec.push_back(stu);
	 infile>>stu;
  }

  {
	  ofstream outfile("student.stu",ios_base::out);
	  for (vector<Student>::iterator it = StuVec.begin();
		  it != StuVec.end();++it)
		     outfile<<*it;
	  cout<<"已经成功删除!\n";
  }
  cout<<"按照使用说明继续进行其它操作!\n";
  Start();
}

void Manage::Modify()
{
  ifstream infile("student.stu");
  vector<Student> StuVec;
  char ch;
  int code;
  char cc = 'c';
  Student stu;

  cout <<"各项代码如下:\n"
	   <<"姓名--0,C语言--1,数据库--2,英语--3,数学--4,物理--5"<<endl;

  
   infile>>stu;
  while(infile.get(ch))
  {
    if(stu.m_nNum == m_nEditNum)
	{  
	while(cc == 'c'||cc == 'C')
	{
	  cout <<"选择要修改的项:"<<endl;
       cin>>code;
	  switch (code)
	  {
	  case 0: 
		  cout<<"输入新姓名:\n";
		  cin>>stu.m_strName;
		  
		  break;
	  case 1:
		  cout<<"输入新值:\n";
		  cin>>stu.m_pGrade->m_nC;
		 
		  break;
	  case 2:
		  cout<<"输入新值:\n";
		  cin>>stu.m_pGrade->m_nDB;
		 
		  break;
	  case 3:
		  cout<<"输入新值:\n";
		  cin>>stu.m_pGrade->m_nEng;
		 
		  break;
	  case 4:
		  cout<<"输入新值:\n";
		  cin>>stu.m_pGrade->m_nMath;
		  ;
		  break;
	  case 5:
		  cout<<"输入新值:\n";
		  cin>>stu.m_pGrade->m_nPhy;
		  
		  break;
	  default:break;
	  }
	  cout<<"继续修改其他项,请输入c/C,否则退出修改!";
	  cin>>cc;
	}
	}
	StuVec.push_back(stu);
	infile>>stu;	
  }

   {
	  ofstream outfile("student.stu",ios_base::out);
	  for (vector<Student>::iterator it = StuVec.begin();
		  it != StuVec.end();++it)
		     outfile<<*it;
	  cout<<"修改成功!\n";
  }
  cout<<"按照使用说明继续进行其它操作!\n";
  Start();
  

}

void Manage::Inquire()
{
    cout<<"输入n/N进行学号查询;\n"
		<<"输入x/X进行姓名查询;\n"
		<<"输入c/C进行课程查询\n";
    char ch;
	cin>>ch;
	switch(ch)
	{
	case 'n':
	case 'N': NumInquire();break;
	case 'x': 
	case 'X': NameInquire();break;
	case 'c':
	case 'C': CourseInquire();break;
	default:break;
	}
}

void Manage::Illustrate()
{
	cout<<"使用说明:"<<endl
		<<"    1)  进行学生成绩输入,输入i/I;\n"
		<<"    2)  进行学生成绩编辑,输入e/E;\n"
		<<"    3)  进行学生成绩查询,输入f/F;\n"
		<<"    4)  要退出程序,输入除上面以外的任何字符!\n";

}

void Manage::Start()
{
	cin>>m_cType;

  switch(m_cType)
  {
	  case 'i':
	  case 'I': Input();break;
	  case 'e':
	  case 'E': Edit();break;
	  case 'f': 
	  case 'F': Inquire();break;
	  default : break;
  }
}

void Manage::NumInquire()
{
  bool flag = false;
  char ch;
  int check;
  Student stu;
  ifstream infile("student.stu");
 
  cout << "请输入学号:\n";
  cin >> check;
  m_nEditNum = check;
 

  while(infile.get(ch))
  {  
     infile >> stu;
	 if(stu.m_nNum == check)
	 {   flag =true;
		 cout<<stu;
		 cout<<endl;
		 break;
	 }
  }
  if(!flag)
	  cout<<"没有学号为"<<check<<"的学生成绩存在!\n";
  
  if(!m_bEdit)
  {
  cout<<"按照使用说明继续进行其它操作!\n";
  Start();
  }
}

void Manage::NameInquire()
{
   bool flag =false;
   char ch;
   string check;
   Student stu;
   ifstream infile("student.stu");

   cout<<" 请输入学生姓名:\n";
   cin>>check;
   

   while(infile.get(ch))
   {
     
	 if(check == stu.m_strName)
	 {
	     cout<<stu;
		 flag = true;
	 }
	 infile >> stu;
   }
   if(!flag)
   cout<<"没有姓名为"<<check<<"的学生成绩存在!\n";

   cout<<"按照使用说明继续进行其它操作!\n";
   Start();
}

void Manage::CourseInquire()
{
   int type;

   cout<<"请选择要查询的课程: C语言--1,数据库--2,英语--3,数学--4,物理--5!\n"
	   <<"输入课程代码:\n";
   cin>>type;
   while(type>5||type<=0)
   {
     cout<<"代码输入错误!请重新输入,在所给定的课程代码内选择!\n";
     cin >>type;
   }
   CourseInquireCheck(type);
}

void Manage::CourseInquireCheck(int type)
{
	char ch;
   Student stu;
   ifstream infile("student.stu");
   infile>>stu;
   while(infile.get(ch))
   {
     
	 cout<<'['<<stu.m_nNum<<"] ,"<<stu.m_strName
		 <<":    ";
	 switch(type)
	 {
	 case 1: cout<<stu.m_pGrade->m_nC<<endl;break;
	 case 2: cout<<stu.m_pGrade->m_nDB<<endl;break;
	 case 3: cout<<stu.m_pGrade->m_nEng<<endl;break;
	 case 4: cout<<stu.m_pGrade->m_nMath<<endl;break;
	 case 5: cout<<stu.m_pGrade->m_nPhy<<endl;break;
	 }
	 infile>>stu;

   }

   cout<<"按使用说明进行其它操作!\n";
   Start();

}

void Manage::AllNums( vector<int>& v)
{
  ifstream infile("student.stu");
  char ch;
 
  Student stu;

  infile>>stu;
  while(infile.get(ch))
  {
	  v.push_back(stu.m_nNum);
	  infile>>stu;
  }

}

bool Manage::IfNumUnique(int num,vector<int>& v)
{   
	if(num<=0)
	{
		cout<<"输入的学号不能为负数,请重新输入学号:";
	    return false;
	}
	for(vector<int>::iterator it = v.begin();
		it != v.end();++it)
	{
	  if(num == *it)
	  {
		  cout<<"输入的学号已存在,不能重复输入!\n"
			  <<"请重新输入学号:";
		  return false;
	  }
	}

   return true;
}

⌨️ 快捷键说明

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