注:还没写全局指针的回收处理。

 

头文件定义

STUHEADERFILES.h

#ifndef _STUHEADERFILES_H_
#define _STUHEADERFILES_H_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "STUSCORES.h"

#endif

 

因为是随兴而写的。函数注释是随着函数实现一起写的。等有时间再改过来。很多都不大合理,需要一起修改。

STUSCORES.h

#ifndef _STUSCORES_H_
#define _STUSCORES_H_


/*宏定义*/
#define MAX_ID 30                            //ID最大字节数
#define MAX_NAME 30                            //姓名最大字节数
#define MAX_SEX 4                            //性别最大字节数



/*结构体别名定义*/
typedef struct siStudentInfor *ptrStudentInformation;                //函数类型指针定义
typedef struct siStudentInfor varStudentInformaiton;                //自变量定义

/*嵌套结构体定义*/
struct siStudentScoreInfor
{
    double dsCoresTotol;        
    double dsCoresEve;
};

/*学生成绩管理系统结构体定义*/
struct siStudentInfor
{
    char cID[MAX_ID];                            //ID编号
    char csName[MAX_NAME];                        //姓名
    char csSex[MAX_SEX];                        //性别
    int isAge;                                    //年龄
    int isGrade;                                //年级
    int isClass;                                //班级
    int isSeat;                                    //座位
    float fsChinese;                            //语文成绩
    float fsMath;                                //数学成绩
    float fsEnglish;                            //英语成绩
    struct siStudentScoreInfor *siStudentScore;    //成绩统计结构
    ptrStudentInformation ptrNext;                //指针域


};


/*全局指针定义*/
varStudentInformaiton *ptrStuNodes;                //头节点
varStudentInformaiton *ptrSortNodes;            //排序头节点
varStudentInformaiton *ptrNewNodes;                //新节点

/*文件名:LISTMODE_MODE_INSERT.c*/
void Mode_Data_Push(varStudentInformaiton **ptrPushNodes, varStudentInformaiton **ptrNewNodes);
void Mode_Data_Push_Option(varStudentInformaiton **ptrPushNodes, varStudentInformaiton **ptrNewNodes);


/*文件名:LISTMODE_MODE_MODIFY.c*/
void Mode_Node_Modify_Id(varStudentInformaiton **currentNodes);
void Mode_Node_Modify_Name(varStudentInformaiton **currentNodes);
void Mode_Node_Modify_Sex(varStudentInformaiton **currentNodes);
void Mode_Node_Modify_Age(varStudentInformaiton **currentNodes);
void Mode_Node_Modify_Grade(varStudentInformaiton **currentNodes);
void Mode_Node_Modify_Class(varStudentInformaiton **currentNodes);
void Mode_Node_Modify_Seat(varStudentInformaiton **currentNodes);
void Mode_Node_Modify_China(varStudentInformaiton **currentNodes);
void Mode_Node_Modify_Math(varStudentInformaiton **currentNodes);
void ModifyModeEnglish(varStudentInformaiton **currentNodes);
void Mode_Node_Modify_Option(varStudentInformaiton **ptrLishNodes);

/*文件名:LISTMODE_MODE_QUERY.c*/
void Mode_Querry_ID(varStudentInformaiton *ptrQuerryNodes);
void Mode_Querry_Name(varStudentInformaiton *ptrQuerryNodes);
void Mode_Querry_Sex(varStudentInformaiton *ptrQuerryNodes);
void Mode_Querry_Age(varStudentInformaiton *ptrQuerryNodes);
void Mode_Querry_Grade(varStudentInformaiton *ptrQuerryNodes);
void Mode_Querry_Class(varStudentInformaiton *ptrQuerryNodes);
void Mode_Querry_Seat(varStudentInformaiton *ptrQuerryNodes);
void Mode_Querry_China(varStudentInformaiton *ptrQuerryNodes);
void Mode_Querry_Math(varStudentInformaiton *ptrQuerryNodes);
void Mode_Querry_English(varStudentInformaiton *ptrQuerryNodes);
void Mode_Querry_Total(varStudentInformaiton *ptrQuerryNodes);
void Mode_Querry_Average(varStudentInformaiton *ptrQuerryNodes);
void Mode_Querry_Choose(varStudentInformaiton *ptrQuerryNodes);


/*文件名:LISTMODE_MODE_REMOVE.c*/
void Mode_Data_Remove(varStudentInformaiton **ptrListNode);

/*文件名:LISTMODE_MODE_SHOW.c*/
void Mode_Show_Choose(varStudentInformaiton *ptrListMode);

/*文件名:LISTMODE_MODE_SORT.c*/
ptrStudentInformation Mode_Sort_China(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes);
ptrStudentInformation Mode_Sort_Math(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes);
ptrStudentInformation Mode_Sort_English(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes);
ptrStudentInformation Mode_Sort_Total(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes);
ptrStudentInformation Mode_Sort_Average(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes);
ptrStudentInformation Mode_Sort_Ascending_China(varStudentInformaiton *listHead);
ptrStudentInformation Mode_Sort_Ascending_Math(varStudentInformaiton *listHead);
ptrStudentInformation Mode_Sort_Ascending_English(varStudentInformaiton *listHead);
ptrStudentInformation Mode_Sort_Ascending_Total(varStudentInformaiton *listHead);
ptrStudentInformation Mode_Sort_Ascending_Average(varStudentInformaiton *listHead);
void Mode_Sort_Choose(varStudentInformaiton *ListNode);


/*文件名:LISTMODE_MODIFYOPTION.c*/
void ModifyModes_Id(varStudentInformaiton **CurrentListNode, char toModifyNodesId[MAX_ID]);
void ModifyModes_Name(varStudentInformaiton **CurrentListNode, char toModifyNodesName[MAX_NAME]);
void ModifyModes_Sex(varStudentInformaiton **CurrentListNode, char toModifyNodesSex[MAX_SEX]);
void ModifyModes_Age(varStudentInformaiton **CurrentListNode, int toModifyNodesAge);
void ModifyModes_Grade(varStudentInformaiton **CurrentListNode, int toModifyNodesGrade);
void ModifyModes_Class(varStudentInformaiton **CurrentListNode, int toModifyNodesClass);
void ModifyModes_Seat(varStudentInformaiton **CurrentListNode, int toModifyNodesSeat);
void ModifyModes_China(varStudentInformaiton **CurrentListNode, float toModifyNodesChina);
void ModifyModes_Math(varStudentInformaiton **CurrentListNode, float toModifyNodesMath);
void ModifyModes_English(varStudentInformaiton **CurrentListNode, float toModifyNodesEnglish);


/*文件名:STUDENT_LISTNODE_BOOLJUDGE.c*/
int bool_HeadNode_Null(varStudentInformaiton *ptrHeadNodes);


/*文件名:STUDENT_LISTNODE_FILESOPTION.c*/

void ListNode_Files_Write(varStudentInformaiton *ptrListHeadNode);
void ListNode_Files_Create_NewNodes(FILE **ReadFiles, varStudentInformaiton **ptrListNewNodes);
void ListNode_Files_Read(varStudentInformaiton *ptrListHeadNode);

/*文件名:STUDENT_LISTNODE_INIT.c*/
ptrStudentInformation ListNode_Init_HeadNodes(varStudentInformaiton *var_head);


/*文件名:STUDENT_LISTNODE_INSERT.c*/
ptrStudentInformation ListNode_Insert_Create_NewNodes(varStudentInformaiton *ptrList_NewNodes, char cId[MAX_ID], char cName[MAX_NAME], char cSex[MAX_SEX], int iAge, int igrade, int iclass, int iseat, float fChinese, float fMath, float fEnglish);
ptrStudentInformation ListNode_Insert_Push_FirstNodes(varStudentInformaiton *ptrHeadNodes, varStudentInformaiton *ptrNewNodes);
ptrStudentInformation ListNode_Insert_Push_LastNodes(varStudentInformaiton *ptrList_Nodes, varStudentInformaiton *ptrListNew);
void  ListNode_Insert_Push_SpecifiedNodes(varStudentInformaiton **ptrCurrentList_Nodes, varStudentInformaiton *ptrNewNodes);
void  ListNode_Insert_Push_SpecifiedNodes_head(varStudentInformaiton **ptrCurrentList_Nodes, varStudentInformaiton *ptrNewNodes);


/*文件名:STUDENT_LISTNODE_INTERFACE.c*/

void ListNode_Interface_Sort(varStudentInformaiton *varLishNode);
void ListNode_Interface_Querry(varStudentInformaiton *varLishNode);
void ListNode_Interface_Modify(varStudentInformaiton **ptrLishNode);
void ListNode_Interface_Show();
void ListNode_Interface_Student_Mode();
void ListNode_Interface_Student(void);



/*文件名:STUDENT_LISTNODE_REMOVE.c*/
void ListNode_Remove_Node(varStudentInformaiton **ptrNode);
void ListNode_Remove_HeadNodes(varStudentInformaiton **ptrFirstNode);
void ListNode_Remove_LastNodes(varStudentInformaiton **ptrNodes);
void ListNode_Remove_SpecifiedNodes(varStudentInformaiton **ptrNodes);
void ListNode_Remove_AllNodes(varStudentInformaiton **ptrNodes);



/*文件名:STUDENT_LISTNODE_TRAVERSESHOW.c*/
ptrStudentInformation ListNode_Traverse_Current_Id(varStudentInformaiton *ptrList_Nodes, char serchID[MAX_ID]);
void ListNode_Traverse_Current_Id_Show(varStudentInformaiton *ptrList_Nodes, char serchID[MAX_ID]);
void ListNode_Traverse_Current_Name_Show(varStudentInformaiton *ptrList_Nodes, char serchName[MAX_NAME]);
void ListNode_Traverse_Current_Sex_Show(varStudentInformaiton *ptrList_Nodes, char serchSex[MAX_SEX]);
void ListNode_Traverse_Current_Age_Show(varStudentInformaiton *ptrList_Nodes, int iVarAge);
void ListNode_Traverse_Current_Grade_Show(varStudentInformaiton *ptrList_Nodes, int iVarGrade);
void ListNode_Traverse_Current_Class_Show(varStudentInformaiton *ptrList_Nodes, int iVarClass);
void ListNode_Traverse_Current_Seat_Show(varStudentInformaiton *ptrList_Nodes, int iVarSeat);
void ListNode_Traverse_Current_China_Show(varStudentInformaiton *ptrList_Nodes, float fVarChina);
void ListNode_Traverse_Current_Math_Show(varStudentInformaiton *ptrList_Nodes, float fVarMath);
void ListNode_Traverse_Current_Eng_Show(varStudentInformaiton *ptrList_Nodes, float fVarEng);
void ListNode_Traverse_Current_Aver_Show(varStudentInformaiton *ptrList_Nodes, double dVarEve);
void ListNode_Traverse_Current_Total_Show(varStudentInformaiton *ptrList_Nodes, double dVarTotol);
void ListNode_Traverse_Order_Show(varStudentInformaiton *varList_Nodes);
void ListNode_Traverse_Current_Reverse_Show(varStudentInformaiton *varList_Nodes);
void ListNode_Traverse_Current_Node_Show(varStudentInformaiton *varListTemp);
void ListNode_Traverse_Asc_MessageBox();
void ListNode_Traverse_Order_MessageBox();

