这是我用链表结构写的学生管理系统,但老是有错误,还有就是对于排序不知道该怎么开始写,因为写出来基本不对,求指教!
#include<stdio.h>#include<stdlib.h>
#define LEN sizeof(struct student)
struct student
{
long num; //学号
char name; //姓名
float score[3]; //三门课程的成绩
double avr; //平均成绩
struct student *next;
};
int n;
struct student *creat() //创建链表
{
struct student *head;
struct student *p1,*p2;
n=0;
p1=p2=(struct student*)malloc(LEN);
printf("请输入学生的学号:");
scanf("%d",&p1->num);
printf("请输入学生的姓名:");
scanf("%s",p1->name);
printf("请输入学生的成绩:");
scanf("%f%f%f",&p1->score[0],&p1->score[1],&p1->score[2]);
head=NULL;
while(p1->num!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct student*)malloc(LEN);
scanf("%d%s%f%f%f",&p1->num ,p1->name,&p1->score[0], &p1->score[1],&p1->score[2]);
}
p2->next=NULL;
return head;
}
struct student *ord(struct student *head) //打算排序,可是不知道怎么写下去了,求指教
{
struct student *head;
struct student *p1,*p2;
}
void print(struct student *head) //输出学生信息
{
struct student *p;
printf("\n学生信息表\n",n);
printf("学号 姓名 数学 英语 c语言 平均成绩\n");
p=head;
if(head!=NULL)
do
{
printf("\nnum:%d\nname:%s\nscore:%f%f%f\n",p->num ,p->name,p->score[0],p->score[1],p->score[2],p->avr);
p=p->next ;
}while(p!=NULL);
}
struct student *delet(struct student *head) //删除信息
{
struct student *p1,*p2;
int x;
n=0;
printf("请输入要删除的学生的学号:");
scanf("%d",&x);
if(head=NULL)
{
printf("\nLEN null\n");
return head;
}
p1=head;
p2=p1;
while(p1->next !=NULL)
{
if(p1->num ==x&&head!=p1)
{
p2->next =p1->next ;
break;
}
if(head->num ==x)
{
head=head->next ;
return head;
}
p2=p1->next;
p1=p1->next;
return head;
}
struct student *insert(struct student *head) //插入学生信息
{
struct student *p1,*p2;
n=0;
p1=p2=(struct student*)malloc(LEN);
printf("请输入你想插入的学生的信息:");
printf("学号 姓名 成绩\n");
scanf("%d%s%f%f%f",&p1->num,p1->name,&p1->score[0],&p1->score[1],&p1->score[2]);
while(p1->next!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct student*)malloc(LEN);
scanf("%d,%f%f%f",&p1->num ,&p1->score,&p1->score[1],&p1->score[2]);
}
p2->next=NULL;
return head;
}
void main()
{ struct student *head;
int k; //控制循环的标志
while(1)
{
printf(" -----------------------------------\n");
printf(" | 学生成绩管理 |\n");
printf(" |__ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|\n");
printf(" | 1. 输入学生信息 |\n");
printf(" | 2. 按平均成绩的高低排序 |\n");
printf(" | 3. 输出学生信息 |\n");
printf(" | 4. 删除学生信息 |\n");
printf(" | 5. 插入学生信息 |\n");
printf(" | 0. 退出程序 |\n");
printf(" ------------------------------------\n");
printf(" 请输入你的选择:\n");
scanf("%d",&k);
switch(k)
{
case 1:
head=creat();
system("CLS");
break;
/* case 2:
head=ord(head);
system("CLS");
print(head);
break;*/
case 3:
print(head);
system("CLS");
break;
case 4:
head=delet(head);
system("CLS");
print(head);
break;
case 5:
head=insert(head);
print(head);
system("CLS");
break;
case 0: exit(0);
default: printf("选择错误,重新开始!\n");
}
} //while
}