高手救命

gam021 2006-05-10 04:43:16
编写一个程序,完成根据学员姓名查询成绩的功能。查询功能通过函数实现。定义一个学员结构,该结构包括三个成员:姓名,成绩,学号。学员定义一个结构数组,保存所有学员的信息(一共有5个学员);首先录入所有学员的信息,然后调用查询函数获得要查询的学员所处的位置,输出该学员的成绩,并按成绩大小排序。

struct student
{
char name[15];
int score;
int xuhao;
}


...全文
161 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
逸学堂 2006-05-10
  • 打赏
  • 举报
回复
新手乐园以后再有作业帖,直接转非技术版。

都说学校教育不行了,这到好学生都懒成这个样子,怪不得学校。
jixingzhong 2006-05-10
  • 打赏
  • 举报
回复
参考一下,差不多的东西 ....
总不能完全的实现你的要求的吧 ...

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
typedef struct StuTag{
char id[20];
char name[20];
int age;
float score;
}Stu;
typedef struct NodeTag{
Stu val;
struct NodeTag *next;
}Node,*Link;
typedef void (*FUNP)(Link*,Link);
static FUNP funp;
const int LEN=sizeof(Node);
Link CreateNode()
{
Link node=(Link)malloc(LEN);
if(!node)return NULL;
printf("\n请输入学生信息:");
printf("\n请输入学生ID,姓名,年龄,成绩(以空格分开):\n");
scanf("%s%s%d%f",&node->val.id,node->val.name,\
&node->val.age,&node->val.score);
node->next=NULL;
printf("\n");
return node;
}
void OrderInsertNode(Link *head,Link node)
{
if(!(*head))*head=node;
else if((*head)->val.score>node->val.score)
{
node->next=*head;
*head=node;
}
else
{
Link p=*head,q;
while(p&&p->val.score<=node->val.score)q=p,p=p->next;
if(!p)q->next=node;
else
{
node->next=p;
q->next=node;
}
}
}
void InsertNode(Link *head,Link node)
{
Link p,q;
if(!*head)*head=node;
else
{
p=*head;
while(p)
{
q=p;
p=p->next;
}
q->next=node;
}
}
void CreateLink(Link *head)
{
int n;
Link temp;
printf("请输入总人数\n");
scanf("%d",&n);
while(n--)
{
if(!(temp=CreateNode()))return;
funp(head,temp);
}
}
void DisplayNode(Link node)
{
if(!node)return;
printf("%d %s %d %.2f\n",node->val.id,node->val.name,\
node->val.age,node->val.score);
}
void DisplayLink(Link head)
{
while(head)
{
DisplayNode(head);
head=head->next;
}
printf("\n");
}
void DestroyLink(Link *head)
{
Link p=*head;
while(*head)
{
p=*head;
*head=(*head)->next;
free(p);
}
}
void visit(Link head,float require)
{
if(!head)return;
if(funp==InsertNode)
{
while(head)
{
if(head->val.score>=require)DisplayNode(head);
head=head->next;
}
}
else if(funp==OrderInsertNode)
{
while(head&&head->val.score<require)head=head->next;
DisplayLink(head);
}
}
void FindNode(Link *head,char *name)
{
int mask=0;
Link p=*head;
while(p)
{
if(!strcmp(p->val.name,name))
{
DisplayNode(p);
mask=1;
}
p=p->next;
}
if(!mask)
{
printf("没有找到,请输入这个学生的全部信息:\n");
funp(head,CreateNode());
}
}
void Welcome(int *iChoice)
{
system("CLS");
printf("*********欢迎光临学生管理系统*********\n");
printf("*1.构建学生信息库. *\n");
printf("*2.构建学生信息库(同时排序). *\n");
printf("*3.查看全部学生信息. *\n");
printf("*4.查找学生. *\n");
printf("*5.打印及格者. *\n");
printf("*6.退出. *\n");
printf("**************************************\n");
do scanf("%d",iChoice);
while(*iChoice<1||*iChoice>6);
}
int main()
{
int val,iChoice;
float require;
Link head=0;
char name[20];
funp=InsertNode;
do
{
Welcome(&iChoice);
switch(iChoice)
{
case 1:
funp=InsertNode;
CreateLink(&head);
printf("无序表已经创建好了!\n");
system("PAUSE");
break;
case 2:
funp=OrderInsertNode;
CreateLink(&head);
printf("有序表已经创建好了!\n");
system("PAUSE");
break;
case 3:
DisplayLink(head);
system("PAUSE");
break;
case 4:
printf("请输入学生姓名\n");
scanf("%s",name);
FindNode(&head,name);
system("PAUSE");
break;
case 5:
printf("请输入及格成绩:\n");
scanf("%f",&require);
visit(head,require);
system("PAUSE");
break;
case 6:
DestroyLink(&head);
}
}while(iChoice!=6);
return 0;
}
jixingzhong 2006-05-10
  • 打赏
  • 举报
回复
要期末了,作业自然多了 ...
nasi00 2006-05-10
  • 打赏
  • 举报
回复
最近的作业贴很多阿...

33,319

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