C/C++语言编程
B档一、学生成绩核算系统的设计与实现(25)要求:(1)按班级按课程从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩。(2)三个成绩对总评成绩的百分比被定义为常数,...
B档
一、 学生成绩核算系统的设计与实现(25)
要求:(1)按班级按课程从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩。
(2)三个成绩对总评成绩的百分比被定义为常数,各占总成绩的30%、30%和40%。
(3)计算每位学生的总评成绩。
(4)计算该班级本课程的总平均成绩。
(5)计算处于优、良、中、及格、不及格的学生人数以及占总人数的百分比。其中100-90为优,89-80为良,79-70为中,69-60为及格,60分以下为不及格。
(6)按要求输出成绩在优、良、中、及格、不及格各区间的学生学号、成绩。
程序设计参考思路:
1. 建立文本文件 note.dat,第一行为学生的总人数,其后为每个学生的成绩,每个学生的信息占一行,格式为:
学号(9位) 平时成绩 期中考试成绩 期末考试成绩
例如: 15
B07040801 88 75.5 66
B07040802 91 79.5 76
B07040803 85 75 77
B07040804 79 82 80.5
B07040805 94 83.5 81.5
B07040806 80 69 68
B07040807 82 77 71
B07040808 77 57 58
B07040809 91 88 86
B07040810 96 89 90
B07040811 70 45.5 50
B07040812 74 65 66
B07040813 81 71 76
B07040814 83 75 77
B07040815 85 78 79
2.从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩时,数据的读入方式可用C语言中的文件读入方式进行,也可用C++中的流实现。
4. 每次计算出的结果可在屏幕输出,并把每个学生的总评成绩输入到新文件out.dat文件中,
格式为: 学生学号(9位) 总评成绩 成绩等级
例如: B07040801 88 B
为查询方便,可把总评成绩所处等级(优、良、中、及格、不及格)同时保存在文件out.dat中,分别用字母A、B、C、D、E表示。
5. 数据结构(可用C++实现)
两个类:学生(student)和学生成绩(marks)
(1)学生类
数据成员: 学号、姓名、专业等
数据类型
属性(私有、保护、公有)
方法: 构造函数和析构函数
设置学号 void SetId( long );
读取学号 long GetId( ); 等等
(2)学生成绩类 —— 从学生类派生
数据成员:平时成绩、期中考试成绩、期末考试成绩、总评成绩、成绩等级
数据类型
属性(私有、保护、公有)
方法: 读入成绩 void In( ifstream& ); 或 void In( FILE* );
输出成绩 void Out( ofstream& ); 或 void Out( FILE* );
显示成绩 void print( );
求总评成绩 void ComputeZP( );
求等级 void ComputeDJ( );
读取总评成绩 float GetZP( );
读取等级 char GetDJ( ); 等等
6.设计
基本思想:自顶向下、逐步细化
主要功能:
(1)总控模块
功能:编制菜单,不断从菜单选择计算或查询功能执行,直到退出。
程序流程图:~
(2)计算
(3)查询~
7.实现
编程时要求每一个类建两个文件,即类的定义和实现文件。
注意包含相关的文件。
大哥们 有错误 望修改 展开
一、 学生成绩核算系统的设计与实现(25)
要求:(1)按班级按课程从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩。
(2)三个成绩对总评成绩的百分比被定义为常数,各占总成绩的30%、30%和40%。
(3)计算每位学生的总评成绩。
(4)计算该班级本课程的总平均成绩。
(5)计算处于优、良、中、及格、不及格的学生人数以及占总人数的百分比。其中100-90为优,89-80为良,79-70为中,69-60为及格,60分以下为不及格。
(6)按要求输出成绩在优、良、中、及格、不及格各区间的学生学号、成绩。
程序设计参考思路:
1. 建立文本文件 note.dat,第一行为学生的总人数,其后为每个学生的成绩,每个学生的信息占一行,格式为:
学号(9位) 平时成绩 期中考试成绩 期末考试成绩
例如: 15
B07040801 88 75.5 66
B07040802 91 79.5 76
B07040803 85 75 77
B07040804 79 82 80.5
B07040805 94 83.5 81.5
B07040806 80 69 68
B07040807 82 77 71
B07040808 77 57 58
B07040809 91 88 86
B07040810 96 89 90
B07040811 70 45.5 50
B07040812 74 65 66
B07040813 81 71 76
B07040814 83 75 77
B07040815 85 78 79
2.从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩时,数据的读入方式可用C语言中的文件读入方式进行,也可用C++中的流实现。
4. 每次计算出的结果可在屏幕输出,并把每个学生的总评成绩输入到新文件out.dat文件中,
格式为: 学生学号(9位) 总评成绩 成绩等级
例如: B07040801 88 B
为查询方便,可把总评成绩所处等级(优、良、中、及格、不及格)同时保存在文件out.dat中,分别用字母A、B、C、D、E表示。
5. 数据结构(可用C++实现)
两个类:学生(student)和学生成绩(marks)
(1)学生类
数据成员: 学号、姓名、专业等
数据类型
属性(私有、保护、公有)
方法: 构造函数和析构函数
设置学号 void SetId( long );
读取学号 long GetId( ); 等等
(2)学生成绩类 —— 从学生类派生
数据成员:平时成绩、期中考试成绩、期末考试成绩、总评成绩、成绩等级
数据类型
属性(私有、保护、公有)
方法: 读入成绩 void In( ifstream& ); 或 void In( FILE* );
输出成绩 void Out( ofstream& ); 或 void Out( FILE* );
显示成绩 void print( );
求总评成绩 void ComputeZP( );
求等级 void ComputeDJ( );
读取总评成绩 float GetZP( );
读取等级 char GetDJ( ); 等等
6.设计
基本思想:自顶向下、逐步细化
主要功能:
(1)总控模块
功能:编制菜单,不断从菜单选择计算或查询功能执行,直到退出。
程序流程图:~
(2)计算
(3)查询~
7.实现
编程时要求每一个类建两个文件,即类的定义和实现文件。
注意包含相关的文件。
大哥们 有错误 望修改 展开
4个回答
展开全部
//mark.h
#include <fstream>
#include <iostream>
using namespace std;
#define usPst 0.3f
#define mdPst 0.3f
#define fnPst 0.4f
class Mark
{
public:
Mark(void);
~Mark(void);
private:
float usual;
float mid;
float final;
float result;
//保留变量float average;
char judgement;
public:
void In(ifstream &infile);
void Out(ofstream &outfile);
void Print();
void ComputeZP(){result=usual*usPst+mid*mdPst+final*fnPst;}//求总评
float GetZP(){return result;}//读总评
char GetDJ(){return judgement;}//读等级
void ComPuteDJ();
};
//mark.cpp
#include "Mark.h"
Mark::Mark(void){}
Mark::~Mark(void){}
void Mark::In(ifstream &infile)
{
infile>>usual>>mid>>final;
}
void Mark::Out(ofstream &outfile)
{
outfile<<result<<' '<<judgement<<endl;
}
void Mark::Print()
{
cout<<result<<' '<<judgement<<endl;
}
void Mark::ComPuteDJ()
{
if(result<=100&&result>=90) judgement='A';
else if(result<90&&result>=80) judgement='B';
else if(result<80&&result>=70) judgement='C';
else if(result<70&&result>=60) judgement='D';
else judgement='E';
}
//student.h
#include "Mark.h"
//#include <string>
using namespace std;
class Student
{
public:
Student(void);
~Student(void);
private:
long Id;
//保留变量string name;
char department;
Mark mark;
public:
void SetId(){cin>>Id;}
long GetId(){return Id;}
void In(ifstream &);
void Out(ofstream&);
void Print();
void Compute(){mark.ComputeZP();mark.ComPuteDJ();};
};
//student.cpp
#include "Student.h"
Student::Student(void){}
Student::~Student(void){}
void Student::In(ifstream & infile)
{
infile>>department>>Id;
mark.In(infile);
}
void Student::Out(ofstream& outfile)
{
outfile<<department<<Id<<' ';
mark.Out(outfile);
}
void Student::Print()
{
cout<<department<<Id<<' ';
mark.Print();
}
//main.cpp
#include "Student.h"
void Compute(Student*);
void Search(Student*);
ifstream infile;
ofstream outfile;
int n;
int main()
{
//路径根据实际修改
infile.open("D:\\VC++6.0\\MSDev98\\MyProjects\\a\\note.dat",ios::in);
outfile.open("D:\\VC++6.0\\MSDev98\\MyProjects\\a\\out.dat",ios::out);
if (infile==NULL) return 1;
if(outfile==NULL) return 1;
int opr;
infile>>n;
Student *stu=new Student[n];
for (int i=0;i<n;i++)
{
stu[i].In(infile);
}
infile.close();
do
{
cout<<"******************************************\n"
<<"* *\n"
<<"* 1计算 2查询 0退出 *\n"
<<"* *\n"
<<"******************************************\n"
<<"输入操作编号(先执行一次计算,之后查询):"<<endl;
cin>>opr;
if(opr==1) Compute(stu);
else if(opr==2) Search(stu);
else break;
system("pause");
system("cls");
}while(1);
for (int i=0;i<n;i++)
{
stu[i].Out(outfile);
}
outfile.close();
delete []stu;
return 0;
}
void Search(Student* stu)
{
cout<<"输入学生ID:"<<endl;
long Id;
cin>>Id;
int i;
for (i=0;i<n;i++)
{
if(stu[i].GetId()==Id)
{
stu[i].Print();
break;
}
}
if(i==n) cout<<"未找到"<<endl;
}
void Compute(Student *stu)
{
for (int i=0;i<n;i++)
{
stu[i].Compute();
}
}
#include <fstream>
#include <iostream>
using namespace std;
#define usPst 0.3f
#define mdPst 0.3f
#define fnPst 0.4f
class Mark
{
public:
Mark(void);
~Mark(void);
private:
float usual;
float mid;
float final;
float result;
//保留变量float average;
char judgement;
public:
void In(ifstream &infile);
void Out(ofstream &outfile);
void Print();
void ComputeZP(){result=usual*usPst+mid*mdPst+final*fnPst;}//求总评
float GetZP(){return result;}//读总评
char GetDJ(){return judgement;}//读等级
void ComPuteDJ();
};
//mark.cpp
#include "Mark.h"
Mark::Mark(void){}
Mark::~Mark(void){}
void Mark::In(ifstream &infile)
{
infile>>usual>>mid>>final;
}
void Mark::Out(ofstream &outfile)
{
outfile<<result<<' '<<judgement<<endl;
}
void Mark::Print()
{
cout<<result<<' '<<judgement<<endl;
}
void Mark::ComPuteDJ()
{
if(result<=100&&result>=90) judgement='A';
else if(result<90&&result>=80) judgement='B';
else if(result<80&&result>=70) judgement='C';
else if(result<70&&result>=60) judgement='D';
else judgement='E';
}
//student.h
#include "Mark.h"
//#include <string>
using namespace std;
class Student
{
public:
Student(void);
~Student(void);
private:
long Id;
//保留变量string name;
char department;
Mark mark;
public:
void SetId(){cin>>Id;}
long GetId(){return Id;}
void In(ifstream &);
void Out(ofstream&);
void Print();
void Compute(){mark.ComputeZP();mark.ComPuteDJ();};
};
//student.cpp
#include "Student.h"
Student::Student(void){}
Student::~Student(void){}
void Student::In(ifstream & infile)
{
infile>>department>>Id;
mark.In(infile);
}
void Student::Out(ofstream& outfile)
{
outfile<<department<<Id<<' ';
mark.Out(outfile);
}
void Student::Print()
{
cout<<department<<Id<<' ';
mark.Print();
}
//main.cpp
#include "Student.h"
void Compute(Student*);
void Search(Student*);
ifstream infile;
ofstream outfile;
int n;
int main()
{
//路径根据实际修改
infile.open("D:\\VC++6.0\\MSDev98\\MyProjects\\a\\note.dat",ios::in);
outfile.open("D:\\VC++6.0\\MSDev98\\MyProjects\\a\\out.dat",ios::out);
if (infile==NULL) return 1;
if(outfile==NULL) return 1;
int opr;
infile>>n;
Student *stu=new Student[n];
for (int i=0;i<n;i++)
{
stu[i].In(infile);
}
infile.close();
do
{
cout<<"******************************************\n"
<<"* *\n"
<<"* 1计算 2查询 0退出 *\n"
<<"* *\n"
<<"******************************************\n"
<<"输入操作编号(先执行一次计算,之后查询):"<<endl;
cin>>opr;
if(opr==1) Compute(stu);
else if(opr==2) Search(stu);
else break;
system("pause");
system("cls");
}while(1);
for (int i=0;i<n;i++)
{
stu[i].Out(outfile);
}
outfile.close();
delete []stu;
return 0;
}
void Search(Student* stu)
{
cout<<"输入学生ID:"<<endl;
long Id;
cin>>Id;
int i;
for (i=0;i<n;i++)
{
if(stu[i].GetId()==Id)
{
stu[i].Print();
break;
}
}
if(i==n) cout<<"未找到"<<endl;
}
void Compute(Student *stu)
{
for (int i=0;i<n;i++)
{
stu[i].Compute();
}
}
展开全部
//student.h
class student
{
public:
char num[10];
char name[10];
char major[10];
public:
student();
~student();
};
//student.cpp
#include"student.h"
student::student()
{
}
student::~student()
{
}
//score.h
#include"student.h"
class Cscore:public student
{
float score[4];
char type;
public:
Cscore();
~Cscore();
void In( ifstream& );
void Out( ofstream& );
void print( );
void ComputeZP( );
void ComputeDJ( );
float GetZP( );
char GetDJ( );
};
//score.cpp
Cscore::Cscore()
{
}
Cscore::~Cscore()
{
}
void Cscore::In( ifstream& in)
{
in>>num>>score[0]>>score[1]>>score[2];
ComputeDJ( );
ComputeDJ( );
}
void Cscore::Out( ofstream& out)
{
out<<num<<'\t'<<score[3]<<'\t'<<type<<endl;
}
void Cscore::print( )
{
cout<<num<<'\t'<<score[3]<<'\t'<<type<<endl;
}
void Cscore::ComputeZP( )
{
score[3]=score[0]*0.3+score[1]*0.3+score[2]*0.4;
}
void Cscore::ComputeDJ( )
{
switch((int)score[3])
{
case 10:case 9:type='A';break;
case 8:type='B';break;
case 7:type='C';break;
case 6:type='D';break;
default:type='E';
}
}
float Cscore::GetZP( )
{
return score[3];
}
char Cscore::GetDJ( )
{
return type;
}
//main.cpp
#include <iostream>
using namespace std;
#include <fstream>
#include"score.h"
int main()
{
ifstream ifile;
ifile.open("note.txt");
ofstream ofile;
ofile.open("out.txt");
int n,i,op;
char name[10];
ifile>>n;
Cscore *psc=new Cscore[n];
for(i=0;i<n;i++)
psc[i].In(ifile);
while(1)
{
cout<<"Please choose:"<<endl;
cout<<"1 for 计算"<<endl;
cout<<"2 for 查询"<<endl;
cout<<"3 for 退出"<<endl;
cin>>op;
switch(op)
{
case 3:goto END;
case 1:
for(i=0;i<n;i++)
{
psc[i].ComputeDJ();
psc[i].ComputeZP();
}
break;
case 2:
cout<<"请输入要查询学号"<<endl;
cin>>name;
for(i=0;i<n;i++)
if(strcmp(psc[i].name,name))break;
if(i==n)
cout<<"没有此学号"<<endl;
else
psc[i].print();
}
}
END:
delete[]psc;
ifile.close();
ofile.close();
return 0;
}
class student
{
public:
char num[10];
char name[10];
char major[10];
public:
student();
~student();
};
//student.cpp
#include"student.h"
student::student()
{
}
student::~student()
{
}
//score.h
#include"student.h"
class Cscore:public student
{
float score[4];
char type;
public:
Cscore();
~Cscore();
void In( ifstream& );
void Out( ofstream& );
void print( );
void ComputeZP( );
void ComputeDJ( );
float GetZP( );
char GetDJ( );
};
//score.cpp
Cscore::Cscore()
{
}
Cscore::~Cscore()
{
}
void Cscore::In( ifstream& in)
{
in>>num>>score[0]>>score[1]>>score[2];
ComputeDJ( );
ComputeDJ( );
}
void Cscore::Out( ofstream& out)
{
out<<num<<'\t'<<score[3]<<'\t'<<type<<endl;
}
void Cscore::print( )
{
cout<<num<<'\t'<<score[3]<<'\t'<<type<<endl;
}
void Cscore::ComputeZP( )
{
score[3]=score[0]*0.3+score[1]*0.3+score[2]*0.4;
}
void Cscore::ComputeDJ( )
{
switch((int)score[3])
{
case 10:case 9:type='A';break;
case 8:type='B';break;
case 7:type='C';break;
case 6:type='D';break;
default:type='E';
}
}
float Cscore::GetZP( )
{
return score[3];
}
char Cscore::GetDJ( )
{
return type;
}
//main.cpp
#include <iostream>
using namespace std;
#include <fstream>
#include"score.h"
int main()
{
ifstream ifile;
ifile.open("note.txt");
ofstream ofile;
ofile.open("out.txt");
int n,i,op;
char name[10];
ifile>>n;
Cscore *psc=new Cscore[n];
for(i=0;i<n;i++)
psc[i].In(ifile);
while(1)
{
cout<<"Please choose:"<<endl;
cout<<"1 for 计算"<<endl;
cout<<"2 for 查询"<<endl;
cout<<"3 for 退出"<<endl;
cin>>op;
switch(op)
{
case 3:goto END;
case 1:
for(i=0;i<n;i++)
{
psc[i].ComputeDJ();
psc[i].ComputeZP();
}
break;
case 2:
cout<<"请输入要查询学号"<<endl;
cin>>name;
for(i=0;i<n;i++)
if(strcmp(psc[i].name,name))break;
if(i==n)
cout<<"没有此学号"<<endl;
else
psc[i].print();
}
}
END:
delete[]psc;
ifile.close();
ofile.close();
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个其实很简单的,最好自己做做,可以学到东西的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询