#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100//宏定义
#define ENGLISH_SCORES 2 // 英语成绩数组长度定义
void bookStudents();//显示学生所有信息函数调用声明
void deleteStudent(int nm);//删除函数调用声明
void caffeeStudent();//修改学生信息(按ID)
void sortStudents();//排序函数的声明
//学生信息结构体
typedef struct Student {
int id;//ID
char name[50];//名字
float score;//语文成绩
float yingyu[ENGLISH_SCORES]; //英语成绩
float yuwen;//数学成绩
float shuxue;//物理成绩
} Student;
//初始值赋值
Student newStudent = { 0,"",0,0,0 };
Student students[MAX_STUDENTS];
int miomi = 0;//计算当前储存人数
//添加学生信息结构体
void addStudent() {
int i;
Student newStudent;
if (miomi >= MAX_STUDENTS) {
printf("学生记录已满,无法继续添加勒。\n");
return;
}
printf("请输入学生的ID呢: ");
scanf_s("%d", &newStudent.id);
getchar(); // 清除输入缓冲区中的换行符
if(newStudent.id)
printf("请输入学生的姓名呢: ");
fgets(newStudent.name, sizeof(newStudent.name), stdin);
newStudent.name[strcspn(newStudent.name, "\n")] = '\0'; // 去掉末尾的换行符
while (1) {
printf("请输入学生的语文成绩讷: ");
scanf_s("%f", &newStudent.score);
if (newStudent.score >= 0 && newStudent.score <= 100) break;
printf("成绩必须在0到100之间,请重新输入呀!\n");
}
for (i = 0; i < ENGLISH_SCORES; i++) {
while (1) {
printf("请输入学生的英语成绩%d讷: ",i+1);
scanf_s("%f", &newStudent.yingyu[i]);
if (newStudent.yingyu[i] >= 0 && newStudent.yingyu[i] <= 100) break;
printf("成绩必须在0到100之间,请重新输入呀!\n");
}
}
while (1) {
printf("请输入学生的数学成绩讷: ");
scanf_s("%f", &newStudent.yuwen);
if (newStudent.yuwen >= 0 && newStudent.yuwen <= 100) break;
printf("成绩必须在0到100之间,请重新输入呀!\n");
}
while (1) {
printf("请输入学生的物理成绩讷: ");
scanf_s("%f", &newStudent.shuxue);
if (newStudent.shuxue >= 0 && newStudent.shuxue <= 100) break;
printf("成绩必须在0到100之间,请重新输入呀!\n");
}
students[miomi++] = newStudent;
printf("学生信息添加成功!\n");
return;
}
//管理员界面结构体
void diplawStudents() {
int h, nm;
printf("正在进入系统界面\n ");
while (1) {
printf("===============================\n");
printf("\n==========管理员系统界面========\n");
printf("=====1. 删除学生信息(按ID)=====\n");
printf("=====2. 修改学生信息(按ID)=====\n");
printf("=====3. 显示所有学生信息 =====\n");
printf("=====4. 返回学生界面 =====\n");
printf("=====5. 排序学生信息 =====\n");
printf("===============================\n");
printf("请选择操作序号: ");
h = 0;
scanf_s("%d", &h);
switch (h) {
case 1:
printf("请输入要删除学生的ID信息: ");
nm = 0;
scanf_s("%d", &nm);
deleteStudent(nm);//指向删除函数
break;
case 2:
caffeeStudent();//修改学生信息(按ID)
break;
case 3:
bookStudents();//显示所有学生信息(按ID)
break;
case 4:
printf("再见管理员,欢迎您下次进入\n");//退出程序
return;
break;
case 5:
sortStudents();//排序函数的引用
break;
default:
printf("无效的选择呢,请您重新选择。\n");
}
}
}
//显示所有学生信息结构体
void bookStudents() {
int i, j;
if (miomi == 0) {
printf("目前没有学生信息。\n");
return;
}
printf("学生的总人数有%d\n", miomi);
for (i = 0; i < miomi; i++) {
printf("学号:%d\t姓名:%s\t", students[i].id, students[i].name);
for (j = 0; j < ENGLISH_SCORES; j++) {
printf("英语成绩%d:",j+1);
printf("%.2f ", students[i].yingyu[j]);
}
printf("\t语文:%.2f\t数学:%.2f\t物理:%.2f\n",
students[i].score, students[i].yuwen, students[i].shuxue);
}
}
//搜索学生的信息结构体
void delkesStudent() {
int i, id;
printf("请输入要搜索学生的ID信息讷: ");
scanf_s("%d", &id);
for (i = 0; i < miomi; ++i) {
if (id == students[i].id) {
printf("要搜索学生的ID信息为:\n");
printf("学号:%d\t名字:%s\t语文成绩:%.2f\t数学成绩:%.2f\t物理成绩:%.2f\t", students[i].id, students[i].name, students[i].score, students[i].yuwen, students[i].shuxue);
printf("英语成绩1:");
printf("%.2f \t", students[i].yingyu[0]);
printf("英语成绩2:");
printf("%.2f \n", students[i].yingyu[1]);
break;
}
}
}
//删除学生信息结构体
void deleteStudent(int id) {
int index = -1;
int i;
for (i = 0; i < miomi; ++i) {
if (students[i].id == id) {
index = i;
break;
}
}
if (index != -1) {
int j;
for (j = index; j < miomi - 1; ++j)
students[j] = students[j + 1];
--miomi;
printf("删除成功。\n");
}
else {
printf("未找到指定的学生编号。\n");
}
}
//计算平均分结构体
void Studentyyuu() {
float total = 0;
float totbl = 0;
float totcl = 0;
float totfl[ENGLISH_SCORES] = { 0 };
float totgl[ENGLISH_SCORES] = { 0 };
int i, j;
if (miomi == 0) {
printf("暂无数据计算平均分。\n");
return;
}
for (i = 0; i < miomi; i++) {
for (j = 0; j < ENGLISH_SCORES; j++) {
totfl[j] += students[i].yingyu[j];//英语成绩
}
for (i = 0; i < miomi; ++i) {//语文
total += students[i].score;
}
for (i = 0; i < miomi; ++i) {//数学
totbl += students[i].shuxue;
}
for (i = 0; i < miomi; ++i) {//物理
totcl += students[i].yuwen;
}
printf("当前所有学生的语文平均分为:%.2f 分.\n", total / miomi);
printf("当前所有学生的英语平均分为:%.2f 分.\n", totfl[0] / miomi);
printf("当前所有学生的数学平均分为:%.2f 分.\n", totbl / miomi);
printf("当前所有学生的物理平均分为:%.2f 分.\n", totcl / miomi);
return;
}
}
//修改学生信息结构体
void caffeeStudent() {
int i, id, j,h;
printf("请输入要修改学生的ID信息: ");
scanf_s("%d", &id);
for (i = 0; i < miomi; ++i) {
if (id == students[i].id) {
while (1) {
printf("\n=========修改界面==============\n");
printf("======1. 修改学生ID ========\n");
printf("======2. 修改学生姓名 ========\n");
printf("======3. 修改学生成绩 ========\n");
printf("======4. 返回上一个程序========\n");
printf("===============================\n");
printf("请选择操作序号: ");
j = 0;
scanf_s("%d", &j);
if (j == 4) break;
switch (j) {
case 1:
printf("请输入修改后学生的ID: ");
scanf_s("%d", &students[i].id);
getchar(); // 清除输入缓冲区中的换行符
break;
case 2:
printf("请输入修改后学生的姓名: ");
fgets(students[i].name, sizeof(students[i].name), stdin);
students[i].name[strcspn(students[i].name, "\n")] = '\0'; // 去掉末尾的换行符
break;
case 3:
while (1) {
printf("请输入修改后学生的语文成绩: ");
scanf_s("%f", &students[i].score);
if (students[i].score >= 0 && students[i].score <= 100) break;
printf("成绩必须在0到100之间,请重新输入!\n");
}
for (h = 0; h < ENGLISH_SCORES; h++) {
while (1) {
printf("请输入修改后学生的英语成绩%d: ", h + 1);
scanf_s("%f", &students[i].yingyu[h]);
if (students[i].yingyu[h] >= 0 && students[i].yingyu[h] <= 100) break;
printf("成绩必须在0到100之间,请重新输入!\n");
}
}
while (1) {
printf("请输入修改后学生的数学成绩: ");
scanf_s("%f", &students[i].yuwen);
if (students[i].yuwen >= 0 && students[i].yuwen <= 100) break;
printf("成绩必须在0到100之间,请重新输入!\n");
}
while (1) {
printf("请输入修改后学生的物理成绩: ");
scanf_s("%f", &students[i].shuxue);
if (students[i].shuxue >= 0 && students[i].shuxue <= 100) break;
printf("成绩必须在0到100之间,请重新输入!\n");
}
break;
default:
printf("无效的选择呢,请您重新选择。\n");
}
}
printf("学生信息修改成功!\n");
return;
}
continue;
}
}
//输出排序结果
void paixuestudent(int ii) {
int i, j;
Student temp;
// 根据选择的科目进行排序
for (i = 0; i < miomi - 1; i++) {
for (j = 0; j < miomi - i - 1; j++) {
float currentScore, nextScore;
switch (ii) {
case 1: // 语文成绩
currentScore = students[j].score;
nextScore = students[j + 1].score;
break;
case 2: // 数学成绩
currentScore = students[j].shuxue;
nextScore = students[j + 1].shuxue;
break;
case 3: // 英语1成绩
currentScore = students[j].yingyu[0];
nextScore = students[j + 1].yingyu[0];
break;
case 4: // 物理成绩
currentScore = students[j].yuwen;
nextScore = students[j + 1].yuwen;
break;
case 5: // 英语2成绩
currentScore = students[j].yingyu[1];
nextScore = students[j + 1].yingyu[1];
break;
default:
return;
}
if (currentScore < nextScore) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
// 显示排序后的成绩
printf("==== 按成绩类型排序的结果 ====\n");
for (i = 0; i < miomi; i++) {
printf("学号:%d\t姓名:%s\t", students[i].id, students[i].name);
switch (ii) {
case 1: // 语文成绩
printf("语文成绩:%.2f\n", students[i].score);
break;
case 2: // 数学成绩
printf("数学成绩:%.2f\n", students[i].shuxue);
break;
case 3: // 英语成绩
printf("英语1成绩:%.2f\t", students[i].yingyu[0]);
printf("英语2成绩:%.2f\n", students[i].yingyu[1]);
break;
case 4: // 物理成绩
printf("物理成绩:%.2f\n", students[i].yuwen);
break;
}
}
}
// 排序学生信息
void sortStudents() {
int choice;
printf("\n==== 排序选项 ====\n");
printf("1. 按语文成绩排序\n");
printf("2. 按数学成绩排序\n");
printf("3. 按英语成绩排序\n");
printf("4. 按物理成绩排序\n");
printf("请选择排序内容:");
scanf_s("%d", &choice);
switch (choice) {
case 1:
paixuestudent(1); // 语文成绩
break;
case 2:
paixuestudent(2); // 数学成绩
break;
case 3:
paixuestudent(3); // 英语1成绩
paixuestudent(5); // 英语2成绩
break;
case 4:
paixuestudent(4); // 物理成绩
break;
default:
printf("无效的选择!\n");
return;
}
}
//主函数结构体
int main() {
int choice;
int u_u = 0;
while (1) {
printf("=============================\n");
printf("\n==== 学生信息管理系统 =======\n");
printf("=====1. 添加学生信息=========\n");
printf("=====2. 进入管理员面板=======\n");
printf("=====3. 计算平均分===========\n");
printf("=====4. 搜索学生的信息=======\n");
printf("=====5. 退出程序=============\n");
printf("=============================\n");
printf("请选择操作序号: ");
scanf_s("%d", &choice);
switch (choice) {
case 1://添加学生信息
addStudent();
break;
case 2://进入管理员面板
diplawStudents();//进入管理员界面结构体
break;
case 3://计算平均分
Studentyyuu();//进入计算平均分结构体
break;
case 4://搜索学生的信息
delkesStudent();
break;
case 5://退出程序
printf("再见宝贝,欢迎您下次使用系统\n");
return 0;
break;
default://无效的选择
printf("无效的选择呢,请您重新选择。\n");
}
}
}对这个学生成绩管理系统进行分析和评估,确定该系统所需的功能(建立在我给代码的基础上进行说明,不需要你加上其他功能,要400字左右)