当前位置: 代码迷 >> C语言 >> 老师说这样的题没几个人能做出。
  详细解决方案

老师说这样的题没几个人能做出。

热度:187   发布时间:2006-12-20 15:52:14.0


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<<"准考证号 姓 名 性别 数学 物理 英语 C++ 平均分 总分 \n";
cout<<"------------------------------------------------------------------------------\n";
cout<<setw(8)<<p1->id
<<setw(9)<<p1->name
<<setw(6)<<p1->sex
<<setw(7)<<p1->score[0]
<<setw(7)<<p1->score[1]
<<setw(7)<<p1->score[2]
<<setw(7)<<p1->score[3]
<<setw(10)<<p1->total/4.0
<<setw(7)<<p1->total<<endl;
cout<<"------------------------------------------------------------------------------\n";
}
else
cout<<" 没找到准考证号为"<<num<<"的学生.\n"; //结点没找到
return(head);
}
}
//------------定义paixu()函数将考生的总分从大到小排列并输出
void Information::paixu(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<<"准考证号 姓 名 性别 数学 物理 英语 C++ 平均分 总分 名次\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]->total<p[j]->total)
{
p2=p[k];
p[k]=p[j];
p[j]=p2;
} //从大到小排列的指针
for(i=0;i<m;i++)
{
cout<<setw(8)<<p[i]->id
<<setw(9)<<p[i]->name
<<setw(6)<<p[i]->sex
<<setw(7)<<p[i]->score[0]
<<setw(7)<<p[i]->score[1]
<<setw(7)<<p[i]->score[2]
<<setw(7)<<p[i]->score[3]
<<setw(8)<<p[i]->total/4.0
<<setw(7)<<p[i]->total
<<setw(9)<<i+1<<endl;
cout<<"------------------------------------------------------------------------------\n";
}
}
}
//------------>求各科平均分成绩的函数
void Information::average(student *head)
{

int k,m;
float arg1=0,arg2=0,arg3=0,arg4=0;
if(head==NULL)//如果头指针是空则继续
{
cout<<" 这是一个空表,请先输入考生成绩.\n";
}
else
{
m=count(head);
p1=head;
for(k=0;k<m;k++)
{
arg1+=p1->score[0];
arg2+=p1->score[1];
arg3+=p1->score[2];
arg4+=p1->score[3];
p1=p1->next;
}
arg1/=m;arg2/=m;arg3/=m;arg4/=m;
cout<<" *全班单科成绩平均分*\n";
cout<<"------------------------------------------------------------------------------\n";
cout<<" 数学平均分:"<<setw(7)<<arg1
<<" 物理平均分:"<<setw(7)<<arg2
<<" 英语平均分:"<<setw(7)<<arg3
<<" C语言平均分:"<<setw(7)<<arg4<<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->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;
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;
person.find(head,i);
break;
case 5:
head=person.insert(head);
person.output(head);
break;
case 6:
cout<<" 请输入要删除的准考证号(8位):";
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;
}
///**************************************************************************************************************************


----------------解决方案--------------------------------------------------------
看起来是有点难  还没学到呢
----------------解决方案--------------------------------------------------------
上边的程序无法运行啊   是C用语言写的吗?
----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------
你也就是叫人帮你做出来罢了
只是用激将法啊
----------------解决方案--------------------------------------------------------
c+++
----------------解决方案--------------------------------------------------------
是位大姐吧,,真是辛苦你了。只是感觉你的太复杂了,我印了一份高高兴兴的拿给老师,没想到调试一下问题多多,还好老师忍住没打我。
不过还是要谢谢你了,以后再请教你;咯
----------------解决方案--------------------------------------------------------
哈哈~~~这个......
----------------解决方案--------------------------------------------------------

我说下思路吧。好久没做C的程序了,也没有工具。
A---------------打印4门课程的总成绩。
B---------------打印出平均成绩
C---------------打印出最高分的学生信息
D--------------显示所以学生的信息
E--------------添加一个学生的信息、
F-------------删除一个学生的信息
Q------------退出
每一个要求做成一个函数,在main函数中循环记录学生信息,并记录在数组中,数组要是全局的。学号和姓名可以用字符串,成绩用double型。然后每个函数按照要求对数组进行处理就可以了。


----------------解决方案--------------------------------------------------------
  相关解决方案