學生成績管理系統--單鏈表


注:還沒寫全局指針的回收處理。

 

頭文件定義

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("================學生成績管理系統============================\n\n");
    printf("\t\t1.順序顯示\n\n\t\t2.逆序顯示.\n\n\t\t3.返回主菜單\n\n");
    printf("================學生成績管理系統============================\n\n");
    printf("請輸入選擇項:");
    scanf_s("%d",&iShowFlag);
    system("cls");
    switch (iShowFlag)
    {
    case 1:
        printf("\n順序顯示學生成績數據如下表:\n\n");
        ListNode_Traverse_Order_Show(ptrListMode);
        break;
    case 2:
        printf("\n逆序顯示學生成績數據如下表:\n\n");
        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, "%s\t", ptrListNodeTemp->cID, MAX_ID);
        fprintf_s(SAVENODETOFILE, "%s\t", ptrListNodeTemp->csName, MAX_NAME);
        fprintf_s(SAVENODETOFILE, "%s\t", ptrListNodeTemp->csSex, MAX_SEX);
        fprintf_s(SAVENODETOFILE, "%d\t", ptrListNodeTemp->isAge);
        fprintf_s(SAVENODETOFILE, "%d\t", ptrListNodeTemp->isGrade);
        fprintf_s(SAVENODETOFILE, "%d\t", ptrListNodeTemp->isClass);
        fprintf_s(SAVENODETOFILE, "%d\t", ptrListNodeTemp->isSeat);
        fprintf_s(SAVENODETOFILE, "%f\t", ptrListNodeTemp->fsChinese);
        fprintf_s(SAVENODETOFILE, "%f\t", ptrListNodeTemp->fsMath);
        fprintf_s(SAVENODETOFILE, "%f\t", ptrListNodeTemp->fsEnglish);
        fprintf_s(SAVENODETOFILE, "%.3lf\t", ptrListNodeTemp->siStudentScore->dsCoresTotol);
        fprintf_s(SAVENODETOFILE, "%.3lf\r\n", 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), "%lf\n", &(*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("================學生成績管理系統============================\n\n");
    printf("\t\t操作選項:\n\n");
    printf("\t\t1.ID修改.\n\n");
    printf("\t\t2.姓名修改.\n\n");
    printf("\t\t3.性別修改.\n\n");
    printf("\t\t4.年齡修改.\n\n");
    printf("\t\t5.年級修改.\n\n");
    printf("\t\t6.班級修改.\n\n");
    printf("\t\t7.座位修改.\n\n");
    printf("\t\t8.語文成績修改.\n\n");
    printf("\t\t9.數學成績修改.\n\n");
    printf("\t\t10.英語成績修改.\n\n");
    printf("\t\t0.返回上一層界面\n\n");
    printf("================學生成績管理系統============================\n\n");
    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("\t\t1.學生成績錄入\n");
    printf("\t\t2.學生成績查詢\n");
    printf("\t\t3.學生成績修改\n");
    printf("\t\t4.學生成績刪除\n");
    printf("\t\t5.學生成績排序\n");
    printf("\t\t6.學生成績顯示\n");
    printf("\t\t7.學生成績保存\n");
    printf("\t\t8.學生成績載入\n");
    printf("\t\t0.退出操作\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:%-4d\n chinesescores:%-4.2f mathscores:%-4.2f englishscore:%-4.2f totolscore:%-4.3lf evescore:%-4.3lf\n\n",
            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升序排序如下表!\n\n");
}

/*
函數:
ListNode_Traverse_Order_MessageBox

功能:
降級排序提示

參數:
無
返回值:
無
*/
void ListNode_Traverse_Order_MessageBox()
{
    printf("\n降序排序如下表!\n\n");
}

 

STUDENTSCORES.c文件

#include "STUHEADERFILES.h"



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

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM