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

📄 xscj.cpp

📁 学生成绩管理系统功能简介 a. 查询指定学号学生成绩记录。 b. 按平均分顺序插入一个新的学生成绩。 c. 删除指定学号学生记录。 d. 修改指定学号学生成绩记录。 e. 在屏幕上输出所
💻 CPP
字号:
 //*********************************************************************************************
// *******学生成绩管理系统************************ 
#include<iostream>
#include<fstream>
#include<cstring>
#include<iomanip>

using namespace std;

struct Student
   {
	   char class_x[21];
	   char num[7];
       char name[9];
	   float elec;
	   float c_prog;
	   float media;
	   float eng;
	   float math;
	   float sport;
	   float polity;
	   float ave;
	   int order;
   };

void  Create(istream &,Student &);        //输入学生信息
float Statistic(Student);                 //计算平均成绩
void  Sort();                             //按平均分对学生成绩记录项进行降序排序
int   Lookup(char []);                    //查询指定学号学生成绩记录
void  Modify(int);                        //修改指定学号学生成绩记录
void  Delete(int);                        //删除指定学号学生记录
void  Insert();                           //按平均分顺序插入新记录
void  Order();                            //为已排好序的student[]的成员顺序赋值
void  Equal(Student &,Student &);         //为前一位学生赋予后一位学生的一切信息
void  Print(Student, ostream);            //打印学生信息

const int MAX=100;
Student student[MAX];
int numstu=0;

