陳碗饭 2020-07-05 14:04 采纳率: 0%
浏览 108

救救孩子吧,有没有好心人帮我修改这个代码(C++),也是给自己锻炼的机会哟。解决的可以加我v18259862278。给予酬劳,这上面一充就是100还是V方便

这是代码,然后最后面的保存学生信息为文件功能不太完整,最后保存的文档功能实现不了,保存后没有数据可以存到文档里,希望有人可以指导指导,谢谢。

#include<fstream> 
#include <iostream>
#include <string>
using namespace std;

#define null NULL

 class student
  {
      private:
         friend class studentMessage;
         student *next; //节点指针
         string name; //学生姓名
         int age; //年纪
         int id; //学号
        double score[5]; //五科成绩
         double total; //总分
         double average; //平均成绩
     public:
          student(string _name,int _age,int _id,double *_score)
         {
              name = _name;
            age = _age;
            id = _id;
            score[0] = _score[0];
            score[1] = _score[1];
            score[2] = _score[2];
            score[3] = _score[3];
            score[4] = _score[4];
             total = score[0]+score[1]+score[2]+score[3]+score[4];
              average = total/5;
             next = NULL;
         }
         student() //为studentMessage初始化头结点用
        {
            name = "null";
             age = 0;
             id = 0;
            score[0]=score[1]=score[2]=score[3]=score[4]=0;
              total = 0;             average = 0;
              next = NULL;
          }
          ~student(){}
         void swap(student*);
  };


  void student::swap(student *q)
  {
      string _name;
      int _age,_id;
      double _score[5],_total,_average;

      _name = name;
      name = q->name;
      q->name = _name;

      _age = age;
      age = q->age;
     q->age = _age;

      _id = id;
      id = q->id;
      q->id = _id;

      _score[0] = score[0];
      score[0] = q->score[0];
      q->score[0] = _score[0];

      _score[1] = score[1];
      score[1] = q->score[1];
      q->score[1] = _score[1];

      _score[2] = score[2];
      score[2] = q->score[2];
      q->score[2] = _score[2];

      _score[3] = score[3];
      score[3] = q->score[3];
      q->score[3] = _score[3];

      _score[4] = score[4];
      score[4] = q->score[4];
      q->score[4] = _score[4];

      _total = total;
      total = q->total;
      q->total = _total;

      _average = average;
      average = q->average;
     q->average = _average;
  }






  class studentMessage
  {
      private:
        student *first; //头指针
        int num; //信息中的学生人数
      public:
          studentMessage()
          {
              num = 0; //初始化学生人数为0
             first = new student;  //初始化头结点
         }
        ~studentMessage(){delete first;}


        void Insret(void); //添加 
         void Display(void); //显示
        void Delete(void); //删除
        void Search(void); //搜索
        void Change(void); //改动
     void sortByLesson1(void); //按成绩一来排序
        void sortByLesson2(void); //按成绩二来排序
         void sortByLesson3(void); //按成绩三来排序
          void sortByLesson4(void); //按成绩四来排序
           void sortByLesson5(void); //按成绩五来排序
         void sortByTotal(void); //按总分来排序
        void SearchByid(void); //按照学号查找
         void SearchByname(void); //按照姓名查找
         int menu(void); //初始的菜单
        void clear(void); //清空列表
        void Save(void);//保存文件 
 };


