#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)
{
int ab;
cout<<"请输入要删除的学生的学号:";
cin>>ab;
panduan();
for(int i=0;i<number;i++)
{
if(qq[i]==ab) {m=i;break;}
}
if(m!=521)
{
for(int j=m;j<number-1;j++)//把后一个学生的资料赋给前一个
{
qq[j]=qq[j+1];
strcpy(name[j].na,name[j+1].na);
b[j][0]=b[j+1][0];
b[j][1]=b[j+1][1];
b[j][2]=b[j+1][2];
b[j][3]=b[j+1][3];
}
number--;a=0;cout<<"===========已删除成功============"<<endl;
}
else
{cout<<" ===========该生不存在============"<<endl;break;}
}
}
void score::print()//各科成绩的查询
{
int x,a=2;
cout<<"==================================================================="<<endl;
cout<<" 1>体育 2>数学 3>英语 4>C++"<<endl;
cout<<"==================================================================="<<endl;
while(a)
{
cout<<"请输入查询的科目(1~4):";
cin>>x;
panduan();
if(x>0&&x<5)
{
switch(x)
{
case 1:cout<<"体育:"<<endl;break;
case 2:cout<<"数学:"<<endl;break;
case 3:
ak47.rar_AK47_C++ 成绩管理_学生成绩管理系统_课设
版权申诉
5星 · 超过95%的资源 164 浏览量
2022-09-20
13:47:21
上传
评论
收藏 4KB RAR 举报
寒泊
- 粉丝: 75
- 资源: 1万+
最新资源
- ZEND解密dezender12
- sony 索尼IMX334摄像头模组电路板AD版硬件PCB图(6层板).zip
- 基于flask和echarts融合交易策略的bitfinex可视化微服务.zip
- 包含了wvp-assist.tar wvp-talk.tar zlmediakit.tar .
- 3r4efgh53wgrf43tw
- 2024新版Java基础从入门到精通全套视频+资料下载
- Spring AI大模型视频教程+ChatGPT视频教程+OpenAI大模型视频教程(资料+视频教程)
- ABB工业机器人教程PDF版本
- 123321123323211
- 三相桥式全桥整流电路MATALB Simulink仿真文件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