用C++编写学生成绩管理系统

用C++编写学生成绩管理系统,要求能够输出学生的姓名,学号,语文,数学,英语,还要求用链表把成绩从高到低输出.
题目1:学生成绩管理系统
问题描述:需要存储每个学生的姓名、学号、语文,数学,英语的成绩以及三门功课的总成绩。
要求:
1、定义一个学生类Student。
2、每个学生的学号在创建学生对象时自动生成,每个学生的学号自动加1。
3、重载流插入运算符,使得能对Student类的对象进行输入操作,输入信息包括学生的姓名、语文,数学,英语成绩。
4、重载流提取运算符,使得能对Student类的对象进行输出操作 ,输出/显示学生的所有信息,输出信息包括学生的姓名、学号、语文,数学,英语的成绩以及三门功课的总成绩。
5、定义const成员函数:分别获取学生姓名、学号、语文,数学,英语的成绩以及三门功课的总成绩。
6、定义非const成员函数:分别修改/设置学生姓名、语文,数学,英语的成绩以及三门功课的总成绩。
7、把创建的所有学生对象按照总分从高到低的顺序组织在一个链表中,并通过对链表的操作能方便查询、修改、删除及添加等操作。

第1个回答  推荐于2016-01-03
#include<iostream.h>
#include<string.h>
#include<iomanip.h>
#include<ctime>
#include<conio.h>
#include<iostream>
struct student //定义一个学生结构体
{
char name[8];
int num;
char add[20];
int GS,YY,JSJ,SUM;
};

int s=0;
class student1 //定义一个学生类
{
private:
student stu[40];
char name,add;
int num;
int GS,YY,JSJ,SUM;

public:
void sr(char *,int,char *,int,int,int);
void print(int);
int jc(int xxh)
{
int m=0;
while(m<=s+1)
if(xxh==stu[m++].num)
break;
if(m>s+1)
return 0;
else
return 1;
}
void cz(int);
void sc(int);
void sum(int);
};

void student1::sr(char *xm,int xh,char *dz,int gs,int yy,int jsj) //输入模块
{
strcpy(stu[s].name,xm);
stu[s].num=xh;
strcpy(stu[s].add,dz);
stu[s].GS=gs;
stu[s].YY=yy;
stu[s].JSJ=jsj;
}

void student1::print(int s) //输出模块
{
cout<<s<<"\t";
cout<<stu[s].name<<"\t";
cout<<stu[s].num<<"\t";
cout<<stu[s].add<<"\t";
cout<<stu[s].GS<<"\t";
cout<<stu[s].YY<<"\t";
cout<<stu[s].JSJ<<"\t";
cout<<endl;
}

void student1::cz(int s) //查找模块
{
int xxh,p;
while(s==0)
{
cout<<"没有记录,请先输入记录!"<<endl;
break;
}
if(s!=0)
{cout<<"请输入您要查找的学号:";
cin>>xxh;
while (xxh<100000||xxh>999999) //判断输入的学号是否正确
{
cout<<"您输入的学号不正确,请输入一个六位数的学号"<<endl;
cin>>xxh;
}
while(s!=0) //查找是否有符合条件的记录
{
p=1;
if (xxh==stu[s].num)
{
cout<<"姓名\t学号\t地址\t高数\t英语\t计算机"<<endl;
cout<<stu[s].name<<"\t";
cout<<stu[s].num<<"\t";
cout<<stu[s].add<<"\t";
cout<<stu[s].GS<<"\t";
cout<<stu[s].YY<<"\t";
cout<<stu[s].JSJ<<endl;
getch();
break;
}
else
p=0;
s--;
}
if(p==0)
cout<<"很抱歉,没有找到您要查找的学号!"<<endl;}
getch();
}

void student1::sc(int n) //删除模块
{
int xxh,p;
char da;
while(s==0)
{
cout<<"没有记录,请先输入记录!"<<endl;
break;
}
if(s!=0)
{
cout<<"请输入您要删除的学号:";
cin>>xxh;
while (xxh<100000||xxh>999999)
{
cout<<"您输入的学号不正确,请您输入一个六位数的学号" <<endl;
cin>>xxh;
}

for(int i=1;i<=n;i++)
{
if(stu[i].num!=xxh)
p=0;
if(stu[i].num==xxh)
{
cout<<"姓名\t学号\t地址\t高数\t英语\t计算机"<<endl;
cout<<stu[i].name<<"\t";
cout<<stu[i].num<<"\t";
cout<<stu[i].add<<"\t";
cout<<stu[i].GS<<"\t";
cout<<stu[i].YY<<"\t";
cout<<stu[i].JSJ<<endl;
cout<<"您确实要删除该学生的记录吗?(y/n)";
cin>>da;
if(da=='y'||da=='Y')
{
for(int j=i;j<=n-1;j++) //删除记录
{
strcpy(stu[j].name,stu[j+1].name);
stu[j].num=stu[j+1].num;
strcpy(stu[j].add,stu[j+1].add);
stu[j].GS=stu[j+1].GS;
stu[j].YY=stu[j+1].YY;
stu[j].JSJ=stu[j+1].JSJ;

}
cout<<"该记录已删除!"<<endl;
s=s-1;
p=1;
break;
}
else
{
cout<<"该记录未删除!"<<endl;
p=1;
}
}
}
if(p==0)
cout<<"很抱歉,没有找到您要找的学号!"<<endl;
}
getch();
}

void student1::sum(int s) //排序模块
{
int chang;
int b[40];
while(s==0)
{
cout<<"没有记录,请先输入记录!"<<endl;
break;
}
if(s!=0)
{
cout<<"姓名\t学号\t地址\t英语\t";
cout<<"高数\t计算机\t总分"<<endl;

for(int k=1;k<=s;k++)
{
b[k]=stu[k].GS+stu[k].YY+stu[k].JSJ;
stu[k].SUM=stu[k].GS+stu[k].YY+stu[k].JSJ;
}

for(int i=1;i<=s;i++) //利用冒泡法对B[]进行排序
for(int j=1;j<=s-i;j++)
if(b[j]<b[j+1])
{
chang=b[j];
b[j]=b[j+1];
b[j+1]=chang;
}
for(int h=1;h<=s;h++) //输出与B[]中相同总分所对应的内容
for(int e=1;e<=s;e++)
if(b[h]==stu[e].SUM)
{
cout<<stu[e].name<<"\t";
cout<<stu[e].num<<"\t";
cout<<stu[e].add<<"\t";
cout<<stu[e].YY<<"\t";
cout<<stu[e].GS<<"\t";
cout<<stu[e].JSJ<<"\t";
cout<<stu[e].SUM<<endl;
}
}

getch();
}

void main()
{
student1 st;
char da,a;
char *xm,*dz;
int gs,yy,jsj,xh;
time_t t;
time(&t);
while(1)
{
system("cls");
cout<<" 版权所有:张珊珊 肖朋丽 姚约汉"<<endl;
cout<<endl;
cout<<" 学生成绩管理系统"<<endl;
cout<<" 显示系统时间和日期:"<<ctime(&t)<<endl;
cout<<"1.输入/添加学生资料"<<endl;
cout<<"2.显示学生资料"<<endl;
cout<<"3.按学号查找"<<endl;
cout<<"4.删除记录"<<endl;
cout<<"5.按总分进行排序"<<endl;
cout<<"6.退出"<<endl;
cout<<"请选择操作(1-6)"<<endl;
cin>>a;
t: if(a=='6') break;
switch (a)
{
case '1':
{
cout<<"请依次输入学生的姓名,学号,地址,高数,英语,计算机:"<<endl;
xm=new char[];dz=new char[];
cin>>xm>>xh>>dz>>gs>>yy>>jsj;
while(st.jc(xh)) //调用JC模块判断学号是否重复
{
cout<<"学号重复,请重新输入!"<<endl;
cin>>xh;
}
s=s+1;
st.sr(xm,xh,dz,gs,yy,jsj);
cout<<"是否继续输入?(y/n)";
cin>>da;
while (da=='y'||da=='Y') //判断是否要继续输入
{
cout<<"请依次输入学生的姓名,学号,地址,高数,英语,计算机:"<<endl;
xm=new char[];dz=new char[];
cin>>xm>>xh>>dz>>gs>>yy>>jsj;
while(st.jc(xh))
{
cout<<"学号重复,请重新输入!"<<endl;
cin>>xh;
}
s=s+1;
st.sr(xm,xh,dz,gs,yy,jsj);
cout<<"是否继续输入?(y/n)";
cin>>da;

}
getch();
};break;

case '2':
{
if(s==0) //判断是否有记录输入
{
cout<<"没有记录,请先输入记录!"<<endl;
getch();
break;
}
if(s!=0)
{
cout<<"序号"<<"\t";
cout<<"姓名"<<"\t";
cout<<"学号"<<"\t";
cout<<"地址"<<"\t";
cout<<"高数"<<"\t";
cout<<"英语"<<"\t";
cout<<"计算机"<<endl;
for(int i=1;i<=s;i++)
st.print(i);
getch();
}
};break;
case '3':st.cz(s);break;
case '4':st.sc(s);break;
case '5':st.sum(s);break;
default:
{
while(a=='0'||a>'6') //判断选项是否正确
{
cout<<"错误选项,请重新选择!"<<endl;
cin>>a;
}
goto t;
};break;
}
}
cout<<"谢谢您的使用!"<<endl;
}

参考资料:自创

本回答被提问者采纳
相似回答