学牲管理系统

学牲管理系统

刚学完c语言,写一个学生管理系统来练练手。

1. 录人每个学生的学号、姓名和各科考试成绩;

#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"

int enter(int n)
{
	label:
	for (int i = stunumber; i < stunumber+n;i++)
	{
		printf("请输入姓名:");
		getchar();
		gets(stu[i].name );
		printf("请输入学号:");
		gets(stu[i].Sno);
		printf("请输入各科成绩:(按照语数英理化生的顺序)");
		for (int j = 0; j < 6; j++)
		{
			scanf("%d", &stu[i].grade[j]);
		}
		printf("叮咚,学牲++\n\n");
	}
	printf("录入完毕\n");
	stunumber += n;
	printf("如果要继续录入请按1,录入完毕请按0\n");
	int flag;
	scanf("%d", &flag);
	if (flag) {
		printf("真来是吧(恼),这次多少个:");
		int t;
		scanf("%d", &t);
		n = t;
		goto label;
	}
	return stunumber;
	system("pause");
}

2. 计算每门课程,每个学生的总分和平均分,按学号,姓名查询学生排名及其考试成绩;

#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"

void search()
{
	int number;
	int isprime = 0;
	printf("*****************************************************\n");
	printf("**-----------------按名字查询请按1-----------------**\n");
	printf("*****************************************************\n");
	printf("**-----------------按学号查询请按2-----------------**\n");
	printf("*****************************************************\n");
	printf("**-----------------手贱请按3滚出去-----------------**\n");
	printf("*****************************************************\n");
	scanf("%d", &number);
	switch (number) {
	case 1:
		printf("请输入怨种姓名:");
		char s[20];
		scanf("%s", s);
		for (int i = 0; i < stunumber; i++)
		{
			if (strcmp(stu[i].name, s) == 0) {
				stu[i].sumgrade = 0;
				stu[i].averagegrade = 0;
				for (int j = 0; j < 6; j++)
				{
					stu[i].sumgrade += stu[i].grade[j];
				}
				stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
				isprime = 1;
				printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
				printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5],stu[i].sumgrade,stu[i].averagegrade);
			}
		}
		break;
	case 2:
		printf("请输入怨种学号:");
		char s1[15];
		scanf("%s", s1);
		for (int i = 0; i < stunumber; i++)
		{
			if (strcmp(stu[i].Sno, s1) == 0) {
				stu[i].sumgrade = 0;
				stu[i].averagegrade = 0;
				for (int j = 0; j < 6; j++)
				{
					stu[i].sumgrade += stu[i].grade[j];
				}
				stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
				isprime = 1;
				printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
				printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
			}
		}
		break;
	case 3:return;
	default:printf("请在1--3之间输入!\n");
	}
	if (isprime == 0){
		printf("找不到介个大怨种捏!\n");
	}
	system("pause");
}

3. 按每个学生的总分由高到低排出名次表, 按每个学生的总分由低到高排出名次表, 按学号由小到大排出成绩表,按姓名的字典顺序排出成绩表;

