⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 student.cpp

📁 c++ 课程设计 学生成绩管理系统 输入学生个人信息和各科成绩后
💻 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 + -