#endif

 

 

LISTMODE_MODE_INSERT.c文件

#include "STUHEADERFILES.h"




/*
函数:
Mode_Data_Push

功能:
录入数据
并插入链表尾部(尾插法添加节点)

参数:
ptrPushNodes:
结构体二级指针
接收链表头节点
ptrNewNodes:
结构体二级指针
传入一个已录入数据的新节点

返回值:
无返回值
*/

void Mode_Data_Push(varStudentInformaiton **ptrPushNodes, varStudentInformaiton **ptrNewNodes)
{
    char m_ID[MAX_ID];
    char m_Name[MAX_NAME];
    char m_Sex[MAX_SEX];
    int m_Age, m_grade, m_class, m_seat;
    float m_China, m_Math, m_English;
    printf("ID:");
    scanf_s("%s",m_ID,MAX_ID);
    printf("姓名:");
    scanf_s("%s", m_Name, MAX_NAME);
    printf("性别:");
    scanf_s("%s", m_Sex, MAX_SEX);
    printf("年龄:");
    scanf_s("%d", &m_Age);
    printf("年级:");
    scanf_s("%d", &m_grade);
    printf("班级:");
    scanf_s("%d", &m_class);
    printf("座位:");
    scanf_s("%d", &m_seat);
    printf("语文成绩:");
    scanf_s("%f", &m_China);
    printf("数这成绩:");
    scanf_s("%f", &m_Math);
    printf("英语成绩:");
    scanf_s("%f", &m_English);
    (*ptrNewNodes) = ListNode_Insert_Create_NewNodes((*ptrNewNodes), m_ID, m_Name, m_Sex, m_Age, m_grade, m_class, m_seat, m_China, m_Math, m_English);
    (*ptrPushNodes) = ListNode_Insert_Push_LastNodes((*ptrPushNodes), (*ptrNewNodes));
}


/*
函数:
Mode_Data_Push_Option

功能:
录入数据条件功能模块。输入y录入节点数据,输入n退出操作

参数:
ptrPushNodes
结构体二级指针
接收链表头节点

ptrNewNodes:
结构体二级指针
接收一个已分配内存并录入数据的新节点

返回值:
无返回值
*/
void Mode_Data_Push_Option(varStudentInformaiton **ptrPushNodes,varStudentInformaiton **ptrNewNodes)
{
    char ISYES;
    printf("输入Y:继续操作,输入N退出操作:n");
    scanf_s("%*[n]%c",&ISYES,4);
    while (ISYES=='Y'||ISYES=='y')
    {
        Mode_Data_Push(ptrPushNodes,ptrNewNodes);
        printf("输入Y:继续操作,输入N退出操作:n");
        scanf_s("%*[n]%c", &ISYES,4);
        
    }
    
    
}

 

LISTMODE_MODE_MODIFY.c文件

#include "STUHEADERFILES.h"

/*
函数:Mode_Node_Modify_Id
功能:修改当前节点的ID数据
参数:
currentNodes:结构体指针,接收当前节点,非空节点

返回值:无返回值
*/

void Mode_Node_Modify_Id(varStudentInformaiton **currentNodes)
{
    char setID[MAX_ID];
    printf("需要修改的ID:");
    scanf_s("%s",setID,MAX_ID);
    (*currentNodes) = (*currentNodes)->ptrNext;
    ModifyModes_Id(currentNodes, setID);
    printf("ID修改成功!n");
}

/*
函数:Mode_Node_Modify_Name
功能:修改当前节点的ID数据
参数:
currentNodes:结构体指针,接收当前节点,非空节点

返回值:无返回值
*/

void Mode_Node_Modify_Name(varStudentInformaiton **currentNodes)
{
    char setName[MAX_NAME];
    printf("需要修改的姓名:");
    scanf_s("%s", setName, MAX_NAME);
    (*currentNodes) = (*currentNodes)->ptrNext;
    ModifyModes_Name(currentNodes, setName);
    printf("姓名修改成功!n");
}

/*
函数:Mode_Node_Modify_Sex
功能:修改当前节点的SEX数据
参数:
currentNodes:结构体指针,接收当前节点,非空节点

返回值:无返回值
*/

void Mode_Node_Modify_Sex(varStudentInformaiton **currentNodes)
{
    char setSex[MAX_SEX];
    printf("需要修改的性别:");
    scanf_s("%s", setSex, MAX_SEX);
    (*currentNodes) = (*currentNodes)->ptrNext;
    ModifyModes_Sex(currentNodes, setSex);
    printf("性别修改成功!n");
}

/*
函数:Mode_Node_Modify_Age
功能:修改当前节点的Age数据
参数:
currentNodes:结构体指针,接收当前节点,非空节点

返回值:无返回值
*/

void Mode_Node_Modify_Age(varStudentInformaiton **currentNodes)
{
    int setAge;
    printf("需要修改的年龄:");
    scanf_s("%d", &setAge);
    (*currentNodes) = (*currentNodes)->ptrNext;
    ModifyModes_Age(currentNodes, setAge);
    printf("年龄修改成功!n");
}


/*
函数:Mode_Node_Modify_Grade
功能:修改当前节点的Grade数据
参数:
currentNodes:结构体指针,接收当前节点,非空节点

返回值:无返回值
*/

void Mode_Node_Modify_Grade(varStudentInformaiton **currentNodes)
{
    int setGrade;
    printf("需要修改的年级:");
    scanf_s("%d", &setGrade);
    (*currentNodes) = (*currentNodes)->ptrNext;
    ModifyModes_Grade(currentNodes, setGrade);
    printf("年级修改成功!n");
}

/*
函数:Mode_Node_Modify_Class
功能:修改当前节点的Class数据
参数:
currentNodes:结构体指针,接收当前节点,非空节点

返回值:无返回值
*/

void Mode_Node_Modify_Class(varStudentInformaiton **currentNodes)
{
    int setClass;
    printf("需要修改的班级:");
    scanf_s("%d", &setClass);
    (*currentNodes) = (*currentNodes)->ptrNext;
    ModifyModes_Class(currentNodes, setClass);
    printf("班级修改成功!n");
}

/*
函数:Mode_Node_Modify_Seat
功能:修改当前节点的Seat数据
参数:
currentNodes:结构体指针,接收当前节点,非空节点

返回值:无返回值
*/

void Mode_Node_Modify_Seat(varStudentInformaiton **currentNodes)
{
    int setSeat;
    printf("需要修改的座位:");
    scanf_s("%d", &setSeat);
    (*currentNodes) = (*currentNodes)->ptrNext;
    ModifyModes_Seat(currentNodes, setSeat);
    printf("座位修改成功!n");
}

/*
函数:Mode_Node_Modify_China
功能:修改当前节点的Chinese数据
参数:
currentNodes:结构体指针,接收当前节点,非空节点

返回值:无返回值
*/

void Mode_Node_Modify_China(varStudentInformaiton **currentNodes)
{
    float setChina;
    printf("需要修改的语文成绩:");
    scanf_s("%f", &setChina);
    (*currentNodes) = (*currentNodes)->ptrNext;
    ModifyModes_China(currentNodes, setChina);
    printf("语文成绩修改成功!n");
}

/*
函数:Mode_Node_Modify_Math
功能:修改当前节点的Math数据
参数:
currentNodes:结构体指针,接收当前节点,非空节点

返回值:无返回值
*/

void Mode_Node_Modify_Math(varStudentInformaiton **currentNodes)
{
    float setMath;
    printf("需要修改的数学成绩:");
    scanf_s("%f", &setMath);
    (*currentNodes) = (*currentNodes)->ptrNext;
    ModifyModes_Math(currentNodes, setMath);
    printf("数学成绩修改成功!n");
}

/*
函数:Mode_Node_Modify_English
功能:修改当前节点的Math数据
参数:
currentNodes:结构体指针,接收当前节点,非空节点

返回值:无返回值
*/

void ModifyModeEnglish(varStudentInformaiton **currentNodes)
{
    float setEnglis;
    printf("需要修改的英语成绩:");
    scanf_s("%f", &setEnglis);
    (*currentNodes) = (*currentNodes)->ptrNext;
    ModifyModes_English(currentNodes, setEnglis);
    printf("英语成绩修改成功!n");
}


/*
函数:Mode_Node_Modify_Option

功能:学生成绩修改模块
参数:
ptrLishNodes:
结构体二级指针
接收头节点

返回值:
无返回值
*/
void Mode_Node_Modify_Option(varStudentInformaiton **ptrLishNodes)
{
    int iModifyFlag;
    varStudentInformaiton *varModifyNode;
    char SerchID[MAX_ID];
    varModifyNode = (*ptrLishNodes);
    printf("输入需要修改的数据的ID:");
    scanf_s("%s", SerchID, MAX_ID);
    varModifyNode=ListNode_Traverse_Current_Id(varModifyNode, SerchID);
    printf("选择需要执行的操作项:");
    scanf_s("%d",&iModifyFlag);
    switch (iModifyFlag)
    {
    case 1:
        Mode_Node_Modify_Id(&varModifyNode);
        break;
    case 2:
        Mode_Node_Modify_Name(&varModifyNode);
        break;
    case 3:
        Mode_Node_Modify_Sex(&varModifyNode);
        break;
    case 4:
        Mode_Node_Modify_Age(&varModifyNode);
        break;
    case 5:
        Mode_Node_Modify_Grade(&varModifyNode);
        break;
    case 6:
        Mode_Node_Modify_Class(&varModifyNode);
        break;
    case 7:
        Mode_Node_Modify_Seat(&varModifyNode);
        break;
    case 8:
        Mode_Node_Modify_China(&varModifyNode);
        break;
    case 9:
        Mode_Node_Modify_Math(&varModifyNode);
        break;
    case 10:
        ModifyModeEnglish(&varModifyNode);
        break;
    case 0:
        ListNode_Interface_Student();//主菜单界面
        break;
    default:
        printf("错误的操作!n");
        break;
    }
    printf("按回车键返回主界面");
    getchar();
    getchar();
    system("cls");
    
}

 

LISTMODE_MODE_QUERY.c文件

#include "STUHEADERFILES.h"

/*
函数:Mode_Querry_ID

功能:匹配查询的ID
参数:
ptrQuerryNodes:结构体指针参数,接收一个头节点

返回值:无返回值

*/
void Mode_Querry_ID(varStudentInformaiton *ptrQuerryNodes)
{
    
    char cQueID[MAX_ID];
    printf("输入需要查询的ID:");
    scanf_s("%s",cQueID,MAX_ID);
    ListNode_Traverse_Current_Id_Show(ptrQuerryNodes, cQueID);
    
}
/*
函数:Mode_Querry_Name

功能:匹配查询的NAME
参数:
ptrQuerryNodes:结构体指针参数,接收一个头节点

返回值:无返回值

*/
void Mode_Querry_Name(varStudentInformaiton *ptrQuerryNodes)
{
    
    char cQueName[MAX_NAME];
    printf("输入需要查询的姓名:");
    scanf_s("%s", cQueName, MAX_NAME);
    ListNode_Traverse_Current_Name_Show(ptrQuerryNodes, cQueName);
    
}

/*
函数:Mode_Querry_Sex

功能:匹配查询的SEX
参数:
ptrQuerryNodes:结构体指针参数,接收一个头节点

返回值:无返回值

*/
void Mode_Querry_Sex(varStudentInformaiton *ptrQuerryNodes)
{

    char cQueSex[MAX_SEX];
    printf("输入需要查询的性别:");
    scanf_s("%s", cQueSex, MAX_SEX);
    ListNode_Traverse_Current_Sex_Show(ptrQuerryNodes, cQueSex);

}

/*
函数:Mode_Querry_Sex

功能:匹配查询的AGE
参数:
ptrQuerryNodes:结构体指针参数,接收一个头节点

返回值:无返回值

*/
void Mode_Querry_Age(varStudentInformaiton *ptrQuerryNodes)
{

    int iQueAge;
    printf("输入需要查询的性别:");
    scanf_s("%d", &iQueAge);
    ListNode_Traverse_Current_Age_Show(ptrQuerryNodes, iQueAge);

}

/*
函数:Mode_Querry_Grade

功能:匹配查询的Grade
参数:
ptrQuerryNodes:结构体指针参数,接收一个头节点

返回值:无返回值

*/
void Mode_Querry_Grade(varStudentInformaiton *ptrQuerryNodes)
{

    int iQueAge;
    printf("输入需要查询的年级:");
    scanf_s("%d", &iQueAge);
    ListNode_Traverse_Current_Grade_Show(ptrQuerryNodes, iQueAge);

}

/*
函数:Mode_Querry_Class

功能:匹配查询的Grade
参数:
ptrQuerryNodes:结构体指针参数,接收一个头节点

返回值:无返回值

*/
void Mode_Querry_Class(varStudentInformaiton *ptrQuerryNodes)
{

    int iQueClass;
    printf("输入需要查询的年级:");
    scanf_s("%d", &iQueClass);
    ListNode_Traverse_Current_Class_Show(ptrQuerryNodes, iQueClass);

}

/*
函数:Mode_Querry_Seat

功能:匹配查询的Seat
参数:
ptrQuerryNodes:结构体指针参数,接收一个头节点

返回值:无返回值

*/
void Mode_Querry_Seat(varStudentInformaiton *ptrQuerryNodes)
{

    int iQueSeat;
    printf("输入需要查询的座位:");
    scanf_s("%d", &iQueSeat);
    ListNode_Traverse_Current_Seat_Show(ptrQuerryNodes, iQueSeat);

}

/*
函数:Mode_Querry_China

功能:匹配查询的China
参数:
ptrQuerryNodes:结构体指针参数,接收一个头节点

返回值:无返回值

*/
void Mode_Querry_China(varStudentInformaiton *ptrQuerryNodes)
{

    float fQueChina;
    printf("输入需要查询的座位:");
    scanf_s("%f", &fQueChina);
    ListNode_Traverse_Current_China_Show(ptrQuerryNodes, fQueChina);

}



/*
函数:Mode_Querry_Math

功能:匹配查询的Math
参数:
ptrQuerryNodes:结构体指针参数,接收一个头节点

返回值:无返回值

*/
void Mode_Querry_Math(varStudentInformaiton *ptrQuerryNodes)
{

    float fQueMath;
    printf("输入需要查询的座位:");
    scanf_s("%f", &fQueMath);
    ListNode_Traverse_Current_Math_Show(ptrQuerryNodes, fQueMath);

}

/*
函数:Mode_Querry_English

功能:匹配查询的Math
参数:
ptrQuerryNodes:结构体指针参数,接收一个头节点

返回值:无返回值

*/
void Mode_Querry_English(varStudentInformaiton *ptrQuerryNodes)
{

    float fQueEng;
    printf("输入需要查询的座位:");
    scanf_s("%f", &fQueEng);
    ListNode_Traverse_Current_Eng_Show(ptrQuerryNodes, fQueEng);

}

/*
函数:Mode_Querry_Total

功能:匹配查询的totol
参数:
ptrQuerryNodes:结构体指针参数,接收一个头节点

返回值:无返回值

*/
void Mode_Querry_Total(varStudentInformaiton *ptrQuerryNodes)
{

    double dQueTotol;
    printf("输入需要查询的座位:");
    scanf_s("%f", &dQueTotol);
    ListNode_Traverse_Current_Total_Show(ptrQuerryNodes, dQueTotol);

}

/*
函数:Mode_Querry_Average

功能:匹配查询的EVE
参数:
ptrQuerryNodes:结构体指针参数,接收一个头节点

返回值:无返回值

*/
void Mode_Querry_Average(varStudentInformaiton *ptrQuerryNodes)
{

    double dQueEve;
    printf("输入需要查询的座位:");
    scanf_s("%f", &dQueEve);
    ListNode_Traverse_Current_Aver_Show(ptrQuerryNodes, dQueEve);

}

/*
函数:Mode_Querry_Choose

功能:学生成绩查询模块
参数:
ptrQuerryNodes:
结构体指针参数
接收一个头节点

返回值:
无返回值

*/
void Mode_Querry_Choose(varStudentInformaiton *ptrQuerryNodes)
{
    int iQueFlags=0;
    scanf_s("%d",&iQueFlags);
    switch (iQueFlags)
    {
    case 1:
        Mode_Querry_ID(ptrQuerryNodes);
        break;
    case 2:
        Mode_Querry_Name(ptrQuerryNodes);
        break;
    case 3:
        Mode_Querry_Sex(ptrQuerryNodes);
        break;
    case 4:
        Mode_Querry_Age(ptrQuerryNodes);
        break;
    case 5:
        Mode_Querry_Grade(ptrQuerryNodes);
        break;
    case 6:
        Mode_Querry_Class(ptrQuerryNodes);
        break;
    case 7:
        Mode_Querry_Class(ptrQuerryNodes);
        break;
    case 8:
        Mode_Querry_China(ptrQuerryNodes);
        break;
    case 9:
        Mode_Querry_Math(ptrQuerryNodes);
        break;
    case 10:
        Mode_Querry_English(ptrQuerryNodes);
        break;
    case 11:
        Mode_Querry_Total(ptrQuerryNodes);
        break;
    case 12:
        Mode_Querry_Average(ptrQuerryNodes);
        break;
    case 0:
        ListNode_Interface_Student();
        break;
    default:
        {
            printf("错误的操作!n");
            ListNode_Interface_Student();
        }
        break;
    }
}

 


 

 

LISTMODE_MODE_REMOVE.c文件

#include "STUHEADERFILES.h"

/*

函数:
Mode_Data_Remove
功能:指定删除的ID后匹配ID并删除指定的节点

参数:
ptrListNode
结构体二级指针
接收头节点

返回值:
无返回值

*/
void Mode_Data_Remove(varStudentInformaiton **ptrListNode)
{
    char GetDelData[MAX_ID];
    varStudentInformaiton *ptrListNodeTemp;
    ptrListNodeTemp = (*ptrListNode);
    scanf_s("%s",GetDelData,MAX_ID);
    if ((*ptrListNode) == NULL)
    {
        printf("空链表!n");
        return;
    }
    if ((*ptrListNode)->ptrNext == NULL)
    {
        printf("空链表!n");
        return;
    }
    ListNode_Traverse_Current_Id_Show(ptrListNodeTemp, GetDelData);
    if (ptrListNodeTemp->ptrNext != NULL)
    {
        
        ListNode_Remove_SpecifiedNodes(ptrListNodeTemp);
    }
    if (ptrListNodeTemp->ptrNext == NULL)
    {
        ListNode_Remove_LastNodes(ptrListNodeTemp);
    }
    
}

 

LISTMODE_MODE_SHOW.c文件

#include "STUHEADERFILES.h"

/*
函数:
Mode_Show_Choose

功能:遍历并显示学生成绩链表数据模块

参数:
ptrListMode
结构体指针
接收头节点


返回值:
无返回值
*/
void Mode_Show_Choose(varStudentInformaiton *ptrListMode)
{
    int iShowFlag;
    printf("================学生成绩管理系统============================nn");
    printf("tt1.顺序显示nntt2.逆序显示.nntt3.返回主菜单nn");
    printf("================学生成绩管理系统============================nn");
    printf("请输入选择项:");
    scanf_s("%d",&iShowFlag);
    system("cls");
    switch (iShowFlag)
    {
    case 1:
        printf("n顺序显示学生成绩数据如下表:nn");
        ListNode_Traverse_Order_Show(ptrListMode);
        break;
    case 2:
        printf("n逆序显示学生成绩数据如下表:nn");
        ListNode_Traverse_Current_Reverse_Show(ptrListMode);
        break;
    case 3:
        ListNode_Interface_Student();
        break;
    default:
        printf("错误的操作!n");
        break;
    }
    printf("按回车键返回主菜单!");
    getchar();
    getchar();
    system("cls");
}

 

LISTMODE_MODE_SORT.c文件

#include "STUHEADERFILES.h"



/*
函数:
Mode_Sort_China

功能:
语文成绩的比较
两个相邻节点进行比较
如果左节点比相邻右节点大
节点进行交换

参数:
ListLeftHeadNodes
左半部节点
ListRightHeadNodes
右半部节点

返回值:
RecvNewNodes->ptrNext
*/
ptrStudentInformation Mode_Sort_China(varStudentInformaiton *ListLeftHeadNodes,varStudentInformaiton *ListRightHeadNodes)
{
    varStudentInformaiton *RecvNewNodes;
    varStudentInformaiton *p1, *p2;
    RecvNewNodes = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton));
    RecvNewNodes->ptrNext = ListLeftHeadNodes;
    p2 = ListRightHeadNodes;
    p1 = RecvNewNodes;
    while (p1->ptrNext!=NULL&&p2!=NULL)
    {
        if (p1->ptrNext->fsChinese > p2->fsChinese)
        {
            ListRightHeadNodes = p2->ptrNext;
            p2->ptrNext = p1->ptrNext;
            p1->ptrNext = p2;
            p1 = p2;
            p2 = ListRightHeadNodes;
        }
        else
        {
            p1 = p1->ptrNext;
        }
    }
    if (p1->ptrNext == NULL)    //L2可能还有未处理的结点,直接加在L1尾部即可
    {
        p1->ptrNext = p2;
    }
    return RecvNewNodes->ptrNext;
}

/*
函数:
Mode_Sort_Math

功能:
数学成绩的比较
两个相邻节点进行比较
如果左节点比相邻右节点大
节点进行交换

参数:
ListLeftHeadNodes
左半部节点
ListRightHeadNodes
右半部节点

返回值:
RecvNewNodes->ptrNext
*/
ptrStudentInformation Mode_Sort_Math(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes)
{
    varStudentInformaiton *RecvNewNodes;
    varStudentInformaiton *p1, *p2;
    RecvNewNodes = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton));
    RecvNewNodes->ptrNext = ListLeftHeadNodes;
    p2 = ListRightHeadNodes;
    p1 = RecvNewNodes;
    while (p1->ptrNext != NULL&&p2 != NULL)
    {
        if (p1->ptrNext->fsMath > p2->fsMath)
        {
            ListRightHeadNodes = p2->ptrNext;
            p2->ptrNext = p1->ptrNext;
            p1->ptrNext = p2;
            p1 = p2;
            p2 = ListRightHeadNodes;
        }
        else
        {
            p1 = p1->ptrNext;
        }
    }
    if (p1->ptrNext == NULL)    //L2可能还有未处理的结点,直接加在L1尾部即可
    {
        p1->ptrNext = p2;
    }
    return RecvNewNodes->ptrNext;
}


/*
函数:
Mode_Sort_English

功能:
英语成绩的比较
两个相邻节点进行比较
如果左节点比相邻右节点大
节点进行交换

参数:
ListLeftHeadNodes
左半部节点
ListRightHeadNodes
右半部节点

返回值:
RecvNewNodes->ptrNext
*/
ptrStudentInformation Mode_Sort_English(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes)
{
    varStudentInformaiton *RecvNewNodes;
    varStudentInformaiton *p1, *p2;
    RecvNewNodes = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton));
    RecvNewNodes->ptrNext = ListLeftHeadNodes;
    p2 = ListRightHeadNodes;
    p1 = RecvNewNodes;
    while (p1->ptrNext != NULL&&p2 != NULL)
    {
        if (p1->ptrNext->fsEnglish > p2->fsEnglish)
        {
            ListRightHeadNodes = p2->ptrNext;
            p2->ptrNext = p1->ptrNext;
            p1->ptrNext = p2;
            p1 = p2;
            p2 = ListRightHeadNodes;
        }
        else
        {
            p1 = p1->ptrNext;
        }
    }
    if (p1->ptrNext == NULL)    //L2可能还有未处理的结点,直接加在L1尾部即可
    {
        p1->ptrNext = p2;
    }
    return RecvNewNodes->ptrNext;
}

/*
函数:
Mode_Sort_Total

功能:
总成绩的比较
两个相邻节点进行比较
如果左节点比相邻右节点大
节点进行交换

参数:
ListLeftHeadNodes
左半部节点
ListRightHeadNodes
右半部节点

返回值:
RecvNewNodes->ptrNext
*/
ptrStudentInformation Mode_Sort_Total(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes)
{
    varStudentInformaiton *RecvNewNodes;
    varStudentInformaiton *p1, *p2;
    RecvNewNodes = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton));
    RecvNewNodes->ptrNext = ListLeftHeadNodes;
    p2 = ListRightHeadNodes;
    p1 = RecvNewNodes;
    while (p1->ptrNext != NULL&&p2 != NULL)
    {
        if (p1->ptrNext->siStudentScore->dsCoresTotol > p2->siStudentScore->dsCoresTotol)
        {
            ListRightHeadNodes = p2->ptrNext;
            p2->ptrNext = p1->ptrNext;
            p1->ptrNext = p2;
            p1 = p2;
            p2 = ListRightHeadNodes;
        }
        else
        {
            p1 = p1->ptrNext;
        }
    }
    if (p1->ptrNext == NULL)    //L2可能还有未处理的结点,直接加在L1尾部即可
    {
        p1->ptrNext = p2;
    }
    return RecvNewNodes->ptrNext;
}


/*
函数:
Mode_Sort_Average

功能:
平均成绩的比较
两个相邻节点进行比较
如果左节点比相邻右节点大
节点进行交换

参数:
ListLeftHeadNodes
左半部节点
ListRightHeadNodes
右半部节点

返回值:
RecvNewNodes->ptrNext
*/
ptrStudentInformation Mode_Sort_Average(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes)
{
    varStudentInformaiton *RecvNewNodes;
    varStudentInformaiton *p1, *p2;
    RecvNewNodes = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton));
    RecvNewNodes->ptrNext = ListLeftHeadNodes;
    p2 = ListRightHeadNodes;
    p1 = RecvNewNodes;
    while (p1->ptrNext != NULL&&p2 != NULL)
    {
        if (p1->ptrNext->siStudentScore->dsCoresEve > p2->siStudentScore->dsCoresEve)
        {
            ListRightHeadNodes = p2->ptrNext;
            p2->ptrNext = p1->ptrNext;
            p1->ptrNext = p2;
            p1 = p2;
            p2 = ListRightHeadNodes;
        }
        else
        {
            p1 = p1->ptrNext;
        }
    }
    if (p1->ptrNext == NULL)    //L2可能还有未处理的结点,直接加在L1尾部即可
    {
        p1->ptrNext = p2;
    }
    return RecvNewNodes->ptrNext;
}


//============================================

/*
函数:
Mode_Sort_Ascending_China

功能:
进行语文成绩的升序排序

参数:
listHead
结构体指针
接收一个头节点

返回值:
Mode_Sort_China(leftHead,rightHead);
*/
ptrStudentInformation Mode_Sort_Ascending_China(varStudentInformaiton *listHead)
{
    varStudentInformaiton *slow, *fast;
    varStudentInformaiton *leftHead, *rightHead;
    slow = listHead;
    fast = listHead;
    leftHead = listHead;

    if (listHead == NULL || listHead->ptrNext == NULL)
    {
        return listHead;
    }
    while (slow->ptrNext!=NULL)
    {
        if (fast->ptrNext->ptrNext != NULL)
        {
            fast = fast->ptrNext->ptrNext;
            slow = slow->ptrNext;
        }
        if (fast->ptrNext == NULL)
        {
            break;
        }
        if (fast->ptrNext->ptrNext == NULL)
        {
            break;
        }
    }
    rightHead = slow->ptrNext;
    slow->ptrNext = NULL;
    leftHead = Mode_Sort_Ascending_China(leftHead);
    rightHead = Mode_Sort_Ascending_China(rightHead);
    return Mode_Sort_China(leftHead,rightHead);
}



/*
函数:
Mode_Sort_Ascending_Math

功能:
进行数学成绩的升序排序

参数:
listHead
结构体指针
接收一个头节点

返回值:
Mode_Sort_Math(leftHead, rightHead);
*/
ptrStudentInformation Mode_Sort_Ascending_Math(varStudentInformaiton *listHead)
{
    varStudentInformaiton *slow, *fast;
    varStudentInformaiton *leftHead, *rightHead;
    slow = listHead;
    fast = listHead;
    leftHead = listHead;

    if (listHead == NULL || listHead->ptrNext == NULL)
    {
        return listHead;
    }
    while (slow->ptrNext != NULL)
    {
        if (fast->ptrNext->ptrNext != NULL)
        {
            fast = fast->ptrNext->ptrNext;
            slow = slow->ptrNext;
        }
        if (fast->ptrNext == NULL)
        {
            break;
        }
        if (fast->ptrNext->ptrNext == NULL)
        {
            break;
        }
    }
    rightHead = slow->ptrNext;
    slow->ptrNext = NULL;
    leftHead = Mode_Sort_Ascending_Math(leftHead);
    rightHead = Mode_Sort_Ascending_Math(rightHead);
    return Mode_Sort_Math(leftHead, rightHead);
}



/*
函数:
Mode_Sort_Ascending_English

功能:
进行英语成绩的升序排序

参数:
listHead
结构体指针
接收一个头节点

返回值:
Mode_Sort_English(leftHead, rightHead);
*/
ptrStudentInformation Mode_Sort_Ascending_English(varStudentInformaiton *listHead)
{
    varStudentInformaiton *slow, *fast;
    varStudentInformaiton *leftHead, *rightHead;
    slow = listHead;
    fast = listHead;
    leftHead = listHead;

    if (listHead == NULL || listHead->ptrNext == NULL)
    {
        return listHead;
    }
    while (slow->ptrNext != NULL)
    {
        if (fast->ptrNext->ptrNext != NULL)
        {
            fast = fast->ptrNext->ptrNext;
            slow = slow->ptrNext;
        }
        if (fast->ptrNext == NULL)
        {
            break;
        }
        if (fast->ptrNext->ptrNext == NULL)
        {
            break;
        }
    }
    rightHead = slow->ptrNext;
    slow->ptrNext = NULL;
    leftHead = Mode_Sort_Ascending_English(leftHead);
    rightHead = Mode_Sort_Ascending_English(rightHead);
    return Mode_Sort_English(leftHead, rightHead);
}



/*
函数:
Mode_Sort_Ascending_Total

功能:
进行总成绩的升序排序

参数:
listHead
结构体指针
接收一个头节点

返回值:
Mode_Sort_English(leftHead, rightHead);
*/
ptrStudentInformation Mode_Sort_Ascending_Total(varStudentInformaiton *listHead)
{
    varStudentInformaiton *slow, *fast;
    varStudentInformaiton *leftHead, *rightHead;
    slow = listHead;
    fast = listHead;
    leftHead = listHead;

    if (listHead == NULL || listHead->ptrNext == NULL)
    {
        return listHead;
    }
    while (slow->ptrNext != NULL)
    {
        if (fast->ptrNext->ptrNext != NULL)
        {
            fast = fast->ptrNext->ptrNext;
            slow = slow->ptrNext;
        }
        if (fast->ptrNext == NULL)
        {
            break;
        }
        if (fast->ptrNext->ptrNext == NULL)
        {
            break;
        }
    }
    rightHead = slow->ptrNext;
    slow->ptrNext = NULL;
    leftHead = Mode_Sort_Ascending_Total(leftHead);
    rightHead = Mode_Sort_Ascending_Total(rightHead);
    return Mode_Sort_Total(leftHead, rightHead);
}






/*
函数:
Mode_Sort_Ascending_Average

功能:
进行平均成绩的升序排序

参数:
listHead
结构体指针
接收一个头节点

返回值:
Mode_Sort_Average(leftHead, rightHead);
*/
ptrStudentInformation Mode_Sort_Ascending_Average(varStudentInformaiton *listHead)
{
    varStudentInformaiton *slow, *fast;
    varStudentInformaiton *leftHead, *rightHead;
    slow = listHead;
    fast = listHead;
    leftHead = listHead;

    if (listHead == NULL || listHead->ptrNext == NULL)
    {
        return listHead;
    }
    while (slow->ptrNext != NULL)
    {
        if (fast->ptrNext->ptrNext != NULL)
        {
            fast = fast->ptrNext->ptrNext;
            slow = slow->ptrNext;
        }
        if (fast->ptrNext == NULL)
        {
            break;
        }
        if (fast->ptrNext->ptrNext == NULL)
        {
            break;
        }
    }
    rightHead = slow->ptrNext;
    slow->ptrNext = NULL;
    leftHead = Mode_Sort_Ascending_Average(leftHead);
    rightHead = Mode_Sort_Ascending_Average(rightHead);
    return Mode_Sort_Average(leftHead, rightHead);
}

/*=================================================================================*/
/*下面是降序排序*/


//=================================================

/*
函数:
Mode_Sort_Choose

功能:
升序、降序排序选择操作项功能模块

参数:
ListNode
结构体指针
接收一个头节点

返回值:
无返回值
*/
void Mode_Sort_Choose(varStudentInformaiton *ListNode)
{
    int iSort_Flag;
    printf("请输入操作的选择项:");
    scanf("%d",&iSort_Flag);
    system("cls");
    switch (iSort_Flag)
    {
    case 1:
        {
            ListNode = Mode_Sort_Ascending_China(ListNode);
            ListNode_Traverse_Asc_MessageBox();
            ListNode_Traverse_Order_Show(ListNode);
        }
        
        break;
    case 2:
        {
            ListNode = Mode_Sort_Ascending_Math(ListNode);
            ListNode_Traverse_Asc_MessageBox();
            ListNode_Traverse_Order_Show(ListNode);
        }
        break;
    case 3:
        {
            ListNode = Mode_Sort_Ascending_English(ListNode);
            ListNode_Traverse_Asc_MessageBox();
            ListNode_Traverse_Order_Show(ListNode);
        }
        break;
    case 4:
        {
            ListNode = Mode_Sort_Ascending_Total(ListNode);
            ListNode_Traverse_Asc_MessageBox();
            ListNode_Traverse_Order_Show(ListNode);
        }
        break;
    case 5:
        {
            ListNode = Mode_Sort_Ascending_Average(ListNode);
            ListNode_Traverse_Asc_MessageBox();
            ListNode_Traverse_Order_Show(ListNode);
        }
        break;
    case 6:
        {
            ListNode = Mode_Sort_Ascending_China(ListNode);
            ListNode_Traverse_Order_MessageBox();
            ListNode_Traverse_Current_Reverse_Show(ListNode);
        }
        break;
    case 7:
        {
            ListNode = Mode_Sort_Ascending_Math(ListNode);
            ListNode_Traverse_Order_MessageBox();
            ListNode_Traverse_Current_Reverse_Show(ListNode);
        }
        break;
    case 8:
        {
            ListNode = Mode_Sort_Ascending_English(ListNode);
            ListNode_Traverse_Order_MessageBox();
            ListNode_Traverse_Current_Reverse_Show(ListNode);
        }
        break;
    case 9:
        {
            ListNode = Mode_Sort_Ascending_Total(ListNode);
            ListNode_Traverse_Order_MessageBox();
            ListNode_Traverse_Current_Reverse_Show(ListNode);
        }
        break;
    case 10:
        {
            ListNode = Mode_Sort_Ascending_Average(ListNode);
            ListNode_Traverse_Order_MessageBox();
            ListNode_Traverse_Current_Reverse_Show(ListNode);
        }
        break;
    case 0:
        ListNode_Interface_Student();
        break;
    default:
        {
            printf("错误的操作!n");
            ListNode_Interface_Student();
        }
        
        break;
    }
    printf("按回车键返回选择项菜单!");
    getchar();
    getchar();
    system("cls");
    ListNode_Interface_Sort(ListNode);
}

 

LISTMODE_MODIFYOPTION.c文件

#include "STUHEADERFILES.h"

/*
函数:ModifyModes_Id
功能:修改当前节点的ID数据
参数:
CurrentListNode:结构体二级指针,接收当前节点,非空节点
toModifyNodesId:char类型,大小为MAX_ID.
返回值:无返回值
*/
void ModifyModes_Id(varStudentInformaiton **CurrentListNode,char toModifyNodesId[MAX_ID] )
{
    strcpy((*CurrentListNode)->cID,toModifyNodesId);
}

/*
函数:ModifyModes_Name
功能:修改当前节点的ID数据
参数:
CurrentListNode:结构体二级指针,接收当前节点,非空节点
toModifyNodesName:char类型,大小为MAX_ID.
返回值:无返回值
*/
void ModifyModes_Name(varStudentInformaiton **CurrentListNode, char toModifyNodesName[MAX_NAME])
{
    strcpy((*CurrentListNode)->csName, toModifyNodesName);
}

/*
函数:ModifyModes_Sex
功能:修改当前节点的Sex数据
参数:
CurrentListNode:结构体二级指针,接收当前节点,非空节点
toModifyNodesSex:char类型,大小为MAX_SEX.
返回值:无返回值
*/
void ModifyModes_Sex(varStudentInformaiton **CurrentListNode, char toModifyNodesSex[MAX_SEX])
{
    strcpy((*CurrentListNode)->csSex, toModifyNodesSex);
}

/*
函数:ModifyModes_Age
功能:修改当前节点的Age数据
参数:
CurrentListNode:结构体二级指针,接收当前节点,非空节点
toModifyNodesAge:int类型
返回值:无返回值
*/
void ModifyModes_Age(varStudentInformaiton **CurrentListNode, int toModifyNodesAge)
{
    (*CurrentListNode)->isAge = toModifyNodesAge;
}

/*
函数:ModifyModes_Grade
功能:修改当前节点的Grade数据
参数:
CurrentListNode:结构体二级指针,接收当前节点,非空节点
toModifyNodesGrade:int类型
返回值:无返回值
*/
void ModifyModes_Grade(varStudentInformaiton **CurrentListNode, int toModifyNodesGrade)
{
    (*CurrentListNode)->isGrade = toModifyNodesGrade;
}

/*
函数:ModifyModes_Class
功能:修改当前节点的Class数据
参数:
CurrentListNode:结构体二级指针,接收当前节点,非空节点
toModifyNodesClass:int类型
返回值:无返回值
*/
void ModifyModes_Class(varStudentInformaiton **CurrentListNode, int toModifyNodesClass)
{
    (*CurrentListNode)->isClass = toModifyNodesClass;
}

/*
函数:ModifyModes_Seat
功能:修改当前节点的Seat数据
参数:
CurrentListNode:结构体二级指针,接收当前节点,非空节点
toModifyNodesSeat:int类型
返回值:无返回值
*/
void ModifyModes_Seat(varStudentInformaiton **CurrentListNode, int toModifyNodesSeat)
{
    (*CurrentListNode)->isSeat = toModifyNodesSeat;
}

/*
函数:ModifyModes_China
功能:修改当前节点的Chinese数据
参数:
CurrentListNode:结构体二级指针,接收当前节点,非空节点
toModifyNodesChina:float类型,接收一个匹配的语文 成绩
返回值:无返回值
*/
void ModifyModes_China(varStudentInformaiton **CurrentListNode, float toModifyNodesChina)
{
    (*CurrentListNode)->fsChinese = toModifyNodesChina;
}

/*
函数:ModifyModes_Math
功能:修改当前节点的Math数据
参数:
CurrentListNode:结构体二级指针,接收当前节点,非空节点
toModifyNodesMath:float类型,接收一个匹配的数学 成绩
返回值:无返回值
*/
void ModifyModes_Math(varStudentInformaiton **CurrentListNode, float toModifyNodesMath)
{
    (*CurrentListNode)->fsMath = toModifyNodesMath;
}

/*
函数:ModifyModes_English
功能:修改当前节点的English数据
参数:
CurrentListNode:结构体二级指针,接收当前节点,非空节点
toModifyNodesEnglish:float类型,接收一个匹配的英语 成绩
返回值:无返回值
*/
void ModifyModes_English(varStudentInformaiton **CurrentListNode, float toModifyNodesEnglish)
{
    (*CurrentListNode)->fsEnglish = toModifyNodesEnglish;
}

 

STUDENT_LISTNODE_BOOLJUDGE.c文件

#include "STUHEADERFILES.h"

/*
函数: bool_HeadNode_Null

功能:判断传入的节点是否为NULL,为NULL返回1,否则返回0

参数:
ptrHeadNodes:结构体指针变量,接收一个结构体指针参数。链表头节点指针

返回值:返回1或者0
*/
int bool_HeadNode_Null(varStudentInformaiton *ptrHeadNodes)
{
    if (ptrHeadNodes == NULL)
    {
        return 1;
    }
    return 0;
}

 

STUDENT_LISTNODE_FILESOPTION.c文件

#include "STUHEADERFILES.h"

/*
函数: ListNode_Files_Write

功能:链表节点数据写入文件

参数:
ptrListHeadNode:结构体二级指针变量,接收一个结构体指针参数。链表头节点指针

返回值:无返回值
*/
void ListNode_Files_Write(varStudentInformaiton *ptrListHeadNode)
{
    FILE *SAVENODETOFILE;
    varStudentInformaiton *ptrListNodeTemp = ptrListHeadNode->ptrNext;
    fopen_s(&SAVENODETOFILE, "studentfiles.txt", "wt");
    if (SAVENODETOFILE == NULL)
    {
        printf("创建或打开文件失败n");
        return;
    }
    while (ptrListNodeTemp != NULL)
    {
        fprintf_s(SAVENODETOFILE, "%st", ptrListNodeTemp->cID, MAX_ID);
        fprintf_s(SAVENODETOFILE, "%st", ptrListNodeTemp->csName, MAX_NAME);
        fprintf_s(SAVENODETOFILE, "%st", ptrListNodeTemp->csSex, MAX_SEX);
        fprintf_s(SAVENODETOFILE, "%dt", ptrListNodeTemp->isAge);
        fprintf_s(SAVENODETOFILE, "%dt", ptrListNodeTemp->isGrade);
        fprintf_s(SAVENODETOFILE, "%dt", ptrListNodeTemp->isClass);
        fprintf_s(SAVENODETOFILE, "%dt", ptrListNodeTemp->isSeat);
        fprintf_s(SAVENODETOFILE, "%ft", ptrListNodeTemp->fsChinese);
        fprintf_s(SAVENODETOFILE, "%ft", ptrListNodeTemp->fsMath);
        fprintf_s(SAVENODETOFILE, "%ft", ptrListNodeTemp->fsEnglish);
        fprintf_s(SAVENODETOFILE, "%.3lft", ptrListNodeTemp->siStudentScore->dsCoresTotol);
        fprintf_s(SAVENODETOFILE, "%.3lfrn", ptrListNodeTemp->siStudentScore->dsCoresEve);
        /*if (fwrite(ptrListNodeTemp, sizeof(varStudentInformaiton) + sizeof(struct siStudentScoreInfor), 12, SAVENODETOFILE) != 12)
        {
            printf("数据写入文件失败!n");
            return;
        }*/
        ptrListNodeTemp = ptrListNodeTemp->ptrNext;
    }
    printf("数据写入文件成功!n");
    fclose(SAVENODETOFILE);
}

void ListNode_Files_Create_NewNodes(FILE **ReadFiles,varStudentInformaiton **ptrListNewNodes)
{
    (*ptrListNewNodes) =(ptrStudentInformation) malloc(sizeof(varStudentInformaiton));
    (*ptrListNewNodes)->siStudentScore = (struct siStudentInfor *)malloc(sizeof(struct siStudentInfor));
    if ((*ptrListNewNodes) == NULL)
    {
        printf("Reade data newnodes Malloc field!n");
        return;
    }
    (*ptrListNewNodes)->ptrNext = NULL;
    fscanf((*ReadFiles), "%s",  (*ptrListNewNodes)->cID);
    fscanf((*ReadFiles), "%s", (*ptrListNewNodes)->csName);
    fscanf((*ReadFiles), "%s", (*ptrListNewNodes)->csSex);
    fscanf((*ReadFiles), "%d", &(*ptrListNewNodes)->isAge);
    fscanf((*ReadFiles), "%d", &(*ptrListNewNodes)->isGrade);
    fscanf((*ReadFiles), "%d", &(*ptrListNewNodes)->isClass);
    fscanf((*ReadFiles), "%d", &(*ptrListNewNodes)->isSeat);
    fscanf((*ReadFiles), "%f", &(*ptrListNewNodes)->fsChinese);
    fscanf((*ReadFiles), "%f", &(*ptrListNewNodes)->fsMath);
    fscanf((*ReadFiles), "%f", &(*ptrListNewNodes)->fsEnglish);
    fscanf((*ReadFiles), "%lf", &(*ptrListNewNodes)->siStudentScore->dsCoresTotol);
    fscanf((*ReadFiles), "%lfn", &(*ptrListNewNodes)->siStudentScore->dsCoresEve);

}
void ListNode_Files_Read(varStudentInformaiton *ptrListHeadNode)
{
    FILE *SAVENODETOFILE=NULL;
    varStudentInformaiton *ptrNewNodes = NULL;
    SAVENODETOFILE=fopen("studentfiles.txt", "r");
    if (SAVENODETOFILE == NULL)
    {
        printf("创建或打开文件失败n");
        return;
    }
    fseek(SAVENODETOFILE, 0L, SEEK_SET);
    while (!feof(SAVENODETOFILE))
    {
        ListNode_Files_Create_NewNodes(&SAVENODETOFILE,&ptrNewNodes);
        ptrListHeadNode=ListNode_Insert_Push_LastNodes(ptrListHeadNode, ptrNewNodes);
        
    }
    printf("读取文件成功!n");
    fclose(SAVENODETOFILE);
}

 

STUDENT_LISTNODE_INIT.c文件

#include "STUHEADERFILES.h"

/*
函数: ListNode_Init_HeadNodes

功能:创建一个节点,并分配内存。

参数:
var_head:结构体二级指针变量,接收一个指针参数

返回值:无返回值

*/
ptrStudentInformation ListNode_Init_HeadNodes(varStudentInformaiton *var_head)
{
    var_head = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton));
    var_head->siStudentScore = (struct siStudentScoreInfor*)malloc(sizeof(struct siStudentScoreInfor));
    if (var_head == NULL)
    {
        
        return NULL;
    }
    if (var_head->siStudentScore == NULL)
    {
        
        return NULL;
    }
    var_head->ptrNext = NULL;
    return var_head;
}

 

STUDENT_LISTNODE_INSERT.c文件

#include "STUHEADERFILES.h"

/*
函数: ListNode_Insert_Create_NewNodes


功能:创建新的节点并且录入数据

参数:
ptrList_NewNodes:结构体指针变量,接收一个结构体指针参数
cId:数据类型char,参数ID对应结构体ID成员
cName:数据类型char,参数cName对应结构体csName成员
cSex:数据类型char,参数cSex对应结构体csSex成员
iAge:数据类型int,参数iAge对应结构体isAge成员
igrade:数据类型int,参数iGrade对应结构体isGrade成员
iclass:数据类型int,参数iclass对应结构体isClass成员
fChinese:数据类型float,参数fChinese对应结构体fsChinese成员
fMath:数据类型float,参数fMath对应结构体fsMath成员
fEnglish:数据类型float,参数fEnglish对应结构体fsEnglish成员

返回值:ptrListNew
*/
ptrStudentInformation ListNode_Insert_Create_NewNodes(varStudentInformaiton *ptrList_NewNodes, char cId[MAX_ID], char cName[MAX_NAME], char cSex[MAX_SEX], int iAge, int igrade, int iclass, int iseat, float fChinese, float fMath, float fEnglish)
{
    //varStudentInformaiton *ptrListNew;
    ptrList_NewNodes = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton));
    ptrList_NewNodes->siStudentScore = (struct siStudentScoreInfor*)malloc(sizeof(struct siStudentScoreInfor));
    if (ptrList_NewNodes == NULL)
    {
        
        return NULL;
    }
    if (ptrList_NewNodes->siStudentScore == NULL)
    {
        
        return NULL;
    }
    strcpy(ptrList_NewNodes->cID, cId);
    strcpy(ptrList_NewNodes->csName, cName);
    strcpy(ptrList_NewNodes->csSex, cSex);

    ptrList_NewNodes->isAge = iAge;
    ptrList_NewNodes->isGrade = igrade;
    ptrList_NewNodes->isClass = iclass;
    ptrList_NewNodes->isSeat = iseat;
    ptrList_NewNodes->fsChinese = fChinese;
    ptrList_NewNodes->fsMath = fMath;
    ptrList_NewNodes->fsEnglish = fEnglish;
    ptrList_NewNodes->siStudentScore->dsCoresTotol = fChinese + fMath + fEnglish;
    ptrList_NewNodes->siStudentScore->dsCoresEve = (ptrList_NewNodes->siStudentScore->dsCoresTotol) / 3;
    ptrList_NewNodes->ptrNext = NULL;
    return ptrList_NewNodes;
}

/*
函数: ListNode_Insert_Push_FirstNodes

功能:头插法添加结构体成员各节点

参数:
ptrHeadNodes:结构体指针变量,接收一个结构体指针参数。链表头节点指针
ptrNewNodes:结构体指针变量,接收一个结构体指针参数。已创建的并且已录入数据的新节点

返回值:ptrHeadNodes
*/
ptrStudentInformation ListNode_Insert_Push_FirstNodes(varStudentInformaiton *ptrHeadNodes, varStudentInformaiton *ptrNewNodes)
{
    varStudentInformaiton *ptrHeadNodesTemp;//临时指针,指向当前节点位置
    ptrHeadNodesTemp = ptrHeadNodes->ptrNext;//因为这个原先的head->next节点,需要被移到后面去。所以要先保存一下
    if (ptrHeadNodes == NULL)
    {
        //printf("空链表n");
        return NULL;
    }

    ptrHeadNodes->ptrNext = ptrNewNodes;//head的下一个节点指向新创建的new节点
    ptrHeadNodes->ptrNext->ptrNext = ptrHeadNodesTemp;//上面的新节点指向之后,就是处理原来旧节点了。把它移到后面去。
    ptrHeadNodes = ptrNewNodes;//链接新节点
    return ptrHeadNodes;

}
/*
函数: ListNode_Insert_Push_LastNodes

功能:尾插法添加结构体成员各数据

参数:
ptrList_Nodes:结构体指针变量,接收一个结构体指针参数。链表头节点指针
ptrListNew:结构体指针变量,接收一个结构体指针参数。已创建的并且已录入数据的新节点

返回值:ptrList_Nodes

*/
ptrStudentInformation ListNode_Insert_Push_LastNodes(varStudentInformaiton *ptrList_Nodes, varStudentInformaiton *ptrListNew)
{

    varStudentInformaiton *ptrListTemp;
    varStudentInformaiton *ptrHeadTemp;
    ptrListTemp = ptrList_Nodes;
    ptrHeadTemp = ptrList_Nodes;
    if (ptrHeadTemp->ptrNext == NULL)
    {
        ptrHeadTemp->ptrNext = ptrListNew;
        ptrHeadTemp = ptrHeadTemp->ptrNext;
        ptrHeadTemp = ptrListNew;
    }
    else
    {
        while (ptrListTemp->ptrNext != NULL)
        {
            ptrListTemp = ptrListTemp->ptrNext;
        }
        ptrListTemp->ptrNext = ptrListNew;

        ptrListTemp = ptrListTemp->ptrNext;
        ptrListTemp = ptrListNew;
    }

    return ptrList_Nodes;
}

/*
函数: ListNode_Insert_Push_SpecifiedNodes

功能:在指定节点后面插入数据

参数:
ptrList_Nodes:结构体指针变量,接收一个结构体指针参数。链表头节点指针
ptrNewNodes:结构体指针变量,接收一个结构体指针参数。已创建的并且已录入数据的新节点
ptrCurrentList_Nodes:结构体指针变量,接收一个结构体指针参数。当前节点位置指针
返回值:ptrList_Nodes
其它:非head节点和last节点的插入
*/
void  ListNode_Insert_Push_SpecifiedNodes(varStudentInformaiton **ptrCurrentList_Nodes, varStudentInformaiton *ptrNewNodes)
{

    (*ptrCurrentList_Nodes) = (*ptrCurrentList_Nodes)->ptrNext;//添加这一行,因为遍历到的是前一个节点.
    varStudentInformaiton *ptrNodesList = (*ptrCurrentList_Nodes)->ptrNext;
    (*ptrCurrentList_Nodes)->ptrNext = ptrNewNodes;
    (*ptrCurrentList_Nodes) = (*ptrCurrentList_Nodes)->ptrNext;
    (*ptrCurrentList_Nodes)->ptrNext = ptrNodesList;
    (*ptrCurrentList_Nodes) = ptrNewNodes;

}
/*
函数: ListNode_Insert_Push_SpecifiedNodes_head

功能:在指定节点前面插入数据

参数:
ptrList_Nodes:结构体指针变量,接收一个结构体指针参数。链表头节点指针
ptrNewNodes:结构体指针变量,接收一个结构体指针参数。已创建的并且已录入数据的新节点
ptrCurrentList_Nodes:结构体指针变量,接收一个结构体指针参数。当前节点位置指针
返回值:ptrList_Nodes
其它:非head节点和last节点的插入
*/
void  ListNode_Insert_Push_SpecifiedNodes_head(varStudentInformaiton **ptrCurrentList_Nodes, varStudentInformaiton *ptrNewNodes)
{

    
    varStudentInformaiton *ptrNodesList = (*ptrCurrentList_Nodes)->ptrNext;
    (*ptrCurrentList_Nodes)->ptrNext = ptrNewNodes;
    (*ptrCurrentList_Nodes) = (*ptrCurrentList_Nodes)->ptrNext;
    (*ptrCurrentList_Nodes)->ptrNext = ptrNodesList;
    (*ptrCurrentList_Nodes) = ptrNewNodes;

}

 

STUDENT_LISTNODE_INTERFACE.c文件

#include "STUHEADERFILES.h"


/*
函数:
ListNode_Interface_Sort

功能:
查询功能界面:
语英数成绩、平均、总成绩升序、降序排序功能模块的界面显示
参数:
varLishNode
接收头节点

返回值:
无返回值

*/
void ListNode_Interface_Sort(varStudentInformaiton *varLishNode)
{
    printf("1.语文成绩升序排序.n");
    printf("2.数学成绩升序排序.n");
    printf("3.英语成绩升序排序.n");
    printf("4.总 成 绩升序排序.n");
    printf("5.平均成绩升序排序.n");
    printf("6.语文成绩降序排序.n");
    printf("7.数学成绩降序排序.n");
    printf("8.英语成绩降序排序.n");
    printf("9.总 成 绩降序排序.n");
    printf("10.平均成绩降序排序.n");
    printf("0.返 回 上一层 界面.n");
    Mode_Sort_Choose(varLishNode);
}
/*
函数:
ListNode_Interface_Querry

功能:
查询功能界面:
ID、姓名、性别、年龄、年级、班级、座位、语英数成绩、平均、总成绩查询的界面显示
参数:
varLishNode
接收头节点

返回值:
无返回值

*/
void ListNode_Interface_Querry(varStudentInformaiton *varLishNode)
{
    
    printf("1.ID查询.n");
    printf("2.姓名查询.n");
    printf("3.性别查询.n");
    printf("4.年龄查询.n");
    printf("5.年级查询.n");
    printf("6.班级查询.n");
    printf("7.座位查询.n");
    printf("8.语文成绩查询.n");
    printf("9.数学成绩查询.n");
    printf("10.英语成绩查询.n");
    printf("11.总成绩查询.n");
    printf("12.平均成绩查询.n");
    printf("0.返回上一层界面n");
    Mode_Querry_Choose(varLishNode);
}

/*
函数:
ListNode_Interface_Modify

功能:
数据修改功能界面:
ID、姓名、性别、年龄、年级、班级、座位、语英数成绩、平均、总成绩修改的界面显示
参数:
ptrLishNode
结构体二级指针
接收头节点

返回值:
无返回值

*/
void ListNode_Interface_Modify(varStudentInformaiton **ptrLishNode)
{
    printf("================学生成绩管理系统============================nn");
    printf("tt操作选项:nn");
    printf("tt1.ID修改.nn");
    printf("tt2.姓名修改.nn");
    printf("tt3.性别修改.nn");
    printf("tt4.年龄修改.nn");
    printf("tt5.年级修改.nn");
    printf("tt6.班级修改.nn");
    printf("tt7.座位修改.nn");
    printf("tt8.语文成绩修改.nn");
    printf("tt9.数学成绩修改.nn");
    printf("tt10.英语成绩修改.nn");
    printf("tt0.返回上一层界面nn");
    printf("================学生成绩管理系统============================nn");
    Mode_Node_Modify_Option(ptrLishNode);
}

/*
函数:
ListNode_Interface_Show

功能:
学生成绩管理系统数据显示选择功能界面:
1.顺序显示
2.逆序显示

参数:
无

返回值:
无返回值

*/
void ListNode_Interface_Show()
{
    printf("选择操作:n");
    printf("1.顺序显示学生成绩列表!n");
    printf("2.逆序显示学生成绩列表!n");
    printf("3.返回上一层操作!n");
}


/*
函数:
ListNode_Interface_Student_Mode

功能:
学生成绩管理系统主界面功能模块

参数:
无

返回值:
无返回值

*/
void ListNode_Interface_Student_Mode()
{
    
    int chooseflags;
    
    printf("请输入选择操作:n");
    scanf_s("%d", &chooseflags);
    system("cls");
    switch (chooseflags)
    {
    case 1:
    {
        Mode_Data_Push_Option(&ptrStuNodes, &ptrNewNodes);        //学生成绩录入模块
        break;
    }
    case 2:
        ListNode_Interface_Querry(ptrStuNodes);                    //学生成绩查询模块
        break;
    case 3:
        ListNode_Interface_Modify(&ptrStuNodes);                //学生成绩数据修改模块
        break;
    case 4:
        Mode_Data_Remove(&ptrStuNodes);                            //学生成绩数据删除模块
        break;
    case 5:
        {
        ptrSortNodes = ptrStuNodes;
        ListNode_Interface_Sort(ptrSortNodes);                    //学生成绩排序模块
        }
        break;
    case 6:
        Mode_Show_Choose(ptrStuNodes);                            //学生成绩显示模块
        break;
    case 7:
        ListNode_Files_Write(ptrStuNodes);                        //学生成绩数据保存文件模块
        break;
    case 8:
        ListNode_Files_Read(ptrStuNodes);                        //学生成绩数据读入模块
        break;
    case 0:
        return;
        break;
    default:
        printf("错误的操作!n");
        break;
    }
    ListNode_Interface_Student();
}

/*
函数:
ListNode_Interface_Student

功能:
显示学生成绩管理系统主界面

参数:
无

返回值:
无
*/
void ListNode_Interface_Student(void)
{
    printf("================学生成绩管理系统============================n");
    printf("tt1.学生成绩录入n");
    printf("tt2.学生成绩查询n");
    printf("tt3.学生成绩修改n");
    printf("tt4.学生成绩删除n");
    printf("tt5.学生成绩排序n");
    printf("tt6.学生成绩显示n");
    printf("tt7.学生成绩保存n");
    printf("tt8.学生成绩载入n");
    printf("tt0.退出操作n");
    printf("================学生成绩管理系统============================n");
    ListNode_Interface_Student_Mode();
}

 

STUDENT_LISTNODE_REMOVE.c文件

#include "STUHEADERFILES.h"


/*
函数: ListNode_Remove_Node

功能:释放当前指针和嵌套结构体内存

参数:
ptrNode:结构体二级指针变量,接收一个结构体指针参数。链表当前节点指针

返回值:无返回值
*/
void ListNode_Remove_Node(varStudentInformaiton **ptrNode)
{
    
    free((*ptrNode)->siStudentScore);
    free((*ptrNode));
}
/*
函数: ListNode_Remove_HeadNodes

功能:删除首节点和数据

参数:
ptrFirstNode:结构体二级指针变量,接收一个结构体指针参数。链表头节点指针

返回值:无返回值
*/
void ListNode_Remove_HeadNodes(varStudentInformaiton **ptrFirstNode)
{
    varStudentInformaiton  *toDeleteHeadNode;
    varStudentInformaiton *toNewNode = (*ptrFirstNode)->ptrNext;

    toDeleteHeadNode = toNewNode;                            //获取删除的节点
    toNewNode->ptrNext = toDeleteHeadNode->ptrNext;            //删除后面的节点给链接临时节点,这一句执行后,并不是tohead就是直接得到后面节点
    toNewNode = toNewNode->ptrNext;                            //这里直接得到后面的节点。

    ListNode_Remove_Node(&toDeleteHeadNode);                //这时就可以释放删除的节点了。
    ((*ptrFirstNode)->ptrNext) = toNewNode;                    //头节点重新链接后面的节点

    toDeleteHeadNode = NULL;                                //置空临时节点


}

/*
函数: ptrNodes

功能:删除链表尾部节点和数据

参数:
ptrNodes:结构体二级指针变量,接收一个结构体指针参数。链表当前节点指针

返回值:无返回值
*/
void ListNode_Remove_LastNodes(varStudentInformaiton **ptrNodes)
{
    varStudentInformaiton *toDelete;                    //待删除的节点
    toDelete = (*ptrNodes)->ptrNext;                    //指向需要删除的节点。(遍历时是遍历到删除节点的前一个节点)
    ListNode_Remove_Node(&toDelete);
    (*ptrNodes)->ptrNext = NULL;                        //此时删除的节点置NULL
    toDelete = NULL;                                    //这被释放的节点也置NULL
                                                        //在这段操作中,pnNodes这个节点始终是删除节点的前一个节点。它只是用来做一个指向,即它现在是7
                                                        //(*pnNodes)->pnext这样子就是8。所以需要一个临时指针来保存8并释放。
}

/*
函数: ListNode_Remove_SpecifiedNodes

功能:指定节点的删除.此节点不包含首节点和尾部节点

参数:
ptrNodes:结构体二级指针变量,接收一个结构体指针参数。链表当前节点指针

返回值:无返回值
*/
void ListNode_Remove_SpecifiedNodes(varStudentInformaiton **ptrNodes)
{

    varStudentInformaiton *toListNode_Remove_Node = (*ptrNodes)->ptrNext;        //遍历到的当前节点,得到下一个需要删除的节点。先保存起来。后面删除需要用到
    (*ptrNodes)->ptrNext = toListNode_Remove_Node->ptrNext;                        //toListNode_Remove_Node是需要删除的节点,那么下一个节点就是(*ptrNodes)->ptrNext->ptrNext,让原来删除的节点指向这个
    ListNode_Remove_Node(&toListNode_Remove_Node);                                //执行删除
}

/*
函数: ListNode_Remove_AllNodes

功能:
删除整个链表所有节点

参数:
ptrNodes:
结构体二级指针变量
接收链表头节点

返回值:
无返回值
*/
void ListNode_Remove_AllNodes(varStudentInformaiton **ptrNodes)
{
    varStudentInformaiton *ptrTempNodes;            //临时指针,用于接收节点的后面节点。
    ptrTempNodes = (*ptrNodes)->ptrNext;            //指向释放节点的后一个节点    
    ListNode_Remove_Node(ptrNodes);                    //释放节点
    (*ptrNodes) = ptrTempNodes;                        //再把下一个节点给ptrNodes,这样就可以形成一个循环
    if ((*ptrNodes) == NULL)                        //递归结束条件,ptrNodes为NULL
    {
        return;
    }
    ListNode_Remove_AllNodes(ptrNodes);                //递归操作,直到所有节点释放完毕

}

 

STUDENT_LISTNODE_TRAVERSESHOW.c文件

#include "STUHEADERFILES.h"


/*
函数: ListNode_Traverse_Current_Id

功能:
遍历链表匹配ID
返回匹配的当前节点

参数:
ptrList_Nodes:
结构体指针变量
接收链表头节点

serchID:
CHAR类型
接收一个不大于MAX_ID大小的数组

返回值:
未匹配到ID返回NULL
匹配到ID返回当前ptrListCurrent节点


*/
ptrStudentInformation ListNode_Traverse_Current_Id(varStudentInformaiton *ptrList_Nodes, char serchID[MAX_ID])
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes;
    while (ptrListCurrent->ptrNext != NULL)
    {
        if (strcmp(ptrListCurrent->ptrNext->cID, serchID) == 0)
        {
            return ptrListCurrent;
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }
    return NULL;
}
/*
函数: ptrCurrentNodes_Show

功能:
匹配ID
遍历并显示

参数:
ptrList_Nodes:
结构体指针变量
接收链表头节点指针
serchID:
CHAR类型
接收一个不大于MAX_ID大小的数组。

返回值:无返回值

*/
void ListNode_Traverse_Current_Id_Show(varStudentInformaiton *ptrList_Nodes, char serchID[MAX_ID])
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes->ptrNext;
    while (ptrListCurrent != NULL)
    {
        if (strcmp(ptrListCurrent->cID, serchID) == 0)
        {
            ListNode_Traverse_Current_Node_Show(ptrListCurrent);
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }
}

