【C语言基础】C语言静态学生成绩管理系统

system.h

#pragma once

#include<stdio.h>
#include<stdlib.h>
#include<stddef.h>
#include<string.h>

#define ID_SIZE 20
#define NAME_SIZE 20
#define STUDENT_NUM 1000

//定义一个学生信息结构体
typedef struct Student{
	char ID[ID_SIZE];                //学号
	char Name[NAME_SIZE];     //姓名
	size_t Math;                          //数学成绩
	size_t English;                      //英语成绩
	size_t C;                             //C语言成绩
	float average;                     //平均成绩
}Student;

//创建一个顺序表
typedef struct Seqlist{
	Student Data[STUDENT_NUM];//一个内容为结构体的数组
	size_t size;                                   //顺序表大小
}Seqlist;

//初始化顺序表
void StudentInit(Seqlist* seq);
//学生成绩平均值
void Student_Average(Seqlist* seq);
//插入学生信息
void Student_Info_Insert(Seqlist* seq);
//使用姓名查询学生信息
int Student_Search_Name(Seqlist* seq, char Name[]);
//使用ID查询学生信息
int Student_Search_ID(Seqlist*seq, char ID[]);
//打印单个学生信息
void DisPlaySingleInfo(Seqlist* seq, int index);
//查找学生信息
void Student_Search(Seqlist* seq);
//查找数学最高成绩并且打印该学生名单
void Student_high_Math(Seqlist* seq);
//查找英语最高成绩并且打印该学生名单
void Student_high_English(Seqlist* seq);
//查找C语言最高成绩并且打印该学生名单
void Student_high_C(Seqlist* seq);
//查找最高分的学生
void Studen_high_Search(Seqlist* seq);
//打印高数不及格的学生
void Student_fail_math(Seqlist* seq);
//打印英语不及格学生
void Student_fail_english(Seqlist* seq);
//打印C语言不及格学生
void Student_fail_C(Seqlist* seq);
//查找不及格的学生
void Student_fali_Search(Seqlist* seq);
//修改学生信息
void Student_Modify(Seqlist*seq);
//修改学生信息界面
void Change_StudentInfo(Seqlist* seq);
//删除学生信息
void Student_Delete(Seqlist* seq);
//统计英语课不及格人数
void Fail_English(Seqlist* seq);
//统计数学课不及格人数
void Fail_Math(Seqlist* seq);
//统计C语言课不及格人数
void Fail_C(Seqlist* seq);
//打印所有学生信息
void Student_print(Seqlist* seq);



system.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "System.h"

//初始化顺序表
void InitSeqlist(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	seq->size = 0;
}

//学生成绩平均值
void Student_Average(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	int  i = 0;
	for (; i < seq->size; i++){
		seq->Data[i].average =  (seq->Data[i].Math + seq->Data[i].English + seq->Data[i].C) / 3;
	}
}

//插入学生信息的
void Student_Info_Insert(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	while (1){
		printf("请输入学生学号:");
		scanf("%s\n", seq->Data[seq->size].ID);

		printf("请输入学生姓名:");
		scanf("%s\n", seq->Data[seq->size].Name);

		printf("请输入学生数学成绩:");
		scanf("%d\n", &seq->Data[seq->size].Math);

		printf("请输入学生英语成绩:");
		scanf("%d\n", &seq->Data[seq->size].English);

		printf("请输入学生C语言成绩:");
		scanf("%d\n", &seq->Data[seq->size].C);
		
		seq->size++;

		printf("是否继续录入学生信息?\n");
		printf("y/n\n");
		if (getchar() == 'n'){
			break;
		}
	}
}

//使用姓名查询学生信息
int Student_Search_Name(Seqlist* seq, char Name[]){
	if (seq == NULL){
		return;
	}
	int n = 0;
	for (; n < seq->size; n++){
		if (strcmp(seq->Data[n].Name, Name) == 0){
			return n;
		}
		else{
			return -1;
		}
	}
	return -1;
}

//使用ID查询学生信息
int Student_Search_ID(Seqlist*seq, char ID[]){
	if (seq == NULL){
		return;
	}
	int n = 0;
	for (; n <= seq->size - 1; n++){
		if (strcmp(seq->Data[n].ID, ID) == 0){
			return n;
		}
		else{
			return -1;
		}
	}

}

//打印单个学生信息
void DisPlaySingleInfo(Seqlist* seq, int index){
	if (seq == NULL){
		return;
	}
	printf("%10s %10s %8s  %8s  %8s  %10s \n", "学号", "姓名", "数学成绩", "英语成绩", "C语言成绩", "平均成绩");
	printf("----------------------------------------------------------------------------\n");
	printf("%10s %10s %8.2lu %8lu %8.2lu %10.2lu \n", seq->Data[index].ID, seq->Data[index].Name,
		                                                                           seq->Data[index].Math, seq->Data[index].English,
																		           seq->Data[index].C, seq->Data[index].average);

}

