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

📄 ak47.cpp

📁 用C++做的学生成绩管理系统,一般是软件专业新生的课设题目,虽然还存在一些不足,但是基本上让你拿A问题
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<fstream.h>
#include<iomanip.h>
#define max 40//设定学生个数的最大值
class score
{
protected:
	struct student//结构体
	{
	    int no;
    	char name[20];
		double scores[4];
	}stu[max];
	char s[50];
public:
	score(){}
	~score(){}
	void set();//设置学生信息
    void print();//各科成绩的排名查询
	void aver();//各科平均成绩,各科成绩各等级人数及比例
	void count();//总成绩统计,学生的总成绩,平均成绩及成绩排名
	void zong();//成绩的统计结果显示
	void extend();//扩展功能
	void display();//扩展功能菜单
	void addx(); //添加学生 
	void dele();//删除一个学生
	void modify();//修改学生信息
	void search();//查找学生成绩
	void panduan();// 保证输入的实型或整型中没有字符的成员函数
    void ofile();//数据保存
	void ifile();//数据录入
	void check(int &);//判断输入的学生信息是否要求
    int number;//学生数
    int qq[max];//学号
    double b[max][4];//各课成绩
	struct names
	{
	char na[20];
	char na1[20];
	};
	names name1[max];
	names name[max];//定义的学生姓名
};
void score::set()//设置学生资料
{
	number=0;
    int  p=2;
	double xs[max+1];
	xs[0]=0;
	while(p)
	{
		cout<<"请输入学生的个数(0~"<<max<<"):"<<endl;//输出的max提示用户学生个数的范围 
        cin>>number;
    	panduan();
        if(number>=0&&number<=max)  p=0;
		else 	
			cout<<"              ===============输入有误================="<<endl;		  
	}
    cout<<"请按照提示输入有关学生的信息: "<<endl;
    for(int a=0;a<number;a++)
	{
		int h=2,w=number;
		while(h)
		{
		  int z=0;
	      cout<<"学号"<<"姓名"<<" 体育"<<" 数学"<<" 英语"<<" C++"<<endl;
          cin>>qq[a]>>name[a].na>>b[a][0]>>b[a][1]>>b[a][2]>>b[a][3];
		  panduan();
		  xs[a]=qq[a];		 
		  if(a!=0&&qq[a]==xs[a-1])  {z=2;cout<<"学号重复,请重输:"<<endl;}//控制输入学号不重复
		  if(z!=2)	{check(a); if(number==w) h=0;else number--;}
		}
	}
}
void score::check(int &c)//判断输入数据是否有误的成员函数
{
	int m=0;
	if(qq[c]<0||qq[c]==0)
	{cout<<"                    ========学号输入有误=========="<<endl; m++;}
	for(int a=0;a<4;a++)
	{
		if(b[c][a]<0||b[c][a]>100)	m++;
	}
	if(m>0) 
	{number++;cout<<"                    =========成绩输入有误==========="<<endl;cout<<"请重新输入:"<<endl;}	
}
void score::panduan()// 保证输入的实型或整型中没有字符的成员函数
{
	 while(!cin)//用来控制输入的实型和整型都是数字,若发现字符自动退出
	{
		 cin.clear();
		 cin.ignore(80,'\n');
		 cout<<"              ==========输入的不是数字==========="<<endl;break;
	} 
}
void score::ofile()//数据存储实现
{
	cout<<"请输入存储学生信息的路径(.txt):";
	cin>>s;
	for(int k=0;k<number;k++)
	{
		stu[k].no=qq[k];
		strcpy(stu[k].name,name[k].na);
		for(int j=0;j<4;j++)
		stu[k].scores[j]=b[k][j];
	}
	fstream outfile;
	outfile.open(s,ios::out);//文件打开
	if(! outfile)//文件不存在
	{
		cout<<"===不能打开此文件==="<<endl;
		abort();
	}
		for(int i=0;i<number;i++)
		     outfile.write((char *)&stu[i],sizeof(stu[i]));//写入文件
		stu[number].no=0;
		outfile.write((char *)&stu[number],sizeof(stu[number]));
		outfile.close();
		cout<<"                =========存储完毕============"<<endl;
}
void score::ifile()//文件读取实现
{
	number=0;
	cout<<"请输入读取学生信息的路径(.txt):";
	cin>>s;
	fstream infile;
	infile.open(s,ios::in);
	if(! infile)//文件不存在
	{
		cout<<"===不能打开此文件==="<<endl;
		abort();
	}
	for(int j=0;j<max;j++)
	{
		infile.read((char *)&stu[j],sizeof(stu[j]));//READ 语句读出存储内容
		if(stu[j].no==0) break;
		qq[j]=stu[j].no;
	    strcpy(name[j].na,stu[j].name);
		for(int k=0;k<4;k++)
		b[j][k]=stu[j].scores[k];
		number++;
	}
	    cout<<"              ========信息录入完毕========="<<endl;
		infile.close();		
}
void score::addx()//学生添加
{
	int i,a=2;
	cout<<"请输入添加学生的个数(0~"<<max-number<<"):";//max-number提示用户添加学生数范围
	while(a)
	{
         cin>>i;	
	     panduan();
        if(i>=0&&i<=(max-number)) a=0;//控制总学生不超过定义的范围	
		else 	
			cout<<"              ===============输入有误=================";		  
	}
	for(int j=0;j<i;j++)
	{
	   int g=2;
	   while(g)
	   {
		int x=number++;
		cout<<"学号 姓名 体育 数学 英语 C++"<<endl;
		cin>>qq[x]>>name[x].na>>b[x][0]>>b[x][1]>>b[x][2]>>b[x][3];
        while(!cin)//用来控制输入的实型和整型都是数字,若发现字符自动退出
		{
		 cin.clear();
		 cin.ignore(80,'\n');
		 cout<<"              ==========输入的不是数字==========="<<endl;break;
		} 
		check(x);
		if(x==number-2)  {number-=2;g=2;}
		else g=0;
		for(int z=0;z<number-1;z++)
		{if(qq[x]==qq[z]) {g=2;number--;cout<<"     ===========输入学号重复==========="<<endl;break;}}//控制输入学号不重复	
		if(g!=2) cout<<"==========添加成功============"<<endl;
	   }
	} 
}
void score::modify()//学生数据修改
{
	int a=2,n,c=2,g;
	while(a)
	{
		int m=1314;
		g=number;
		cout<<"请输入要修改的学生的学号:";
		cin>>n;
		if(n==1314) {cout<<"         =============学号输入有误============== "<<endl;break;}
        while(!cin)//用来控制输入的实型和整型都是数字,若发现字符自动退出
		{
		      cin.clear();
		      cin.ignore(80,'\n');
	 	      cout<<"              ==========输入的不是数字==========="<<endl;break;
		} 
		for(int i=0;i<number;i++)
		{
			if(qq[i]==n) {m=i;break;}//学号是否存在
		}
		if(m!=1314)
		{	
			while(c)
			{
	           cout<<"开始对该学生的资料进行修改"<<endl;
	           cout<<"姓名 体育 数学 英语 C++"<<endl;
		       cin>>name[m].na>>b[m][0]>>b[m][1]>>b[m][2]>>b[m][3];
			 	 while(!cin)//用来控制输入的实型和整型都是数字,若发现字符自动退出
				 {
		           cin.clear();
		           cin.ignore(80,'\n');
	 	           cout<<"              ==========输入的不是数字==========="<<endl;break;
				 } 
			   a=0;
			   check(m);//调用判断输入数据是否有误
			   if(g<number)
			   {number--;cout<<"请重新修改"<<endl;}
			   else
			   {c=0;a=0;cout<<"          ======该学生成绩修改完毕======"<<endl;}
			}		   			
		}
		else 
		{cout<<"         ==================查无此人==================="<<endl;break;}	
	}
}
void score::search()//查找学生的成绩
{
	int a=2;
	while(a)
	{
		int ab,m=1314;
		cout<<"请输入查询学生的学号:";
		cin>>ab;
		panduan();
		for(int i=0;i<number;i++)
		{
			if(qq[i]==ab) {m=i;break;}
		}
		if(m!=1314)
		{cout<<"该学生资料:"<<"\n姓名:"<<name[m].na<<"\n 体育成绩"<<b[m][0]<<"\n数学成绩:"<<b[m][1]<<"\n英语成绩:"<<b[m][2]<<"\nC++成绩:"<<b[m][3]<<endl;
	    	cout<<"是否继续查询(y/n):";
			char ch;
			cin>>ch;
			if(ch=='y'||ch=='Y')
			a=2;
			else if(ch=='n'||ch=='N')
		        a=0;
			else 
			{cout<<"                =======输入错误========"<<endl;a=0;}
		}
        else
		{ cout<<"                ===========该生不存在============"<<endl;a=0;}
	}
}
void score::dele()//删除一个学生
{
    int m=521,a=2;
	while(a)
	{

⌨️ 快捷键说明

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