int studentMessage::menu(void)
 {
     int ch;
     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<<"0.退出系统"<<endl;cout<<endl;
     cout<<"********************计算机科学与技术一班 黄烨彬,陈深**************************"<<endl;
     cout<<"======================================================================="<<endl;
    cout<<"***********************************************************************"<<endl;
     cin >> ch;
     cout<<"\n\n\n"<<endl;
     return ch;
}



 //添加 
 void studentMessage::Insret(void)
 {
     string name;
    int age;
     int id;
     double score[5];
     cout<<"请输入学生姓名: ";
    cin>>name;
    cout<<"请输入学生年龄: ";
     cin>>age;
     cout<<"请输入学生学号: ";
    cin>>id;
    cout<<"下面请输入学生五门课程成绩: ";
     cout<<endl;
     cout<<"请输入学生的高等数学的成绩: ";cin>>score[0];
     cout<<"请输入学生的英语成绩: ";cin>>score[1];
     cout<<"请输入学生的面向对象成绩: ";cin>>score[2];
     cout<<"请输入学生的电路原理成绩";cin>>score[3] ; 
     cout<<"请输入学生的离散数学成绩";cin>>score[4];
     cout<<endl;


     student *newstu = new student(name,age,id,score);
     student *p = first;
     while(p->next != NULL)
     {
         p = p->next;
    }
    p->next = newstu;
     newstu->next = null;
     num++;
 }



 void studentMessage::Display(void)
 {
    if(num == 0)
    {
         cout<<"当前记录中无学生..."<<endl;
     }

     else
     {
        student *p = first->next;
        while(p != null)
        {
             cout<<"姓名:"<<p->name<<"  ";
             cout<<"年龄:"<<p->age<<"  ";
            cout<<"学号:"<<p->id<<"  ";
             cout<<"五门课程成绩: "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<"  "<<p->score[3]<<" "<<p->score[4]<<" ";
           cout<<"总分:"<<p->total<<"  ";
             cout<<"平均分:"<<p->average<<endl;
             p = p->next;
         }
     }    
 }


 void studentMessage::Delete(void)
 {
     student *p = first;
     student *pre = first;
     while(p->next != NULL)
     {
         pre = p;
         p = p->next;
     }
     pre->next = NULL;
     delete p;
     num--;
 }


 void studentMessage::Search(void)
 {
     int temp = 0;
     cout<<"请输入查找的条件,有如下选项..."<<endl;
     cout<<"按照学号查找(请输入【1】) 按照姓名查找(请输入【2】)"<<endl;
     cin>>temp;
     switch(temp)
     {
         case 1: SearchByid(); break;
         case 2: SearchByname(); break;
         default: cout<<"输入有误..."<<endl;
     }
 }

 void studentMessage::SearchByid(void)
 {
     int _id;
     int flag = 0;
     cout<<"请输入待查找学生的学号:";
     cin >> _id;
     student *p = first->next;
     while(p != null)
     {
         if(p->id == _id)
         {
             flag = 1;
             cout<<"下面是查找匹配结果:"<<endl;
             cout<<"姓名:"<<p->name<<"  ";
             cout<<"年龄:"<<p->age<<"  ";
             cout<<"学号:"<<p->id<<"  ";
             cout<<"三门课程成绩: "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<"  ";
             cout<<"总分:"<<p->total<<"  ";
             cout<<"平均分:"<<p->average<<endl;    
         } 
         p = p->next;
     }
     if(flag == 0)
     {
         cout<<"抱歉,记录中没有查找匹配项..."<<endl;
     }
 }

 void studentMessage::SearchByname(void)
 {
     string _name;
     int flag = 0;
     cout<<"请输入待查找的学生姓名: ";
     cin >> _name;
     student *p = first->next;
     while(p != null)
     {
         if(p->name == _name)
         {
             flag = 1;
             cout<<"下面是查找匹配结果:"<<endl;
             cout<<"姓名:"<<p->name<<"  ";
             cout<<"年龄:"<<p->age<<"  ";
             cout<<"学号:"<<p->id<<"  ";
             cout<<"五门课程成绩: "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<"  "<<p->score[3]<<"  "<<p->score[4]<<"  ";
             cout<<"总分:"<<p->total<<"  ";
             cout<<"平均分:"<<p->average<<endl;    
         }
         p = p->next;
     }

     if(flag == 0)
     {
         cout<<"抱歉,记录中没有查找匹配项..."<<endl;
     }
 }



 void studentMessage::Change(void)
 {
     string _name;
     int flag = 0,temp;
     int _id,_age;
     int course = 0;
     cout<<"请输入需要改动信息的学生的姓名: ";
     cin >> _name;
     student *p = first->next;
     while(p != null)
     {
         if(p->name == _name)
         {
             flag = 1;
             cout<<"该学生当前信息如下:"<<endl;
             cout<<"姓名:"<<p->name<<"  ";
             cout<<"年龄:"<<p->age<<"  ";
            cout<<"学号:"<<p->id<<"  ";
             cout<<"五门课程成绩: "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<"  "<<p->score[3]<<"  "<<p->score[4]<<"  ";
            cout<<"总分:"<<p->total<<"  ";
             cout<<"平均分:"<<p->average<<endl;    
             cout<<"请指明哪一项需要修改..."<<endl;
             cout<<"修改学号(输入【1】) 修改年龄(输入【2】)修改成绩(输入【3】)"<<endl;
             cin >> temp;
             switch(temp)
             {
                 case 1: 
                     {
                         cout<<"请输入新的学号:";cin>>_id;
                         p->id = _id;
                     }
                     break;
                 case 2: 
                     {
                         cout<<"请输入新的年龄:";cin>>_age;
                         p->age = _age;
                    }
                    break;
                case 3: 
                   {
                        cout<<"请按指示修改课程成绩..."<<endl;
                        cout<<"是否需要修改高等数学成绩?(需要输入【1】不需要输入【0】)"<<endl;
                       cin >> course;
                         if(course == 1)
                         {
                             cout<<"请输入修改后的高等数学成绩:"; cin >> p->score[0];
                         }
                         course = 0;

                         cout<<"是否需要修改英语成绩?(需要输入【1】不需要输入【0】)"<<endl;
                         cin >> course;
                         if(course == 1)
                         {
                             cout<<"请输入修改后的英语成绩:"; cin >> p->score[1];
                         }
                         course = 0;

                       cout<<"是否需要修改电路原理成绩?(需要输入【1】不需要输入【0】)"<<endl;
                       cin >> course;
                        if(course == 1)
                        {
                             cout<<"请输入修改后的电路原理成绩:"; cin >> p->score[2];
                      }
                         course = 0;

                         p->total = p->score[0]+p->score[1]+p->score[2]+p->score[3]+p->score[4];
                    p->average = p->total/3;

                      cout<<"修改后的信息如下: "<<endl;
                      cout<<"姓名:"<<p->name<<"  ";
                        cout<<"年龄:"<<p->age<<"  ";
                       cout<<"学号:"<<p->id<<"  ";
                        cout<<"五门课程成绩: "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<"  "<<p->score[3]<<"  "<<p->score[4]<<"  ";
                        cout<<"总分:"<<p->total<<"  ";
                         cout<<"平均分:"<<p->average<<endl;    
                    }
                     break;
                default:  cout<<"输入有误..."<<endl;
             }
         }
        p = p->next;
     }
     if(flag == 0)
         cout<<"当前记录中没有次学生..."<<endl;
 }

 /*排序我均采用冒泡排序法,均是从小到大排序*/


 //按照科目一排序