#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
void gradelist()
{
	printf("*****************************************************\n");
	printf("**---------------按姓名字典顺序请按1---------------**\n");
	printf("*****************************************************\n");
	printf("**---------------按学号从小到大顺序请按2-----------**\n");
	printf("*****************************************************\n");
	printf("**---------------按总分由高到低顺序请按3-----------**\n");
	printf("*****************************************************\n");
	printf("**---------------按总分由低到高顺序请按4-----------**\n");
	printf("*****************************************************\n");
	printf("**---------------手贱请按5滚出去-------------------**\n");
	printf("*****************************************************\n");
	int number;
	scanf("%d", &number);
	switch (number) {
	case 1:
		for (int i = 0; i < stunumber; i++)
		{
			for (int j = 0; j < stunumber -1- i; j++)
			{
				if (stu[j].name < stu[j + 1].name) {
					struct Stu t = stu[j];
					stu[j] = stu[j + 1];
					stu[j + 1] = t;
				}
			}
		}
		for (int i = 0; i < stunumber; i++)
		{
			stu[i].sumgrade = 0;
			stu[i].averagegrade = 0;
			for (int j = 0; j < 6; j++)
			{
				stu[i].sumgrade += stu[i].grade[j];
			}
			stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
			printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
			printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
		}
		break;
	case 2:
		for (int i = 0; i < stunumber; i++)
		{
			for (int j = 0; j < stunumber - 1 - i; j++)
			{
				if (stu[j].Sno < stu[j + 1].Sno) {
					struct Stu t = stu[j];
					stu[j] = stu[j + 1];
					stu[j + 1] = t;
				}
			}
		}
		for (int i = 0; i < stunumber; i++)
		{
			stu[i].sumgrade = 0;
			stu[i].averagegrade = 0;
			for (int j = 0; j < 6; j++)
			{
				stu[i].sumgrade += stu[i].grade[j];
			}
			stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
			printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
			printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
		}
		break;
	case 3:
		for (int i = 0; i < stunumber; i++)
		{
			for (int j = 0; j < stunumber - 1 - i; j++)
			{
				if (stu[j].sumgrade < stu[j + 1].sumgrade) {
					struct Stu t = stu[j];
					stu[j] = stu[j + 1];
					stu[j + 1] = t;
				}
			}
		}
		for (int i = 0; i < stunumber; i++)
		{
			stu[i].sumgrade = 0;
			stu[i].averagegrade = 0;
			for (int j = 0; j < 6; j++)
			{
				stu[i].sumgrade += stu[i].grade[j];
			}
			stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
			printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
			printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
		}
		break;
		for (int i = 0; i < stunumber; i++)
		{
			for (int j = 0; j < stunumber -1- i; j++)
			{
				if (stu[j].name < stu[j + 1].name) {
					struct Stu t = stu[j];
					stu[j] = stu[j + 1];
					stu[j + 1] = t;
				}
			}
		}
		for (int i = 0; i < stunumber; i++)
		{
			stu[i].sumgrade = 0;
			stu[i].averagegrade = 0;
			for (int j = 0; j < 6; j++)
			{
				stu[i].sumgrade += stu[i].grade[j];
			}
			stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
			printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
			printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
		}
		break;
	case 4:
		for (int i = 0; i < stunumber; i++)
		{
			for (int j = 0; j < stunumber - 1 - i; j++)
			{
				if (stu[j].sumgrade > stu[j + 1].sumgrade) {
					struct Stu t = stu[j];
					stu[j] = stu[j + 1];
					stu[j + 1] = t;
				}
			}
		}
		for (int i = 0; i < stunumber; i++)
		{
			stu[i].sumgrade = 0;
			stu[i].averagegrade = 0;
			for (int j = 0; j < 6; j++)
			{
				stu[i].sumgrade += stu[i].grade[j];
			}
			stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
			printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
			printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
		}
		break;
	case 5:return;
	default:printf("请从1-5之间输入捏!\n"); break;
	}
}

4. 按优秀(90100)、良好(8089)、中等(7079)、及格(6069)、不及格(0~59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;

#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
void studyreport()
{
	printf("        语文\t        数学\t        英语\t        物理\t        化学\t        生物\t\n");
	printf("—————————————————————————————————————————————————\n");
	int excellent[6] = { 0 }, good[6] = { 0 }, medium[6] = { 0 }, pass[6] = { 0 }, fail[6] = { 0 };
	for (int i = 0; i < 6; i++)
	{
		for (int j = 0; j < stunumber; j++)
		{
			if (stu[j].grade[i] >= 90 && stu[j].grade[i] <= 100) {
				excellent[i]++;
			}
			else if (stu[j].grade[i] >= 80 && stu[j].grade[i] < 90) {
				good[i]++;
			}
			else if (stu[j].grade[i] >= 70 && stu[j].grade[i] < 80) {
				medium[i]++;
			}
			else if (stu[j].grade[i] >= 60 && stu[j].grade[i] < 70) {
				pass[i]++;
			}
			else {
				fail[i]++;
			}
		}
	}
	printf("优秀:  ");
	for (int i = 0; i < 6; i++)
	{
		printf("%d(%.2lf%%)\t",excellent[i],excellent[i]*100*1.0/stunumber);
		if (i == 5) {
			printf("\n");
		}
	}
	printf("良好:  ");
	for (int i = 0; i < 6; i++)
	{
		printf("%d(%.2lf%%)\t", good[i],good[i]*100*1.0/stunumber);
		if (i == 5) {
			printf("\n");
		}
	}
	printf("中等:  ");
	for (int i = 0; i < 6; i++)
	{
		printf("%d(%.2lf%%)\t", medium[i],medium[i]*100*1.0/stunumber);
		if (i == 5) {
			printf("\n");
		}
	}
	printf("及格:  ");
	for (int i = 0; i < 6; i++)
	{
		printf("%d(%.2lf%%)\t", pass[i],pass[i]*100*1.0/stunumber);
		if (i == 5) {
			printf("\n");
		}
	}
	printf("不及格:");
	for (int i = 0; i < 6; i++)
	{
		printf("%d(%.2lf%%)\t", fail[i],fail[i]*100*1.0/stunumber);
		if (i == 5) {
			printf("\n");
		}

	}

}

5. 将每个学生的记录信息写入文件;

#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"

void save()    
{
	FILE* fp;
	char filename[100];
	int i;
	printf("请输入要保存的文件名:\n");
	scanf("%s", filename);
	if ((fp = fopen(filename, "w")) == NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	for (i = 0; i < stunumber; i++)
	{
		if (fwrite(&stu[i], sizeof(struct Stu), 1, fp) != 1)
			printf("保存失败!\n");
	}
	printf("保存成功!\n");
	fclose(fp);
	system("pause");
}

6.从文件中读出每个学生的记录信息并显示。

#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
void readfile()
{
	FILE* fp = fopen("student.txt", "rb");
	struct Stu pa[100];
	for (int i = 0; i < stunumber; i++)
	{
		fscanf(fp, "%s %s %d %d %d %d %d %d %d %lf", pa[i].Sno, pa[i].name, &pa[i].grade[0], &pa[i].grade[1], &pa[i].grade[2], &pa[i].grade[3], &pa[i].grade[4], &pa[i].grade[5], &pa[i].sumgrade, &pa[i].averagegrade);
	}
	for (int i = 0; i < stunumber; i++)
	{
		pa[i].sumgrade = 0;
		pa[i].averagegrade = 0;
		for (int j = 0; j < 6; j++)
		{
			pa[i].sumgrade += pa[i].grade[j];
		}
		pa[i].averagegrade = pa[i].sumgrade*1.0 / 6;
		printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", pa[i].Sno, pa[i].name, pa[i].grade[0], pa[i].grade[1], pa[i].grade[2], pa[i].grade[3], pa[i].grade[4], pa[i].grade[5], pa[i].sumgrade, pa[i].averagegrade);
	}
	fclose(fp);
}

7.显示当前所有学生信息

#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
void display()
{
	if (stunumber == 0) {
		printf("现在暂无学牲信息,请先添加学牲信息!\n");
	}
	else {
		printf("现在共有%d名学生\n", stunumber);
		printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
		for (int i = 0; i < stunumber; i++)
		{
			stu[i].sumgrade = 0;
			stu[i].averagegrade = 0;
			for (int j = 0; j < 6; j++)
			{
				stu[i].sumgrade += stu[i].grade[j];
			}
			stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
			printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
		}
	}
	system("pause");
}

8.修改学生信息

#define _CRT_SECURE_NO_WARNINGS 1
#include"structstu.h"
void change(int stunumber)
{
	int isprime = 0,number;
	printf("请输入需要修改的怨种姓名捏:");
	char s[15];
	scanf("%s", s);
	for (int i = 0; i < stunumber; i++)
	{
		if (strcmp(stu[i].name, s) == 0)
		{
			isprime = 1;
			printf("***************************************************\n");
			printf("*----1.修改学号--------  -  -----2.修改姓名-------*\n");
			printf("*----3.修改生物成绩----  -  -----4.修改语文成绩---*\n");
			printf("*----5.修改数学成绩----  -  -----6.修改英语成绩---*\n");
			printf("*----7.修改物理成绩----  -  -----8.修改化学成绩---*\n");
			printf("*----9.退出修改--------  -  ----------------------*\n");
			printf("***************************************************\n\n");
			printf("请输入你要修改的事项序号:");
			scanf("%d", &number);
			printf("请输入修改的内容:\n");
			switch (number) {
			case 1:scanf("%s", stu[i].Sno); break;
			case 2:scanf("%s", stu[i].name); break;
			case 3:scanf("%d", &stu[i].grade[5]); break;
			case 4:scanf("%d", &stu[i].grade[0]); break;
			case 5:scanf("%d", &stu[i].grade[1]); break;
			case 6:scanf("%d", &stu[i].grade[2]); break;
			case 7:scanf("%d", &stu[i].grade[3]); break;
			case 8:scanf("%d", &stu[i].grade[4]); break;
			case 9:return;
			default:printf("请输入1-9之间的数字(恼)!\n");
			}
			if (number >= 1 && number <= 9) {
				printf("叮咚,修改成功!\n");
			}
			break;
		}
	}
	if (!isprime) {
		printf("叮咚,未找到该学牲!\n");
	}
	system("pause");
}

完整代码如下:

#pragma once
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Stu {
	char Sno[15];
	char name[20];
	int grade[6];
	int sumgrade;
	double averagegrade;
}stu[100];
extern int stunumber;
void menu();//整个菜单
int enter(int n);//录入学牲信息
void search();//找出你心中的学牲
void change(int stunumber);//修改信息
void help();//使用说明
void gradelist();//输出现有成绩表
void save();//将学生信息写入文件
void display();//从文件中读出信息并显示
void studyreport();//输出学情统计表
void readfile();//读取文件并显示其内容
int stunumber = 0;

void menu()    
{
	printf("\n");
	printf("*****************************************************\n");
	printf("*                   学生信息管理系统                *\n");
	printf("*****************************************************\n");
	printf("*********************系统功能菜单********************\n");
	printf("------------------------      -----------------------\n");
	printf("*****************************************************\n");
	printf("**    1、使用帮助         *    2、录入学生信息     **\n");
	printf("*****************************************************\n");
	printf("**    3、查询学生信息     *    4、输出当前成绩表   **\n");
	printf("*****************************************************\n");
	printf("**    5、保存当前信息     *    6、显示当前所有信息 **\n");
	printf("*****************************************************\n");
	printf("**    7、修改学生信息     *    8、输出学情统计表   **\n");
	printf("*****************************************************\n");
	printf("**    9、读取文件记录信息 *    10、退出系统        **\n");
	printf("*****************************************************\n");
	printf("------------------------      -----------------------\n");
}

void help()    //使用帮助
{
	printf("\n这是一个学生管理系统,为方便您更快了解它,请先阅读以下注意事项:\n");
	printf("\n                  注意事项:                    \n ");
	printf("\n       1、请根据提示进行操作!\n");
	printf("\n       2、初次使用请先选择增加学生信息!\n");
	printf("\n       3、修改或者增加学生信息后切记保存!\n");
	printf("\n       4、如果数据有错误,请先修改再保存!\n");
	printf("\n       5、保存或者刷新时,输入的文件名后缀请使用.txt,比如: stu.txt,系统会在源程序\n");
	printf("\n          “学生管理系统.exe”的相同目录建立一个.txt文件来保存学生信息,您可以查看\n");
	printf("\n          该文件,但非专业人员不要轻易改动,否则会造成刷新数据异常或刷新失败!\n");
	printf("\n       6、学生信息包括:姓名、学号、语文成绩、数学成绩、英语成绩等!\n");
	printf("\n       7、各科成绩统计表为每个学生的信息以及每门课程的总分和平均分!\n");
	printf("\n       8、学情统计表为按类别统计每门课程以及所占百分比!\n");
	printf("\n       7、使用遇到任何问题请与我们联系,电话:12345678\n");
	printf("\n       8、最后感谢您的使用!\n");
	system("pause");   
}

int enter(int n)
{
	label:
	for (int i = stunumber; i < stunumber+n;i++)
	{
		printf("请输入姓名:");
		getchar();
		gets(stu[i].name );
		printf("请输入学号:");
		gets(stu[i].Sno);
		printf("请输入各科成绩:(按照语数英理化生的顺序)");
		for (int j = 0; j < 6; j++)
		{
			scanf("%d", &stu[i].grade[j]);
		}
		printf("叮咚,学牲++\n\n");
	}
	printf("录入完毕\n");
	stunumber += n;
	printf("如果要继续录入请按1,录入完毕请按0\n");
	int flag;
	scanf("%d", &flag);
	if (flag) {
		printf("真来是吧(恼),这次多少个:");
		int t;
		scanf("%d", &t);
		n = t;
		goto label;
	}
	return stunumber;
	system("pause");
}

void search()
{
	int number;
	int isprime = 0;
	printf("*****************************************************\n");
	printf("**-----------------按名字查询请按1-----------------**\n");
	printf("*****************************************************\n");
	printf("**-----------------按学号查询请按2-----------------**\n");
	printf("*****************************************************\n");
	printf("**-----------------手贱请按3滚出去-----------------**\n");
	printf("*****************************************************\n");
	scanf("%d", &number);
	switch (number) {
	case 1:
		printf("请输入怨种姓名:");
		char s[20];
		scanf("%s", s);
		for (int i = 0; i < stunumber; i++)
		{
			if (strcmp(stu[i].name, s) == 0) {
				stu[i].sumgrade = 0;
				stu[i].averagegrade = 0;
				for (int j = 0; j < 6; j++)
				{
					stu[i].sumgrade += stu[i].grade[j];
				}
				stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
				isprime = 1;
				printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
				printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5],stu[i].sumgrade,stu[i].averagegrade);
			}
		}
		break;
	case 2:
		printf("请输入怨种学号:");
		char s1[15];
		scanf("%s", s1);
		for (int i = 0; i < stunumber; i++)
		{
			if (strcmp(stu[i].Sno, s1) == 0) {
				stu[i].sumgrade = 0;
				stu[i].averagegrade = 0;
				for (int j = 0; j < 6; j++)
				{
					stu[i].sumgrade += stu[i].grade[j];
				}
				stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
				isprime = 1;
				printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
				printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
			}
		}
		break;
	case 3:return;
	default:printf("请在1--3之间输入!\n");
	}
	if (isprime == 0){
		printf("找不到介个大怨种捏!\n");
	}
	system("pause");
}

void gradelist()
{
	printf("*****************************************************\n");
	printf("**---------------按姓名字典顺序请按1---------------**\n");
	printf("*****************************************************\n");
	printf("**---------------按学号从小到大顺序请按2-----------**\n");
	printf("*****************************************************\n");
	printf("**---------------按总分由高到低顺序请按3-----------**\n");
	printf("*****************************************************\n");
	printf("**---------------按总分由低到高顺序请按4-----------**\n");
	printf("*****************************************************\n");
	printf("**---------------手贱请按5滚出去-------------------**\n");
	printf("*****************************************************\n");
	int number;
	scanf("%d", &number);
	switch (number) {
	case 1:
		for (int i = 0; i < stunumber; i++)
		{
			for (int j = 0; j < stunumber -1- i; j++)
			{
				if (stu[j].name < stu[j + 1].name) {
					struct Stu t = stu[j];
					stu[j] = stu[j + 1];
					stu[j + 1] = t;
				}
			}
		}
		for (int i = 0; i < stunumber; i++)
		{
			stu[i].sumgrade = 0;
			stu[i].averagegrade = 0;
			for (int j = 0; j < 6; j++)
			{
				stu[i].sumgrade += stu[i].grade[j];
			}
			stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
			printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
			printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
		}
		break;
	case 2:
		for (int i = 0; i < stunumber; i++)
		{
			for (int j = 0; j < stunumber - 1 - i; j++)
			{
				if (stu[j].Sno < stu[j + 1].Sno) {
					struct Stu t = stu[j];
					stu[j] = stu[j + 1];
					stu[j + 1] = t;
				}
			}
		}
		for (int i = 0; i < stunumber; i++)
		{
			stu[i].sumgrade = 0;
			stu[i].averagegrade = 0;
			for (int j = 0; j < 6; j++)
			{
				stu[i].sumgrade += stu[i].grade[j];
			}
			stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
			printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
			printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
		}
		break;
	case 3:
		for (int i = 0; i < stunumber; i++)
		{
			for (int j = 0; j < stunumber - 1 - i; j++)
			{
				if (stu[j].sumgrade < stu[j + 1].sumgrade) {
					struct Stu t = stu[j];
					stu[j] = stu[j + 1];
					stu[j + 1] = t;
				}
			}
		}
		for (int i = 0; i < stunumber; i++)
		{
			stu[i].sumgrade = 0;
			stu[i].averagegrade = 0;
			for (int j = 0; j < 6; j++)
			{
				stu[i].sumgrade += stu[i].grade[j];
			}
			stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
			printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
			printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
		}
		break;
		for (int i = 0; i < stunumber; i++)
		{
			for (int j = 0; j < stunumber -1- i; j++)
			{
				if (stu[j].name < stu[j + 1].name) {
					struct Stu t = stu[j];
					stu[j] = stu[j + 1];
					stu[j + 1] = t;
				}
			}
		}
		for (int i = 0; i < stunumber; i++)
		{
			stu[i].sumgrade = 0;
			stu[i].averagegrade = 0;
			for (int j = 0; j < 6; j++)
			{
				stu[i].sumgrade += stu[i].grade[j];
			}
			stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
			printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
			printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
		}
		break;
	case 4:
		for (int i = 0; i < stunumber; i++)
		{
			for (int j = 0; j < stunumber - 1 - i; j++)
			{
				if (stu[j].sumgrade > stu[j + 1].sumgrade) {
					struct Stu t = stu[j];
					stu[j] = stu[j + 1];
					stu[j + 1] = t;
				}
			}
		}
		for (int i = 0; i < stunumber; i++)
		{
			stu[i].sumgrade = 0;
			stu[i].averagegrade = 0;
			for (int j = 0; j < 6; j++)
			{
				stu[i].sumgrade += stu[i].grade[j];
			}
			stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
			printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
			printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
		}
		break;
	case 5:return;
	default:printf("请从1-5之间输入捏!\n"); break;
	}
}

