学生系统——C语言课程设计

声明 :

由于我不会单链表,所以我的设计 简单应用了一下结构体数组和指针,绝对适合没有深入了解结构体和指针的朋友。

对您有帮助请点一个赞支持以下~~


学生系统要求如下:

  1. 输入记录模块 从键盘逐个输入学生记录。
  2. 查询记录模块 按照学生的学号查询或者按照学生的姓名进行查询;查找最高分和不及格的学生;把满足条件的学生信息显示出来。
  3. 更新记录模块 修改某一个学生的信息,对学生按照学号和成绩就行排序(升序或者降序);求出每个学生的平均成绩。插入一个学生信息;删除一个学生的信息。
  4. 统计记录模块 统计每一门课最高分和不及格人数。
  5. 输出记录模块 显示所有学生的信息。

我写了一个头文件fun.h,两个c文件fun.c,test.c

fun.h包含对我写的函数声明和一些变量声明

fun.c具体写函数功能实现

test.c是游戏的主运行程序

文件名字可以自己随意定义,以上3个文件只要在vs内同一个project内打开就可以运行 

头文件 fun.c

#define CHIN 0//stu[].score[0]输入语文成绩
#define MATH 1//stu[].score[1]输入数学成绩
#define ENG  2//stu[].score[2]输入外语成绩

#include<stdio.h>
#include<string.h>
#include<windows.h>//system("cls") 清屏命令   system("pause")输入任意键继续命令
//学生结构体
struct student {
	int id;//学号
	char name[9];//姓名
	int score[3];//成绩数组
}stu;

void Input(struct student stu[100], int Num);//输入学生成绩

void SearchId(struct student stu[100], int Num);//按照学号查找学生
void SearchName(struct student stu[100], int Num);//按照姓名查找学生
void Search_Max_Fall(struct student stu[100], int Num);//查询最高成绩和不及格学生

void Change(struct student stu[100], int Num);//修改学生信息
void Sort(struct student stu[100], int Num);//排序
void SortExchange(struct student stu[100], int Num, int j);//交换结构体数组元素位置
void Average(struct student stu[100], int Num);//求平均成绩
void Search_Max_Sub(struct student stu[100], int Num, int sub);//寻找科目分最高的同学
void Search_Fall_Sub(struct student stu[100], int Num,int sub); //寻找科目挂科的同学
void DeleteId(struct student stu[100], int* Num);//按照学号删除
void DeleteName(struct student stu[100], int* Num);//按照姓名删除
void Insert(struct student stu[100], int* Num);//插入学生信息

void Sum(struct student stu[100], int Num);//同计没课最高分和不及格人数

void Print(struct student stu[100], int Num);//输出所有学生信息

test.c 

