课程设计

学生成绩管理系统功能的基本要求:

1具备对成绩的管理功能(添加、删除、排序)。

2具备对成绩的统计功能(及格率、优秀率等)。

3具备对成具备按学号、姓名、或课程名查询成绩的功能。

# include <iostream>
# include <fstream>
# include <string.h>
#include<iomanip>
#include <conio.h>//用getch();
using namespace std;
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Student
{
public:
 char name[20];
 char Id[20];
 char grade[20];
 int Cnum;       //C课程得分
 int Mnum;       //数学课程得分
 int Enum;       //英语课程得分
 float sum;        //总分
 float average;
 Student * Next;
 void Input()
 {
  cout<<"\t\t请输入学生的姓名:";  cin>>name;
  cout<<"\t\t请输入学生的学号:";  cin>>Id;
  cout<<"\t\t请输入学生的班级:";  cin>>grade;
  cout<<"\t\t请输入C课程的成绩:";  cin>>Cnum;
  cout<<"\t\t请输入数学课程的成绩:";  cin>>Mnum;
  cout<<"\t\t请输入英语课程的成绩:";  cin>>Enum;
  sum=Cnum+Mnum+Enum;
  average=sum/3.0;
  }
 void ReadFile(istream & in)
 {
  in>>name>>grade>>Id>>Cnum>>Mnum>>Enum>>sum>>average;
 }
 void Show()
 {
  cout<<"姓名:"<<name<<endl<<"学号:"<<Id<<endl<<"班级:"<<grade<<endl<<"C++:"<<Cnum<<endl
   <<"数学:"<<Mnum<<endl<<"外语:"<<Enum<<endl<<"总成绩:"<<sum<<endl<<"平均分:"<<average<<endl;
 }
};
class Studentmassage
{
public:
 Studentmassage();
  void ShowMenu();
 void Find();
 void ModifyItem();
 void RemoveItem();
 void Swap(Student *,Student *);
 void Sort();
 int ListCount();
 void Display()
 {
  for(Student * p=Head->Next;p!=End;p=p->Next)
   p->Show();
  cout<<"输入任意字符!继续……";
  getch();
 }
 void AddItem()
 {
  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("sort.txt");
 if(!in)
  cout<<"这是一个新系统,无学生信息。请先输入。"<<endl;
 else
 {
  while(!in.eof())
  {
   End->ReadFile(in);
   if(End->name[0]=='\0')break;
   End->Next=new Student;
   End=End->Next;
  }
  in.close();
  cout<<"\t\t读取学生信息成功!"<<endl;
 }
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ShowMenu()                  
{
  cout<<"〓〓〓〓〓〓〓〓〓〓  ☆   学 生 成 绩 管 理 系  统     ☆  〓〓〓〓〓〓〓〓〓〓"<<endl;
  cout<<"〓〓〓〓〓〓〓★★★★★         ★★★★★★★         ★★★★★〓〓〓〓〓〓〓"<<endl;
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          1.增加学生成绩        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          2.显示学生成绩        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          3.排序统计成绩        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          4.查找学生成绩        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          5.删除学生成绩        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          6.修改学生信息        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
  cout<<"〓〓〓〓〓〓〓〓〓★  ☆          0.安全退出系统        ☆  ★〓〓〓〓〓〓〓〓〓"<<endl;
 cout<<"\n\t\t\n\t\t请选择:";
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Find()
{
 char name[20] ,Id[10];
 int x;
 int z;
 Student * p=NULL;
 cout<<"\n\t\t*********************************\n";
 cout<<"\t\t※ 1.按学生的姓名查找\n\t\t※ 2.按学生学号查找\n\t\t※ 3.查找学生课程成绩";
 cout<<"\n\t\t*********************************\n请选择:";
 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;
 case 3:
	 {
		 p=Head->Next;
 cout<<"\t\t请选择你要查找的课程名称:";
 cout<<"\n\t\t*********************************\n";
 cout<<"\t\t※ 1.C++\n\t\t※ 2.数学\n\t\t※ 3.英语";
 cout<<"\n\t\t*********************************\n请选择:";
 cin>>z;
 switch(z)
 {
case 1:
 cout<<"C++成绩为:"<<endl;
 while(p!=End)
 {
	 cout<<p->Cnum<<endl;
	 p=p->Next;
 }

 cout<<"输入任意字符!继续……";
    getch();
    break;
case 2:
 cout<<"数学成绩为:"<<endl;
 while(p!=End)
 {
	 cout<<p->Mnum<<endl;
	 p=p->Next;
 }

 cout<<"输入任意字符!继续……";
    getch();
    break;
case 3:
 cout<<"英语成绩为:"<<endl;
 while(p!=End)
 {
	 cout<<p->Enum<<endl;
	 p=p->Next;
 }

 cout<<"输入任意字符!继续……";
    getch();
    break;
	}
	 }
 }
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ModifyItem()
{
char name[20];
 char Id[20];
int y;
Student *p=NULL;
  cout<<"\n\t\t*********************************\n";
 cout<<"\t\t※ 1.按学生的姓名修改\n\t\t※ 2.按学生学号修改";
 cout<<"\n\t\t*********************************\n请选择:";		
  cin>>y;		 
  switch(y)	
  {
case 1:	 
	{       
		cout<<"  请输入您要修改的学生的姓名:";     
		cin>>name;
if(p=FindItem(name))
{
cout <<"\t<<已找到学生的信息,请输入新的信息!"<<endl;
  p->Next->Input();
  cout<<"修改成功!"<<endl;
  cout<<"输入任意字符!继续……";
 
  getch();
 }
 else
 {
  cout<<"\t\t没有找到!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
}break;
	}

case 2:	 
	{      
		cout<<"  请输入您要修改的学生的学号:";   
		cin>>Id;
		if(p=FindID(Id))
{
cout <<"\t<<已找到学生的信息,请输入新的信息!"<<endl;
  p->Next->Input();
  cout<<"修改成功!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
 else
 {
  cout<<"\t\t没有找到!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
}
	}break;
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::RemoveItem()         // 删除信息
{
 char name[20];
 char Id[20];
 int a;
 Student * p=NULL,*temp=NULL;
 cout<<"\n\t\t*********************************\n";
 cout<<"\t\t※ 1.按学生的姓名删除\n\t\t※ 2.按学生学号删除";
 cout<<"\n\t\t*********************************\n请选择:";		
  cin>>a;
  switch(a)
  {
  case 1:
 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();
 }break;
 case 2:
 cout<<"\t\t请输入要删除的学生的学号:"<<endl;cin>>Id;
 if(p=FindID(Id))
 {
  temp=p->Next;
  p->Next=p->Next->Next; 
  delete temp;
  cout<<"\t\t删除成功!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
 else
 {
  cout<<"\t\t没有找到!"<<endl;
     cout<<"输入任意字符!继续……";
  getch();
 }break;
  }
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Swap(Student *p1, Student *p2)//交换两个combox变量的数据域
{
 Student *temp=new Student; 
 strcpy(temp->name,p1->name);
 strcpy(temp->Id,p1->Id);
 temp->Cnum=p1->Cnum;
 temp->Mnum=p1->Mnum;
 temp->Enum=p1->Enum;
 temp->sum=p1->sum;
 strcpy(p1->name,p2->name);
 strcpy(p1->Id,p2->Id);
 p1->Cnum=p2->Cnum;
 p1->Mnum=p2->Mnum;
 p1->Enum=p2->Enum;
 p1->sum=p2->sum;
 strcpy(p2->name,temp->name);
 strcpy(p2->Id,temp->Id);
 p2->Cnum=temp->Cnum;
 p2->Mnum=temp->Mnum;
 p2->Enum=temp->Enum;
 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()//对当前链表进行排序
{int Ca=0;int Ma=0; int Ea=0;double m1=0; double j1;
double m2=0; double j2;double m3=0; double j3;
double e1=0; double h1;
double e2=0; double h2;double e3=0; double h3;
 cout <<"Sorting..."<<endl;
 Student *p=NULL,*p1=NULL,*k=NULL;
 int n=Studentmassage::ListCount();
 if(n<2) 
  return;
 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;
 p=Head->Next;
for(p=Head->Next;p!=End;p=p->Next)
{
Ca=Ca+p->Cnum;
Ma=Ma+p->Mnum;
Ea=Ea+p->Enum;
}
cout<<" C++平均分 "<<" 数学平均分 "<<" 英语平均分"<<endl<<endl;
cout<<" "<<Ca/n<<" "<<Ma/n<<" "<<Ea/n<<endl<<endl;
for(p=Head->Next;p!=End;p=p->Next)
{if(p->Cnum>=60)
m1++;
if(p->Mnum>=60)
m2++;
if(p->Enum>=60)
m3++;
}
j1=m1/n;
j2=m2/n;
j3=m3/n;
cout<<" C++及格率为: "<<setiosflags(ios::fixed)<<setprecision(2)<<j1*100<<" % "<<endl;
cout<<" 数学及格率为: "<<setiosflags(ios::fixed)<<setprecision(2)<<j2*100<<" % "<<endl;
cout<<" 英语及格率为: "<<setiosflags(ios::fixed)<<setprecision(2)<<j3*100<<" % "<<endl;
for(p=Head->Next;p!=End;p=p->Next)
{if(p->Cnum>=90)
e1++;
if(p->Mnum>=90)
e2++;
if(p->Enum>=90)
e3++;
}
h1=e1/n;
h2=e2/n;
h3=e3/n;
cout<<" C++优秀率为: "<<setiosflags(ios::fixed)<<setprecision(2)<<h1*100<<" % "<<endl;
cout<<" 数学优秀率为: "<<setiosflags(ios::fixed)<<setprecision(2)<<h2*100<<" % "<<endl;
cout<<" 英语优秀率为: "<<setiosflags(ios::fixed)<<setprecision(2)<<h3*100<<" % "<<endl;
getch();
return;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int main()
{
 int x,i=0;
float quit=false;
 Studentmassage Grade;
 cout<<"按任意键开始……";
  getch();
 while(!quit)
 {
  system("cls");
  Grade.ShowMenu();
  cin>>x;
  switch(x)
  {
  case 0:quit=true;break;
  case 1:Grade.AddItem();break;
  case 2:Grade.Display();break;
  case 3:Grade.Sort();break;
  case 4:Grade.Find();break;
  case 5:Grade.RemoveItem();break;
  case 6:Grade.ModifyItem();break;
  }
 }
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值