/*
函数: ListNode_Traverse_Current_Name_Show

功能:
遍历检索匹配的姓名

参数:
ptrList_Nodes:
结构体指针变量
接收链表头节点.

serchName:
CHAR类型
接收一个不大于MAX_Name大小的数组.

返回值:
无返回值

*/
void ListNode_Traverse_Current_Name_Show(varStudentInformaiton *ptrList_Nodes, char serchName[MAX_NAME])
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes->ptrNext;
    while (ptrListCurrent != NULL)
    {
        if (strcmp(ptrListCurrent->cID, serchName) == 0)
        {
            ListNode_Traverse_Current_Node_Show(ptrListCurrent);
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }
    
}

/*
函数: ListNode_Traverse_Current_Sex_Show

功能:
遍历检索匹配的性别

参数:
ptrList_Nodes:
结构体指针变量
接收链表头节点指针
serchSex:
CHAR类型
接收一个不大于MAX_SEX大小的数组。

返回值:
无返回值

*/
void ListNode_Traverse_Current_Sex_Show(varStudentInformaiton *ptrList_Nodes, char serchSex[MAX_SEX])
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes->ptrNext;
    while (ptrListCurrent != NULL)
    {
        if (strcmp(ptrListCurrent->cID, serchSex) == 0)
        {
            ListNode_Traverse_Current_Node_Show(ptrListCurrent);
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }

}

/*
函数: ListNode_Traverse_Current_Age_Show

功能:
遍历检索匹配的AGE

参数:
ptrList_Nodes:
结构体指针变量,接收链表头节点
iVarAge:
int类型
接收一个年龄

返回值:
无返回值

*/
void ListNode_Traverse_Current_Age_Show(varStudentInformaiton *ptrList_Nodes, int iVarAge)
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes->ptrNext;
    while (ptrListCurrent != NULL)
    {
        if (ptrListCurrent->isAge == iVarAge)
        {
            ListNode_Traverse_Current_Node_Show(ptrListCurrent);
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }

}

/*
函数: ListNode_Traverse_Current_Age_Show

功能:
遍历检索匹配的年级

参数:
ptrList_Nodes:
结构体指针变量,接收链表头节点
iVarGrade:
int类型
接收一个年级

返回值:
无返回值

*/
void ListNode_Traverse_Current_Grade_Show(varStudentInformaiton *ptrList_Nodes, int iVarGrade)
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes->ptrNext;
    while (ptrListCurrent != NULL)
    {
        if (ptrListCurrent->isGrade == iVarGrade)
        {
            ListNode_Traverse_Current_Node_Show(ptrListCurrent);
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }

}


/*
函数: ListNode_Traverse_Current_Class_Show

功能:
遍历检索匹配的班级

参数:
ptrList_Nodes:
结构体指针变量,接收链表头节点
iVarClass:
int类型
接收一个班级

返回值:
无返回值


*/
void ListNode_Traverse_Current_Class_Show(varStudentInformaiton *ptrList_Nodes, int iVarClass)
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes->ptrNext;
    while (ptrListCurrent != NULL)
    {
        if (ptrListCurrent->isClass == iVarClass)
        {
            ListNode_Traverse_Current_Node_Show(ptrListCurrent);
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }

}

/*
函数: ListNode_Traverse_Current_Seat_Show

功能:
遍历检索匹配的座位

参数:
ptrList_Nodes:
结构体指针变量,接收链表头节点
iVarSeat:
int类型
接收一个座位

返回值:
无返回值

*/
void ListNode_Traverse_Current_Seat_Show(varStudentInformaiton *ptrList_Nodes, int iVarSeat)
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes->ptrNext;
    while (ptrListCurrent != NULL)
    {
        if (ptrListCurrent->isSeat == iVarSeat)
        {
            ListNode_Traverse_Current_Node_Show(ptrListCurrent);
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }

}

/*
函数: ListNode_Traverse_Current_China_Show

功能:
遍历检索匹配的语文成绩

参数:
ptrList_Nodes:
结构体指针变量,接收链表头节点
fVarChina:
float类型
接收一个浮点值的语文成绩

返回值:
无返回值

*/
void ListNode_Traverse_Current_China_Show(varStudentInformaiton *ptrList_Nodes, float fVarChina)
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes->ptrNext;
    while (ptrListCurrent != NULL)
    {
        if (ptrListCurrent->fsChinese == fVarChina)
        {
            ListNode_Traverse_Current_Node_Show(ptrListCurrent);
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }

}

/*
函数: ListNode_Traverse_Current_Math_Show

功能:
遍历检索匹配的数学成绩

参数:
ptrList_Nodes:
结构体指针变量,接收链表头节点
fVarMath:
float类型
接收一个浮点值的数学成绩

返回值:
无返回值

*/
void ListNode_Traverse_Current_Math_Show(varStudentInformaiton *ptrList_Nodes, float fVarMath)
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes->ptrNext;
    while (ptrListCurrent != NULL)
    {
        if (ptrListCurrent->fsMath == fVarMath)
        {
            ListNode_Traverse_Current_Node_Show(ptrListCurrent);
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }

}

/*
函数: ListNode_Traverse_Current_Eng_Show

功能:
遍历检索匹配的英语成绩

参数:
ptrList_Nodes:
结构体指针变量,接收链表头节点
fVarEng:
float类型
接收一个浮点值的英语成绩

返回值:
无返回值

*/
void ListNode_Traverse_Current_Eng_Show(varStudentInformaiton *ptrList_Nodes, float fVarEng)
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes->ptrNext;
    while (ptrListCurrent != NULL)
    {
        if (ptrListCurrent->fsMath == fVarEng)
        {
            ListNode_Traverse_Current_Node_Show(ptrListCurrent);
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }

}

/*
函数: ListNode_Traverse_Current_Aver_Show

功能:
遍历检索匹配的平均成绩

参数:
ptrList_Nodes:
结构体指针变量,接收链表头节点
dVarEve:
double类型
接收一个浮点值的平均成绩

返回值:
无返回值

*/
void ListNode_Traverse_Current_Aver_Show(varStudentInformaiton *ptrList_Nodes, double dVarEve)
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes->ptrNext;
    while (ptrListCurrent != NULL)
    {
        if (ptrListCurrent->siStudentScore->dsCoresEve == dVarEve)
        {
            ListNode_Traverse_Current_Node_Show(ptrListCurrent);
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }

}

/*
函数: ListNode_Traverse_Current_Total_Show

功能:
遍历检索匹配的总成绩

参数:
ptrList_Nodes:
结构体指针变量,接收链表头节点
dVarTotol:
double类型
接收一个浮点值的总成绩

返回值:
无返回值

*/
void ListNode_Traverse_Current_Total_Show(varStudentInformaiton *ptrList_Nodes, double dVarTotol)
{
    varStudentInformaiton *ptrListCurrent;
    ptrListCurrent = ptrList_Nodes->ptrNext;
    while (ptrListCurrent != NULL)
    {
        if (ptrListCurrent->siStudentScore->dsCoresTotol == dVarTotol)
        {
            ListNode_Traverse_Current_Node_Show(ptrListCurrent);
        }
        ptrListCurrent = ptrListCurrent->ptrNext;
    }

}
/*
函数: ListNode_Traverse_Order_Show

功能:
顺序显示链表
参数:
varList_Nodes:
结构体指针变量,接收链表节点

返回值:
无返回值
*/
void ListNode_Traverse_Order_Show(varStudentInformaiton *varList_Nodes)
{
    varStudentInformaiton *varListTemp;
    
    if (varList_Nodes==NULL)
    {
        printf("空链表!n");
        return;
    }
    varListTemp = varList_Nodes->ptrNext;
    while (varListTemp != NULL)
    {
        ListNode_Traverse_Current_Node_Show(varListTemp);
        varListTemp = varListTemp->ptrNext;
    }
}

/*
函数: ListNode_Traverse_Current_Reverse_Show

功能:
逆序显示链表

参数:
varList_Nodes:
结构体指针变量
接收链表节点

返回值:
无返回值
*/
void ListNode_Traverse_Current_Reverse_Show(varStudentInformaiton *varList_Nodes)
{
    varStudentInformaiton *varListTemp;
    varListTemp = varList_Nodes;
    if (varList_Nodes == NULL || varList_Nodes->ptrNext == NULL)
    {
        return;
    }
    
    varListTemp = varListTemp->ptrNext;
    ListNode_Traverse_Current_Reverse_Show(varListTemp);
    ListNode_Traverse_Current_Node_Show(varListTemp);
    
}
/*
函数: ListNode_Traverse_Current_Node_Show

功能:
显示当前节点元素

参数:
varListTemp:
结构体指针变量
接收当前节点

返回值:无返回值
*/
void ListNode_Traverse_Current_Node_Show(varStudentInformaiton *varListTemp)
{
        printf("ID:%-4s NAME:%-4s sex:%-4s age:%-4d grade:%-4d class:%-4d seat:%-4dn chinesescores:%-4.2f mathscores:%-4.2f englishscore:%-4.2f totolscore:%-4.3lf evescore:%-4.3lfnn",
            varListTemp->cID,
            varListTemp->csName,
            varListTemp->csSex,
            varListTemp->isAge,
            varListTemp->isGrade,
            varListTemp->isClass,
            varListTemp->isSeat,
            varListTemp->fsChinese,
            varListTemp->fsMath,
            varListTemp->fsEnglish,
            varListTemp->siStudentScore->dsCoresTotol,
            varListTemp->siStudentScore->dsCoresEve);
}

/*
函数:
ListNode_Traverse_Asc_MessageBox

功能:
升级排序提示

参数:
无
返回值:
无
*/
void ListNode_Traverse_Asc_MessageBox()
{
    printf("n升序排序如下表!nn");
}

/*
函数:
ListNode_Traverse_Order_MessageBox

功能:
降级排序提示

参数:
无
返回值:
无
*/
void ListNode_Traverse_Order_MessageBox()
{
    printf("n降序排序如下表!nn");
}

 

STUDENTSCORES.c文件

#include "STUHEADERFILES.h"



int main(void)
{
    ptrStuNodes = ListNode_Init_HeadNodes(ptrStuNodes);//初始化
    ListNode_Interface_Student();
    return 0;

}

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!