#define _CRT_SECURE_NO_WARNINGS 1
#include"fun.h"
//菜单函数
void Menu() {
	printf("--------------------------------------------------\n\n");
	printf("*         您好!欢迎来到学生成绩管理系统!       *\n");
	printf("*                    1.   录入                   *\n");
	printf("*                    2.   查询                   *\n");
	printf("*                    3.   更新                   *\n");
	printf("*                    4.   统计                   *\n");
	printf("*                    5.   输出                   *\n");
	printf("*                    0.   退出                   *\n\n");
	printf("--------------------------------------------------\n");
}
void MenuSearch() {
	printf("--------------------------------------------------\n\n");
	printf("*             1.  按照学号查找                    \n");
	printf("*             2.  按照姓名查找                    \n");
	printf("*             3.  查找最高成绩和不及格学生        \n");
	printf("*             0.  退出                            \n\n");
	printf("--------------------------------------------------\n");
}
void MenuRenew() {
	printf("--------------------------------------------------\n\n");
	printf("*               1.   修改学生信息                *\n");
	printf("*               2.   删除学生信息                *\n");
	printf("*               3.   插入学生信息                *\n");
	printf("*               4.  求学生平均成绩               *\n");
	printf("*               5.       排序                    *\n");
	printf("*               0.       退出                    *\n\n");
	printf("--------------------------------------------------\n");
}
void MenuDeleteMethod() {
	printf("\n--------------------------------------------------\n");
	printf("*      请选择删除方式:                             \n");
	printf("*                    1.  学号                       \n");
	printf("*                    2.  姓名                       \n");
	printf("*                    0.  取消                       \n");
	printf("\n--------------------------------------------------\n");
}
//学生系统主函数
void test() {
	struct student stu[100];
	int Choose = 0;//选择功能
	int Num = 0;//学生总数
	int Search = 0;//查找功能的查找方式
	int Renew = 0;//更新功能选择
	do {
		system("cls");
		Menu();
		printf("\n请输入您想选择的模式:\n");
		scanf("%d", &Choose);
		//五大功能主菜单
		switch (Choose) {
			case 1:
				printf("请输入您想添加的学总人数:\n");
				scanf("%d", &Num);
				system("cls");
				Input(stu,Num);
				break;
			case 2:
				MenuSearch();
				printf("请输入您想查找得方式:\n");
				scanf("%d", &Search);
				switch (Search) {
					case 1:
						system("cls");
						SearchId(stu, Num);
						break;
					case 2:
						system("cls");
						SearchName(stu, Num);
						break;
					case 3:
						system("cls");
						Search_Max_Fall(stu, Num);					
						break;
					case 0:
						break;
					default:
						printf("选择错误!请重新选择!\n");
						break;
				}
				break;
			case 3:
				system("cls");
				MenuRenew();
				printf("请输入您想执行的操作:\n");
				scanf("%d", &Renew);
				switch (Renew) {
					case 1:
						system("cls");
						Change(stu, Num);
						break;
					case 2:
						system("cls");
						int method = 0;
						while (1) {
							MenuDeleteMethod();//
							scanf("%d", &method);
							switch (method) {
							case 1:
								DeleteId(stu, &Num);
								break;
							case 2:
								DeleteName(stu, &Num);
								break;
							case 0:
								goto end;
							default:
								printf("选择不在选项内!请重新选择!\n");
								break;
							}
						}
					end:;
						break;
					case 3:
						Insert(stu,&Num);
						break;
					case 4:
						system("cls");
						Average(stu, Num);
						break;
					case 5:
						system("cls");
						Sort(stu,Num);
						break;
					default:
						printf("选择错误!请重新选择!\n");
						break;
				}
				break;
			case 4:
				system("cls");
				Sum(stu, Num);
				break;
			case 5:
				system("cls");
				Print(stu,Num);
				break;
			default:
				printf("选择错误!请重新选择!\n");
				break;
		}
	} while (Choose);
}
int main() {
	test();
	return 0;
}

 

fun.c 

多行预警!!! 