//打印学生信息
void DisplayfailStudent(Seqlist* seq, int index){
	if (seq == NULL){
		return;
	}
	printf("%10s %10s %8.2lu %8lu %8.2lu  \n", seq->Data[index].ID, 
		                                                               seq->Data[index].Name,
		                                                               seq->Data[index].Math, 
																	   seq->Data[index].English,
																	   seq->Data[index].C);

}

//查询
void Student_Search(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	int i = 0;
	printf("请输入您查找的方式:\n");
	printf("1.姓名  2.ID\n");
	scanf("%d", &i);
	switch (i){
	case 1:
		printf("请输入查询姓名:");
		char Name[20];
		scanf("%s", &Name);
		int index = Student_Search_Name(seq, Name);
		if (index == -1){
			printf("查无此人\n");
		}
		else{
			printf("查询的学生信息为:\n");
			DisPlaySingleInfo(seq, index);
		}
		break;
	case 2:
		printf("请输入查询ID:");
		char ID[20];
		scanf("%s", &ID);
		int index2 = Student_Search_ID(seq, ID);
		if (index2 == -1){
			printf("查无此人\n");
		}
		else{
			printf("查询的学生信息为:\n");
			DisPlaySingleInfo(seq, index2);
			break;
	default:
		break;
		}
	}
}

//查找数学最高成绩并且打印该学生名单
void Student_high_Math(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	int i = 0;
	int k = 0;
	for (i = 0; i < seq->size; i++){
		if (seq->Data[i].Math > seq->Data[k].Math){
			k = i;
		}
	}
	DisPlaySingleInfo(seq, k);
}

//查找英语最高成绩并且打印该学生名单
void Student_high_English(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	int i = 0;
	int k = 0;
	for (i = 0; i < seq->size; i++){
		if (seq->Data[i].English > seq->Data[k].English){
			k = i;
		}
	}
	DisPlaySingleInfo(seq, k);
}

//查找C语言最高成绩并且打印该学生名单
void Student_high_C(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	int i = 0;
	int k = 0;
	for (i = 0; i < seq->size; i++){
		if (seq->Data[i].C > seq->Data[k].C){
			k = i;
		}
	}
	DisPlaySingleInfo(seq, k);
}

//查找各科最高成绩并打印出来
void Studen_high_Search(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	printf("数学成绩最高学生为:\n");
	Student_high_Math(seq);
	printf("英语成绩最高学生为:\n");
	Student_high_English(seq);
	printf("C语言成绩最高学生为:\n");
	Student_high_C(seq);
}

//打印高数不及格的学生
void Student_fail_math(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	int  i = 0;
	for (; i < seq->size; i++){
		if (seq->Data[i].Math < 60){
			DisplayfailStudent(seq, i);
		}
	}
}

//打印英语不及格学生
void Student_fail_english(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	int  i = 0;
	for (; i < seq->size; i++){
		if (seq->Data[i].English < 60){
			DisplayfailStudent(seq, i);
		}
	}
}

//打印C语言不及格学生
void Student_fail_C(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	int  i = 0;
	for (; i < seq->size; i++){
		if (seq->Data[i].C < 60){
			DisplayfailStudent(seq, i);
		}
	}
}

//查找各科不及格学生并打印出来
void Student_fali_Search(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	printf("数学不及格学生为:\n");
	printf("%10s %10s %8s  %8s  %8s  %10s \n", "学号", "姓名", "数学成绩", "英语成绩", "C语言成绩", "平均成绩");
	printf("----------------------------------------------------------------------------\n");
	Student_fail_math(seq);

	printf("英语不及格学生为:\n");
	printf("%10s %10s %8s  %8s  %8s  %10s \n", "学号", "姓名", "数学成绩", "英语成绩", "C语言成绩", "平均成绩");
	printf("----------------------------------------------------------------------------\n");
	Student_fail_english(seq);
	printf("C语言不及格学生为:\n");
	printf("%10s %10s %8s  %8s  %8s  %10s \n", "学号", "姓名", "数学成绩", "英语成绩", "C语言成绩", "平均成绩");
	printf("----------------------------------------------------------------------------\n");
	Student_fail_C(seq);
}

//修改学生信息
void Student_Modify(Seqlist*seq, size_t index){
	if (seq == NULL){
		return;
	}
	printf("请输入新值\n");
	printf("请输入需要修改的学号:\n");
	scanf("%s", seq->Data[index].ID);

	printf("请输入需要修改的姓名:\n");
	scanf("%s", seq->Data[index].Name);

	printf("请输入需要修改的数学成绩:\n");
	scanf("%s", &seq->Data[index].Math);

	printf("请输入需要修改的英语成绩:\n");
	scanf("%s", &seq->Data[index].English);

	printf("请输入需要修改的C语言成绩:\n");
	scanf("%s", &seq->Data[index].C);

}

