c++学生成绩统计

3-5 学生成绩统计

Time Limit: 1000MS  Memory Limit: 65536KB
Problem Description

通过本题目练习可以掌握对象数组的用法,主要是对象数组中数据的输入输出操作。

设计一个学生类Student 它具有私有的数据成员:学号、姓名、数学成绩、英语成绩、计算机成绩;具有公有的成员函数:求三门课总成绩的函数int sum(); 求三门课平均成绩的函数 double average(); 输出学生基本信息、总成绩和平均成绩的函数 void print() 设置学生数据信息的函数void set_stu_info(int n,char *p,int m,int e,int c)

请编写主函数,建立学生对象数组,从键盘输入一组学生数据,输出学生的成绩统计表:

stuID 姓名 数学 英语 计算机 总成绩 平均成绩

001 xxx 90 85 95 270 90.0

 

002 yyy 95 98 92 285 95.0

Input

输入数据有5行,代表5个学生的信息。

每行有5个数据,数据间用一个空格分隔,分别代表学生的学号、姓名、数学成绩、英语成绩和计算机成绩。除了姓名是符号串外,其他均为整型数据,数据在int类型范围内。

Output

输出数据一共有7行。

第一行输出提示信息“Input the messages of five students(StudentID Name Math English Computer )

第二行输出一个空行,进行输入输出间的间隔

第三行输出表头“StuID Name Math Eng Com Total Average ,这一行有7个数据,数据间用制表符\t’分隔,分别代表学生的学号、姓名、数学成绩、英语成绩、计算机成绩、总成绩和平均成绩。其中平均成绩为实型数据,保留1位小数。

4-8行分别输出5个学生的相关数据。每个数据占一个制表符的空间。格式同上。

Example Input
1001 Andy 89 90 93
1002 Mary 93 95 98
1003 Luis 90 85 98
1004 Sam 91 95 98
1005 Lily 87 98 99
Example Output
Input the messages of five students(StudentID Name Math English Computer )

StuID	Name	Math	Eng	Com	Total	Average
1001	Andy	89	90	93	272	90.7
1002	Mary	93	95	98	286	95.3
1003	Luis	90	85	98	273	91.0
1004	Sam	91	95	98	284	94.7
1005	Lily	87	98	99	284	94.7
Author
  之所以要写这个题的博客,是想要说一下c++中如何控制小数点位数的问题,核心语句为:<<setprecision(n)<<fixed<<;即设置固定精度为n
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;

class student
{
private:
    int num;
    char name[10];
    int math;
    int english;
    int computer;
public:
    void show()
    {
        double sum=0;
        sum=(math+english+computer);
        //对小数点进行处理,控制小数点个数(setprecision(n)<<fixed,n即为要保留的小数点个数)
        cout<<num<<"\t"<<name<<"\t"<<math<<"\t"<<english<<"\t"<<computer<<"\t"<<setprecision(0)<<fixed<<sum<<"\t"<<
        setprecision(1)<<fixed<<sum/3<<endl;
    }
    void setstudent();
}stu[5];

void student::setstudent()
{
    cin>>num>>name>>math>>english>>computer;
}

int main()
{
    cout<<"Input the messages of five students(StudentID Name Math English Computer )"<<endl;
    cout<<endl;//打印空行,不要加上“\n”
    cout<<"StuID"<<"\t"<<"Name"<<"\t"<<"Math"<<"\t"<<"Eng"<<"\t"<<"Com"<<"\t"<<"Total"<<"\t"<<"Average"<<endl;
    for(int i=0;i<5;i++)
    {
        stu[i].setstudent();
        stu[i].show();
    }
    return 0;
}



源代码: #include #include #include #include #define Smax 200 using namespace std; struct student { string num; string name; float eng; float math; float clang;//定义c++ float gete(){return eng;} float getm(){return math;} float getcl(){return clang;} string getn(){return num;} string getna(){return name;} int rank[3]; int row;//排名 int sinto(string,string,float,float,float);//输入数据 void sshow();//输出数据 float sall();// 求和 float save();//求平均 void objrank();//成绩 }; void shows()//普通函数 { cout<<setw(6)<<"排名"<<setw(6)<<"学号"<<setw(10)<<"姓名" <<setw(6)<<"英语"<<setw(6)<<"数学"<<setw(6)<<"c++" <<setw(6)<<"总分"<<setw(10)<<"平均分"<<endl; } int student::sinto(string a1,string a2,float b1,float b2,float b3 ) { num=a1;name=a2; eng=b1;math=b2;clang=b3; return 0; } void student::sshow()//输出 { cout<<setw(6)<<row<<setw(6)<<num<<setw(10)<<name<<setw(6) <<eng<<setw(6)<<math<<setw(6)<<clang<<setw(6)<<sall() <<setw(10)<<setiosflags(ios::fixed)<<setprecision(1)<<save()<<endl; cout<<setiosflags(ios::fixed)<<setprecision(0); } float student::sall()//求总分 { return eng+math+clang; } float student::save()//求平均分 {return sall()/3;} void student::objrank() { int n; rank[0]=(int)eng; rank[1]=(int)math; rank[2]=(int)clang; for(int i=0;i<3;i++) { n=rank[i]/10; switch(n) { case 9:n=1;break; case 8:n=2;break; case 7:n=3;break; case 6:n=4;break; default:n=5;} rank[i]=n; } } //student结束 //leo开始 class leo {private: student item[Smax]; int size; public: leo(); void lsize(int);//设置数组大小 void linit();//清空 void linsert();//添加 void ldelet(string);//删除 void lsearch(string);//查找 void lchan(string);//修改 void lpcent();//成绩 void lrow();//排序 void obave();//求平均 void lview();//显示全部数据 void lcin();//从磁盘输出 void lcout();//储存到磁盘 }; leo::leo() { student item[Smax]; lsize(0); } void leo::lsize(int i) {size=i; } void leo::linit() { lsize(0); cout<<"学生数据清除成功"<<endl; cout<<"当前无学生数据。请添加...."<<endl; } void leo::ldelet(string a) { int k=0;string c; for(int i=0;i<size;i++) if(item[i].getn()==a) { cout<<"你将要删除的数据如下:"<<endl; shows(); item[i].sshow(); cout<>c; if(c=="y"||c=="Y") {item[i]=item[--size];k=1;} } if(k!=1)cout<<"\n删除失败!"<<endl; else cout<<"\n删除成功!"<Smax)cout<<"超出范围,不能再添加!"<<endl; else { cout<<"\n请输入学号,姓名英语数学c++成绩:"<>a1>>a2>>b1>>b2>>b3; for(int i=0;i<size;i++) if(item[i].getn()==a1) { mn++; cout<<"输入学号与下面的数据重复!"<<endl; shows();//输出重复的学号,姓名英语数学c++成绩 item[i].sshow();} if(!mn) {item[size++].sinto(a1,a2,b1,b2,b3); cout<<"\n添加成功!";} } cout<>a; } } void leo::lsearch(string a)//查找 {int N=0; for(int i=0;i<size;i++) if(item[i].getn()==a) { N++; shows();//输出学号,姓名英语数学c++ item[i].sshow(); } if(!N)cout<<"输入有误或该学生数据不存在"<<endl; } void leo::lchan(string a)//修改 { if(size==0){cout<<"当前学生数据为空,请添加...."<<endl;} else{ int N=0; for(int i=0;i<size;i++) if(item[i].getn()==a) { N++; cout<<"你将要修改的数据如下:"<<endl; shows();item[i].sshow(); cout<<"请输入要修改学生的学号,姓名英语数学c++成绩"<>a1>>a2>>b1>>b2>>b3; item[i].sinto(a1,a2,b1,b2,b3); cout<<"修改成功!"<<endl; } if(!N)cout<<"输入的学号有误!"<1) { for(int i=0;i<size-1;i++) { temb=item[i]; for(int j=i+1;j<size;j++) if(item[i].sall()<item[j].sall()) { item[i]=item[j]; item[j]=temb; } item[0].row=1; for(int i=0;iitem[i+1].sall()) item[i+1].row=i+2; else item[i+1].row=i+1;//并列排名 }} else if(size==1) item[0].row=1; } void leo::lview()//显示 { if(size==0){cout<<"当前学生数据为空,请添加...."<<endl;} else { cout<<"共有学生数据"<<size<<"条"<<endl<<endl; shows(); for(int i=0;i<size;i++) { item[i].sshow(); } } } void leo::obave()//统计科目 { if(size!=0) { float sum[3]={0}; for(int i=0;i<size;i++) { sum[0]+=item[i].gete(); sum[1]+=item[i].getm(); sum[2]+=item[i].getcl();} cout<<"英语平均的成绩为:" <<setiosflags(ios::fixed)<<setprecision(1)<<sum[0]/size<<'\n'; cout<<"数学平均的成绩为:"<<sum[1]/size<<'\n'; cout<<"c++的平均成绩是:"<<sum[2]/size<<'\n'; cout<<setiosflags(ios::fixed)<<setprecision(0)<<endl; } else cout<<"当前无学生数据,请添加......"; } void leo::lpcent() //成绩 { int p[3][200]; float tem=100.0/size; string a[3]={"英语","数学","c++"}; if(size!=0) { for(int i=0;i<size;i++) { item[i].objrank(); p[0][i]=item[i].rank[0]; p[1][i]=item[i].rank[1]; p[2][i]=item[i].rank[2]; } for(int k=0;k<3;k++) { int b[5]={0}; for(int i=0;i<size;i++) { switch(p[k][i]) { case 1: b[0]++;break; case 2: b[1]++;break; case 3: b[2]++;break; case 4: b[3]++;break; case 5: b[4]++;break; default:break; } } cout<<a[k]<<"成绩人数: 优"<<b[0]<<"人 良"<<b[1] <<"人 中"<<b[2]<<"人 及"<<b[3]<<"人 不及"<<b[4]<<"人"<<endl; cout<<setiosflags(ios::fixed)<<setprecision(1) <<a[k]<<"成绩比例: 优"<<(float)b[0]*tem<<"% 良" <<(float)b[1]*tem<<"% 中"<<(float)b[2]*tem<<"% 及" <<(float)b[3]*tem<<"% 不及"<<(float)b[4]*tem<<"%"<<endl<<endl; cout<<setiosflags(ios::fixed)<<setprecision(0)<<endl; } } } void leo::lcin() { string a[200],b[200];float c[200],d[200],e[200]; int f[200]; ifstream infile("ok.txt",ios::in); if(! infile) cerr<<"文件打开失败。"<<endl; for(int i=0;i>a[i]>>b[i]>>c[i]>>d[i]>>e[i]>>f[i]; item[size].sinto(a[i],b[i],c[i],d[i],e[i]);size++; if(f[i]==1) break; } infile.close(); } void leo::lcout() {ofstream outfile("ok.txt",ios::out); if(! outfile) cerr<<"文件打开失败。"<<endl; for(int i=0;i<size;i++) outfile<<item[i].num<<" "<<item[i].name<<" "<<item[i].eng<<" "<<item[i].math<<" "<<item[i].clang<<" "<<size-i<<endl; outfile.close(); } void showmenu() { cout<<" "; cout<<"|----------------------------------------------------------------|"<<endl; cout<<" "; cout<<"|----------学生成绩统计管理系统--------------------------|"<<endl; cout<<" "; cout<<"|----------------------------------------------------------------|"<<endl; cout<<" "; cout<<"| 1.显示:显示所有学生数据(按总分排序)|"<<endl; cout<<" "; cout<<"| 2.查看:查看所有统计结果 |"<<endl; cout<<" "; cout<<"| 3.添加:插入一个学生数据 |"<<endl; cout<<" "; cout<<"| 4.删除:删除一个学生数据 |"<<endl; cout<<" "; cout<<"| 5.查找: 查找指定学生数据 |"<<endl; cout<<" "; cout<<"| 6.修改:修改指定学生数据 |"<<endl; cout<<" "; cout<<"| 7.清空:清除所有学生数据 |"<<endl; cout<<" "; cout<<"| 8.帮助:查看系统注意事项 |"<<endl; cout<<" "; cout<<"| 0.退出:将数据保存到磁盘 |"<<endl; cout<<" "; cout<<"|----------------------------------------------------------------|"<<endl; } void showtip() { cout<<"\n\t\t----------------操作完成!-----------------"<<endl; cout<<"\t\t----------------选择0-8继续------------------"<<endl; } int main() { leo leo1; string c="s",a; system("cls");//清屛 showmenu(); cout<<"正在打开文件,请稍后..."<<endl; leo1.lcin(); cout<>c; while(c!="0") { system("cls"); showmenu(); if(c=="1") { cout<<"你选择了1,学生数据显示如下:"<<endl<<endl; leo1.lrow();//排序 leo1.lview(); } if(c=="2") { cout<<"你选择了2,统计结果如下:"<<endl; leo1.obave();//各科平均成绩, leo1.lpcent();//各科分情况 } if(c=="3") { cout<<"你选择了3,"; leo1.linsert(); } if(c=="4") { cout<<"你选择了4,请输出要删除的学号:"<>a; leo1.ldelet(a); } if(c=="5") { cout<<"你选择了5,请输出要查找的学号:"<>a; leo1.lsearch(a); } if(c=="6") { cout<<"你选择了6,请输出要修改的学号:"<>a; leo1.lchan(a); } if(c=="7") { cout<<"你选择了7,全部数据将要清空"<<endl; cout<<"你确定清空吗?输入y确定,n退出"<>a; if(a=="y"||a=="Y") leo1.linit(); } if(c=="8") { cout<<"1.本系统最多可以容纳200个学生数据."<<endl; cout<<"2.选择相应的数字输入,不同数据间留空隔, 输完后按回车键 ."<<endl; cout<<"3.注意操作完后将数据保存."<>c; system("cls");leo1.lcout(); } cout<<"谢谢您的使用!"<<endl; return 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值