学生成绩管理系统

来源:互联网 发布:办公室人际知乎 编辑:程序博客网 时间:2024/04/27 17:42

#include<iostream>
#include<iomanip>     //格式控制
#include<fstream>     //文件流
#include<string>      //字符串系统函数
using namespace std;

//学生结构体
struct student
{
public:
 student *next;
 string name;
 int num;
 int Soft,Cisco,VC;     //Soft,Cisco,VC的成绩
 int SUM;        //总分
 student(string sname,int snum,int sSoft,int sCisco,int sVC) //构造函数
  {
   name=sname;
   num=snum;
   Soft=sSoft;
   Cisco=sCisco;
   VC=sVC;
  }
 };

//实现方法类
class SStu
{
 private:
 student *first;   //头接点
 public:
 SStu()          //构造函数
 {
  first=0;
 }
 ~SStu()      //析构函数
 {
  student *p;
  p=first;
  while(p)
  {
   p=p->next;
   delete first;
   first=p;
  }
   first=0;
 }
 void input();    //添加
 void dele();     //删除
 void update();   //修改
 void display();  //输出
 void search1();  //按NUM查询
 void search2();  //按NAME查询
 void order();    //排序
 void save();     //保存
 void order1();   //按NUM排序
 void order2();   //按SOFT成绩排序
 void order3();   //按CISCO成绩排序
 void order4();   //按VC成绩排序
 void order5();   //按SUM排序
};

 

//----添加----
void SStu::input()
{
 student *q;
 string name1;
 int num1;
 int Soft1,Cisco1,VC1;
  cout<<"输入学生信息,以空格间隔 "<<endl;
  cout<<"Num Name Soft Cisco VC "<<endl;
  cin>>num1>>name1>>Soft1>>Cisco1>>VC1; 
 q=new student(name1,num1,Soft1,Cisco1,VC1); //创建1个新学生结点,然后查找学生链表表尾结点,链接学生结点,输入学生信息
 q->next=NULL;
 q->SUM=Soft1+Cisco1+VC1;
 if(first)     // 链表非空
  {
   student *t;
   t=first;   
  while(t->next!=NULL) //查找到结尾
   {        
    t=t->next;
   }
  
  t->next=q;

  }
 else       //链表为空
  {
  first=q;
  }
}

//----修改----
void SStu::update()
{
 
 int num1;
 cout<<"输入要修改学生的Num: ";
 cin>>num1;
 student *p1,*p2;
 p1=first;
 while(p1)       //查找需要修改的学生学号
  {
    if(p1->num==num1) //修改第一个
       break;           
    else  
   {
    p2=p1;
    p1=p1->next;
   }
  }
 //修改学生信息
 if(p1)
 {
  cout<<"请输入修改后的信息:  "<<endl;
  cout<<"Name Soft Cisco VC"<<endl;
  cin>>p1->name>>p1->Soft>>p1->Cisco>>p1->VC;
  p1->SUM=p1->Soft+p1->Cisco+p1->VC;
  cout<<"修改成功!"<<endl;
 }
 else
     cout<<"未找到!"<<endl;
}


//----输出----
void SStu::display()
{
 student *p1;
 p1=first;
 cout<<"全部学生成绩信息如下:  "<<endl;
 cout<<"Num   Name   Cisco   Soft     Vc    Sum    /n";
 cout<<"____________________________________/n";
 while(p1)
  {
      cout<<setiosflags(ios_base::left)<<setw(7)<<p1->num
    <<setiosflags(ios_base::left)<<setw(7)<<p1->name
    <<setiosflags(ios_base::left)<<setw(7)<<p1->Soft
    <<setiosflags(ios_base::left)<<setw(7)<<p1->Cisco
    <<setiosflags(ios_base::left)<<setw(7)<<p1->VC
    <<setiosflags(ios_base::left)<<setw(7)<<p1->SUM
    <<endl;
   p1=p1->next;
  }
 cout<<"/n";
}


//----删除----
void SStu::dele()
{
 int num1;
 cout<<"请输入想要删除学生的Num: ";
 cin>>num1;
 student *p1,*p2;
 p1=first; 
 while(p1) //查找要删除的结点
  {
   if(p1->num==num1)
      break;           
   else  
   {
    p2=p1;
    p1=p1->next;
   }
  }
 //删除过程
 if(p1)
  {
   if(p1==first)   //若要删除的是第一个(头)结点
    {
    first=p1->next;
    delete p1;
    }
   else           //若要删除的是后续结点
   {       p1=p2->next ;
     p2->next=p1->next;
     delete p1;
    }
   cout<<"成功删除!"<<endl;
  }
 else
   cout<<"未找到想要删除的学生!/n";
}


//按Num查找
void SStu::search1()
{

 int num1;
 cout<<"输入要查询的Num: "<<endl;
 cin>>num1;
 student *p1,*p2;
 p1=first;
 while(p1)
 {
  if(p1->num==num1) //判断
   break;
  else
   {
    p2=p1;
    p1=p1->next;
   }
 }
 if(p1!=NULL)
 {
  cout<<"查到的学生信息如下"<<endl;
  cout<<"Num   Name   Cisco   Soft     Vc    Sum    /n";
  cout<<"____________________________________/n";
  cout<<setiosflags(ios_base::left)<<setw(7)<<p1->num
  <<setiosflags(ios_base::left)<<setw(7)<<p1->name
  <<setiosflags(ios_base::left)<<setw(7)<<p1->Soft
  <<setiosflags(ios_base::left)<<setw(7)<<p1->Cisco
  <<setiosflags(ios_base::left)<<setw(7)<<p1->VC
  <<setiosflags(ios_base::left)<<setw(7)<<p1->SUM
  <<endl;
 }
 else
     cout<<"未找到!/n";
}

//按Name查找
void SStu::search2()
{
 string name1;
 cout<<"要查询的学生Name"<<endl;
 cin>>name1;
 student *p1,*p2;
 p1=first;
 while(p1!=NULL) //查找过程
 {
  if(p1->name==name1)
   break;
  else
   {
    p2=p1;
    p1=p1->next;
   }
 }
 if(p1!=NULL)
  {
   cout<<"查到的学生信息如下"<<endl;
   cout<<"Num   Name   Cisco   Soft     Vc    Sum    /n";
   cout<<"____________________________________/n";
   cout<<setiosflags(ios_base::left)<<setw(7)<<p1->num
   <<setiosflags(ios_base::left)<<setw(7)<<p1->name
   <<setiosflags(ios_base::left)<<setw(7)<<p1->Soft
   <<setiosflags(ios_base::left)<<setw(7)<<p1->Cisco
   <<setiosflags(ios_base::left)<<setw(7)<<p1->VC
   <<setiosflags(ios_base::left)<<setw(7)<<p1->SUM
   <<endl;
  }
 else 
  cout<<"未找到!/n";
}

//按Num排序
void SStu::order1() 
{
 student *p1,*p2;
 int n=1;
 p1=first;
 while(p1->next!=NULL)
  {
   n++;    //求出结点总个数
   p1=p1->next;
  }
 for(int i=1;i<n;i++)
 {
  p1=first;                   
  if (p1->num>p1->next->num) // 如果头结点大于第二个的num
   {
    p2=p1->next; //把p2作p1的后续
    //交换过程
    p1->next=p1->next->next; //p1指向下下一个结个点,取代p2指向的结点
    p2->next=p1;             //p2的next指向p1
    first=p2;                //p2代替p1成为头结点,交换完成
   }
  
 }
 p1=first;
         cout<<"按Num排序(升序)如下:"<<endl;
   cout<<"Num   Name   Soft   Cisco   VC     Sum    /n";
   cout<<"____________________________________/n"; 
  do
  {
   cout<<setiosflags(ios_base::left)<<setw(7)<<p1->num
    <<setiosflags(ios_base::left)<<setw(7)<<p1->name
    <<setiosflags(ios_base::left)<<setw(7)<<p1->Soft
    <<setiosflags(ios_base::left)<<setw(7)<<p1->Cisco
    <<setiosflags(ios_base::left)<<setw(7)<<p1->VC
    <<setiosflags(ios_base::left)<<setw(7)<<p1->SUM
    <<endl;
   p1=p1->next;
  }while(p1!=NULL);
}


