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

posted @ 2007-03-29 14:18  david++  阅读(1045)  评论(0编辑  收藏  举报