#define _CRT_SECURE_NO_WARNINGS 1
#include"fun.h"
//菜单函数
void Menu1_0() {
	printf("\n--------------------------------------------------\n");
	printf("*  请选择是否继续查找:                             \n");
	printf("*                     0.  继续                      \n");
	printf("*                     1.  退出                      \n");
	printf("\n--------------------------------------------------\n");
}
void MenuChangeChoose() {
	printf("\n--------------------------------------------------\n");
	printf("*请选择您想修改的内容:                             \n");
	printf("*                    1.  学号                      \n");
	printf("*                    2.  姓名                      \n");
	printf("*                    3.  语文成绩                  \n");
	printf("*                    4.  数学成绩                  \n");
	printf("*                    5.  英语成绩                  \n");
	printf("*                    6.  全部修改                  \n");
	printf("*                    0.  退出                      \n");
	printf("\n--------------------------------------------------\n");
}
void MenuMethod() {
	printf("\n--------------------------------------------------\n");
	printf("*      请选择查找方式:                             \n");
	printf("*                    1.  学号                       \n");
	printf("*                    2.  姓名                       \n");
	printf("*                    0.  取消                       \n");
	printf("\n--------------------------------------------------\n");
}
void MenuExit() {
	printf("\n--------------------------------------------------\n");
	printf("*             请选择:                              \n");
	printf("*                    1.  继续查找                   \n");
	printf("*                    2.  放弃查找                   \n");
	printf("\n--------------------------------------------------\n");
}
void MenuSort() {
	printf("\n--------------------------------------------------\n");
	printf("*     请选择排序方式:                              \n");
	printf("*                    1.  学号                       \n");
	printf("*                    2.  成绩                       \n");
	printf("\n--------------------------------------------------\n");
}
void MenuUpOrDown() {
	printf("\n--------------------------------------------------\n");
	printf("*     请选择排序方式:                              \n");
	printf("*                    1.  升序 (从小到大)          \n");
	printf("*                    2.  降序                       \n");
	printf("\n--------------------------------------------------\n");
}
void MenuSortSub() {
	printf("\n--------------------------------------------------\n");
	printf("*     请选择排序科目:                              \n");
	printf("*                    1.  语文                       \n");
	printf("*                    2.  数学                       \n");
	printf("*                    2.  英语                       \n");
	printf("\n--------------------------------------------------\n");
}
void MenuSearchChoose() {
	printf("\n--------------------------------------------------\n");
	printf("*     请选择查找类型:                              \n");
	printf("*                    1. 最高分                      \n");
	printf("*                    2. 不及格                      \n");
	printf("*                    0.  退出                      \n");
	printf("\n--------------------------------------------------\n");
}
void MenuSearchSub() {
	printf("\n--------------------------------------------------\n");
	printf("*     请选择查找科目:                              \n");
	printf("*                    1. 语文                        \n");
	printf("*                    2. 数学                        \n");
	printf("*                    3. 英语                        \n");
	printf("\n--------------------------------------------------\n");
}
//操作函数
void Input(struct student stu[100], int Num) {
	int i = 0;
	int j = 0;
	for (i = 0; i < Num; i++) {
		printf("--------------------------------------------------\n");
		printf("请输入学号:");
		scanf("%d", &stu[i].id);
		printf("请输入姓名:");
		scanf("%s", stu[i].name);
		printf("请输入语文成绩:");
		scanf("%d", &stu[i].score[0]);
		printf("请输入数学成绩:");
		scanf("%d", &stu[i].score[1]);
		printf("请输入英语成绩:");
		scanf("%d", &stu[i].score[2]);
	}
	system("pause");
}

