注:还没写全局指针的回收处理。
头文件定义
STUHEADERFILES.h
#ifndef _STUHEADERFILES_H_ #define _STUHEADERFILES_H_ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "STUSCORES.h" #endif
因为是随兴而写的。函数注释是随着函数实现一起写的。等有时间再改过来。很多都不大合理,需要一起修改。
STUSCORES.h
#ifndef _STUSCORES_H_ #define _STUSCORES_H_ /*宏定义*/ #define MAX_ID 30 //ID最大字节数 #define MAX_NAME 30 //姓名最大字节数 #define MAX_SEX 4 //性别最大字节数 /*结构体别名定义*/ typedef struct siStudentInfor *ptrStudentInformation; //函数类型指针定义 typedef struct siStudentInfor varStudentInformaiton; //自变量定义 /*嵌套结构体定义*/ struct siStudentScoreInfor { double dsCoresTotol; double dsCoresEve; }; /*学生成绩管理系统结构体定义*/ struct siStudentInfor { char cID[MAX_ID]; //ID编号 char csName[MAX_NAME]; //姓名 char csSex[MAX_SEX]; //性别 int isAge; //年龄 int isGrade; //年级 int isClass; //班级 int isSeat; //座位 float fsChinese; //语文成绩 float fsMath; //数学成绩 float fsEnglish; //英语成绩 struct siStudentScoreInfor *siStudentScore; //成绩统计结构 ptrStudentInformation ptrNext; //指针域 }; /*全局指针定义*/ varStudentInformaiton *ptrStuNodes; //头节点 varStudentInformaiton *ptrSortNodes; //排序头节点 varStudentInformaiton *ptrNewNodes; //新节点 /*文件名:LISTMODE_MODE_INSERT.c*/ void Mode_Data_Push(varStudentInformaiton **ptrPushNodes, varStudentInformaiton **ptrNewNodes); void Mode_Data_Push_Option(varStudentInformaiton **ptrPushNodes, varStudentInformaiton **ptrNewNodes); /*文件名:LISTMODE_MODE_MODIFY.c*/ void Mode_Node_Modify_Id(varStudentInformaiton **currentNodes); void Mode_Node_Modify_Name(varStudentInformaiton **currentNodes); void Mode_Node_Modify_Sex(varStudentInformaiton **currentNodes); void Mode_Node_Modify_Age(varStudentInformaiton **currentNodes); void Mode_Node_Modify_Grade(varStudentInformaiton **currentNodes); void Mode_Node_Modify_Class(varStudentInformaiton **currentNodes); void Mode_Node_Modify_Seat(varStudentInformaiton **currentNodes); void Mode_Node_Modify_China(varStudentInformaiton **currentNodes); void Mode_Node_Modify_Math(varStudentInformaiton **currentNodes); void ModifyModeEnglish(varStudentInformaiton **currentNodes); void Mode_Node_Modify_Option(varStudentInformaiton **ptrLishNodes); /*文件名:LISTMODE_MODE_QUERY.c*/ void Mode_Querry_ID(varStudentInformaiton *ptrQuerryNodes); void Mode_Querry_Name(varStudentInformaiton *ptrQuerryNodes); void Mode_Querry_Sex(varStudentInformaiton *ptrQuerryNodes); void Mode_Querry_Age(varStudentInformaiton *ptrQuerryNodes); void Mode_Querry_Grade(varStudentInformaiton *ptrQuerryNodes); void Mode_Querry_Class(varStudentInformaiton *ptrQuerryNodes); void Mode_Querry_Seat(varStudentInformaiton *ptrQuerryNodes); void Mode_Querry_China(varStudentInformaiton *ptrQuerryNodes); void Mode_Querry_Math(varStudentInformaiton *ptrQuerryNodes); void Mode_Querry_English(varStudentInformaiton *ptrQuerryNodes); void Mode_Querry_Total(varStudentInformaiton *ptrQuerryNodes); void Mode_Querry_Average(varStudentInformaiton *ptrQuerryNodes); void Mode_Querry_Choose(varStudentInformaiton *ptrQuerryNodes); /*文件名:LISTMODE_MODE_REMOVE.c*/ void Mode_Data_Remove(varStudentInformaiton **ptrListNode); /*文件名:LISTMODE_MODE_SHOW.c*/ void Mode_Show_Choose(varStudentInformaiton *ptrListMode); /*文件名:LISTMODE_MODE_SORT.c*/ ptrStudentInformation Mode_Sort_China(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes); ptrStudentInformation Mode_Sort_Math(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes); ptrStudentInformation Mode_Sort_English(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes); ptrStudentInformation Mode_Sort_Total(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes); ptrStudentInformation Mode_Sort_Average(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes); ptrStudentInformation Mode_Sort_Ascending_China(varStudentInformaiton *listHead); ptrStudentInformation Mode_Sort_Ascending_Math(varStudentInformaiton *listHead); ptrStudentInformation Mode_Sort_Ascending_English(varStudentInformaiton *listHead); ptrStudentInformation Mode_Sort_Ascending_Total(varStudentInformaiton *listHead); ptrStudentInformation Mode_Sort_Ascending_Average(varStudentInformaiton *listHead); void Mode_Sort_Choose(varStudentInformaiton *ListNode); /*文件名:LISTMODE_MODIFYOPTION.c*/ void ModifyModes_Id(varStudentInformaiton **CurrentListNode, char toModifyNodesId[MAX_ID]); void ModifyModes_Name(varStudentInformaiton **CurrentListNode, char toModifyNodesName[MAX_NAME]); void ModifyModes_Sex(varStudentInformaiton **CurrentListNode, char toModifyNodesSex[MAX_SEX]); void ModifyModes_Age(varStudentInformaiton **CurrentListNode, int toModifyNodesAge); void ModifyModes_Grade(varStudentInformaiton **CurrentListNode, int toModifyNodesGrade); void ModifyModes_Class(varStudentInformaiton **CurrentListNode, int toModifyNodesClass); void ModifyModes_Seat(varStudentInformaiton **CurrentListNode, int toModifyNodesSeat); void ModifyModes_China(varStudentInformaiton **CurrentListNode, float toModifyNodesChina); void ModifyModes_Math(varStudentInformaiton **CurrentListNode, float toModifyNodesMath); void ModifyModes_English(varStudentInformaiton **CurrentListNode, float toModifyNodesEnglish); /*文件名:STUDENT_LISTNODE_BOOLJUDGE.c*/ int bool_HeadNode_Null(varStudentInformaiton *ptrHeadNodes); /*文件名:STUDENT_LISTNODE_FILESOPTION.c*/ void ListNode_Files_Write(varStudentInformaiton *ptrListHeadNode); void ListNode_Files_Create_NewNodes(FILE **ReadFiles, varStudentInformaiton **ptrListNewNodes); void ListNode_Files_Read(varStudentInformaiton *ptrListHeadNode); /*文件名:STUDENT_LISTNODE_INIT.c*/ ptrStudentInformation ListNode_Init_HeadNodes(varStudentInformaiton *var_head); /*文件名:STUDENT_LISTNODE_INSERT.c*/ ptrStudentInformation ListNode_Insert_Create_NewNodes(varStudentInformaiton *ptrList_NewNodes, char cId[MAX_ID], char cName[MAX_NAME], char cSex[MAX_SEX], int iAge, int igrade, int iclass, int iseat, float fChinese, float fMath, float fEnglish); ptrStudentInformation ListNode_Insert_Push_FirstNodes(varStudentInformaiton *ptrHeadNodes, varStudentInformaiton *ptrNewNodes); ptrStudentInformation ListNode_Insert_Push_LastNodes(varStudentInformaiton *ptrList_Nodes, varStudentInformaiton *ptrListNew); void ListNode_Insert_Push_SpecifiedNodes(varStudentInformaiton **ptrCurrentList_Nodes, varStudentInformaiton *ptrNewNodes); void ListNode_Insert_Push_SpecifiedNodes_head(varStudentInformaiton **ptrCurrentList_Nodes, varStudentInformaiton *ptrNewNodes); /*文件名:STUDENT_LISTNODE_INTERFACE.c*/ void ListNode_Interface_Sort(varStudentInformaiton *varLishNode); void ListNode_Interface_Querry(varStudentInformaiton *varLishNode); void ListNode_Interface_Modify(varStudentInformaiton **ptrLishNode); void ListNode_Interface_Show(); void ListNode_Interface_Student_Mode(); void ListNode_Interface_Student(void); /*文件名:STUDENT_LISTNODE_REMOVE.c*/ void ListNode_Remove_Node(varStudentInformaiton **ptrNode); void ListNode_Remove_HeadNodes(varStudentInformaiton **ptrFirstNode); void ListNode_Remove_LastNodes(varStudentInformaiton **ptrNodes); void ListNode_Remove_SpecifiedNodes(varStudentInformaiton **ptrNodes); void ListNode_Remove_AllNodes(varStudentInformaiton **ptrNodes); /*文件名:STUDENT_LISTNODE_TRAVERSESHOW.c*/ ptrStudentInformation ListNode_Traverse_Current_Id(varStudentInformaiton *ptrList_Nodes, char serchID[MAX_ID]); void ListNode_Traverse_Current_Id_Show(varStudentInformaiton *ptrList_Nodes, char serchID[MAX_ID]); void ListNode_Traverse_Current_Name_Show(varStudentInformaiton *ptrList_Nodes, char serchName[MAX_NAME]); void ListNode_Traverse_Current_Sex_Show(varStudentInformaiton *ptrList_Nodes, char serchSex[MAX_SEX]); void ListNode_Traverse_Current_Age_Show(varStudentInformaiton *ptrList_Nodes, int iVarAge); void ListNode_Traverse_Current_Grade_Show(varStudentInformaiton *ptrList_Nodes, int iVarGrade); void ListNode_Traverse_Current_Class_Show(varStudentInformaiton *ptrList_Nodes, int iVarClass); void ListNode_Traverse_Current_Seat_Show(varStudentInformaiton *ptrList_Nodes, int iVarSeat); void ListNode_Traverse_Current_China_Show(varStudentInformaiton *ptrList_Nodes, float fVarChina); void ListNode_Traverse_Current_Math_Show(varStudentInformaiton *ptrList_Nodes, float fVarMath); void ListNode_Traverse_Current_Eng_Show(varStudentInformaiton *ptrList_Nodes, float fVarEng); void ListNode_Traverse_Current_Aver_Show(varStudentInformaiton *ptrList_Nodes, double dVarEve); void ListNode_Traverse_Current_Total_Show(varStudentInformaiton *ptrList_Nodes, double dVarTotol); void ListNode_Traverse_Order_Show(varStudentInformaiton *varList_Nodes); void ListNode_Traverse_Current_Reverse_Show(varStudentInformaiton *varList_Nodes); void ListNode_Traverse_Current_Node_Show(varStudentInformaiton *varListTemp); void ListNode_Traverse_Asc_MessageBox(); void ListNode_Traverse_Order_MessageBox(); #endif
LISTMODE_MODE_INSERT.c文件
#include "STUHEADERFILES.h" /* 函数: Mode_Data_Push 功能: 录入数据 并插入链表尾部(尾插法添加节点) 参数: ptrPushNodes: 结构体二级指针 接收链表头节点 ptrNewNodes: 结构体二级指针 传入一个已录入数据的新节点 返回值: 无返回值 */ void Mode_Data_Push(varStudentInformaiton **ptrPushNodes, varStudentInformaiton **ptrNewNodes) { char m_ID[MAX_ID]; char m_Name[MAX_NAME]; char m_Sex[MAX_SEX]; int m_Age, m_grade, m_class, m_seat; float m_China, m_Math, m_English; printf("ID:"); scanf_s("%s",m_ID,MAX_ID); printf("姓名:"); scanf_s("%s", m_Name, MAX_NAME); printf("性别:"); scanf_s("%s", m_Sex, MAX_SEX); printf("年龄:"); scanf_s("%d", &m_Age); printf("年级:"); scanf_s("%d", &m_grade); printf("班级:"); scanf_s("%d", &m_class); printf("座位:"); scanf_s("%d", &m_seat); printf("语文成绩:"); scanf_s("%f", &m_China); printf("数这成绩:"); scanf_s("%f", &m_Math); printf("英语成绩:"); scanf_s("%f", &m_English); (*ptrNewNodes) = ListNode_Insert_Create_NewNodes((*ptrNewNodes), m_ID, m_Name, m_Sex, m_Age, m_grade, m_class, m_seat, m_China, m_Math, m_English); (*ptrPushNodes) = ListNode_Insert_Push_LastNodes((*ptrPushNodes), (*ptrNewNodes)); } /* 函数: Mode_Data_Push_Option 功能: 录入数据条件功能模块。输入y录入节点数据,输入n退出操作 参数: ptrPushNodes 结构体二级指针 接收链表头节点 ptrNewNodes: 结构体二级指针 接收一个已分配内存并录入数据的新节点 返回值: 无返回值 */ void Mode_Data_Push_Option(varStudentInformaiton **ptrPushNodes,varStudentInformaiton **ptrNewNodes) { char ISYES; printf("输入Y:继续操作,输入N退出操作:n"); scanf_s("%*[n]%c",&ISYES,4); while (ISYES=='Y'||ISYES=='y') { Mode_Data_Push(ptrPushNodes,ptrNewNodes); printf("输入Y:继续操作,输入N退出操作:n"); scanf_s("%*[n]%c", &ISYES,4); } }
LISTMODE_MODE_MODIFY.c文件
#include "STUHEADERFILES.h" /* 函数:Mode_Node_Modify_Id 功能:修改当前节点的ID数据 参数: currentNodes:结构体指针,接收当前节点,非空节点 返回值:无返回值 */ void Mode_Node_Modify_Id(varStudentInformaiton **currentNodes) { char setID[MAX_ID]; printf("需要修改的ID:"); scanf_s("%s",setID,MAX_ID); (*currentNodes) = (*currentNodes)->ptrNext; ModifyModes_Id(currentNodes, setID); printf("ID修改成功!n"); } /* 函数:Mode_Node_Modify_Name 功能:修改当前节点的ID数据 参数: currentNodes:结构体指针,接收当前节点,非空节点 返回值:无返回值 */ void Mode_Node_Modify_Name(varStudentInformaiton **currentNodes) { char setName[MAX_NAME]; printf("需要修改的姓名:"); scanf_s("%s", setName, MAX_NAME); (*currentNodes) = (*currentNodes)->ptrNext; ModifyModes_Name(currentNodes, setName); printf("姓名修改成功!n"); } /* 函数:Mode_Node_Modify_Sex 功能:修改当前节点的SEX数据 参数: currentNodes:结构体指针,接收当前节点,非空节点 返回值:无返回值 */ void Mode_Node_Modify_Sex(varStudentInformaiton **currentNodes) { char setSex[MAX_SEX]; printf("需要修改的性别:"); scanf_s("%s", setSex, MAX_SEX); (*currentNodes) = (*currentNodes)->ptrNext; ModifyModes_Sex(currentNodes, setSex); printf("性别修改成功!n"); } /* 函数:Mode_Node_Modify_Age 功能:修改当前节点的Age数据 参数: currentNodes:结构体指针,接收当前节点,非空节点 返回值:无返回值 */ void Mode_Node_Modify_Age(varStudentInformaiton **currentNodes) { int setAge; printf("需要修改的年龄:"); scanf_s("%d", &setAge); (*currentNodes) = (*currentNodes)->ptrNext; ModifyModes_Age(currentNodes, setAge); printf("年龄修改成功!n"); } /* 函数:Mode_Node_Modify_Grade 功能:修改当前节点的Grade数据 参数: currentNodes:结构体指针,接收当前节点,非空节点 返回值:无返回值 */ void Mode_Node_Modify_Grade(varStudentInformaiton **currentNodes) { int setGrade; printf("需要修改的年级:"); scanf_s("%d", &setGrade); (*currentNodes) = (*currentNodes)->ptrNext; ModifyModes_Grade(currentNodes, setGrade); printf("年级修改成功!n"); } /* 函数:Mode_Node_Modify_Class 功能:修改当前节点的Class数据 参数: currentNodes:结构体指针,接收当前节点,非空节点 返回值:无返回值 */ void Mode_Node_Modify_Class(varStudentInformaiton **currentNodes) { int setClass; printf("需要修改的班级:"); scanf_s("%d", &setClass); (*currentNodes) = (*currentNodes)->ptrNext; ModifyModes_Class(currentNodes, setClass); printf("班级修改成功!n"); } /* 函数:Mode_Node_Modify_Seat 功能:修改当前节点的Seat数据 参数: currentNodes:结构体指针,接收当前节点,非空节点 返回值:无返回值 */ void Mode_Node_Modify_Seat(varStudentInformaiton **currentNodes) { int setSeat; printf("需要修改的座位:"); scanf_s("%d", &setSeat); (*currentNodes) = (*currentNodes)->ptrNext; ModifyModes_Seat(currentNodes, setSeat); printf("座位修改成功!n"); } /* 函数:Mode_Node_Modify_China 功能:修改当前节点的Chinese数据 参数: currentNodes:结构体指针,接收当前节点,非空节点 返回值:无返回值 */ void Mode_Node_Modify_China(varStudentInformaiton **currentNodes) { float setChina; printf("需要修改的语文成绩:"); scanf_s("%f", &setChina); (*currentNodes) = (*currentNodes)->ptrNext; ModifyModes_China(currentNodes, setChina); printf("语文成绩修改成功!n"); } /* 函数:Mode_Node_Modify_Math 功能:修改当前节点的Math数据 参数: currentNodes:结构体指针,接收当前节点,非空节点 返回值:无返回值 */ void Mode_Node_Modify_Math(varStudentInformaiton **currentNodes) { float setMath; printf("需要修改的数学成绩:"); scanf_s("%f", &setMath); (*currentNodes) = (*currentNodes)->ptrNext; ModifyModes_Math(currentNodes, setMath); printf("数学成绩修改成功!n"); } /* 函数:Mode_Node_Modify_English 功能:修改当前节点的Math数据 参数: currentNodes:结构体指针,接收当前节点,非空节点 返回值:无返回值 */ void ModifyModeEnglish(varStudentInformaiton **currentNodes) { float setEnglis; printf("需要修改的英语成绩:"); scanf_s("%f", &setEnglis); (*currentNodes) = (*currentNodes)->ptrNext; ModifyModes_English(currentNodes, setEnglis); printf("英语成绩修改成功!n"); } /* 函数:Mode_Node_Modify_Option 功能:学生成绩修改模块 参数: ptrLishNodes: 结构体二级指针 接收头节点 返回值: 无返回值 */ void Mode_Node_Modify_Option(varStudentInformaiton **ptrLishNodes) { int iModifyFlag; varStudentInformaiton *varModifyNode; char SerchID[MAX_ID]; varModifyNode = (*ptrLishNodes); printf("输入需要修改的数据的ID:"); scanf_s("%s", SerchID, MAX_ID); varModifyNode=ListNode_Traverse_Current_Id(varModifyNode, SerchID); printf("选择需要执行的操作项:"); scanf_s("%d",&iModifyFlag); switch (iModifyFlag) { case 1: Mode_Node_Modify_Id(&varModifyNode); break; case 2: Mode_Node_Modify_Name(&varModifyNode); break; case 3: Mode_Node_Modify_Sex(&varModifyNode); break; case 4: Mode_Node_Modify_Age(&varModifyNode); break; case 5: Mode_Node_Modify_Grade(&varModifyNode); break; case 6: Mode_Node_Modify_Class(&varModifyNode); break; case 7: Mode_Node_Modify_Seat(&varModifyNode); break; case 8: Mode_Node_Modify_China(&varModifyNode); break; case 9: Mode_Node_Modify_Math(&varModifyNode); break; case 10: ModifyModeEnglish(&varModifyNode); break; case 0: ListNode_Interface_Student();//主菜单界面 break; default: printf("错误的操作!n"); break; } printf("按回车键返回主界面"); getchar(); getchar(); system("cls"); }
LISTMODE_MODE_QUERY.c文件
#include "STUHEADERFILES.h" /* 函数:Mode_Querry_ID 功能:匹配查询的ID 参数: ptrQuerryNodes:结构体指针参数,接收一个头节点 返回值:无返回值 */ void Mode_Querry_ID(varStudentInformaiton *ptrQuerryNodes) { char cQueID[MAX_ID]; printf("输入需要查询的ID:"); scanf_s("%s",cQueID,MAX_ID); ListNode_Traverse_Current_Id_Show(ptrQuerryNodes, cQueID); } /* 函数:Mode_Querry_Name 功能:匹配查询的NAME 参数: ptrQuerryNodes:结构体指针参数,接收一个头节点 返回值:无返回值 */ void Mode_Querry_Name(varStudentInformaiton *ptrQuerryNodes) { char cQueName[MAX_NAME]; printf("输入需要查询的姓名:"); scanf_s("%s", cQueName, MAX_NAME); ListNode_Traverse_Current_Name_Show(ptrQuerryNodes, cQueName); } /* 函数:Mode_Querry_Sex 功能:匹配查询的SEX 参数: ptrQuerryNodes:结构体指针参数,接收一个头节点 返回值:无返回值 */ void Mode_Querry_Sex(varStudentInformaiton *ptrQuerryNodes) { char cQueSex[MAX_SEX]; printf("输入需要查询的性别:"); scanf_s("%s", cQueSex, MAX_SEX); ListNode_Traverse_Current_Sex_Show(ptrQuerryNodes, cQueSex); } /* 函数:Mode_Querry_Sex 功能:匹配查询的AGE 参数: ptrQuerryNodes:结构体指针参数,接收一个头节点 返回值:无返回值 */ void Mode_Querry_Age(varStudentInformaiton *ptrQuerryNodes) { int iQueAge; printf("输入需要查询的性别:"); scanf_s("%d", &iQueAge); ListNode_Traverse_Current_Age_Show(ptrQuerryNodes, iQueAge); } /* 函数:Mode_Querry_Grade 功能:匹配查询的Grade 参数: ptrQuerryNodes:结构体指针参数,接收一个头节点 返回值:无返回值 */ void Mode_Querry_Grade(varStudentInformaiton *ptrQuerryNodes) { int iQueAge; printf("输入需要查询的年级:"); scanf_s("%d", &iQueAge); ListNode_Traverse_Current_Grade_Show(ptrQuerryNodes, iQueAge); } /* 函数:Mode_Querry_Class 功能:匹配查询的Grade 参数: ptrQuerryNodes:结构体指针参数,接收一个头节点 返回值:无返回值 */ void Mode_Querry_Class(varStudentInformaiton *ptrQuerryNodes) { int iQueClass; printf("输入需要查询的年级:"); scanf_s("%d", &iQueClass); ListNode_Traverse_Current_Class_Show(ptrQuerryNodes, iQueClass); } /* 函数:Mode_Querry_Seat 功能:匹配查询的Seat 参数: ptrQuerryNodes:结构体指针参数,接收一个头节点 返回值:无返回值 */ void Mode_Querry_Seat(varStudentInformaiton *ptrQuerryNodes) { int iQueSeat; printf("输入需要查询的座位:"); scanf_s("%d", &iQueSeat); ListNode_Traverse_Current_Seat_Show(ptrQuerryNodes, iQueSeat); } /* 函数:Mode_Querry_China 功能:匹配查询的China 参数: ptrQuerryNodes:结构体指针参数,接收一个头节点 返回值:无返回值 */ void Mode_Querry_China(varStudentInformaiton *ptrQuerryNodes) { float fQueChina; printf("输入需要查询的座位:"); scanf_s("%f", &fQueChina); ListNode_Traverse_Current_China_Show(ptrQuerryNodes, fQueChina); } /* 函数:Mode_Querry_Math 功能:匹配查询的Math 参数: ptrQuerryNodes:结构体指针参数,接收一个头节点 返回值:无返回值 */ void Mode_Querry_Math(varStudentInformaiton *ptrQuerryNodes) { float fQueMath; printf("输入需要查询的座位:"); scanf_s("%f", &fQueMath); ListNode_Traverse_Current_Math_Show(ptrQuerryNodes, fQueMath); } /* 函数:Mode_Querry_English 功能:匹配查询的Math 参数: ptrQuerryNodes:结构体指针参数,接收一个头节点 返回值:无返回值 */ void Mode_Querry_English(varStudentInformaiton *ptrQuerryNodes) { float fQueEng; printf("输入需要查询的座位:"); scanf_s("%f", &fQueEng); ListNode_Traverse_Current_Eng_Show(ptrQuerryNodes, fQueEng); } /* 函数:Mode_Querry_Total 功能:匹配查询的totol 参数: ptrQuerryNodes:结构体指针参数,接收一个头节点 返回值:无返回值 */ void Mode_Querry_Total(varStudentInformaiton *ptrQuerryNodes) { double dQueTotol; printf("输入需要查询的座位:"); scanf_s("%f", &dQueTotol); ListNode_Traverse_Current_Total_Show(ptrQuerryNodes, dQueTotol); } /* 函数:Mode_Querry_Average 功能:匹配查询的EVE 参数: ptrQuerryNodes:结构体指针参数,接收一个头节点 返回值:无返回值 */ void Mode_Querry_Average(varStudentInformaiton *ptrQuerryNodes) { double dQueEve; printf("输入需要查询的座位:"); scanf_s("%f", &dQueEve); ListNode_Traverse_Current_Aver_Show(ptrQuerryNodes, dQueEve); } /* 函数:Mode_Querry_Choose 功能:学生成绩查询模块 参数: ptrQuerryNodes: 结构体指针参数 接收一个头节点 返回值: 无返回值 */ void Mode_Querry_Choose(varStudentInformaiton *ptrQuerryNodes) { int iQueFlags=0; scanf_s("%d",&iQueFlags); switch (iQueFlags) { case 1: Mode_Querry_ID(ptrQuerryNodes); break; case 2: Mode_Querry_Name(ptrQuerryNodes); break; case 3: Mode_Querry_Sex(ptrQuerryNodes); break; case 4: Mode_Querry_Age(ptrQuerryNodes); break; case 5: Mode_Querry_Grade(ptrQuerryNodes); break; case 6: Mode_Querry_Class(ptrQuerryNodes); break; case 7: Mode_Querry_Class(ptrQuerryNodes); break; case 8: Mode_Querry_China(ptrQuerryNodes); break; case 9: Mode_Querry_Math(ptrQuerryNodes); break; case 10: Mode_Querry_English(ptrQuerryNodes); break; case 11: Mode_Querry_Total(ptrQuerryNodes); break; case 12: Mode_Querry_Average(ptrQuerryNodes); break; case 0: ListNode_Interface_Student(); break; default: { printf("错误的操作!n"); ListNode_Interface_Student(); } break; } }
LISTMODE_MODE_REMOVE.c文件
#include "STUHEADERFILES.h" /* 函数: Mode_Data_Remove 功能:指定删除的ID后匹配ID并删除指定的节点 参数: ptrListNode 结构体二级指针 接收头节点 返回值: 无返回值 */ void Mode_Data_Remove(varStudentInformaiton **ptrListNode) { char GetDelData[MAX_ID]; varStudentInformaiton *ptrListNodeTemp; ptrListNodeTemp = (*ptrListNode); scanf_s("%s",GetDelData,MAX_ID); if ((*ptrListNode) == NULL) { printf("空链表!n"); return; } if ((*ptrListNode)->ptrNext == NULL) { printf("空链表!n"); return; } ListNode_Traverse_Current_Id_Show(ptrListNodeTemp, GetDelData); if (ptrListNodeTemp->ptrNext != NULL) { ListNode_Remove_SpecifiedNodes(ptrListNodeTemp); } if (ptrListNodeTemp->ptrNext == NULL) { ListNode_Remove_LastNodes(ptrListNodeTemp); } }
LISTMODE_MODE_SHOW.c文件
#include "STUHEADERFILES.h" /* 函数: Mode_Show_Choose 功能:遍历并显示学生成绩链表数据模块 参数: ptrListMode 结构体指针 接收头节点 返回值: 无返回值 */ void Mode_Show_Choose(varStudentInformaiton *ptrListMode) { int iShowFlag; printf("================学生成绩管理系统============================nn"); printf("tt1.顺序显示nntt2.逆序显示.nntt3.返回主菜单nn"); printf("================学生成绩管理系统============================nn"); printf("请输入选择项:"); scanf_s("%d",&iShowFlag); system("cls"); switch (iShowFlag) { case 1: printf("n顺序显示学生成绩数据如下表:nn"); ListNode_Traverse_Order_Show(ptrListMode); break; case 2: printf("n逆序显示学生成绩数据如下表:nn"); ListNode_Traverse_Current_Reverse_Show(ptrListMode); break; case 3: ListNode_Interface_Student(); break; default: printf("错误的操作!n"); break; } printf("按回车键返回主菜单!"); getchar(); getchar(); system("cls"); }
LISTMODE_MODE_SORT.c文件
#include "STUHEADERFILES.h" /* 函数: Mode_Sort_China 功能: 语文成绩的比较 两个相邻节点进行比较 如果左节点比相邻右节点大 节点进行交换 参数: ListLeftHeadNodes 左半部节点 ListRightHeadNodes 右半部节点 返回值: RecvNewNodes->ptrNext */ ptrStudentInformation Mode_Sort_China(varStudentInformaiton *ListLeftHeadNodes,varStudentInformaiton *ListRightHeadNodes) { varStudentInformaiton *RecvNewNodes; varStudentInformaiton *p1, *p2; RecvNewNodes = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton)); RecvNewNodes->ptrNext = ListLeftHeadNodes; p2 = ListRightHeadNodes; p1 = RecvNewNodes; while (p1->ptrNext!=NULL&&p2!=NULL) { if (p1->ptrNext->fsChinese > p2->fsChinese) { ListRightHeadNodes = p2->ptrNext; p2->ptrNext = p1->ptrNext; p1->ptrNext = p2; p1 = p2; p2 = ListRightHeadNodes; } else { p1 = p1->ptrNext; } } if (p1->ptrNext == NULL) //L2可能还有未处理的结点,直接加在L1尾部即可 { p1->ptrNext = p2; } return RecvNewNodes->ptrNext; } /* 函数: Mode_Sort_Math 功能: 数学成绩的比较 两个相邻节点进行比较 如果左节点比相邻右节点大 节点进行交换 参数: ListLeftHeadNodes 左半部节点 ListRightHeadNodes 右半部节点 返回值: RecvNewNodes->ptrNext */ ptrStudentInformation Mode_Sort_Math(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes) { varStudentInformaiton *RecvNewNodes; varStudentInformaiton *p1, *p2; RecvNewNodes = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton)); RecvNewNodes->ptrNext = ListLeftHeadNodes; p2 = ListRightHeadNodes; p1 = RecvNewNodes; while (p1->ptrNext != NULL&&p2 != NULL) { if (p1->ptrNext->fsMath > p2->fsMath) { ListRightHeadNodes = p2->ptrNext; p2->ptrNext = p1->ptrNext; p1->ptrNext = p2; p1 = p2; p2 = ListRightHeadNodes; } else { p1 = p1->ptrNext; } } if (p1->ptrNext == NULL) //L2可能还有未处理的结点,直接加在L1尾部即可 { p1->ptrNext = p2; } return RecvNewNodes->ptrNext; } /* 函数: Mode_Sort_English 功能: 英语成绩的比较 两个相邻节点进行比较 如果左节点比相邻右节点大 节点进行交换 参数: ListLeftHeadNodes 左半部节点 ListRightHeadNodes 右半部节点 返回值: RecvNewNodes->ptrNext */ ptrStudentInformation Mode_Sort_English(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes) { varStudentInformaiton *RecvNewNodes; varStudentInformaiton *p1, *p2; RecvNewNodes = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton)); RecvNewNodes->ptrNext = ListLeftHeadNodes; p2 = ListRightHeadNodes; p1 = RecvNewNodes; while (p1->ptrNext != NULL&&p2 != NULL) { if (p1->ptrNext->fsEnglish > p2->fsEnglish) { ListRightHeadNodes = p2->ptrNext; p2->ptrNext = p1->ptrNext; p1->ptrNext = p2; p1 = p2; p2 = ListRightHeadNodes; } else { p1 = p1->ptrNext; } } if (p1->ptrNext == NULL) //L2可能还有未处理的结点,直接加在L1尾部即可 { p1->ptrNext = p2; } return RecvNewNodes->ptrNext; } /* 函数: Mode_Sort_Total 功能: 总成绩的比较 两个相邻节点进行比较 如果左节点比相邻右节点大 节点进行交换 参数: ListLeftHeadNodes 左半部节点 ListRightHeadNodes 右半部节点 返回值: RecvNewNodes->ptrNext */ ptrStudentInformation Mode_Sort_Total(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes) { varStudentInformaiton *RecvNewNodes; varStudentInformaiton *p1, *p2; RecvNewNodes = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton)); RecvNewNodes->ptrNext = ListLeftHeadNodes; p2 = ListRightHeadNodes; p1 = RecvNewNodes; while (p1->ptrNext != NULL&&p2 != NULL) { if (p1->ptrNext->siStudentScore->dsCoresTotol > p2->siStudentScore->dsCoresTotol) { ListRightHeadNodes = p2->ptrNext; p2->ptrNext = p1->ptrNext; p1->ptrNext = p2; p1 = p2; p2 = ListRightHeadNodes; } else { p1 = p1->ptrNext; } } if (p1->ptrNext == NULL) //L2可能还有未处理的结点,直接加在L1尾部即可 { p1->ptrNext = p2; } return RecvNewNodes->ptrNext; } /* 函数: Mode_Sort_Average 功能: 平均成绩的比较 两个相邻节点进行比较 如果左节点比相邻右节点大 节点进行交换 参数: ListLeftHeadNodes 左半部节点 ListRightHeadNodes 右半部节点 返回值: RecvNewNodes->ptrNext */ ptrStudentInformation Mode_Sort_Average(varStudentInformaiton *ListLeftHeadNodes, varStudentInformaiton *ListRightHeadNodes) { varStudentInformaiton *RecvNewNodes; varStudentInformaiton *p1, *p2; RecvNewNodes = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton)); RecvNewNodes->ptrNext = ListLeftHeadNodes; p2 = ListRightHeadNodes; p1 = RecvNewNodes; while (p1->ptrNext != NULL&&p2 != NULL) { if (p1->ptrNext->siStudentScore->dsCoresEve > p2->siStudentScore->dsCoresEve) { ListRightHeadNodes = p2->ptrNext; p2->ptrNext = p1->ptrNext; p1->ptrNext = p2; p1 = p2; p2 = ListRightHeadNodes; } else { p1 = p1->ptrNext; } } if (p1->ptrNext == NULL) //L2可能还有未处理的结点,直接加在L1尾部即可 { p1->ptrNext = p2; } return RecvNewNodes->ptrNext; } //============================================ /* 函数: Mode_Sort_Ascending_China 功能: 进行语文成绩的升序排序 参数: listHead 结构体指针 接收一个头节点 返回值: Mode_Sort_China(leftHead,rightHead); */ ptrStudentInformation Mode_Sort_Ascending_China(varStudentInformaiton *listHead) { varStudentInformaiton *slow, *fast; varStudentInformaiton *leftHead, *rightHead; slow = listHead; fast = listHead; leftHead = listHead; if (listHead == NULL || listHead->ptrNext == NULL) { return listHead; } while (slow->ptrNext!=NULL) { if (fast->ptrNext->ptrNext != NULL) { fast = fast->ptrNext->ptrNext; slow = slow->ptrNext; } if (fast->ptrNext == NULL) { break; } if (fast->ptrNext->ptrNext == NULL) { break; } } rightHead = slow->ptrNext; slow->ptrNext = NULL; leftHead = Mode_Sort_Ascending_China(leftHead); rightHead = Mode_Sort_Ascending_China(rightHead); return Mode_Sort_China(leftHead,rightHead); } /* 函数: Mode_Sort_Ascending_Math 功能: 进行数学成绩的升序排序 参数: listHead 结构体指针 接收一个头节点 返回值: Mode_Sort_Math(leftHead, rightHead); */ ptrStudentInformation Mode_Sort_Ascending_Math(varStudentInformaiton *listHead) { varStudentInformaiton *slow, *fast; varStudentInformaiton *leftHead, *rightHead; slow = listHead; fast = listHead; leftHead = listHead; if (listHead == NULL || listHead->ptrNext == NULL) { return listHead; } while (slow->ptrNext != NULL) { if (fast->ptrNext->ptrNext != NULL) { fast = fast->ptrNext->ptrNext; slow = slow->ptrNext; } if (fast->ptrNext == NULL) { break; } if (fast->ptrNext->ptrNext == NULL) { break; } } rightHead = slow->ptrNext; slow->ptrNext = NULL; leftHead = Mode_Sort_Ascending_Math(leftHead); rightHead = Mode_Sort_Ascending_Math(rightHead); return Mode_Sort_Math(leftHead, rightHead); } /* 函数: Mode_Sort_Ascending_English 功能: 进行英语成绩的升序排序 参数: listHead 结构体指针 接收一个头节点 返回值: Mode_Sort_English(leftHead, rightHead); */ ptrStudentInformation Mode_Sort_Ascending_English(varStudentInformaiton *listHead) { varStudentInformaiton *slow, *fast; varStudentInformaiton *leftHead, *rightHead; slow = listHead; fast = listHead; leftHead = listHead; if (listHead == NULL || listHead->ptrNext == NULL) { return listHead; } while (slow->ptrNext != NULL) { if (fast->ptrNext->ptrNext != NULL) { fast = fast->ptrNext->ptrNext; slow = slow->ptrNext; } if (fast->ptrNext == NULL) { break; } if (fast->ptrNext->ptrNext == NULL) { break; } } rightHead = slow->ptrNext; slow->ptrNext = NULL; leftHead = Mode_Sort_Ascending_English(leftHead); rightHead = Mode_Sort_Ascending_English(rightHead); return Mode_Sort_English(leftHead, rightHead); } /* 函数: Mode_Sort_Ascending_Total 功能: 进行总成绩的升序排序 参数: listHead 结构体指针 接收一个头节点 返回值: Mode_Sort_English(leftHead, rightHead); */ ptrStudentInformation Mode_Sort_Ascending_Total(varStudentInformaiton *listHead) { varStudentInformaiton *slow, *fast; varStudentInformaiton *leftHead, *rightHead; slow = listHead; fast = listHead; leftHead = listHead; if (listHead == NULL || listHead->ptrNext == NULL) { return listHead; } while (slow->ptrNext != NULL) { if (fast->ptrNext->ptrNext != NULL) { fast = fast->ptrNext->ptrNext; slow = slow->ptrNext; } if (fast->ptrNext == NULL) { break; } if (fast->ptrNext->ptrNext == NULL) { break; } } rightHead = slow->ptrNext; slow->ptrNext = NULL; leftHead = Mode_Sort_Ascending_Total(leftHead); rightHead = Mode_Sort_Ascending_Total(rightHead); return Mode_Sort_Total(leftHead, rightHead); } /* 函数: Mode_Sort_Ascending_Average 功能: 进行平均成绩的升序排序 参数: listHead 结构体指针 接收一个头节点 返回值: Mode_Sort_Average(leftHead, rightHead); */ ptrStudentInformation Mode_Sort_Ascending_Average(varStudentInformaiton *listHead) { varStudentInformaiton *slow, *fast; varStudentInformaiton *leftHead, *rightHead; slow = listHead; fast = listHead; leftHead = listHead; if (listHead == NULL || listHead->ptrNext == NULL) { return listHead; } while (slow->ptrNext != NULL) { if (fast->ptrNext->ptrNext != NULL) { fast = fast->ptrNext->ptrNext; slow = slow->ptrNext; } if (fast->ptrNext == NULL) { break; } if (fast->ptrNext->ptrNext == NULL) { break; } } rightHead = slow->ptrNext; slow->ptrNext = NULL; leftHead = Mode_Sort_Ascending_Average(leftHead); rightHead = Mode_Sort_Ascending_Average(rightHead); return Mode_Sort_Average(leftHead, rightHead); } /*=================================================================================*/ /*下面是降序排序*/ //================================================= /* 函数: Mode_Sort_Choose 功能: 升序、降序排序选择操作项功能模块 参数: ListNode 结构体指针 接收一个头节点 返回值: 无返回值 */ void Mode_Sort_Choose(varStudentInformaiton *ListNode) { int iSort_Flag; printf("请输入操作的选择项:"); scanf("%d",&iSort_Flag); system("cls"); switch (iSort_Flag) { case 1: { ListNode = Mode_Sort_Ascending_China(ListNode); ListNode_Traverse_Asc_MessageBox(); ListNode_Traverse_Order_Show(ListNode); } break; case 2: { ListNode = Mode_Sort_Ascending_Math(ListNode); ListNode_Traverse_Asc_MessageBox(); ListNode_Traverse_Order_Show(ListNode); } break; case 3: { ListNode = Mode_Sort_Ascending_English(ListNode); ListNode_Traverse_Asc_MessageBox(); ListNode_Traverse_Order_Show(ListNode); } break; case 4: { ListNode = Mode_Sort_Ascending_Total(ListNode); ListNode_Traverse_Asc_MessageBox(); ListNode_Traverse_Order_Show(ListNode); } break; case 5: { ListNode = Mode_Sort_Ascending_Average(ListNode); ListNode_Traverse_Asc_MessageBox(); ListNode_Traverse_Order_Show(ListNode); } break; case 6: { ListNode = Mode_Sort_Ascending_China(ListNode); ListNode_Traverse_Order_MessageBox(); ListNode_Traverse_Current_Reverse_Show(ListNode); } break; case 7: { ListNode = Mode_Sort_Ascending_Math(ListNode); ListNode_Traverse_Order_MessageBox(); ListNode_Traverse_Current_Reverse_Show(ListNode); } break; case 8: { ListNode = Mode_Sort_Ascending_English(ListNode); ListNode_Traverse_Order_MessageBox(); ListNode_Traverse_Current_Reverse_Show(ListNode); } break; case 9: { ListNode = Mode_Sort_Ascending_Total(ListNode); ListNode_Traverse_Order_MessageBox(); ListNode_Traverse_Current_Reverse_Show(ListNode); } break; case 10: { ListNode = Mode_Sort_Ascending_Average(ListNode); ListNode_Traverse_Order_MessageBox(); ListNode_Traverse_Current_Reverse_Show(ListNode); } break; case 0: ListNode_Interface_Student(); break; default: { printf("错误的操作!n"); ListNode_Interface_Student(); } break; } printf("按回车键返回选择项菜单!"); getchar(); getchar(); system("cls"); ListNode_Interface_Sort(ListNode); }
LISTMODE_MODIFYOPTION.c文件
#include "STUHEADERFILES.h" /* 函数:ModifyModes_Id 功能:修改当前节点的ID数据 参数: CurrentListNode:结构体二级指针,接收当前节点,非空节点 toModifyNodesId:char类型,大小为MAX_ID. 返回值:无返回值 */ void ModifyModes_Id(varStudentInformaiton **CurrentListNode,char toModifyNodesId[MAX_ID] ) { strcpy((*CurrentListNode)->cID,toModifyNodesId); } /* 函数:ModifyModes_Name 功能:修改当前节点的ID数据 参数: CurrentListNode:结构体二级指针,接收当前节点,非空节点 toModifyNodesName:char类型,大小为MAX_ID. 返回值:无返回值 */ void ModifyModes_Name(varStudentInformaiton **CurrentListNode, char toModifyNodesName[MAX_NAME]) { strcpy((*CurrentListNode)->csName, toModifyNodesName); } /* 函数:ModifyModes_Sex 功能:修改当前节点的Sex数据 参数: CurrentListNode:结构体二级指针,接收当前节点,非空节点 toModifyNodesSex:char类型,大小为MAX_SEX. 返回值:无返回值 */ void ModifyModes_Sex(varStudentInformaiton **CurrentListNode, char toModifyNodesSex[MAX_SEX]) { strcpy((*CurrentListNode)->csSex, toModifyNodesSex); } /* 函数:ModifyModes_Age 功能:修改当前节点的Age数据 参数: CurrentListNode:结构体二级指针,接收当前节点,非空节点 toModifyNodesAge:int类型 返回值:无返回值 */ void ModifyModes_Age(varStudentInformaiton **CurrentListNode, int toModifyNodesAge) { (*CurrentListNode)->isAge = toModifyNodesAge; } /* 函数:ModifyModes_Grade 功能:修改当前节点的Grade数据 参数: CurrentListNode:结构体二级指针,接收当前节点,非空节点 toModifyNodesGrade:int类型 返回值:无返回值 */ void ModifyModes_Grade(varStudentInformaiton **CurrentListNode, int toModifyNodesGrade) { (*CurrentListNode)->isGrade = toModifyNodesGrade; } /* 函数:ModifyModes_Class 功能:修改当前节点的Class数据 参数: CurrentListNode:结构体二级指针,接收当前节点,非空节点 toModifyNodesClass:int类型 返回值:无返回值 */ void ModifyModes_Class(varStudentInformaiton **CurrentListNode, int toModifyNodesClass) { (*CurrentListNode)->isClass = toModifyNodesClass; } /* 函数:ModifyModes_Seat 功能:修改当前节点的Seat数据 参数: CurrentListNode:结构体二级指针,接收当前节点,非空节点 toModifyNodesSeat:int类型 返回值:无返回值 */ void ModifyModes_Seat(varStudentInformaiton **CurrentListNode, int toModifyNodesSeat) { (*CurrentListNode)->isSeat = toModifyNodesSeat; } /* 函数:ModifyModes_China 功能:修改当前节点的Chinese数据 参数: CurrentListNode:结构体二级指针,接收当前节点,非空节点 toModifyNodesChina:float类型,接收一个匹配的语文 成绩 返回值:无返回值 */ void ModifyModes_China(varStudentInformaiton **CurrentListNode, float toModifyNodesChina) { (*CurrentListNode)->fsChinese = toModifyNodesChina; } /* 函数:ModifyModes_Math 功能:修改当前节点的Math数据 参数: CurrentListNode:结构体二级指针,接收当前节点,非空节点 toModifyNodesMath:float类型,接收一个匹配的数学 成绩 返回值:无返回值 */ void ModifyModes_Math(varStudentInformaiton **CurrentListNode, float toModifyNodesMath) { (*CurrentListNode)->fsMath = toModifyNodesMath; } /* 函数:ModifyModes_English 功能:修改当前节点的English数据 参数: CurrentListNode:结构体二级指针,接收当前节点,非空节点 toModifyNodesEnglish:float类型,接收一个匹配的英语 成绩 返回值:无返回值 */ void ModifyModes_English(varStudentInformaiton **CurrentListNode, float toModifyNodesEnglish) { (*CurrentListNode)->fsEnglish = toModifyNodesEnglish; }
STUDENT_LISTNODE_BOOLJUDGE.c文件
#include "STUHEADERFILES.h" /* 函数: bool_HeadNode_Null 功能:判断传入的节点是否为NULL,为NULL返回1,否则返回0 参数: ptrHeadNodes:结构体指针变量,接收一个结构体指针参数。链表头节点指针 返回值:返回1或者0 */ int bool_HeadNode_Null(varStudentInformaiton *ptrHeadNodes) { if (ptrHeadNodes == NULL) { return 1; } return 0; }
STUDENT_LISTNODE_FILESOPTION.c文件
#include "STUHEADERFILES.h" /* 函数: ListNode_Files_Write 功能:链表节点数据写入文件 参数: ptrListHeadNode:结构体二级指针变量,接收一个结构体指针参数。链表头节点指针 返回值:无返回值 */ void ListNode_Files_Write(varStudentInformaiton *ptrListHeadNode) { FILE *SAVENODETOFILE; varStudentInformaiton *ptrListNodeTemp = ptrListHeadNode->ptrNext; fopen_s(&SAVENODETOFILE, "studentfiles.txt", "wt"); if (SAVENODETOFILE == NULL) { printf("创建或打开文件失败n"); return; } while (ptrListNodeTemp != NULL) { fprintf_s(SAVENODETOFILE, "%st", ptrListNodeTemp->cID, MAX_ID); fprintf_s(SAVENODETOFILE, "%st", ptrListNodeTemp->csName, MAX_NAME); fprintf_s(SAVENODETOFILE, "%st", ptrListNodeTemp->csSex, MAX_SEX); fprintf_s(SAVENODETOFILE, "%dt", ptrListNodeTemp->isAge); fprintf_s(SAVENODETOFILE, "%dt", ptrListNodeTemp->isGrade); fprintf_s(SAVENODETOFILE, "%dt", ptrListNodeTemp->isClass); fprintf_s(SAVENODETOFILE, "%dt", ptrListNodeTemp->isSeat); fprintf_s(SAVENODETOFILE, "%ft", ptrListNodeTemp->fsChinese); fprintf_s(SAVENODETOFILE, "%ft", ptrListNodeTemp->fsMath); fprintf_s(SAVENODETOFILE, "%ft", ptrListNodeTemp->fsEnglish); fprintf_s(SAVENODETOFILE, "%.3lft", ptrListNodeTemp->siStudentScore->dsCoresTotol); fprintf_s(SAVENODETOFILE, "%.3lfrn", ptrListNodeTemp->siStudentScore->dsCoresEve); /*if (fwrite(ptrListNodeTemp, sizeof(varStudentInformaiton) + sizeof(struct siStudentScoreInfor), 12, SAVENODETOFILE) != 12) { printf("数据写入文件失败!n"); return; }*/ ptrListNodeTemp = ptrListNodeTemp->ptrNext; } printf("数据写入文件成功!n"); fclose(SAVENODETOFILE); } void ListNode_Files_Create_NewNodes(FILE **ReadFiles,varStudentInformaiton **ptrListNewNodes) { (*ptrListNewNodes) =(ptrStudentInformation) malloc(sizeof(varStudentInformaiton)); (*ptrListNewNodes)->siStudentScore = (struct siStudentInfor *)malloc(sizeof(struct siStudentInfor)); if ((*ptrListNewNodes) == NULL) { printf("Reade data newnodes Malloc field!n"); return; } (*ptrListNewNodes)->ptrNext = NULL; fscanf((*ReadFiles), "%s", (*ptrListNewNodes)->cID); fscanf((*ReadFiles), "%s", (*ptrListNewNodes)->csName); fscanf((*ReadFiles), "%s", (*ptrListNewNodes)->csSex); fscanf((*ReadFiles), "%d", &(*ptrListNewNodes)->isAge); fscanf((*ReadFiles), "%d", &(*ptrListNewNodes)->isGrade); fscanf((*ReadFiles), "%d", &(*ptrListNewNodes)->isClass); fscanf((*ReadFiles), "%d", &(*ptrListNewNodes)->isSeat); fscanf((*ReadFiles), "%f", &(*ptrListNewNodes)->fsChinese); fscanf((*ReadFiles), "%f", &(*ptrListNewNodes)->fsMath); fscanf((*ReadFiles), "%f", &(*ptrListNewNodes)->fsEnglish); fscanf((*ReadFiles), "%lf", &(*ptrListNewNodes)->siStudentScore->dsCoresTotol); fscanf((*ReadFiles), "%lfn", &(*ptrListNewNodes)->siStudentScore->dsCoresEve); } void ListNode_Files_Read(varStudentInformaiton *ptrListHeadNode) { FILE *SAVENODETOFILE=NULL; varStudentInformaiton *ptrNewNodes = NULL; SAVENODETOFILE=fopen("studentfiles.txt", "r"); if (SAVENODETOFILE == NULL) { printf("创建或打开文件失败n"); return; } fseek(SAVENODETOFILE, 0L, SEEK_SET); while (!feof(SAVENODETOFILE)) { ListNode_Files_Create_NewNodes(&SAVENODETOFILE,&ptrNewNodes); ptrListHeadNode=ListNode_Insert_Push_LastNodes(ptrListHeadNode, ptrNewNodes); } printf("读取文件成功!n"); fclose(SAVENODETOFILE); }
STUDENT_LISTNODE_INIT.c文件
#include "STUHEADERFILES.h" /* 函数: ListNode_Init_HeadNodes 功能:创建一个节点,并分配内存。 参数: var_head:结构体二级指针变量,接收一个指针参数 返回值:无返回值 */ ptrStudentInformation ListNode_Init_HeadNodes(varStudentInformaiton *var_head) { var_head = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton)); var_head->siStudentScore = (struct siStudentScoreInfor*)malloc(sizeof(struct siStudentScoreInfor)); if (var_head == NULL) { return NULL; } if (var_head->siStudentScore == NULL) { return NULL; } var_head->ptrNext = NULL; return var_head; }
STUDENT_LISTNODE_INSERT.c文件
#include "STUHEADERFILES.h" /* 函数: ListNode_Insert_Create_NewNodes 功能:创建新的节点并且录入数据 参数: ptrList_NewNodes:结构体指针变量,接收一个结构体指针参数 cId:数据类型char,参数ID对应结构体ID成员 cName:数据类型char,参数cName对应结构体csName成员 cSex:数据类型char,参数cSex对应结构体csSex成员 iAge:数据类型int,参数iAge对应结构体isAge成员 igrade:数据类型int,参数iGrade对应结构体isGrade成员 iclass:数据类型int,参数iclass对应结构体isClass成员 fChinese:数据类型float,参数fChinese对应结构体fsChinese成员 fMath:数据类型float,参数fMath对应结构体fsMath成员 fEnglish:数据类型float,参数fEnglish对应结构体fsEnglish成员 返回值:ptrListNew */ ptrStudentInformation ListNode_Insert_Create_NewNodes(varStudentInformaiton *ptrList_NewNodes, char cId[MAX_ID], char cName[MAX_NAME], char cSex[MAX_SEX], int iAge, int igrade, int iclass, int iseat, float fChinese, float fMath, float fEnglish) { //varStudentInformaiton *ptrListNew; ptrList_NewNodes = (ptrStudentInformation)malloc(sizeof(varStudentInformaiton)); ptrList_NewNodes->siStudentScore = (struct siStudentScoreInfor*)malloc(sizeof(struct siStudentScoreInfor)); if (ptrList_NewNodes == NULL) { return NULL; } if (ptrList_NewNodes->siStudentScore == NULL) { return NULL; } strcpy(ptrList_NewNodes->cID, cId); strcpy(ptrList_NewNodes->csName, cName); strcpy(ptrList_NewNodes->csSex, cSex); ptrList_NewNodes->isAge = iAge; ptrList_NewNodes->isGrade = igrade; ptrList_NewNodes->isClass = iclass; ptrList_NewNodes->isSeat = iseat; ptrList_NewNodes->fsChinese = fChinese; ptrList_NewNodes->fsMath = fMath; ptrList_NewNodes->fsEnglish = fEnglish; ptrList_NewNodes->siStudentScore->dsCoresTotol = fChinese + fMath + fEnglish; ptrList_NewNodes->siStudentScore->dsCoresEve = (ptrList_NewNodes->siStudentScore->dsCoresTotol) / 3; ptrList_NewNodes->ptrNext = NULL; return ptrList_NewNodes; } /* 函数: ListNode_Insert_Push_FirstNodes 功能:头插法添加结构体成员各节点 参数: ptrHeadNodes:结构体指针变量,接收一个结构体指针参数。链表头节点指针 ptrNewNodes:结构体指针变量,接收一个结构体指针参数。已创建的并且已录入数据的新节点 返回值:ptrHeadNodes */ ptrStudentInformation ListNode_Insert_Push_FirstNodes(varStudentInformaiton *ptrHeadNodes, varStudentInformaiton *ptrNewNodes) { varStudentInformaiton *ptrHeadNodesTemp;//临时指针,指向当前节点位置 ptrHeadNodesTemp = ptrHeadNodes->ptrNext;//因为这个原先的head->next节点,需要被移到后面去。所以要先保存一下 if (ptrHeadNodes == NULL) { //printf("空链表n"); return NULL; } ptrHeadNodes->ptrNext = ptrNewNodes;//head的下一个节点指向新创建的new节点 ptrHeadNodes->ptrNext->ptrNext = ptrHeadNodesTemp;//上面的新节点指向之后,就是处理原来旧节点了。把它移到后面去。 ptrHeadNodes = ptrNewNodes;//链接新节点 return ptrHeadNodes; } /* 函数: ListNode_Insert_Push_LastNodes 功能:尾插法添加结构体成员各数据 参数: ptrList_Nodes:结构体指针变量,接收一个结构体指针参数。链表头节点指针 ptrListNew:结构体指针变量,接收一个结构体指针参数。已创建的并且已录入数据的新节点 返回值:ptrList_Nodes */ ptrStudentInformation ListNode_Insert_Push_LastNodes(varStudentInformaiton *ptrList_Nodes, varStudentInformaiton *ptrListNew) { varStudentInformaiton *ptrListTemp; varStudentInformaiton *ptrHeadTemp; ptrListTemp = ptrList_Nodes; ptrHeadTemp = ptrList_Nodes; if (ptrHeadTemp->ptrNext == NULL) { ptrHeadTemp->ptrNext = ptrListNew; ptrHeadTemp = ptrHeadTemp->ptrNext; ptrHeadTemp = ptrListNew; } else { while (ptrListTemp->ptrNext != NULL) { ptrListTemp = ptrListTemp->ptrNext; } ptrListTemp->ptrNext = ptrListNew; ptrListTemp = ptrListTemp->ptrNext; ptrListTemp = ptrListNew; } return ptrList_Nodes; } /* 函数: ListNode_Insert_Push_SpecifiedNodes 功能:在指定节点后面插入数据 参数: ptrList_Nodes:结构体指针变量,接收一个结构体指针参数。链表头节点指针 ptrNewNodes:结构体指针变量,接收一个结构体指针参数。已创建的并且已录入数据的新节点 ptrCurrentList_Nodes:结构体指针变量,接收一个结构体指针参数。当前节点位置指针 返回值:ptrList_Nodes 其它:非head节点和last节点的插入 */ void ListNode_Insert_Push_SpecifiedNodes(varStudentInformaiton **ptrCurrentList_Nodes, varStudentInformaiton *ptrNewNodes) { (*ptrCurrentList_Nodes) = (*ptrCurrentList_Nodes)->ptrNext;//添加这一行,因为遍历到的是前一个节点. varStudentInformaiton *ptrNodesList = (*ptrCurrentList_Nodes)->ptrNext; (*ptrCurrentList_Nodes)->ptrNext = ptrNewNodes; (*ptrCurrentList_Nodes) = (*ptrCurrentList_Nodes)->ptrNext; (*ptrCurrentList_Nodes)->ptrNext = ptrNodesList; (*ptrCurrentList_Nodes) = ptrNewNodes; } /* 函数: ListNode_Insert_Push_SpecifiedNodes_head 功能:在指定节点前面插入数据 参数: ptrList_Nodes:结构体指针变量,接收一个结构体指针参数。链表头节点指针 ptrNewNodes:结构体指针变量,接收一个结构体指针参数。已创建的并且已录入数据的新节点 ptrCurrentList_Nodes:结构体指针变量,接收一个结构体指针参数。当前节点位置指针 返回值:ptrList_Nodes 其它:非head节点和last节点的插入 */ void ListNode_Insert_Push_SpecifiedNodes_head(varStudentInformaiton **ptrCurrentList_Nodes, varStudentInformaiton *ptrNewNodes) { varStudentInformaiton *ptrNodesList = (*ptrCurrentList_Nodes)->ptrNext; (*ptrCurrentList_Nodes)->ptrNext = ptrNewNodes; (*ptrCurrentList_Nodes) = (*ptrCurrentList_Nodes)->ptrNext; (*ptrCurrentList_Nodes)->ptrNext = ptrNodesList; (*ptrCurrentList_Nodes) = ptrNewNodes; }
STUDENT_LISTNODE_INTERFACE.c文件
#include "STUHEADERFILES.h" /* 函数: ListNode_Interface_Sort 功能: 查询功能界面: 语英数成绩、平均、总成绩升序、降序排序功能模块的界面显示 参数: varLishNode 接收头节点 返回值: 无返回值 */ void ListNode_Interface_Sort(varStudentInformaiton *varLishNode) { printf("1.语文成绩升序排序.n"); printf("2.数学成绩升序排序.n"); printf("3.英语成绩升序排序.n"); printf("4.总 成 绩升序排序.n"); printf("5.平均成绩升序排序.n"); printf("6.语文成绩降序排序.n"); printf("7.数学成绩降序排序.n"); printf("8.英语成绩降序排序.n"); printf("9.总 成 绩降序排序.n"); printf("10.平均成绩降序排序.n"); printf("0.返 回 上一层 界面.n"); Mode_Sort_Choose(varLishNode); } /* 函数: ListNode_Interface_Querry 功能: 查询功能界面: ID、姓名、性别、年龄、年级、班级、座位、语英数成绩、平均、总成绩查询的界面显示 参数: varLishNode 接收头节点 返回值: 无返回值 */ void ListNode_Interface_Querry(varStudentInformaiton *varLishNode) { printf("1.ID查询.n"); printf("2.姓名查询.n"); printf("3.性别查询.n"); printf("4.年龄查询.n"); printf("5.年级查询.n"); printf("6.班级查询.n"); printf("7.座位查询.n"); printf("8.语文成绩查询.n"); printf("9.数学成绩查询.n"); printf("10.英语成绩查询.n"); printf("11.总成绩查询.n"); printf("12.平均成绩查询.n"); printf("0.返回上一层界面n"); Mode_Querry_Choose(varLishNode); } /* 函数: ListNode_Interface_Modify 功能: 数据修改功能界面: ID、姓名、性别、年龄、年级、班级、座位、语英数成绩、平均、总成绩修改的界面显示 参数: ptrLishNode 结构体二级指针 接收头节点 返回值: 无返回值 */ void ListNode_Interface_Modify(varStudentInformaiton **ptrLishNode) { printf("================学生成绩管理系统============================nn"); printf("tt操作选项:nn"); printf("tt1.ID修改.nn"); printf("tt2.姓名修改.nn"); printf("tt3.性别修改.nn"); printf("tt4.年龄修改.nn"); printf("tt5.年级修改.nn"); printf("tt6.班级修改.nn"); printf("tt7.座位修改.nn"); printf("tt8.语文成绩修改.nn"); printf("tt9.数学成绩修改.nn"); printf("tt10.英语成绩修改.nn"); printf("tt0.返回上一层界面nn"); printf("================学生成绩管理系统============================nn"); Mode_Node_Modify_Option(ptrLishNode); } /* 函数: ListNode_Interface_Show 功能: 学生成绩管理系统数据显示选择功能界面: 1.顺序显示 2.逆序显示 参数: 无 返回值: 无返回值 */ void ListNode_Interface_Show() { printf("选择操作:n"); printf("1.顺序显示学生成绩列表!n"); printf("2.逆序显示学生成绩列表!n"); printf("3.返回上一层操作!n"); } /* 函数: ListNode_Interface_Student_Mode 功能: 学生成绩管理系统主界面功能模块 参数: 无 返回值: 无返回值 */ void ListNode_Interface_Student_Mode() { int chooseflags; printf("请输入选择操作:n"); scanf_s("%d", &chooseflags); system("cls"); switch (chooseflags) { case 1: { Mode_Data_Push_Option(&ptrStuNodes, &ptrNewNodes); //学生成绩录入模块 break; } case 2: ListNode_Interface_Querry(ptrStuNodes); //学生成绩查询模块 break; case 3: ListNode_Interface_Modify(&ptrStuNodes); //学生成绩数据修改模块 break; case 4: Mode_Data_Remove(&ptrStuNodes); //学生成绩数据删除模块 break; case 5: { ptrSortNodes = ptrStuNodes; ListNode_Interface_Sort(ptrSortNodes); //学生成绩排序模块 } break; case 6: Mode_Show_Choose(ptrStuNodes); //学生成绩显示模块 break; case 7: ListNode_Files_Write(ptrStuNodes); //学生成绩数据保存文件模块 break; case 8: ListNode_Files_Read(ptrStuNodes); //学生成绩数据读入模块 break; case 0: return; break; default: printf("错误的操作!n"); break; } ListNode_Interface_Student(); } /* 函数: ListNode_Interface_Student 功能: 显示学生成绩管理系统主界面 参数: 无 返回值: 无 */ void ListNode_Interface_Student(void) { printf("================学生成绩管理系统============================n"); printf("tt1.学生成绩录入n"); printf("tt2.学生成绩查询n"); printf("tt3.学生成绩修改n"); printf("tt4.学生成绩删除n"); printf("tt5.学生成绩排序n"); printf("tt6.学生成绩显示n"); printf("tt7.学生成绩保存n"); printf("tt8.学生成绩载入n"); printf("tt0.退出操作n"); printf("================学生成绩管理系统============================n"); ListNode_Interface_Student_Mode(); }
STUDENT_LISTNODE_REMOVE.c文件
#include "STUHEADERFILES.h" /* 函数: ListNode_Remove_Node 功能:释放当前指针和嵌套结构体内存 参数: ptrNode:结构体二级指针变量,接收一个结构体指针参数。链表当前节点指针 返回值:无返回值 */ void ListNode_Remove_Node(varStudentInformaiton **ptrNode) { free((*ptrNode)->siStudentScore); free((*ptrNode)); } /* 函数: ListNode_Remove_HeadNodes 功能:删除首节点和数据 参数: ptrFirstNode:结构体二级指针变量,接收一个结构体指针参数。链表头节点指针 返回值:无返回值 */ void ListNode_Remove_HeadNodes(varStudentInformaiton **ptrFirstNode) { varStudentInformaiton *toDeleteHeadNode; varStudentInformaiton *toNewNode = (*ptrFirstNode)->ptrNext; toDeleteHeadNode = toNewNode; //获取删除的节点 toNewNode->ptrNext = toDeleteHeadNode->ptrNext; //删除后面的节点给链接临时节点,这一句执行后,并不是tohead就是直接得到后面节点 toNewNode = toNewNode->ptrNext; //这里直接得到后面的节点。 ListNode_Remove_Node(&toDeleteHeadNode); //这时就可以释放删除的节点了。 ((*ptrFirstNode)->ptrNext) = toNewNode; //头节点重新链接后面的节点 toDeleteHeadNode = NULL; //置空临时节点 } /* 函数: ptrNodes 功能:删除链表尾部节点和数据 参数: ptrNodes:结构体二级指针变量,接收一个结构体指针参数。链表当前节点指针 返回值:无返回值 */ void ListNode_Remove_LastNodes(varStudentInformaiton **ptrNodes) { varStudentInformaiton *toDelete; //待删除的节点 toDelete = (*ptrNodes)->ptrNext; //指向需要删除的节点。(遍历时是遍历到删除节点的前一个节点) ListNode_Remove_Node(&toDelete); (*ptrNodes)->ptrNext = NULL; //此时删除的节点置NULL toDelete = NULL; //这被释放的节点也置NULL //在这段操作中,pnNodes这个节点始终是删除节点的前一个节点。它只是用来做一个指向,即它现在是7 //(*pnNodes)->pnext这样子就是8。所以需要一个临时指针来保存8并释放。 } /* 函数: ListNode_Remove_SpecifiedNodes 功能:指定节点的删除.此节点不包含首节点和尾部节点 参数: ptrNodes:结构体二级指针变量,接收一个结构体指针参数。链表当前节点指针 返回值:无返回值 */ void ListNode_Remove_SpecifiedNodes(varStudentInformaiton **ptrNodes) { varStudentInformaiton *toListNode_Remove_Node = (*ptrNodes)->ptrNext; //遍历到的当前节点,得到下一个需要删除的节点。先保存起来。后面删除需要用到 (*ptrNodes)->ptrNext = toListNode_Remove_Node->ptrNext; //toListNode_Remove_Node是需要删除的节点,那么下一个节点就是(*ptrNodes)->ptrNext->ptrNext,让原来删除的节点指向这个 ListNode_Remove_Node(&toListNode_Remove_Node); //执行删除 } /* 函数: ListNode_Remove_AllNodes 功能: 删除整个链表所有节点 参数: ptrNodes: 结构体二级指针变量 接收链表头节点 返回值: 无返回值 */ void ListNode_Remove_AllNodes(varStudentInformaiton **ptrNodes) { varStudentInformaiton *ptrTempNodes; //临时指针,用于接收节点的后面节点。 ptrTempNodes = (*ptrNodes)->ptrNext; //指向释放节点的后一个节点 ListNode_Remove_Node(ptrNodes); //释放节点 (*ptrNodes) = ptrTempNodes; //再把下一个节点给ptrNodes,这样就可以形成一个循环 if ((*ptrNodes) == NULL) //递归结束条件,ptrNodes为NULL { return; } ListNode_Remove_AllNodes(ptrNodes); //递归操作,直到所有节点释放完毕 }
STUDENT_LISTNODE_TRAVERSESHOW.c文件
#include "STUHEADERFILES.h" /* 函数: ListNode_Traverse_Current_Id 功能: 遍历链表匹配ID 返回匹配的当前节点 参数: ptrList_Nodes: 结构体指针变量 接收链表头节点 serchID: CHAR类型 接收一个不大于MAX_ID大小的数组 返回值: 未匹配到ID返回NULL 匹配到ID返回当前ptrListCurrent节点 */ ptrStudentInformation ListNode_Traverse_Current_Id(varStudentInformaiton *ptrList_Nodes, char serchID[MAX_ID]) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes; while (ptrListCurrent->ptrNext != NULL) { if (strcmp(ptrListCurrent->ptrNext->cID, serchID) == 0) { return ptrListCurrent; } ptrListCurrent = ptrListCurrent->ptrNext; } return NULL; } /* 函数: ptrCurrentNodes_Show 功能: 匹配ID 遍历并显示 参数: ptrList_Nodes: 结构体指针变量 接收链表头节点指针 serchID: CHAR类型 接收一个不大于MAX_ID大小的数组。 返回值:无返回值 */ void ListNode_Traverse_Current_Id_Show(varStudentInformaiton *ptrList_Nodes, char serchID[MAX_ID]) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes->ptrNext; while (ptrListCurrent != NULL) { if (strcmp(ptrListCurrent->cID, serchID) == 0) { ListNode_Traverse_Current_Node_Show(ptrListCurrent); } ptrListCurrent = ptrListCurrent->ptrNext; } } /* 函数: ListNode_Traverse_Current_Name_Show 功能: 遍历检索匹配的姓名 参数: ptrList_Nodes: 结构体指针变量 接收链表头节点. serchName: CHAR类型 接收一个不大于MAX_Name大小的数组. 返回值: 无返回值 */ void ListNode_Traverse_Current_Name_Show(varStudentInformaiton *ptrList_Nodes, char serchName[MAX_NAME]) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes->ptrNext; while (ptrListCurrent != NULL) { if (strcmp(ptrListCurrent->cID, serchName) == 0) { ListNode_Traverse_Current_Node_Show(ptrListCurrent); } ptrListCurrent = ptrListCurrent->ptrNext; } } /* 函数: ListNode_Traverse_Current_Sex_Show 功能: 遍历检索匹配的性别 参数: ptrList_Nodes: 结构体指针变量 接收链表头节点指针 serchSex: CHAR类型 接收一个不大于MAX_SEX大小的数组。 返回值: 无返回值 */ void ListNode_Traverse_Current_Sex_Show(varStudentInformaiton *ptrList_Nodes, char serchSex[MAX_SEX]) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes->ptrNext; while (ptrListCurrent != NULL) { if (strcmp(ptrListCurrent->cID, serchSex) == 0) { ListNode_Traverse_Current_Node_Show(ptrListCurrent); } ptrListCurrent = ptrListCurrent->ptrNext; } } /* 函数: ListNode_Traverse_Current_Age_Show 功能: 遍历检索匹配的AGE 参数: ptrList_Nodes: 结构体指针变量,接收链表头节点 iVarAge: int类型 接收一个年龄 返回值: 无返回值 */ void ListNode_Traverse_Current_Age_Show(varStudentInformaiton *ptrList_Nodes, int iVarAge) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes->ptrNext; while (ptrListCurrent != NULL) { if (ptrListCurrent->isAge == iVarAge) { ListNode_Traverse_Current_Node_Show(ptrListCurrent); } ptrListCurrent = ptrListCurrent->ptrNext; } } /* 函数: ListNode_Traverse_Current_Age_Show 功能: 遍历检索匹配的年级 参数: ptrList_Nodes: 结构体指针变量,接收链表头节点 iVarGrade: int类型 接收一个年级 返回值: 无返回值 */ void ListNode_Traverse_Current_Grade_Show(varStudentInformaiton *ptrList_Nodes, int iVarGrade) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes->ptrNext; while (ptrListCurrent != NULL) { if (ptrListCurrent->isGrade == iVarGrade) { ListNode_Traverse_Current_Node_Show(ptrListCurrent); } ptrListCurrent = ptrListCurrent->ptrNext; } } /* 函数: ListNode_Traverse_Current_Class_Show 功能: 遍历检索匹配的班级 参数: ptrList_Nodes: 结构体指针变量,接收链表头节点 iVarClass: int类型 接收一个班级 返回值: 无返回值 */ void ListNode_Traverse_Current_Class_Show(varStudentInformaiton *ptrList_Nodes, int iVarClass) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes->ptrNext; while (ptrListCurrent != NULL) { if (ptrListCurrent->isClass == iVarClass) { ListNode_Traverse_Current_Node_Show(ptrListCurrent); } ptrListCurrent = ptrListCurrent->ptrNext; } } /* 函数: ListNode_Traverse_Current_Seat_Show 功能: 遍历检索匹配的座位 参数: ptrList_Nodes: 结构体指针变量,接收链表头节点 iVarSeat: int类型 接收一个座位 返回值: 无返回值 */ void ListNode_Traverse_Current_Seat_Show(varStudentInformaiton *ptrList_Nodes, int iVarSeat) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes->ptrNext; while (ptrListCurrent != NULL) { if (ptrListCurrent->isSeat == iVarSeat) { ListNode_Traverse_Current_Node_Show(ptrListCurrent); } ptrListCurrent = ptrListCurrent->ptrNext; } } /* 函数: ListNode_Traverse_Current_China_Show 功能: 遍历检索匹配的语文成绩 参数: ptrList_Nodes: 结构体指针变量,接收链表头节点 fVarChina: float类型 接收一个浮点值的语文成绩 返回值: 无返回值 */ void ListNode_Traverse_Current_China_Show(varStudentInformaiton *ptrList_Nodes, float fVarChina) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes->ptrNext; while (ptrListCurrent != NULL) { if (ptrListCurrent->fsChinese == fVarChina) { ListNode_Traverse_Current_Node_Show(ptrListCurrent); } ptrListCurrent = ptrListCurrent->ptrNext; } } /* 函数: ListNode_Traverse_Current_Math_Show 功能: 遍历检索匹配的数学成绩 参数: ptrList_Nodes: 结构体指针变量,接收链表头节点 fVarMath: float类型 接收一个浮点值的数学成绩 返回值: 无返回值 */ void ListNode_Traverse_Current_Math_Show(varStudentInformaiton *ptrList_Nodes, float fVarMath) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes->ptrNext; while (ptrListCurrent != NULL) { if (ptrListCurrent->fsMath == fVarMath) { ListNode_Traverse_Current_Node_Show(ptrListCurrent); } ptrListCurrent = ptrListCurrent->ptrNext; } } /* 函数: ListNode_Traverse_Current_Eng_Show 功能: 遍历检索匹配的英语成绩 参数: ptrList_Nodes: 结构体指针变量,接收链表头节点 fVarEng: float类型 接收一个浮点值的英语成绩 返回值: 无返回值 */ void ListNode_Traverse_Current_Eng_Show(varStudentInformaiton *ptrList_Nodes, float fVarEng) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes->ptrNext; while (ptrListCurrent != NULL) { if (ptrListCurrent->fsMath == fVarEng) { ListNode_Traverse_Current_Node_Show(ptrListCurrent); } ptrListCurrent = ptrListCurrent->ptrNext; } } /* 函数: ListNode_Traverse_Current_Aver_Show 功能: 遍历检索匹配的平均成绩 参数: ptrList_Nodes: 结构体指针变量,接收链表头节点 dVarEve: double类型 接收一个浮点值的平均成绩 返回值: 无返回值 */ void ListNode_Traverse_Current_Aver_Show(varStudentInformaiton *ptrList_Nodes, double dVarEve) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes->ptrNext; while (ptrListCurrent != NULL) { if (ptrListCurrent->siStudentScore->dsCoresEve == dVarEve) { ListNode_Traverse_Current_Node_Show(ptrListCurrent); } ptrListCurrent = ptrListCurrent->ptrNext; } } /* 函数: ListNode_Traverse_Current_Total_Show 功能: 遍历检索匹配的总成绩 参数: ptrList_Nodes: 结构体指针变量,接收链表头节点 dVarTotol: double类型 接收一个浮点值的总成绩 返回值: 无返回值 */ void ListNode_Traverse_Current_Total_Show(varStudentInformaiton *ptrList_Nodes, double dVarTotol) { varStudentInformaiton *ptrListCurrent; ptrListCurrent = ptrList_Nodes->ptrNext; while (ptrListCurrent != NULL) { if (ptrListCurrent->siStudentScore->dsCoresTotol == dVarTotol) { ListNode_Traverse_Current_Node_Show(ptrListCurrent); } ptrListCurrent = ptrListCurrent->ptrNext; } } /* 函数: ListNode_Traverse_Order_Show 功能: 顺序显示链表 参数: varList_Nodes: 结构体指针变量,接收链表节点 返回值: 无返回值 */ void ListNode_Traverse_Order_Show(varStudentInformaiton *varList_Nodes) { varStudentInformaiton *varListTemp; if (varList_Nodes==NULL) { printf("空链表!n"); return; } varListTemp = varList_Nodes->ptrNext; while (varListTemp != NULL) { ListNode_Traverse_Current_Node_Show(varListTemp); varListTemp = varListTemp->ptrNext; } } /* 函数: ListNode_Traverse_Current_Reverse_Show 功能: 逆序显示链表 参数: varList_Nodes: 结构体指针变量 接收链表节点 返回值: 无返回值 */ void ListNode_Traverse_Current_Reverse_Show(varStudentInformaiton *varList_Nodes) { varStudentInformaiton *varListTemp; varListTemp = varList_Nodes; if (varList_Nodes == NULL || varList_Nodes->ptrNext == NULL) { return; } varListTemp = varListTemp->ptrNext; ListNode_Traverse_Current_Reverse_Show(varListTemp); ListNode_Traverse_Current_Node_Show(varListTemp); } /* 函数: ListNode_Traverse_Current_Node_Show 功能: 显示当前节点元素 参数: varListTemp: 结构体指针变量 接收当前节点 返回值:无返回值 */ void ListNode_Traverse_Current_Node_Show(varStudentInformaiton *varListTemp) { printf("ID:%-4s NAME:%-4s sex:%-4s age:%-4d grade:%-4d class:%-4d seat:%-4dn chinesescores:%-4.2f mathscores:%-4.2f englishscore:%-4.2f totolscore:%-4.3lf evescore:%-4.3lfnn", varListTemp->cID, varListTemp->csName, varListTemp->csSex, varListTemp->isAge, varListTemp->isGrade, varListTemp->isClass, varListTemp->isSeat, varListTemp->fsChinese, varListTemp->fsMath, varListTemp->fsEnglish, varListTemp->siStudentScore->dsCoresTotol, varListTemp->siStudentScore->dsCoresEve); } /* 函数: ListNode_Traverse_Asc_MessageBox 功能: 升级排序提示 参数: 无 返回值: 无 */ void ListNode_Traverse_Asc_MessageBox() { printf("n升序排序如下表!nn"); } /* 函数: ListNode_Traverse_Order_MessageBox 功能: 降级排序提示 参数: 无 返回值: 无 */ void ListNode_Traverse_Order_MessageBox() { printf("n降序排序如下表!nn"); }
STUDENTSCORES.c文件
#include "STUHEADERFILES.h" int main(void) { ptrStuNodes = ListNode_Init_HeadNodes(ptrStuNodes);//初始化 ListNode_Interface_Student(); return 0; }
内容来源于网络如有侵权请私信删除
- 还没有人评论,欢迎说说您的想法!