C语言-学生管理系统项目

目标:

利用所学的C语言和函数知识去实现

先做管理员对学生操作(增删改查排序)这条线完成
comm.h
list.h list.c
student.h student.c 
menu.h menu.c(只写学生相关)
main.c

程序调试
1) 必须写完一个函数,调试一个函数
2)  出现段错误时必须使用gdb调试


学习内容:

按照图片实现:


学习时间:

三天时间去实现

代码部分:

.h文件

​
#ifndef __nmenu__XJT__
#define __nmenu__XJT__

#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<stdbool.h>

typedef struct nmenu
{
    struct nmenu* next;
    struct student* data;
}nmenu,*pnmenu;

typedef struct student	//学生结构体定义
{
	char cid[16];	  //学生学号定义
	char name[32];	  //学生姓名
	//char pass[16];  //学生密码
	int age;	      //学生年龄
	int gmath;	      //学生数学成绩
	int glang;	      //C语言成绩
	int gphil;	      //语文成绩
	int gsum;	      //总分
	//int order;	  //排序
	char classid[10]; //班号
	struct student* next;
}stu_t;

void password(nmenu* phead);                    //管理员密码
void student_main_surface(nmenu* phead);        //管理员的主目录
nmenu* creat_head();                            //创建头节点
void student_information_input(nmenu* phead);   //学生信息输入界面

void student_information_seek(nmenu* phead);    //学生信息查找界面
nmenu* find(nmenu* phead);                      //学生cid查找函数
nmenu* find_name(nmenu* phead);                 //学生姓名查找函数
nmenu* find_age(nmenu* phead);                  //学生年龄查找函数
void seek_cid(nmenu* phead);                    //学生cid查找输入界面
void seek_name(nmenu* phead);                   //学生姓名查找输入界面
void seek_age(nmenu* phead);                    //学生年龄查找输入界面
void input_student_input(nmenu* phead);         //打印按cid查找的当前学生信息
void input_student_name(nmenu* phead);          //打印按姓名查找的当前学生信息
void input_student_age(nmenu* phead);           //打印按年龄查找的当前学生信息

void delete_student_information(nmenu* phead);  //学生的信息删除界面 
void delete_cid(nmenu* phead);                  //输入学生的cid删除学生的信息
void delete_information(nmenu* phead);          //删除需要删除的学生信息
nmenu* dfind_cid(nmenu* phead);                 //按cid查找需要删除的学生信息
nmenu* dfind_age(nmenu* phead);                 //按年龄查找需要删除的学生信息

void modify_student_information(nmenu* phead);  //学生的信息修改界面 
void modify_cid(nmenu* phead);                  //输入学生的cid修改学生的信息界面
void modify_information(nmenu* phead);          //打印修改后的学生信息
void modify_information_age(nmenu* phead);      //打印修改后的学生信息
void modify_age(nmenu* phead);                  //输入学生的cid修改学生的信息界面

void sort_student_information(nmenu* phead);   //学生排序界面
int size_data(nmenu* phead,int size);          //得出存入数据的个数
void sortid(nmenu *phead);                     //按年龄排序函数                

void browse_information(nmenu* phead);   //浏览全部学生信息的界面

void password_stu(nmenu* phead);                    //学生密码
void stu_student_main_surface(nmenu* phead);        //学生系统主界面
void look_student_information(nmenu* phead);        //根据cid查看自我学生信息
void age_modify_student_information(nmenu* phead);  //修改个人信息年龄

void topxt(nmenu* phead);  //双系统界面
#endif

​

子函数文件:

代码都能实现,但由于结构体数据太多没有一一书写,可以参考内容里面代码自行填写,思路都是一样的。

#include"nmenu.h"

/// @brief 设置管理员密码
/// @param phead 头节点
void password(nmenu* phead)
{
    char srr[20]={"123456"};
    char arr[20]={0};
    printf("请输入你的密码:");
    scanf("%s",arr);
    int res=strcmp(arr,srr);
    if(res==0)
    {
       student_main_surface(phead); 
    }
    else
    {
        exit(0);
    }
}

/// @brief 管理员管理系统主界面
/// @param phead 选择相应模式
void student_main_surface(nmenu* phead)
{
    system("clear");
    printf("\n");
    printf("********************************\n");
    printf("|                               |\n");
	printf("|      管理员管理系统主界面        |\n");
	printf("*      0.返回                    *\n");
	printf("*      1.录入学生信息             *\n");  
	printf("|      2.查找学生信息             |\n");   
	printf("*      3.删除学生信息             *\n");    
	printf("|      4.修改学生的信息           |\n");  
	printf("*      5.全部学生信息直接浏览      *\n"); 
	printf("*      6.排序学生信息             *\n");
	printf("|      7.退出系统                |\n");  
	printf("|                               |\n");
	printf("********************************\n");
    printf("请输入一个数字选择功能:");
    int a;
	scanf("%d",&a);
	printf("\n");
	if(a>7||a<0)
	{
		printf("输入错误,不再要求之内!\n");
		printf("即将再次进入主界面!\n");
		sleep(1);
		student_main_surface(phead);
	}
	else
	{
		if(a==0)
		{
			topxt(phead); //学生的信息输入   参数:代表w[]的当前空位
		}
		else if(a==1)
		{
			student_information_input(phead); //学生的信息输入   参数:代表w[]的当前空位
		}
		else if(a==2)
		{
			student_information_seek(phead);//学生的信息查找	
		}
		else if(a==3)
		{
           delete_student_information(phead);         //删除学生的信息
		}
		else if(a==4)   //修改学生的信息
		{
		    modify_student_information(phead);     
		}
		else if(a==5)
		{
			browse_information(phead);       //浏览所有的学生的信息
		}
		else if(a==6)   //修改学生的信息
		{
		    sort_student_information(phead);     
		}
		else if(a==7)
		{
			printf("感谢您的使用,欢迎再次使用!再见!\n");
			sleep(1);
			return;
		}
 
	}
}

/// @brief 创建头节点
/// @return 头节点的地址
nmenu* creat_head()
{
    nmenu* phead=(nmenu*)malloc(sizeof(nmenu));
    if(phead==NULL)
    {
        perror("null");
        exit(-1);
    }
    phead->data=NULL;
    phead->next=NULL;
    return phead;
}

/// @brief 学生信息输入界面
/// @param phead 头节点
void student_information_input(nmenu* phead)
{
    system("clear");
	printf("===========================================\n");
	printf("=          欢迎来到学生信息输入界面       =\n");
	printf("===========================================\n");
    nmenu* pnew=(nmenu*)malloc(sizeof(nmenu));
	pnew->next=phead->next;
	phead->next=pnew;
    pnew->data = malloc(sizeof(struct student));    
    printf("请输入学生的cid:");
	scanf("%s",pnew->data->cid);
	printf("请输入学生的姓名:");
	scanf("%s",pnew->data->name);
	printf("请输入学生的年龄:");
	scanf("%d",&pnew->data->age);
    //printf("请输入学生的密码:");
	//scanf("%s",pnew->data->pass);
	printf("请输入学生的数学成绩:(成绩范围0-100):");
	scanf("%d",&pnew->data->gmath);
	printf("请输入学生的c语言成绩:(成绩范围0-100):");
	scanf("%d",&pnew->data->glang);
	printf("请输入学生的语文成绩:(成绩范围0-100):");
	scanf("%d",&pnew->data->gphil);
	//printf("请输入学生的总分:");
	//scanf("%d",&pnew->data->gsum);
    //printf("请输入学生的排序:");
	//scanf("%d",&pnew->data->order);
    printf("请输入学生的班号:");
	scanf("%s",pnew->data->classid);
    pnew->data->gsum=pnew->data->gmath+pnew->data->glang+pnew->data->gphil;
	printf("学生总成绩为%d",pnew->data->gsum);
    printf("任意输入加回车返回主界面!\n");
	getchar();
	getchar();
	student_main_surface(phead);
}

