接上面:
//------------------->保存函数.
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->score[0]<<"\t"
<<head->score[1]<<"\t"
<<head->score[2]<<"\t"
<<head->score[3]<<"\t"
<<head->total<<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);
in>>st.name>>st.id>>st.sex
>>st.score[0]>>st.score[1]>>st.score[2]>>st.score[3]
>>st.total;
strcpy(p1->name,st.name);
p1->id=st.id;
strcpy(p1->sex,st.sex);
p1->score[0]=st.score[0];
p1->score[1]=st.score[1];
p1->score[2]=st.score[2];
p1->score[3]=st.score[3];
p1->total=st.total;
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->score[0]<<"\t"
<<p1->score[1]<<"\t"
<<p1->score[2]<<"\t"
<<p1->score[3]<<"\t"
<<p1->total<<endl;
cout<<" …………………………………………………………………………………………"<<endl;
//
}
cout<<" 数据已经成功读取完毕。"<<endl;
p2->next=NULL;
return (head);
}
}
//------------------------------>主函数.
int main(void)
{
Information person;
student *head=NULL;
int choice;
long int i;
do{
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓";
cout<<"┃★ ★ ★ 学生成绩管理系统主菜单界面 ★ ★ ★┃";
cout<<"┃★ ★ ★ ♀读取数据请输入数字零♂ ★ ★ ★┃";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫";
cout<<"┃ ★ ★ ★ ★ ★ ★ ①.输入学生成绩 ★ ★ ★ ★ ★ ★ ┃";
cout<<"┃ ★ ★ ★ ②.显示学生成绩 ★ ★ ★ ┃";
cout<<"┃ ★ ★ ★ ③.排序统计成绩 ★ ★ ★ ┃";
cout<<"┃ ★ ★ ★ ④.查找学生成绩 ★ ★ ★ ┃";
cout<<"┃ ★ ★ ★ ⑤.增加学生成绩 ★ ★ ★ ┃";
cout<<"┃ ★ ★ ★ ⑥.删除学生成绩 ★ ★ ★ ┃";
cout<<"┃ ★ ★ ★ ★ ★ ★ ⑦.安全退出系统 ★ ★ ★ ★ ★ ★ ┃";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛";
cout<<" 请输入您的选择(0--7):";
cin>>choice;
while(cin.fail())
{
cout<<" 对不起您的输入错误,请输入您的选择(0--7): ";
cin.clear();
cin.sync();
cin>>choice;
}
switch(choice)
{
case 0:head=person.Read();break;
case 1:
head=person.creat();
break;
case 2:
person.output(head);
break;
case 3:
person.paixu(head); person.average(head);
cout<<" 参加考试的学生人数为:"<<person.count(head)<<"人\n";
break;
case 4:
cout<<" 请输入要查找的准考证号(8位):";
cin>>i;
while(cin.fail())
{
cout<<" 对不起您的输入错误,请输入一个正整数: ";
cin.clear();
cin.sync();
cin>>i;
}
person.find(head,i);
break;
case 5:
head=person.insert(head);
person.output(head);
break;
case 6:
cout<<" 请输入要删除的准考证号(8位):";
cin>>i;
while(cin.fail())
{
cout<<" 对不起您的输入错误,请输入一个正整数: ";
cin.clear();
cin.sync();
cin>>i;
}
head=person.cancel(head,i);
person.output(head);
break;
case 7:
person.save(head);
break;
default :cout<<" 对不起,您的输入有误,请重新输入。\n";
break;
}
}while(choice!=7);
return 0;
}
//**************************************************************************************
//------------------->保存函数.
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->score[0]<<"\t"
<<head->score[1]<<"\t"
<<head->score[2]<<"\t"
<<head->score[3]<<"\t"
<<head->total<<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);
in>>st.name>>st.id>>st.sex
>>st.score[0]>>st.score[1]>>st.score[2]>>st.score[3]
>>st.total;
strcpy(p1->name,st.name);
p1->id=st.id;
strcpy(p1->sex,st.sex);
p1->score[0]=st.score[0];
p1->score[1]=st.score[1];
p1->score[2]=st.score[2];
p1->score[3]=st.score[3];
p1->total=st.total;
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->score[0]<<"\t"
<<p1->score[1]<<"\t"
<<p1->score[2]<<"\t"
<<p1->score[3]<<"\t"
<<p1->total<<endl;
cout<<" …………………………………………………………………………………………"<<endl;
//
}
cout<<" 数据已经成功读取完毕。"<<endl;
p2->next=NULL;
return (head);
}
}
//------------------------------>主函数.
int main(void)
{
Information person;
student *head=NULL;
int choice;
long int i;
do{
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓";
cout<<"┃★ ★ ★ 学生成绩管理系统主菜单界面 ★ ★ ★┃";
cout<<"┃★ ★ ★ ♀读取数据请输入数字零♂ ★ ★ ★┃";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫";
cout<<"┃ ★ ★ ★ ★ ★ ★ ①.输入学生成绩 ★ ★ ★ ★ ★ ★ ┃";
cout<<"┃ ★ ★ ★ ②.显示学生成绩 ★ ★ ★ ┃";
cout<<"┃ ★ ★ ★ ③.排序统计成绩 ★ ★ ★ ┃";
cout<<"┃ ★ ★ ★ ④.查找学生成绩 ★ ★ ★ ┃";
cout<<"┃ ★ ★ ★ ⑤.增加学生成绩 ★ ★ ★ ┃";
cout<<"┃ ★ ★ ★ ⑥.删除学生成绩 ★ ★ ★ ┃";
cout<<"┃ ★ ★ ★ ★ ★ ★ ⑦.安全退出系统 ★ ★ ★ ★ ★ ★ ┃";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛";
cout<<" 请输入您的选择(0--7):";
cin>>choice;
while(cin.fail())
{
cout<<" 对不起您的输入错误,请输入您的选择(0--7): ";
cin.clear();
cin.sync();
cin>>choice;
}
switch(choice)
{
case 0:head=person.Read();break;
case 1:
head=person.creat();
break;
case 2:
person.output(head);
break;
case 3:
person.paixu(head); person.average(head);
cout<<" 参加考试的学生人数为:"<<person.count(head)<<"人\n";
break;
case 4:
cout<<" 请输入要查找的准考证号(8位):";
cin>>i;
while(cin.fail())
{
cout<<" 对不起您的输入错误,请输入一个正整数: ";
cin.clear();
cin.sync();
cin>>i;
}
person.find(head,i);
break;
case 5:
head=person.insert(head);
person.output(head);
break;
case 6:
cout<<" 请输入要删除的准考证号(8位):";
cin>>i;
while(cin.fail())
{
cout<<" 对不起您的输入错误,请输入一个正整数: ";
cin.clear();
cin.sync();
cin>>i;
}
head=person.cancel(head,i);
person.output(head);
break;
case 7:
person.save(head);
break;
default :cout<<" 对不起,您的输入有误,请重新输入。\n";
break;
}
}while(choice!=7);
return 0;
}
//**************************************************************************************
♂ 死后定当长眠,生前何须久睡。♀