void save()    
{
	FILE* fp;
	char filename[100];
	int i;
	printf("请输入要保存的文件名:\n");
	scanf("%s", filename);
	if ((fp = fopen(filename, "w")) == NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	for (i = 0; i < stunumber; i++)
	{
		if (fwrite(&stu[i], sizeof(struct Stu), 1, fp) != 1)
			printf("保存失败!\n");
	}
	printf("保存成功!\n");
	fclose(fp);
	system("pause");
}

void display()
{
	if (stunumber == 0) {
		printf("现在暂无学牲信息,请先添加学牲信息!\n");
	}
	else {
		printf("现在共有%d名学生\n", stunumber);
		printf("学号          姓名      语文    数学    英语    物理    化学    生物    总分    平均分\n");
		for (int i = 0; i < stunumber; i++)
		{
			stu[i].sumgrade = 0;
			stu[i].averagegrade = 0;
			for (int j = 0; j < 6; j++)
			{
				stu[i].sumgrade += stu[i].grade[j];
			}
			stu[i].averagegrade = stu[i].sumgrade*1.0 / 6;
			printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", stu[i].Sno, stu[i].name, stu[i].grade[0], stu[i].grade[1], stu[i].grade[2], stu[i].grade[3], stu[i].grade[4], stu[i].grade[5], stu[i].sumgrade, stu[i].averagegrade);
		}
	}
	system("pause");
}

void change(int stunumber)
{
	int isprime = 0,number;
	printf("请输入需要修改的怨种姓名捏:");
	char s[15];
	scanf("%s", s);
	for (int i = 0; i < stunumber; i++)
	{
		if (strcmp(stu[i].name, s) == 0)
		{
			isprime = 1;
			printf("***************************************************\n");
			printf("*----1.修改学号--------  -  -----2.修改姓名-------*\n");
			printf("*----3.修改生物成绩----  -  -----4.修改语文成绩---*\n");
			printf("*----5.修改数学成绩----  -  -----6.修改英语成绩---*\n");
			printf("*----7.修改物理成绩----  -  -----8.修改化学成绩---*\n");
			printf("*----9.退出修改--------  -  ----------------------*\n");
			printf("***************************************************\n\n");
			printf("请输入你要修改的事项序号:");
			scanf("%d", &number);
			printf("请输入修改的内容:\n");
			switch (number) {
			case 1:scanf("%s", stu[i].Sno); break;
			case 2:scanf("%s", stu[i].name); break;
			case 3:scanf("%d", &stu[i].grade[5]); break;
			case 4:scanf("%d", &stu[i].grade[0]); break;
			case 5:scanf("%d", &stu[i].grade[1]); break;
			case 6:scanf("%d", &stu[i].grade[2]); break;
			case 7:scanf("%d", &stu[i].grade[3]); break;
			case 8:scanf("%d", &stu[i].grade[4]); break;
			case 9:return;
			default:printf("请输入1-9之间的数字(恼)!\n");
			}
			if (number >= 1 && number <= 9) {
				printf("叮咚,修改成功!\n");
			}
			break;
		}
	}
	if (!isprime) {
		printf("叮咚,未找到该学牲!\n");
	}
	system("pause");
}

void readfile()
{
	FILE* fp = fopen("student.txt", "rb");
	struct Stu pa[100];
	for (int i = 0; i < stunumber; i++)
	{
		fscanf(fp, "%s %s %d %d %d %d %d %d %d %lf", pa[i].Sno, pa[i].name, &pa[i].grade[0], &pa[i].grade[1], &pa[i].grade[2], &pa[i].grade[3], &pa[i].grade[4], &pa[i].grade[5], &pa[i].sumgrade, &pa[i].averagegrade);
	}
	for (int i = 0; i < stunumber; i++)
	{
		pa[i].sumgrade = 0;
		pa[i].averagegrade = 0;
		for (int j = 0; j < 6; j++)
		{
			pa[i].sumgrade += pa[i].grade[j];
		}
		pa[i].averagegrade = pa[i].sumgrade*1.0 / 6;
		printf("%s  %s\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%.2lf\n", pa[i].Sno, pa[i].name, pa[i].grade[0], pa[i].grade[1], pa[i].grade[2], pa[i].grade[3], pa[i].grade[4], pa[i].grade[5], pa[i].sumgrade, pa[i].averagegrade);
	}
	fclose(fp);
}

void studyreport()
{
	printf("        语文\t        数学\t        英语\t        物理\t        化学\t        生物\t\n");
	printf("—————————————————————————————————————————————————\n");
	int excellent[6] = { 0 }, good[6] = { 0 }, medium[6] = { 0 }, pass[6] = { 0 }, fail[6] = { 0 };
	for (int i = 0; i < 6; i++)
	{
		for (int j = 0; j < stunumber; j++)
		{
			if (stu[j].grade[i] >= 90 && stu[j].grade[i] <= 100) {
				excellent[i]++;
			}
			else if (stu[j].grade[i] >= 80 && stu[j].grade[i] < 90) {
				good[i]++;
			}
			else if (stu[j].grade[i] >= 70 && stu[j].grade[i] < 80) {
				medium[i]++;
			}
			else if (stu[j].grade[i] >= 60 && stu[j].grade[i] < 70) {
				pass[i]++;
			}
			else {
				fail[i]++;
			}
		}
	}
	printf("优秀:  ");
	for (int i = 0; i < 6; i++)
	{
		printf("%d(%.2lf%%)\t",excellent[i],excellent[i]*100*1.0/stunumber);
		if (i == 5) {
			printf("\n");
		}
	}
	printf("良好:  ");
	for (int i = 0; i < 6; i++)
	{
		printf("%d(%.2lf%%)\t", good[i],good[i]*100*1.0/stunumber);
		if (i == 5) {
			printf("\n");
		}
	}
	printf("中等:  ");
	for (int i = 0; i < 6; i++)
	{
		printf("%d(%.2lf%%)\t", medium[i],medium[i]*100*1.0/stunumber);
		if (i == 5) {
			printf("\n");
		}
	}
	printf("及格:  ");
	for (int i = 0; i < 6; i++)
	{
		printf("%d(%.2lf%%)\t", pass[i],pass[i]*100*1.0/stunumber);
		if (i == 5) {
			printf("\n");
		}
	}
	printf("不及格:");
	for (int i = 0; i < 6; i++)
	{
		printf("%d(%.2lf%%)\t", fail[i],fail[i]*100*1.0/stunumber);
		if (i == 5) {
			printf("\n");
		}

	}

}

int main()
{
	int number;
	int n;
	int t=1;
	while (t)
	{
		menu();
		printf("请输入菜单编号:");
		scanf("%d", &number);
		switch (number)
		{
		case 1:help(); break;    //使用说明书
		case 2:
			printf("请输入录入的学牲数:");
			scanf("%d", &n);
			stunumber=enter(n); 
			break;    //录入学生信息
		case 3:search(); break;    //查询学生信息
		case 4:gradelist(); break;
		case 5:save(); break;    //保存当前信息
		case 6:display(); break;    //显示当前信息
		case 7:change(stunumber); break;    //修改学生信息
		case 8:studyreport(); break;//输出学情统计表
		case 10:t = 0; break;    //退出
		case 9:readfile(); break;//读取文件并显示信息
		default:printf("输入有误!");
		}
	}
}

第一次写项目,感觉有很多bug,还是需要改改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值