/// @brief 学生的信息查找界面
/// @param phead 头节点
void student_information_seek(nmenu* phead)
{
    system("clear");
	int a;
	printf("==========================================\n");
	printf("*         学生的信息查找界面             *\n");
	printf("==========================================\n");
	printf("*   1.按学生的cid查找                     *\n");
	printf("------------------------------------------\n");
	printf("*   2.按学生的姓名查找                   *\n");
	printf("------------------------------------------\n");
    printf("*   3.按学生的年龄查找                   *\n");
	printf("------------------------------------------\n");
    printf("*   4.按学生的数学成绩查找                   *\n");
	printf("------------------------------------------\n");
    printf("*   5.按学生的c语言成绩查找                   *\n");
	printf("------------------------------------------\n");
    printf("*   6.按学生的语文成绩查找                   *\n");
	printf("------------------------------------------\n");
    printf("*   7.按学生的班号查找                   *\n");
	printf("------------------------------------------\n");
    printf("*   8.按学生的总分查找                   *\n");
	printf("------------------------------------------\n");
	printf("*   9.退出!                             *\n");
	printf("==========================================\n");
	printf("请输入数字来选择功能:");
	scanf("%d",&a);
	if(a==1)
	{
		seek_cid(phead);
	}
	else if(a==2)
	{
		seek_name(phead);	
	}
	else if(a==3)
	{
        seek_age(phead);  //学生的主目录
	}
    /*else if(a==4)
	{
		Seek_gmath(phead);	
	}
    else if(a==5)
	{
		Seek_glang(phead);	
	}
    else if(a==6)
	{
		Seek_gphil(phead);	
	}
    else if(a==7)
	{
		Seek_gsum(phead);	
	}
    else if(a==8)
	{
		Seek_classid(phead);	
	}*/
    else if(a==9)
	{
		student_main_surface(phead);	
	}
	else
	{
        student_main_surface(phead);  //学生的主目录
	}
}

/// @brief 查找当前cid所对应的节点
/// @param phead 头节点
/// @return 返回找出节点的位置
nmenu* find(nmenu* phead)
{
	char arr[16]={0};
   nmenu* pnode=phead->next;
   printf("请输入id:");
	scanf("%s",arr);
	while(pnode)
	{
		int i=strcmp(pnode->data->cid,arr);
		if(i==0)
		{
			return pnode;
		}
		pnode=pnode->next;
	}
	return NULL;
}

/// @brief 输入学生的id查找学生的信息界面
/// @param phead 头节点
void seek_cid(nmenu* phead)
{
    system("clear");
	printf("===================================================\n");
	printf("*          欢迎进入输入学生的id查找学生的信息     *\n");
	printf("===================================================\n");
	input_student_input(phead);
	printf("任意键输入加回车 回到上一个界面!\n");
	getchar();
	getchar();
	student_information_seek(phead);//学生的信息查找
}

/// @brief 打印查找出的当前节点的数据
/// @param phead 头节点
void input_student_input(nmenu* phead)   
{
	nmenu* pnode=find(phead);
	if(pnode==NULL)
	{
		printf("此学生的信息没有!\n");
	}
	else 
	{
		printf("学生的cid:%s\n",pnode->data->cid);
		printf("学生的姓名:%s\n",pnode->data->name);
		printf("学生的年龄:%d\n",pnode->data->age);
		printf("学生的数学成绩:%d\n",pnode->data->gmath);
		printf("学生的c语言:%d\n",pnode->data->glang);
		printf("学生的语文成绩:%d\n",pnode->data->gphil);
		printf("学生的总成绩:%d\n",pnode->data->gsum);
		printf("学生的班号:%s\n",pnode->data->classid);  	
	}
}

/// @brief 输入学生的name查找学生的信息界面
/// @param phead 头节点
void seek_name(nmenu* phead)
{
	system("clear");
	printf("===================================================\n");
	printf("*          欢迎进入输入学生的name查找学生的信息     *\n");
	printf("===================================================\n");
	input_student_name(phead);
	printf("任意键输入加回车 回到上一个界面!\n");
	getchar();
	getchar();
	student_information_seek(phead);//学生的信息查找
}

/// @brief 打印姓名查找到的当前节点的数据
/// @param phead 头节点
void input_student_name(nmenu* phead)   
{
	nmenu* pnode=find_name(phead);
	if(pnode==NULL)
	{
		printf("此学生的信息没有!\n");
	}
	else 
	{
		printf("学生的cid:%s\n",pnode->data->cid);
		printf("学生的姓名:%s\n",pnode->data->name);
		printf("学生的年龄:%d\n",pnode->data->age);
		printf("学生的数学成绩:%d\n",pnode->data->gmath);
		printf("学生的c语言:%d\n",pnode->data->glang);
		printf("学生的语文成绩:%d\n",pnode->data->gphil);
		printf("学生的总成绩:%d\n",pnode->data->gsum);
		printf("学生的班号:%s\n",pnode->data->classid);  	
	}
}

/// @brief 查找相应姓名的节点
/// @param phead 头节点
/// @return 返回相应节点的地址
nmenu* find_name(nmenu* phead)
{
	char arr[32]={0};
   nmenu* pnode=phead->next;
   printf("请输入name:");
	scanf("%s",arr);
	while(pnode)
	{
		int l=strcmp(pnode->data->name,arr);
		if(l==0)
		{
			return pnode;
		}
		pnode=pnode->next;
	}
	return NULL;
}

/// @brief 输入学生的age查找学生的信息界面
/// @param phead 头节点
void seek_age(nmenu* phead)
{
	system("clear");
	printf("===================================================\n");
	printf("*          欢迎进入输入学生的age查找学生的信息     *\n");
	printf("===================================================\n");
	input_student_age(phead);
	printf("任意键输入加回车 回到上一个界面!\n");
	getchar();
	getchar();
	student_information_seek(phead);//学生的信息查找
}

/// @brief 打印查找到的年龄所对应的数据
/// @param phead 头节点
void input_student_age(nmenu* phead)
{
	nmenu* pnode=find_age(phead);
	if(pnode==NULL)
	{
		printf("此学生的信息没有!\n");
	}
	else 
	{
		printf("学生的cid:%s\n",pnode->data->cid);
		printf("学生的姓名:%s\n",pnode->data->name);
		printf("学生的年龄:%d\n",pnode->data->age);
		printf("学生的数学成绩:%d\n",pnode->data->gmath);
		printf("学生的c语言:%d\n",pnode->data->glang);
		printf("学生的语文成绩:%d\n",pnode->data->gphil);
		printf("学生的总成绩:%d\n",pnode->data->gsum);
		printf("学生的班号:%s\n",pnode->data->classid);  	
	}
}

/// @brief 按年龄查找当前需要的节点
/// @param phead 头节点
/// @return 返回相应数据
nmenu* find_age(nmenu* phead)
{
	int i=0;
   nmenu* pnode=phead->next;
   printf("请输入age:");
	scanf("%d",&i);
	while(pnode)
	{
		if(i==pnode->data->age)
		{
			return pnode;
		}
		pnode=pnode->next;
	}
	return NULL;
}

/// @brief 浏览全部学生信息的界面 
/// @param phead 头节点
void browse_information(nmenu* phead)
{
	if(phead == NULL)
	{
		printf("perror\n");
		exit(-2);

	}
	system("clear");
	printf("===============================================\n");
	printf("       5.欢迎来到浏览全部学生信息的界面        \n");
	printf("===============================================\n");
	nmenu* pnode = phead->next;
	while(pnode)
	{
		printf("学生的cid:%s\n",pnode->data->cid);
		printf("学生的姓名:%s\n",pnode->data->name);
		printf("学生的年龄:%d\n",pnode->data->age);
		printf("学生的数学成绩:%d\n",pnode->data->gmath);
		printf("学生的c语言:%d\n",pnode->data->glang);
		printf("学生的语文成绩:%d\n",pnode->data->gphil);
		printf("学生的总成绩:%d\n",pnode->data->gsum);
		printf("学生的班号:%s\n",pnode->data->classid);
		printf("\n");
		pnode = pnode->next;
	}
	printf("任意键加回车,返回主界面!\n");
	getchar();
	getchar();
	student_main_surface(phead);
}

