C语言程序问题!!!!

设计一个结构体数组,用于存储N个学生的信息,每个学生的数据包括学号(num)、姓名(name[20])、性别(sex)、年龄(age)、三门课成绩(score[3])。要求程序具有如下功能:
程序运行时,首先显示一个菜单,菜单内容包括:
1,输入学生信息。
2,检索学生信息。
3,从学号、姓名、年龄、和某门课程成绩中选择一项,进行学生信息排序。
选择了某项功能,完成后,可以再返回菜单。

#include<stdio.h>
#include<stdlib.h>
struct student
{
long num;
char name[20];
char sex[10];
int age;
float score[3];
struct student *next;
};
typedef struct student LIB;
LIB *entering();
LIB *insertStudent(LIB *h,LIB *s);
LIB *dataStudentSort(LIB *h);
LIB *deteleStudent(LIB *h,long n);
void search(LIB *h,long n);
exprot(LIB *h);
LIB *entering()
{
LIB *h,*q,*p;
long i,n;
h=(LIB*)malloc(sizeof(LIB));
h->next=NULL;
printf("\t\t\t\t输入学生的数量: ");
scanf("%ld",&n);
for(i=0;i<n;i++)
{
p=(LIB*)malloc(sizeof(LIB));
p->next=NULL;
if(h->next==NULL)
h->next=p;
else
q->next=p;
printf("请输入第%d个学生的数据是: \n",i+1);
printf("\t\t学号: ");
scanf("%ld",&p->num);
printf("\t\t姓名: ");
scanf("%s",&p->name);
printf("\t\t性别: ");
scanf("%s",&p->sex);
printf("\t\t年龄: ");
scanf("%d",&p->age);
printf("\t\t第一门课的成绩: ");
scanf("%f",&p->score[0]);
printf("\t\t第二门课的成绩: ");
scanf("%f",&p->score[1]);
printf("\t\t第三门课的成绩: ");
scanf("%f",&p->score[2]);
q=p;
p->next=NULL;
}
return h;
}

/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/

void main()
{
LIB *head,*p;
long n,x,y;
while(1)
{
printf("\n-------------------------------- 学生管理系统 -------------------------------\n\n");
printf("\t\t\t\t1. 输入数据.\n\n");
printf("\t\t\t\t2. 加入新数据.\n\n");
printf("\t\t\t\t3. 删除不要的数据.\n\n");
printf("\t\t\t\t4. 查询数据.\n\n");
printf("\t\t\t\t5. 排序数据.\n\n");
printf("\t\t\t\t6. 输出数据.\n\n");
printf("\t\t\t\t7. 退出 .\n\n");
printf("--------------------------------------------------------------------------------\n");
while(1)
{
printf("\t\t\t请选择你要的功能: ");
scanf("%d",&y);
switch(y)
{
case 1:
head=entering();
break;
case 2:
printf("输入要加入学生的数据:\n");
p=(LIB*)malloc(sizeof(LIB));
p->next=NULL;
printf("\t\t学号: ");
scanf("%ld",&p->num);
printf("\t\t姓名: ");
scanf("%s",&p->name);
printf("\t\t性别: ");
scanf("%s",&p->sex);
printf("\t\t年龄: ");
scanf("%d",&p->age);
printf("\t\t第一门课的成绩: ");
scanf("%f",&p->score[0]);
printf("\t\t第二门课的成绩: ");
scanf("%f",&p->score[1]);
printf("\t\t第三门课的成绩: ");
scanf("%f",&p->score[2]);
insertStudent(head,p);
printf("输出加入后学生的总数据:\n");
export(head);
break;
case 3:
printf("请输入要删除的学生的学号: ");
scanf("%ld",&n);
head=deteleStudent(head,n);
printf("请输出删除后的学生总数据:\n");
export(head);
break;
case 4:
printf("请输入要查询的学号--号码: ");
scanf("%ld",&x);
search(head,x);
break;
case 5:
printf("输出排序后的数据: \n");
head=dataStudentSort(head);
export(head);
break;
case 6:
printf("输出数据: \n");
export(head);
break;
case 7: exit(0);
}
break;
}
}
}

