注:還沒寫全局指針的回收處理。
頭文件定義
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; }