/// @brief 学生的信息删除界面
/// @param phead 头节点
void delete_student_information(nmenu* phead)
{
	system("clear");
	int a;
	printf("==========================================\n");
	printf("*         学生的信息删除界面             *\n");
	printf("==========================================\n");
	printf("*   1.按学生的cid删除                     *\n");
	printf("------------------------------------------\n");
	printf("*   2.按学生的姓名删除                   *\n");
	printf("------------------------------------------\n");
    printf("*   3.按学生的年龄删除                   *\n");
	printf("------------------------------------------\n");
    printf("*   4.按学生的数学成绩删除                   *\n");
	printf("------------------------------------------\n");
    printf("*   5.按学生的c语言成绩删除                   *\n");
	printf("------------------------------------------\n");
    printf("*   6.按学生的语文成绩删除                   *\n");
	printf("------------------------------------------\n");
    printf("*   7.按学生的班号删除                   *\n");
	printf("------------------------------------------\n");
    printf("*   8.按学生的总分删除                   *\n");
	printf("------------------------------------------\n");
	printf("*   9.退出!                             *\n");
	printf("==========================================\n");
	printf("请输入数字来选择功能:");
	scanf("%d",&a);
	if(a==1)
	{
		delete_cid(phead);
	}
	/*else if(a==2)
	{
		delete_name(phead);	
	}
	else if(a==3)
	{
        delete_age(phead);  
	}
    else if(a==4)
	{
		delete_gmath(phead);	
	}
    else if(a==5)
	{
		delete_glang(phead);	
	}
    else if(a==6)
	{
		delete_gphil(phead);	
	}
    else if(a==7)
	{
		delete_gsum(phead);	
	}
    else if(a==8)
	{
		delete_classid(phead);	
	}*/
    else if(a==9)
	{
		student_main_surface(phead);
	}
	else
	{
        student_main_surface(phead);  //学生的主目录
	}
}

/// @brief 输入学生的cid删除学生的信息界面和打印删除后的所以学生信息
/// @param phead 头节点
void delete_cid(nmenu* phead)
{
	system("clear");
	printf("===================================================\n");
	printf("*          欢迎进入输入学生的cid删除学生的信息     *\n");
	printf("===================================================\n");
	delete_information(phead);
	nmenu* pnew = phead->next;
	while(pnew)
	{
		printf("\n");
		printf("学生的cid:%s\n",pnew->data->cid);
		printf("学生的姓名:%s\n",pnew->data->name);
		printf("学生的年龄:%d\n",pnew->data->age);
		printf("学生的数学成绩:%d\n",pnew->data->gmath);
		printf("学生的c语言:%d\n",pnew->data->glang);
		printf("学生的语文成绩:%d\n",pnew->data->gphil);
		printf("学生的总成绩:%d\n",pnew->data->gsum);
		printf("学生的班号:%s\n",pnew->data->classid);
		printf("\n");
		pnew = pnew->next;
	}
	printf("任意键输入加回车 回到上一个界面!\n");
	getchar();
	getchar();
	student_information_seek(phead);//学生的信息查找	
}

/// @brief 找到按cid删除的节点的信息
/// @param phead 头节点
void delete_information(nmenu* phead)
{
    nmenu* pnode=dfind_cid(phead);
	nmenu *temp = phead;
	while(temp->next != pnode)
	{
		temp = temp->next;
	}
	temp->next = pnode->next;
	free(pnode->data);
	free(pnode);
	pnode=NULL;
}

/// @brief 按cid查找当前节点
/// @param phead 头节点
/// @return 返回所需节点地址
nmenu* dfind_cid(nmenu* phead)
{
	char arr[16]={0};
   nmenu* pnode=phead->next;
   printf("请输入id:");
	scanf("%s",arr);
	while(pnode)
	{
		int i=strcmp(pnode->data->cid,arr);
		if(i==0)
		{
			return pnode;
		}
		pnode=pnode->next;
	}
	return NULL;
}

/// @brief 按年龄查找所需的数据节点
/// @param phead 头节点
/// @return 返回查找到的数据节点
nmenu* dfind_age(nmenu* phead)
{
	int i=0;
   nmenu* pnode=phead->next;
   printf("请输入age:");
	scanf("%d",&i);
	while(pnode)
	{
		if(i==pnode->data->age)
		{
			return pnode;
		}
		pnode=pnode->next;
	}
	return NULL;
}

/// @brief 学生信息修改界面
/// @param phead 头节点
void modify_student_information(nmenu* phead)
{
	system("clear");
	int a;
	printf("==========================================\n");
	printf("*         学生的信息修改界面             *\n");
	printf("==========================================\n");
	printf("*   1.按学生的cid修改                    *\n");
	printf("------------------------------------------\n");
	printf("*   2.按学生的姓名修改                  *\n");
	printf("------------------------------------------\n");
    printf("*   3.按学生的年龄修改                  *\n");
	printf("------------------------------------------\n");
    printf("*   4.按学生的数学成绩修改                   *\n");
	printf("------------------------------------------\n");
    printf("*   5.按学生的c语言成绩修改                  *\n");
	printf("------------------------------------------\n");
    printf("*   6.按学生的语文成绩修改                   *\n");
	printf("------------------------------------------\n");
    printf("*   7.按学生的班号修改                   *\n");
	printf("------------------------------------------\n");
    printf("*   8.按学生的总分修改                   *\n");
	printf("------------------------------------------\n");
	printf("*   9.退出!                             *\n");
	printf("==========================================\n");
	printf("请输入数字来选择功能:");
	scanf("%d",&a);
	if(a==1)
	{
		modify_cid(phead);
	}
	else if(a==3)
	{
        modify_age(phead);  
	}
	/*else if(a==2)
	{
		modify_name(phead);	
	}
	
    else if(a==4)
	{
		modify_gmath(phead);	
	}
    else if(a==5)
	{
		modify_glang(phead);	
	}
    else if(a==6)
	{
		modify_gphil(phead);	
	}
    else if(a==7)
	{
		modify_gsum(phead);	
	}
    else if(a==8)
	{
		modify_classid(phead);	
	}*/
    else if(a==9)
	{
		student_main_surface(phead);
	}
	else
	{
        student_main_surface(phead);  //学生的主目录
	}
}

/// @brief 输入学生的cid修改学生的信息界面
/// @param phead 头节点
void modify_cid(nmenu *phead)
{
	system("clear");
	printf("===================================================\n");
	printf("*          欢迎进入输入学生的cid修改学生的信息     *\n");
	printf("===================================================\n");
	modify_information(phead);
	printf("任意键输入加回车 回到上一个界面!\n");
	getchar();
	getchar();
	modify_student_information(phead);//学生的信息查找	
}

/// @brief 打印查找到的节点的数据
/// @param phead 头节点
void modify_information(nmenu* phead)
{
	nmenu* pnode=dfind_cid(phead);
	printf("请输入你要修改的cid");
	scanf("%s",pnode->data->cid);
	printf("\n");
	printf("学生的cid:%s\n",pnode->data->cid);
	printf("学生的姓名:%s\n",pnode->data->name);
	printf("学生的年龄:%d\n",pnode->data->age);
	printf("学生的数学成绩:%d\n",pnode->data->gmath);
	printf("学生的c语言:%d\n",pnode->data->glang);
	printf("学生的语文成绩:%d\n",pnode->data->gphil);
	printf("学生的总成绩:%d\n",pnode->data->gsum);
	printf("学生的班号:%s\n",pnode->data->classid);
}

/// @brief 输入学生的age修改学生的信息界面
/// @param phead 头节点
void modify_age(nmenu *phead)
{
	system("clear");
	printf("===================================================\n");
	printf("*          欢迎进入输入学生的age修改学生的信息     *\n");
	printf("===================================================\n");
	modify_information_age(phead);
	printf("任意键输入加回车 回到上一个界面!\n");
	getchar();
	getchar();
	modify_student_information(phead);//学生的信息查找	
}

/// @brief 打印按年龄查找到的节点的数据
/// @param phead 头节点
void modify_information_age(nmenu* phead)
{
	nmenu* pnode=dfind_age(phead);
	printf("请输入你要修改的age");
	scanf("%d",&pnode->data->age);
	printf("\n");
	printf("学生的cid:%s\n",pnode->data->cid);
	printf("学生的姓名:%s\n",pnode->data->name);
	printf("学生的年龄:%d\n",pnode->data->age);
	printf("学生的数学成绩:%d\n",pnode->data->gmath);
	printf("学生的c语言:%d\n",pnode->data->glang);
	printf("学生的语文成绩:%d\n",pnode->data->gphil);
	printf("学生的总成绩:%d\n",pnode->data->gsum);
	printf("学生的班号:%s\n",pnode->data->classid);
}