void studentMessage::sortByLesson1(void) 
 {
     student *p = first->next;
     while(p->next != null)
     {
        student *q = p->next;
         while(q != null)
         {
             if(p->score[0] > q->score[0])
             {
                 p->swap(q);
             }
             q = q->next;
         }
         p = p->next;
     }
 }

 //按照科目二排序
 void studentMessage::sortByLesson2(void)
 {
     student *p = first->next;
     while(p->next != null)
     {
         student *q = p->next;
         while(q != null)
         {
             if(p->score[1] > q->score[1])
             {
                 p->swap(q);
             }
             q = q->next;
        }
         p = p->next;
     }
 }

 //按照科目三排序
 void studentMessage::sortByLesson3(void)
 {
     student *p = first->next;
     while(p->next != null)
     {
         student *q = p->next;
         while(q != null)
         {
             if(p->score[2] > q->score[2])
             {
                 p->swap(q);
            }
             q = q->next;
         }
         p = p->next;
     }
 }
 //按照科目四排序
 void studentMessage::sortByLesson4(void)
 {
     student *p = first->next;
     while(p->next != null)
     {
         student *q = p->next;
         while(q != null)
         {
             if(p->score[3] > q->score[3])
             {
                 p->swap(q);
            }
             q = q->next;
         }
         p = p->next;
     }
 }
 //按照科目五排序
 void studentMessage::sortByLesson5(void)
 {
     student *p = first->next;
     while(p->next != null)
     {
         student *q = p->next;
         while(q != null)
         {
             if(p->score[4] > q->score[4])
             {
                 p->swap(q);
            }
             q = q->next;
         }
         p = p->next;
     }
 }

 //按照总成绩排序
void studentMessage::sortByTotal(void)
 {
     student *p = first->next;
     while(p->next != null)
     {
         student *q = p->next;
         while(q != null)
         {
             if(p->total > q->total)
             {
                 p->swap(q);
             }
             q = q->next;
         }
         p = p->next;
     }
 }

 void studentMessage::clear(void)
 {
     student *p = first->next;
     while(p != null)
     {
         first->next = p->next;
         p->next = null;
         delete p;
         p = first->next;
     }
 }

  /*保存学生信息*/
void studentMessage::Save(void)

{int i;
FILE *fp;
fp=fopen("chengji.txt","w");
        student *p = first->next;
        while(p != null)
        {
             cout<<"姓名:"<<p->name<<"  ";
             cout<<"年龄:"<<p->age<<"  ";
            cout<<"学号:"<<p->id<<"  ";
             cout<<"五门课程成绩: "<<p->score[0]<<" "<<p->score[1]<<" "<<p->score[2]<<"  "<<p->score[3]<<" "<<p->score[4]<<" ";
           cout<<"总分:"<<p->total<<"  ";
             cout<<"平均分:"<<p->average<<endl;
             p = p->next;
         }

cout<<"\n\n*******************恭喜,保存完成!*******************\n\n"<<endl;
}


 int main()
{
   studentMessage stulist;
     int ch;
     while(ch = stulist.menu())
     {
         switch(ch)
         {
             case 1: stulist.Display(); break;
             case 2: stulist.Insret(); break;
             case 3: stulist.Search(); break;
             case 4: stulist.Change(); break;
             case 5: stulist.Delete(); break;
             case 6: stulist.clear(); break;
             case 7: stulist.Save(); break;
             default: cout<<"请按要求输入..."<<endl;
         }
     }
     return 0;
 }
  • 写回答

2条回答 默认 最新

  • qq_43533787 2020-07-05 14:36
    关注

    。。。。。Save()函数写的只能在屏幕上输出,没有往文件里输出,而且那个FILE*fp 最后没有关闭。

    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