c++课程设计

1、学校学生成绩管理

假设一个学校成绩管理要管理的学生信息包括:班级、学号、姓名、学期、每门课程的成绩(每学期的课程门数是不一样的),对学生的成绩信息进行管理。

要求实现如下的功能:

实现:学生信息的录入;修改;删除和查询,按学期、学号、成绩不及格等查询。

输入学生的成绩信息,包含学号、姓名、性别等基本信息和各课成绩

显示全部学生各科成绩信息;

对各科分班进行成绩统计分析(总分、平均分、最高分、最低分、及格率等);

统计各科各分数段人数及班级信息;

按学号或姓名查找并显示某个学生的各科成绩;

按课程成绩或总分由高到低排序显示;

更新某个学生的基本信息或课程成绩;

设计一个菜单,具有上述规定的操作要求、退出系统等最基本的功能。


# include <iostream> 
# include <fstream> 
# include <string.h> 
/*#include<windows.h>  //延迟  
#include <dos.h>   //清屏*/
#include <conio.h>//用getch(); 
using namespace std; 
 class Student //定义学生类
{ 
public:  
 char name[20];   //姓名
 char Class[20];  //班级
 char Id[20];     //学号
 float shudian;    //数电成绩
 float modian;       //模拟成绩 
 float cchengxu;    //C++成绩
 float sum;        //总分      
 Student * Next; 
 void Input() //输入学生信息
 { 
	 cout<<"********************************************************"<<endl;
	 cout<<"*                                                      *"<<endl;
	 cout<<"*                         录入成绩!                   *"<<endl;
	 cout<<"*                                                      *"<<endl;
	 cout<<"********************************************************"<<endl;
     cout<<"             请输入学生的姓名:";  cin>>name; 
     cout<<"             请输入学生的班级:";  cin>>Class; 
     cout<<"             请输入学生的学号:";  cin>>Id; 
     cout<<"             请输入数字电路成绩:";  cin>>shudian;
     cout<<"             请输入模拟电路成绩:";  cin>>modian;
     cout<<"             请输入C++程序设计成绩:";  cin>>cchengxu;
     sum=shudian+modian+cchengxu; 
 } 
 void ReadFile(istream & in) 
 { 
  in>>name>>Class>>Id>>shudian>>modian>>cchengxu>>sum; 
 } 
 void Show() 
 {
	cout<<"********************************************************"<<endl;  
    cout<<"*                       该学生的成绩!                 *"<<endl;  
    cout<<"*                                                      *"<<endl;  
    cout<<"*            班级         姓名        学号             *"<<endl;  
    cout<<"*         "<<Class<<"     "<<name<<"    "<<Id<<"        *"<<endl;  
    cout<<"*                                                      *"<<endl;  
    cout<<"*                科目                成绩              *"<<endl;  
    cout<<"*              数字电路               "<<shudian<<"               *"<<endl;  
    cout<<"*              模拟电路               "<<modian<<"               *"<<endl;  
    cout<<"*              C++程序设计            "<<cchengxu<<"               *"<<endl;
	cout<<"*                                                      *"<<endl;
	cout<<"*                总分                "<<sum<<"               *"<<endl;
    cout<<"*                                                      *"<<endl;  
    cout<<"********************************************************"<<endl; 
 /* cout<<"姓名"<<'\t'<<"班级"<<'\t'<<"学号"<<'\t'<<"数字电路"<<'\t'<<"模拟电路"<<'\t'<<"C++程序设计"<<'\t'<<"总成绩"<<'\t'<<"平均成绩"<<endl
	  <<name<<'\t'<<Class<<'\t'<<Id<<'\t'<<shudian<<'\t'<<modian<<'\t'<<cchengxu<<'\t'<<sum<<'\t'<<sum/3<<endl; */
 } 
}; 
 

class Studentmassage //定义学生信息类
{ 
public: 
 Studentmassage(); 
 void ShowMenu();          //显示信息
 void Find();              //查找信息
 void Modify();        //修改信息 
 void Remove();        //删除信息
 void Average();           //求平均数
 void Swap(Student *,Student *); //交换两个结点的数据 
 void Sort();     //对当前链表进行排序
 int ListCount(); //统计当前链表的记录总数
 void uppassrate();//计算不及格率,优秀率
 void Display()   //输出学生信息
 { 
	 Student * p=Head->Next;
	 if (p==End)
	 {cout<<"请先输入学生信息"<<endl<<endl;}
	 else
	 {
        for(;p!=End;p=p->Next) 
        p->Show(); 
	 }
  cout<<"输入任意按键继续..."; 
  getch(); 
 } 


 void Add() //添加学生信息
 { 
  End->Input(); 
  End->Next=new Student; 
  End=End->Next; 
  cout<<"添加成功!"<<endl; 
  cout<<"输入任意按键继续..."; 
  getch(); 
 } 
private: 
 Student * Head,* End; 
 ifstream in; 
 ofstream out; 


 Student *FindItem(char * name) 
 { 
  for(Student * p=Head;p->Next!=End;p=p->Next)//成功则返回上一个指针,不成功就返回空 
   if(!strcmp(p->Next->name,name))return p; 
   return NULL; 
 } 
 Student *FindID(char * Id) 
 { 
  for(Student * p=Head;p->Next!=End;p=p->Next)//成功则返回上一个指针,不成功就返回空 
   if(!strcmp(p->Next->Id,Id))return p; 
   return NULL; 
 } 
}; 
 

Studentmassage::Studentmassage() //构造函数
{ 
 Head=new Student; 
 Head->Next=new Student; 
 End=Head->Next; 
 in.open("Studentmessage.txt");
 if(!in) 
  cout<<endl<<endl<<"请先录入信息"<<endl; 
 else 
 { 
   End->Next=new Student;
   End=End->Next; 
 } 
} 
 

 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
void Studentmassage::ShowMenu()                   
{ 
  cout<<"********************************************************"<<endl;  
  cout<<"*                                                      *"<<endl;  
  cout<<"*               欢迎登陆学生成绩查询系统               *"<<endl;  
  cout<<"*                                                      *"<<endl;  
  cout<<"********************************************************"<<endl; 
  cout<<"*                                                      *"<<endl; 
  cout<<"*                    1.录入学生信息                    *"<<endl; 
  cout<<"*                    2.显示学生信息                    *"<<endl; 
  cout<<"*                    3.学生成绩排序                    *"<<endl; 
  cout<<"*                    4.查找学生信息                    *"<<endl; 
  cout<<"*                    5.删除学生信息                    *"<<endl; 
  cout<<"*                    6.修改学生信息                    *"<<endl; 
  cout<<"*                    7.计算平均成绩                    *"<<endl;
  cout<<"*                    8.计算不及格率优秀率              *"<<endl;
  cout<<"*                    0.退出系统                        *"<<endl;
  cout<<"*                                                      *"<<endl;  
  cout<<"********************************************************"<<endl;
  
  cout<<"                        请选择:"; 
} 
 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
void Studentmassage::Find() 
{ 
 char name[20] ,Id[10]; 
 int x; 
 Student *p;p=Head->Next;
  if(p==End)
 {
 cout<<"请先输入学生信息"<<endl<<endl;
 cout<<"输入任意按键继续..."; 
 getch(); 
 }

  else
  {
 Student * p=NULL; 
 cout<<"1.按学生的姓名查找"<<endl<<"2.按学生学号查找"; 
 cout<<endl<<"请选择:"; 
 cin>>x; 
 switch(x) 
 { 
 case 1:{cout<<"\t\t请输入要查找的学生的姓名:";cin>>name; 
  if(p=FindItem(name)) 
  { 
   p->Next->Show(); 
   cout<<"输入任意按键继续..."; 
   getch(); 
  } 
  else 
  { 
   cout<<"\t\t没有找到该姓名的学生!"<<'\n'<<endl; 
   cout<<"输入任意按键继续..."; 
   getch(); 
  } 
     }break; 
 case 2: 
  { 
   cout<<"\t\t请输入要查找的学生的学号:";cin>>Id; 
   if(p=FindID(Id)) 
   { 
    p->Next->Show(); 
    cout<<"输入任意按键继续..."; 
    getch(); 
   } 
   else 
   { 
    cout<<"\t\t没有找到该学号的学生!"<<'\n'<<endl; 
    cout<<"输入任意按键继续..."; 
    getch(); 
   } 
  }break; 
 } 
  }
  
} 
 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
void Studentmassage::Modify()     //修改信息 
{ 
 char name[20]; 
 Student *p;p=Head->Next;


 if(p==End)
 {
 cout<<"请先输入学生信息"<<endl<<endl;
 cout<<"输入任意按键继续..."; 
 getch(); 
 }


else
{
 Student * p=NULL; 
 cout<<"\t\t请输入要修改的人的姓名:";cin>>name; 
 if(p=FindItem(name)) 
 { 
  cout<<"\t\t已找到学生的信息,请输入新的信息!"<<endl; 
  p->Next->Input(); 
  cout<<"修改成功!"<<endl; 
  cout<<"输入任意按键继续..."; 
  getch(); 
 } 
 else 
 { 
  cout<<"\t\t没有找到!"<<endl; 
  cout<<"输入任意按键继续..."; 
  getch(); 
 } 
}
} 
 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
void Studentmassage::Remove()         // 删除信息 
{ 
 char name[20]; 
 Student *p;p=Head->Next;
 if(p==End)
 {
 cout<<"请先输入学生信息"<<endl<<endl;
 cout<<"输入任意按键继续..."; 
 getch(); 
 }
	 else
	 {
        Student * p=NULL,*temp=NULL; 
         cout<<"\t\t请输入要删除的学生的姓名:"<<endl;
		 cin>>name; 
         if(p=FindItem(name)) 
		 { 
            temp=p->Next; 
            p->Next=p->Next->Next;  
            delete temp; 
            cout<<"\t\t删除成功!"<<endl; 
		    cout<<"输入任意按键继续..."; 
            getch(); 
		 } 
         else 
		 { 
            cout<<"\t\t没有找到!"<<endl; 
            cout<<"输入任意按键继续..."; 
            getch(); 
		 } 
	 }
} 

void Studentmassage::Average()//求平均成绩函数
{
	float aver;float b=0;


Student *p;p=Head->Next;
  if(p==End)
 {
 cout<<"请先输入学生信息"<<endl<<endl;
 cout<<"输入任意按键继续..."; 
 getch(); 
 }

  else
  {
	int n=Studentmassage::ListCount();
	Student *p;p=Head->Next;

	for(;p!=End;p=p->Next) 
	{b=b+p->sum;}
	aver=b/n;
	cout<<"共"<<n<<"位同学"<<endl<<"平均总成绩是:"<<aver<<endl;
	b=0;p=Head->Next;

    for(;p!=End;p=p->Next) 
	{b=b+p->shudian;}
	aver=b/n;
	cout<<"数字电路平均成绩是:"<<aver<<endl;
	b=0;p=Head->Next;

	for(;p!=End;p=p->Next) 
	{b=b+p->modian;}
	aver=b/n;
	cout<<"模拟电路平均成绩是:"<<aver<<endl;
	b=0;p=Head->Next;

	for(;p!=End;p=p->Next) 
	{b=b+p->cchengxu;}
	aver=b/n;
	cout<<"C++程序设计平均成绩是:"<<aver<<endl;

	cout<<"输入任意按键继续..."; 
    getch(); 
  }

	
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
void Studentmassage::Swap(Student *p1, Student *p2)//交换两个结点的数据 
{ 
 Student *temp=new Student;  
 strcpy(temp->name,p1->name); 
 strcpy(temp->Class,p1->Class); 
 strcpy(temp->Id,p1->Id); 
 temp->shudian=p1->shudian; 
 temp->modian=p1->modian; 
 temp->cchengxu=p1->cchengxu; 
 temp->sum=p1->sum; 
  
 strcpy(p1->name,p2->name); 
 strcpy(p1->Class,p2->Class);
 strcpy(p1->Id,p2->Id); 
 p1->shudian=p2->shudian; 
 p1->modian=p2->modian; 
 p1->cchengxu=p2->cchengxu; 
 p1->sum=p2->sum; 
  
 strcpy(p2->name,temp->name); 
 strcpy(p2->Class,temp->Class);
 strcpy(p2->Id,temp->Id); 
 p2->shudian=temp->shudian; 
 p2->modian=temp->modian; 
 p2->cchengxu=temp->cchengxu; 
 p2->sum=temp->sum; 
} 
 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
int Studentmassage::ListCount()//统计当前链表的记录总数 
{ 
 if(! Head) 
  return 0; 
 int n=0; 
 for(Student * p=Head->Next;p!=End;p=p->Next) 
 { 
  n++; 
 } 
 return n; 
} 
 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
void Studentmassage::Sort()//对当前链表进行排序 
{  
  Student *p;p=Head->Next;
  if(p==End)
 {
 cout<<"请先输入学生信息"<<endl<<endl;
 cout<<"输入任意按键继续..."; 
 getch(); 
 }
  
  else
  {
	int X;
	cout<<"1.按总分排序"<<endl
		<<"2.按数字电路成绩排序"<<endl
		<<"3.按模拟电路成绩排序"<<endl
		<<"4.按C++程序设计成绩排序"<<endl
		<<"请输入数字1-4:"<<endl;
	cin>>X;
 cout <<"Sorting..."<<endl; 
 Student *p=NULL,*p1=NULL,*k=NULL; 
 int n=Studentmassage::ListCount(); 
 if(n<2)  
  return; 
 switch(X)
 {
 case 1:
 for(p=Head->Next;p!=End;p=p->Next) 
  for(k=p->Next;k!=End;k=k->Next) 
  { 
   if(p->sum<k->sum) 
   { 
    Studentmassage::Swap(p,k); 
   } 
  } 
 cout <<"排序完成!"<<endl; 
 getch(); break;

 case 2:
 for(p=Head->Next;p!=End;p=p->Next) 
  for(k=p->Next;k!=End;k=k->Next) 
  { 
   if(p->cchengxu<k->cchengxu) 
   { 
    Studentmassage::Swap(p,k); 
   } 
  } 
 cout <<"排序完成!"<<endl; 
 getch(); break;

 case 3:
 for(p=Head->Next;p!=End;p=p->Next) 
  for(k=p->Next;k!=End;k=k->Next) 
  { 
   if(p->modian<k->modian) 
   { 
    Studentmassage::Swap(p,k); 
   } 
  } 
 cout <<"排序完成!"<<endl; 
 getch(); break;

 case 4:
 for(p=Head->Next;p!=End;p=p->Next) 
  for(k=p->Next;k!=End;k=k->Next) 
  { 
   if(p->shudian<k->shudian) 
   { 
    Studentmassage::Swap(p,k); 
   } 
  } 
 cout <<"排序完成!"<<endl; 
 getch(); break;
 }
  }
 return; 
} 


void Studentmassage::uppassrate()//计算不及格率优秀率
{
	Student *p;p=Head->Next;
if(p==End)
 {
 cout<<"请先输入学生信息"<<endl<<endl;
 cout<<"输入任意按键继续..."; 
 getch(); 
 }

	else
	{
	Student *p;p=Head->Next;
	float k=0;//不及格人数
	float h=0;//优秀率
	float uppassrateC;
	float uppassrateM;
	float uppassrateE;//不及格率
	float ExcellentrateC;
	float ExcellentrateM;
	float ExcellentrateE;//优秀率
	float n=Studentmassage::ListCount();//计算已经输入的学生总数
	for(;p!=End;p=p->Next)//计算数字电路不及格率
	{
	  if(p->shudian<60)
	  {k++;}
	  else if(p->shudian>90)
	  {h++;}
	}
	uppassrateC=k/n;
	ExcellentrateC=h/n;
	k=0;
	h=0;
	p=Head->Next;

	for(;p!=End;p=p->Next)//计算模拟电路不及格率
	{
	  if(p->modian<60)
	  {k++;}
	  else if(p->modian>90)
	  {h++;}
	}
	uppassrateM=k/n;
	ExcellentrateM=h/n;
    k=0;
	h=0;
	p=Head->Next;

	for(;p!=End;p=p->Next)//计算C++程序设计不及格率
	{
	  if(p->cchengxu<60)
	  {k++;}
	  else if(p->cchengxu>90)
	  {h++;}
	}
	uppassrateE=k/n;
	ExcellentrateE=h/n;


    cout<<"共"<<n<<"个学生"<<endl;
	cout<<"数字电路不及格率是:"<<uppassrateC<<"    "<<"优秀率是:"<<ExcellentrateC<<endl;
	cout<<"模拟电路不及格率是:"<<uppassrateM<<"    "<<"优秀率是:"<<ExcellentrateM<<endl;
	cout<<"C++程序设计不及格率是:"<<uppassrateE<<"    "<<"优秀率是:"<<ExcellentrateE<<endl;
    cout<<"输入任意按键继续..."; 
    getch(); 
	}

}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ 
int main() 
{ 
 int x=0; 
 bool quit=false; 

 cout<<"**************************************************************"<<endl
	 <<"*                                                            *"<<endl
     <<"*                       学生成绩管理系统                     *"<<endl
	 <<"*                                                            *"<<endl
	 <<"**************************************************************"<<endl;
 Studentmassage Grade; 
 cout<<endl<<"按任意键开始……"; 
  getch(); 
 while(!quit) 
 { 
  system("cls"); 
  Grade.ShowMenu(); 
  cin>>x; 
  switch(x) 
  { 
  case 0:quit=true;break; 
  case 1:Grade.Add();break; 
  case 2:Grade.Display();break; 
  case 3:Grade.Sort();break; 
  case 4:Grade.Find();break; 
  case 5:Grade.Remove();break; 
  case 6:Grade.Modify();break; 
  case 7:Grade.Average();break;
  case 8:Grade.uppassrate();break;
  } 
 } 
 return 0; 
}


开始界面




成绩录入后



学生信息修改后,且按总分排序



删除学生信息后,且按总分排序



平均分




  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值