成绩管理系统的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();
 
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值