/*Q4609.(10分)建立学生成绩管理系统,对学生以下信息: 学号、名字、成绩(语文、数学、外语) 进行管理。要
求利用结构体变量记录每名学生的学号、名字、成绩(语文、数学、外语),并建立单向链表来存放学生的信息。
功能实现要求如下:
(1)写函数Append ()实现使用单链表来添加学生的信息。√
(2)写函数DisLink()输出所有学生的信息。 √
(3)写函数Sort()对学生成绩进行排序。
(4)写DeleteMemory()函数释放链表所占内存空间 √
其中结构体类型定义如下:
struct stu
{
char ID[12];//学号
char name[20];//姓名
int c1;//语文成绩
int c2;//数学成绩
int c3;//英语成绩
struct stu * next;
}
测试用例如下:
1 增加数据
2 退出
选择:1
请输入学号:001
请输入名字:张三
请依次输入语文,数学外语成绩:88 89 90
1 增加数据
2 退出
选择:1
请输入学号:0*/
#include
#include
struct stu
{
char ID[12];//学号
char name[20];//姓名
int c1;//语文成绩
int c2;//数学成绩
int c3;//英语成绩
struct stu * next;
};
struct stu*Append()
{
struct stu*pHead=NULL,*pNew=NULL,*pTail=NULL;
pNew=(struct stu*)malloc(sizeof(struct stu));//给一个stu分配空间!
int i=0;
int a;
printf("1 增加数据\n");
printf("2 退出\n");
printf("选择");
scanf("%d",&a);
for(i=0;i<100;i++)
{
if(a==1)
{
printf("请输入学号:");
scanf("%s",&pNew->ID);
printf("请输入名字:");
scanf("%s",&pNew->name);
printf("请依次输入语文,数学,外语成绩:");
scanf("%d%d%d",&pNew->c1,&pNew->c2,&pNew->c3);
if(pHead==NULL)
pHead=pNew;
else
pTail->next=pNew;
pTail=pNew;
pNew->next=NULL;
printf("1 增加数据\n");
printf("2 退出\n");
printf("选择");
scanf("%d",&a);
getchar(); //吞掉回车,不然的话回车会进入gets.gets直接结束
}
else break;
}
return pHead;
}
void DisLink(struct stu *pHead)
{
struct stu*p=pHead;
int n=1;
printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n");
while(p!=NULL)
{
int sum=p->c1+p->c2+p->c3;
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,sum);
p=p->next;
n++;
}
}
void Sort(struct stu*pHead)
{
int n=0;
struct stu *p,*q,*t;
p=pHead;
while(p!=NULL)
{
p->next=q;
if((p->c1+p->c2+p->c3)>(q->c1+q->c2+q->c3))
{
t=p,p=q,q=p;
}
p=p->next;
}
printf("排序后\n");
printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n");
while(p!=NULL)
{
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,p->c1+p->c2+p->c3);
p=p->next;
n++;
}
}
void DeleteMemory(struct stu* pHead)
{
struct stu *p;
while (NULL != pHead)
{
p = pHead;
pHead = pHead->next;
free(p); // 下一个节点 free(Pointer);
}
}
int main()
{
struct stu *p;
p=Append();
DisLink(p);
Sort(p);
DeleteMemory(p);
return 0;
}