精华内容
下载资源
问答
  • 学生成绩管理系统c++
    2022-06-17 15:47:40

    一、具体代码

    #define _CRT_SECURE_NO_WARNINGS
    #include<iostream>
    #include<fstream>
    using namespace std;
    class student;
    class student_manager
    {
    public:
    	student* p;//对象数组指针
    student_manager();
    	~student_manager();
    	int number;//记录学生总人数
    	bool read_file();    //读文件,如果文件存在并有数据返回true
    	int get_filenumber();//读出文件中有多少人
    	void save_file();//将用户输入的学生信息进行保存
    
    	void raw_data();//展示学生的原始数据(从文件中读入的或是用户输入的)
    	void sort();//将学生按照成绩进行排序
    	void average();//求出各门科目的平均分
    	void score_segment();//求各门科及其各个分数区间的人数
    	void add_student();//添加学生信息
    	void find_student();//查找学生
    	void change_student();//修改学生信息
    	void delete_student();//删除学生
    
    	void show_menu();//展示学生成绩管理系统的菜单	
    	void exit_system();//退出系统
    };
    class student
    {
    	//声明为友元类使其可以访问student类的私有属性
    	friend bool student_manager::read_file();
    	friend void student_manager::save_file();
    	friend void student_manager::raw_data();
    	friend void student_manager::sort();
    	friend void student_manager::average();
    	friend void student_manager::score_segment();
    	friend void student_manager::add_student();
    	friend void student_manager::find_student();
    	friend void student_manager::change_student();
    	friend void student_manager::delete_student();
    public:
    	student() {}
    	student(int number, string name, double c_score, double math_score, double english_score, double algebra_score)
    	{
    		this->number = number;
    		this->name = name;
    		this->c_score = c_score;
    		this->math_score = math_score;
    		this->english_score = english_score;
    		this->algebra_score = algebra_score;
    		this->average = (c_score + math_score + english_score + algebra_score) / 4.0;
    		this->ranking = 0;
    
    		//存放到数组里面方便后面用
    		this->urr[0] = this->c_score;
    		this->urr[1] = this->math_score;
    		this->urr[2] = this->english_score;
    		this->urr[3] = this->algebra_score;
    		this->urr[4] = this->average;
    	}
    	void show_information()
    	{
    		cout << number << '\t' << name << '\t' << c_score << '\t' << math_score << '\t' << english_score << '\t' << algebra_score << '\t' << average << '\t' << ranking << endl;
    	}
    private:
    	int number;  //学号
    	string name;//姓名
    	double c_score;      //C语言成绩
    	double math_score;   //高数成绩
    	double english_score;//英语成绩
    	double algebra_score;//线性代数成绩
    	double average;      //各门科目的总平均分
    	double urr[5];       //将四门科目和平均分汇总存放在一起,方便统计
    	int ranking;         //在班里的排名
    };
    bool student_manager::read_file()//判断文件是否纯在以及里面是否有数据
    {
    	ifstream ifs;
    	ifs.open("学生成绩管理系统.txt", ios::in);
    	if (!ifs.is_open())//判断文件是否存在
    	{
    		cout << "文件不存在,请输入学生数据!" << endl;
    		ofstream ofs;
    		ofs.open("学生成绩管理系统.txt", ios::out);
    		ifs.close();
    		return false;
    	}
    	char ch;
    	ifs >> ch;
    	if (ifs.eof())
    	{
    		cout << "文件存在但是数据为空,请输入学生数据!" << endl;
    		ifs.close();
    		return false;
    	}
    	ifs.seekg(0, ios::beg);//将文件指针重新定位到开头
    	return true;
    }
    int student_manager::get_filenumber()//读出文件中一共有几名学生
    {
    	int num=0;
    	ifstream ifs;
    	ifs.open("学生成绩管理系统.txt",ios::in);
    	int number;
    	string name;
    	double c_score;
    	double math_score;
    	double english_score;
    	double algebra_score;
    	while (ifs >> number >> name >> c_score >> math_score >> english_score >> algebra_score)
    	{
    		num++;
    	}
    	return num;
    }
    void student_manager::save_file()//将用户输入的学生信息保存到文件里面
    {
    	ofstream ofs;
    	ofs.open("学生成绩管理系统.txt", ios::out);
    	for (int i = 0; i < this->number; i++)
    	{
    		ofs << p[i].number << '\t' << p[i].name << '\t' << p[i].c_score << '\t' << p[i].math_score << '\t' << p[i].english_score << '\t' << p[i].algebra_score << endl;
    	}
    	ofs.close();
    }
    student_manager::student_manager()
    {
    	if (read_file() != false)//如果文件里面有数据就从文件里面读
    	{
    		ifstream ifs;
    		ifs.open("学生成绩管理系统.txt", ios::in);
    		this->number = get_filenumber();
    		this->p = new student[this->number];//动态开辟一段空间,并用p指向他
    		int number;
    		string name;
    		double c_score;
    		double math_score;
    		double english_score;
    		double algebra_score;
    		int i = 0;
    		while (ifs >> number >> name >> c_score >> math_score >> english_score >> algebra_score)
    		{
    			p[i] = student(number, name, c_score, math_score, english_score, algebra_score);
    			i++;
    		}
    		ifs.close();
    	}
    	else  //如果文件里面没有数据就让用户输入数据
    	{
    		    int number;
    			string name;
    			double c_score;
    			double math_score;
    			double english_score;
    			double algebra_score;
    			cout << "请输入您要输入的学生数目:";
    			cin >> this->number;
    			this->p = new student[this->number];//动态开辟
    			for (int i = 0; i <this->number; i++)
    			{
    				cout << "请输入第" << i + 1 << "学生的信息" << endl;
    				cout << "学号   姓名  C程序设计 高等数学 英语 线性代数 " << endl;
    				cin >> number >> name >> c_score >> math_score >> english_score >> algebra_score;
    				p[i] = student(number, name, c_score, math_score, english_score, algebra_score);
    			}
    			save_file();//用户输完后把数据存到文件里面
    	}
    }
    student_manager::~student_manager()
    {
    	if (this->p != NULL)//手动释放开辟在堆区的空间
    	{
    		delete p;//归还内存
    		p = NULL;//将指针指向空
    		this->number = 0;
    	}
    }
    void student_manager::raw_data()
    {
    	cout << "学号   姓名  C程序设计 高等数学 英语 线性代数 " << endl;
    	for (int i = 0; i < this->number; i++)
    	{
    		cout << p[i].number << '\t' << p[i].name << '\t' << p[i].c_score << '\t' << p[i].math_score << '\t' << p[i].english_score << '\t' << p[i].algebra_score << endl;	
    	}
    }
    void student_manager::sort()
    {
    	for (int i = 0; i < this->number - 1; i++)//冒泡排序
    	{
    		for (int j = 0; j < this->number - 1 - i; j++)
    		{
    			if (p[j].average< p[j + 1].average)
    			{
    				student temp;
    				temp = p[j];//交换
    				p[j] = p[j + 1];
    				p[j + 1] = temp;
    			}
    		}
    	}
    	for (int i = 0; i < this->number; i++)
    	{
    		p[i].ranking =  i+1;
    	}
    	for (int i =0; i <this->number-1; i++)//用于处理平均分相同的情况
    	{
    		if (p[i].average == p[i + 1].average)
    		{
    			p[i+1].ranking = p[i].ranking;//并列排名
    		}
    	}
    	cout << "学号    姓名 C程序设计 高等数学 英语 线性代数  平均分 名次 " << endl;
    	for (int i = 0; i < this->number; i++)
    	{
    		p[i].show_information();
    	}
    }
    void student_manager::average()
    {
    	double c_score = 0;
    	double math_score = 0;
    	double english_score = 0;
    	double algebra_score = 0;
    	double average = 0;
    	for (int i = 0; i < this->number; i++)
    	{
    		c_score += p[i].c_score;
    		math_score += p[i].math_score;
    		english_score += p[i].english_score;
    		algebra_score += p[i].algebra_score;
    		average += p[i].average;
    	}
    	c_score /= (double)this->number;
    	math_score /= (double)this->number;
    	english_score /= (double)this->number;
    	algebra_score /= (double)this->number;
    	average /= (double)this->number;
    	cout << "             C程序设计 高等数学 英语 线性代数  平均分  " << endl;
    	cout << "各科平均分      " << c_score << '\t' << math_score << '\t' << english_score << '\t' << algebra_score << '\t' << average << endl;
    }
    void student_manager::score_segment()
    {
    	int arr[4][5] = { 0 };
    	for (int i = 0; i < 5; i++)
    	{
    
    		for (int j = 0; j < this->number; j++)
    		{
    			if (p[j].urr[i] >= 90 && p[j].urr[i] <= 100)
    			{
    				arr[0][i]++;
    			}
    			if (p[j].urr[i] >= 80 && p[j].urr[i] <= 90)
    			{
    				arr[1][i]++;
    			}
    			if (p[j].urr[i] >= 60 && p[j].urr[i] <= 80)
    			{
    				arr[2][i]++;
    			}
    			if (p[j].urr[i] >= 0 && p[j].urr[i] <= 60)
    			{
    				arr[3][i]++;
    			}
    		}
    
    	}
    	cout << "  90-100        ";
    	for (int i = 0; i < 5; i++)
    	{
    		cout << arr[0][i] << '\t';
    	}
    	cout << endl;
    	cout << "  80-89         ";
    	for (int i = 0; i < 5; i++)
    	{
    		cout << arr[1][i] << '\t';
    	}
    	cout << endl;
    	cout << "  60-69         ";
    	for (int i = 0; i < 5; i++)
    	{
    		cout << arr[2][i] << '\t';
    	}
    	cout << endl;
    
    	cout << "  60以下        ";
    	for (int i = 0; i < 5; i++)
    	{
    		cout << arr[3][i] << '\t';
    	}
    	cout << endl;
    
    }
    void student_manager::add_student()
    {
    
    	cout << "请输入您要添加的学生人数:";
    	int add_number;
    	cin >> add_number;
    	int t = this->number + add_number;
    	student* temp=new student[this->number+add_number];//动态开辟一段新的空间
    	for (int i = 0; i < this->number; i++)
    	{
    		temp[i] = p[i];//将原来的数据拷贝到新的空间下面
    	}
    	int number;
    	string name;
    	double c_score;
    	double math_score;
    	double english_score;
    	double algebra_score;
    	for (int i =this->number; i < add_number+this->number; i++)
    	{
    		newpoint:
    		cout << "请输入第你要添加的第" << i - this->number + 1 << "个学生的信息" << endl;
    		cout << "学号   姓名  C程序设计 高等数学 英语 线性代数 " << endl;
    		cin >> number >> name >> c_score >> math_score >> english_score >> algebra_score;
    		for (int i = 0; i < this->number; i++)
    		{
    			if (number == p[i].number)
    			{
    				cout << "输入有误,请勿重新输入学号" << endl;//如果用户输入的学号已经存在,跳转到前面让他重新输入
    				goto newpoint;
    			}
    		}
    		temp[i] = student(number, name, c_score, math_score, english_score, algebra_score);
    	}
    	this->p = temp;//p指针指向新的空间
    	this->number = t;//更新学生的人数
    	save_file();
    	cout << "添加学生成功!" << endl;
    }
    void student_manager::find_student()
    {
    	cout << "请输入您要查找的学生的学号:";
    	int num;
    	cin >> num;
    	for (int i = 0; i < this->number; i++)
    	{
    		if (this->p[i].number == num)
    		{
    			cout << "查找学生成功!该学生的信息如下" << endl;
    			cout << "学号    姓名 C程序设计 高等数学 英语 线性代数  平均分 名次 " << endl;
    			this->p[i].show_information();
    			return;
    		}		
    	}
    	cout << "查找失败,查无此人!"<<endl;
    }
    void student_manager::change_student()
    {
    	cout << "请输入您要修改信息的学生的学号";
    	int num;
    	cin >> num;
    	int subscript=-1;
    	for (int i = 0; i < this->number; i++)
    	{
    		if (this->p[i].number == num)
    		{
    			subscript = i;
    			break;
    		}
    	}
    	if (subscript == -1)
    	{
    		cout << "没有这个人,无法修改其信息" << endl;
    		return;
    	}
    	newpoint1:
    	cout << "请输入您要修改的学生信息" << endl;
    	int number;
    	string name;
    	double c_score;
    	double math_score;
    	double english_score;
    	double algebra_score;
    	cout << "学号   姓名  C程序设计 高等数学 英语 线性代数 " << endl;
    	cin >> number >> name >> c_score >> math_score >> english_score >> algebra_score;
    	for (int i = 0; i < this->number; i++)
    	{
    		if (p[i].number == number)//将该学生的学号改为已经存在的(除非是他自己本来的学号)提示用户重新输入正确的学号
    		{
    			if (p[i].number != num)
    			{
    				cout << "输入有误,您输入的学生学号已经存在,请重新输入!" << endl;
    				goto newpoint1;
    			}		
    		}			
    	}	
    p[subscript] = student(number, name, c_score, math_score, english_score, algebra_score);
    	cout << "修改学生信息成功!" << endl;
    	save_file();
    }
    void student_manager::delete_student()
    {
    	cout << "请输入您要删除的学生学号:";
    	int num;
    	cin >> num;
    	int subscript = -1;
    	for (int i = 0; i < this->number; i++)
    	{
    		if (this->p[i].number == num)
    		{
    			subscript = i;
    			break;
    		}
    	}
    	if (subscript == -1)
    	{
    		cout << "没有这个人,无法删除其信息" << endl;
    		return;
    	}
    	for (int i = subscript; i < this->number - 1; i++)
    	{
    		this->p[i] = this->p[i + 1];
    	}
    	this->number--;
    	cout << "删除成功!" << endl;
    	save_file();
    }
    void student_manager::show_menu()
    {
    	cout << "|——————————————————————|" << endl;
    	cout << "|	      学生成绩管理系统	   	     |" << endl;
    	cout << "|——————————————————————|" << endl;
    	cout << "|	     0.展示原始学生信息              |" << endl;
    	cout << "|——————————————————————|" << endl;
    	cout << "|	     1.展示学生成绩及排名            |" << endl;
    	cout << "|——————————————————————|" << endl;
    	cout << "|            2.展示各课程分数段人数          |" << endl;
    	cout << "|——————————————————————|" << endl;
    	cout << "|            3.添加学生信息                  |" << endl;
    	cout << "|——————————————————————|" << endl;
    	cout << "|            4.查找学生信息                  |" << endl;
    	cout << "|——————————————————————|" << endl;
    	cout << "|            5.修改学生信息                  |" << endl;
    	cout << "|——————————————————————|" << endl;
    	cout << "|            6.删除学生信息                  |" << endl;
    	cout << "|——————————————————————|" << endl;
    	cout << "|            7.退出系统                      |" << endl;
    	cout << "|——————————————————————|" << endl;
    }
    void student_manager::exit_system()
    {
    	cout << "【退出系统】" << endl;
    	cout << "欢迎下次使用!" << endl;
    	exit(0);
    }
    int main()
    {
    	student_manager A;
    	while (true)
    	{
    		A.show_menu();
    		int choice;
    		cout << "请输入您的选择:";
    		cin >> choice;
    		switch (choice)
    		{
    		case 0: A.raw_data(); break;
    		case 1: A.sort(); break;
    		case 2: {  
    			    A.average(); A.score_segment(); break;
    		        }
    		case 3: A.add_student(); break;
    		case 4: A.find_student(); break;
    		case 5: A.change_student(); break;
    		case 6: A.delete_student(); break;
    		case 7: A.exit_system(); break;
    		default:cout << "输入有误,请正确输入" << endl; break;
    		}
    		system("pause");
    		system("cls");
    		
    	}
    	return 0;
    }
    
    

    二、注意事项
    ○1当文件不存在时创建文件,并提示用户录入学生信息,并将录入的信息保存到文件中

    ○2当文件里面没有数据时让用户录入学生信息,并将录入的信息保存到文件中

    ○3文件存在且有数据时,将文件里数据读出来,用户可直接根据菜单进行功能体验,不必再输入一遍数据

    ○4功能0(展示从文件中读的原始数据或用户键入的原始数据)

    ○5功能1(展示按平均分排序后的学生信息及其排名)
    注:考虑有同学平均分相同的情况,如下的小刘和小张,均分均为86,并列排名第4名

    ○6功能2(展示各个课程的平均分及各个分数段人数)

    ○7功能3(添加学生)
    (1) 要添加学生的学号不是已经存在时

    (2) 要添加学生的学号已经存在时,提示用户输入有误,让用户重新输入

    检验:可见学生成功添加进去了

    ○8功能4(查找学生)
    (1) 当查找学生学号存在时
    (2)当查找的学生不存在时

    ○9功能5(修改学生信息)
    (1)修改后的学号未与已有学生(本身除外)的学号冲突

    (2) 修改后的学生学号与已有的学生冲突,提示用户输入错误,让其再次输入

    检验:可见大山的信息成功被修改

    ○10功能6(删除学生)
    (1)输入的学号存在

    (2)输入的学号不存在

    ○11功能7(退出系统)

    补:当用户的选择错误时提示用户正确输入选择

    更多相关内容
  • 学生成绩管理系统(基于文件的MFC) mfc学生成绩管理系统 C++学生成绩管理系统
  • 学生成绩管理系统C++

    2021-07-08 12:13:56
    系统实现学生成绩管理功能,可以对学生信息及成绩信息进行录入、修改、删除等。 本程序的基本功能包括: 1.增加、修改、删除一个学生及成绩信息。 2.显示学生成绩信息。 3.按条件显示学生资料(条件有学号、姓名等...
  • c++课程设计-学生成绩管理系统.rar
  • cout 添加学生信息-----------------" ; cout 删除学生信息-----------------" ; cout 修改学生信息-----------------" ; cout 查找学生信息-----------------" ; cout 显示学生信息-----------------" ; ...
  • 学生成绩管理系统 为了积分上传的 C++
  • 一套C++学生成绩管理系统源码,已在帮助刚入门C++的人员学习
  • 20121000290 边达宇 75 60 65 20121000424 王晨 85 95 96 20121000553 高佳维 86 93 90 20121000570 初国利 85 87 85 20121000584 利振彬 70 88 88 20121000818 孟珂 90 86 96 20121000921 罗云迪 86 90 75 ...
  • C++ 学生成绩管理系统

    2018-01-11 11:23:09
    C++ 学生成绩管理系统C++ 学生成绩管理系统C++ 学生成绩管理系统C++ 学生成绩管理系统
  • 学生成绩管理系统c++

    2010-06-22 15:23:22
    一个程序,运用c++写的一个成绩管理系统,有查询,管理等。
  • 新追加了读取文件功能、优化了部分代码
  • /*C语言成绩*/ int mgrade; /*数学成绩*/ int egrade; /*英语成绩*/ int total; /*总分*/ float ave; /*平均分*/ int mingci; /*名次*/ }; switch(select) { case 1:Add(l);break; /*增加学生记录*/ case 2:Del...
  • 学生成绩管理系统c++自己做的 完整版 学生成绩管理系统c++ 学生成绩管理系统c++
  • 学生成绩管理系统的实现,通过C++编程语言实现,可以添加、查询、擅长、更改学生成绩 ,可以继续录入学生信息。点击退出按钮后,退出录入界面。点击返回主界面按钮后,返回学生成绩管理系统的主界面。
  • 学生成绩管理系统 C++

    千次阅读 多人点赞 2019-01-06 17:08:35
    /******************************************.../*程序名:学生成绩管理系统 作者:SDUQER */ /*主要功能:添加删除修改排序; */ /*编制时间:2018年12月13日 */ /*************************...

    在这里插入图片描述

    /************************************************************/
    /*程序名:学生成绩管理系统	 作者:SDUQER   			                	*/
    /*主要功能:添加删除修改排序;								*/
    /*编制时间:2018年12月13日 									*/
    /************************************************************/
    
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <fstream>
    #include <iomanip>
    using namespace std;
    
    #define PUT puts("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&")
    
    int order; // 用户输入的指令
    
    struct Student {
        string Name;
        string Id;
        long long Idnum;
        double Math;
        double English;
        double Algorithm;
        double Sum;
        Student *nxt;
    };
    
    void ShowMenu() // 展示菜单
    {
    	system("Cls");
    	puts("                 **************************************");
    	puts("                          学生成绩管理系统v1.0         ");
    	puts("                 --------------------------------------");
    	puts("                        请输入您要操作的指令<0-6>:    ");
    	puts("                 --------------------------------------");
    	puts("                              1.录入学生信息           \n");
    	puts("                              2.所有学生信息           \n");
    	puts("                              3.修改学生信息           \n");
    	puts("                              4.删除学生信息           \n");
    	puts("                              5.查询学生信息           \n");
    	puts("                              6.成绩数据分析           \n");
    	puts("                              0.退出系统               ");
    	puts("                 **************************************");
    }
    
    void ExitSystem() // 退出系统
    {
        system("Cls");
    	puts("\n\n\n                 **************************************");
    	puts("                               感谢您的使用!          ");
    	puts("                 **************************************\n\n\n");
    	system("pause");
    	exit(0);
    }
    
    void InputError() // 输入错误
    {
    	puts("\n                 **************************************");
    	puts("                      您输入的指令有误,请重新输入。   ");
    	puts("                 **************************************\n");
    }
    
    //void update(Student *nw)
    //{
    //	cout << "EXM " <<endl;
    //	nw->Sum = nw->Math + nw->English + nw->Algorithm;
    //	return;
    //}
    
    void Add() // 录入
    {
    	system("Cls");
    	puts("                 **************************************");
    	puts("                                录入学生信息           ");
    	puts("                 --------------------------------------");
    	puts("                               请输入学生信息          ");
    	puts("                 **************************************\n");
    	char x = 'Y';
    	ofstream fout("data.txt",ios::app);
    	if(!fout)
    	{
    		puts("数据文件打开失败!");
    		system("pause");
    		exit(0);
    	}
    	Student *nw;
    	nw = new Student; 
    	while(x == 'Y' || x == 'y')
    	{
    		printf("请输入姓名:"); cin >> nw->Name;
    		printf("请输入学号:"); cin >> nw->Id;
    		printf("请输入数学成绩:"); cin >> nw->Math;
    		while(nw->Math < 0 || nw->Math > 100)
    		{
    			puts("您输入的数据不合法,提示[0-100],请重新输入");
    			cin >> nw->Math;
    		}
    		printf("请输入英语成绩:"); cin >> nw->English;
    		while(nw->English < 0 || nw->English > 100)
    		{
    			puts("您输入的数据不合法,提示[0-100],请重新输入");
    			cin >> nw->English;
    		}
    		printf("请输入计算导论成绩:"); cin >> nw->Algorithm;
    		while(nw->Algorithm < 0 || nw->Algorithm > 100)
    		{
    			puts("您输入的数据不合法,提示[0-100],请重新输入");
    			cin >> nw->Algorithm;
    		}
    		puts("");
    		nw->Sum = nw->Math + nw->English + nw->Algorithm;///
    		fout << nw->Name << " " << nw->Id << " " << nw->Math << " " << nw->English << " " << nw->Algorithm << " " 
    			<< nw->Sum << endl;///
    		printf("学生信息添加成功!\n"); 
    		
    		puts("是否继续添加?(Y/N)");
    		cin >> x;
    		puts("");
    	}
    	fout.close();
    	system("pause");
    }
    
    void Display() // 显示所有学生信息 
    {
    	ifstream fin("data.txt");
    	if(!fin)
    	{
    		puts("数据文件打开失败!");
    		system("pause");
    		exit(0);
    	}
    	
    	system("Cls");
    	puts("*******************************************************");
    	puts("                    所有学生信息           ");
    	puts("*******************************************************\n");
    	cout << "序号\t姓名\t学号\t数学成绩\t英语成绩\t算法导论成绩\t总分\n";
    	Student *nw;
    	nw = new Student;
    	int cnt = 0;
    	while(fin >> nw->Name >> nw->Id >> nw->Math >> nw->English >> nw->Algorithm >> nw->Sum)
    	{
    		cnt ++;
    		cout << left << setw(8) << cnt 
    			<< left << setw(8) << nw->Name 
    			<< left << setw(8) << nw->Id 
    			<< left << setw(16) << nw->Math 
    			<< left << setw(16) << nw->English 
    			<< left << setw(16) << nw->Algorithm 
    			<< nw->Sum 
    			<< endl;
    	}
    	fin.close();
    	puts("");
    	system("pause");
    }
    
    void Mend() // 修改
    {
    	char x = 'Y';
    	string tmp;
    	system("Cls");
    	puts("*******************************************************");
    	puts("                    修改学生信息           ");
    	puts("*******************************************************\n");
    	
    	while(x == 'Y' || x == 'y')
    	{	
    		ifstream fin("data.txt");
    		ofstream fout("data2.txt");
    		if(!fin)
    		{
    			puts("数据文件打开失败!");
    			system("pause");
    			exit(0);
    		}
    		if(!fout)
    		{
    			puts("临时数据文件打开失败!");
    			system("pause");
    			exit(0);
    		}
    		
    		puts("         请先按照以下关键字之一查找学生:");
    		puts("--------------------------------------");
    		puts("            1.姓名\n");
    		puts("            2.学号\n");
    		puts("            0.返回上一级菜单");
    		printf("指令:"); scanf("%d", &order);
    		while((order<0)||(order>2))
    		{
    			puts("");
    			InputError();		
    			puts("         请先按照以下关键字之一查找学生:");
    			puts("--------------------------------------");
    			puts("            1.姓名\n");
    			puts("            2.学号\n");
    			puts("            0.返回上一级菜单");
    			printf("指令:"); scanf("%d", &order);
    		}
    		
    		if(order == 0)
    			return;
    		
    		if(order == 1) printf("请输入姓名:"), cin >> tmp;
    		else if(order == 2) printf("请输入学号:"), cin >> tmp;
    		
    		Student *nw;
    		nw = new Student;
    		bool isFind = false;
    		while(fin >> nw->Name >> nw->Id >> nw->Math >> nw->English >> nw->Algorithm >> nw->Sum)
    		{
    			if((tmp.compare(nw->Name)) && (tmp.compare(nw->Id)))
    			{
    				fout << nw->Name << " " << nw->Id << " " << nw->Math << " " << nw->English << " " << nw->Algorithm << " "
    					<< nw->Sum << endl;
    				continue;
    			}
    			isFind = true;
    			
    			cout << "\n姓名\t学号\t数学成绩\t英语成绩\t算法导论成绩\t总分\n";
    			cout << left << setw(8) << nw->Name 
    				<< left << setw(8) << nw->Id 
    				<< left << setw(16) << nw->Math 
    				<< left << setw(16) << nw->English  
    				<< left << setw(16) << nw->Algorithm 
    				<< nw->Sum 
    				<< endl;
    			
    			system("Cls");
    			puts("\n         请选择要修改学生信息类型:");
    			puts("--------------------------------------");
    			puts("            1.姓名\n");
    			puts("            2.学号\n");
    			puts("            3.数学成绩\n");
    			puts("            4.英语成绩\n");
    			puts("            5.算法导论成绩\n");
    			puts("            0.返回上一级菜单");
    			printf("指令:"); scanf("%d", &order);
    			while((order<0)||(order>5))
    			{
    				puts("");
    				InputError();		
    				puts("\n         请选择要修改学生信息类型:");
    				puts("--------------------------------------");
    				puts("            1.姓名\n");
    				puts("            2.学号\n");
    				puts("            3.数学成绩\n");
    				puts("            4.英语成绩\n");
    				puts("            5.算法导论成绩\n");
    				puts("            0.返回上一级菜单");
    				printf("指令:"); scanf("%d", &order);
    			}
    		
    			if(order == 0)
    				return;
    			
    			if(order == 1)
    			{
    				string NewName;
    				printf("请输入新姓名:"); cin >> NewName;
    			
    				// 防止用户输入错误
    				printf("\n确认修改?(Y/N) "); cin >> x;
    				if(x == 'N' || x == 'n') 
    				{
    					puts("\n取消修改成功!");
    					fout << nw->Name << " " << nw->Id << " " << nw->Math << " " << nw->English << " " << nw->Algorithm << " "
    						<< nw->Sum << endl;
    				}
    				else {
    					fout << NewName << " " << nw->Id << " " << nw->Math << " " << nw->English << " " << nw->Algorithm << " "
    						<< nw->Sum << endl;
    					puts("\n数据修改成功!");
    				}
    			}
    			else if(order == 2)
    			{
    				string NewId;
    				printf("请输入新学号:"); cin >> NewId;
    			
    				// 防止用户输入错误
    				printf("\n确认修改?(Y/N) "); cin >> x;
    				if(x == 'N' || x == 'n') 
    				{
    					puts("\n取消修改成功!");
    					fout << nw->Name << " " << nw->Id << " " << nw->Math << " " << nw->English << " " << nw->Algorithm << " "
    						<< nw->Sum << endl;
    				}
    				else {
    					fout << nw->Name << " " << NewId << " " << nw->Math << " " << nw->English << " " << nw->Algorithm << " "
    						<< nw->Sum << endl;
    					puts("\n数据修改成功!");
    				}
    			}
    			else if(order == 3)
    			{
    				double NewMath;
    				printf("请输入新数学成绩:"); cin >> NewMath;
    				while(NewMath < 0 || NewMath > 100)
    				{
    					puts("您输入的数据不合法,提示[0-100],请重新输入");
    					cin >> NewMath;
    				}
    			
    				// 防止用户输入错误
    				printf("\n确认修改?(Y/N) "); cin >> x;
    				if(x == 'N' || x == 'n') 
    				{
    					puts("\n取消修改成功!");
    					fout << nw->Name << " " << nw->Id << " " << nw->Math << " " << nw->English << " " << nw->Algorithm << " "
    						<< nw->Sum << endl;
    				}
    				else {
    					nw->Sum = NewMath + nw->English + nw->Algorithm;
    					fout << nw->Name << " " << nw->Id << " " << NewMath << " " << nw->English << " " << nw->Algorithm << " "
    						<< nw->Sum << endl;
    					puts("\n数据修改成功!");
    				}
    			}
    			else if(order == 4)
    			{
    				double NewEng;
    				printf("请输入新英语成绩:"); cin >> NewEng;
    				while(NewEng < 0 || NewEng > 100)
    				{
    					puts("您输入的数据不合法,提示[0-100],请重新输入");
    					cin >> NewEng;
    				}
    			
    				// 防止用户输入错误
    				printf("\n确认修改?(Y/N) "); cin >> x;
    				if(x == 'N' || x == 'n') 
    				{
    					puts("\n取消修改成功!");
    					fout << nw->Name << " " << nw->Id << " " << nw->Math << " " << nw->English << " " << nw->Algorithm << " "
    						<< nw->Sum << endl;
    				}
    				else {
    					nw->Sum = nw->Math + NewEng + nw->Algorithm;
    					fout << nw->Name << " " << nw->Id << " " << nw->Math << " " << NewEng << " " << nw->Algorithm << " "
    						<< nw->Sum << endl;
    					puts("\n数据修改成功!");
    				}
    			}
    			else if(order == 5)
    			{
    				double NewAlgor;
    				printf("请输入新算法导论成绩:"); cin >> NewAlgor;
    				while(NewAlgor < 0 || NewAlgor > 100)
    				{
    					puts("您输入的数据不合法,提示[0-100],请重新输入");
    					cin >> NewAlgor;
    				}
    			
    				// 防止用户输入错误
    				printf("\n确认修改?(Y/N) "); cin >> x;
    				if(x == 'N' || x == 'n') 
    				{
    					puts("\n取消修改成功!");
    					fout << nw->Name << " " << nw->Id << " " << nw->Math << " " << nw->English << " " << nw->Algorithm << " "
    						<< nw->Sum << endl;
    				}
    				else {
    					nw->Sum = nw->Math + nw->English + NewAlgor;
    					fout << nw->Name << " " << nw->Id << " " << nw->Math << " " << nw->English << " " << NewAlgor << " "
    						<< nw->Sum << endl;
    					puts("\n数据修改成功!");
    				}
    			}
    		}
    		
    		if(!isFind)
    			puts("\n未找到该信息!");
    		
    		
    		fin.close();
    		fout.close();
    		
    		remove("data.txt");
    		rename("data2.txt","data.txt"); 
    		
    		puts("\n是否继续修改?(Y/N)");
    		cin >> x;
    		puts("");
    	}
    	
    	puts("");
    	system("pause");
    }
    
    void Delete() // 删除
    {
    	char x = 'Y';
    	string tmp;
    	system("Cls");
    	puts("*******************************************************");
    	puts("                    删除学生信息           ");
    	puts("*******************************************************\n");
    	
    	while(x == 'Y' || x == 'y')
    	{	
    		ifstream fin("data.txt");
    		ofstream fout("data2.txt");
    		if(!fin)
    		{
    			puts("数据文件打开失败!");
    			system("pause");
    			exit(0);
    		}
    		if(!fout)
    		{
    			puts("临时数据文件打开失败!");
    			system("pause");
    			exit(0);
    		}
    		
    		puts("         请选择要删除学生信息的关键字:");
    		puts("--------------------------------------");
    		puts("            1.姓名\n");
    		puts("            2.学号\n");
    		puts("            0.返回上一级菜单");
    		printf("指令:"); scanf("%d", &order);
    		while((order<0)||(order>2))
    		{
    			puts("");
    			InputError();
    			puts("         请选择要删除学生信息的关键字:");
    			puts("--------------------------------------");
    			puts("            1.姓名\n");
    			puts("            2.学号\n");
    			puts("            0.返回上一级菜单");
    			printf("指令:"); scanf("%d", &order);
    		}
    		
    		if(order == 0)
    			return;
    		
    		if(order == 1) printf("请输入姓名:"), cin >> tmp;
    		else if(order == 2) printf("请输入学号:"), cin >> tmp;
    		
    		Student *nw;
    		nw = new Student;
    		bool isFind = false;
    		while(fin >> nw->Name >> nw->Id >> nw->Math >> nw->English >> nw->Algorithm >> nw->Sum)
    		{
    			if((tmp.compare(nw->Name)) && (tmp.compare(nw->Id)))
    			{
    				fout << nw->Name << " " << nw->Id << " " << nw->Math << " " << nw->English << " " << nw->Algorithm << " "
    					<< nw->Sum << endl;
    				continue;
    			}
    			isFind = true;
    			
    			cout << "\n姓名\t学号\t数学成绩\t英语成绩\t算法导论成绩\t总分\n";
    			cout << left << setw(8) << nw->Name 
    				<< left << setw(8) << nw->Id 
    				<< left << setw(16) << nw->Math 
    				<< left << setw(16) << nw->English 
    				<< left << setw(16) << nw->Algorithm 
    				<< nw->Sum 
    				<< endl;
    			
    			// 防止用户输入错误
    			printf("\n确认删除?(Y/N) "); cin >> x;
    			if(x == 'N' || x == 'n') 
    			{
    				puts("\n取消删除成功!");
    				fout << nw->Name << " " << nw->Id << " " << nw->Math << " " << nw->English << " " << nw->Algorithm << " "
    					<< nw->Sum << endl;
    				continue; 
    			}
    			puts("\n数据删除成功!");
    		}
    		
    		if(!isFind)
    			puts("\n未找到该信息!");
    		
    		
    		fin.close();
    		fout.close();
    		
    		remove("data.txt");
    		rename("data2.txt","data.txt"); 
    		
    		puts("\n是否继续删除?(Y/N)");
    		cin >> x;
    		puts("");
    	}
    	
    	puts("");
    	system("pause");
    }
    
    void Query() // 查询
    {
    	char x = 'Y';
    	string tmp;
    	system("Cls");
    	puts("*******************************************************");
    	puts("                    查询学生信息           ");
    	puts("*******************************************************\n");
    	
    	while(x == 'Y' || x == 'y')
    	{	
    		ifstream fin("data.txt");
    		if(!fin)
    		{
    			puts("数据文件打开失败!");
    			system("pause");
    			exit(0);
    		}
    		
    		puts("                  请选择查询方式:");
    		puts("--------------------------------------");
    		puts("                  1.姓名\n");
    		puts("                  2.学号\n");
    		puts("                  3.返回上一级菜单");
    		printf("指令:"); scanf("%d", &order);
    		while((order<1)||(order>3))
    		{
    			puts("");
    			InputError();
    			puts("                  请选择查询方式:");
    			puts("--------------------------------------");
    			puts("                  1.姓名\n");
    			puts("                  2.学号\n");
    			puts("                  3.返回上一级菜单");
    			printf("指令:"); scanf("%d", &order);
    		}
    		
    		if(order == 3)
    			return;
    		
    		if(order == 1) printf("请输入要查询的姓名:"), cin >> tmp;
    		else if(order == 2) printf("请输入要查询的学号:"), cin >> tmp;
    		Student *nw;
    		nw = new Student;
    		bool isFind = false;
    		int cnt = 0;
    		while(fin >> nw->Name >> nw->Id >> nw->Math >> nw->English >> nw->Algorithm >> nw->Sum)
    		{
    			if(order == 1)
    			{
    				if(!nw->Name.compare(tmp))
    				{
    					if(!isFind)
    						cout << "\n序号\t姓名\t学号\t数学成绩\t英语成绩\t算法导论成绩\t总分\n";
    					isFind = true;
    					cnt ++;
    					cout << left << setw(8) << cnt 
    						<< left << setw(8) << nw->Name 
    						<< left << setw(8) << nw->Id 
    						<< left << setw(16) << nw->Math 
    						<< left << setw(16) << nw->English 
    						<< left << setw(16) << nw->Algorithm 
    						<< nw->Sum 
    						<< endl; 
    				}
    			}
    			else if(order == 2)
    			{
    				if(!nw->Id.compare(tmp))
    				{
    					if(!isFind)
    						cout << "\n序号\t姓名\t学号\t数学成绩\t英语成绩\t算法导论成绩\t总分\n";
    					isFind = true;
    					cnt ++;
    					cout << left << setw(8) << cnt 
    						<< left << setw(8) << nw->Name 
    						<< left << setw(8) << nw->Id 
    						<< left << setw(16) << nw->Math 
    						<< left << setw(16) << nw->English 
    						<< left << setw(16) << nw->Algorithm 
    						<< nw->Sum 
    						<< endl; 
    				}
    			}
    		}
    		if(!isFind)
    			puts("\n未找到该信息!");
    		fin.close();
    		puts("\n是否继续查询?(Y/N)");
    		cin >> x;
    		puts("");
    	}
    	
    	puts("");
    	system("pause");
    }
    
    void Sort_Tongji() // 统计分数区间 
    {
    	
    	char x = 'Y';
    	string tmp;
    	system("Cls");
    	puts("*******************************************************");
    	puts("                    统计学生信息           ");
    	puts("*******************************************************\n");
    	
    	double l, r; 
    	while(x == 'Y' || x == 'y')
    	{	
    		ifstream fin("data.txt");
    		if(!fin)
    		{
    			puts("数据文件打开失败!");
    			system("pause");
    			exit(0);
    		}
    		
    		system("Cls");
    		puts("                  请选择需要统计的科目:");
    		puts("--------------------------------------");
    		puts("                  1.数学\n");
    		puts("                  2.英语\n");
    		puts("                  3.算法导论\n");
    		puts("                  0.返回上一级菜单");
    		printf("指令:"); scanf("%d", &order);
    		if(order == 0)
    			return;
    		puts("请输入两个数字代表要统计的区间,如60 100:");
    		cin >> l >> r;
    		while((order<0)||(order>3))
    		{
    			puts("");
    			InputError();
    			puts("                  请选择需要统计的科目:");
    			puts("--------------------------------------");
    			puts("                  1.数学\n");
    			puts("                  2.英语\n");
    			puts("                  3.算法导论\n");
    			puts("                  0.返回上一级菜单");
    			printf("指令:"); scanf("%d", &order);
    			if(order == 0)
    				return;
    			puts("请输入两个数字代表要统计的区间,如60 100:");
    			cin >> l >> r;
    		}
    		
    		if(order == 0)
    			return;
    		
    		Student *Head = NULL, *nw;
    		nw = new Student;
    		int cnt = 0;
    		while(fin >> nw->Name >> nw->Id >> nw->Math >> nw->English >> nw->Algorithm >> nw->Sum)
    		{
    			if(order == 1 && nw->Math >= l && nw->Math <= r)
    			{
    				cnt ++;
    				nw->nxt = NULL;
    					//空 
    				if(Head == NULL)
    				{
    					Head = nw;
    					nw = new Student;
    					continue;
    				}
    					//第一个就更da
    				if(Head->Math <= nw->Math)
    				{
    					nw->nxt = Head;
    					Head = nw;
    					nw = new Student;
    					continue;
    				}
    					// 开始找
    				Student *lst = Head, *p = Head->nxt; // lst 是p 的上一个
    				while(p != NULL)
    				{
    					if(nw->Idnum < p->Idnum)
    					{
    						lst = p;
    						p = p->nxt;
    					}
    					else // 找到了要插入的这个刚好不大于的点,这个点位于 r,q之间 
    						break;
    				}
    				// 执行完之后 p->Id >= nw->id, lst->Id <= nw->Id 
    				nw->nxt = p;
    				lst->nxt = nw;
    	
    				nw = new Student;
    			}
    			else if(order == 2 && nw->English >= l && nw->English <= r)
    			{
    				cnt ++;
    			//	Insert(Head, nw);
    				nw->nxt = NULL;
    					//空 
    				if(Head == NULL)
    				{
    					Head = nw;
    					nw = new Student;
    					continue;
    				}
    					//第一个就更da
    				if(Head->English <= nw->English)
    				{
    					nw->nxt = Head;
    					Head = nw;
    					nw = new Student;
    					continue;
    				}
    					// 开始找
    				Student *lst = Head, *p = Head->nxt; // lst 是p 的上一个
    				while(p != NULL)
    				{
    					if(nw->English < p->English)
    					{
    						lst = p;
    						p = p->nxt;
    					}
    					else // 找到了要插入的这个刚好不大于的点,这个点位于 r,q之间 
    						break;
    				}
    				nw->nxt = p;
    				lst->nxt = nw;
    	
    				nw = new Student;
    			}
    			else if(order == 3 && nw->Algorithm >= l && nw->Algorithm <= r)
    			{
    				cnt ++;
    				nw->nxt = NULL;
    					//空 
    				if(Head == NULL)
    				{
    					Head = nw;
    					nw = new Student;
    					continue;
    				}
    					//第一个就更da
    				if(Head->Algorithm <= nw->Algorithm)
    				{
    					nw->nxt = Head;
    					Head = nw;
    					nw = new Student;
    					continue;
    				}
    					// 开始找
    				Student *lst = Head, *p = Head->nxt; // lst 是 p 的上一个
    				while(p != NULL)
    				{
    					if(nw->Algorithm < p->Algorithm)
    					{
    						lst = p;
    						p = p->nxt;
    					}
    					else // 找到了要插入的这个刚好不大于的点,这个点位于 r,q之间
    						break;
    				}
    				// 执行完之后 p->Id >= nw->id, lst->Id <= nw->Id 
    				nw->nxt = p;
    				lst->nxt = nw;
    	
    				nw = new Student;
    			}
    			
    		}
    		
    		//print
    		system("Cls");
    		Student *rs = Head;
    		puts("*******************************************************");
    		if(order == 1)
    		{
    			puts("              统计学生信息-----数学        ");
    			cout << "           分数段" << l << "~" << r << "的总人数为 " << cnt << endl;
    		}
    		else if(order == 2)
    		{
    			puts("              统计学生信息-----英语        ");
    			cout << "           分数段" << l << "~" << r << "的总人数为 " << cnt << endl;
    		}
    		else if(order == 3)
    		{
    			puts("              统计学生信息-----算法导论        ");
    			cout << "           分数段" << l << "~" << r << "的总人数为 " << cnt << endl;
    		}
    		puts("*******************************************************\n"); 
    		cout << "\n序号\t姓名\t学号\t数学成绩\t英语成绩\t算法导论成绩\t总分\n";
    		cnt = 0;
    		while(rs != NULL)
    		{
    			cnt ++;
    			cout << left << setw(8) << cnt 
    				<< left << setw(8) << rs->Name 
    				<< left << setw(8) << rs->Id 
    				<< left << setw(16) << rs->Math 
    				<< left << setw(16) << rs->English 
    				<< left << setw(16) << rs->Algorithm 
    				<< rs->Sum 
    				<< endl;
    			rs = rs->nxt;
    		}
    		//*******************************************************
    		
    		fin.close();
    		puts("\n是否继续统计?(Y/N)");
    		cin >> x;
    		puts("");
    	}
    	
    	puts("");
    	system("pause");
    }
    
    
    void Sort_fenxi() // 统计分数
    {
    	
    	char x = 'Y';
    	string tmp;
    	system("Cls");
    	puts("*******************************************************");
    	puts("                    分析成绩信息           ");
    	puts("*******************************************************\n");
    	
    	while(x == 'Y' || x == 'y')
    	{	
    		ifstream fin("data.txt");
    		if(!fin)
    		{
    			puts("数据文件打开失败!");
    			system("pause");
    			exit(0);
    		}
    		
    		system("Cls");
    		puts("                  请选择需要分析的科目:");
    		puts("--------------------------------------");
    		puts("                  1.数学\n");
    		puts("                  2.英语\n");
    		puts("                  3.算法导论\n");
    		puts("                  4.自由选择分数区段\n");
    		puts("                  0.返回上一级菜单");
    		printf("指令:"); scanf("%d", &order);
    		while((order<0)||(order>4))
    		{
    			puts("");
    			InputError();
    			puts("                  请选择需要统计的科目:");
    			puts("--------------------------------------");
    			puts("                  1.数学\n");
    			puts("                  2.英语\n");
    			puts("                  3.算法导论\n");
    			puts("                  4.自由选择分数区段\n");
    			puts("                  0.返回上一级菜单");
    			printf("指令:"); scanf("%d", &order);
    		}
    		
    		if(order == 0)
    			return;
    		if(order == 4)
    		{
    			Sort_Tongji();
    			return;
    		}
    		
    		Student *Head = NULL, *nw;
    		nw = new Student;
    		int cnt = 0, Math_60 = 0, Math_90 = 0, English_60 = 0, English_90 = 0, Algorithm_60 = 0, Algorithm_90 = 0;
    		double Math_Max = 0, English_Max = 0, Algorithm_Max = 0;
    		double Math_Min = 100, English_Min = 100, Algorithm_Min = 100;
    		double Math_average = 0, English_average = 0, Algorithm_average = 0;
    		while(fin >> nw->Name >> nw->Id >> nw->Math >> nw->English >> nw->Algorithm >> nw->Sum)
    		{
    			cnt ++;
    			Math_60 += (int)(nw->Math>=60); Math_90 += (int)(nw->Math>=90);
    			English_60 += (int)(nw->English>=60); English_90 += (int)(nw->English>=90);
    			Algorithm_60 += (int)(nw->Algorithm>=60); Algorithm_90 += (int)(nw->Algorithm>=90);
    			
    			Math_Min = min(Math_Min, nw->Math);
    			English_Min = min(English_Min, nw->English);
    			Algorithm_Min = min(Algorithm_Min, nw->Algorithm);
    			
    			Math_Max = max(Math_Max, nw->Math);
    			English_Max = max(English_Max, nw->English);
    			Algorithm_Max = max(Algorithm_Max, nw->Algorithm);
    			
    			Math_average += nw->Math;
    			English_average += nw->English; 
    			Algorithm_average += nw->Algorithm;
    		}
    		
    		Math_average /= (double)cnt;
    		English_average /= (double)cnt;
    		Algorithm_average /= (double)cnt;
    		
    		//print
    		system("Cls");
    		Student *rs = Head;
    		puts("*******************************************************");
    		if(order == 1)
    		{
    			puts("              分析学科信息-----数学        ");
    			puts("*******************************************************\n"); 
    			cout << "       最高分 : " << Math_Max << endl << endl; 
    			cout << "       最低分 : " << Math_Min << endl << endl;
    			cout << "       平均分 : " << Math_average << endl << endl; 
    			cout << "         极差 : " << Math_Max-Math_Min << endl << endl;
    			cout << "及格人数(>60) : " << Math_60 << endl << endl;
    			cout << "       及格率 : " << ((double)Math_60/(double)cnt)*100.0 << "%" << endl << endl;
    			cout << "优秀人数(>90) : " << Math_90 << endl << endl;
    			cout << "       优秀率 : " << ((double)Math_90/(double)cnt)*100.0 << "%" << endl << endl;
    		}
    		else if(order == 2)
    		{
    			puts("              分析学科信息-----英语        ");
    			puts("*******************************************************\n"); 
    			cout << "       最高分 : " << English_Max << endl << endl; 
    			cout << "       最低分 : " << English_Min << endl << endl;
    			cout << "       平均分 : " << English_average << endl << endl; 
    			cout << "         极差 : " << English_Max-English_Min << endl << endl;
    			cout << "及格人数(>60) : " << English_60 << endl << endl;
    			cout << "       及格率 : " << ((double)English_60/(double)cnt)*100.0 << "%" << endl << endl;
    			cout << "优秀人数(>90) : " << English_90 << endl << endl;
    			cout << "       优秀率 : " << ((double)English_90/(double)cnt)*100.0 << "%" << endl << endl;
    		}
    		else if(order == 3)
    		{
    			puts("              分析学科信息-----算法导论        ");
    			puts("*******************************************************\n"); 
    		//	cout << Algorithm_Max << " " << Algorithm_Min << endl;
    			cout << "       最高分 : " << Algorithm_Max << endl << endl; 
    			cout << "       最低分 : " << Algorithm_Min << endl << endl;
    			cout << "       平均分 : " << Algorithm_average << endl << endl; 
    			cout << "         极差 : " << Algorithm_Max-Algorithm_Min << endl << endl;
    			cout << "及格人数(>60) : " << Algorithm_60 << endl << endl;
    			cout << "       及格率 : " << ((double)Algorithm_60/(double)cnt)*100.0 << "%" << endl << endl;
    			cout << "优秀人数(>90) : " << Math_90 << endl << endl;
    			cout << "       优秀率 : " << ((double)Algorithm_90/(double)cnt)*100.0 << "%" << endl << endl;
    		}
    		//*******************************************************
    		
    		fin.close();
    		puts("\n是否继续分析?(Y/N)");
    		cin >> x;
    		puts("");
    	}
    	
    	puts("");
    	system("pause");
    }
    
    void Sort() // 数据分析 
    {
    	
    	char x = 'Y';
    	string tmp;
    	system("Cls");
    	puts("*******************************************************");
    	puts("                    分析学生信息           ");
    	puts("*******************************************************\n");
    	
    	while(x == 'Y' || x == 'y')
    	{	
    		ifstream fin("data.txt");
    		if(!fin)
    		{
    			puts("数据文件打开失败!");
    			system("pause");
    			exit(0);
    		}
    		
    		system("Cls");
    		puts("                  请选择分析方式:");
    		puts("--------------------------------------");
    		puts("                  1.学号从小到大\n");
    		puts("                  2.数学成绩从大到小\n");
    		puts("                  3.英语成绩从大到小\n");
    		puts("                  4.算法导论成绩从大到小\n");
    		puts("                  5.总成绩从大到小\n");
    		puts("                  6.查看各科合格率、优秀率等分析数据\n");
    		puts("                  0.返回上一级菜单");
    		printf("指令:"); scanf("%d", &order);
    		while((order<0)||(order>6))
    		{
    			puts("");
    			InputError();
    			puts("                  请选择分析方式:");
    			puts("--------------------------------------");
    			puts("                  1.学号从小到大\n");
    			puts("                  2.数学成绩从大到小\n");
    			puts("                  3.英语成绩从大到小\n");
    			puts("                  4.算法导论成绩从大到小\n");
    			puts("                  5.总成绩从大到小\n");
    			puts("                  6.查看各科合格率、优秀率等分析数据\n");
    			puts("                  0.返回上一级菜单");
    			printf("指令:"); scanf("%d", &order);
    		}
    		
    //		cout << "!@#^*()" << order << endl;
    		
    		if(order == 0)
    		{
    //			cout << "EXM" <<endl; 
    			return;
    		} 
    		if(order == 6)
    		{
    			Sort_fenxi();
    			Sort();
    			return;
    		}
    		
    		Student *Head = NULL, *nw;
    		nw = new Student;
    		// Insert;
    		while(fin >> nw->Name >> nw->Id >> nw->Math >> nw->English >> nw->Algorithm >> nw->Sum)
    		{
    			if(order == 1)
    			{
    				int len = nw->Id.length();
    				nw->Idnum = 0;
    				for(int i = 0; i < len; ++ i)
    				{
    					nw->Idnum += (long long)(nw->Id[i]-'0');
    					nw->Idnum *= 10;
    				}
    				nw->Idnum /= 10;
    			}
    			nw->nxt = NULL;
    				//空 
    			if(Head == NULL)
    			{
    				Head = nw;
    				nw = new Student;
    				continue;
    			}
    				//第一个就更小 
    			if(order == 1 && Head->Idnum >= nw->Idnum)
    			{
    			//	cout << Head->Idnum << " " << nw->Idnum << endl;
    				nw->nxt = Head;
    				Head = nw;
    				nw = new Student;
    				continue;
    			}
    				//第一个就更da
    			if(order == 2 && Head->Math <= nw->Math)
    			{
    				nw->nxt = Head;
    				Head = nw;
    				nw = new Student;
    				continue;
    			}
    				//第一个就更da
    			if(order == 3 && Head->English <= nw->English)
    			{
    				nw->nxt = Head;
    				Head = nw;
    				nw = new Student;
    				continue;
    			}
    				//第一个就更da
    			if(order == 4 && Head->Algorithm <= nw->Algorithm)
    			{
    				nw->nxt = Head;
    				Head = nw;
    				nw = new Student;
    				continue;
    			}
    				//第一个就更da
    			if(order == 5 && Head->Sum <= nw->Sum)
    			{
    				nw->nxt = Head;
    				Head = nw;
    				nw = new Student;
    				continue;
    			}
    				// 开始找
    			Student *lst = Head, *p = Head->nxt; // lst 是p 的上一个
    			while(p != NULL)
    			{
    				if(order == 1)
    				{
    					if(nw->Idnum > p->Idnum)
    					{
    						lst = p;
    						p = p->nxt;
    					}
    					else // 找到了要插入的这个刚好不大于的点,这个点位于 r,q之间 
    						break;
    				}
    				else if(order == 2)
    				{
    					if(nw->Math < p->Math)
    					{
    						lst = p;
    						p = p->nxt;
    					}
    					else // 找到了要插入的这个刚好不大于的点,这个点位于 r,q之间 
    						break;
    				}
    				else if(order == 3)
    				{
    					if(nw->English < p->English)
    					{
    						lst = p;
    						p = p->nxt;
    					}
    					else // 找到了要插入的这个刚好不大于的点,这个点位于 r,q之间 
    						break;
    				}
    				else if(order == 4)
    				{
    					if(nw->Algorithm < p->Algorithm)
    					{
    						lst = p;
    						p = p->nxt;
    					}
    					else // 找到了要插入的这个刚好不大于的点,这个点位于 r,q之间 
    						break;
    				}
    				else if(order == 5)
    				{
    					if(nw->Sum < p->Sum)
    					{
    						lst = p;
    						p = p->nxt;
    					}
    					else // 找到了要插入的这个刚好不大于的点,这个点位于 r,q之间 
    						break;
    				}
    			}
    			// 执行完之后 p->Id >= nw->id, lst->Id <= nw->Id 
    			nw->nxt = p;
    			lst->nxt = nw;
    
    			nw = new Student;
    		}
    		
    		//print
    		system("Cls");
    		Student *r = Head;
    		puts("*******************************************************");
    		if(order == 1)
    			puts("              分析学生信息-----学号从小到大        ");
    		else if(order == 2)
    			puts("              分析学生信息-----数学成绩从大到小    ");
    		else if(order == 3)
    			puts("              分析学生信息-----英语成绩从大到小    ");
    		else if(order == 4)
    			puts("              分析学生信息-----算法导论成绩从大到小");
    		else if(order == 5)
    			puts("              分析学生信息-----总成绩从大到小");
    		puts("*******************************************************\n"); 
    		cout << "\n序号\t姓名\t学号\t数学成绩\t英语成绩\t算法导论成绩\t总分\n";
    		int cnt = 0; 
    		while(r != NULL)
    		{
    			cnt ++;
    			cout << left << setw(8) << cnt 
    				<< left << setw(8) << r->Name 
    				<< left << setw(8) << r->Id 
    				<< left << setw(16) << r->Math 
    				<< left << setw(16) << r->English 
    				<< left << setw(16) << r->Algorithm 
    				<< r->Sum 
    				<< endl;
    			r = r->nxt;
    		}
    		//*******************************************************
    		
    		fin.close();
    		puts("\n是否继续查看?(Y/N)");
    		cin >> x;
    		puts("");
    	}
    	
    	puts("");
    	system("pause");
    }
    
    void MenuOrderAction() // 执行命令
    {
    	if(order == 1) {
    		Add();
    	}
    	else if(order == 2){
    		Display();
    	}
    	else if(order == 3){
    		Mend();
    	}
    	else if(order == 4){
    		Delete();
    	}
    	else if(order == 5){
    		Query();
    	}
    	else if(order == 6){
    		Sort();
    	}
    	else if(order == 0){
    		ExitSystem();
    	}
    //	cout << "ahha" << endl;
    }
    
    int main()
    {
    	while(1)
    	{
    	 	ShowMenu();
    		printf("指令:"); scanf("%d", &order);
    		while((order<0)||(order>6))
    		{
    			ShowMenu();
    			InputError();
    			printf("指令:"); scanf("%d", &order);
    		}
    		MenuOrderAction();
    	}
    	return 0;
    }
    
    
    展开全文
  • 学生成绩管理系统C++
  • 学生成绩管理系统C++实现代码

    千次阅读 2021-05-21 18:18:15
    本文实例为大家分享了C++学生成绩管理系统的具体代码,供大家参考,具体内容如下* (程序头部注释开始)* 程序的版权和版本声明部分* Copyright (c) 2011, 烟台大学计算机学院学生* All rights reserved.* 文件名称: ...

    本文实例为大家分享了C++学生成绩管理系统的具体代码,供大家参考,具体内容如下

    * (程序头部注释开始)

    * 程序的版权和版本声明部分

    * Copyright (c) 2011, 烟台大学计算机学院学生

    * All rights reserved.

    * 文件名称: 《C++编写 学生成绩管理系统》

    * 作 者: 刘江波

    * 完成日期: 2012 年 6 月 26 日

    * 版 本 号: v.626

    * 对任务及求解方法的描述部分

    * 问题描述:

    用C++编写一个学生成绩管理系统

    1、可以实现以下功能:

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    2、用链表存储信息

    * 程序头部的注释结束

    */

    # include

    # include

    # include

    #include //用getch();

    using namespace std;

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    class Student

    {

    public:

    char name[20];

    char Id[20];

    int Cnum; //C++课程得分

    int Mnum; //汇编课程得分

    int Enum; //嵌入式操作系统课程得分

    int sum; //总分

    Student * Next;

    void Input()

    {

    cout<>name;

    cout<>Id;

    cout<>Cnum;

    cout<>Mnum;

    cout<>Enum;

    sum=Cnum+Mnum+Enum;

    }

    void ReadFile(istream & in)

    {

    in>>name>>Id>>Cnum>>Mnum>>Enum>>sum;

    }

    void Show()

    {

    cout<

    <

    }

    };

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    class Studentmassage

    {

    public:

    Studentmassage();

    ~Studentmassage();

    void ShowMenu();

    void Find();

    void Save();

    void ModifyItem();

    void RemoveItem();

    void Swap(Student *,Student *);

    void Sort();

    //void Unpass();

    int ListCount();

    //void Average();

    void Display()

    {

    for(Student * p=Head->Next;p!=End;p=p->Next)

    p->Show();

    cout<

    getch();

    }

    void AddItem()

    {

    End->Input();

    End->Next=new Student;

    End=End->Next;

    cout<

    cout<

    getch();

    }

    private:

    Student * Head,* End;

    ifstream in;

    ofstream out;

    Student *FindItem(char * name)

    {

    for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空

    if(!strcmp(p->Next->name,name))return p;

    return NULL;

    }

    Student *FindID(char * Id)

    {

    for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空

    if(!strcmp(p->Next->Id,Id))return p;

    return NULL;

    }

    };

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    Studentmassage::Studentmassage()

    {

    Head=new Student;

    Head->Next=new Student;

    End=Head->Next;

    in.open("sort.txt");

    if(!in)

    cout<

    else

    {

    while(!in.eof())

    {

    End->ReadFile(in);

    if(End->name[0]=='\0')break;

    End->Next=new Student;

    End=End->Next;

    }

    in.close();

    cout<

    }

    }

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    Studentmassage::~Studentmassage()

    {

    Save();

    for(Student * temp;Head->Next!=End;)

    {

    temp=Head->Next;

    Head->Next=Head->Next->Next;

    delete temp;

    }

    delete Head,End;

    }

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    void Studentmassage::ShowMenu()

    {

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    cout<

    }

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    void Studentmassage::Find()

    {

    char name[20] ,Id[10];

    int x;

    Student * p=NULL;

    cout<

    cout<

    cout<

    cin>>x;

    switch(x)

    {

    case 1:{cout<>name;

    if(p=FindItem(name))

    {

    p->Next->Show();

    cout<

    getch();

    }

    else

    {

    cout<

    cout<

    getch();

    }

    }break;

    case 2:

    {

    cout<>Id;

    if(p=FindID(Id))

    {

    p->Next->Show();

    cout<

    getch();

    }

    else

    {

    cout<

    cout<

    getch();

    }

    }break;

    }

    }

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    void Studentmassage::ModifyItem() //修改信息

    {

    char name[20];

    Student * p=NULL;

    cout<>name;

    if(p=FindItem(name))

    {

    cout<

    p->Next->Input();

    cout<

    cout<

    getch();

    }

    else

    {

    cout<

    cout<

    getch();

    }

    }

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    void Studentmassage::RemoveItem() // 删除信息

    {

    char name[20];

    Student * p=NULL,*temp=NULL;

    cout<>name;

    if(p=FindItem(name))

    {

    temp=p->Next;

    p->Next=p->Next->Next;

    delete temp;

    cout<

    cout<

    getch();

    }

    else

    {

    cout<

    cout<

    getch();

    }

    }

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    void Studentmassage::Swap(Student *p1, Student *p2)//交换两个combox变量的数据域

    {

    Student *temp=new Student;

    strcpy(temp->name,p1->name);

    strcpy(temp->Id,p1->Id);

    temp->Cnum=p1->Cnum;

    temp->Mnum=p1->Mnum;

    temp->Enum=p1->Enum;

    temp->sum=p1->sum;

    strcpy(p1->name,p2->name);

    strcpy(p1->Id,p2->Id);

    p1->Cnum=p2->Cnum;

    p1->Mnum=p2->Mnum;

    p1->Enum=p2->Enum;

    p1->sum=p2->sum;

    strcpy(p2->name,temp->name);

    strcpy(p2->Id,temp->Id);

    p2->Cnum=temp->Cnum;

    p2->Mnum=temp->Mnum;

    p2->Enum=temp->Enum;

    p2->sum=temp->sum;

    }

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    int Studentmassage::ListCount()//统计当前链表的记录总数,返回一个整数

    {

    if(! Head)

    return 0;

    int n=0;

    for(Student * p=Head->Next;p!=End;p=p->Next)

    {

    n++;

    }

    return n;

    }

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    void Studentmassage::Sort()//对当前链表进行排序

    {

    cout <

    Student *p=NULL,*p1=NULL,*k=NULL;

    int n=Studentmassage::ListCount();

    if(n<2)

    return;

    for(p=Head->Next;p!=End;p=p->Next)

    for(k=p->Next;k!=End;k=k->Next)

    {

    if(p->sum>k->sum)

    {

    Studentmassage::Swap(p,k);

    }

    }

    cout <

    getch();

    return;

    }

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    void Studentmassage::Save()

    {

    out.open("sort.txt");

    for(Student *p=Head->Next;p!=End;p=p->Next)

    out<name<Id<Cnum<

    <Mnum<Enum<sum<

    out.close();

    }

    //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

    int main()

    {

    int x,i=0;

    bool quit=false;

    cout<

    for(i=0;i<3;i++)

    cout<

    cout<

    for(i=0;i<3;i++)

    cout<

    cout<

    Studentmassage Grade;

    cout<

    getch();

    while(!quit)

    {

    system("cls");

    Grade.ShowMenu();

    cin>>x;

    switch(x)

    {

    case 0:quit=true;break;

    case 1:Grade.AddItem();break;

    case 2:Grade.Display();break;

    case 3:Grade.Sort();break;

    case 4:Grade.Find();break;

    case 5:Grade.RemoveItem();break;

    case 6:Grade.ModifyItem();break;

    }

    }

    return 0;

    }

    174bdbb4de3d4b87fba2960c140485ce.png

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 计算机基础强化训练任务书 初始条件 理论学完计算机基础知识掌握 C++语言编程基础和 VC开发平台的使用 实践计算机科学系实验中心提供计算机及软件开发环境 要求完成的主要任务 : 1系统需求分析得到系统的数据需求和...
  • 学生成绩管理系统C++程序设计
  • C++学生成绩管理系统

    2018-08-02 15:25:06
    大一时写的学生成绩管理系统,有兴趣的同学可以参考一下.课设的同学用得上.
  • 个人课程设计报告书(内含源码) 内含4个类,各自具有其属性和行为。 基本实现了: (1)学生基本信息、考试科目及成绩的信息录入...对学生成绩进行统计(包括最高分,最低分,排序,平均成绩,及格率和需要补考的学生)
  • 学生成绩管理系统C++编程实验报告.doc
  • mfc界面,实现查询、排序、增加、删除、绘图功能
  • 学生成绩管理系统C++语言高级程序设计

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,818
精华内容 5,927
关键字:

学生成绩管理系统c++

c++ 订阅