void SearchId(struct student stu[100], int Num) {
	int Id = 0;
	int i = 0;
	int flag = 1;
	int judge = 0;
	int GoOn = 0;
	begin:
	do{
		printf("\n请输入您想查找得学生学号:\n");
		scanf("%d", &Id);
		for (i = 0; i < Num; i++) {
			if (stu[i].id == Id) {
				flag = 0;
				printf("\n学生信息如下:\n");
				printf("--------------------------------------------------\n");
				printf("学号:%d\n", stu[i].id);
				printf("姓名:%s\n", stu[i].name);
				printf("语文成绩:%d\n", stu[i].score[0]);
				printf("数学成绩:%d\n", stu[i].score[1]);
				printf("英语成绩:%d\n", stu[i].score[2]);
			
			}
		}
		if (flag) {
			printf("抱歉,没有找到该学生!\n");//当所有学生均不满足输入的学号时,进入if,选择是否继续寻找
			Menu1_0();
			scanf("%d", &judge);
			if (judge) //如果输入1 执行break 退出while循环。否则继续循环,重新输入学号
				break;
			else
				goto begin;
		}
		printf("是否继续查找?输入0退出-->");
		scanf("%d", &GoOn);//输入0退出do while循环 输入其他循环继续
	} while (GoOn);
}
void SearchName(struct student stu[100], int Num) {
	char Name[10];
	int i = 0;
	int flag = 1;
	int judge = 0;
	int GoOn = 0;
	do {
		printf("请输入您想查找的学生姓名:\n");
		scanf("%s", &Name);
		for (i = 0; i < Num; i++) {
			if (strcmp(Name, stu[i].name) == 0) {
				flag = 0;
				printf("\n学生信息如下:\n");
				printf("--------------------------------------------------\n");
				printf("学号:%d\n", stu[i].id);
				printf("姓名:%s\n", stu[i].name);
				printf("语文成绩:%d\n", stu[i].score[0]);
				printf("数学成绩:%d\n", stu[i].score[1]);
				printf("英语成绩:%d\n", stu[i].score[2]);
			}
		}
		if (flag) {
			printf("抱歉,没有找到该学生!\n");
			Menu1_0();
			scanf("%d", &judge);
			if (judge) {
				break;
			}
		}
		printf("是否继续查找?输入0退出-->");
		scanf("%d", &GoOn);
	} while (GoOn);
}
void Search_Max_Sub(struct student stu[100], int Num, int sub) {
	int i = 0;
	int max = 0;
	max = stu[0].score[sub];
	//寻找最高分
	for (i = 1; i < Num; i++) {
		if (max < stu[i].score[sub]) {
			max = stu[i].score[sub];
		}
	}
	for (i = 0; i < Num; i++) {
		if (stu[i].score[sub] == max) {//只要等于刚才找到的最高分就输出这个元素(这么做是因为最高分可能不止一个)
			printf("学号: %d  ", stu[i].id);
			printf("姓名: %s  ", stu[i].name);
			printf("成绩: %d\n", stu[i].score[sub]);
			printf("--------------------------------------------------\n");
		}
	}
	system("pause");
}
void Search_Fall_Sub(struct student stu[100], int Num, int sub) {
	int i = 0;
	int pass = 60;//及格线
	int flag = 1;
	for (i = 0; i < Num;  i++) {
		if (stu[i].score[sub] < 60) {
			printf("学号: %d  ", stu[i].id);
			printf("姓名: %s  ", stu[i].name);
			printf("成绩: %d\n", stu[i].score[sub]);
			printf("--------------------------------------------------\n");
			flag = 0;
		}
	}
	if (flag) {
		printf("\n没有不及格的的同学!\n");
	}
	system("pause");
}


void Search_Max_Fall(struct student stu[100], int Num) {
	int i = 0;
	int j = 0;
	int flag = 1;
	int max = 0;//记录最高成绩的下标
	int Max = 0;//记录最高成绩
	int arr_max[100] = { 0 };//最高分下标数组
	int Choose = 0;//选择查找最高分学生或不及格学生
	int subject = 0;//选择查找的科目
	Max = stu[0].score[0];
	max = 0; 

	while (1) {
		MenuSearchChoose();
		scanf("%d", &Choose);
		switch (Choose) {
			case 1:
				MenuSearchSub();
				scanf("%d", &subject);
				//以下两个函数每一个被调用三次分别寻找语数外的最高分和不及格学生信息
				//define定义的常量来控制寻找的科目
				switch (subject) {
					case 1:
						system("cls");
						printf("\n语文成绩最高的同学信息:\n");
						printf("--------------------------------------------------\n");
						Search_Max_Sub(stu,Num,CHIN);
						break;
					case 2:
						system("cls");
						printf("\n数学成绩最高的同学信息:\n");
						printf("--------------------------------------------------\n");
						Search_Max_Sub(stu, Num, MATH);
						break;
					case 3:
						system("cls");
						printf("\n英语成绩最高的同学信息:\n");
						printf("--------------------------------------------------\n");
						Search_Max_Sub(stu, Num, ENG);
						break;
					default:
						printf("选择错误!请重新选择科目!\n");
						break;
				}
				break;
			case 2:
				MenuSearchSub();
				scanf("%d", &subject);
				switch (subject) {
				case 1:
					system("cls");
					printf("\n语文成绩不及格的同学信息:\n");
					printf("--------------------------------------------------\n");
					Search_Fall_Sub(stu, Num, CHIN);
					break;
				case 2:
					system("cls");
					printf("\n数学成绩不及格的同学信息:\n");
					printf("--------------------------------------------------\n");
					Search_Fall_Sub(stu, Num, MATH);
					break;
				case 0:
					system("cls");
					printf("\n英语成绩不及格的同学信息:\n");
					printf("--------------------------------------------------\n");
					Search_Fall_Sub(stu, Num, ENG);
					break;
				default:
					printf("选择错误!请重新选择科目!\n");
					break;
				}
			case 0:
				goto end;
			default:
				printf("选择错误!请重新选择类型!\n");
				break;
				
		}
	}
end:;
}
void Change(struct student stu[100], int Num) {
	int i = 0;
	int j = 0;
	int Id = 0;
	int flag = 1;
	int position = 0;//记录找到的学号所在数组元素下标
	int wrong_hint = 0;//输入错误的提示
	int change_option = 0;//选择更改学生的信息类型选项
	int changenum = 0;
	char changename[9];
	char name[9];
	int method = 0;//以学号还是姓名查找学生
	int GoOn = 0;//判断是否继续
again1:
	MenuMethod();
	scanf("%d", &method);
again:
	switch (method) {
		case 1:
			printf("请输入学生的学号:\n");
			scanf("%d", &Id);
			for (i = 0; i < Num; i++) {
				if (stu[i].id == Id) {
					position = i;
					flag = 0;
					break;
				}
			}
			break;
		case 2:
			printf("请输入学生姓名:\n");
			scanf("%s", name);
			for (i = 0; i < Num; i++) {
				if (strcmp(stu[i].name,name) == 0) {
					position = i;
					flag = 0;
					break;
				}
			}
			break;
		case 0 :
			break;
		default:
			printf("输入错误!请输入正确选项!\n");
			goto again1;
			break;
	}
	
	if (flag == 1) {
		printf("学号输入错误!\n");
		MenuExit();
		scanf("%d", &wrong_hint);
		if (wrong_hint == 1)
			goto again;
	}
	else {
		do{
			printf("\n学生信息如下:\n");
			printf("--------------------------------------------------\n");
			printf("学号:%d\n", stu[position].id);
			printf("姓名:%s\n", stu[position].name);
			printf("语文成绩:%d\n", stu[position].score[0]);
			printf("数学成绩:%d\n", stu[position].score[1]);
			printf("英语成绩:%d\n", stu[position].score[2]);
			MenuChangeChoose();//
			scanf("%d", &change_option);
			switch (change_option) {
			case 1:
				printf("--------------------------------------------------\n");
				printf("请输入修改后的学号: ");
				scanf("%d", &changenum);
				stu[position].id = changenum;
				break;

			case 2:
				printf("--------------------------------------------------\n");
				printf("请输入修改后的姓名: ");
				scanf("%s", &changename);
				strcpy(stu[position].name, changename);
				break;
			case 3:
				printf("--------------------------------------------------\n");
				printf("请输入修改后的语文成绩: ");
				scanf("%d", &changenum);
				stu[position].score[0] = changenum;
				break;
			case 4:
				printf("--------------------------------------------------\n");
				printf("请输入修改后的数学成绩: ");
				scanf("%d", &changenum);
				stu[position].score[1] = changenum;
				break;
			case 5:
				printf("--------------------------------------------------\n");
				printf("请输入修改后的英语成绩: ");
				scanf("%d", &changenum);
				stu[position].score[2] = changenum;
				break;
			case 6:
				printf("--------------------------------------------------\n");
				printf("请输入修改后的学号: ");
				scanf("%d", &stu[position].id);
				printf("请输入修改后的姓名: ");
				scanf("%s", &changename);
				strcpy(stu[position].name, changename);
				printf("请输入修改后的语文成绩:");
				scanf("%d", &stu[position].score[0]);
				printf("请输入修改后的数学成绩: ");
				scanf("%d", &stu[position].score[1]);
				printf("请请输入修改后的英语成绩: ");
				scanf("%d", &stu[position].score[2]);
				break;
			default:
				printf("选择错误!请重新选择 \n");
				break;
			}
			printf("是否继续?输入0退出 -->");
			scanf("%d", &GoOn);
		} while (GoOn);
	}
}
void SortExchange(struct student stu[100], int Num,int j) {
	char name[9];//临时字符串
	int tem = 0;//储存交换用的临时变量
		//交换学号位置
	tem = stu[j].id;
	stu[j].id = stu[j + 1].id;
	stu[j + 1].id = tem;
	//交换姓名位置
	strcpy(name, stu[j].name);
	strcpy(stu[j].name, stu[j + 1].name);
	strcpy(stu[j + 1].name, name);
	//交换语文成绩
	tem = stu[j].score[0];
	stu[j].score[0] = stu[j + 1].score[0];
	stu[j + 1].score[0] = tem;
	//数学
	tem = stu[j].score[1];
	stu[j].score[1] = stu[j + 1].score[1];
	stu[j + 1].score[1] = tem;
	//英语
	tem = stu[j].score[2];
	stu[j].score[2] = stu[j + 1].score[2];
	stu[j + 1].score[2] = tem;
}
void Sort(struct student stu[100], int Num) {
	int i = 0;
	int j = 0;
	
	int flag = 0;
	int sort_kind = 0;//排序类型——学号,成绩
	int sort_upordown = 0;//排序方式——升序,降序
	int sort_subject = 0;//排序科目——语数外

	MenuSort();
	scanf("%d", &sort_kind);//输入排序类型
	//选择学号排序
	if (sort_kind == 1) {
		again1:
		MenuUpOrDown();
		scanf("%d", &sort_upordown);//选择排序方式
		//选择升序
		if (sort_upordown == 1) {
			for (i = 0; i < Num - 1; i++) {
				flag = 0;
				for (j = 0; j < Num - 1 - i; j++) {
					//判断:如果上一个学生结构体元素学号大于下一个 则调用交换位置函数
					if (stu[j].id > stu[j + 1].id) {
						SortExchange(stu, Num, j);
						flag = 1;
					}
				}
				if (flag == 0)//flag == 0说明if循环没有执行 此时学生结构体已经是升序的,退出循环。
					break;
			}
		}
		else if (sort_upordown == 2) {
			for (i = 0; i < Num - 1; i++) {
				flag = 0;
				for (j = 0; j < Num - 1 - i; j++) {
					if (stu[j].id < stu[j + 1].id) {
						SortExchange(stu, Num, j);
						flag = 1;
					}
				}
				if (flag == 0)					
					break;
			}
		}
		else {
			printf("选择错误!请重新选择\n");
			goto again1;
		}
	}
	else if (sort_kind == 2) {
	again:
		MenuSortSub();
		scanf("%d", &sort_subject);
		if (sort_subject == 1) {
			again2:
			MenuUpOrDown();
			scanf("%d", &sort_upordown);
			if (sort_upordown == 1) {
				for (i = 0; i < Num - 1; i++) {
					flag = 0;
					for (j = 0; j < Num - 1 - i; j++) {
						if (stu[j].score[0] > stu[j + 1].score[0]) {
							SortExchange(stu, Num, j);
							flag = 1;
						}
					}
					if (flag == 0)//flag == 0说明if循环没有执行 此时学生结构体已经是升序的,退出循环。
						break;
				}
			}
			else if (sort_upordown == 2) {
				for (i = 0; i < Num - 1; i++) {
					flag = 0;
					for (j = 0; j < Num - 1 - i; j++) {
						if (stu[j].score[0] < stu[j + 1].score[0]){
							SortExchange(stu, Num, j);
							flag = 1;
						}
					}
					if (flag == 0)
						break;
				}
			}
			else {
				printf("选择错误!请重新选择\n");
				goto again2;
			}
		}
		else if (sort_subject == 2) {
			again3:
			MenuUpOrDown();
			scanf("%d", &sort_upordown);
			if (sort_upordown == 1) {
				for (i = 0; i < Num - 1; i++) {
					flag = 0;
					for (j = 0; j < Num - 1 - i; j++) {
						if (stu[j].score[1] > stu[j + 1].score[1]) {
							SortExchange(stu, Num, j);
							flag = 1;
						}
					}
					if (flag == 0)//flag == 0说明if循环没有执行 此时学生结构体已经是升序的,退出循环。
						break;
				}
			}
			else if (sort_upordown == 2) {
				for (i = 0; i < Num - 1; i++) {
					flag = 0;
					for (j = 0; j < Num - 1 - i; j++) {
						if (stu[j].score[1] < stu[j + 1].score[1]) {
							SortExchange(stu, Num, j);
							flag = 1;
						}
					}
					if (flag == 0)
						break;
				}
			}
			else {
				printf("选择错误!请重新选择\n");
				goto again3;
			}
		}
		else if (sort_subject == 3) {
		again4:
			MenuUpOrDown();
			scanf("%d", &sort_upordown);
			if (sort_upordown == 1) {
				for (i = 0; i < Num - 1; i++) {
					flag = 0;
					for (j = 0; j < Num - 1 - i; j++) {
						if (stu[j].score[2] > stu[j + 1].score[2]) {
							SortExchange(stu, Num, j);
							flag = 1;
						}
					}
					if (flag == 0)//flag == 0说明if循环没有执行 此时学生结构体已经是升序的,退出循环。
						break;
				}
			}
			else if (sort_upordown == 2) {
				for (i = 0; i < Num - 1; i++) {
					flag = 0;
					for (j = 0; j < Num - 1 - i; j++) {
						if (stu[j].score[2] < stu[j + 1].score[2]) {
							SortExchange(stu, Num, j);
							flag = 1;
						}
					}
					if (flag == 0)
						break;
				}
			}
			else {
				printf("选择错误!请重新选择\n");
				goto again4;
			}
		}
		else {
			printf("没有这个科目!请重新选择!\n");
			goto again;
		}
	}
}
void DeleteId(struct student stu[100], int* Num) {
	int i = 0;
	int Id = 0;
	int flag = 1;
	int judge = 0;
	int pos = 0;//记录删除学生的下标
	while (1) {
		printf("请输入您想删除的学生学号:\n");
		scanf("%d", &Id);
		for (i = 0; i < *Num; i++) {
			if (stu[i].id == Id) {
				flag = 0;
				pos = i+1;		
			}
		}
		//被删除的为第i号元素,从i+1号元素开始,将下一个结构体数组内容赋值给上一个
		//删除学生信息其实是覆盖掉这一个学生所在的结构体元素下标所代表的结构体元素的内容
		for (i = pos; i < *Num; i++) {
			stu[i - 1].id = stu[i].id;
			strcpy(stu[i - 1].name, stu[i].name);
			stu[i - 1].score[CHIN] = stu[i].score[CHIN];
			stu[i - 1].score[MATH] = stu[i].score[MATH];
			stu[i - 1].score[ENG] = stu[i].score[ENG];
		}
		
		if (flag) {
			printf("抱歉,没有找到该学生!\n");
			Menu1_0();
			scanf("%d", &judge);
			if (judge)
				break;
		}
		else
			break;
	}
	*Num -= 1;//删除学生,学生总数减一
}
void DeleteName(struct student stu[100], int* Num) {
	char Name[10];
	int i = 0;
	int flag = 1;
	int judge = 0;
	int pos = 0;
	while (1) {
		printf("请输入您想删除的学生姓名:\n");
		scanf("%s", Name);
		for (i = 0; i < *Num; i++) {
			if (strcmp(Name, stu[i].name) == 0) {
				flag = 0;
				pos = i + 1;
			}
		}
		for (i = pos; i < *Num; i++) {
			stu[i - 1].id = stu[i].id;
			strcpy(stu[i - 1].name, stu[i].name);
			stu[i - 1].score[CHIN] = stu[i].score[CHIN];
			stu[i - 1].score[MATH] = stu[i].score[MATH];
			stu[i - 1].score[ENG] = stu[i].score[ENG];
		}
		if (flag) {
			printf("抱歉,没有找到该学生!\n");
			Menu1_0();
			scanf("%d", &judge);
			if (judge) {
				break;
			}
		}
		else
			break;
	}
	*Num -= 1;
}
void Insert(struct student stu[100], int* Num) {
	//插入学生,其实就是增加学生,先把他加入到尾行,然后可以通过排序改变它的位置
	//原本学生数是Num但数组下标最大到Num-1 所以插入学生的下标就是Num
	printf("--------------------------------------------------\n");
	printf("请输入学号:");
	scanf("%d", &stu[*Num].id);
	printf("请输入姓名:");
	scanf("%s", stu[*Num].name);
	printf("请输入语文成绩:");
	scanf("%d", &stu[*Num].score[CHIN]);
	printf("请输入数学成绩:");
	scanf("%d", &stu[*Num].score[MATH]);
	printf("请输入英语成绩:");
	scanf("%d", &stu[*Num].score[ENG]);
	*Num += 1;
}

void Average(struct student stu[100], int Num) {
	int i = 0;
	float aver = 0;
	printf("所有学生平均成绩如下:\n");
	for (i = 0; i < Num; i++) {
		aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3;
		printf("--------------------------------------------------\n");
		printf("%d", stu[i].id);
		printf("   %s", stu[i].name);
		printf("   %.2f\n", aver);
	}
	system("pause");
}
void Sum(struct student stu[100], int Num) {
	int i = 0;
	int pass = 60;
	int max_ch= 0;//语文最高成绩
	int max_math = 0;//数学最高成绩
	int max_en = 0;//英语最高成绩

	int ch_max_num = 0;//语文最高分人数
	int math_max_num = 0;//数学最高分人数
	int en_max_num = 0;//英语最高分人数

	int ch_fall_num = 0;//语文不及格人数
	int math_fall_num = 0;//数学不及格人数
	int en_fall_num = 0;//英语不及格人数
	max_ch = stu[0].score[CHIN];
	max_math = stu[0].score[MATH];
	max_en = stu[0].score[ENG];
		//计算各科不及格人数
	for (i = 0; i < Num; i++) {
		if (stu[i].score[CHIN] < pass)
			ch_fall_num++;
		if (stu[i].score[MATH] < pass)
			math_fall_num++;
		if (stu[i].score[ENG] < pass)
			en_fall_num++;
	}
	//找出各科成绩最高分
	for (i = 1; i < Num; i++) {
		if (max_ch < stu[i].score[CHIN]) 
			max_ch = stu[i].score[CHIN];
		if (max_math < stu[i].score[MATH])
			max_math = stu[i].score[MATH];
		if (max_en < stu[i].score[ENG])
			max_en = stu[i].score[ENG];
		//计算各科最高分人数
		for (i = 0; i < Num; i++) {
			if (stu[i].score[CHIN] == max_ch)
				ch_max_num++;
			if (stu[i].score[MATH] == max_math)
				math_max_num++;
			if (stu[i].score[ENG] == max_en)
				en_max_num++;
	}
	}
	printf("每门课最高分和不及格人数如下:\n");
	printf("--------------------------------------------------\n");
	printf("语文课最高分为:%d 总人数: %d  不及格人数: %d\n", max_ch, ch_max_num,ch_fall_num);
	printf("数学课最高分为:%d 总人数: %d  不及格人数: %d\n", max_math, math_max_num,math_fall_num);
	printf("英语课最高分为:%d 总人数: %d  不及格人数: %d\n", max_en, en_max_num,en_fall_num);
	system("pause");
}

void Print(struct student stu[100], int Num) {
	int i = 0;
	printf("全体学生信息如下:\n");
	//顺序一次打印全体学生
	for (i = 0; i < Num; i++) {
		printf("---------------------------------------------------------------------------\n");
		printf("学号: %d  ", stu[i].id);
		printf("姓名: %s  ", stu[i].name);
		printf("语文成绩: %d  ", stu[i].score[0]);
		printf("数学成绩: %d  ", stu[i].score[1]);
		printf("英语成绩:%d\n", stu[i].score[2]);
	}
	system("pause");
	
}



以上就是我的全部代码,谢谢观看!

有什么问题或者指教可以评论 与我讨论。

发布了19 篇原创文章 · 获赞 88 · 访问量 3271

猜你喜欢

转载自blog.csdn.net/qq_44954010/article/details/103726721