/*-----------------------------------------------------------------------------------------*/

export(LIB *h)
{
LIB *p;
p=h->next;
printf("----------------------------------------------------------------\n");
printf("学号\t姓名\t性别\t年龄\t三门课的成绩 \n\n");
while(p!=NULL)
{
printf("%ld\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->sex,p->age,p->score[0],p->score[1],p->score[2]);
p=p->next;
}
}
/*-----------------------------------------------------------------------------------------*/
LIB *insertStudent(LIB *h,LIB *s)
{
LIB *q,*p;
p=h->next;
if(h->next==NULL)
{
h->next=s;
s->next=NULL;
}
else
{
while(s->num>p->num&&p->next!=NULL)
{
q=p;
p=p->next;
}
if(s->num<=p->num)
{
if(h->next==p)
{
h->next=s;
s->next=p;
}
else
{
q->next=s;
s->next=p;
}
}
else
{
p->next=s;
s->next=NULL;
}
}
return h;
}

LIB *dataStudentSort(LIB *h)
{
LIB *p,*h1,*q,*back,*front,*newp;
h1=(LIB *)malloc(sizeof(LIB));
newp=h1;
while(h->next!=NULL)
{
back=h->next;
front=h;
q=back;
p=front;
while(q->next!=NULL)
{
q=q->next;
p=p->next;
if(q->num<back->num)
{
back=q;
front=p;
}
}
front->next=back->next;
newp->next=back;
newp=back;
newp->next=NULL;
//h=h->next;
}
h=h1;
return h;
}

/*-----------------------------------------------------------------------------------------*/
LIB *deteleStudent(LIB *h,long n)
{
LIB *q,*p=h->next;
if(h==NULL)
printf("因为链表为空,没有要删除的数据!\n");
else
{
while(p->num!=n&&p->next!=NULL)
{
q=p;
p=p->next;
}
if(p->num==n)
{
if(h->next==p)
h->next=p->next;
else
q->next=p->next;
free(p);
printf("成功删除了学号为%d的学生数据!\n",n);
}
else
printf("找不到你要删除的学生数据!\n");
}
return h;
}
/*-----------------------------------------------------------------------------------------*/
void search(LIB *h,long n)
{
LIB *q,*p=h->next;
if(h->next==NULL)
{
printf("对不起,由于链表为空,所以没有代要找的数据!\n");
}
else
{
while(p->num!=n&&p->next!=NULL)
{
q=p;
p=p->next;
}
if(p->num==n)
{
printf("学号\t姓名\t性别\t年龄\t三门课的成绩 \n\n");
printf("%ld\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->sex,p->age,p->score[0],p->score[1],p->score[2]);
}
else
printf("对不起,没有你要找的数据!!!\n");
}
}追问

有无简单点的啊

追答

#include
#define N 3

struct student
{
int num;
char name[20];
char sex[10];
int age;
float score[3];
}stu[N];
void main()
{
struct student t;
int i,j,k;
printf("输入每个学生的记录:\n");
for(i=0;istu[j].num)
k=j;
if(k!=i)
{
t=stu[i];
stu[i]=stu[k];
stu[k]=t;
}
}
printf("输出排后的学生记录:\n");
for(i=0;i<N;i++)
printf("%d %s %s %d %.2f %.2f %.2f\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-25
老兄,这种活没有人会帮你的,只能自己努力了。
第2个回答  2011-05-25
#define N 100
typedef struct _Student
{
int num ;
char name[20;
int sex;
unsigned short age;
short score[3];
} Student ;

Student arrStudent[N] ;本回答被网友采纳
相似回答
大家正在搜