c++课程设计

来源:互联网 发布:appium使用教程python 编辑:程序博客网 时间:2024/05/23 02:06

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; }


开始界面




成绩录入后



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



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



平均分




0 0
原创粉丝点击