/// @brief 学生信息排序界面
/// @param phead 头节点
void sort_student_information(nmenu* phead)
{
	system("clear");
	int a;
	printf("==========================================\n");
	printf("*         学生的信息排序界面             *\n");
	printf("==========================================\n");
    printf("*   1.按学生的年龄排序                   *\n");
	printf("------------------------------------------\n");
    printf("*   2.按学生的数学成绩排序                   *\n");
	printf("------------------------------------------\n");
    printf("*   3.按学生的c语言成绩排序                   *\n");
	printf("------------------------------------------\n");
    printf("*   4.按学生的语文成绩排序                   *\n");
	printf("------------------------------------------\n");
    printf("*   5.按学生的总分排序                   *\n");
	printf("------------------------------------------\n");
	printf("*   6.退出!                             *\n");
	printf("==========================================\n");
	printf("请输入数字来选择功能:");
	scanf("%d",&a);
	if(a==1)
	{
		sortid(phead);
	}
	/*else if(a==2)
	{
		sort_gmath(phead); 
	}
	else if(a==3)
	{
        sort_glang(phead);  
	}
    else if(a==4)
	{
		sort_gphil(phead);	
	}
    else if(a==5)
	{
		sort_gsum(phead);	
	}*/
    else if(a==6)
	{
		student_main_surface(phead);	
	}
	else
	{
        student_main_surface(phead);  //学生的主目录
	}
}

/// @brief 查找有多少数据节点
/// @param phead 头节点
/// @param size 节点数
/// @return 返回节点个数
int size_data(nmenu* phead,int size)
{
	size=0;
	nmenu* pnode=phead->next;
	while (pnode)
	{
		size++;
		pnode=pnode->next;
	}
	return size;
}

/// @brief 按年龄排序函数
/// @param phead 头节点
void sortid(nmenu *phead)//按id排序
{
	system("clear");
	printf("===================================================\n");
	printf("*          欢迎进入输入学生的年龄排序学生的信息     *\n");
	printf("===================================================\n");
    if (phead == NULL || phead->next == phead || phead->next->next == phead)
    {
        return;
    }
    printf("111\n");
    stu_t ptemp = {0};
    nmenu *p = phead->next;
    nmenu *q = p->next;
    while (p )
    {
        q = p->next;
        while (q )
        {
            if (p->data->age > q->data->age)
            { 
                ptemp = *(p->data);
                *(p->data) = *(q->data);
                *(q->data) = ptemp;
            }
            q = q->next;
        }
        p = p->next;

    }
	nmenu* pnew=phead->next;
	while(pnew)
	{
		printf("\n");
		printf("学生的cid:%s\n",pnew->data->cid);
		printf("学生的姓名:%s\n",pnew->data->name);
		printf("学生的年龄:%d\n",pnew->data->age);
		printf("学生的数学成绩:%d\n",pnew->data->gmath);
		printf("学生的c语言:%d\n",pnew->data->glang);
		printf("学生的语文成绩:%d\n",pnew->data->gphil);
		printf("学生的总成绩:%d\n",pnew->data->gsum);
		printf("学生的班号:%s\n",pnew->data->classid);
		printf("\n");
		pnew = pnew->next;
	}
	printf("任意键输入加回车 回到上一个界面!\n");
	getchar();
	getchar();
	sort_student_information(phead);//学生的信息查找	
}

/// @brief 学生密码的设置
/// @param phead 头节点
void password_stu(nmenu* phead)
{
    char srr[20]={"654321"};
    char arr[20]={0};
    printf("请输入你的密码:");
    scanf("%s",arr);
    int res=strcmp(arr,srr);
    if(res==0)
    {
       stu_student_main_surface(phead); 
    }
    else
    {
        exit(0);
    }
}

