基于C语言 学生成绩管理系统 分类: C课程设计 2...

学生成绩管理系统
在一个班级学生成绩管理系统中,希望处理每个学生的学习情况信息,其中包括学生的学号、姓名、各科名称和成绩等
并能使管理人员通过界面完成对学生信息的录入及对学生信息的录入及对数据的查找、浏览、插入、排序、保存。
要求:
1、提供用户界面
2、每一条记录包括一个学生的学号、姓名、三门课成绩、平均成绩
3、输入功能:可以一次完成若干条记录的输入
4、显示功能:完成全部学生记录的显示
5、查找功能:完成按姓名查找学生记录,并显示
6、排序功能:按学生平均成绩进行排序
7、插入功能:按平均成绩高低插入一条学生记录
8、将学生记录存在文件score中
需要的知识点:
数组,结构体,指针,文件,动态分配内存

 

——————————————————————————代码——————————————————————————

#include 
#include 
#include 

void menu();
void select();
void input();
int line_number(FILE *a);  // 统计文件行数
void output_all();  // 输出全部数据
void search();
void sort();
void write_file(struct student *p,int n); //重新将数据写入文件
struct student import();
void insert();

int flag1 = 1;

struct student
{
	int sutdentID;
	char name[20];
	int ChineseScore;
	int MathScore;  
	int EnglishScore;
	float AVScroe;  //平均成绩
};

int main()
{
	printf("***********学生成绩管理系统*******************\n");
	while(flag1)
	{
	select();
	}
	return 0;
}

void menu()
{
	printf("**********************************************\n");
	printf("**************** MENU ************************\n");
	printf("*    1.输入       2.显示全部学生成绩         *\n");
	printf("*    3.查找       4.排序                     *\n");
	printf("*    5.插入       0.退出                     *\n");
	printf("*                                            *\n");
	printf("**********************************************\n");

}

void select()
{
	int CH;
	menu();
	printf("请输入你的选择:");
	scanf("%d",&CH);
	while(CH<0 || CH >5)    //判断输入是否正确
	{
		printf("__________________________________________\n");
		printf("输入错误,请重新选择\n");
		menu();
		scanf("%d",&CH);
	}
	switch (CH)
	{
	case 1: // 输入
		input();
		break;
	case 2:  // 显示全部学生成绩
		output_all();
		break;
	case 3:  //查找
		search();
		break;
	case 4:   // 排序
		sort();
		break;
	case 5:   // 插入
		insert();
		break;
	case 0:  //退出
		flag1 = 0;
		break;
	default:
		break;
	}
}

struct student import()
{
	struct student a;
	printf("请输入学号:");
	scanf("%d",&a.sutdentID);
	printf("姓名:");
	scanf("%s",a.name);
	printf("语文成绩:");
	scanf("%d",&a.ChineseScore);
	printf("数学成绩:");
	scanf("%d",&a.MathScore);
	printf("英语成绩:");
	scanf("%d",&a.EnglishScore);
	a.AVScroe = ((float)a.ChineseScore + (float)a.EnglishScore + (float)a.MathScore) / 3; //计算平均成绩
	printf("您输入的学生数据为:\n");
	printf("ID\tname\tChinese\tMath\tEnglish\tAVE\n");
	printf("%d\t%s\t%d\t%d\t%d\t%.2f\n",a.sutdentID,a.name,a.ChineseScore,a.MathScore,a.EnglishScore,a.AVScroe);
	return a;
}

void input()
{
	FILE *fp;
	struct student a;
	int flag = 1;
	int f;
	if((fp = fopen("score.txt","a+")) == NULL)
	{
			printf("error");
	}
	while(flag)
	{
		a = import();
		printf("确认请输入1,修改请输入0:");
		scanf("%d",&f);
		while(f!=1 && f!= 0)
		{
			printf("输入错误,请重新输入");
			scanf("%d",&f);
		}
		if(f == 1)
			flag = 0;
		printf("\n");
	}
	fprintf(fp,"%d\t%s\t%d\t%d\t%d\t%.2f\n",a.sutdentID,a.name,a.ChineseScore,a.MathScore,a.EnglishScore,a.AVScroe);
	fclose(fp);
}

int line_number(FILE *a)  // 统计文件行数
{
	int n;
	char ch;
	n = 0;
	while((ch = fgetc(a)) != EOF)
	{
		if(ch == '\n')
			n ++;
	}
	rewind(a);   //重新定位文件指向文件开头
	return n;
}

void output_all()  // 输出全部数据
{
	FILE *fp;
	int n;
	int i;
	struct student *p;
	if((fp = fopen("score.txt","r")) == NULL)   //open the file
	{
		printf("打开文件失败\n");
		exit(0);
	}
	n = line_number(fp);  //检测文件行数
	printf("\n*******共计%d名学生***********\n",n);
	p = (struct student *)malloc(n *(sizeof(struct student)));
	if(p == NULL)
		printf("内存分配失败\n");
	printf("ID\tname\tChinese\tMath\tEnglish\tAve\n");
	for(i=0;ip[i+1].AVScroe)
			{
				temp = p[i];
				p[i] = p[i+1];
				p[i+1] = temp;
			}
		}
	printf("ID\tname\tChinese\tMath\tEnglish\tAve\n");
	for(i=0;ip[i+1].AVScroe)
			{
				temp = p[i];
				p[i] = p[i+1];
				p[i+1] = temp;
			}
		}
	printf("确认?(是:1,否:2):");
	scanf("%d",&i);
	while(i!=1 && i!= 2)
	{
		printf("输入错误,请重新输入:");
		scanf("%d",&i);
	}
	if(i == 1)
		write_file(p,n+1);
	free(p);
}


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/bingfeng13/p/4669005.html

你可能感兴趣的:(基于C语言 学生成绩管理系统 分类: C课程设计 2...)