Bootstrap

C语言程序设计——学生管理系统

1.学生管理系统的基本功能

本系统为一个基于C语言而设计的学生管理系统,接下来是详细介绍:

1.本系统有三个等级菜单:主菜单,二级菜单,三级菜单

2.本系统的基本功能 主菜单功能:实现显示基本信息、基本信息管理、学生成绩管理、考试成绩统计(每个学生5门课程)、根据条件查询、打印结果。

第一个二级菜单:实现对文件内容中的学生信息显示,对于学生信息文件的后续追加输入、删除、修改;

第二个二级菜单:实现对学生成绩的和,求出学生各科成绩的总和,根据总分进行排名;

第三个二级菜单:实现对各科成绩求出相应的最高分、最低分、平均分;

第四个二级菜单:实现通过学号/姓名/名次来进行查找;

第五个二级菜单:实现对整体学生总的数据的打印。实现读取其他文本文件的内容并进行上述已说明的功能(第五个二级菜单功能较特殊,若要读取其他文件内容,需要将主菜单中创建一个txt文件的Studetfile函数给注释掉,然后将函数Display取消注释,然后将所有菜单中的文件路径(也就大概几个函数)改为要读取的文件路径即可对文件内容进行操作)。 3.本系统的代码文件为根据主菜单中的功能进行函数分装设计,相互之间不受太大影响,通过头文件将各个功能联系起来

2.使用前文件的介绍

1.头文件.h和具体实现文件.c的联系与使用妙处

1.将多个函数分装,便于后续代码的维护与修改

3c431837a619479eb4c1ad1163da5594.png

 

2.在.c文件中写好具体函数是如何实现的,.h文件中声明好在.c文件中写好的函数,可增加变量,仅需添加少量变量即可实现对系统功能的添加。

//Basemessage.h文件

7491827a924c4b699827000120166651.png

 

//Basemessage.c文件

ebe6ec48d3964debbff05b8a4a0dce1d.png

 

2.结构体,全局变量的定义

在Threefile.h文件中定义了结构体类型Student,并创建结构体数组stu[100];

全局变量:结构体数组stu[100]、Number(记录输入的人数)

typedef struct Student
{
	char ID[10];//学号
	char name[10];//姓名
	char sex[10];//性别
	int age;//年龄
	double gaoshu;//高数
	double daying;//大英
	double malie;//马列
	double shumo;//数模
	double jiwang;//计网
	double allgrade;//总分
	
}Student;

extern int Number;//全局变量,具体在Threefile.c文件中
extern Student stu[100];//全局变量,结构体数组,具体在Threefile.c文件中

3.文件信息的写入

在Threefile.c文件中创建函数Studentfile,创建文件并写入信息

#define _CRT_SECURE_NO_WARNINGS

#include "Display.h"
#include "Threefile.h"
#include "Testgraderank.h"
#include "Basemessage.h"
#include "Studentgrademanager.h"
#include "Find.h"

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

int Number = 0;//来存放有几个学生
Student stu[100] = {0}; //创建一个结构体数组来存放学生数据

void Studentfile()//学生信息文件的创建
{
	char str[80] = { 0 };
	char ch = 'y';//判断是否继续输入yes/no
	int i = 0;
	while (ch == 'y')
	{
		system("cls");
		printf("输入学号:");
		gets(stu[i].ID);
		printf("输入姓名:");
		gets(stu[i].name);
		printf("输入性别:");
		gets(stu[i].sex);
		printf("输入年龄:");
		gets(str); stu[i].age = atoi(str);
		printf("输入高数成绩:");
		gets(str); stu[i].gaoshu = atof(str);
		printf("输入大英成绩:");
		gets(str); stu[i].daying = atof(str);
		printf("输入马列成绩:");
		gets(str); stu[i].malie = atof(str);
		printf("输入数模成绩:");
		gets(str); stu[i].shumo = atof(str);
		printf("输入计网成绩:");
		gets(str); stu[i].jiwang = atof(str);
		do {
			printf("是否继续y/n? ");
			gets_s(str, sizeof(str)); ch = str[0];
		} while (!(ch == 'y' || ch == 'n'));
		stu[i].allgrade = stu[i].gaoshu + stu[i].daying + stu[i].malie + stu[i].shumo + stu[i].jiwang;
		i++;
		Number++; //输入的时候加了一遍
	}

	//Ranking();//根据总分排序

	FILE* fp1 = fopen("D:\\学生管理系统存放文件\\学生信息总表.txt", "w");//将结构体数组的内容存放在文本文件中
	if (fp1 == NULL)
	{
		printf("无法创建文件");
		exit(0);
	}
	fprintf(fp1, "学号\t姓名\t性别\t年龄\t高数\t大英\t马列\t数模\t计网\t总分\n");//第一行表头
	for (int j = 0; j < Number; j++)
	{
		fprintf(fp1, "%s\t%s\t%s\t%d\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", stu[j].ID, stu[j].name, stu[j].sex, stu[j].age, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].allgrade);
	}
	fclose(fp1);
}

3.菜单的介绍

1.一级菜单

即主菜单,主要使用使用switch——case来指向下一级菜单,主要由五个函数组成,五个函数再指向其下一级菜单

#define _CRT_SECURE_NO_WARNINGS

#include "Threefile.h"
#include "Testgraderank.h"
#include "Basemessage.h"
#include "Studentgrademanager.h"
#include "Find.h"
#include "Display.h"

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

int main(){

Studentfile();//创建txt文件

//Display();

	int i = 0;
	while (1)
	{
		//这里是主菜单
		system("cls");
		printf("学生管理系统\t\t\n");
		printf("____________________\t\t\n");
		printf("0.退出系统\t\t\n");
		printf("1.基本信息管理\t\t\n");
		printf("2.学生成绩管理\t\t\n");
		printf("3.考试成绩统计\t\t\n");
		printf("4.查询学生信息\t\t\n");
		printf("5.打印成绩报表\t\t\n");
		printf("____________________\t\t\n");
	loop:
		printf("请选择菜单功能:请输入(0--5)\t\t\n");
		scanf("%d", &i);
		
		if (i < 0 || i > 5)
		{
			printf("输入错误,重新输入\t\t\n");
			goto loop;
		}

			switch (i)
			{
			case 0:
				printf("退出系统……\t\t\n");
				exit(0);
			case 1:
				Basemessage();//这些是子菜单
				break;
			case 2:
				Studentgrademanager();
				break;
			case 3:
				Testgraderank();
				break;
			case 4:
				Find();
				break;
			case 5:
				Display();
				break;
			}

	}
	return 0;
}

2.二级菜单

1.第一个二级菜单:学生信息管理Basemessage

使用函数将菜单功能分为四部分,划出三级菜单,

分别为

1.显示学生信息Print

2.记录输入与追加Write

3.删除学生信息Delete

4.修改学生信息Change

#define _CRT_SECURE_NO_WARNINGS

#include "Display.h"
#include "Threefile.h"
#include "Testgraderank.h"
#include "Basemessage.h"
#include "Studentgrademanager.h"
#include "Find.h"

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

void Basemessage()
{
	int i = 0;
	while (1)
	{
		system("cls");
		printf("基本信息管理\t\t\n");
		printf("____________________\t\t\n");
		printf("0.退出系统\t\t\n");
		printf("1.显示学生信息\t\t\n");//二级子菜单
		printf("2.记录输入与追加\t\t\n");
		printf("3.删除学生记录\t\t\n");
		printf("4.修改学生记录\t\t\n");
		printf("____________________\t\t\n");
	loop:
		printf("请选择菜单功能:请输入(0--4)\t\t\n");
		scanf("%d", &i);
		if (i < 0 || i > 4)
		{
			printf("输入错误,重新输入:\t\t\n");
			goto loop;
		}
			switch (i)
			{
			case 0:
				printf("退出系统……\t\t\n");
				return;
			case 1:
				printf("进入Print……\t\t\n");
				
				Print();
				break;
			case 2:
				printf("进入Write……\t\t\n");
				Write();
				break;
			case 3:
				printf("进入Delete……\t\t\n");
				Delete();
				break;
			case 4:
				printf("进入Change……\t\t\n");
				Change(); 
				break;
			}
	}
	
}

2.第二个二级菜单:学生成绩管理Studentgrademanager

使用函数划出两个功能,成为三级菜单

1.统计学生各科的总分Addall

2.排序Ranking(根据学生的总分对结构体数组排序)

#define _CRT_SECURE_NO_WARNINGS

#include "Display.h"
#include "Threefile.h"
#include "Testgraderank.h"
#include "Basemessage.h"
#include "Studentgrademanager.h"
#include "Find.h"

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

void Studentgrademanager()
{
	while (1)
	{
		int i = 0;
		system("cls");
		printf("学生成绩管理\t\t\n");
		printf("____________________\t\t\n");
		printf("0.退出系统\t\t\n");
		printf("1.统计学生总分\t\t\n");
		printf("2.根据总分排名\t\t\n");
		printf("____________________\t\t\n");
	loop:
		printf("请选择菜单功能:请输入(0--2)\t\t\n");
		scanf("%d", &i);

		if (i < 0 || i > 2)
		{
			printf("输入错误\t\t\n");
			goto loop;
		}
	
			switch (i)
			{
			case 0:
				printf("退出系统……\t\t\n");
				return;
			case 1:
				Addall();
				break;
			case 2:
				Ranking(); 
				break;

			}
	}
	
}

3.第三个二级菜单:考试成绩统计Testgraderank

通过switch -case来指向三个功能

1.求课程最高分Topgrade();
2.求课程最低分Bottlegrade();
3.求课程平均分Averagegrade();

#define _CRT_SECURE_NO_WARNINGS
#include "Display.h"
#include "Threefile.h"
#include "Testgraderank.h"
#include "Basemessage.h"
#include "Studentgrademanager.h"
#include "Find.h"

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

double Testgraderank()
{
	while (1)
	{
		int i = 0;

		system("cls");
		printf("考试成绩统计\t\t\n");
		printf("____________________\t\t\n");
		printf("0.退出系统\t\t\n");
		printf("1.求课程最高分\t\t\n");
		printf("2.求课程最低分\t\t\n");
		printf("3.求课程平均分\t\t\n");
		printf("____________________\t\t\n");
		puts("");
	loop:
		printf("请选择菜单功能:请输入(0--3)\t\t\n");
		scanf("%d", &i);
		if (i < 0 || i > 3)
		{
			printf("输入错误,重新输入:\t\t\n");
			goto loop;
		}

		switch (i)
		{
		case 0:
			printf("退出系统……\t\t\n");
			return;
		case 1:
			Topgrade();
			break;
		case 2:
			Bottlegrade();
			break;
		case 3:
			Averagegrade();
			break;
		}
	}
}

4.第四个二级菜单:查找学生信息Find

根据相应的查找方法来查询学生的信息,

1.FindID通过学号查找学生信息

1.Findname通过名字查找学生信息

1.Findplace通过名次查找学生信息

可以后续在添加打印出的信息,增强代码的健壮性

#define _CRT_SECURE_NO_WARNINGS
#include "Display.h"
#include "Threefile.h"
#include "Testgraderank.h"
#include "Basemessage.h"
#include "Studentgrademanager.h"
#include "Find.h"

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

void Find()
{
	while (1)
	{
		int i = 0;

		system("cls");
		printf("查找\t\t\n");
		printf("____________________\t\t\n");
		printf("0.退出系统\t\t\n");
		printf("1.按学号查找\t\t\n");
		printf("2.按姓名查找\t\t\n");
		printf("3.按名次查找\t\t\n");
		printf("____________________\t\t\n");
		puts("");
	loop:
		printf("请选择菜单功能:请输入(0--3)\t\t\n");
		scanf("%d", &i);
		if (i < 0 || i > 3)
		{
			printf("输入错误,重新输入:\t\t\n");
			goto loop;
		}

		switch (i)
		{
		case 0:
			printf("退出系统……\t\t\n"); 
			return;
		case 1:
			FindID(); 
			system("pause");
			break;//按学号查找
		case 2:
			Findname();
			system("pause");
			break; //按姓名查找
		case 3:
			Findplace(); 
			system("pause");
			break;//按名次查找

		}

	}

}

5.第五个二级菜单:打印信息Display

Display用于读取文件的内容,并打印出文件的内容

#define _CRT_SECURE_NO_WARNINGS
#include "Display.h"
#include "Threefile.h"
#include "Testgraderank.h"
#include "Basemessage.h"
#include "Studentgrademanager.h"
#include "Find.h"

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

void Display()
{

    char arr[10][100] = { 0 };
    char ch;
    FILE* fp = fopen("D:\\学生管理系统存放文件\\学生信息总表.txt", "r");//读取其他的文件
    if (fp == NULL) {
        printf("无法打开文件\n");
        exit(1);
    }
    int n = 0;
    while ((ch = fgetc(fp)) != EOF)
	{
        arr[0][n++] = ch;
		if (ch == '\n') 
			break;//消去文件的第一行,即表头的学号、姓名、年龄……等中文字符
	}
    int flag = 0;
    if (Number == 0)//判断自己是否主动输入数据,若没有,则Number为0,若输入,则不为0;用于读入其他文件
    {
        flag = 1;
    }

    int j = 0;
    while (fscanf(fp, "%s\t%s\t%s\t%d\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n", stu[j].ID, stu[j].name, stu[j].sex, &stu[j].age, &stu[j].gaoshu, &stu[j].daying, &stu[j].malie, &stu[j].shumo, &stu[j].jiwang, &stu[j].allgrade) != EOF)
    {
       if (flag == 1)
       {
           ++Number; //若是自己没有主动输入数据而是通过读取其他文件内容,则每读入一个数据,Number++
       }
        j++;
    }
    
    printf("学号\t姓名\t性别\t年龄\t高数\t大英\t马列\t数模\t计网\t总分\t\t\n");

    //Ranking();
    for (int i = 0; i < j; i++)
    {
        printf("%s\t%s\t%s\t%d\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t\t\n", stu[i].ID, stu[i].name, stu[i].sex, stu[i].age, stu[i].gaoshu, stu[i].daying, stu[i].malie, stu[i].shumo, stu[i].jiwang, stu[i].allgrade);
    }

    system("pause");
}

3.三级菜单

1.第一个三级菜单

void Print()//打印学生基本信息
{
	system("cls");
	int flag = 1;
	char num[10] = { 0 };
	printf("输入要查询信息的学生学号:\t\t\n");
	scanf("%s", num);
	for (int i = 0;i<Number;i++) //你在读取的时候没有个Number联动  当然查不出来了呀
	{
		//printf("%s", PS[i].ID);
		if (strcmp(stu[i].ID, num) == 0)
		{
			printf("成功找到!\n");
			printf("学号:%s\t\n姓名:%s\t\n性别:%s\t\n年龄:%d\t\n高数:%lf\t\n大英:%lf\t\n马列:%lf\t\n数模:%lf\t\n计网:%lf\t\n总分:%f\t\t\n", stu[i].ID, stu[i].name, stu[i].sex, stu[i].age, stu[i].gaoshu, stu[i].daying, stu[i].malie, stu[i].shumo, stu[i].jiwang, stu[i].allgrade);
			flag = 0;
			break;

		}
	}
	if (flag) {
		printf("不好意思,未找到!\t\t\n");
	}
	system("pause");
}


void Write()//这个函数,对于后续学生信息的追加
{
	system("cls");
	int count = 0;
	printf("要输入多少个学生\t\t\n");
	scanf("%d", &count);//多少个学生
	getchar();
	system("cls");

	while (count > 0)
	{
		int i = 1 + Number;
		printf("请输入第%d位学生的信息:\t\t\n", i--);
		printf("学号:\n");
		scanf("%s",stu[i].ID);
		getchar();

		printf("姓名:\n");
		scanf("%s", stu[i].name);
		getchar();

		printf("性别:\n");
		scanf("%s",stu[i].sex);
		getchar();

		printf("年龄:\n");
		scanf("%d",&stu[i].age);
		getchar();

		printf("输入高数成绩:\n");
		scanf("%lf",&stu[i].gaoshu);
		getchar();

		printf("输入大英成绩:\n");
		scanf("%lf",&stu[i].daying);
		getchar();

		printf("输入马列成绩:\n");
		scanf("%lf",&stu[i].malie);
		getchar();

		printf("输入数模成绩:\n");
		scanf("%lf",&stu[i].shumo);
		getchar();

		printf("输入计网成绩:\n");
		scanf("%lf",&stu[i].jiwang);
		getchar();
		stu[i].allgrade = stu[i].gaoshu + stu[i].daying + stu[i].malie + stu[i].shumo + stu[i].jiwang;

		count--;
		Number++;
		i++;

		FILE* fp1 = fopen("D:\\学生管理系统存放文件\\学生信息总表.txt", "wt");
		if (fp1 == NULL)
		{
			printf("无法创建文件");
			exit(0);
		}
		fprintf(fp1, "学号\t姓名\t性别\t年龄\t高数\t大英\t马列\t数模\t计网\t总分\t\t\n");
		for (int j = 0; j < Number; j++)
		{
			fprintf(fp1, "%s\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t\t\n", stu[j].ID, stu[j].name, stu[j].sex, stu[j].age, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].allgrade);
		}
		fclose(fp1);

		printf("该生添加成功\t\t\n");
		system("pause");
		system("cls");
		
	}
	printf("\n");
	printf("全部添加成功\t\t\n");
	system("cls");

}


void Delete()//删除学生信息
{
	system("cls");
	int flag = 1;
	char id[10] = { 0 };
	while (flag)
	{
		int i = 0;
		printf("请输入要删除的学生的学号:\t\t\n");
		
		scanf("%s", id);
		getchar();
		for (i = 0;i< Number;i++)
		{
			if (strcmp(stu[i].ID, id) == 0)
			{
				for(int j = i;j < Number;j++)
				stu[j] = stu[j + 1];
				flag = 0;
				
			}

		}
		if (flag)
		{
			printf("未找到该生\t\t\n");
			system("pause");
		}
		Number--;

		FILE* fp1 = fopen("D:\\学生管理系统存放文件\\学生信息总表.txt", "wt");
		if (fp1 == NULL)
		{
			printf("无法创建文件");
			exit(0);
		}
		fprintf(fp1, "学号\t姓名\t性别\t年龄\t高数\t大英\t马列\t数模\t计网\t总分\t\t\n");
		for (int j = 0; j < Number; j++)
		{
			fprintf(fp1, "%s\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t\t\n", stu[j].ID, stu[j].name, stu[j].sex, stu[j].age, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].allgrade);
		}
		fclose(fp1);

		printf("该生删除成功\t\t\n");
		system("pause");
		system("cls");
		
	}

}


void Change()//更改学生信息
{
	system("cls");
	char num[10] = { 0 };
	int flag = 1;
	printf("输入要修改成绩学生的学号:\t\t\n");
	scanf("%s", num);
	getchar();
	for (int i = 0; i < Number;i++) {
		if (strcmp(stu[i].ID, num) == 0) {
			printf("成功找到该学生\t\t\n");
			printf("学号:%s\t\n姓名:%s\t\n性别:%s\t\n年龄:%d\t\n高数:%lf\t\n大英:%lf\t\n马列:%lf\t\n数模:%lf\t\n计网:%lf\t\n总分:%lf\n\n", stu[i].ID, stu[i].name, stu[i].sex,stu[i].age, stu[i].gaoshu, stu[i].daying, stu[i].malie, stu[i].shumo, stu[i].jiwang,stu[i].allgrade);
			flag = 0;
			printf("要修改的内容:\n");
			printf("学号:\n");
			scanf("%s", stu[i].ID);
			getchar();

			printf("姓名:\n");
			scanf("%s", stu[i].name);
			getchar();

			printf("性别:\n");
			scanf("%s", stu[i].sex);
			getchar();

			printf("年龄:\n");
			scanf("%d", &stu[i].age);
			getchar();

			printf("输入高数成绩:\n");
			scanf("%lf", &stu[i].gaoshu);
			getchar();

			printf("输入大英成绩:\n");
			scanf("%lf", &stu[i].daying);
			getchar();

			printf("输入马列成绩:\n");
			scanf("%lf", &stu[i].malie);
			getchar();

			printf("输入数模成绩:\n");
			scanf("%lf", &stu[i].shumo);
			getchar();

			printf("输入计网成绩:\n");
			scanf("%lf", &stu[i].jiwang);
			getchar();

			stu[i].allgrade = stu[i].gaoshu + stu[i].daying + stu[i].malie + stu[i].shumo + stu[i].jiwang;


			FILE* fp1 = fopen("D:\\学生管理系统存放文件\\学生信息总表.txt", "wt");
			if (fp1 == NULL)
			{
				printf("无法创建文件");
				exit(0);
			}
			fprintf(fp1, "学号\t姓名\t性别\t年龄\t高数\t大英\t马列\t数模\t计网\t总分\t\t\n");
			for (int j = 0; j < Number; j++)
			{
				fprintf(fp1, "%s\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t\t\n", stu[j].ID, stu[j].name, stu[j].sex, stu[j].age, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].allgrade);
			}
			fclose(fp1);

			printf("该生修改成功\t\t\n");
			system("pause");
			system("cls");

			printf("修改成功");
			system("pause");
		}
	}
	if (flag) {
		printf("输入信息有误,未查询到\t\t\n");
		system("pause");
	}

}

2.第二个三级菜单


 double Addall()//求学生各科成绩总和
{
	 float all = 0;
	 system("cls");
	 printf("输入学生学号:\t\t\n");
	 char num[10] = { 0 };//存储学号
	 int flag = 1;
	 scanf("%s", num);/*放学号作为参数*/
	 getchar();
	 for (int i = 0; i < Number;i++) {
		 if (strcmp(stu[i].ID, num) == 0) {
			 printf("成功找到!\t\t\n");
			 all = stu[i].gaoshu + stu[i].daying + stu[i].malie + stu[i].shumo + stu[i].jiwang ;
			 printf("总分:%f分\t\t\n", all);
			 flag = 0;
		 }
	 }
	 if (flag) 
		 printf("不好意思,未找到!\t\t\n");
	 system("pause");

	return all;
}


 void Ranking()//降序
 {
	 Student t;
	 int i = 0;
	 int k = 0;
	 int n = 0;
	 for (int j = 0; j < Number-1; j++)
	 {
		 for (k = 0; k <Number - 1 - j; k++)
		 {
			 stu[k].allgrade = stu[k].gaoshu + stu[k].daying + stu[k].malie + stu[k].shumo + stu[k].jiwang;//求总分
			 if (stu[k + 1].allgrade > stu[k].allgrade)
			 {
				 t = stu[k+1];
				 stu[k+1] = stu[k];
				 stu[k] = t;

			 }
		 }
	 }
	 printf("学号\t姓名\t性别\t年龄\t高数\t大英\t马列\t数模\t计网\t总分\t排名\t\t\n");
	 for (n = 0; n < Number; n++)
	 {
		 printf("%s\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t%d\t\t\n", stu[n].ID, stu[n].name, stu[n].sex, stu[n].age, stu[n].gaoshu, stu[n].gaoshu, stu[n].gaoshu, stu[n].gaoshu, stu[n].gaoshu, stu[n].allgrade,n+1);
	 }
	 system("pause");
 }

3.第三个三级菜单


double Topgrade()//求一门中的所有学生成绩的最高
{
	int i = 0;
	int j = 0;//来存放科目
	double max = 0;
	printf("选择科目:\t\t\n");
	printf("1.高数\t\t\n");
	printf("2.大英\t\t\n");
	printf("3.马列\t\t\n");
	printf("4.数模\t\t\n");
	printf("5.计网\t\t\n");
	scanf_s("%d", &j);
	switch (j)
	{
	case 1:
		for (i = 0; i < Number;i++)
		{
			if (stu[i].gaoshu > max)
				max = stu[i].gaoshu;
		}
		printf("高数最高分:%f", max);
		system("pause");
		break;
	case 2:
		for (i = 0; i < Number; i++)
		{
			if (stu[i].daying > max)
				max = stu[i].daying;
		}
		printf("大英最高分:%f", max);
		system("pause");
		break;
	case 3:
		for (i = 0; i < Number; i++)
		{
			if (stu[i].malie > max)
				max = stu[i].malie;
		}
		printf("马列最高分:%f", max);
		system("pause");
		break;
	case 4:
		for (i = 0; i < Number; i++)
		{
			if (stu[i].shumo > max)
				max = stu[i].shumo;
		}
		printf("数模最高分:%f", max);
		system("pause");
		break;
	case 5:
		for (i = 0; i < Number; i++)
		{
			if (stu[i].jiwang > max)
				max = stu[i].jiwang;
		}
		printf("计网最高分:%f", max);
		system("pause");
		break;
	
	}
	printf("\n");
	return max;
	
}


double Bottlegrade()//求一门科目的最低分
{

	int i = 0;
	int j = 0;//来存放科目
	double min = 1000;
	printf("选择科目:\t\t\n");
	printf("1.高数\t\t\n");
	printf("2.大英\t\t\n");
	printf("3.马列\t\t\n");
	printf("4.数模\t\t\n");
	printf("5.计网\t\t\n");
	scanf("%d", &j);
	switch (j)
	{
	case 1:
		for (i = 0; i < Number; i++)
		{
			if (stu[i].gaoshu < min)
				min = stu[i].gaoshu;
		}
		printf("高数最低分:%f", min);
		system("pause");
		break;
	case 2:
		for (i = 0; i < Number; i++)
		{
			if (stu[i].daying < min)
				min = stu[i].daying;
		}
		printf("大英最低分:%f", min);
		system("pause");
		break;
	case 3:
		for (i = 0; i < Number; i++)
		{
			if (stu[i].malie < min)
				min = stu[i].malie;
		}
		printf("马列最低分:%f", min);
		system("pause");
		break;
	case 4:
		for (i = 0; i < Number; i++)
		{
			if (stu[i].shumo < min)
				min = stu[i].shumo;
		}
		printf("数模最低分:%f", min);
		system("pause");
		break;
	case 5:
		for (i = 0; i < Number; i++)
		{
			if (stu[i].jiwang < min)
				min = stu[i].jiwang;
		}
		printf("计网最低分:%f", min);
		system("pause");
		break;

	}
	printf("\n");
	return min;
	system("pause");
}


double Averagegrade()//求一门科目的平均分
{
	int j = 0;
	int i = 0;
	double sum = 0;
	double average = 0;
	printf("选择科目:\t\t\n");
	printf("1.高数\t\t\n");
	printf("2.大英\t\t\n");
	printf("3.马列\t\t\n");
	printf("4.数模\t\t\n");
	printf("5.计网\t\t\n");
	scanf("%d", &j);
	switch (j)
	{
	case 1:
		for (i = 0; i < Number; i++)
		{
			sum += stu[i].gaoshu;
				
		}
		average = sum / i;
		printf("高数平均分:%f", average);
		system("pause");
		break;
	case 2:
		for (i = 0; i < Number; i++)
		{
			sum += stu[i].daying;

		}
		average = sum / i;
		printf("大英平均分:%f", average);
		system("pause");
		break;
	case 3:
		for (i = 0; i < Number; i++)
		{
			sum += stu[i].malie;
		}
		average = sum / i;
		printf("马列平均分:%f", average);
		system("pause");
		break;
	case 4:
		for (i = 0; i < Number; i++)
		{
			sum += stu[i].shumo;
		}
		average = sum / i;
		printf("数模平均分:%f", average);
		system("pause");
		break;
	case 5:
		for (i = 0; i < Number; i++)
		{
			sum += stu[i].jiwang;
		}
		average = sum / i;
		printf("计网平均分:%f", average);
		system("pause");
		break;
	}
	printf("\n");
	return average;
	system("pause");
}

4.第四个三级菜单

注:使用完函数Ranking(第二个三级菜单里面)之后才能使用用名次查询


void FindID()
{
	int i = 0;
	char id[10] = { 0 };//来存放输入的学号
	printf("请输入学号:\t\t\n");
	scanf("%s", id);
	for (i = 0; i < Number;i++)
	{
		if (strcmp(stu[i].ID, id) == 0)
		{
			printf("学号\t姓名\t性别\t年龄\t\t\n");
			printf("%s\t%s\t%s\t%d\t\t\n", stu[i].ID, stu[i].name, stu[i].sex, stu[i].age);
			return;
		}
		
	}
	printf("未找到该生\t\n");
}


void Findname()
{
	int i = 0;
	char name[10] = { 0 };//来存放名字
	printf("请输入名字:\t\t\n");
	scanf("%s", name);
	for (i = 0; i < Number; i++)
	{
		if (strcmp(stu[i].name, name) == 0)
		{
			printf("学号\t姓名\t性别\t年龄\t\t\n");
			printf("%s\t%s\t%s\t%d\t\t\n", stu[i].ID, stu[i].name, stu[i].sex, stu[i].age);
			return;

		}
	}
	printf("未找到该生\t\n");
}


void Findplace()
{
	int i = 0;
	int n = 0;//来存放名次
	printf("请输入名次:\t\t\n");
	scanf("%d", &n);
	n--;
		if (n >= 0 || n< Number)
			{
				printf("学号\t姓名\t性别\t年龄\t\t\n");
				printf("%s\t%s\t%s\t%d\t\t\n", stu[n].ID, stu[n].name, stu[n].sex, stu[n].age);
				return;
			}
		else
			printf("未找到该生");

}

4.完整代码 

见资源包

https://download.csdn.net/download/2302_80961600/89550258

 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;