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;
}