#include
#include
#include
typedef struct _STU
{
char num[10];
char name[10];
int s1,s2,s3;
int sall;//S1+S2+S3
struct _STU* pNext;
} STUNODE;
//声明链表的头和尾
STUNODE* g_pHead = NULL; //O
STUNODE* g_pEnd = NULL;
//排序
void sort();
//清空链表,防止内存泄漏
void freenode()
{
STUNODE* pTemp = g_pHead;
while (g_pHead != NULL)
{
//记录节点
pTemp = g_pHead;
//向后移动了一个
g_pHead = g_pHead->pNext;
//删除节点
free(pTemp);
}
}
//菜单
void Printmnue()
{
printf("1.添加学生数据\n");
printf("3.排序\n");
printf("6.显示学生信息\n");
printf("7.退出\n");
}
//添加学生
void add(char *num,char *name,int s1,int s2,int s3)
{
//创建一个节点
STUNODE* pTemp =(STUNODE*)malloc(sizeof (STUNODE));
//第一步,检验参数的合法性
if (NULL == num || NULL == name || s1 < 0||s2<0||s3<0)
{
printf ("学生信息输入错误!\n");
return ;
}
//节点成员符初始值
strcpy(pTemp->num, num);
strcpy(pTemp->name, name);
pTemp->s1 = s1;
pTemp->s2 = s2;
pTemp->s3 = s3;
pTemp->pNext = NULL;
//接在链表上
if (NULL == g_pHead || NULL == g_pEnd)
{
g_pHead = pTemp;
//g_pEnd = pTemp;
}
else
{
g_pEnd->pNext = pTemp; //链接
//g_pEnd = pTemp; //向后移动
}
g_pEnd = pTemp;
}
//显示所有学生
void show()
{ //声明指针
STUNODE* pTemp = g_pHead;
while (pTemp != NULL)//遍历链表
{
printf ("学号:%s\t, 姓名:%s\t, 语文:%d\t, 数学:%d\t, 英语:%d\t\n", pTemp->num, pTemp->name, pTemp->s1, pTemp->s2, pTemp->s3);
//向下走一步
pTemp = pTemp->pNext;
}
}
int main()
{
int choice=-1; //初始化
char num[10] = {'\0'};
char name[10] = {'\0'};
int s1= -1;
int s2= -1;
int s3= -1;
int sum;//=s1+s2+s3;
int flag= 1;
STUNODE* pTemp = NULL;
Printmnue();
while (flag)
{
printf("请输入你的选择(1-7)\n");
scanf("%d", &choice);
switch (choice)
{
case 1:
//尾添加
printf ("输入学号:");
scanf ("%s", num);
printf ("输入姓名:");
scanf ("%s", name);
printf ("输入语文成绩:");
scanf ("%d", &s1);
printf ("输入数学成绩:");
scanf ("%d", &s2);
printf ("输入英语成绩:");
scanf ("%d", &s3);
add(num, name, s1,s2,s3);
break;
case 3:
//排序
sort();
break;
case 6:
//显示所有学生
show();
break;
case 7:
//退出
flag=0;
break;
}
}
//释放链表
freenode();
system("pause");
return 0;
}
//排序
void sort()
{
STUNODE* pTemp = g_pHead;
char num[10] = {0};
char name[10] = {'\0'};
int s1,s2,s3;
int sum;
STUNODE *p,*q;
for(p=g_pHead;p!=NULL;p=p->pNext)
{
for(q=p;q!=NULL;q=q->pNext)
{
if((q->s1 +q->s2 +q->s3 )pNext->s1 +q->pNext->s2 +q->pNext->s3 ))
{
s1=q->s1 ,q->s1=q->pNext->s1,q->pNext->s1=s1;
s2=q->s2 ,q->s2=q->pNext->s2,q->pNext->s2=s2;
s3=q->s3 ,q->s3=q->pNext->s3,q->pNext->s3=s3;
strcpy(num, q->num );
strcpy(q->num,q->pNext->num );
strcpy(q->pNext->num,num);
strcpy(name, q->name );
strcpy(q->name,q->pNext->name );
strcpy(q->pNext->name,name);
}
}
}
//STUNODE* pTemp = g_pHead;
while (pTemp != NULL)//遍历链表
{
printf ("学号:%s\t, 姓名:%s\t, 英语:%d\t, 计算机:%d\t, 数学:%d\t\n", pTemp->num, pTemp->name, pTemp->s1, pTemp->s2, pTemp->s3);
//向下走一步
pTemp = pTemp->pNext;
}
}