//修改学生信息界面
void Change_StudentInfo(Seqlist* seq){
	if(seq == NULL){
		return;
	}
	int i = 0;
	printf("请您选择输入需要修改信息的学生ID/姓名\n");
	printf("1.姓名  2.ID\n");
	scanf("%d", &i);
	switch (i){
	case 1:
		printf("请输入需要修改信息的学生姓名:");
		char Name[20];
		scanf("%s", &Name);
		int index = Student_Search_Name(seq, Name);
		if (index == -1){
			printf("查无此人\n");
		}
		else{
			printf("您想要修改学生的信息为:\n");
			DisPlaySingleInfo(seq, index);
			Student_Modify(seq, index);
		}
		break;
	case 2:
		printf("请输入需要修改信息的学生ID:");
		char ID[20];
		scanf("%s", &ID);
		int index2 = Student_Search_ID(seq, ID);
		if (index2 == -1){
			printf("查无此人\n");
		}
		else{
			printf("您想要修改学生的信息为:\n");
			DisPlaySingleInfo(seq, index2);
			Student_Modify(seq, index2);
			break;
	default:
		break;
		}
	}
}

//删除学生信息
void Student_Delete(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	int i = 0;
	while (1){
		printf("请输入需要删除学生的ID:");
		char ID[20];
		scanf("%s", &ID);
		int ret = Student_Search_ID(seq, ID);
		if (ret == -1){
			printf("查无此人\n");
			break;
		}
		else{
			printf("您要删除的学生信息为:\n");
			DisPlaySingleInfo(seq, ret);
			printf("请确定是否删除,如果是请输入0\n");
			int tag;
			scanf("%d", &tag);
			if (tag == 0)
			{
				for (i = ret; i < seq->size; i++){
					seq->Data[i] = seq->Data[i + 1];
				}
				seq->size--;
				printf("删除成功\n");
			}
		}
		printf("是否继续,如果是,请输入0\n");
		int flag = 0;
		scanf("%d", &flag);
		if (flag != 0){
			break;
		}
	}
}

//统计英语课不及格人数
void Fail_English(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	printf("英语课不及格人数为:\n");
	int i = 0;
	int count = 0;
	for (; i <= seq->size - 1; i++){
		if (seq->Data[i].English < 60){
			count++;
		}
	}
	printf("%d\n", count);
}

//统计数学课不及格人数
void Fail_Math(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	printf("英语课不及格人数为:\n");
	int i = 0;
	int count = 0;
	for (; i <= seq->size - 1; i++){
		if (seq->Data[i].Math < 60){
			count++;
		}
	}
	printf("%d\n", count);
}

//统计C语言课不及格人数
void Fail_C(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	printf("英语课不及格人数为:\n");
	int i = 0;
	int count = 0;
	for (; i <= seq->size - 1; i++){
		if (seq->Data[i].C < 60){
			count++;
		}
	}
	printf("%d\n", count);
}


//打印所有学生信息
void Student_print(Seqlist* seq){
	if (seq == NULL){
		return;
	}
	int i = 0;
	printf("%10s %10s %8s  %8s  %8s  %10s \n", "学号", "姓名", "数学成绩", "英语成绩", "C语言成绩", "平均成绩");
	printf("----------------------------------------------------------------------------\n");
	for (; i < seq->size; i++){
		printf("%10s %10s %8.2lu %8lu %8.2lu %10.2lf \n", seq->Data[i].ID, seq->Data[i].Name,
			seq->Data[i].Math, seq->Data[i].English,
			seq->Data[i].C, seq->Data[i].average);
	}
}


test.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"System.h"

void Menu(){
	printf("///\n");
	printf("//学生成绩管理系统/\n");
	printf("///1.输入学生成绩//\n");
	printf("///2.查询学生成绩//\n");
	printf("///3.更新学生成绩//\n");
	printf("///4.统计学生成绩//\n");
	printf("///5.显示学生成绩//\n");
	printf("///6.退出系统///\n");
	printf("///\n");
}

void test(){
	Seqlist stu;
	InitSeqlist(&stu);
	int i = 0;
	do{
		Menu();
		printf("请选择:\n");
		scanf("%d\n", &i);
		switch (i){
		case 1:
			Student_Info_Insert(&stu);
			Student_Average(&stu);
			break;
		case 2:
			printf("\n");
			printf("/1.查询学生信息//\n");
			printf("/2.显示各科最高分学生信息\n");
			printf("/3.显示各科不及格学生信息\n");
			printf("///\n");
			int i = 0;
			scanf("%d", &i);

			if (1 == i){
				Student_Search(&stu);
			}else if (2 == i){
				Studen_high_Search(&stu);
			}else if(3 == i){
				Student_fali_Search(&stu);
			}
			break;
		case 3:
			printf("///\n");
			printf("///1.修改学生信息//\n");
			printf("///2.删除学生信息//\n");
			printf("///3.插入学生信息//\n");
			printf("///\n");
			printf("请选择:\n");
			int j = 0;
			scanf("%d", &j);
			if (1 == j){
				Change_StudentInfo(&stu);
			}
			if (2 == j){
				Student_Delete(&stu);
			}
			if (3 == j){
				Student_Info_Insert(&stu);
				Student_Average(&stu);
			}
			break;
		case 4:
			Fail_Math(&stu);
			Fail_English(&stu);
			Fail_C(&stu);
			break;
		case 5:
			Student_Average(&stu);
			Student_print(&stu);
			break;
		case 6:
			exit(0);
			break;
		default:
			exit(0);
			break;
		}
	} while (i);

}
int main(){
	test();
	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值