📄 change.cpp
字号:
#include"head.h"
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
extern void DisplayBasic(Student* &);
void Change(Student* &head)
{
Student* pGuard;
Student* pS;
Student* ptr;
char choice;
char Name[20];
int Class;
int Number;
cout<<"已记录的学生如下:"<<endl;
DisplayBasic(head);
cout<<"说明:本程序提供①根据学生的学号"
<<" ②根据学生姓名和所在的班级"
<<" 两种方式来查找并修改学生的信息."
<<endl;
status0:
cout<<"请选择修改方式(1/2):";
cin>>choice;
if(choice=='1')
{
status1:
cout<<"请输入要修改的学生的学号:"<<endl;
cin>>Number;
for(pGuard=head;pGuard!=NULL;pGuard=pGuard->next)
{
if(pGuard->Number==Number)
{
pS=new Student;
for(int i=0;i<MAX;i++)
{
pS->Score[i]=pGuard->Score[i]; //把已记录的成绩也保存下来
}
status2:
system("cls");
cout<<"找到该学生,已记录的信息如下:"<<endl;
cout<<" 学生姓名: "<<pGuard->Name <<endl;
cout<<" 班级: "<<pGuard->Class <<endl;
cout<<" 学号: "<<pGuard->Number <<endl;
cout<<" 性别: ";
if(pGuard->Sex==1)
cout<<"男"<<endl;
else
cout<<"女"<<endl;
cout<<" 年龄: "<<pGuard->Age <<endl;
cout<<" 宿舍号: "<<pGuard->Room <<endl;
cout<<" 电话号码: "<<pGuard->Tel <<endl<<endl<<endl;
cout<<"现在请输入新的学生信息(如果没有变化请按照原来的数值输入):"<<endl;
cout<<"请输入学生所在的班级: ";
cin>>pS->Class;
cout<<endl<<"请输入学生的学号: ";
cin>>pS->Number;
cout<<endl<<"请输入学生的姓名: ";
cin>>pS->Name;
status3:
cout<<endl<<"请输入学生的性别(男用1表示,女用2表示): ";
cin>>pS->Sex;
if(pS->Sex!=1&&pS->Sex!=2)
{
cout<<"您键入的内容有错,请重新选择."<<endl;
goto status3;
}
cout<<endl<<"请输入学生的年龄: ";
cin>>pS->Age;
cout<<endl<<"请输入学生的宿舍号: ";
cin>>pS->Room;
cout<<endl<<"请输入学生的电话号码: ";
cin>>pS->Tel;
status4:
cout<<"请核对以上信息,输入内容完全无误吗? (y/n):"<<endl;
cin>>choice;
if(choice=='N'||choice=='n')
{
cout<<"那么请重新输入吧."<<endl;
system("pause");
system("cls");
goto status2;
}
else if(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
{
cout<<"您键入的内容有错,请重新选择."<<endl;
system("pause");
system("cls");
goto status4;
}
else
{
if(pS->Class==pGuard->Class) //判断学生的班别是否有变化
{
if(pGuard==head) //先判断pGuard的情况,否则会使下面的ptr出错
{
head=pS;
pS->next=pGuard->next;
delete pGuard;
}
else
{
for(ptr=head;ptr->next!=pGuard;ptr=ptr->next)
; //使ptr指向pGuard的前一个节点
ptr->next=pS;
pS->next=pGuard->next;
delete pGuard; //以上3句把pGuard和pS交换,删除pGuard
}
}
else //如果学生的班级有了变化
{
if(pGuard==head)
{
head=pS;
pS->next=pGuard->next;
delete pGuard;
}
else
{
for(ptr=head;ptr->next!=pGuard;ptr=ptr->next)
; //同上,使ptr指向pGuard的前一个节点
ptr=pGuard->next;
delete pGuard; //以上两句把无效了的pGuard删除
//现在是插入新的节点,即pS
for(pGuard=head;pGuard->next!=NULL&&pGuard->next->Class<pS->Class;pGuard=pGuard->next)
;
if(pGuard==head&&pGuard->Class>pS->Class)
{
head=pS;
pS->next=pGuard;
}
else if(pGuard==head&&pGuard->Class<pS->Class)
{
pS->next=head->next;
head->next=pS;
}
else
{
pS->next=pGuard->next;
pGuard->next=pS;
}
}
}
}
cout<<"已成功修改该学生的信息!"<<endl;
return;
}
}
cout<<"没有找到该学生的信息!"<<endl;
status5:
cout<<"要重新输入学生的学号吗?(y/n):";
cin>>choice;
if(choice=='y'||choice=='Y')
{
cout<<"那么请重新输入吧!"<<endl;
system("pause");
goto status1;
}
else if(choice!='y'&&choice!='Y'&&choice!='n'&&choice!='N')
{
cout<<"您键入的内容有误,请重新选择."<<endl;
goto status5;
}
}
else if(choice=='2')
{
status10:
cout<<"请输入要修改的学生的姓名:";
cin>>Name;
cout<<"请输入学生所在的班级:";
cin>>Class;
for(pGuard=head;pGuard!=NULL;pGuard=pGuard->next)
{
if(pGuard->Class==Class&&strcmp(pGuard->Name,Name)==0)
{
pS=new Student;
for(int i=0;i<MAX;i++)
{
pS->Score[i]=pGuard->Score[i]; //把已记录的成绩也保存下来
}
status6:
cout<<"找到该学生,已记录的信息如下:"<<endl;
cout<<" 学生姓名: "<<pGuard->Name <<endl;
cout<<" 班级: "<<pGuard->Class <<endl;
cout<<" 学号: "<<pGuard->Number <<endl;
cout<<" 性别: ";
if(pGuard->Sex==1)
cout<<"男"<<endl;
else
cout<<"女"<<endl;
cout<<" 年龄: "<<pGuard->Age <<endl;
cout<<" 宿舍号: "<<pGuard->Room <<endl;
cout<<" 电话号码: "<<pGuard->Tel <<endl<<endl<<endl;
cout<<"现在请输入新的学生信息(如果没有变化请按照原来的数值输入):"<<endl;
cout<<"请输入学生所在的班级: ";
cin>>pS->Class;
cout<<endl<<"请输入学生的学号: ";
cin>>pS->Number;
cout<<endl<<"请输入学生的姓名: ";
cin>>pS->Name;
status7:
cout<<endl<<"请输入学生的性别(男用1表示,女用2表示): ";
cin>>pS->Sex;
if(pS->Sex!=1&&pS->Sex!=2)
{
cout<<"您键入的内容有错,请重新选择."<<endl;
goto status7;
}
cout<<endl<<"请输入学生的年龄: ";
cin>>pS->Age;
cout<<endl<<"请输入学生的宿舍号: ";
cin>>pS->Room;
cout<<endl<<"请输入学生的电话号码: ";
cin>>pS->Tel;
status8:
cout<<"请核对以上信息,输入内容完全无误吗? (y/n):"<<endl;
cin>>choice;
if(choice=='N'||choice=='n')
{
cout<<"那么请重新输入吧."<<endl;
system("pause");
system("cls");
goto status6;
}
else if(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
{
cout<<"您键入的内容有错,请重新选择."<<endl;
system("pause");
system("cls");
goto status8;
}
else
{
if(pS->Class==pGuard->Class) //同上,判断学生的班别是否有变化
{
if(pGuard==head)
{
head=pS;
pS->next=pGuard->next;
delete pGuard;
}
else
{
for(ptr=head;ptr->next!=pGuard;ptr=ptr->next)
; //使ptr指向pGuard的前一个节点
ptr->next=pS;
pS->next=pGuard->next;
delete pGuard; //以上3句把pGuard和pS交换,删除pGuard
}
}
else //如果学生的班级有了变化
{
if(pGuard==head)
{
head=pS;
pS->next=pGuard->next;
delete pGuard;
}
else
{
for(ptr=head;ptr->next!=pGuard;ptr=ptr->next)
; //同上,使ptr指向pGuard的前一个节点
ptr=pGuard->next;
delete pGuard; //以上两句把无效了的pGuard删除
//现在是插入新的节点,即pS
for(pGuard=head;pGuard->next!=NULL&&pGuard->next->Class<pS->Class;pGuard=pGuard->next)
;
if(pGuard==head&&pGuard->Class>pS->Class)
{
head=pS;
pS->next=pGuard;
}
else if(pGuard==head&&pGuard->Class<pS->Class)
{
pS->next=head->next;
head->next=pS;
}
else
{
pS->next=pGuard->next;
pGuard->next=pS;
}
}
}
}
cout<<"已成功修改该学生的基本信息."<<endl;
return;
}
}
cout<<"没有找到该学生的信息!"<<endl;
status9:
cout<<"要重新输入学生的班级和姓名吗?(y/n):";
cin>>choice;
if(choice=='y'||choice=='Y')
{
cout<<"那么请重新输入吧!"<<endl;
system("pause");
goto status10;
}
else if(choice!='y'&&choice!='Y'&&choice!='n'&&choice!='N')
{
cout<<"您键入的内容有误,请重新选择."<<endl;
goto status9;
}
}
else if(choice!='1'&&choice!='2')
{
cout<<"您键入的内容有错,请重新选择."<<endl;
goto status0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -