zoukankan      html  css  js  c++  java
  • 成绩管理系统的C++实现

     //list.h

    #pragma once

    ////////////////////////////////////////////
    typedef struct
    {
     long SID;           //学号
     char Name[20];      //姓名
     double DailyScore;  //平时成绩
     double FinalScore;  //期末成绩
     double TotalScore;  //总评成绩
    } SCOREINFO;

    ////////////////////////////////////////////
    struct NODE
    {
     SCOREINFO  ScoreInfo;
     struct NODE * next;
    };
    typedef struct NODE Node;
    typedef Node *  Link;

    ///////////////////////////////////////////


    class List
    {
     Link Head;
    public:
     List(void);
     ~List(void);

     Link CreateList(void);                   //创建链表
     int  PrintList(void);                    //打印链表的内容
     void FreeList(void);                     //释放链表的所有内容
     Link InsertList(SCOREINFO & ScInfo);     //插入一个节点并以学号的顺序排列
     int DeleteList(long sid);               //以学号删除一个节点
     
     int InquireList(long sid,SCOREINFO & ScInfo);         //以学号查询
     Link ModifyList(SCOREINFO & ScInfo);     //修改链表
     Link GetHead(void);
     Link SaveList(char * FileName);
     Link LoadList(char * FileName);
     void SetHead(Link h);
    };

    //////////////////////////////////////////////
    #define SUBNUM 6
    class Score
    {
    private:
     int  ClassID;                          //班级号
        char * SUBNAME[SUBNUM];                //科目名称 
     char  FILENAME[SUBNUM][30];            // 班级号+科目名称=磁盘文件
     Link HEAD[SUBNUM];                     //链表的头指针
     List LIST[SUBNUM];                     //链表对象
       
     char Command[50];                      //选择后所输入的命令
     char SubCommand[3][20];                //分解后的命令子项
     int Choice;                            //选择
     
     List list1;
    public:

     Score(int CID);                     //默认为一班的成绩,可以声明时修改
     
     int GetChoice(void);
     
     void InputScore(void);
     void InquireScore(void);
     void ModifyScore(void);
     void DeleteScore(void);
     void SaveChanges(void);
     int ScanCommand(void);
     void QuitSystem(void);
     int GetIndex(char * SubName);
    };

    //list.cpp

    #include ".\list.h"
    #include<iostream>
    #include<cstdlib>
    #include<fstream>
    #include<cstring>
    #include<cctype>


    using namespace std;
    List::List(void)
    {
     Head=NULL;

    }

    void List::SetHead(Link h)
    {
     Head=h;
    }
    List::~List(void)
    {
    }

    //建立链表
    Link List::CreateList(void)
    {
        Link New,Pointer;
     Head=new  Node;
        if(Head==NULL) 
        std::cout<<"Memory Allocte Failed!\n";
       else
       {
        //建立表头
        std::cout<<"输入一位学生的成绩:\n";
        std::cout<<"学号:";
        std::cin>>Head->ScoreInfo.SID;
        std::cout<<"姓名:";
        std::cin>>Head->ScoreInfo.Name;
        std::cout<<"平时成绩:";
        std::cin>>Head->ScoreInfo.DailyScore;
        std::cout<<"期末成绩:";
        std::cin>>Head->ScoreInfo.FinalScore;

        Head->ScoreInfo.TotalScore=Head->ScoreInfo.DailyScore*0.3+Head->ScoreInfo.FinalScore*0.7;

        Head->next=NULL;
           Pointer=Head;
        while(1)
        {   //建立新结点
         New= new Node;
        
         std::cout<<"输入一位学生的成绩:\n";
               std::cout<<"学号(-1 to end):";
         std::cin>>New->ScoreInfo.SID;

         if(New->ScoreInfo.SID==-1)
          break;

            std::cout<<"姓名:";
         std::cin>>New->ScoreInfo.Name;
            std::cout<<"平时成绩:";
         std::cin>>New->ScoreInfo.DailyScore;
            std::cout<<"期末成绩:";
         std::cin>>New->ScoreInfo.FinalScore;
         New->ScoreInfo.TotalScore=New->ScoreInfo.DailyScore*0.3+New->ScoreInfo.FinalScore*0.7;
         New->next=NULL;
               //将新结点连接在头结点上
         Pointer->next=New;
         Pointer=New;
        }            
       }
         
       return Head;

    }

    //打印链表
    int List::PrintList(void)
    {  
     int counter=0; //计数器
        Link Pointer;
     //Pointer指向头结点
     Pointer=Head;
        //显示数据信息
     cout<<"\n学号\t姓名\t平时成绩\t期末成绩\t总评成绩";
        cout<<"\n------------------------------------------------------------------";
     while(Pointer!=NULL)
     {
      std::cout<<"\n"<<Pointer->ScoreInfo.SID;
      std::cout<<"\t"<<Pointer->ScoreInfo.Name;
      std::cout<<"\t"<<Pointer->ScoreInfo.DailyScore;
      std::cout<<"\t\t"<<Pointer->ScoreInfo.FinalScore;
      std::cout<<"\t\t"<<Pointer->ScoreInfo.TotalScore;
      cout<<"\n------------------------------------------------------------------";
            counter++;
        //每一屏可以显示10条信息
        if(counter%10==0)
        { 
         std::cout<<"\nPress Enter to Continue..........\n";
         getchar();
         getchar();
         cout<<"\n学号\t姓名\t平时成绩\t期末成绩\t总评成绩";
               cout<<"\n------------------------------------------------------------------";
        }
        //指向下一个结点
        Pointer=Pointer->next;
     }
           return 1;
    }
    //////////////////////////////////////////////
    void List::FreeList(void)
    {
     Link Pointer;
     while(Head!=NULL)
     {
      Pointer=Head;
      Head=Head->next;
      delete Pointer;
     }

    }

    //向链表中插数据信息(按学号由大到小顺序插入)
    Link List::InsertList(SCOREINFO & ScInfo)
    {
     Link Pointer,New,Back;
     //同时指向头结点,不论链表是否为空
     Pointer=Head;
     Back=Head;
        //要插入的结点
     New=new Node;
     New->ScoreInfo=ScInfo;
     New->next=NULL;
     
     //如果链表为空,或者要插入的学号小于已存在链表头结点的学号,则插入头结点
     if(Pointer==NULL||(Pointer->ScoreInfo.SID>New->ScoreInfo.SID))
       {
          New->next=Head;
          Head=New;
       }
      else
      { 
       //插入到链表中或尾部
       while(Pointer->ScoreInfo.SID<New->ScoreInfo.SID)
        { 
         Back=Pointer;
         Pointer=Pointer->next;
                  if(Pointer==NULL)
         { 
          //插到链表尾部
          Back->next=New;
          goto end;
         }
        }
        //插到链表中间
        New->next=Pointer;
        Back->next=New;

       } 
       
        end:
     return Head;
    }

    // 依学号删除链表中的结点
    // 返回为 0 时,表明没有找到(包括链表为空,没找到)
    // 返回为 1 时,表明找到并删除了找到的结点
    int List::DeleteList(long sid)      
    {
        Link Pointer;
        Link Back;
     //指向同一结点
     Pointer=Head;
     Back=Head;
     //如果链表为空
        if(Pointer==NULL)
       return 0;
        //删除链表头结点
     if(Head->ScoreInfo.SID==sid)
     {
            Head=Pointer->next;
      delete Pointer;
      return 1;
     }
       //删除链表尾和中间的结点
        //跳过头结点
     Back=Pointer;
     Pointer=Pointer->next;
     while(Pointer->ScoreInfo.SID!=sid)
     {
      Back=Pointer;
      Pointer=Pointer->next;
      //没有找到
      if(Pointer==NULL)
          return 0;

     }
     //删除表中的结点或表尾的结点
     Back->next=Pointer->next;
     delete Pointer;
     return 1;

    }
    //查询链表,如果找到的话就返回找的结点
    //返回值为0时: 表示链表为空,或者没有找到该结点
    //返回值为1时: 表示找到要找的结点
    int List::InquireList(long sid,SCOREINFO & ScInfo)
    {
        Link Pointer;
        Link Back;
     //指向同一结点
     Pointer=Head;
     Back=Head;
     //如果链表为空
        if(Pointer==NULL)
       return 0;
        //是头结点
     if(Head->ScoreInfo.SID==sid)
     {
      ScInfo=Head->ScoreInfo;
      return 1;
     }
        //跳过头结点
     Back=Pointer;
     Pointer=Pointer->next;
     while(Pointer->ScoreInfo.SID!=sid)
     {
      Back=Pointer;
      Pointer=Pointer->next;
      //没有找到
      if(Pointer==NULL)
          return 0;

     }
     //找到,位于链表中间或链表尾
     ScInfo=Pointer->ScoreInfo;
     return 1;

    }
    ////////////////////////////////////
    Link List::ModifyList(SCOREINFO & ScInfo)
    {
      Link Pointer;
         Link Back;
      Pointer=Head;

        while(1)
     {

      if(Pointer->next==NULL)
      {
       std::cout<<"Not Found!\n";
       break;
      };
      if(Head->ScoreInfo.SID==ScInfo.SID)
      {
        
       Head=Pointer->next;
       Pointer->ScoreInfo=ScInfo;
       break;
      };
      Back=Pointer;
      Pointer=Pointer->next;
      if(Pointer->ScoreInfo.SID==ScInfo.SID)
      {
       Back->next=Pointer->next;
       Pointer->ScoreInfo=ScInfo;
       break;
      };
     }
     return Head;
    }

    Link List::GetHead(void)
    {
     return Head;
    }
    //保存链表中的数据到以 FileName指定的磁盘文件
    Link List::SaveList(char * FileName)
    {   
     Link Pointer;
     Pointer=Head;
        //定义 输出流文件
     std::ofstream fout;
     fout.open(FileName,ios_base::out|ios_base::trunc|ios_base::binary);
     //文件打开失败
     if(!fout.is_open())
     {
      std::cout<<"File Can't Open!\n";
      exit(0);
     }
        //写入文件
     while(Pointer!=NULL)
     {
      fout.write((char *)& Pointer->ScoreInfo,sizeof SCOREINFO);
      Pointer=Pointer->next;
     }
       
     fout.close();
     return Head;
    }

    //将由FileName指定的文件中的数据读到链表中
    Link List::LoadList(char * FileName)
    {
        Link New,Pointer;
        //定义输入流文件
     ifstream  fin;
     fin.open(FileName,ios_base::in|ios_base::binary);
     //文件打开失败
     if(!fin.is_open())
     {
      std::cout<<"File Open Erros!\n";
      exit(0);
     }
     //如果链表为空的话
     if(Head==NULL)
     {  
      fin.close();
      return Head;
     }
      //不为空则:

        //建立新结点
     Head=new  Node;
        if(Head==NULL) 
        std::cout<<"Memory Allocte Failed!\n";
       else
       {  
        //建立头结点
        fin.read((char *) &Head->ScoreInfo,sizeof SCOREINFO);
           Head->next=NULL;
           Pointer=Head;
        //读入到链表
        while(1)
        {
        
         New= new Node;
         New->next=NULL;
               if(!fin.read((char *) &New->ScoreInfo,sizeof SCOREINFO))
          break;
         Pointer->next=New;
         Pointer=New;
        }            
       }
         
       return Head;
    }


    /////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////

    Score::Score(int CID)
    {   
     
           ////////////////////////可以重新定义要用到的科目名称/////////////////////////
        SUBNAME[0]="Math";      SUBNAME[1]= "Physics"  ;          SUBNAME[2]="English";
           SUBNAME[3]="Chemistry"; SUBNAME[4]= "Biology";            SUBNAME[5]="Chinese";
          //组合文件名
           ClassID=CID;
        for(int i=0;i<SUBNUM;i++)
        {  
         char CIDstr[50];
            itoa(ClassID,CIDstr,10);
         strcpy(FILENAME[i],CIDstr);
         strcat(FILENAME[i],SUBNAME[i]);
         strcat(FILENAME[i],".dat");
        
        }
       
     ///////////////////////////////////////////////////////////////////////////////
         //加载文件里的数据;
        /*
          char cho[10];
          while(1)
          {
             cout<<"是不时第一次操作"<<ClassID<<"班的成绩管理:(Y/N)?\n";
          cin>>cho;
               //如果是第一次操作该班的成绩
         if(stricmp(cho,"Y")==0)
         {
             for(int i=0;i<SUBNUM;i++)
             {  
           //保存空文件,加载的也时空文件
              LIST[i].SaveList(FILENAME[i]);
                       LIST[i].LoadList(FILENAME[i]);
              }
           break;
        
          }
         //如果不是
          if(stricmp(cho,"N")==0)
       {      
        for(int i=0;i<SUBNUM;i++)
              { 
           List   TempList;
           TempList.LoadList(FILENAME[i]);
           TempList.PrintList();
              LIST[i].LoadList(FILENAME[i]);
           //LIST[i].PrintList();
               }
          break;
       }

          }
         */
        list1.LoadList("1math.dat");
        list1.PrintList();
        //////////////////////////////////////////////////////////////////////////////
        //主菜单选项
        while(1)
        {
         GetChoice();
               if(Choice==6)
          {
            QuitSystem();
            break;
          }
         switch(Choice)
         {
         case 1: InputScore();
              break;
         case 2: InquireScore();
              break;
         case 3: ModifyScore();
              break;
         case 4: DeleteScore();
              break;
         case 5: SaveChanges();
              break;
         default: cout<<"\nWrong Choice! Please Input Again\n";
         }
        }
         /////////////////////////////////////////////////////////////////////////////
    }


    //打印主菜单,并作出选择
    int Score::GetChoice(void)

     cout<<"\n                                   成绩管理系统                                ";
     cout<<"\n-------------------------------------------------------------------------------";
     cout<<"\n               选项                        |                   帮助           ";
     cout<<"\n       1.   录入成绩(全新录入或新增一条)   | Command> *时 全新输入,+ 时新增 ";
     cout<<"\n       2.   查询成绩(可以查看全部和一条)   | Command>*时 显示所有成绩";
     cout<<"\n                                           | Command>(学号)时显示该学生的成绩项";
     cout<<"\n                                           | Command>(学号 课程名):以某科的成绩";
     cout<<"\n       3.   修改成绩(修改某个学生的成绩)   | Command>(学号):修改该学生所有成绩";
     cout<<"\n                                           | Command>(学号 课程名):以某科的成绩";
     cout<<"\n       4.   删除成绩(删除某个学生的成绩)   | Command>(学号):删除该学生所有成绩";
     cout<<"\n                                           | Command>(学号 课程名):以某科的成绩";
     cout<<"\n       5.   保存所作的修改                 | Choice:5   写入磁盘文件";
     cout<<"\n       6.   退出系统                       | Choice:6   退出该系统";
     cout<<"\n----Choice:";
     cin>>Choice;
     return Choice;
    }


    /////////////////////////////////////////////////////////////////////////
    void Score::InputScore(void)
    {
     cout<<"    Command>";
     cin>>Command;
     //Command> *时,输入所有科目的成绩(全新输入)
     if(strcmp(Command,"*")==0)
     { 
      
      for(int i=0;i<SUBNUM;i++)
      { 
       cout<<"\n---------------------------------\n";
          cout<<"-----输入"<<SUBNAME[i]<<"的成绩\n";
                //建立相应的链表
       LIST[i].CreateList();
      }
     }
     //输入某个学生的成绩,(包括他的任何一科),新增一条;
     else if(strcmp(Command,"+")==0)
     { 
      
      long   StuID;
      char   StuName[20];
      SCOREINFO ScoInfo;

      cout<<"-----输入学号:";
      cin>>StuID;
      cout<<"-----输入姓名:";
      cin>>StuName;
      ScoInfo.SID=StuID;
      strcpy(ScoInfo.Name,StuName);
      for(int i=0;i<SUBNUM;i++)
      {  
       cout<<"\n----输入"<<SUBNAME[i]<<"的成绩项\n";
       cout<<"平时成绩:";
       cin>>ScoInfo.DailyScore;
       cout<<"期末成绩:";
       cin>>ScoInfo.FinalScore;
       ScoInfo.TotalScore=ScoInfo.DailyScore*0.3+ScoInfo.FinalScore*0.7;
                //插入相应的链表
       LIST[i].InsertList(ScoInfo);
      }
      
     }
    }

    //查询选项
    void Score::InquireScore(void)
    {  
     int num;
     long StuID;
     char SubName[20];
     cout<<"    Command>";
     getchar();
     gets(Command);
     num=ScanCommand();

     if(num==2)
     {
          //输入学号和科目名称,查询该生该科的成绩
          int index;
       SCOREINFO ScoInfo;
          StuID=atol(SubCommand[0]);
       index=GetIndex(SubCommand[1]);
       //如果输入的字符不与科目字符相符则返回
       if(index==-1)
       {
        cout<<" 科目输入有误!\n";
        return ;
       }
       int exist;
       //判断是否存在
       exist=LIST[index].InquireList(StuID,ScoInfo);
       if(exist==0)
       {
        cout<<"\n不存在该学生的成绩\n";
        return ;
       }
       //打印所查到的数据
       cout<<"\n-----"<<StuID<<"号的"<<SUBNAME[index]<<"成绩为:----\n";
       cout<<"\n学号\t姓名\t平时成绩\t期末成绩\t总评成绩";
          cout<<"\n------------------------------------------------------------------";
       std::cout<<"\n"<<ScoInfo.SID;
       std::cout<<"\t"<<ScoInfo.Name;
       std::cout<<"\t"<<ScoInfo.DailyScore;
       std::cout<<"\t\t"<<ScoInfo.FinalScore;
       std::cout<<"\t\t"<<ScoInfo.TotalScore;
       cout<<"\n------------------------------------------------------------------";
      
     }
     if(num==1)
     { 
      if(strcmp(SubCommand[0],"*")==0)
      {
       //打印所有数据
       for(int i=0;i<SUBNUM;i++)
        LIST[i].PrintList();
       
      }
      else
      { 
       //输入学号后显示所有关于该生的成绩
       StuID=atol(SubCommand[0]);
     
       cout<<"\n-----"<<StuID<<"号的成绩为:-----\n";
          cout<<"\n学号\t科目\t姓名\t平时成绩\t期末成绩\t总评成绩";
                cout<<"\n------------------------------------------------------------------";
                for(int i=0;i<SUBNUM;i++)
       {
                     SCOREINFO ScoInfo;
         //判断是否存在
         int exist;
         exist=LIST[i].InquireList(StuID,ScoInfo);
         if(exist==0)
          return ;
                     //显示成绩项
                  std::cout<<"\n"<<ScoInfo.SID;
         std::cout<<"\t"<<SUBNAME[i];
                  std::cout<<"\t"<<ScoInfo.Name;
                  std::cout<<"\t"<<ScoInfo.DailyScore;
                  std::cout<<"\t\t"<<ScoInfo.FinalScore;
                  std::cout<<"\t\t"<<ScoInfo.TotalScore;
                  cout<<"\n------------------------------------------------------------------";
       }

      
      }
      
     } 
    }

    //修改选项
    void Score::ModifyScore(void)
    {
     
     int num;
     long StuID;
     char SubName[20];
     cout<<"    Command>";
     getchar();
     gets(Command);
     num=ScanCommand();
       
     ////输入学号来改变该学生的所有科目的成绩
     if(num==1)
     {      
               StuID=atol(SubCommand[0]);
         for(int i=0;i<SUBNUM;i++)
       {
                     SCOREINFO ScoInfo,NewScoInfo;
         LIST[i].InquireList(StuID,ScoInfo);

         //显示原来存在的成绩 并输入新的成绩
         NewScoInfo.SID=StuID;
         strcpy(NewScoInfo.Name,ScoInfo.Name);

         cout<<"\n---"<<StuID<<"的原"<<SUBNAME[i]<<"成绩为:\n";
         cout<<"平时成绩:"<<ScoInfo.DailyScore;
         cout<<"修改为:";  cin>>NewScoInfo.DailyScore;
         cout<<"期末成绩:"<<ScoInfo.FinalScore;
         cout<<"修改为:";  cin>>NewScoInfo.FinalScore;
         cout<<"总评成绩:"<<ScoInfo.TotalScore;
         cout<<"修改为:"; 
         NewScoInfo.TotalScore=NewScoInfo.DailyScore*0.3+NewScoInfo.FinalScore*0.7;
         cout<<NewScoInfo.TotalScore<<endl;

         //确认是否保存修改
                  while(1)
                  { 
          char cho[10];
                      cout<<"确认(不放弃所作的修改)(Y/N)?\n";
                   cin>>cho;
                   if(stricmp(cho,"Y")==0)
                   {  
           LIST[i].DeleteList(StuID);
           LIST[i].InsertList(NewScoInfo);
                    break;
                   }
                   if(stricmp(cho,"N")==0)
                            break;
                  }
        
       }
     }
     //输入学号和科目名称来修改
     if(num==2)
     { 
      int index;
      SCOREINFO ScoInfo,NewScoInfo;
      StuID=atol(SubCommand[0]);
         index=GetIndex(SubCommand[1]);
         //如果输入的字符不与科目字符相符则返回
         if(index==-1)
         {
        cout<<" 科目输入有误!\n";
        return ;
         }

       LIST[index].InquireList(StuID,ScoInfo);

       //显示原来存在的成绩 并输入新的成绩
       NewScoInfo.SID=StuID;
       strcpy(NewScoInfo.Name,ScoInfo.Name);

       cout<<"\n---"<<StuID<<"的原"<<SUBNAME[index]<<"成绩为:\n";
       cout<<"平时成绩:"<<ScoInfo.DailyScore;
       cout<<"修改为:";  cin>>NewScoInfo.DailyScore;
       cout<<"期末成绩:"<<ScoInfo.FinalScore;
       cout<<"修改为:";  cin>>NewScoInfo.FinalScore;
       cout<<"总评成绩:"<<ScoInfo.TotalScore;
       cout<<"修改为:"; 
       NewScoInfo.TotalScore=NewScoInfo.DailyScore*0.3+NewScoInfo.FinalScore*0.7;
       cout<<NewScoInfo.TotalScore<<endl;

       //确认是否保存修改
           while(1)
           { 
         char cho[10];
               cout<<"确认(不放弃所作的修改)(Y/N)?\n";
            cin>>cho;
            if(stricmp(cho,"Y")==0)
            {  
           LIST[index].DeleteList(StuID);
           LIST[index].InsertList(NewScoInfo);
              break;
             }
             if(stricmp(cho,"N")==0)
                    break;
            }

     }
    }

    //删除选项
    void Score::DeleteScore(void)
    {
     int num;
     long StuID;
     char SubName[20];
     cout<<"    Command>";
     getchar();
     gets(Command);
     num=ScanCommand();
       
     ////输入学号来删除该学生的所有科目的成绩
     if(num==1)
     {  
      StuID=atol(SubCommand[0]);
      cout<<"\n-----"<<StuID<<"号的成绩为:-----\n";
         cout<<"\n学号\t科目\t姓名\t平时成绩\t期末成绩\t总评成绩";
            cout<<"\n------------------------------------------------------------------";
            for(int i=0;i<SUBNUM;i++)
         {
                     SCOREINFO ScoInfo;
         //判断是否存在
         int exist;
         exist=LIST[i].InquireList(StuID,ScoInfo);
         if(exist==0)
          return ;
                     //显示成绩项
                  std::cout<<"\n"<<ScoInfo.SID;
         std::cout<<"\t"<<SUBNAME[i];
                  std::cout<<"\t"<<ScoInfo.Name;
                  std::cout<<"\t"<<ScoInfo.DailyScore;
                  std::cout<<"\t\t"<<ScoInfo.FinalScore;
                  std::cout<<"\t\t"<<ScoInfo.TotalScore;
                  cout<<"\n------------------------------------------------------------------";
             
         //确认是否删除
                  while(1)
                  { 
          char cho[10];
                      cout<<"确认删除(Y/N)?\n";
                   cin>>cho;
                   if(stricmp(cho,"Y")==0)
                   {  
           LIST[i].DeleteList(StuID);
                    break;
                   }
                   if(stricmp(cho,"N")==0)
                            break;
                  }

      }

     }
     //输入学号和科目名称来删除
     if(num==2)
     { 
      int index;
      SCOREINFO ScoInfo;
      StuID=atol(SubCommand[0]);
         index=GetIndex(SubCommand[1]);
         //如果输入的字符不与科目字符相符则返回
         if(index==-1)
         {
        cout<<" 科目输入有误!\n";
        return ;
         }
            LIST[index].InquireList(StuID,ScoInfo);
         //打印所查到的数据
         cout<<"\n-----"<<StuID<<"号的"<<SUBNAME[index]<<"成绩为:----\n";
         cout<<"\n学号\t姓名\t平时成绩\t期末成绩\t总评成绩";
            cout<<"\n------------------------------------------------------------------";
         std::cout<<"\n"<<ScoInfo.SID;
         std::cout<<"\t"<<ScoInfo.Name;
         std::cout<<"\t"<<ScoInfo.DailyScore;
         std::cout<<"\t\t"<<ScoInfo.FinalScore;
         std::cout<<"\t\t"<<ScoInfo.TotalScore;
         cout<<"\n------------------------------------------------------------------";
           
      //确认是否保存修改
           while(1)
           { 
         char cho[10];
               cout<<"确认删除(Y/N)?\n";
            cin>>cho;
            if(stricmp(cho,"Y")==0)
            {  
           LIST[index].DeleteList(StuID);
              break;
             }
             if(stricmp(cho,"N")==0)
                    break;
            }

     }
    }
    //////////////////////////////////////////////
    void Score::SaveChanges(void)
    {
     for(int i=0;i<SUBNUM;i++)
     {
      LIST[i].SaveList(FILENAME[i]);
     }
    }

    ///////////////////////////////////////////
    int Score::ScanCommand(void)               //扫描字符串,将其以空格分解为子字符串

     int word,num,i,j;
     word=num=i=0;                         //计数器
     while(Command[i]!='\0')
     {
      if(isspace(Command[i]))           //如果字符为空
       word=0;                       //则word=0
      else
      {
       if(word==0&&isgraph(Command[i]))      //当word的状态发生变化时才执行
       {
        word=1;
        num++;
        j=0;
       }
       SubCommand[num-1][j]=Command[i];     //为子字符串赋值
       SubCommand[num-1][j+1]='\0';         //j的后一个字符为\0--结束字符
       j++;
      }
      i++;
     }
      
     return num;
    }
    /////////////////////////////////////////////////
    void Score::QuitSystem(void)
    {
      char cho[10];
      while(1)
      {
          cout<<"是否保存所做的修改(Y/N)?\n";
       cin>>cho;
      if(stricmp(cho,"Y")==0)
      {
          SaveChanges();
       break;
      }
       if(stricmp(cho,"N")==0)
             break;
      }
    }

    ////////////////////////////////
    //根据字符来求其下标,若返回为-1则说明没有该字符
    int Score::GetIndex(char * SubName)

     for(int i=0;i<SUBNUM;i++)
     {
      if(stricmp(SubName,SUBNAME[i])==0)
         return i;
     }
     
        return -1;
    }

    //main.cpp

    #include<iostream>
    #include<cstring>

    #include "List.h"

    using namespace std;


    main()

     
        List list1;
     Link head;
     //list1.CreateList();

     SCOREINFO ScoInfo,ScoInfo1,ScoInfo2;
     ScoInfo.SID=20;
     strcpy(ScoInfo.Name,"王大伟");
     ScoInfo.DailyScore=98;
     ScoInfo.FinalScore=90;
     ScoInfo.TotalScore=ScoInfo.DailyScore*0.3+ScoInfo.FinalScore*0.7;

     ScoInfo1.SID=10;
     strcpy(ScoInfo1.Name,"David");
     ScoInfo1.DailyScore=98;
     ScoInfo1.FinalScore=89;
     ScoInfo1.TotalScore=ScoInfo1.DailyScore*0.3+ScoInfo1.FinalScore*0.7;

     ScoInfo2.SID=21;
     strcpy(ScoInfo2.Name,"Jams");
     ScoInfo2.DailyScore=80;
     ScoInfo2.FinalScore=89;
     ScoInfo2.TotalScore=ScoInfo2.DailyScore*0.3+ScoInfo2.FinalScore*0.7;

     list1.InsertList(ScoInfo);
     list1.InsertList(ScoInfo1);
     list1.InsertList(ScoInfo2);
     //list1.DeleteList(10);
     //list1.DeleteList(20);
     
     //list1.CreateList();
       // int re;
     //re=list1.DeleteList(21);
     //cout<<re;
     /*
     list1.PrintList();
     SCOREINFO sc;
     re=list1.InquireList(21,sc);
     if(re==1)
     {
     cout<<re;
     cout<<"\nsid:"<<sc.SID;
     cout<<"\nname:"<<sc.Name;
     cout<<"\npinshi:"<<sc.DailyScore;
     cout<<"\nfinal:"<<sc.FinalScore;
     cout<<"\nTotal:"<<sc.TotalScore;

     }
     else
      cout<<"\nLink is NULL";
     //list1.PrintList();
     //list1.SaveList("ha.dat");
     list1.LoadList("ha.dat");
     list1.InsertList(ScoInfo);
     list1.PrintList();
       */
        //Score score(1);
     list1.LoadList("1math.dat");
     list1.PrintList();
     list1.InsertList(ScoInfo);
      
     List l[2]={List(),List()};
     
     //list1.SaveList("1math.dat");
     //l[0].LoadList("1math.dat");
     l[0]=list1;
     l[0].PrintList();

     
     
        getchar();
     getchar();
     
    }

  • 相关阅读:
    VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机
    重思人性自我修养
    初窥Linux 之 数据流重定向
    MTD设备驱动
    wubi安装ubuntu后,增加swap大小,优化swap的使用参数-----------让ubuntu健步如飞,为编译android源码准备
    【deep learning学习笔记】最近读的几个ppt(四)
    computer专业术语总结
    弃用个人博客站重返CSDN缘由
    Hadoop1.0.4伪分布式安装
    谈谈我2013上半年在公司内部培训的经历
  • 原文地址:https://www.cnblogs.com/mywolrd/p/1930745.html
Copyright © 2011-2022 走看看