一:学生信息的录入
二:学生信息的打印
三:学生信息的增加
四:学生信息的查询
五:学生信息的修改及复位
六:学生信息的删减
#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