/// @brief 学生系统主界面
/// @param phead 头节点
void stu_student_main_surface(nmenu* phead)
{
    system("clear");
    printf("\n");
    printf("********************************\n");
    printf("|                              |\n");
	printf("|      学生系统主界面            |\n"); 
	printf("===============================\n");
    printf("*      0.返回                   *\n"); 
	printf("|      1.查找本人学生信息         |\n");    
	printf("|      2.修改本人学生的信息       |\n");   
	printf("|      3.退出系统               |\n");  
	printf("|                              |\n");
	printf("********************************\n");
    printf("请输入一个数字选择功能:");
    int a;
	scanf("%d",&a);
	printf("\n");
	if(a>3||a<0)
	{
		printf("输入错误,不再要求之内!\n");
		printf("即将再次进入主界面!\n");
		sleep(1);
		student_main_surface(phead);
	}
	else
	{
		if(a==0)
        {
           topxt(phead);    
        }
		else if(a==1)
		{
			look_student_information(phead); 
		}
		else if(a==2)
		{
			age_modify_student_information(phead);	
		}
		else if(a==3)
		{
			printf("感谢您的使用,欢迎再次使用!再见!\n");
			sleep(1);
			return;
		}
 
	}
}

/// @brief 请输入id查找的信息
/// @param phead 头节点
void look_student_information(nmenu* phead)
{
    system("clear");
	printf("===================================================\n");
	printf("*          欢迎进入请输入id查找的信息                  *\n");
	printf("===================================================\n");
	input_student_input(phead);
	printf("任意键输入加回车 回到上一个界面!\n");
	getchar();
	getchar();
    stu_student_main_surface(phead);
}

/// @brief 修改需要修改的年龄信息
/// @param phead 头节点
void age_modify_student_information(nmenu* phead)
{
    system("clear");
	printf("===================================================\n");
	printf("*          欢迎进入输入学生的age修改学生的信息     *\n");
	printf("===================================================\n");
	modify_information_age(phead);
	printf("任意键输入加回车 回到上一个界面!\n");
	getchar();
	getchar();
	stu_student_main_surface(phead);

}
void topxt(nmenu* phead)
{
    int i=0;
    system("clear");
	printf("============================\n");
	printf("*          1.管理员系统      *\n");
	printf("===========================\n");
    printf("*          2.学生系统        *\n");
	printf("===========================\n");
    printf("请输入1进入学生管理系统或者输入2进入管理员系统\n");
    scanf("%d",&i);
	if(i==1)
    {
        password(phead);    
    }
    else if(i==2)
    {
        password_stu(phead);
    }
}

/*nmenu * readstudent()
{
   FILE* pf=fopen("sdjbhh.txt","rb+");
   nmenu* read_head =(nmenu*)malloc(sizeof(nmenu));
   nmenu* newnode =(nmenu*)malloc(sizeof(nmenu));
   read_head->next=NULL;
   if(pf)
   {
		fseek(pf,0,0);
		while (fread(newnode,sizeof(nmenu),1,pf))
		{
			nmenu* read=(nmenu*)malloc(sizeof(nmenu));
			strcpy(read->data->cid,newnode->data->cid);
			strcpy(read->data->name,newnode->data->name);
			read->data->age=newnode->data->age;
			strcpy(read->data->classid,newnode->data->classid);
			read->data->glang=newnode->data->glang;
			read->data->gmath=newnode->data->gmath;
			read->data->gphil=newnode->data->gphil;
			read->data->gsum=newnode->data->gsum;
			read->next=read_head->next;
			read_head->next=read;
		}
		fclose(pf);
   }
   free(newnode);
   return read_head;
}

void savestudata(nmenu* phead)
{
   FILE* pf=fopen("sdjbhh.txt","w+");
   if(pf)
   {
		nmenu* pmove=phead->next;
		while(pmove)
		{
			fwrite(pmove,sizeof(nmenu),1,pf);
			pmove=pmove->next;
		}
		fclose(pf);
   }
}*/

主函数部分:

这部分可以自行按照自己要求进行。

#include"nmenu.h"


int main()
{
    nmenu* phead = creat_head();
    topxt(phead);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_74889801/article/details/128584649