您的位置:首页 > 编程语言 > C语言/C++

c++课程设计

2014-06-20 08:02 513 查看
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;
}


开始界面



成绩录入后



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



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



平均分

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: