资源描述
设计题目:成绩管理系统
设计要求实现如下功能:
输入一个班级的学生基本信息(包括学号,姓名,性别,科目),对N门考试的成绩进行管理(例N=5)
要求 :
1.用户录入每个学生每门课程的分数;
2.能够计算每个学生的各门功课总分和平均分,并按总分将成绩排序,显示每个学生的总分和排名;
3.计算全班各门功课的平均分,显示没门课程中低于平均分的每一个学生的学号,姓名,性别,科目,成绩等信息;
4。显示每门科目中,成绩在90分以上的学生信息。另外还输出每门科目中不及格的学生信息;
5。能按姓名或者学号查找,增加,删除和保存各个学生的信息。
6 文件操作
源码:
class.cpp文件:
#include〈iostream〉
#include<fstream〉
#include〈string〉
using namespace std;
class Student{
private:
int no;
string name,sex;
public:
string getName(){return name;}
string getSex(){return sex;}
int getNo(){return no;}
void setSex(string s){sex=s;}
void setNo(int sno){no=sno;}
void setName(string nam){name=nam;}
void show(){
cout〈〈”学号 :"〈〈no〈〈endl;
cout〈<”姓名 :”〈<name〈〈endl;
cout〈〈"性别 :"<<sex〈〈endl;
cout〈<endl;
}
void Init(){
string n;
int num,s;
cout<〈”请输入学号:"〈<endl;
cin〉〉num;
cout<〈"请输入姓名:”〈<endl;
cin〉〉n;
cout〈〈”请选择性别:男 0,女 1"〈<endl;
cin>>s;
no=num;
name=n;
string s1,s2;
if(s=0){s1=”boy”;Student::setSex(s1);}
else{
s2=”girl”;Student::setSex(s2);
}
}
};
class Classes{
private:
string name;
public:
int number;
Student c[100];
int getNumber(){return number;}
Student getStu(){return c[100];}
void setStudent(Student a[100]){c[100]=a[100];}
void setNumber(int num){number=num;}
void Init(){
number=0;
string nam;
cout<〈”请输入班级姓名:”〈〈endl;
cin〉>nam;
cout〈<"请输入班级人数:"〈<endl;
cin〉〉number;
for(int i=0;i〈number;i++){
c[i].Init();
}
ofstream out;
out。open(”student.txt",ios::out);
if(!out){
cerr〈〈”文件打不开”〈〈endl;
abort();
}
for(int i=0;i〈number;i++){
out〈<c[i]。getNo()〈<” ”<〈c[i]。getName()<<” ”〈<c[i]。getSex()<〈endl;
}
out.close();
}
void searchByName(){
string nam;
cout〈<”请输入要查找的学生姓名:”〈<endl;
cin〉>nam;
int i;
for(i=0;i〈number;i++){
if(c[i]。getName()==nam){
c[i]。show();
}
}
}
void serchByNo(){
int n;
cout<<”请输入要查找的学号;”<〈endl;
cin〉〉n;
int i;
for(i=0;i〈100;i++){
if(c[i].getNo()==n){c[i]。show();break;}
}
}
};
class Course{
private:
string name;
int score;
public:
string getName(){return name;}
void Init(){
string nam;
cout<<"请输入课程名:"<〈endl;
cin〉〉nam;
setName(nam);
}
void setName(string nam){name=nam;}
};
class OpreatorCou{
public:
Classes c1;
Course co[20];
int Mark[100][100],StuAll[100],n;
void setN(int nn){n=nn;}
int getN(){return n;}
int getMark(){return Mark[100][100];}
Course getCo(){return co[20];}
void IN(){
cout<〈"请输入课程数量:"〈〈endl;
cin>>n;
for(int i=0;i〈n;i++){
co[i].Init();
}
ofstream outS;
outS。open(”course.txt”,ios::out);
if(!outS){
cerr〈〈”文件打不开"〈〈endl;
abort();
}
for(int i=0;i〈n;i++){
outS〈<co[i].getName()〈〈endl;
}
outS。close();
}
void input(Course co[20],int n,Student c[], int number ){
int s;
for(int i=0;i〈n;i++){
for(int j=0;j〈number;j++){
cout<〈”请输入”<〈c[j].getName()〈<"的”<〈co[i].getName()〈〈"成绩"〈〈endl;
cin>>s;
if(s〈0||s〉100){
cout〈<"你输入的成绩有误请重新输入!(成绩范围为0-100!)”〈<endl;
j=j—1;
}
else{
Mark[i][j]=s;
}
}
}
ofstream out;
out。open(”score。txt",ios::out);
if(!out){
cerr〈<"文件打不开"<〈endl;
abort();
}
for(int i=0;i<n;i++){
out〈<co[i]。getName();
for(int j=0;j<number;j++){
out<<” ”<<Mark[i][j]〈〈" ";
}
out〈<endl;
}
out。close();
}
void CountStu(int Mark[100][100],int number,int n){
for(int i=0;i<number;i++){
int s=0;
for(int j=0;j〈n;j++){
s=s+Mark[j][i];
}
StuAll[i]=s;
}
}
void CountCouAvg(int Mark[100][100],Student c[],int number,Course co[],int n){
float CouAll[10];
for(int i=0;i〈n;i++){
float s=0.0;
for(int j=0;j〈number;j++){
s=s+Mark[i][j];
}
CouAll[i]=s/n;
}
for(int i=0;i〈n;i++){
cout<〈co[i].getName()〈〈”的平均分是:”<〈(CouAll[i])〈〈endl;
}
for(int i=0;i〈n;i++){
for(int j=0;j<number;j++){
if(Mark[i][j]<CouAll[i]){
cout〈<c[j].getName()〈<"的”<〈co[i].getName()<〈"成绩小于平均分."〈〈endl;}
}
}
}
void showUnpass(int Mark[100][100],Student c[],int number,Course co[],int n){
for(int i=0;i〈n;i++){
for(int j=0;j〈number;j++){
if(Mark[i][j]〈60){
cout〈<c[j]。getName()〈<"的"〈〈co[i]。getName()<〈”成绩不及格!"〈<endl;
}
}
}
}
void showGood(int Mark[100][100],Student c[],int number,Course co[],int n){
for(int i=0;i〈n;i++){
for(int j=0;j〈number;j++){
if(Mark[i][j]〉90){
cout〈<c[j]。getName()<〈”的”〈〈co[i]。getName()<〈”成绩优秀!成绩为:"〈<Mark[i][j]〈〈endl;
}
}
}
}
void order(Student c[],int number,int StuAll[],int n){
for(int i=0;i<number;i++){
int sum=0;Student stu;
if(StuAll[i]〈StuAll[i+1]){
sum=StuAll[i];
StuAll[i]=StuAll[i+1];
StuAll[i+1]=sum;
stu=c[i];
c[i]=c[i+1];
c[i+1]=stu;
}
}
for(int i=0;i〈number;i++){
cout<<c[i]。getName()〈〈”的排名是:”〈〈(i+1)〈<" 总分:"〈〈StuAll[i]<<endl;
}
ofstream out;
out。open(”studentscore.txt”,ios::out);
if(!out){
cerr〈<"文件打不开"<〈endl;
abort();
}
for(int i=0;i<number;i++){
out〈〈c[i].getName()〈<” ”<<StuAll[i]<〈” "〈〈(i+1)〈<endl;
}
out.close();
}
void Delete(int Mark[100][100],Student c[],int number,int n){
string na;
cout<〈"请输入要删除的学生姓名:"<〈endl;
cin〉〉na;
for(int i=0;i〈number;i++){
if(c[i].getName()==na){
for(i;i〈number;i++){
c[i]=c[i+1];
}
for(int j=0;j〈n;j++){
for(int k=i;k<number;k++){
Mark[j][k]=Mark[j][k+1];
}
}
}
else{cout〈〈”您要删除的学生不存在!”<〈endl;}
}
cout〈〈"删除成功!"〈<endl;
}
void ReadText(Student c[],int number,Course co[],int n){
char sname[30],sex[30];
int sno;
ifstream in(”student.txt”,ios::in);
if(!in){
cerr〈<”文件打不开”〈〈endl;
abort();
}
int i=—1;
in〉>sno〉>sname〉〉sex;
while(!in。eof()){
i=i+1;
c[i]。setNo(sno);
c[i].setName(sname);
c[i].setSex(sex);
in>〉sno>>sname〉>sex;
}
c1。setStudent(c);
c1。setNumber(i+1);
in。close();
char nam[20];
ifstream ins(”course。txt”,ios::in);
if(!ins){
cerr〈〈"文件打不开”〈〈endl;
abort();
}
int j=—1;
ins>>nam;
while(!ins.eof()){
j++;
co[j]。setName(nam);
ins〉>nam;
}
setN(j+1);
ins。close();
cout〈<”读取文件完毕,请继续操作!"〈〈endl;
}
};
主函数:
#include”class。cpp”
#include〈iostream〉
void showMenue(){
cout<<”********学生成绩管理系统********”〈<endl;
cout〈〈"请选择功能:"〈<endl;
cout〈<”1 输入学生成绩”<<endl;
cout〈<”2 根据成绩排序输出。"〈〈endl;
cout〈〈”3 显示成绩大于90分的学生”〈〈endl;
cout<〈”4 显示不及格学生”<<endl;
cout<<”5 按姓名查找”〈〈endl;
cout〈〈”6 按学号查找"<〈endl;
cout〈〈”7 显示成绩小于课程平均分的学生”〈〈endl;
cout〈〈”8 删除学生信息”<〈endl;
cout<<”0 退出”<〈endl;
cout<〈endl;
}
void main(){
int choice,input ;
cout〈<"请选择初始化方式:1.手动输入 2。从文件读取”〈〈endl;
cin〉〉input;
OpreatorCou op;
if(input==1){ op.c1。Init();op。IN();}
if(input==2){op.ReadText(op.c1。c,op。c1.getNumber(),op。co,op。getN()); }
do{
showMenue();
cin〉〉choice;
switch(choice){
case 1: op。input(op。co,op.getN(),op。c1。c,op。c1。getNumber());break;
case 2: { op。CountStu(op。Mark,op.c1。getNumber(),op。getN());
op.order(op。c1。c,op。c1.getNumber(),(op.StuAll),op。getN());
break;
}
case 3: op。showGood(op。Mark,op。c1。c,op。c1。getNumber(),op.co,op.getN()); break;
case 4: op.showUnpass(op。Mark,op。c1。c,op.c1。getNumber(),op。co,op。getN());break;
case 5: op。c1.searchByName();break;
case 6: op。c1。serchByNo(); break;
case 7: op.CountCouAvg(op.Mark,op.c1.c,op。c1.getNumber(),op。co,op。getN());break;
case 8: op。Delete(op。Mark,op。c1.c,op。c1.getNumber(),op.getN());break;
case 0: break;
default: cout〈〈”您输入的有误,请重新输入!"<<endl;
}
}while(choice!=0);
}
运行界面:
展开阅读全文