学生成绩管理系统

解析:

最近帮朋友做的一个相当于课程设计的学生成绩管理系统,她们要求是用c语言写,对于一个用惯c++的孩子来说真是感觉写起来的各种限制真心感觉到无语,不说了直接上代码

#include "student.h"


void main()
{
	char ch='0';
	int index=0;
	char id[ID_SIZE];
	student students;
	student phead;

	FILE *output=fopen("output.txt","w+");
	FILE *input=fopen("input.txt","r");	
	
	if(input==NULL)
	{
		printf("打开失败input\n");
		exit(1);
	}
	if(input==NULL)
	{
		printf("打开失败output\n");
		exit(1);
	}
	phead.next=NULL;

	InitStudent(&students);

	
	while(1)
	{
		ShowList();
		printf("请选择:");
		ch=getchar();
		switch(ch)
		{
		case '1':
			Student_Insert(&students);
			break;
		case '2':
			Student_Display(&students);
			break;
		case '3':
			{
				printf("请输入需要查找多少个学生:");
				scanf("%d",&index);
				Student_DisplaySingle(&students,index);
			}
			break;
		case '4':
			{
				printf("请输入需要删除的学号:");
				scanf("%s",id);
				Student_Delete(&students,id);
			}
			break;
		case '5':
			Student_Modify(&students);
			break;
		case '6':
			{
				printf("请输入需要查找学生姓名:");
				scanf("%s",id);
				Student_Select(&students,id);
			}
			break;
		case '7':
			Student_SortByAverage(&students,&phead);
			break;
		case '8':
			{
				IO_ReadInfo(&students,output);
				fclose(output);
			}
			break;
		case '9':
			{
				IO_WriteInfo(&students,output);
				fclose(output);
			}
			break;
		case '0':
			{
				printf("欢迎使用学生管理成绩系统\n");
				exit(1);
			}
		default:
			break;
		}
		getchar();
	}
}


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <string.h>
#define ID_SIZE 128
#define NAME_SIZE 128
#define SIZE 125


struct student
{
	char Id[ID_SIZE];  //学生学号
	char Name[NAME_SIZE]; //学生姓名
	float Math;   //数学
	float English; //英语
	float Chinese;  //语文
	float TotalScore; //总分
	float AverageScore; //平均分
	int PassStudent;  //及格人数
	struct student *next;
};
typedef struct student student;
static float PassRate=0.0;   //及格率

//初始化学生信息
void InitStudent(student *head)
{
	strcpy(head->Id,"");
	strcpy(head->Name,"");
	head->Chinese=0.0;
	head->English=0.0;
	head->Math=0.0;
	head->PassStudent=0;
	head->TotalScore=0;
	head->next=NULL;
}

//插入学生成绩
void Student_Insert(student *head)
{
	int flag=0;
	student *cur=head;
	student *tmp=(student *)malloc(sizeof(student));
	tmp->next=NULL;
	assert(tmp !=NULL);

	printf("***开始录入学生信息***\n");
	printf("请输入学号:");
	scanf("%s",tmp->Id);
	printf("请输入姓名:");
	scanf("%s",tmp->Name);
	printf("请输入数学成绩:");
	scanf("%f",&tmp->Math);
	printf("请输入英语成绩:");
	scanf("%f",&tmp->English);
	printf("请输入语文成绩:");
	scanf("%f",&tmp->Chinese);
	tmp->TotalScore=tmp->Chinese+tmp->English+tmp->Math;
	tmp->AverageScore=tmp->TotalScore/3;

	tmp->PassStudent=0;
	if(tmp->Chinese >=60)
		tmp->PassStudent++;
	if(tmp->English >=60)
		tmp->PassStudent++;
	if(tmp->Math >=60)
		tmp->PassStudent++;

	if(tmp->PassStudent==3)
		flag++;
	tmp->AverageScore=tmp->TotalScore/3;

	printf("学生及格人数:%d\n",flag);
	
	while(cur->next !=NULL)
		cur=cur->next;
	cur->next=tmp;
}
/*删除学生信息*/
void Student_Delete(student *head,char *id)
{
	student *del=NULL;
	student *cur=head;
	while(cur->next !=NULL)
	{
		if(strcmp(cur->next->Id,id)==0)
		{
			del=cur->next;
			cur->next=del->next;
			free(del);
			printf("删除成功\n");
			return;
		}
		cur=cur->next;
	}
	printf("删除失败\n");
}
/*修改学生信息*/
void Student_Modify(student *head)
{
	char number[ID_SIZE];
	int flag=0;
	student *cur=head->next;
	assert(cur !=NULL);
	printf("请输入学生学号:");
	scanf("%s",number);
	printf("开始查找\n");
	while(cur !=NULL)
	{
		if(strcmp(cur->Id,number)==0)
		{
			printf("请输入准备修改的语文成绩:");
			scanf("%f",&cur->Chinese);
			printf("请输入准备修改的数学成绩:");
			scanf("%f",&cur->Math);
			printf("请输入准备修改的英语成绩:");
			scanf("%f",&cur->English);
			flag=1;
			break;
		}
		cur->next;
	}
	if(flag)
		printf("修改成功\n");
	else
		printf("修改失败\n");
}
/*按姓名查询*/
void Student_Select(student *head,char *name)
{
	student *cur=head->next;
	while(cur!=NULL)
	{
		if(strcmp(cur->Name,name)==0)
		{
			printf("存在这个学生\n");
			return;
		}
		cur=cur->next;
	}
	printf("按姓名查找失败\n");
}
/*显示单条学生记录*/
void Student_DisplaySingle(student *head,int index)
{
	int count=1;
	student *cur=head->next;
	while(count <index && cur !=NULL)
	{
		cur=cur->next;
		count++;
	}
	if(count >index)
		printf("没有这个学生\n");
	else
	{
		printf("%s\t%s\t%.3f\t%.3f\t%.3f\t",cur->Id,cur->Name,cur->Chinese,cur->Math,cur->English);
		printf("%.3f\t%.3f\n",cur->AverageScore,cur->TotalScore);
	}	
}


//显示所有学生成绩
void Student_Display(student *head)
{
	int count=0;
	int number=0;
	student *cur=head->next;
	printf("学号\t姓名\t语文\t数学\t英语\t平均分\t总分\n");
	while(cur !=NULL)
	{
		printf("%s\t%s\t%.3f\t%.3f\t%.3f\t",cur->Id,cur->Name,cur->Chinese,cur->Math,cur->English);
		printf("%.3f\t%.3f\n",cur->AverageScore,cur->TotalScore);
		if(cur->Chinese >=60 && cur->English>=60 && cur->Math>=60)
			count++;
		cur=cur->next;
		number++;
	}
	PassRate=(float)count/number*100;
	printf("及格率:%.1f%%\n",PassRate);
}

/*按平均值排序*/
void Student_SortByAverage(student *head,student *phead)
{
	student *pcur=NULL;
	student *tmp=NULL;
	student *ptmp=NULL;

	student *cur=head->next;

	while(cur !=NULL)
	{
		pcur=cur;
		while(pcur !=NULL && pcur->AverageScore ==INT_MAX)
				pcur=pcur->next;
		if(pcur==NULL)
			break;
		tmp=pcur;
		while(pcur !=NULL)
		{	
			if(pcur->AverageScore > tmp->AverageScore && pcur->AverageScore !=INT_MAX)
			{
				tmp=pcur;
			}
			pcur=pcur->next;
		}

		if(tmp->AverageScore !=INT_MAX)
		{
			ptmp=(student *)malloc(sizeof(student));
			assert(ptmp !=NULL);

			strcpy(ptmp->Id,tmp->Id);
			strcpy(ptmp->Name,tmp->Name);

			ptmp->Chinese=tmp->Chinese;
			ptmp->English=tmp->English;
			ptmp->Math=tmp->Math;

			ptmp->AverageScore=tmp->AverageScore;
			ptmp->PassStudent=tmp->PassStudent;
			ptmp->TotalScore=tmp->TotalScore;

			ptmp->next=phead->next;
			phead->next=ptmp;

			tmp->AverageScore=INT_MAX;
		}
	}
	Student_Display(phead);
}

/*将学生信息从文件读出*/
void IO_ReadInfo(student *head,FILE *path)
{
	student *cur=head->next;
	while(cur !=NULL)
	{
		if(fread(cur,sizeof(student),1,path) < 0)
		{
			printf("fread failed\n");
			break;
		}
		cur=cur->next;
	}
	printf("读入成功\n");
}
/*将学生信息写入文件*/
void IO_WriteInfo(student *head,FILE *path)
{
	student *cur=head->next;
	while(cur !=NULL)
	{
		fprintf(path,"%s %s %f %f %f %f %f %d %s",\
			cur->Id,cur->Name,cur->Math,cur->English,cur->Chinese,\
			cur->TotalScore,cur->AverageScore,cur->PassStudent,"\n");
		cur=cur->next;
	}
	printf("写入数据成功\n");
}

//显示列表
void ShowList()
{
	printf("**********************************************\n");
	printf("**【1】插入学生成绩 【2】显示全部学生信息   **\n");
	printf("**【3】显示单个学生 【4】删除学生信息       **\n");
	printf("**【5】修改学生信息 【6】按姓名查询         **\n");
	printf("**【7】按平均值排序 【8】从文件读出学生信息 **\n");
	printf("**【9】写入文件     【0】退出学生管理系统   **\n");
	printf("**********************************************\n");

}


学生成绩管理系统是一个学校不可缺少的重要部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该为用户提供充足的信息和快捷的查询手段。当前成教学院没有一个完善的成绩信息管理平台,计算机使用主要基于Microsoft Office,不能发挥有效的作用。而且随着我国教育改革的不断深入以及自学教育的不断扩招,参加考试的人越来越多,考试科目的多样化,使得成教学院对自学考试成绩的管理越趋繁琐、复杂,工作业务繁杂,工作量大,这种传统的学生管理模式已经暴露出种种弊端:难以统一调配和处理,效率极低,缺乏科学性以及合理性。随着计算机应用的普及与深入,利用计算机能够对所有自学考试成绩进行统一管理,并进行分析,大大减少教学秘书的工作量,提高工作效率,为教学办公带来了极大的方便。通过操作手册,使用者可以了解本软件的基本工作原理及使用说明。操作人员只需输入一些简单的汉字、数字,就可以存储、查找、修改、打印学生成绩信息等。本系统开发的总体任务是实现学生成绩管理的系统化、规范化、自动化、达到提高学生成绩管理效率的目的,本系统本着实用性、通用、开放和安全的原则,使数据库开发软件开发制作,实现了学生信息管理、课程信息管理、学生成绩管理、成绩查询等功能。该设计方法易于推广至其它信息化管理系统的设计,充分利用计算机作为辅助工具,实现学生考试成绩从传统的手工管理到计算机管理,对提高管理效率和节约大量的人力、物力有一定的推动作用。本系统一切从实际出发,充分考虑了成绩的内部管理、信息交流等方面的复杂需求,实现成绩的有效管理,真正为学生成绩管理提供一个电子平台。 因此为了充分利用成教学院现有的计算机硬件资源,做好 学生成绩管理工作,提高办事效率,实现全面的、相对集中的办公自动化,开发本系统就成了当务之急,其目的主要为了彻底改变这种繁杂的管理模式,实现全面的、相对集中的、智能化的信息综合管理,为成教学院的教学管理工作带来方便。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值