一:学生信息的录入
二:学生信息的打印
三:学生信息的增加
四:学生信息的查询
五:学生信息的修改及复位
六:学生信息的删减
 #include<iostream>
#include<string>
#define NULL 
0
#define STU struct student
using namespace std;
STU
{
 int 
num;
 float score;
 char name[20];
 char 
sex[5];
 STU *next;
};
void main()
{
 STU * log(STU * 
head1,int &G);
 void print(STU *head1);
 void cor(STU 
*head1);
 void fou(STU *head1);
 void add(STU 
*head1);
 void del(STU *head1);
 STU *head1;
 int 
m,g=0;
    
cout<<"_________________________菜单栏______________________________"<<endl;
 cout<<"                      
1、学生信息的录入                      
"<<endl;
    
cout<<"                      
2、学生信息的增加                      
"<<endl;
 cout<<"                      
3、学生信息的删除                      
"<<endl;
 cout<<"                      
4、学生信息的查询                      
"<<endl;
 cout<<"                      
5、学生信息的修改                      
"<<endl;
 cout<<"                      
6、学生信息的打印                      
"<<endl;
 cout<<"                      
0、退出系统                            
"<<endl;
 cout<<"_____________________________________________________________"<<endl;
 while(m)
 {
  cout<<"                                                         
请选择菜单栏";
     
cin>>m;
  if(m>1)
  {
   if(g==0)
   {
    cout<<"对不起,您还没有将学生信息录入,目前还不能执行1之后的操作!!!"<<endl; 
//固定操作步骤
    break;              
//若直接执行操作1之后的选项,报错退出
   }
  }
     
switch(m)
  {
  case 
1:head1=log(head1,g);break;
  case 
2:add(head1);break;
  case 3:del(head1);break;
  case 
4:fou(head1);break;
  case 5:cor(head1);break;
  case 
6:print(head1);break;
  }
 }
}
STU * log(STU * 
head1,int &G)
{
 G++;
 STU *p;
 int 
m=0;
 head1=NULL;
 p=new 
student;
 cout<<"请录入第1个学生的信息:"<<endl;
 cin>>(*p).num>>(*p).name>>p->sex>>p->score;
 while((*p).num!=0)
 {
  m++;
  if(m==1)
  {
   head1=p;
   (*p).next=p;
  }
  else
  {
   (*p).next=new 
student;
   cout<<"请录入第"<<m<<"个学生的信息:"<<endl;
   cin>>(*(*p).next).num>>(*(*p).next).name>>(*(*p).next).sex>>(*(*p).next).score;
   p=(*p).next;
  }
 }
 (*p).next=NULL;
 return(head1);
}
void 
print(STU *head1)
{
 STU 
*p;
 p=head1;
 while(p->num!=0)
 {
  cout<<(*p).num<<"\t"<<(*p).name<<"\t"<<p->sex<<"\t"<<p->score<<endl;
  p=(*p).next;
 }
}
void 
cor(STU *head1)
{
 void print(STU *head1);
 int 
m;
 STU *p,*p0,*p1;
 p=head1;
 p0=new 
student;
 p1=new 
student;
 cout<<"请输入您要修改的学生信息:"<<endl;
 cin>>(*p0).num>>(*p0).name>>p0->sex>>p0->score;
 while((*p).num!=(*p0).num&&p!=NULL)    
 {
  p=(*p).next;
 }
 if((*p).num!=(*p0).num)
 {
  cout<<"抱歉!此链表中不存在该生!!!"<<endl;//有点小问题
 }
 else
 {
  cout<<"请输入修改后的学生信息:"<<endl;
     
cin>>(*p).num>>(*p).name>>p->sex>>p->score;
  (*p1).num=(*p).num;
  strcpy((*p1).name,(*p).name);
  strcpy((*p1).sex,(*p).sex);
  (*p1).score=(*p).score;
  while(m!=3)
  {
   cout<<"是否要复位?1、不复位  
2、复位  
3、退出:"<<endl;
         
cin>>m;
         
if(m==1)
   {
    (*p).num=(*p1).num;
    strcpy((*p).name,(*p1).name);
    strcpy((*p).sex,(*p1).sex);
    (*p).score=(*p1).score;
    print(head1);
   }
      
if(m==2)
   {
    (*p).num=(*p0).num;
       
strcpy((*p).name,(*p0).name);
    strcpy((*p).sex,(*p0).sex);
    (*p).score=(*p0).score;
       
print(head1);
   }
  }
 }
}
void 
fou(STU *head1)
{
 void num(STU *head1);
 void name(STU 
*head1);
 int 
m;
 while(m!=3)
 {
  cout<<"                                                       
"<<"请选择查询方式:"<<endl;
     
cout<<"                                                       
"<<"1、通过学号查询"<<endl;
     
cout<<"                                                       
"<<"2、通过姓名查询"<<endl;
     
cout<<"                                                       
"<<"3、退出查询系统"<<endl;
  cin>>m;
  switch(m)
  {
  case 
1:num(head1);break;
  case 
2:name(head1);break;
  }
 }
}
void num(STU 
*head1)
{
 int num1;
 STU 
*p;
 p=head1;
 cout<<"请输入被查询学生的学号:"<<endl;
 cin>>num1;
 while((*p).num!=num1)
 {
  p=(*p).next;
 } 
 if((*p).num==num1)
 {
  cout<<(*p).num<<"\t"<<(*p).name<<"\t"<<p->sex<<"\t"<<p->score<<endl;
 }
}
void 
name(STU *head1)
{
 char name1[10];
 STU 
*p;
 p=head1;
 cout<<"请输入被查询学生的姓名:"<<endl;
 cin>>name1;
 while(strcmp((*p).name,name1)!=0)
 {  
  p=(*p).next;
 }
 if(strcmp((*p).name,name1)==0)
 {
  cout<<(*p).num<<"\t"<<(*p).name<<"\t"<<p->sex<<"\t"<<p->score<<endl;
 }
}
void 
add(STU *head1)
{
 void print(STU *head1);
 STU 
*p,*p1;
 p=head1;
 p1=new 
student;
 cout<<"请输入新增学生的学生信息:"<<endl;
 cin>>(*p1).num>>(*p1).name>>p1->sex>>p1->score;
 if((*p1).num<p->num)         
//若执行此步,执行完此步后直接打印并跳出循环//
 {
  (*p1).next=head1;
  head1=p1;
  print(head1);
 }
 while(p1->num>p->next->num&&p->next->num!=0)   
//若执行此步,第一个if肯定未执行//
 {
  p=p->next;                        
//p结点向后移//
 }
 if(p->next->num>p1->num)          
//此句表示p1遇到了自己该在的位置,插入//
 {
  p1->next=p->next;
  p->next=p1;
  print(head1);                     
//打印
 }
    else 
//此句表示p1应该是最后一个结点//
 {
  (*p1).next=p->next;
  (*p).next=p1;
  print(head1);                     
//打印
 }
}
void del(STU *head1)
{
 void print(STU *head1);
 STU 
*p,*p0;
 p0=new student;
 p=head1;
 int 
m;
 cout<<"请选择:"<<endl;
 cout<<"1、通过学号删除"<<endl;
 cout<<"2、通过姓名删除"<<endl;
 cin>>m;
 if(m==1)
 {
  cout<<"请输入要删除的学号:"<<endl;
  cin>>p0->num;
  if(p->num==p0->num)
  {
   head1=p->next;
   print(head1);
  }
  while(p->next->num!=p0->num&&p->next!=NULL)
  {
   p=p->next;
  }
  if(p->next->num==p0->num&&p->next!=NULL)
  {
   p->next=p->next->next;
   print(head1);
  }
  else
  {
   p->next=NULL;
   print(head1);
  }
 }
 if(m==2)
 {
  cout<<"请输入要删除的学生姓名:"<<endl;
  cin>>p0->name;
  if(strcmp(p0->name,p->name)==0)
  {
   head1=p->next;
   print(head1);
  }
  while(strcmp(p->next->name,p0->name)!=0&&p->next!=NULL)
  {
   p=p->next;
  }
  if(strcmp(p->next->name,p0->name)==0&&p->next!=NULL)
  {
   p->next=p->next->next;
   print(head1);
  }
  else
  {
   p->next=NULL;
   print(head1);
  }
 }
 delete 
p0;
}
原文地址:http://www.cnblogs.com/zzkgis/p/3742592.html