学生成绩管理系统

1、项目简介

该项目为《C/C++程序设计》课程设计,具体要求如下:

学生成绩管理系统内容

  • 主菜单模块

该模块主要用来实现整个系统的流程。主界面提供用户选择并调用各个子模块。

  • 输入模块

当初次使用系统时,学生信息需要从键盘逐个输入。学生信息由学生的学号、姓名、性别、高等数学、英语、计算机和平均成绩等信息构成。

  • 查询模块

用户可以按照学生的学号或姓名进行查找。若查找到该学生的相关信息记录,则输出相关信息,否则提示未找到。

  • 更新模块

主要完成对学生信息的维护。包括增加记录、删除记录、修改成绩。当完成更新记录后,需要将修改的数据存入数据文件中。

  • 排序模块

根据键盘输入的升序或降序选择按平均成绩对学生记录进行排序,并输出排序后的结果。

  • 统计模块

            统计各个分数段的人数及不及格人数。

  • 输出模块

将学生信息显示在屏幕上,并根据键盘输入的选择,如“是否保存到文件?(Y/N)”,可以将学生信息写入文件中。

2、设计思路

首先定义了学生结构体Student,然后以Student为类型创建数组,后续各个模块的设计,都将学生数组的首地址作为参数传入,进行相关设计。

1.输入模块:

主要功能用来对学生基本信息(姓名,学号,性别)和成绩进行输入。在初次使用学生信息管理系统时,用户需逐个输入学生信息。在准确输入学生信息后,就可以将学生信息保存在学生数组中。学生信息输入成功后,系统会提示是否继续进行操作,如果想继续输入学生成绩就输入 yes ,不想再输入学生成绩的话就输入no 输入no之后,系统返同到主菜单。

主要设计思路:通过用户键盘输入直接向数组输入的各个数据,在输入时,我们对数组保存数据是否达到最大值进行了判断,学号作为学生唯一标识符,我们对用户输入学号是否重复进行判断,以及对用户输入的成绩是否有效进行判断,提高了程序的健壮性。

 

2.输出模块:

主要功能用来对学生的基本信息和成绩进行输出。在数组已经录入了学生信息的前提下,使用该功能可以显示所有学生的信息。具体包括学生的学号、姓名、性别、高等数学、英语、计算机和平均成绩。在屏幕打印输出学生信息后,系统会提示用户是否将学生信息保存在文件中(是否保存到文件?(Y/N),用户可通过选择进行相应操作

主要设计思路:通过对数组的遍历,将学生信息按照一定的格式打印输出在屏幕上。写入文件的思路:首先定义文件指针,后通过fprintf函数按一定格式将学生信息输出到文件。

 

3.查询模块

主要功能是用来查找学生信息。在数组保存学生信息的前提下,通过输入学号或者姓名进行查找,若查找到,系统就会显示该学生基本信息和各科成绩。

主要设计思路:

  • 通过学号进行查询:

通过while循环进行判断,让输入的学号与数组中存放的学号进行比较(数组下标从0开始),若相等则退出while循环,此时的数组下标即为所查询学号在数组中存放的位置,后通过cout将学生信息输出到屏幕上。

  • 通过姓名进行查询:

姓名存在同名情况,所以我组用for循环从0到数组元素个数进行遍历,只要数组中储存的姓名与所查询姓名相同,就将该学生信息输出。

  • 通过学号的模糊查询:

如果用户只记得学号的几位数,则可通过学号模糊查询,查找到学生信息。我们小组主要通过strstr()函数进行字串的匹配,若匹配成功,则输出该学生信息。 (说明:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。)

 

4.排序模块:

主要功能:是通过对学生成绩的平均成绩的比较进行排序,并将排序结果打印输出到屏幕上

主要设计思路:通过直接插入排序,按照学生平均成绩对数组进行排序

 

5.统计模块:

主要功能:统计各个分数段的人数及不及格人数,并将统计结果输出

主要设计思路:通过定义一系列整形变量,这些变量起到计数功能。后通过for语句对数组的遍历,在for语句内设置多个if语句用于判断成绩区间,相应的变量做自增的操作,实现对各个分数段人数的统计功能。

 

6.更新模块:

主要功能:学生信息的维护。包括增加记录、删除记录、修改成绩。

主要设计思路:

  • 增加学生信息:

首先统计学生数组中的个数,将统计的个数作为数组下标,后通过用户键盘输入实现增加学生信息

  • 删除记录:

通过学号删除:

首先通过while循环找到所输入学号在数组中存放的位置,后通过for语句让该位置后面覆盖所需删除学生信息位置的数据。

通过姓名删除:

存在同名情况,我们小组首先通过for语句进行遍历,设置一个整形变量flag,若查找到一个姓名与输入姓名相同,则flag++,并用变量pos记录与查找姓名相同姓名的数组下标,若flag等于1,说明没有同名情况,删除方法与学号删除方法类似,若flag大于1,说明存在同名情况,则提示用户需通过学号进行删除

  • 修改成绩:

通过学号修改,通过姓名修改设计思想与删除设计思想类似,只不过删除是找到位置后将该位置后的数据依次覆盖前一次数据,而修改则是找到位置后,系统提示用户重新输入学生成绩。

3、项目成果

项目展示录屏

 

4、代码

代码运行很简单,创建一个cpp文件就可以了。(将下面代码赋值到你创建的.cpp文件)

71dfc387c6724b25b9fcfe85b3d8cf7d.png

#include<iostream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
const int MAXSIZE=100;          //学生信息管理系统最多存放的数据个数
using namespace std;

//定义学生结构体
struct Student{
	string num;         //学号
	string name;       //姓名
    char sex[10];       //性别
	float math;         //高等数学
	float english;      //英语
	float computer;     //计算机
	float average;      //平均成绩
};


//函数声明
int  Count(Student stu[]);                        //统计人数
char  menu();                                     //菜单模块
void Input(Student stu[]);                        //输入模块
void inputStudent(Student stu[],int size);
void findStudentNum(Student stu[]);               //查询模块,通过学号查找
void findStudentName(Student stu[]);              //查询模块,通过姓名查找
void findNclear(Student stu[]);                   //学号的模糊查找
void additionStudentInformation(Student stu[]) ;  //更新模块——增加
void Delete(Student stu[]);                       //更新模块——删除
void modifyStudentInformation(Student stu[]);     //更新模块——修改
void upOrder(Student stu[]);                      //排序模块
void downOrder(Student stu[]);
void Statistic(Student stu[]);                    //统计模块
void printStudentInformation(Student stu[]);      //输出模块 
void print(Student stu[]);
void wfile(Student stu[]);                        //写入文件           


//统计人数
int Count(Student stu[]){
	int count=0;
	for (int i = 0; i <MAXSIZE; i++)    //统计有多少学生数据
	{
	   if(stu[i].num!="0") 
		   count++;
	}	
	return count;
}

//菜单模块
char  menu() {
	char c;
	do {
		cout << "******************************************************" << endl;
		cout << "    *          【1】查询学生成绩                 *    " << endl;
		cout << "    *          【2】增加学生成绩                 *    " << endl;
		cout << "    *          【3】删除学生成绩                 *    " << endl;
		cout << "    *          【4】修改学生成绩                 *    " << endl;
		cout << "    *          【5】各个分数段的人数及不及格人数 *    " << endl;
		cout << "    *          【6】按平均分排列                 *    " << endl;
		cout << "    *          【7】显示学生成绩                 *    " << endl;
		cout << "    *          【0】退出管理系统                 *    " << endl;
		cout << "******************************************************" << endl;
		cout << "请选择您的操作 (0-7):" << endl;
		cin>>c;
	} while (c < '0' || c > '7');       //输入数字是否有效
	return c;
}

void  inputStudent(Student stu[],int size){
       int j = size;
	   if(j>=MAXSIZE){
		   cout<<"当前人数已满,无法插入新的学生信息"<<endl;
		   return;
	   }
	    int flag;                   //成绩输入是否有效标志
	    //输入学号
	a:	cout << "学号:";
         cin >>stu[j].num;
		 for(int i=0;i<=j-1;i++){
			 if((stu[i].num.compare(stu[j].num)==0))
			 {
			   cout<<"学号重复,请重新输入"<<endl;
			   goto a;
			 }
		 }
		//输入姓名
		cout << "姓名:";
		cin >> stu[j].name;
		//输入性别
		cout << "性别:";
		cin>>stu[j].sex;
        //高等数学成绩输入
		do {
			flag = 0;
			cout << "高等数学成绩:";
			while(!(cin >> stu[j].math))                     //输入数据与定义不匹配
			{
				cout<<"======>>    提示:对不起,这是无效数字"<<endl;
				cin.clear();                               //清除错误标记
				cout << "请重新输入高等数学成绩:";
				while(cin.get()!='\n'){
					continue;
				}
			}
			if (stu[j].math > 100 || stu[j].math < 0) {
				cout << "对不起,请输入1-100之间的数字!!\n";
			}
			else {
				flag = 1;
			}
		} while (flag == 0);
		//英语成绩输入
		do {
			flag = 0;
			cout << "大学英语成绩:";
			while(!(cin >> stu[j].english))                     //输入数据与定义不匹配
			{
				cout<<"======>>    提示:对不起,这是无效数字"<<endl;
				cin.clear();                               //清除错误标记
				cout << "请重新输入大学英语成绩:";
				while(cin.get()!='\n'){
				continue;
				}
			}

			if (stu[j].english > 100 || stu[j].english < 0) {
				cout << "对不起,请输入1-100之间的数字!!\n";
			}
			else {
				flag = 1;
			}
		} while (flag == 0);
		//计算机成绩输入
		do {
			flag = 0;
			cout << "计算机成绩:";
			while(!(cin >> stu[j].computer))                     //输入数据与定义不匹配
			{
				cout<<"======>>    提示:对不起,这是无效数字"<<endl;
				cin.clear();                                    //清除错误标记
				cout << "请重新输入计算机成绩:";
				while(cin.get()!='\n'){
					continue;
				}
			
			}
			if (stu[j].computer > 100 || stu[j].computer< 0) {
				cout << "对不起,请输入1-100之间的数字!!\n";
			}
			else {
				flag = 1;
			}
			} while (flag == 0);
		   //平均分计算
		    stu[j].average = (stu[j].math + stu[j].english+ stu[j].computer)/3;
		    cout << "平均分为:" << stu[j].average<<endl;
    }

//输入模块
void Input(Student stu[]){
	    int j=0;
	    string sign="0";
	    cout << endl<<"======>>    请输入学生成绩    <<======"<<endl;
	    while (sign != "no" && sign != "NO") {
	    inputStudent(stu,j);
	  	cout << "======>>    提示:是否继续写入学生成绩 ?(yes/no)";
		cin >> sign;	
		j++;
	  }
}

//查询模块,通过学号查找
void findStudentNum(Student stu[]){
	  int countstudent=Count(stu);     //统计学生数量
	  string xuehao;         
	  cout << endl << "======>>    查找学生成绩    <<======" << endl;
	  cout << "请输入要查找学生的学号:";
loop: int i = 0;
	  cin >> xuehao;                             //输入查找学号
	 while ((stu[i].num.compare(xuehao)!=0) && i<countstudent)i++;
	 if (i==countstudent){
		cout << "======>>    对不起,无法找到该学生......    <<======" << endl;
		cout << "======>> 请重新输入要查找学生的学号:<<======";
		goto  loop;
	}
	else {
	cout << endl << "======>>   所查询学生成绩表    <<======\n" << endl;
	cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
	cout << "学号" << "\t\t" << "姓名" << "\t" << "性别" << "\t" << "高等数学" << "\t"  << "大学英语" << "\t" << "计算机" << "\t"   <<"平均成绩" << "\t" <<endl;
	cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
	cout << stu[i].num << "\t" << stu[i].name << "\t" <<stu[i].sex<< "\t" << stu[i].math << "\t\t" <<stu[i].english<< "\t\t" <<stu[i].computer <<"\t"<<stu[i].average<<endl;
}
}

//通过姓名查找
void findStudentName(Student stu[]) {
	  string name;
	  int i=0;
	  cout << endl << "======>>    查找学生成绩    <<======" << endl;
	  cout << "请输入要查找学生的姓名:";
	  cin >> name;                             //输入查找姓名
	  int flag=0;
	  int countstudent=Count(stu);            //计算人数
      cout << endl << "======>>   所查询学生成绩表    <<======\n" << endl;
      cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
	  cout << "学号" << "\t\t" << "姓名" << "\t" << "性别" << "\t" << "高等数学" << "\t"  << "大学英语" << "\t" << "计算机" << "\t"   <<"平均成绩" << "\t" <<endl;
	  for(i=0;i<countstudent;i++){
	  if(stu[i].name.compare(name)==0){
	cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
	cout << stu[i].num << "\t" << stu[i].name << "\t" <<stu[i].sex<< "\t" << stu[i].math << "\t\t" <<stu[i].english<< "\t\t" <<stu[i].computer <<"\t"<<stu[i].average<<endl;
	flag=1;
		  }
	 }
	  if(flag==0)cout << "======>>    对不起,无法找到该学生......    <<======" << endl;
}

//学号的模糊查找
void findNclear(Student stu[]){
	int flag=0;
	char a[20];
	cout<<"请输入学号关键词:";
	cin>>a;
	int count=Count(stu);
	cout << endl << "======>>   所查询学生成绩表    <<======\n" << endl;
    cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
    cout << "学号" << "\t\t" << "姓名" << "\t" << "性别" << "\t" << "高等数学" << "\t"  << "大学英语" << "\t" << "计算机" << "\t"   <<"平均成绩" << "\t" <<endl;
	for(int i=0;i<count;i++){
		char temp[20];
		strcpy_s(temp,stu[i].num.c_str());                   //c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同
		if(strstr(temp,a)!=nullptr){                        //strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
	     cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
	     cout << stu[i].num << "\t" << stu[i].name << "\t" <<stu[i].sex<< "\t" << stu[i].math << "\t\t" <<stu[i].english<< "\t\t" <<stu[i].computer <<"\t"<<stu[i].average<<endl;
		 flag=1;
		}
	}
	if(flag==0)cout<<"模糊查找失败"<<endl;
}

//输出板块
void printStudentInformation(Student stu[]) {
	int countstudent=Count(stu);
	if(countstudent==0){
		cout<<"当前记录为空" << endl;
		return;
	}
	cout << endl << "======>>    学生成绩表    <<======\n" << endl;
	cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
	cout << "学号" << "\t\t" << "姓名" << "\t" << "性别" << "\t" << "高等数学" << "\t"  << "大学英语" << "\t" << "计算机" << "\t"   <<"平均成绩" << "\t" <<endl;
	cout << "---------------------------------------------------------------------------------------------------------------------" << endl;

	
    string sign = "0";         //用于判断用户是否保存文件

	//打印输出
	for (int i = 0; i <countstudent; i++)
	cout << stu[i].num << "\t" << stu[i].name << "\t" <<stu[i].sex<< "\t" << stu[i].math << "\t\t" <<stu[i].english<< "\t\t" <<stu[i].computer <<"\t"<<stu[i].average<<endl;
	cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
    cout<<"是否保存到文件?(Y/N)";
	cin>>sign;
	if(sign=="Y"||sign=="y")  wfile(stu);  
}

void print(Student stu[]){
	cout << endl << "======>>    学生成绩表    <<======\n" << endl;
	cout << "---------------------------------------------------------------------------------------------------------------------" << endl;
	cout << "学号" << "\t\t" << "姓名" << "\t" << "性别" << "\t" << "高等数学" << "\t"  << "大学英语" << "\t" << "计算机" << "\t"   <<"平均成绩" << "\t" <<endl;
	cout << "---------------------------------------------------------------------------------------------------------------------" << endl;

	int countstudent=Count(stu);
	//打印输出
	for (int i = 0; i <countstudent; i++)
	cout << stu[i].num << "\t" << stu[i].name << "\t" <<stu[i].sex<< "\t" << stu[i].math << "\t\t" <<stu[i].english<< "\t\t" <<stu[i].computer <<"\t"<<stu[i].average<<endl;

}

//更新模块——增加
void additionStudentInformation(Student stu[]) {

	
      int countstudent=Count(stu);
	  string sign = "0";         //用于判断用户是否继续增加学生信息
	  cout << endl << "=======>>    增加学生成绩    <<========" << endl;
	  while (sign != "no" && sign != "NO") {
		inputStudent(stu,countstudent);
		wfile(stu);     
	   	cout << "======>>    提示:是否继续增加学生成绩 ?(yes/no)";
		cin >> sign;
	   countstudent++;	
	  } 		  
}
 
//更新模块——删除
void Delete(Student stu[]) {
	string  xuehao;                     //定义查询学号
	string  name;
	int i = 0,j,choice,pos;            //choice——用户选择,pos——位置

	int countstudent=Count(stu);
	cout << endl << "======>>    删除学生成绩    <<======" << endl;
	cout<<"1.通过学号删除"<<endl;
	cout<<"2.通过姓名删除"<<endl;
	cin>>choice;
	if(choice==1){
	cout << "请输入要删除的学生的学号:";
	cin >> xuehao;
	while ((stu[i].num!= xuehao && i <countstudent))   i++;
	if (i == countstudent) {
		cout << "======>>    对不起,无法找到该学生......    <<======" << endl;
	}
	else { 
		for (j = i; j <countstudent - 1; j++) {
			stu[j]=stu[j+1];
		}              
		stu[j].num="0";                 //防止重复输出,而且也是通过学号是否为0判断人数
		wfile(stu);
		cout << "======>>    提示:已成功删除!" << endl;
	}
     	}
	if(choice==2){
	cout << "请输入要删除的学生的姓名:";
	cin >>name;
	int flag=0;
	for(i=0;i<countstudent;i++)
	{
		if(stu[i].name==name)
		{
			flag++;
		    pos=i;
		}
	}
	if (flag==0) {
		cout << "======>>    对不起,无法找到该学生......    <<======" << endl;
	}
	else if(flag==1){ 
		for (j = pos; j <countstudent - 1; j++) {
			stu[j]=stu[j+1];
		}              
		stu[j].num="0";                 //防止重复输出,而且也是通过学号是否为0判断人数
		wfile(stu);
		cout << "======>>    提示:已成功删除!" << endl;
	}
	else if(flag>1){
		cout<<"存在同名情况,请通过学号进行删除,以下学号学生姓名相同:"<<endl;
		for(i=0;i<countstudent;i++)
	{
		if(stu[i].name==name)
		{
		cout<<stu[i].num<<endl;
		}
	}
	
	}	
	
	}
}
 
//更新模块——修改
void modifyStudentInformation(Student stu[]) {
	string s,name;
	int i = 0,choice;
	cout << endl << "======>>    修改学生成绩    <<======" << endl;
	cout<<"1.通过学号修改"<<endl;
	cout<<"2.通过姓名修改"<<endl;
	cin>>choice;
	if(choice==1){
	cout << "请输入要修改成绩学生的学号:";
	cin >> s;                                           //输入学号

	int countstudent=Count(stu);//统计有多少学生数据
    int flag;                   //成绩输入是否有效标志

	while ((stu[i].num!=s && i < countstudent))i++;
	if (i == countstudent) {
		cout << "======>>    对不起,无法找到该学生......    <<======" << endl;
	}
	else {
		cout << endl << "请重新输入该学生成绩: " << endl;
		//高等数学成绩输入
		do {
			flag = 0;
			cout << "高等数学成绩:";
			while(!(cin >> stu[i].math))                     //输入数据与定义不匹配
			{
				cout<<"======>>    提示:对不起,这是无效数字"<<endl;
				cin.clear();                               //清除错误标记
				cout << "请重新输入高等数学成绩:";
				while(cin.get()!='\n'){
					continue;
				}
			}
			if (stu[i].math > 100 || stu[i].math < 0) {
				cout << "对不起,请输入1-100之间的数字!!\n";
			}
			else {
				flag = 1;
			}
		} while (flag == 0);
		//英语成绩输入
		do {
			flag = 0;
			cout << "大学英语成绩:";
			while(!(cin >> stu[i].english))                     //输入数据与定义不匹配
			{
				cout<<"======>>    提示:对不起,这是无效数字"<<endl;
				cin.clear();                               //清除错误标记
				cout << "请重新输入大学英语成绩:";
				while(cin.get()!='\n'){
				continue;
				}
			}

			if (stu[i].english > 100 || stu[i].english < 0) {
				cout << "对不起,请输入1-100之间的数字!!\n";
			}
			else {
				flag = 1;
			}
		} while (flag == 0);
		//计算机成绩输入
		do {
			flag = 0;
			cout << "计算机成绩:";
			while(!(cin >> stu[i].computer))                     //输入数据与定义不匹配
			{
				cout<<"======>>    提示:对不起,这是无效数字"<<endl;
				cin.clear();                                    //清除错误标记
				cout << "请重新输入计算机成绩:";
				while(cin.get()!='\n'){
					continue;
				}
			
			}
			if (stu[i].computer > 100 || stu[i].computer< 0) {
				cout << "对不起,请输入1-100之间的数字!!\n";
			}
			else {
				flag = 1;
			}
			} while (flag == 0);
		   //平均分计算
		    stu[i].average = (stu[i].math + stu[i].english+ stu[i].computer)/3;
		    cout << "平均分为:" << stu[i].average<<endl;
			wfile(stu);
}
	
}
	if(choice==2){
	cout << "请输入要修改成绩学生的姓名:";
	cin >> name;                                           //输入姓名

	int countstudent=Count(stu);//统计有多少学生数据
    int flag;                   //成绩输入是否有效标志

	int flag1=0,pos;

	for(i=0;i<countstudent;i++)
	{
		if(stu[i].name==name)
		{
			flag1++;
		    pos=i;
		}
	}
	if (flag1==0) {
		cout << "======>>    对不起,无法找到该学生......    <<======" << endl;
	}
	else if(flag1==1){ 
	   cout << endl << "请重新输入该学生成绩: " << endl;
		//高等数学成绩输入
		do {
			flag = 0;
			cout << "高等数学成绩:";
			while(!(cin >> stu[pos].math))                     //输入数据与定义不匹配
			{
				cout<<"======>>    提示:对不起,这是无效数字"<<endl;
				cin.clear();                               //清除错误标记
				cout << "请重新输入高等数学成绩:";
				while(cin.get()!='\n'){
					continue;
				}
			}
			if (stu[pos].math > 100 || stu[pos].math < 0) {
				cout << "对不起,请输入1-100之间的数字!!\n";
			}
			else {
				flag = 1;
			}
		} while (flag == 0);
		//英语成绩输入
		do {
			flag = 0;
			cout << "大学英语成绩:";
			while(!(cin >> stu[pos].english))                     //输入数据与定义不匹配
			{
				cout<<"======>>    提示:对不起,这是无效数字"<<endl;
				cin.clear();                               //清除错误标记
				cout << "请重新输入大学英语成绩:";
				while(cin.get()!='\n'){
				continue;
				}
			}

			if (stu[pos].english > 100 || stu[pos].english < 0) {
				cout << "对不起,请输入1-100之间的数字!!\n";
			}
			else {
				flag = 1;
			}
		} while (flag == 0);
		//计算机成绩输入
		do {
			flag = 0;
			cout << "计算机成绩:";
			while(!(cin >> stu[pos].computer))                     //输入数据与定义不匹配
			{
				cout<<"======>>    提示:对不起,这是无效数字"<<endl;
				cin.clear();                                    //清除错误标记
				cout << "请重新输入计算机成绩:";
				while(cin.get()!='\n'){
					continue;
				}
			
			}
			if (stu[pos].computer > 100 || stu[pos].computer< 0) {
				cout << "对不起,请输入1-100之间的数字!!\n";
			}
			else {
				flag = 1;
			}
			} while (flag == 0);
		   //平均分计算
		    stu[pos].average = (stu[pos].math + stu[pos].english+ stu[pos].computer)/3;
		    cout << "平均分为:" << stu[pos].average<<endl;
			wfile(stu);
	}
	
	else if(flag1>1)
	{
	cout<<"存在同名情况,请通过学号进行修改,以下学号学生姓名相同:"<<endl;
		for(i=0;i<countstudent;i++){
		if(stu[i].name==name)
		{
		cout<<stu[i].num<<endl;
		}
}
	}		
	
}
	}

//排序模块——升序
void upOrder(Student stu[])
{   
	    int size=Count(stu);
		int i,j;
		Student temp1;
		for(i=1;i<size;i++)
		{
		  temp1=stu[i];
		  for(j=i-1;j>=0&&temp1.average<stu[j].average;j--)
			 stu[j+1]=stu[j];
		  stu[j+1]=temp1;
		}
}

//排序模块——降序
void downOrder(Student stu[])
{   
	    int size=Count(stu);
		int i,j;
		Student temp;
		for(i=1;i<size;i++)
		{
		  temp=stu[i];
		  for(j=i-1;j>=0&&temp.average>stu[j].average;j--)
			 stu[j+1]=stu[j];
		  stu[j+1]=temp;
		}
}

//统计模块
void Statistic(Student stu[]) {
	cout << endl << "======>>    输出学生统计数据    <<======\n" << endl;
	cout << "-----------------------------------------------------------------------------" << endl;
	int count1=0;                      //统计不及格人数
	int count11=0;                     //统计60~80分段人数(不包含80)
	int count12=0;                     //统计80~100分段人数
	int count2=0;
	int count21=0;
	int count22=0;
	int count3=0;
	int count31=0;
	int count32=0;
	int size=Count(stu);//统计有多少学生数据
	for (int i = 0; i < size; i++)
	{
	    if(stu[i].math<60)     count1++;
		if(stu[i].english<60)  count2++;            //统计各科不及格人数
	    if(stu[i].computer<60) count3++;

		if(stu[i].math>=60&&stu[i].math<80)       count11++;
		if(stu[i].english>=60&&stu[i].english<80)    count21++;             //统计60~80分段人数(不包含80)
	    if(stu[i].computer>=60&&stu[i].computer<80)   count31++;

		if(stu[i].math>=80&&stu[i].math<=100)              count12++;
		if(stu[i].english>=80&&stu[i].english<=100)        count22++;            //统计80~100分段人数
	    if(stu[i].computer>=80&&stu[i].computer<=100)      count32++;
	}
	cout<<"                   当前学生信息如下                        "<<endl;
	print(stu);	
	cout<<endl;
	cout <<"                             高等数学" << "        大学英语"<< "         计算机" << endl;
	cout << "-----------------------------------------------------------------------------" << endl;
	cout<<"不及格人数           ";
	cout <<"\t\t"<< count1 << "\t\t" <<count2 << "\t\t" <<count3<<endl;
	cout<<"60~80分段人数(不含80)";
	cout <<"\t\t"<<count11 << "\t\t" << count21<< "\t\t" << count31 << endl;
	cout<<"80~100分段人数       ";
	cout <<"\t\t"<<count12++<< "\t\t" << count22++ << "\t\t" << count32++ <<endl;
	cout << "-----------------------------------------------------------------------------" << endl;
}
 //将学生信息写入文件
void wfile(Student stu[])                                                 //将学生的记录信息写入文件
{ 
    FILE *file;                                                          //定义文件指针
	int size=Count(stu);                                                           //统计有多少学生数据
    if((file=fopen("C:\\Users\\86183\\Desktop\\学生成绩信息.txt","wt"))==nullptr)
    {
        cout<<"文件打开失败"<<endl;                                   //文件打开失败的处理      
        exit(0);                                                      //退出程序
    }
	for(int i=0;i<size;i++)
	{
	char c[20];
	char a[20];
	strcpy_s(c,stu[i].num.c_str());
	strcpy_s(a,stu[i].name.c_str());
	fprintf(file,"%s\t%s\t%s\t%4.2f\t%4.2f\t%4.2f\t%4.2f\n",c,a,stu[i].sex,stu[i].math,stu[i].english,stu[i].computer,stu[i].average);
	}
	fclose(file);         //%4.2f表示打印结果有效位为4位,小数点两位
}


int main(){
	Student stu[MAXSIZE];
	for(int i=0;i<MAXSIZE;i++)                                           
	stu[i].num="0";
	
	string sortchoice;            //排序选择
	cout << "--------------------------------欢迎使用学生成绩管理系统-------------------------------" << endl;
	cout<<endl;
	cout<<"-----------------------------初次使用系统时,应逐个输入学生信息---------------"<<endl;
	Input(stu);
	for(;;){
		switch(menu()) {
			case '1':
				int flag;
				cout<<"请输入选择(1-3)"<<endl;
				cout<<"1.按学号查找"<<endl;
				cout<<"2.按姓名查找"<<endl;
				cout<<"3.学号的模糊查找"<<endl;
				cin>>flag;
				if(flag==1)findStudentNum(stu);
				if(flag==2)findStudentName(stu);
				if(flag==3)findNclear(stu);
				system("pause");
				system("cls");
				break;
			case '2':
				additionStudentInformation(stu);
				system("pause");
				system("cls");
				break;
			case '3':
				Delete(stu);
				system("pause");
				system("cls");
				break;
			case '4':
				modifyStudentInformation(stu);
				system("pause");
				system("cls");
				break;
			case '5':
				Statistic(stu);
				system("pause");
				system("cls");
				break;
			case '6':
				cout<<"选择按平均成绩升序排列(up)还是降序排列(down)(输入up或者down):";
				cin>>sortchoice;
				if(sortchoice=="up")
				{
				downOrder(stu);
				upOrder(stu);
				cout<<"升序成绩信息如下:"<<endl;
				print(stu);	
				}
				else 
				{
				downOrder(stu);
				cout<<"降序成绩信息如下:"<<endl;
				print(stu);
				}
				system("pause");
				system("cls");
				break;
			case '7':
				printStudentInformation(stu);
				system("pause");
				system("cls");
				break;
			case '0':
				cout << endl << "================感谢您使用学生成绩管理系统==============\n" << endl;
				exit(0);
				break;
		}
	}
	return 0;
}

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_60434562

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值