int main()
{   
	cout<<"*******************************************************************************"<<endl;
	cout<<setw(50)<<"欢迎进入学生成绩管理系统\n\n\n";
	cout<<"请确定数据输入的途径:1、文件输入。2、键盘输入。"<<endl;
	char inway;
	cin>>inway;                               //用户选择输入方式

	int ordstu;
	ifstream infile;
	switch(inway)
	{
	case '1':
		ordstu=0;
		infile.open("GradeInput.txt");
		if(!infile)
		{
			cout<<"文件打开失败,程序结束。请检查文件后再试。"<<endl;    //I/O错误提示
			return 1;
		}
		
		while( !infile.eof() )                         //按文件结束为标志控制循环
		{
            Create(infile,student[ordstu]);
			ordstu++;
			numstu++;
		}   
		infile.close();
		numstu--;                                      //排除循环干扰,调整学生人数至准确值                             
		Sort();
		cout<<"输入完成。"<<endl<<endl;
		break;
	case '2':
		int innum;
		cout<<"请输入学生个数:"<<endl;
		cin>>innum;
		cout<<"请输入学生资料(按人数依次输入):"<<endl;
		
		cout<<"班级  "<<setw(14)<<"学号  "<<setw(8)<<"姓名  "<<setw(5)<<"电子"
				<<setw(5)<<"C++"<<setw(7)<<"多媒体"<<setw(5)<<"英语"<<setw(5)<<"高数"
				<<setw(5)<<"体育"<<setw(5)<<"政治"<<endl;
		for(int x=0;x<innum;x++)
		{
			Create(cin,student[x]);              // 调用Create函数,不断创建新的学生信息
			numstu++;
		}
		Sort();
		cout<<"\n输入完成."<<endl;
		break;
	}

	while(1)
	{
		cout<<"\n接下来要进行的操作是:"<<endl
			<<"1、查询指定学号学生成绩记录。"<<endl
			<<"2、按平均分顺序插入一个新的学生成绩。"<<endl
			<<"3、删除指定学号学生记录。"<<endl
			<<"4、修改指定学号学生成绩记录。"<<endl
			<<"5、在屏幕上输出所有学生的成绩。"<<endl
			<<"6、将学生成绩输出到文件。"<<endl
			<<"7、结束程序。"<<endl<<endl;
		char opr;
		cin>>opr;                                // 用户选择指令

		char id[20];
		int order;
		ofstream outfile;
		int x,y;

		switch(opr)
		{
		case '1':
			cout<<"\n请输入学生的学号(六位):"<<endl;
			cin>>id;
			order=Lookup(id);                   //调用有返回值函数Lookup
			if(order==-1)
			{
				cout<<"\n无此学号的学生。"<<endl;
				break;
			}
			cout<<"\n该学生的资料为:"<<endl;
			
			cout<<"\n班级  "<<setw(14)<<"学号  "<<setw(8)<<"姓名  "<<setw(5)<<"电子"
				<<setw(5)<<"C++"<<setw(7)<<"多媒体"<<setw(5)<<"英语"<<setw(5)<<"高数"
				<<setw(5)<<"体育"<<setw(5)<<"政治"<<setw(9)<<"平均成绩"<<setw(5)<<"名次"
				<<endl;		
			Print(student[order],cout);
			break;

		case '2':
			cout<<"\n请输入该学生资料:"<<endl;
			cout<<"\n班级  "<<setw(12)<<"学号  "<<setw(8)<<"姓名  "<<setw(7)<<"电子"
				<<setw(7)<<"C++"<<setw(9)<<"多媒体"<<setw(7)<<"英语"<<setw(7)<<"高数"
				<<setw(7)<<"体育"<<setw(7)<<"政治"<<endl;			
			Insert();                                   // 调用插入函数
			cout<<"\n插入完成。"<<endl;
			break;

		case '3':
			cout<<"\n请输入要删除的学生纪录的学号(六位):"<<endl;
			cin>>id;
			order=Lookup(id);
			if(order==-1)
			{
				cout<<"\n无此学号的学生。"<<endl;
				break;
			}
			Delete(order);
			cout<<"\n删除完成。"<<endl;
			break;

		case'4':
			cout<<"\n请输入要修改的学生纪录的学号(六位):"<<endl;
			cin>>id;
			order=Lookup(id);
			if(order==-1)
			{
				cout<<"\n无此学号的学生。"<<endl;
				break;
			}
			cout<<"\n请输入新的资料:"<<endl;
			
			cout<<"\n班级  "<<setw(14)<<"学号  "<<setw(8)<<"姓名  "<<setw(5)<<"电子"
				<<setw(5)<<"C++"<<setw(7)<<"多媒体"<<setw(5)<<"英语"<<setw(5)<<"高数"
				<<setw(5)<<"体育"<<setw(5)<<"政治"<<endl;
			Modify(order);
			cout<<"\n修改完成。"<<endl;
			break;
	
		case '5':
			cout<<"\n班级  "<<setw(14)<<"学号  "<<setw(8)<<"姓名  "<<setw(5)<<"电子"
				<<setw(5)<<"C++"<<setw(7)<<"多媒体"<<setw(5)<<"英语"<<setw(5)<<"高数"
				<<setw(5)<<"体育"<<setw(5)<<"政治"<<setw(9)<<"平均成绩"<<setw(5)<<"名次"
				<<endl;
			Sort();
			for( x=0;x<numstu;x++)
			{   
				Print(student[x],cout);
			}
			break;

		case '6':
			outfile.open("GradeOutput.txt");                // 初始化输出文件
			Sort();
			for( y=0;y<numstu;y++)
			{   
				Print(student[y],outfile);
			}
			cout<<"\n文件输出完成。"<<endl;
			break;

		case '7':
			cout<<"\n程序结束...\n\n"<<"谢谢使用!\n\n";
			return 0;

        default:   cout<<"非法输入,请重试!\n";
		}
		cout<<endl;
	}
	return 0;
	}
	
//*********************************************************************************************
void Create(istream & in,Student & student)
{
	
	in>>student.class_x>>student.num>>student.name>>student.elec>>student.c_prog>>student.media
		>>student.eng>>student.math>>student.sport>>student.polity;
	
}
//*********************************************************************************************
float Statistic(Student student)
{
	float aver;
	aver=(student.elec+student.c_prog+student.media+student.eng   
		  +student.math+student.sport+student.polity)/7.0;            //求平均分
	aver=float(int(aver*1000+0.5))/1000;                //四舍五入并保留三位小数
	return aver;
}
//*********************************************************************************************
void Sort()
{ 
	Student temp;                          // 创建Student型临时变量
	temp.class_x[21]=0;                   
	temp.num[7]=0;
	temp.name[9]=0;
	temp.elec=0;
	temp.c_prog=0;
	temp.media=0;                          // 初始化临时变量temp
	temp.eng=0;
	temp.math=0;
	temp.sport=0;
	temp.polity=0;
    temp.ave=0;
	temp.order=0;                          
		
	for(int n=0;n<numstu;n++)               // 扫描每个学生信息
	{
		for(int m=0;m<numstu-1;m++)         // 将当前学生信息与之前每个学生信息进行比较 
		{
			if( Statistic(student[m])<Statistic(student[m+1]) )
			{
				Equal(temp,student[m]);
				Equal(student[m],student[m+1]);     //将student[m]与student[m+1]信息互换   
				Equal(student[m+1],temp);
			}
		}
	}
	Order();                             // 顺序排名
}
//*********************************************************************************************
int Lookup(char num[20])
{
	int i=0;
	while(i<numstu)
	{
		if( strcmp(student[i].num,num )==0 ) break;    // 与查找目标进行比较
		
		i++;
	}
	if(i==numstu)return -1;
	else return i;
}
//*********************************************************************************************
void Modify(int x)
{
	Create(cin,student[x]);                 // 赋予新的值
	Sort();
}
//*********************************************************************************************
void Insert()
{
	Create(cin,student[numstu]);
	numstu++;
	
	Student temp;
	temp.class_x[21]=0; 
	temp.num[7]=0;
	temp.name[9]=0;
	temp.elec=0;
	temp.c_prog=0;
	temp.media=0;
	temp.eng=0;
	temp.math=0;
	temp.sport=0;
	temp.polity=0;
    temp.ave=0;
	temp.order=0;
	
	for(int i=numstu-1;i>0;i--)
	{
		if( Statistic(student[i])>Statistic(student[i-1]) )
		{
			Equal(temp,student[i]);
			Equal(student[i],student[i-1]);
			Equal(student[i-1],temp);                // 重新按平均分排序
		}
		else break;
	}
	Order();
}
//*********************************************************************************************
void Order()
{   
	for(int j=0;j<numstu;j++)
	{
	    student[j].order=j+1;;                // 顺序排名(从1开始)
	}
}
//*********************************************************************************************
void Delete(int i)
{
	for(int k=i;k<numstu-1;k++)
	{
		Equal(student[k],student[k+1]);
	}
	Order();
	numstu--;
}
//*********************************************************************************************
void Equal(Student & stud1,Student & stud2)
{
	strcpy(stud1.class_x,stud2.class_x); 
	strcpy(stud1.num,stud2.num);
	strcpy(stud1.name,stud2.name);
	stud1.elec=stud2.elec;
	stud1.c_prog=stud2.c_prog;
	stud1.media=stud2.media;
	stud1.eng=stud2.eng;
	stud1.math=stud2.math;
	stud1.sport=stud2.sport;
	stud1.polity=stud2.polity;
    stud1.ave=stud2.ave;
	stud1.order=stud2.order;                  //为前一位学生赋予后一位学生的一切信息
}
//*********************************************************************************************
void Print(Student studx,ostream out) 
{
    studx.ave=Statistic(studx);
	out<<left;                                // 左对齐输出
	out<<setw(13)<<studx.class_x<<setw(9)<<studx.num<<setw(8)<<studx.name<<setw(5)<<studx.elec
		<<setw(5)<<studx.c_prog<<setw(7)<<studx.media<<setw(5)<<studx.eng<<setw(5)<<studx.math
		<<setw(5)<<studx.sport<<setw(5)<<studx.polity<<setw(9)<<studx.ave<<setw(5)<<studx.order
		<<endl;
} 










	

⌨️ 快捷键说明

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