//按Soft成绩排序
void SStu::order2()
{
 student *p1,*p2;
 int n=1;
 p1=first;
 while(p1->next)
  {
   n++;
   p1=p1->next;
  }
 
 int i;
 p1=first;
 for(i=1;i<n;i++)
  {
    p1=first;
    if (p1->Soft<p1->next->Soft) // 如果头结点小于第二个的值,(降序排序)
     {
      p2=p1->next; //把p2作p1的后续
      //交换过程
      p1->next=p1->next->next; //p1指向下下一个结个点,取代p2指向的结点
      p2->next=p1; //p2的next指向p1
      first=p2; //p2代替p1成为头结点,交换完成
     }
  
  }
 p1=first;
 cout<<"按Soft排序(降序)如下:"<<endl;
 cout<<"Num   Name   Soft   Cisco   VC     Sum    /n";
 cout<<"____________________________________/n"; 
  do
  {
   cout<<setiosflags(ios_base::left)<<setw(7)<<p1->num
    <<setiosflags(ios_base::left)<<setw(7)<<p1->name
    <<setiosflags(ios_base::left)<<setw(7)<<p1->Soft
    <<setiosflags(ios_base::left)<<setw(7)<<p1->Cisco
    <<setiosflags(ios_base::left)<<setw(7)<<p1->VC
    <<setiosflags(ios_base::left)<<setw(7)<<p1->SUM
    <<endl;
   p1=p1->next;
  }while(p1!=NULL);
}

//按Cisco成绩降序排序
void SStu::order3()
{
student *p1,*p2;
 int n;
 p1=first;
 n=1;
 while(p1->next)
  {
   n++;
   p1=p1->next;
  }
 int i;
 p1=first;
 for(i=1;i<n;i++)
  {
    p1=first;
    if (p1->Cisco<p1->next->Cisco) // 如果头结点小于第二个Cisco
    {
     p2=p1->next; //把p2作p1的后续
     //交换过程
     p1->next=p1->next->next; //p1指向下下一个结个点,取代p2指向的结点
     p2->next=p1; //p2的next指向p1
     first=p2; //p2代替p1成为头结点,交换完成
    }
   
   
  }
  p1=first;
  cout<<"按Cisco排序(降序)如下:"<<endl;
   cout<<"Num   Name   Soft   Cisco   VC     Sum    /n";
   cout<<"____________________________________/n"; 
  do
  {
   cout<<setiosflags(ios_base::left)<<setw(7)<<p1->num
    <<setiosflags(ios_base::left)<<setw(7)<<p1->name
    <<setiosflags(ios_base::left)<<setw(7)<<p1->Soft
    <<setiosflags(ios_base::left)<<setw(7)<<p1->Cisco
    <<setiosflags(ios_base::left)<<setw(7)<<p1->VC
    <<setiosflags(ios_base::left)<<setw(7)<<p1->SUM
    <<endl;
   p1=p1->next;
  }while(p1!=NULL);
}

//按VC成绩降序排序
void SStu::order4()
{
 student *p1,*p2;
 int n=1;
 p1=first;
 while(p1->next)
  {
   n++;
   p1=p1->next;
  }
 int i;
 p1=first;
 for(i=1;i<n;i++)
 {
  p1=first;
  if (p1->VC<p1->next->VC)
   {
    p2=p1->next; //把p2作p1的后续
     //交换过程
    p1->next=p1->next->next; //p1指向下下一个结个点,取代p2指向的结点
    p2->next=p1; //p2的next指向p1
    first=p2; //p2代替p1成为头结点,交换完成
   }
 
 }
 p1=first;
  cout<<"按VC成绩排序(降序)如下:"<<endl;  
  cout<<"Num   Name   Soft   Cisco   VC     Sum    /n";
  cout<<"_____________________________________/n"; 
  do
  {
   cout<<setiosflags(ios_base::left)<<setw(7)<<p1->num
    <<setiosflags(ios_base::left)<<setw(7)<<p1->name
    <<setiosflags(ios_base::left)<<setw(7)<<p1->Soft
    <<setiosflags(ios_base::left)<<setw(7)<<p1->Cisco
    <<setiosflags(ios_base::left)<<setw(7)<<p1->VC
    <<setiosflags(ios_base::left)<<setw(7)<<p1->SUM
    <<endl;
   p1=p1->next;
  }while(p1!=NULL);
}

//按SUM降序排序
void SStu::order5()
{
 student *p1,*p2;
 int n;
 p1=first;
 n=1;
 while(p1->next)
  {
   n++;
   p1=p1->next;
  }
 p1=first;
 for( int i=1;i<n;i++)
  {
    p1=first;
    if (p1->SUM<p1->next->SUM)
    {
     p2=p1->next; //把p2作p1的后续
      //交换过程
     p1->next=p1->next->next; //p1指向下下一个结个点,取代p2指向的结点
    p2->next=p1; //p2的next指向p1
    first=p2; //p2代替p1成为头结点,交换完成
    }
  
  }
 p1=first;
   cout<<"按总成绩Sum排序(降序)如下:"<<endl;
   cout<<"Num  Name  Soft   Cisco   VC     Sum    /n";
   cout<<"____________________________________/n"; 
  do
  {
   cout<<setiosflags(ios_base::left)<<setw(7)<<p1->num
    <<setiosflags(ios_base::left)<<setw(7)<<p1->name
    <<setiosflags(ios_base::left)<<setw(7)<<p1->Soft
    <<setiosflags(ios_base::left)<<setw(7)<<p1->Cisco
    <<setiosflags(ios_base::left)<<setw(7)<<p1->VC
    <<setiosflags(ios_base::left)<<setw(7)<<p1->SUM
    <<endl;
   p1=p1->next;
  }while(p1!=NULL);
}

//保存到文件
void SStu::save()
{
 
 ofstream file("学生成绩管理.txt",ios_base::app);
 student *p=first;
 while(p)// 写入文件
  {
   file<<setiosflags(ios_base::left)<<setw(7)<<p->num
    <<setiosflags(ios_base::left)<<setw(7)<<p->name
    <<setiosflags(ios_base::left)<<setw(7)<<p->Soft
    <<setiosflags(ios_base::left)<<setw(7)<<p->Cisco
    <<setiosflags(ios_base::left)<<setw(7)<<p->VC
    <<setiosflags(ios_base::left)<<setw(7)<<p->SUM
    <<";"
    <<endl;
   p=p->next;
  }
 file.close();
 cout<<"保存完毕!"<<endl;
 }
//测试函数**--**--**--//
void main()
{
 char c;
 SStu S;
 do
 {
  cout<<"              ╭—-—--—————《主菜单》———--—————---╮"<<endl;
  cout<<"              ├—--——————————————————————┤"<<endl;
  cout<<"              ∣        0.增加/输入学生成绩信息                 ∣"<<endl;  
  cout<<"              ∣        1.修改学生成绩信息                      ∣"<<endl;                                              
  cout<<"              ∣        2.删除学生成绩信息                      ∣"<<endl;
  cout<<"              ∣        3.输出学生成绩信息                      ∣"<<endl;
  cout<<"              ∣        x.按学号查询                            ∣"<<endl;
  cout<<"              ∣        y.按姓名查询                            ∣"<<endl;
  cout<<"              ∣        a.按学号升序排序                        ∣"<<endl;  
  cout<<"              ∣        b.按Soft 成绩降序排序                   ∣"<<endl;
  cout<<"              ∣        c.按Cisco成绩降序排序                   ∣"<<endl;
  cout<<"              ∣        d.按VC   成绩降序排序                   ∣"<<endl;
  cout<<"              ∣        e.按总成绩   降序排序                   ∣"<<endl;
  cout<<"              ∣        7.保存学生成绩信息                      ∣"<<endl;       
  cout<<"              ∣        8.退出这个管理系统                      ∣"<<endl;
  cout<<"              ╰————-——————————————————-—╯"<<endl;
  cout<<"             ——————————————————————————"<<endl;     
  cout<<"请输入操作命令: " ;
  cin>>c;
  switch(c)
  {
   case '0': S.input();
    break;
   case '1': S.update();
    break;
   case '2': S.dele();
    break;
   case '3': S.display();
    break;
   case 'x': S.search1();
    break;
   case 'y': S.search2();
    break;
   case 'a': S.order1();
    break;
   case 'b': S.order2();
    break;
   case 'c': S.order3();
    break;
   case 'd': S.order4();
    break;
   case 'e': S.order5();
    break;
   case '7': S.save();
    break;
  }
 }while(c!='8');
}
 

原创粉丝点击