不用指针写的学生成绩菜单系统

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int i, j,n,m, sum, temp,flag=0,key=0;
int grade[30][100] = { 0 }, number[30] = { 0 }, Sum[30] = { 0 };
int max[30] = { 0 }, min[30] = { 0 };
int Tgrade[30][10] = { 0 };
int Tnumber[30] = { 0 };
char name[30][100] = { 0 };
char Tname[30][100] = { 0 }, T[][100] = { 0 };
void showMenu(char menu[9][208]);
void stop();
int M();
void F1();
void F2();
void F3();
void F4();
void F5();
void F6();
void F7();
void F8();
void F9();
int main()
{
	//初始化菜单界面
	char menu[9][208] = {
		"(1)录入每个学生的学号,姓名和课程成绩",
		"(2)按每个学生的总分由高到低排出名次表",
		"(3)按每个学生的总分由低到高排出名次表",
		"(4)按学号由小到大排出成绩表",
		"(5)按姓名的字典顺序排出成绩表",
		"(6)按学号查询学生排名及其考试成绩",
		"(7)按姓名查询学生排名及其考试成绩",
		"(8)按\n"
		"满分(100分)\n"
		"优秀(90~99)\n"
		"良好(80 ~89)\n"
		"中等(70 ~ 79)\n"
		"及格(60 ~69)\n"
		"不及格(0~59)\n"
		"6个类别,对每门课程分别统计每个类别的人数及所占的百分比",
		"(9)输出每个学生的学号、姓名、各科成绩、以及每门课程的总分和平均分"
	};
	//切换界面,实现功能
	while (1)
	{
		char sel;
		system("cls");
		showMenu(menu);
		sel = getchar();
		switch (sel)
		{
		case'1':system("cls"); F1(); break;
	    case'2':system("cls"); F2(); break;
		case'3':system("cls"); F3(); break;
		case'4':system("cls"); F4(); break;
		case'5':system("cls"); F5(); break;
		case'6':system("cls"); F6(); break;
		case'7':system("cls"); F7(); break;
		case'8':system("cls"); F8(); break;
		case'9':system("cls"); F9(); break;
		}
	}
	return 0;
}
//功能1
void F1()
{
	printf("录入每个学生的学号,姓名和五门课程的成绩\n");
	printf("请问有多少学生:");
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
        printf("请输入第%d个学生的信息\n", i + 1);
		printf("请输入该学生的学号:");
		scanf("%d", &number[i]);
		getchar();
		printf("请输入该学生的名字:");
		gets(name[i]);
		printf("请输入该学生五门科目的成绩:");
		for (j = 0; j < 5; j++)
			scanf("%d", &grade[i][j]);
	}
	flag = 1;
	M();
	printf("表格如下\n");
	printf("-----------------------------------------------------------------\n");
	printf("|序号\t|学号\t|姓名\t|科目一\t|科目二\t|科目三\t|科目四\t|科目五\t|\n");
	printf("-----------------------------------------------------------------\n");
	for (i = 0; i < n; i++)
	{
		printf("|%d\t|%d\t|%s\t",i+1,number[i],name[i]);
		for (j = 0; j < 5; j++)
		{
            printf("|%d\t",grade[i][j]);
		}
		printf("|\n");
		printf("-----------------------------------------------------------------\n");
	}
	stop();
}
//功能2
void F2()
{
	if (flag == 1)
	{
		printf("按每个学生的总分由高到低排出名次表\n");
		printf("表格如下\n");
		//传递
		for (i = 0; i < n; i++)
		{
			for (j = i; j < n; j++)
			{
				if (max[i] == Sum[j])
				{
					strcpy(Tname[i], name[j]);
					strcpy(Tname[j], name[i]);
					Tnumber[i] = number[j];
					Tnumber[j] = number[i];
				}
			}
		}
		//打印
		printf("---------------------------------\n");
		printf("|排名\t|学号\t|姓名\t|总分\t|\n");
		printf("---------------------------------\n");
		for (i = 0; i < n; i++)
		{
			printf("|%d\t|%d\t|%s\t|%d\t|\n", i + 1, Tnumber[i], Tname[i], max[i]);
			printf("---------------------------------\n");
		}
		stop();
	}
	else
	{
printf("无任何学生信息\n");
	stop();
	}
		
}
//功能3
void F3()
{
	if (flag == 1)
	{
		printf("按每个学生的总分由低到高排出名次表\n");
		printf("表格如下\n");
		//传递
		for (i = 0; i < n; i++)
		{
			for (j = i; j < n; j++)
			{
				if (min[i] == Sum[j])
				{
					strcpy(Tname[i], name[j]);
					strcpy(Tname[j], name[i]);
					Tnumber[i] = number[j];
					Tnumber[j] = number[i];
				}
			}
		}
		//打印
		printf("---------------------------------\n");
		printf("|排名\t|学号\t|姓名\t|总分\t|\n");
		printf("---------------------------------\n");
		for (i = 0; i < n; i++)
		{
			printf("|%d\t|%d\t|%s\t|%d\t|\n", n - i, Tnumber[i], Tname[i], min[i]);
			printf("---------------------------------\n");
		}
		stop();
	}
	else
	{
printf("无任何学生信息\n");
	stop();
	}
		

}
//功能4
void F4()
{
	if (flag == 1)
	{
		printf("按学号由小到大排出成绩表\n");
		printf("表格如下\n");
		//传递
		for (i = 0; i < n; i++)
			Tnumber[i] = number[i];
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < 5; j++)
			{
				Tgrade[i][j] = grade[i][j];
			}

		}


		//比较
		for (i = 0; i < n - 1; i++)
		{
			for (j = 0; j < n - i - 1; j++)
			{
				if (Tnumber[j] > Tnumber[j + 1])
				{
					temp = Tnumber[j];
					Tnumber[j] = Tnumber[j + 1];
					Tnumber[j + 1] = temp;

				}
			}

		}
		//传递
		for (i = 0; i < n; i++)
		{
			for (j = i; j < n; j++)
			{
				if (Tnumber[i] == number[j])
				{
					strcpy(Tname[i], name[j]);
					strcpy(Tname[j], name[i]);
					for (m = 0; m < 5; m++)
					{
						temp = Tgrade[j][m];
						Tgrade[j][m] = Tgrade[i][m];
						Tgrade[i][m] = temp;
					}


				}
			}
		}
		//打印
		printf("-----------------------------------------------------------------\n");
		printf("|序号\t|学号\t|姓名\t|科目一\t|科目二\t|科目三\t|科目四\t|科目五\t|\n");
		printf("-----------------------------------------------------------------\n");
		for (i = 0; i < n; i++)
		{
			printf("|%d\t|%d\t|%s\t|", i + 1, Tnumber[i], Tname[i]);
			for (j = 0; j < 5; j++)
			{
				printf("%d\t|", Tgrade[i][j]);
			}
			printf("\n");
			printf("-----------------------------------------------------------------\n");
		}
		stop();
	}
	else
	{
printf("无任何学生信息\n");
	stop();	
	}
				
}
//功能5
void F5()
{
	if (flag == 1)
	{
		printf("按姓名的字典顺序排出成绩表\n");
		printf("表格如下\n");
		//传递
		for (i = 0; i < n; i++)
		{
			strcpy(Tname[i], name[i]);
		}
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < 5; j++)
			{
				Tgrade[i][j] = grade[i][j];
			}

		}
		//比较
		for (i = 0; i < n - 1; i++)
		{

			for (j = 0; j < n - i - 1; j++)
			{
				if (strcmp(Tname[j], Tname[j + 1]) > 0)
				{
					strcpy(T, Tname[j]);
					strcpy(Tname[j], Tname[j + 1]);
					strcpy(Tname[j + 1], T);

				}
			}

		}
		//传递
		for (i = 0; i < n; i++)
		{
			for (j = i; j < n; j++)
			{
				if (strcmp(Tname[i], name[j]) == 0)
				{   
					Tnumber[i] = number[j];
					Tnumber[j] = number[i];
					for (m = 0; m < 5; m++)
					{
						temp = Tgrade[j][m];
						Tgrade[j][m] = Tgrade[i][m];
						Tgrade[i][m] = temp;
					}
				}
			}

		}
	
			//打印
		printf("-----------------------------------------------------------------\n");
			printf("|序号\t|学号\t|姓名\t|科目一\t|科目二\t|科目三\t|科目四\t|科目五\t|\n");
			printf("-----------------------------------------------------------------\n");
			for (i = 0; i < n; i++)
			{
				printf("|%d\t|%d\t|%s\t|", i + 1, Tnumber[i], Tname[i]);
				for (j = 0; j < 5; j++)
				{
					printf("%d\t|", Tgrade[i][j]);
				}
				printf("\n");
				printf("-----------------------------------------------------------------\n");
			}
			stop();

	}
	else
	{
printf("无任何学生信息\n");
	end:
	stop();
	}
		

}
//功能6
void F6()
{
	if (flag == 1)
	{
		key = 0;
		printf("按学号查询学生排名及其考试成绩\n");
		//查询
		printf("请输入学生的学号:");
		scanf("%d", &temp);
		for (i = 0; i < n; i++)
		{
			
			if (temp == number[i])
			{
				m = i;
				key = 1;
			}
			
		}
		if (key == 0)
		{
			printf("查无此人\n");
			stop();
		}
		else
		{
            //打印
			printf("-----------------------------------------------------------------\n");
			printf("|学号\t|姓名\t|排名\t|科目一\t|科目二\t|科目三\t|科目四\t|科目五\t|\n");
			printf("-----------------------------------------------------------------\n");
			printf("|%d\t|%s\t|%d\t|", number[m], name[m], n - m);
			for (j = 0; j < 5; j++)
			{
				printf("%d\t|", grade[m][j]);
				
			}
			printf("\n");
			printf("-----------------------------------------------------------------\n");
			stop();
		
		}
			
	}
	else
	{
    printf("无任何学生信息\n");
	stop();
	}
		
}
//功能7
void F7() 
{
	if (flag == 1)
	{

		key = 0;
		printf("按姓名查询学生排名及其考试成绩\n");
		//查询
		getchar();
		printf("请输入学生的姓名:");
		gets(Tname);
		for (i = 0; i < n; i++)
		{
			
			if (strcmp(Tname, name[i]) == 0)
			{
				m = i;
				key = 1;
			}
		}
		if (key == 0)
		{
			printf("查无此人\n");
			//停留
			printf("再按一次回车返回菜单");
			getchar();
		}
		else
		{//打印
			printf("-----------------------------------------------------------------\n");
		printf("|学号\t|姓名\t|排名\t|科目一\t|科目二\t|科目三\t|科目四\t|科目五\t|\n");
		printf("-----------------------------------------------------------------\n");
		printf("|%d\t|%s\t|%d\t|", number[m], name[m], n - m);
		for (j = 0; j < 5; j++)
		{
			printf("%d\t|", grade[m][j]);
		}
		printf("\n");
		printf("-----------------------------------------------------------------\n");
		//停留
		printf("再按一次回车返回菜单");
		getchar(); 
		}
	}
	else
	{
printf("无任何学生信息\n");
	stop();
	}
		

}
//功能8
void F8() 
{
	if (flag == 1)
	{
		printf(
			"按\n"
			"满分(100分)\n"
			"优秀(90~99)\n"
			"良好(80 ~89)\n"
			"中等(70 ~ 79)\n"
			"及格(60 ~69)\n"
			"不及格(0~59)\n"
			"6个类别,对每门课程分别统计每个类别的人数及所占的百分比\n");
		printf("表格如下\n");
		char T[6][100] = { "满分","优秀","良好","中等","及格","不及格" };
		int Tgrade[30][10] = { 0 };
		//分类
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < 5; j++)
			{

				switch (grade[i][j] / 10)
				{
				case 10:
					Tgrade[0][j]++; break;
				case 9:
					Tgrade[1][j]++; break;
				case 8:
					Tgrade[2][j]++; break;
				case 7:
					Tgrade[3][j]++; break;
				case 6:
					Tgrade[4][j]++; break;
				case 5:
				case 4:
				case 3:
				case 2:
				case 1:
				case 0:
					Tgrade[5][j]++; break;
				}
			}
		}
		//打印
		printf("---------------------------------------------------------\n");
		printf("|类别\\课程\t|科目一\t|科目二\t|科目三\t|科目四\t|科目五\t|\n");
		printf("---------------------------------------------------------\n");
		for (i = 0; i < 6; i++)
		{
			printf("|%s    \t|", T[i]);
			for (j = 0; j < 5; j++)
			{
				printf("%d\\%d%%\t|", Tgrade[i][j], (Tgrade[i][j] * 100) / n);
			}
			printf("\n");
			printf("---------------------------------------------------------\n");
		}
		stop();
	}
	else
	{
printf("无任何学生信息\n");
	stop();
	}
		
}
void F9() 
{
	if (flag == 1)
	{
		printf("输出每个学生的学号、姓名、各科成绩、以及每门课程的总分和平均分\n");
		printf("表格如下\n");
		//打印
		printf("---------------------------------------------------------------------------------\n");
		printf("|序号\t|学号\t|姓名\t|科目一\t|科目二\t|科目三\t|科目四\t|科目五\t|总分\t|平均分\t|\n");
		printf("---------------------------------------------------------------------------------\n");
		for (i = 0; i < n; i++)
		{
			printf("|%d\t|%d\t|%s\t|", i + 1, number[i], name[i]);
			for (j = 0; j < 5; j++)
			{
				printf("%d\t|", grade[i][j]);
			}
			printf("%d\t|%d\t|", Sum[i], Sum[i] / 5);
			printf("\n");
			printf("---------------------------------------------------------------------------------\n");
		}
		stop();
	}
	else
	{
printf("无任何学生信息\n");
	stop();
	}
		
}
//停留
void stop()
{
	getchar();
	printf("再按一次回车返回菜单");
	getchar();
}
//打印菜单
void showMenu(char menu[9][208])
{
	int i;
	for (i = 0; i < 9; i++)
		puts(menu[i]);
}
int M()
{
	//运算
	for (i = 0; i < n; i++)
	{
		sum = 0;
		for (j = 0; j < 5; j++)
		{
			sum += grade[i][j];
		}
		Sum[i] = sum;
	}
	//传递
	for (i = 0; i < n; i++)
		max[i] = Sum[i];
	//比较大
	for (i = 0; i < n - 1; i++)
	{
		for (j = 0; j < n - i - 1; j++)
		{
			if (max[j] < max[j + 1])
			{
				temp = max[j];
				max[j] = max[j + 1];
				max[j + 1] = temp;

			}
		}

	}
	//传递
	for (i = 0; i < n; i++)
		min[i] = Sum[i];
	//比较小
	for (i = 0; i < n - 1; i++)
	{

		for (j = 0; j < n - i - 1; j++)
		{
			if (min[j] > min[j + 1])
			{
				temp = min[j];
				min[j] = min[j + 1];
				min[j + 1] = temp;

			}
		}

	}
}

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本实验课题主要是要解决数据在文件中的读取,并且要求读取到的学生总人数少于30人,每位学生的课程不多于6门。此程序需要实现输入、计算、排序、删除、查询、显示功能。此实验需要在CodeBlocks等C语言编译平台上完成同时本实验要求所的程序可以流畅的在编译平台上运行。首先为用户提供一个菜单,展示各个选项的功能,用户可输入一个选项(数字),执行相应的功能,通过运用switch语句对用户输入的数字进行处理判断出用户想要执行的操作。一共有14个选项,第一个和八九选项没有使用函数,二三分别对应着一个函数,第四个到第七个都使用同一个函数来输出成绩。十到十三个分别对应一个函数,最后一个0来结束程序。 学生信息的入(定义FILE *fp指针),先将将学生人数和课程门数入文件,以结构体数组的形式来保存键盘上输入的每个学生相应的信息。然后再用fprintf函数的格式入方式将数组中的数据入文档中。 学生信息的读取,先定义结构体数组,从文件中读取学生的学号姓名及成绩等信息入到结构体数组stu中,在用fscanf函数的格式读取方式将文档中相应的数据保存在相应的结构体数组里定义的变量中。 计算排序的功能,是按不同的要求分别将学生的总成绩和平均成绩计算出来,然后将每个学科的总成绩平均成绩计算出来,然后按升序或者降序将成绩排序出来。 删除查询显示等功能,可以通过读取得到的结构体数组,进行重文档,打印等方式实现功能。
一、课程设计题目 ① 基本要求题目:矩阵乘法。 ② 综合训练:学生成绩管理系统 二、设计要求 矩阵乘法:编一个函数实现矩阵A(2行3列)与矩阵B 相乘(3行2列),乘积放在C数组中。在主函数中输入相乘的两数组,并输出结果。 学生成绩管理:(结构体数组、函数、指针、算法、流程结构及文件等的综合应用) 程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能: (1)主菜单 (2)各菜单项功能 ① 成绩录入:输入学生的学号、姓名及三门课的成绩; ② 成绩查询:(至少一种查询方式)。  按学号查询学生记录。  查询不及格学生的记录。 ③成绩统计:  计算学生的平均分;  根据学生的平均分高低,对学生的数据进行排序后输出;  对学生单科成绩排序,输出学生姓名与该科成绩; ④退出系统:退出整个系统(即主菜单)。 (3)结构体数组: #define N 30struct student {int num; /* 定义学号*/ char name[20]; /* 定义姓名*/ float score[3]; /* 定义存贮三门课成绩的数组*/ float average; /* 定义平均成绩*/ };struct student stu[N];  /* 定义结构体数组,存贮多个学生的记录*/ 三、数据结构设计描述 系统功能描述 1能够输入学生的学号、姓名、三科成绩并且计算出平均成绩。 2能够以表格的形式输出学生记录 3能够按照学生三科的平均成绩进行排序 4能够按照学生的单科成绩进行排序 5能够按照学号查询学生记录 6往表中插入学生记录 7从表中删除学生记录 8存储记录到文件中 9从文件中读取记录 10退出 数据字典 1数据流条目 数据流名称:全部记录 别名:无 简述:最新更新后所有关于学生成绩的记录 来源:数据库 去向:加工“记录筛选” 数据流量:不限 组成:学号+姓名+SC1+SC2+SC3+平均成绩 数据存储条 数据存储名称:学生成绩记录 别名:无 简述:存放学生所有可供查询的信息 组成:学号+姓名+SC1+SC2+SC3+平均成绩 组织方式:索引文件,以学学号为关键字 查询要求:要求能立即查询 2数据项条目 数据项名称:学号 别名:无 简述:所有学校学生的学号 类型:字符串 3加工条目 加工名:更改的记录 激发条件:学生成绩记录被改动 优先级:普通 输入:新记录 输出:更新数据、数据未改动 加工逻辑:根据现有学生成绩记录 if 新记录旧记录 then 更新数据 else 数据未改动 endif 设计测试流程 1、进入界面 2、输入选项0,回车; 按提示输入数据 3、回到主菜单; 输入选项8,回车; 输入文件名:data,回车; 出现成功提示,则读入文件操作成功。 4、回到主菜单,输入1,回车 每10个暂停显示数据 5、回到主菜单,输入2,回车 出现排序成功信息。 6、回到主菜单,输入3,回车 出现排序成功信息。 7、回到主菜单,输入5,回车 按提示插入一组数据 8、回到主菜单,输入6,回车 按提示输入姓名,删除数据 出现删除成功的信息 9、回到主菜单,输入4,回车 输入学号进行查询 10、回到主菜单,输入1,回车 出现统计信息 11、回到主菜单,输入7,回车 输入result,回车 出现成功入文件的信息 12、回到主菜单,输入9,回车退出系统

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

药丸01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值