📄 111.txt
字号:
p1->next=p2;
} //插入到p3所指结点之后
}
else
{
p2->next=p1;
p1->next=NULL;
} //插入到尾结点之后
}
n++;//将学生人数加1
cout<<"\t你输入的学生信息已经成功插入"<<endl;
return (head);
}
//------------>删除函数
student *Information::cancel(student *head,long int num)//定义一个指向struct student
//的结构体指针函数*delete()用来删除考生信息.
{
if(head==NULL)//若调用次函数以前的头指针head为空
{
return(head);
}
else
{
p1=head;//否则将头指针赋给p1
while(num!=p1->id&&p1->next!=NULL)//寻找要删除的结点当p1所指的学生学号不是输入的学生
//学号并且p1所指的next指针不为空
{
p2=p1;
p1=p1->next;
}//p2指向原p1指向的结点p1后移一个结点
if(num==p1->id)//如果输入的学生学号是p1所指的学生学号//结点找到后删除
{
if(p1==head) head=p1->next;//如果head指针和p1指针相等则将下一个结点赋给指针head
else
p2->next=p1->next;//否则将p1所指结点赋给p2所指结点将要删除的学生信息跳过去
cout<<" 删除学号为"<<num<<"的学生\n";
n--;//将学生人数减1
}
return(head);//将头指针返回
}
}
//------------>查找函数
student *Information::find(student *head,long int num)
//定义一个指向struct student的结构体指针函数*find()用来查找学生信息.
{
if(head==NULL)//若调用次函数以前的头指针head为空
{
cout<<" 这是一个空表,请先输入考生成绩.\n";
return(head);
}
else
{
p1=head;//否则将头指针赋给p1
while(num!=p1->id&&p1->next!=NULL)
//寻找结点当p1所指的学生准考证号不是输入的学生学号并且p1所指的next指针不为空
{
p1=p1->next;
}//p2指向原p1指向的结点p1后移一个结点
if(num==p1->id)//如果要查找的学生学号是p1所指的学生准考证号
{
cout<<"------------------------------------------------------------------------------- \n";
cout<<" 学号 姓名 性别 年龄 出生年月 电话 Email 地址 \n";
cout<<"-------------------------------------------------------------------------------\n";
cout<<setw(5)<<p1->id
<<setw(9)<<p1->name
<<setw(3)<<p1->sex
<<setw(4)<<p1->age
<<setw(8)<<p1->birthday
<<setw(15)<<p1->phone
<<setw(12)<<p1->email
<<setw(10)<<p1->address <<endl;
cout<<"------------------------------------------------------------------------------\n";
}
else
cout<<" 没找到学号为"<<num<<"的学生.\n"; //结点没找到
return(head);
}
}
//------------定义inorder()函数将学生的学号从小到大排列并输出
void Information::inorder(student *head)
{
int i,k,m=0,j;
student *p[Q];//定义一个指向struct student的结构体指针数组p
if(head!=NULL)//如果头指针是空则继续
{ m=count(head);
cout<<"------------------------------------------------------------------------------\n";
cout<<" 学生信息统计表 \n";
cout<<"------------------------------------------------------------------------------\n";
cout<<" 学号 姓名 性别 年龄 出生年月 电话 Email 地址 \n";
cout<<"------------------------------------------------------------------------------\n";
p1=head;
for(k=0;k<m;k++)
{
p[k]=p1;
p1=p1->next;
}
for(k=0;k<m-1;k++) //选择排序法
for(j=k+1;j<m;j++)
if(p[k]->id>p[j]->id)
{
p2=p[k];
p[k]=p[j];
p[j]=p2;
} //从小到大排列的指针
for(i=0;i<m;i++)
{
cout<<setw(5)<<p1->id
<<setw(9)<<p1->name
<<setw(3)<<p1->sex
<<setw(4)<<p1->age
<<setw(8)<<p1->birthday
<<setw(15)<<p1->phone
<<setw(12)<<p1->email
<<setw(10)<<p1->address<<endl;
cout<<"------------------------------------------------------------------------------\n";
}
}
}
//------------------->保存函数.
void Information::save(student *head)
{
ofstream out("data.txt",ios::out);
out<<count(head)<<endl;
while(head!=NULL)
{ out<<head->name<<"\t"
<<head->id<<"\t"<<"\t"
<<head->sex<<"\t"
<<head->age<<"\t"
<<head->birthday<<"\t"
<<head->phone<<"\t"
<<head->email<<"\t"
<<head->address<<endl;
head=head->next;
}
}
//----------->读取函数的实现
student *Information::Read()
{ int i=0;
p1=p2=( student *)malloc(LEN);
head=NULL;
ifstream in("data.txt",ios::out);
in>>i;
if(i==0){cout<<" data.txt 文件中的数据为空,请先输入数据。"<<endl; return 0;}
else {
cout<<" …………………………………………………………………………………………"<<endl;
for(;i>0;i--)
{ p1=(student *)malloc(LEN);
cin>>st.name>>st.id>>st.sex
>>st.age>>st.birthday>>st.phone>>st.email
>>st.address;
strcpy(p1->name,st.name);
p1->id=st.id;
p1->sex=st.sex;
p1->age=st.age;
p1-> birthday=st.birthday;
strcpy(p1->email,st.email);
strcpy(p1->phone,st.phone);
strcpy(p1->address,st.address);
if(n==0)head=p1;//如果是输入第一组学生信息就将指针p1赋给指针head
else p2->next=p1;//否则将p1赋给p2所指结构体的next指针
p2=p1;//将指针p1赋给指针p2
n++; //将n的值加1
//显示读入数据
cout<<" "<<p1->name<<"\t"
<<p1->id<<"\t"<<"\t"
<<p1->sex<<"\t"
<<p1->age<<"\t"
<<p1->birthday <<"\t"
<<p1->phone <<"\t"
<<p1->email<<"\t"
<<p1->address<<endl;
cout<<" …………………………………………………………………………………………"<<endl;
//
}
cout<<" 数据已经成功读取完毕。"<<endl;
p2->next=NULL;
return (head);
}
}
//------------------------------>主函数.
int main(void)
{
Information person;
student *head=NULL;
char str[10];
int flag=0;
int choice;
long int i;
head=person.Read();
do{
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
cout<<"┃ 学生成绩管理系统主菜单界面 ┃"<<endl ;
cout<<"┃ 读取数据请输入数字零 ┃"<<endl;
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫"<<endl;
cout<<"┃ ①.输入学生信息 ┃"<<endl;
cout<<"┃ ②.显示学生信息 ┃"<<endl;
cout<<"┃ ③.排序统计信息 ┃"<<endl;
cout<<"┃ ④.查找学生信息 ┃"<<endl;
cout<<"┃ ⑤.增加学生信息 ┃"<<endl;
cout<<"┃ ⑥.删除学生信息 ┃"<<endl;
cout<<"┃ ⑦.保存退出系统 ┃"<<endl;
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;
cout<<"请输入您的选择(1--7):( )\b\b";
cin>>str;
if(atoi(str)>7 || atoi(str)<0)
cout<<"对不起,请输入1-7这几个数字!!\n";
else
{
choice=atoi(str);
switch(choice)
{
case 0:
person.Read();
break;
case 1:
head=person.creat();
break;
case 2:
person.output(head);
break;
case 3:
person.inorder(head);
cout<<" 学生人数为:"<<person.count(head)<<"人\n";
break;
case 4:
cout<<" 请输入要查找的学号(8位):";
do{
cin>>str;
if(atol(str)>99999999 || atol(str)<1)
cout<<"对不起,请输入正确输入!!!\n";
else
{i=atol(str); flag=1; }
}while(flag==0);
flag=0;
person.find(head,i);
break;
case 5:
head=person.insert(head);
person.output(head);
break;
case 6:
cout<<" 请输入要删除的学号(8位):";
do{
cin>>str;
if(atol(str)>99999999 || atol(str)<1)
cout<<"对不起,请输入正确输入!!!h\n";
else
{i=atol(str); flag=1; }
}while(flag==0);
flag=0;
head=person.cancel(head,i);
person.output(head);
break;
case 7:
person.save(head);
cout<<"文件已保存!可以安全退出!!!"<<endl;
break;
default :cout<<" 对不起,您的输入有误,请重新输入。\n";
break;
}
}
}while(choice!=7);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -