📄 student.cpp
字号:
//文件Student.cpp
//类Student的实现
#include<iostream.h>
#include<string.h>
#include"student.h"
Student::Student() // 初始化
{
int i;
for(i=0;i<60;i++)
{ stu[i].mingci=0;
stu[i].math=0;
stu[i].eng=0;
stu[i].tiyu=0;
stu[i].sum=0;
}
}
int Student::judge() //判断记录是否存在
{ int i,j=0;
for(i=0;i<60;i++)
{
if (stu[i].sum!=0) j++;
}
return j;
}
int Student::fangshi(int p) //选择查询的方式
{
char *na,*I,q;int i,mc,k=-1,m=0;
do{
if(m>1) cout<<"\n信息有重复,请选择另外的方式:";cin>>q;
switch(q)
{
case '1': na=new char[20];cout<<"姓名 : ";cin>>na; //按姓名
for(i=0;i<60;i++)
if(stu[i].sum!=0)
if(!strcmp(stu[i].name,na)) k=i,m++,display(k);
break;
case '2': I=new char[20];cout<<"学号 : ";cin>>I; //按学号
for(i=0;i<60;i++)
if(stu[i].sum!=0)
if(!strcmp(stu[i].ID,I)) k=i,m++,display(k);
break;
case '3':
cout<<"名次:";cin>>mc;
for(i=0;i<60;i++) //按名次
if(stu[i].mingci==mc) k=i,m=0,display(k);
break;
default: k=-2;break;
}
if(p==3) m=0;
}while(m!=1&&m!=0); //如果是执行删除或修改:判断无重复则跳出循环,否则选择另外的方式
//如果是执行查询功能则输出相应信息后直接跳出
return k;
}
void Student::input(int b) //输入记录
{
stu[b].name=new char[20];
stu[b].ID=new char[20];
cout<<"请注意! 成绩范围(1~150)\n";
cout<<"姓名\t"<<"学号\t"<<"数学\t"<<"英语\t" <<"体育\t\n";
cin>>stu[b].name>>stu[b].ID>>stu[b].math>>stu[b].eng>>stu[b].tiyu;
if(stu[b].math>150||stu[b].eng>150||stu[b].tiyu>150||stu[b].math<0||stu[b].eng<0||stu[b].tiyu<0)
{shanchu(b);cout<<"您输入的成绩有误,已删除!";} //成绩不在(0~150)之间则直接删除
else stu[b].sum=stu[b].math+stu[b].eng+stu[b].tiyu;
}
void Student::paiming(int n) //对输入的成绩排名
{int i,j,a,b,c,d,k=0,h=n,x=0;char *np,*ni;
for(k=0;k<n;k++)
{ for(i=0,j=1;i<60,j<60;i++,j++)
if(stu[i].sum>stu[j].sum) //按总分排序
{
np=stu[i].name; stu[i].name=stu[j].name; stu[j].name=np;
ni=stu[i].ID; stu[i].ID=stu[j].ID; stu[j].ID=ni;
a=stu[i].math; stu[i].math=stu[j].math; stu[j].math=a;
b=stu[i].eng; stu[i].eng=stu[j].eng; stu[j].eng =b;
c=stu[i].tiyu; stu[i].tiyu=stu[j].tiyu; stu[j].tiyu=c;
d=stu[i].sum; stu[i].sum=stu[j].sum; stu[j].sum=d;
}
}
for(i=60;i>=0;i--) //排名
if(stu[i].sum!=0) stu[i].mingci=x++;
}
void Student::display(int i) //输出记录
{
cout<<"姓名:"<<stu[i].name<<" 学号: "<<stu[i].ID<<" 数学:"<<stu[i].math <<" 英语: "<<stu[i].eng<<endl;
cout<<"体育: "<<stu[i].tiyu<<" 总分: "<<stu[i].sum<<" 名次: "<<stu[i].mingci<<endl<<endl;
}
void Student::save() //保存学生记录到文件“学生成绩”中
{ int i;
fstream outf("学生成绩.txt",ios::out);
if(!outf)
{
cout<<"can not open f6.txt\n";
}
for(i=59;i>=0;i--)
if(stu[i].sum!=0)
outf<<"姓名:"<<stu[i].name<<" 学号: "<<stu[i].ID<<" 数学:"<<stu[i].math <<" 英语: "<<stu[i].eng
<<" 体育: "<<stu[i].tiyu<<" 总分: "<<stu[i].sum<<" 名次: "<<stu[i].mingci<<endl<<endl;
cout<<"记录已经被成功保存\n" ;
outf.close( );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Student::add() //添加记录
{
int n;
n=judge(); //判断是否有记录
if (n==0)
{
cout<<"记录中没有信息,请添加记录信息 !\n";
input(0);
}
else
input(n);
paiming(n); //自动排名
}
void Student::output() //显示记录
{
int i,n;
n=judge(); //判断是否有记录
if (n==0)
cout<<"无记录!请输入记录好后,再执行此功能。\n";
else
paiming(n); //自动排名
for(i=59;i>=0;i--)
if (stu[i].sum!=0) display(i);
}
void Student::del() //删除记录 可以按姓名,学号或名次查询要删除的记录
{
int n,m=-1,k=1;char p;
n=judge(); //判断是否有记录
if (n==0)
cout<<"无记录!请输入记录好后,再执行此功能。";
else
{
cout<<"请选择删除记录的方式 :1.按姓名删除 2.按学号删除 3.按名次删除\n请选择: ";
m=fangshi(k); //选择查询方式
if(m!=-1&&m!=-2)
{
cout<<"确认要删除此记录吗?(Y)\n";
cin>>p;
if(p=='Y')
{shanchu(m);cout<<"操作成功,已删除此记录\n";}
else
{ cout<<"记录未删除,返回主菜单\n";}
}
if(m==-2)
cout<<"操作失败,选择的删除方式错误!\n";
if(m==-1)
cout<<"不好意思,未找到您要删除的数据!\n";
}
}
void Student::change() //修改记录 可以按姓名,学号或名次查询要修改的记录
{
int n,m=-1,k=2;char p;
n=judge(); //判断是否有记录
if (n==0)
cout<<"无记录!请输入记录好后,再执行此功能。\n";
else
{cout<<"请选择‘修改记录’的方式:1,姓名 2,学号 3,名次 \n请选择: ";
m=fangshi(k); //选择查询方式
if(m!=-1&&m!=-2)
{
cout<<"确认要修改此记录吗?(Y)\n";
cin>>p;
if(p=='Y')
{input(m);cout<<"操作成功,已修改此记录\n";}
else
cout<<"记录修改,返回主菜单\n";
}
if(m==-2)
cout<<"操作失败,选择查询方式出错!\n";
if(m==-1)
cout<<"不好意思,未找到您要修改的信息!\n";
}
}
void Student::serch() //查询记录 可以按姓名,学号或名次查询
{
int n,m=-1,k=3;
n=judge(); //判断是否有记录
if (n==0)
cout<<"无记录!请输入记录好后,再执行此功能。\n";
else
{cout<<"请选择查询记录者的方式 :1,按姓名查询 2,按学号查询 3,按名次查询\n请选择: ";
m=fangshi(k);
if(m==-2)
cout<<"操作失败,选择的查询方式出错!\n";
if(m==-1)
cout<<"不好意思,未找到您要查询的信息!\n";
}
}
void Student::order() //按名次排序,分别用升序和降序输出结果
{
int i,n=0,m;
for(i=0;i<60;i++)
{ if (stu[i].sum!=0) n++,m=i; } //判断是否有记录
if (n==0)
cout<<"无记录!请输入记录好后,再执行此功能\n";
else if(n==1){ cout<<"请注意,一个数据成员不能排序!\n";display(m);}
else
{
paiming(n); //按总分排序排名
cout<<"\n按名次的升序输出记录:\n";
for(i=59;i>=0;i--)
if (stu[i].sum!=0)
display(i);
cout<<"\n按名次的降序输出记录:\n";
for(i=0;i<60;i++)
if (stu[i].sum!=0)
display(i);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -