C / C++ 学生成绩管理系统

在这里插入图片描述功能要求:

(1)信息维护:

要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息

(2)信息查询:

要求:查询时可实现按姓名查询、按学号查询

(3)成绩统计:

要求:A 输入任意的一个课程名(如数学)和一个分数段(如60–70),统计出在此分数段的学生情况。

(4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果

代码:

Student.h

#ifndef _STUDENT_H_
#define _STUDENT_H_
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <string>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <iomanip>
using namespace std;

class score{         // 成绩类
public:
	string s_name;   // 姓名
	double s_score;  // 成绩
};

class Student {      // 学生类
public:
	string name;     // 姓名
	string num;      // 学号
	double Chinese;  // 语文
	double Math;     // 数学
	double English;  // 英语
	double sum;      // 总成绩
};
	
	void Increase(); // 增加学生信息
	void Delete();   // 删除学生信息
	void Modify();   // 修改学生信息

	void Inquire();  // 查询学生信息(姓名 学号)
	void Display();  // 显示所有学生信息

	void Statis();   // 统计学生信息(据课程名和分数段)
	
	void Rank();     // 排序(升序 降序)

	void menus();   // 主目录
	void menusa();  // 信息维护目录
	void menusb();  // 信息查询目录

#endif

main.cpp

#include <iostream>
#include "Student.h"
#include<Windows.h>
using namespace std;

void gotoxy(int x,int y)
{
    COORD pos;
    pos.X=x;
    pos.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}

int main() {
	SetConsoleTitle("学生成绩管理系统");//窗口名称
	menus();

	system("pause");
    return 0;
}

Increase.cpp

#include "Student.h"
void Increase()  // 增加学生信息
{
    
    
    ofstream fout("information.txt", ios::app);  //打开文件,如不存在则创建新文件
    if (!fout)
    {
		cout << "\t\t数据文件打开失败!" << endl;
        system("pause");
        exit(0);
    }

	fstream fin("information.txt");
	if (!fin) {
		cout << "\t\t数据文件打开失败!" << endl;
		system("pause");
		exit(0);
	}

    char x = 'Y';
    while (x == 'Y' || x == 'y') {
		Student* nw;
		nw = new Student;
		Student* nw_1;
		nw_1 = new Student;
		bool flag=true;

	
		system("cls");	//清屏函数
	    cout << "\t*********** -----信息录入模式----- *********** \n";
	    cout << endl << endl;


		cout << "\t\t请输入学生的姓名:";  cin >> nw->name;
		cout << "\t\t请输入学生的学号:";  cin >> nw->num;


		while(fin >> nw_1->name >> nw_1->num >> nw_1->Chinese >> nw_1->Math >> nw_1->English >> nw_1->sum){    // 查重(学号)
			if(nw->num.compare(nw_1->num)){
				continue;
			}
			flag=false;
			cout << endl;
			cout << "\t此学号已有学生存在,学生信息为:"<<endl;
		    cout <<"        ---------------------------------------------- "<<endl;
		    cout << left <<"\t  name:"<< setw(8)<<nw_1->name;
		    cout << left <<"\t  num:"<< setw(8)<< nw_1->num;
		    cout << left <<"\t  sum:"<< setw(8) <<nw_1->sum ;
		    cout << left <<"\n\t  Chinese:"<< setw(4)<< nw_1->Chinese;
	    	cout << left <<"\t  Math:"<< setw(4) <<nw_1->Math;
		    cout << left <<"\t  English:"<< setw(4) << nw_1->English;
		    cout <<"\n        ----------------------------------------------"<<endl;
	  		cout << endl;

			cout << "\t是否继续录入学生信息(Y/N):";
		    cin >> x;
		    cout << endl;
		}


		if(flag==true){
		cout << "\t\t请输入语文课程的成绩:";  cin >> nw->Chinese;
		while (nw->Chinese < 0 || nw->Chinese > 100)
		{
			cout << "\t您输入的数据不合法,提示[0-100],请重新输入" << endl;
			cin >> nw->Chinese;
		}
		cout << "\t\t请输入数学课程的成绩:";  cin >> nw->Math;
		while (nw->Math < 0 || nw->Math > 100)
		{
			cout << "\t您输入的数据不合法,提示[0-100],请重新输入" << endl;
			cin >> nw->Math;
		}
		cout << "\t\t请输入英语课程的成绩:";  cin >> nw->English;
		while (nw->English < 0 || nw->English > 100)
		{
			cout << "\t您输入的数据不合法,提示[0-100],请重新输入" << endl;
			cin >> nw->English;
		}

		nw->sum = nw->Chinese + nw->Math + nw->English;    // 计算sum
		fout << nw->name << " " << nw->num << " " << nw->Chinese << " ";
		fout << nw->Math << " " << nw->English << " " << nw->sum << endl;    // 写入文件

		cout<<"\t  -----------------------------------------------"<<endl;
		cout<<left<<"\t  name:"<< setw(10)<<nw->name;
		cout<<left<<"num:"<< setw(8)<<nw->num; 
		cout<<left<<"sum:"<< setw(11)<<nw->sum<<endl;
		cout<<left<<"\t  Chinese:"<< setw(7)<<nw->Chinese;
		cout<<left<<"Math:"<< setw(7)<<nw->Math;
		cout<<left<<"English:"<< setw(7)<<nw->English<<endl;
		cout<<"\t  -----------------------------------------------"<<endl;



		cout << "\t学生信息录入成功,是否继续录入学生信息(Y/N):";
		cin >> x;
		cout << endl;
	    delete nw;
		}
	}
	fout.close();

	
	if (x == 'N' || x == 'n') {
			menusa();
	}
}

Delete.cpp

/*
   实现:找到所要删除的学生信息,把不是所要删除的信息拷贝到临时文件,最后删除原文件,将临时文件改名为原文件名。
*/

#include "Student.h"
void Delete() // 删除
{
    int order;   // 用户指令
    char x = 'Y';  // 判断条件
    string tmp;

	/********************************/

    while (x == 'Y' || x == 'y')
    {
        ifstream fin("information.txt");
        ofstream fout("information2.txt");
        if (!fin)
        {
            cout << "\t\t数据文件打开失败!" << endl;
            system("pause");
            exit(0);
        }
        if (!fout)
        {
            cout << "\t\t数据文件打开失败!" << endl;
            system("pause");
            exit(0);
        }


		system("cls");	//清屏函数
        cout << "\t************ -----信息删除模式----- ************ \n";
	    cout << endl;
        cout << "\t*----------------------------------------------* \n";
	    cout << "\t*               1——按姓名删除                * \n";
	    cout << "\t*               2——按学号删除                * \n";
	    cout << "\t*               0——返回上一级菜单            * \n";
	    cout << "\t*----------------------------------------------* \n";
	    cout << "\t\t您要输入的编号是(0-2):";
        cin >> order;
        while ((order < 0) || (order > 2))
        {
	        cout << "\t\t您要输入的编号是(0-2):";
            cin >> order;
        }
        if (order == 0) menusa();
		if (order == 1) {
			cout << "\t\t请输入姓名:"; cin >> tmp;
		}
        else if (order == 2) {
			cout << "\t\t请输入学号:"; cin >> tmp; 
		}

		/*********查找姓名或学号**********/
        Student* nw;
        nw = new Student;
        bool flag = false;   // 判断学生信息是否找到
        while (fin >> nw->name >> nw->num >> nw->Chinese >> nw->Math >> nw->English >> nw->sum)
        {
			if((tmp.compare(nw->name)) && (tmp.compare(nw->num))) // 如果找到相等的信息,返回0,则if不执行;若未找到相等信息,返回1,执行if,则将信息依次写入临时文件
            {
                fout << nw->name << " " << nw->num << " " << nw->Chinese << " "
                     << nw->Math << " " << nw->English << " " << nw->sum << endl;
					continue;   // 跳出本次 while 循环
            }
            flag = true;
			cout <<"    \t------------------------------------------------\n";
            cout << left << "\t    name:"<< setw(11) <<nw->name
                 << left << "num:"<< setw(9) <<nw->num
				 << "sum:"<< setw(8) <<nw->sum 
                 << left << "\n\t    Chinese:"<< setw(8) <<nw->Chinese
                 << left << "Math:"<< setw(8) <<nw->Math
                 << left << "English:"<< setw(8) <<nw->English<<endl;
             cout <<"    \t------------------------------------------------\n";   

            // 防止用户输入错误
            cout << "\t\t确认删除?(Y/N) "; cin >> x;
            if (x == 'N' || x == 'n')
            {
                cout << "\t\t取消删除成功!"<< endl;
                fout << nw->name << " " << nw->num << " " << nw->Chinese << " " << nw->Math << " " << nw->English << " "
                     << nw->sum << endl;
                continue;
            }
            cout << "\t\t数据删除成功!"<< endl;
        }
		delete nw;
		/*******************************************/

		if (!flag){
			 cout << "\n\t\t未找到该信息!";
		}

        fin.close();
        fout.close();

        remove("information.txt");  // 删除原文件
        rename("information2.txt", "information.txt");  // 将临时文件改名为原文件

        cout << "\n\t是否继续删除?(Y/N)(否)则返回上级目录";
        cin >> x;
		if(x=='n'||x=='N'){
		    menusa();
		}
		if(x=='y'||x=='Y'){
		    continue;
		}

    }
    system("pause");
}

Modify.cpp

/*
    实现:算法与删除算法类似
*/

#include "Student.h"
void Modify() {
	int order; // 用户指令
	string tmp;  // 查找内容
	char x = 'y';

	

	/********************************/

	while(x=='y'||x=='Y'){

		ifstream fin("information.txt");
		if (!fin)
        {
            cout << "\t\t数据文件打开失败!" << endl;
            system("pause");
            exit(0);
        }
		ofstream fout("information2.txt");
		if (!fout)
		{
			cout << "\t\t数据文件打开失败!" << endl;
            system("pause");
            exit(0);
		}

		/************查找学生信息***********/
		system("cls");	 //清屏函数
        cout << "\t ************ -----信息修改模式----- ************ \n";
	    cout << endl;
		cout << "\t *----------------------------------------------* \n";
		cout << "\t *-------------按关键字查找学生信息-------------* \n";
		cout << "\t *----------------------------------------------* \n";
	    cout << "\t *               1——学生姓名                  * \n";
	    cout << "\t *               2——学生学号                  * \n";
	    cout << "\t *               0——返回上一级菜单            * \n";
	    cout << "\t *----------------------------------------------* \n";
	    cout << "\t\t您要输入的编号是(0-2):";
        cin >> order;
        while ((order < 0) || (order > 2))
        {
	        cout << "\t\t您要输入的编号是(0-2):";
            cin >> order;
        }
        if (order == 0) menusa();
		if (order == 1) {
			cout << "\t\t请输入姓名:"; cin >> tmp;
		}
        else if (order == 2) {
			cout << "\t\t请输入学号:"; cin >> tmp; 
		}

		/*******************************/

		/**********修改学生信息*********/
		Student *nw;
		nw = new Student;
		bool flag=false;
		while(fin >> nw->name >> nw->num >> nw->Chinese >> nw->Math >> nw->English >> nw->sum){
			if(tmp.compare(nw->name) && tmp.compare(nw->num)){
				fout << nw->name << " " << nw->num << " " << nw->Chinese << " "
                     << nw->Math << " " << nw->English << " " << nw->sum << endl;
                continue;   // 跳出本次 while 循环
			}
			flag=true;

			system("cls");
			cout <<"     \t ------------------------------------------------\n";
            cout << left << "\t    name:"<< setw(11) <<nw->name
                 << left << "num:"<< setw(9) <<nw->num
				 << "sum:"<< setw(8) <<nw->sum 
                 << left << "\n\t    Chinese:"<< setw(8) <<nw->Chinese
                 << left << "Math:"<< setw(8) <<nw->Math
                 << left << "English:"<< setw(8) <<nw->English<<endl;
             cout <<"     \t ------------------------------------------------\n";   
	
		    cout << "\t *----------------------------------------------* \n";
		    cout << "\t *------------请选择要修改的信息类型------------* \n";
		    cout << "\t *----------------------------------------------* \n";
	        cout << "\t *               1——姓名                      * \n";
	        cout << "\t *               2——学号                      * \n";
		    cout << "\t *               3——语文成绩                  * \n";
		    cout << "\t *               4——数学成绩                  * \n";
		    cout << "\t *               5——英语成绩                  * \n";
		    cout << "\t *               0——返回上一级菜单            * \n";
	        cout << "\t *----------------------------------------------* \n";
            cout << "\t\t您要输入的编号是(0-5):";
            cin >> order;
			while(order<0||order>5){
			    cout << "\t\t您要输入的编号是(0-5):";
			    cin >> order;
		    }

			if(order==0) menusa();
			if(order==1){	//修改姓名
				string name1;
				cout << "\t\t您想修改为:"; cin >> name1;
				cout << "\t\t确认修改(Y/N)";cin >> x;
				if(x=='n'|| x=='N'){
				    cout << "\n\t\t取消修改成功!";
					fout << nw->name << " " << nw->num << " " << nw->Chinese << " " 
						 << nw->Math << " " << nw->English << " "<< nw->sum << endl;
				}else{
					fout << name1 << " " << nw->num << " " << nw->Chinese << " " 
						 << nw->Math << " " << nw->English << " "<< nw->sum << endl;
				}

		    }else if(order==2){	  //修改学号
			    string num1;
				cout << "\t\t您想修改为:"; cin >> num1;
				cout << "\t\t确认修改(Y/N)";cin >> x;
				if(x=='n'|| x=='N'){
				    cout << "\n\t\t取消修改成功!";
					fout << nw->name << " " << nw->num << " " << nw->Chinese << " " 
						 << nw->Math << " " << nw->English << " "<< nw->sum << endl;
				}else{
					fout << nw->name << " " << num1 << " " << nw->Chinese << " " 
						 << nw->Math << " " << nw->English << " "<< nw->sum << endl;
				}
		    }else if(order==3){	   //修改语文成绩
			    double C;
				cout << "\t\t您想修改为:"; cin >> C;
				while(C<0 || C>100){
					cout << "\t 您输入的数据不合法,提示[0-100],请重新输入:" ;
					cin >> C;
				}
				cout << "\t\t确认修改(Y/N)";cin >> x;
				if(x=='n'|| x=='N'){
				    cout << "\n\t\t取消修改成功!";
					fout << nw->name << " " << nw->num << " " << nw->Chinese << " " 
						 << nw->Math << " " << nw->English << " "<< nw->sum << endl;
				}else{
					nw->sum=C+nw->Math+nw->English;
					fout << nw->name << " " << nw->num << " " << C << " " 
						 << nw->Math << " " << nw->English << " "<< nw->sum << endl;
				}
		    }else if(order==4){		//修改数学成绩
			    double M;
				cout << "\t\t您想修改为:"; cin >> M;
				while(M<0 || M>100){
					cout << "\t 您输入的数据不合法,提示[0-100],请重新输入:" ;
					cin >> M;
				}
				cout << "\t\t确认修改(Y/N)";cin >> x;
				if(x=='n'|| x=='N'){
				    cout << "\n\t\t取消修改成功!";
					fout << nw->name << " " << nw->num << " " << nw->Chinese << " " 
						 << nw->Math << " " << nw->English << " "<< nw->sum << endl;
				}else{
					nw->sum=nw->Chinese+M+nw->English;
					fout << nw->name << " " << nw->num << " " << nw->Chinese << " " 
						 << M << " " << nw->English << " "<< nw->sum << endl;
				}
	    	}else if(order==5){	   //修改英语成绩
			    double E;
				cout << "\t\t您想修改为:"; cin >> E;
				while(E<0 || E>100){
					cout << "\t您输入的数据不合法,提示[0-100],请重新输入:" ;
					cin >> E;
				}
				cout << "\t\t确认修改(Y/N)";cin >> x;
				if(x=='n'|| x=='N'){
				    cout << "\n\t\t取消修改成功!";
					fout << nw->name << " " << nw->num << " " << nw->Chinese << " " 
						 << nw->Math << " " << nw->English << " "<< nw->sum << endl;
				}else{
					nw->sum=nw->Chinese+nw->Math+E;
					fout << nw->name << " " << nw->num << " " << nw->Chinese << " " 
						 << nw->Math << " " << E << " "<< nw->sum << endl;
				}
	    	}
		}
		delete nw;
		/*******************************/

		if(!flag){
			cout << "\n\t\t未找到学生信息";
		}

		fin.close();
		fout.close();

		remove("information.txt"); // 删除原文件
		rename("information2.txt","information.txt"); // 将临时文件改名为原文件

		cout << "\n\t 是否继续修改?(Y/N)(否)则返回上级目录:";
        cin >> x;
		if(x=='n'||x=='N'){
		    menusa();
		}
		if(x=='y'||x=='Y'){
		    continue;
		}
	 }
		system("pause");
}

Inquire.cpp

#include "Student.h"
void Inquire() {
	int order; // 用户指令
	string tmp; // 查找内容
	char x = 'y';


	while(x=='y'||x=='Y'){
	fstream fin("information.txt");
		if (!fin)
        {
            cout << "\t\t数据文件打开失败!" << endl;
            system("pause");
            exit(0);
        }

		/************查找学生信息***********/
		system("cls");	//清屏函数
        cout << "\t************ -----信息查询模式----- ************ \n";
	    cout << endl;
		cout << "\t*----------------------------------------------* \n";
		cout << "\t*-------------按关键字查找学生信息-------------* \n";
		cout << "\t*----------------------------------------------* \n";
	    cout << "\t*               1——学生姓名                  * \n";
	    cout << "\t*               2——学生学号                  * \n";
	    cout << "\t*               0——返回上一级菜单            * \n";
	    cout << "\t*----------------------------------------------* \n";
	    cout << "\t\t您要输入的编号是(0-2):";
        cin >> order;
        while ((order < 0) || (order > 2))
        {
	        cout << "\t\t您要输入的编号是(0-2):";
            cin >> order;
        }
        if (order == 0) menusb();
		if (order == 1) {
			cout << "\t\t请输入姓名:"; cin >> tmp;
		}
        else if (order == 2) {
			cout << "\t\t请输入学号:"; cin >> tmp; 
		}

		Student *nw;
		nw = new Student;
		bool flag=false;
		while(fin >> nw->name >> nw->num >> nw->Chinese >> nw->Math >> nw->English >> nw->sum){
			if(tmp.compare(nw->name) && tmp.compare(nw->num)){
                continue;   // 跳出本次 while 循环
			}
			flag=true;
   		cout <<"        ------------------------------------------------ "<<endl;
            cout << left  <<"\t     姓名:"<< setw(8)<<nw->name
                 << left  <<" 学号:"<< setw(8)<< nw->num
				 << " 总分:"<< setw(8)<<nw->sum 
                 << left  <<"\n\t     语文成绩:"<< setw(5)<< nw->Chinese
                 << left <<"数学成绩:"<< setw(4) << nw->Math
                 << left <<" 英语成绩:" << setw(4)<< nw->English <<endl;
         cout <<"        ------------------------------------------------ "<<endl;        
		}
		delete nw;
		/********************************/

		if(!flag){
			cout << "\t\t未找到学生信息"<< endl;
		}
		fin.close();

		cout << "\n\t是否继续查询?(Y/N)(否)则返回上级目录";
        cin >> x;
		if(x=='n'||x=='N'){
		    menusb();
		}
		if(x=='y'||x=='Y'){
		    continue;
		}

	}
		system("pause");
}





Display.cpp

#include "Student.h"
void Display() {       //显示所有学生信息
	system("cls");	 //清屏函数
	
	cout << "\t **************************************" << endl;
	cout << "\t              全部学生信息             " << endl;
	cout << "\t **************************************" << endl;

	ifstream out("information.txt");
	if (!out) {
		cout << "\t\t数据文件打开失败!" << endl;
		system("pause");
		exit(0);
	}
	Student* nw;
	nw = new Student;
	int number = 0;
	while (out >> nw->name >> nw->num >> nw->Chinese >> nw->Math >> nw->English >> nw->sum) {
		number++;
		cout <<"      ---------------------------------------------- "<<endl;
		cout << left << "      序号:"<< setw(7)<<number;
		cout << left <<"  name:"<< setw(4)<<nw->name;
		cout << left <<"  num:"<< setw(8)<< nw->num;
		cout << left <<"\n      Chinese:"<< setw(4)<< nw->Chinese;
		cout << left <<"  Math:"<< setw(4) <<nw->Math;
		cout << left <<"  English:"<< setw(4) << nw->English;
		cout <<"  sum:"<< nw->sum ;
		cout <<"\n      ----------------------------------------------"<<endl;
	}
	delete nw;

	out.close();
	cout << endl;
	
	char y;
		while (1) {
			cout << "\t\t输入(Y/y)返回上级目录:" ;
			cin >> y;
			if (y == 'Y' || y == 'y') {
				menusb();
				break;
			}
			else {
				cout << "\t\t没有此选项,请重新选择(Y/N):";
			}
		}
}

Statis.cpp

#include "Student.h"
bool R_compStudent(score x,score y);
void Statis() {
	char x = 'Y';
	string order;   // 用户指令
	double score_begin;  // 下界
	double score_end;    // 上界
	bool flag=false;     // 判断有无

	while(x=='y'||x=='Y'){

	system("cls");
	cout << "\t ************ -----成绩统计模式----- ************ \n";
	cout << "\t 提示:(1) 输入格式:math 或 数学(sum 或 总成绩) \n";
	cout << "\t       (2) 输入0返回主界面 \n";
	cout << endl;


	Student* nw;
	nw = new Student;

	vector<score> vec;   // score类的向量
	score my_score;      // score类的对象
	double my_aver=0;      // 平均成绩
	
	ifstream fin("information.txt");
	if(!fin){
		cout << "\t\t数据文件打开失败" << endl;
		system("pause");
		exit(0);
	}
	ofstream fout("information2.txt");
	if (!fout){		
		cout << "\t\t数据文件打开失败!" << endl;
        system("pause");
        exit(0);
	}
	ifstream my_fin("information2.txt");
	if (!my_fin){		
		cout << "\t\t数据文件打开失败!" << endl;
        system("pause");
        exit(0);
	}

	cout << "\t\t您要统计的学科是:";
    while(cin >> order){
	
	if(order=="0") menus();
	/*****************统计过程*****************/
	if(order == "chinese" || order == "语文"){      // 语文成绩
	cout << "\t\t请输入分数段下限:";
    cin >> score_begin;
	cout << "\t\t请输入分数段上限:";
	cin >> score_end;

	while (fin >> nw->name >> nw->num >> nw->Chinese >> nw->Math >> nw->English >> nw->sum) {	
		if(nw->Chinese>=score_begin && nw->Chinese<=score_end){
			fout << nw->name << " " << nw->Chinese << endl;
			flag=true;
		}
	  }
	while (my_fin >> nw->name >> nw->Chinese ) {
		my_score.s_name=nw->name;
		my_score.s_score=nw->Chinese;
		vec.push_back(my_score);
	  }

	if(flag==true){
		cout << "\n\t       姓名         语文成绩\n";
		sort(vec.begin(),vec.end(),R_compStudent);
		vector<score>::iterator svit;
	    for(svit=vec.begin();svit<vec.end();svit++){
		my_aver+=svit->s_score;
		cout << left << setw(8) <<"\t "<< svit->s_name;
		cout << left << setw(8) <<"\t "<< svit->s_score << endl;
	    }
		cout << endl;
		cout << "\t\t此分数段共有学生:" << vec.size() << "人"  << endl;
		cout << "\t\t此分段学生平均分:" << my_aver/vec.size() << "分"<< endl;
	}
	break;
	}else if(order == "math" || order == "数学"){     // 数学成绩
	cout << "\t\t请输入分数段下限:";
    cin >> score_begin;
	cout << "\t\t请输入分数段上限:";
	cin >> score_end;
	while (fin >> nw->name >> nw->num >> nw->Chinese >> nw->Math >> nw->English >> nw->sum) {	
		if(nw->Math>=score_begin && nw->Math<=score_end){
			fout << nw->name << " " << nw->Math << endl;
			flag=true;
		}
	   }
	while (my_fin >> nw->name >> nw->Math ) {
		my_score.s_name=nw->name;
		my_score.s_score=nw->Math;
		vec.push_back(my_score);
	  }
	if(flag==true){
	    cout << "\n\t       姓名         数学成绩\n";
		sort(vec.begin(),vec.end(),R_compStudent);
		vector<score>::iterator svit;
	    for(svit=vec.begin();svit<vec.end();svit++){
		my_aver+=svit->s_score;
		cout << left << setw(8) <<"\t "<< svit->s_name;
		cout << left << setw(8) << "\t "<<svit->s_score << endl;
	    }
		cout << endl;
		cout << "\t\t此分数段共有学生:" << vec.size() << "人"  << endl;
		cout << "\t\t此分段学生平均分:" << my_aver/vec.size() << "分"<< endl;
	}
	break;
	}else if(order == "english" || order == "英语"){      // 英语成绩
	cout << "\t\t请输入分数段下限:";
    cin >> score_begin;
	cout << "\t\t请输入分数段上限:";
	cin >> score_end;
	while (fin >> nw->name >> nw->num >> nw->Chinese >> nw->Math >> nw->English >> nw->sum) {	
		if(nw->English>=score_begin && nw->English<=score_end){
			fout << nw->name << " " << nw->English << endl;
			flag=true;
		}
	    }
	while (my_fin >> nw->name >> nw->English ) {
		my_score.s_name=nw->name;
		my_score.s_score=nw->English;
		vec.push_back(my_score);
	  }
	if(flag==true){
	    cout << "\n\t       姓名         英语成绩\n";
		sort(vec.begin(),vec.end(),R_compStudent);
		vector<score>::iterator svit;
	    for(svit=vec.begin();svit<vec.end();svit++){
		my_aver+=svit->s_score;
		cout << left << setw(8) <<"\t "<< svit->s_name;
		cout << left << setw(8) << "\t "<<svit->s_score << endl;
	    }
		cout << endl;
		cout << "\t此分数段共有学生:" << vec.size() << "人"  << endl;
		cout << "\t此分段学生平均分:" << my_aver/vec.size() << "分"<< endl;
	}
	break;
	}else if(order == "sum" || order == "总成绩"){      // 总成绩
	cout << "\t\t请输入分数段下限:";
    cin >> score_begin;
	cout << "\t\t请输入分数段上限:";
	cin >> score_end;
	while (fin >> nw->name >> nw->num >> nw->Chinese >> nw->Math >> nw->English >> nw->sum) {	
		if(nw->sum>=score_begin && nw->sum<=score_end){
			fout << nw->name << " " << nw->sum << endl;
			flag=true;
		}
	    }
	while (my_fin >> nw->name >> nw->sum ) {
		my_score.s_name=nw->name;
		my_score.s_score=nw->sum;
		vec.push_back(my_score);
	  }
	if(flag==true){
	    cout << "\n\t       姓名          总成绩\n";
		sort(vec.begin(),vec.end(),R_compStudent);
		vector<score>::iterator svit;
	    for(svit=vec.begin();svit<vec.end();svit++){
		my_aver+=svit->s_score;
		cout << left << setw(8) <<"\t "<< svit->s_name;
		cout << left << setw(8) << "\t "<<svit->s_score << endl;
	    }
		cout << endl;
		cout << "\t\t此分数段共有学生:" << vec.size() << "人"  << endl;
		cout << "\t\t此分段学生平均分:" << my_aver/vec.size() << "分"<< endl;
	}
	break;
	}else{
		cout << "\t没有此学科,请重新选择您要统计的学科:";
	}
    }
	/**********************************************/

	if(!flag){
			cout << "\n\t\t该成绩段内无学生信息";
	}

	delete nw;
	fin.close();
	fout.close();
	my_fin.close();
	remove("information2.txt");
	
	cout << "\n\t是否继续对其他课程统计?(Y/N)(否)则返回上级目录:";
    cin >> x;
	if(x=='n'||x=='N'){
	    menus();
	}
	if(x=='y'||x=='Y'){
	    continue;
	}

	}
}

Rank.cpp

/*
    实现: 通过vector向量和sort函数实现。
*/

#include "Student.h"
bool R_compStudent(score x,score y);  // 升序
bool D_compStudent(score x,score y);  // 降序

void Rank() {
	char x = 'Y';
	int order;   // 用户指令


	while(x=='y'||x=='Y'){

	Student* nw;
	nw = new Student;
	
	vector<score> vec;   // score类的向量
	score my_score;      // score类的对象

	ifstream fin("information.txt");
	if(!fin){
		cout << "\t\t数据文件打开失败" << endl;
		system("pause");
		exit(0);
	}
	ofstream fout("information2.txt");
	if (!fout){		
		cout << "\t\t数据文件打开失败!" << endl;
        system("pause");
        exit(0);
	}
	ifstream my_fin("information2.txt");
	if (!my_fin){		
		cout << "\t\t数据文件打开失败!" << endl;
        system("pause");
        exit(0);
	}



	system("cls");	//清屏函数
	cout << "\t************ -----成绩排序模式----- ************ \n";
	cout << endl;
	cout << "\t*----------------------------------------------* \n";
	cout << "\t*-------------请选择所要排序的学科-------------* \n";
	cout << "\t*----------------------------------------------* \n";
	cout << "\t*               1——语文                      * \n";
    cout << "\t*               2——数学                      * \n";
	cout << "\t*               3——英语                      * \n";
	cout << "\t*               4——总成绩                    * \n";
	cout << "\t*               0——返回主菜单                * \n";
	cout << "\t*----------------------------------------------* \n";
	cout << "\t\t您要输入的编号是(0-4):";
    cin >> order;
    while ((order < 0) || (order > 4))
    {
	    cout << "\t\t您要输入的编号是(0-4):";
        cin >> order;
    }
	if(order==0) menus();



	/*****************排序过程*****************/
	if(order==1){      // 语文成绩
	while (fin >> nw->name >> nw->num >> nw->Chinese >> nw->Math >> nw->English >> nw->sum) {	
		fout << nw->name << " " << nw->Chinese << endl;
	  }
	while (my_fin >> nw->name >> nw->Chinese ) {
		my_score.s_name=nw->name;
		my_score.s_score=nw->Chinese;
		vec.push_back(my_score);
	  }

	system("cls");
	cout << "\t*----------------------------------------------* \n";
	cout << "\t*----------------请选择排序方式----------------* \n";
	cout << "\t*----------------------------------------------* \n";
	cout << "\t*                  1——升序                   * \n";
    cout << "\t*                  2——降序                   * \n";
	cout << "\t*----------------------------------------------* \n";
	cout << "\t\t您要输入的编号是(1-2):";
	int s_order;
	cin >> s_order;
	while ((s_order < 1) || (s_order > 2))
      {  
		  cout << "\t\t您要输入的编号是(1-2):";
          cin >> s_order;
      }
	   if(s_order==1){
	    sort(vec.begin(),vec.end(),R_compStudent);
	  }else if(s_order==2){
		sort(vec.begin(),vec.end(),D_compStudent);
	  }
	    
	    cout << "\n\t        姓名\t    语文成绩\n";
	    vector<score>::iterator svit;
	    for(svit=vec.begin();svit<vec.end();svit++){
		cout << left << setw(8) <<"\t "<< svit->s_name;
		cout << left << setw(8) <<"\t "<< svit->s_score << endl;
	    }
	}else if(order==2){     // 数学成绩
	while (fin >> nw->name >> nw->num >> nw->Chinese >> nw->Math >> nw->English >> nw->sum) {	
		fout << nw->name << " " << nw->Math << endl;
	  }
	while (my_fin >> nw->name >> nw->Math ) {
		my_score.s_name=nw->name;
		my_score.s_score=nw->Math;
		vec.push_back(my_score);
	  }

	system("cls");
	cout << "\t*----------------------------------------------* \n";
	cout << "\t*----------------请选择排序方式----------------* \n";
	cout << "\t*----------------------------------------------* \n";
	cout << "\t*                  1——升序                   * \n";
    cout << "\t*                  2——降序                   * \n";
	cout << "\t*----------------------------------------------* \n";
	cout << "\t\t您要输入的编号是(1-2):";
	int s_order;
	cin >> s_order;
	while ((s_order < 1) || (s_order > 2))
      {  
		  cout << "\t\t您要输入的编号是(1-2):";
          cin >> s_order;
      }
	  if(s_order==1){
	    sort(vec.begin(),vec.end(),R_compStudent);
	  }else if(s_order==2){
		sort(vec.begin(),vec.end(),D_compStudent);
	  }

	    cout << "\n\t        姓名\t    数学成绩\n";
	    vector<score>::iterator svit;
	    for(svit=vec.begin();svit<vec.end();svit++){
		cout << left << setw(8) <<"\t "<< svit->s_name;
		cout << left << setw(8) << "\t "<<svit->s_score << endl;
	    }
	}else if(order==3){      // 英语成绩
	while (fin >> nw->name >> nw->num >> nw->Chinese >> nw->Math >> nw->English >> nw->sum) {	
		fout << nw->name << " " << nw->English << endl;
	  }
	while (my_fin >> nw->name >> nw->English ) {
		my_score.s_name=nw->name;
		my_score.s_score=nw->English;
		vec.push_back(my_score);
	  }

	system("cls");
	cout << "\t*----------------------------------------------* \n";
	cout << "\t*----------------请选择排序方式----------------* \n";
	cout << "\t*----------------------------------------------* \n";
	cout << "\t*                  1——升序                   * \n";
    cout << "\t*                  2——降序                   * \n";
	cout << "\t*----------------------------------------------* \n";
	cout << "\t\t您要输入的编号是(1-2):";
	int s_order;
	cin >> s_order;
	while ((s_order < 1) || (s_order > 2))
      {  
		  cout << "\t\t您要输入的编号是(1-2):";
          cin >> s_order;
      }
	  if(s_order==1){
	    sort(vec.begin(),vec.end(),R_compStudent);
	  }else if(s_order==2){
		sort(vec.begin(),vec.end(),D_compStudent);
	  }
	   
	    cout << "\n\t        姓名\t    英语成绩\n";
	    vector<score>::iterator svit;
	    for(svit=vec.begin();svit<vec.end();svit++){
		cout << left << setw(8) <<"\t "<< svit->s_name;
		cout << left << setw(8) <<"\t "<< svit->s_score << endl;
	    }
	}else if(order==4){      // 总成绩
	while (fin >> nw->name >> nw->num >> nw->Chinese >> nw->Math >> nw->English >> nw->sum) {	
		fout << nw->name << " " << nw->sum << endl;
	  }
	while (my_fin >> nw->name >> nw->sum ) {
		my_score.s_name=nw->name;
		my_score.s_score=nw->sum;
		vec.push_back(my_score);
	  }

	system("cls");
	cout << "\t*----------------------------------------------* \n";
	cout << "\t*----------------请选择排序方式----------------* \n";
	cout << "\t*----------------------------------------------* \n";
	cout << "\t*                  1——升序                   * \n";
    cout << "\t*                  2——降序                   * \n";
	cout << "\t*----------------------------------------------* \n";
	cout << "\t\t您要输入的编号是(1-2):";
	int s_order;
	cin >> s_order;
	while ((s_order < 1) || (s_order > 2))
      {  
		  cout << "\t\t您要输入的编号是(1-2):";
          cin >> s_order;
      }
	  if(s_order==1){
	    sort(vec.begin(),vec.end(),R_compStudent);
	  }else if(s_order==2){
		sort(vec.begin(),vec.end(),D_compStudent);
	  }

	    cout << "\n\t        姓名\t      总成绩\n";
	    vector<score>::iterator svit;
	    for(svit=vec.begin();svit<vec.end();svit++){
		cout << left << setw(8) <<"\t "<< svit->s_name;
		cout << left << setw(8) <<"\t "<< svit->s_score << endl;
	    }
	}
	/**********************************************/

	vec.clear();

	
	delete nw;
	fin.close();
	fout.close();
	my_fin.close();
	remove("information2.txt");
	
	cout << "\n\t是否继续对其他课程排序?(Y/N)(否)则返回上级目录:";
    cin >> x;
	if(x=='n'||x=='N'){
	    menus();
	}
	if(x=='y'||x=='Y'){
	    continue;
	}

	}
}

bool R_compStudent(score x,score y){    // 升序
	if(x.s_score < y.s_score) return true;
		else   return false;
}
bool D_compStudent(score x,score y){    // 降序
	if(x.s_score <= y.s_score) return false;
		else   return true;
}

menus.cpp

#include "Student.h"
void menus() {
	system("cls");	//清屏函数
	cout << "\t ************** -----欢迎使用----- ****************\n";	
	cout << "\t ************ -学生成绩管理系统v1.0- **************\n";
	cout << "\t ********** -请输入您要操作的指令<0-4>- ***********\n";
	cout << "\t *------------------------------------------------*\n";
	cout << "\t *                 1——信息维护                  *\n";
	cout << "\t *                 2——信息查询                  *\n";
	cout << "\t *                 3——成绩统计                  *\n";
	cout << "\t *                 4——成绩排序                  *\n";
	cout << "\t *                 0——退出系统                  *\n";
	cout << "\t *------------------------------------------------*\n";
	cout << "\t\t你要输入的编号是(0-4):";
	
	int x; // 用户命令
	cin >> x;
	while (1) {
		
		if (x == 0) break;
		switch (x) {
		case 1: menusa(); break;   // 信息维护菜单
		case 2: menusb(); break;   // 信息查询菜单
		case 3: Statis(); break;   // 统计学生信息(据课程名和分数段)
		case 4: Rank();   break;   // 排序(升序 降序)
		default:
			cout << "\t\t没有此选项,请重新选择:" ;
			cin >> x;
		}
	}
	system("pause");
	exit(0);
}

menusa.cpp


#include "Student.h"
void menusa() {   // 信息维护菜单
	system("cls");	//清屏函数
	cout << "\t ************ -----信息维护模式----- ************ \n";
	cout << "\t *----------------------------------------------* \n";
	cout << "\t *               1——增加学生信息              * \n";
	cout << "\t *               2——删除学生信息              * \n";
	cout << "\t *               3——修改学生信息              * \n";
	cout << "\t *               0——返回主菜单                * \n";
	cout << "\t *----------------------------------------------* \n";
	cout << "\t\t你要输入的编号是(0-3):";

	int number;   // 用户命令
	cin >> number;
	while (1) {
		
		if (number == 0) {
			menus();
			break;
		}
		switch (number) {
		case 1: Increase(); break;   // 增加
		case 2: Delete(); break;     // 删除
		case 3: Modify(); break;     // 修改
		default:
			cout << "\t\t没有此选项,请重新选择:" ;
			cin >> number;
		}
	}

}

menusb.cpp

#include "Student.h"
void menusb() {
	system("cls");	//清屏函数
	cout << "\t ************ -----信息查询模式----- ************ \n";
	cout << "\t *----------------------------------------------* \n";
	cout << "\t *               1——查询学生信息              * \n";
	cout << "\t *               2——显示全部学生信息          * \n";
	cout << "\t *               0——返回主菜单                * \n";
	cout << "\t *----------------------------------------------* \n";
	cout << "\t\t你要输入的编号是(0-2):";

	int number;   // 用户命令
	cin >> number;
	while (1) {
		
		if (number == 0) {
			menus();
			break;
		}
		switch (number) {
		case 1: Inquire(); break;    // 查询学生信息(姓名 学号)
		case 2: Display(); break;    // 显示全部
		default:
			cout << "\t\t没有此选项,请重新选择:" ;
			cin >> number;
		}
	}
}
  • 9
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值