C语言学生成绩管理系统流程图详解

本文将详细介绍使用C语言开发的学生成绩管理系统的流程图,包含录入、显示、增加、删除、修改、查找、排序等功能。

系统设计

该系统采用链表结构存储学生信息,每个结点包含学生姓名、学号、计算机成绩、数学成绩、英语成绩、总分和平均分等信息。

系统功能

  1. 录入学生信息: 输入学生姓名、学号、各科成绩,计算总分和平均分,并将其添加到链表中。
  2. 显示学生信息: 遍历链表,将所有学生的姓名、学号、各科成绩、总分和平均分显示在屏幕上。
  3. 增加学生信息: 在指定位置插入新的学生信息。
  4. 删除学生信息: 根据学号或姓名删除指定学生信息。
  5. 修改学生信息: 根据学号或姓名修改指定学生信息。
  6. 查找学生信息: 根据学号或姓名查找指定学生信息,并显示相关信息。
  7. 按总分排序: 对所有学生信息按总分降序排序,并显示排序后的结果。

流程图

学生成绩管理系统流程图.png

代码示例

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

struct Student          //声明学生结构体类型
{
	char Name[10];     //定义变量
	int Num;            //定义变量  学号
	float Computer;    //定义变量   计算机成绩
	float Math;         //定义变量   数学成绩
	float English;       //定义变量    英语成绩
	float Total;          //定义变量  总分
	float Ave;          //定义变量  平均分
};

tydef struct node     //结点
{
	struct Student st;   //数据域
	struct node *pnext;  //指针域
}node, *pnode;

//函数声明
pnode Input();                //录入学生信息函数声明
void Show(pnode phead);     //显示学生信息函数声明
void Add(pnode phead);      //增加学生信息函数声明
void Delete(pnode phead);    //删除学生信息函数声明
void Change(pnode phead);   //修改学生信息函数声明
void Search(pnode phead);    //查找学生信息函数声明
void Sort(pnode phead);      //总分排序 函数声明

int main()
{
	
	
	system('color F0');  //白底黑字
	printf('\t\t\t|           《C语言课程设计》           |
');  //进入时界面
	printf('\t\t\t|            学生成绩管理系统             |
');
	printf('\t\t\t|            学院:国防教育学院           |
');
	printf('\t\t\t|            专业:电气自动化             |
');
	printf('\t\t\t|            班级:2240804               |
');
	printf('\t\t\t|            姓名:胡霄宇                 |
');
	printf('\t\t\t|            学号:2022320092           |
');
    int Item;        //保存操作命令
	pnode phead=NULL;    //定义一个指针
	while(1)
	{
		
	printf('\n\n');
	printf('\t\t\t============================================
');//操作界面
	printf('\t\t\t|                                          |
');
	printf('\t\t\t|          欢迎来到学生成绩管理系统        |
');
	printf('\t\t\t|                                          |
');
	printf('\t\t\t|==========================================|
');
	printf('\t\t\t|            请选择要操作的命令            |
');
	printf('\t\t\t                                           
');
	printf('\t\t\t              1.录入学生信息              
');
	printf('\t\t\t              2.显示学生信息              
');
	printf('\t\t\t              3.增加学生信息              
');
	printf('\t\t\t              4.删除学生信息              
');
	printf('\t\t\t              5.修改学生信息              
');
	printf('\t\t\t              6.查找学生信息              
');
	printf('\t\t\t              7.按总分排序                
');
	printf('\t\t\t              8.退出                      
');
	
	
		printf('请选择操作命令:');
		scanf('%d',&Item); //赋值
		system('cls');     //清屏
		switch(Item)
		{
			case 1:  //录入学生信息
			{
				phead=Input();  //引用函数
			}
			break;
			case 2:  //显示学生信息
			{
				Show(phead);  //引用函数
			}
			break;
			case 3:  //增加学生信息
			{
				Add(phead);  //引用函数
			}
			break;
			case 4:  //删除学生信息
			{
				Delete(phead);  //引用函数
			}
			break;
			case 5:  //修改学生信息
			{
				Change(phead);  //引用函数
			}
			break;
			case 6:  //查找学生信息
			{
				Search(phead);  //引用函数
			}
			break;
			case 7:  //总分排序
			{
				Sort(phead);
				Show(phead);
			}
			case 8:
            {
             printf('程序已退出');
             return 0;
             }
			
			default: printf('输入无效请重新输入'); break;
		    
			
		}
	}
	system('pause');
}
//录入学生信息函数编写
pnode Input()
{
	int num;//学生的人数
	node stu;//学生结构
	pnode phead=(pnode)malloc(sizeof(node));//定义一个头结点并且为头结点分配内存
	//判断内存是否为空
	if(NULL==phead)
	{
		printf('内存分配失败,程序终止!
');
		exit(-1);
	}
	pnode ptail=phead;//定义一个指向头结点的指针
	ptail->pnext=NULL;//清空指针域
	printf('请输入学生的人数:');
	scanf('%d',&num);
	int i;
	for(i=0;i<num;i++)
	{
		printf('请输入第%d个学生的姓名:',i+1);
		scanf('%s',stu.st.Name);
		printf('请输入第%d个学生的学号:',i+1);
		scanf('%d',&stu.st.Num);
		printf('请输入第%d个学生的计算机成绩:',i+1);
		scanf('%f',&stu.st.Computer);
		printf('请输入第%d个学生的高数成绩:',i+1);
		scanf('%f',&stu.st.Math);
		printf('请输入第%d个学生的大英成绩:',i+1);
		scanf('%f',&stu.st.English);
		stu.st.Total=stu.st.Computer+stu.st.Math+stu.st.English;//计算总分
		stu.st.Ave=stu.st.Total/3.0f;//计算平均分
		pnode pnew=(pnode)malloc(sizeof(node));//为新节点分配内存
		//判断内存是否为空
		if(NULL==pnew)
		{
			printf('内存分配失败,程序终止!
');
			exit(-1);
		}
		pnew->st=stu.st;  //初始化结点的数据域
		ptail->pnext=pnew;//将新结点挂到老结点后
		pnew->pnext=NULL; //清空新结点的指针域
		ptail=pnew;       //将ptail移到新结点上
	}
	return phead;
}

void Show(pnode phead)      //显示学生信息函数编写
{

	pnode p=phead->pnext;   	//定义一个指针用于遍历学生信息
	printf('姓名  学号 计算机 高数  大英 总分 平均分
');
	while(NULL!=p)
	{
		printf('%s    %d    %g    %g    %g   %g    %g
',p->st.Name,p->st.Num,p->st.Computer,p->st.Math,p->st.English,p->st.Total,p->st.Ave);
		p=p->pnext;
	}
}

void Add(pnode phead)  //增加学生信息函数编写
{
	pnode p=phead;
	int i=0;
	struct Student stu;   //学生结构体 
	int loc;              //插入结点的位置
	printf('请输入插入学生的位置:');
	scanf('%d',&loc);
	while(NULL!=p&&i<loc-1)
	{
		p=p->pnext;
		i++;
	}
	if(NULL==p||i>loc)
	{
		printf('插入结点的位置不存在!
');
		return;
	}
	printf('你将在第%d个学生后面插入一个学生
',loc-1);
	printf('请输入第%d个学生的姓名:',loc);
	scanf('%s',stu.Name);
	printf('请输入第%d个学生的学号:',loc);
	scanf('%d',&stu.Num);
	printf('请输入第%d个学生的计算机成绩:',loc);
	scanf('%f',&stu.Computer);
	printf('请输入第%d个学生的高数成绩:',loc);
	scanf('%f',&stu.Math);
	printf('请输入第%d个学生的大英成绩:',loc);
	scanf('%f',&stu.English);
	stu.Total=stu.Computer+stu.Math+stu.English;//计算总分
	stu.Ave=stu.Total/3.0f;//计算平均分
	pnode pnew=(pnode)malloc(sizeof(node));
	if(NULL==pnew)
	{
		printf('动态内存分配失败,程序终止!
');
		exit(-1);
	}
	pnew->st=stu;
	pnode q=p->pnext;
	p->pnext=pnew;
	pnew->pnext=q;
}

void Delete(pnode pHead)     //删除学生信息函数编写
{
	pnode p = pHead;
	int i = 0;
	int loc;
	printf('请输入你需要删除的学生的编号:');
	scanf('%d',&loc);
	while(NULL!=p->pnext&&i<loc-1)
	{
		p=p->pnext;
		i++;
	}
	if(NULL==p->pnext||i>loc-1)
	{
		printf('没找到需要删除的学生的编号!
');
		return;
	}
	pnode q=p->pnext;
	p->pnext=q->pnext;
	free(q);
	q==NULL;
	printf('你已经成功删除了第%d个学生的信息!
',loc);
}

      void Change(pnode phead)  //修改学生信息函数编写

{
	char Name[10];
	printf('请输入你需要修改的学生的姓名:');
	scanf('%s',&Name);
	pnode p=phead->pnext;//定义一个指针用于遍历学生信息
	while(NULL!=p)
	{
		if(0==strcmp(Name,p->st.Name))
		{
			printf(' 姓名  学号 计算机 高数  大英 总分 平均分
');
			printf(' 修改前的学生信息!
');
			printf('%s    %d    %g    %g    %g   %g    %g
',p->st.Name,p->st.Num,p->st.Computer,p->st.Math,p->st.English,p->st.Total,p->st.Ave);
			system('pause');
			system('cls');//清屏
			printf(' 请输入新的学生姓名:');
			scanf('%s',p->st.Name);
			printf(' 请输入新的学生学号:');
			scanf('%d',&p->st.Num);
			printf(' 请输入新的学生的计算机成绩:');
			scanf('%f',&p->st.Computer);
			printf(' 请输入新的学生的高数成绩:');
			scanf('%f',&p->st.Math);
			printf(' 请输入新的学生的大英成绩:');
			scanf('%f',&p->st.English);
			p->st.Total=p->st.Computer+p->st.Math+p->st.English;//计算总分
			p->st.Ave=p->st.Total/3.0f;//计算平均分
 			break;
		}
		p=p->pnext;
	}
}
//查找学生信息函数编写
void Search(pnode pHead)
{
	char Name[10];
	printf('请输入你需要查找的学生的姓名:');
	scanf('%s',Name);
	pnode p=pHead->pnext;
	printf('姓名  学号 计算机 高数  大英 总分 平均分
'); 
	while(NULL!=p)
	{
		if(0==strcmp(Name,p->st.Name))
		{
			printf('%s    %d    %g    %g    %g   %g    %g
',p->st.Name,p->st.Num,p->st.Computer,p->st.Math,p->st.English,p->st.Total,p->st.Ave);
		}
 		p=p->pnext;
	}
}
//总分排序函数编写//总分排序函数编写
void Sort(pnode phead)
{
	pnode p, q;//定义两个指针
	node temp;
	for(p=phead->pnext;NULL!=p;p=p->pnext)
	{
		for(q=p->pnext;NULL!=q;q=q->pnext)
  		{
			if(p->st.Total<q->st.Total)//当前一个学生的总分小于后一个学生的总分时
   			{
				temp.st=p->st;    //交换学生的位置
				p->st=q->st;
				q->st=temp.st;
			}
		}
	}
}

总结

本文详细介绍了使用C语言开发的学生成绩管理系统的流程图,包含录入、显示、增加、删除、修改、查找、排序等功能,并提供代码示例。希望本文能帮助你更好地理解和学习C语言编程,以及数据结构和算法的应用。

请注意,本文代码仅供参考,具体实现细节可能需要根据实际需求进行调整。


原文地址: https://www.cveoy.top/t/topic/osny 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录