#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100//宏定义
#define ENGLISH_SCORES 1 // 新增英语成绩数组长度定义
void displayStudents();//显示学生所有信息函数调用声明
void deleteStudent(int nm);//删除函数调用声明
void caffeeStudent();//修改学生信息(按ID)
//学生信息结构体
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("%d", &newStudent.id);
getchar(); // 清除输入缓冲区中的换行符
printf("请输入学生的姓名: ");
fgets(newStudent.name, sizeof(newStudent.name), stdin);
newStudent.name[strcspn(newStudent.name, "\n")] = '\0'; // 去掉末尾的换行符
printf("请输入学生的语文成绩: ");
scanf("%f", &newStudent.score);
for(i=0; i<ENGLISH_SCORES; i++){
printf("请输入学生的英语成绩:");
scanf("%f", &newStudent.yingyu[i]);
}
printf("请输入学生的数学成绩: ");
scanf("%f", &newStudent.yuwen);
printf("请输入学生的物理成绩: ");
scanf("%f", &newStudent.shuxue);
students[miomi++] = newStudent;
printf("学生信息添加成功!\n");
return ;
}
//管理员界面结构体
void diplawStudents(){
int h,nm;
printf("正在进入系统界面\n ");
while (1) {
printf("\n==== 管理员系统界面 ====\n");
printf("1. 删除学生信息(按ID)\n");
printf("2. 修改学生信息(按ID)\n");
printf("3. 显示所有学生信息\n");
printf("4. 返回学生界面\n");
printf("=========================\n");
printf("请选择操作序号: ");
h=0;
scanf("%d",&h);
switch(h) {
case 1:
printf("请输入要删除学生的ID信息: ");
nm=0;
scanf("%d",&nm);
deleteStudent(nm);//指向删除函数
break;
case 2:
caffeeStudent();//修改学生信息(按ID)
break;
case 3:
displayStudents();//显示所有学生信息(按ID)
break;
case 4:
printf("再见管理员,欢迎您下次进入\n");//退出程序
return ;
break;
default:
printf("无效的选择呢,请您重新选择。\n");
}
}
}
//显示所有学生信息结构体
void displayStudents() {
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);
printf("英语成绩:");
for(j=0; j<ENGLISH_SCORES; j++){
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,j;
printf("请输入要搜索学生的ID信息: ");
scanf("%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("英语成绩:");
for(j=0; j<ENGLISH_SCORES; j++){
printf("%.2f ", 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 calculateAverageScore(){
float total=0 ;
float totbl=0 ;
float totcl=0 ;
float totfl[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[1]/miomi);
printf("当前所有学生的数学平均分为:%.2f 分.\n",totbl/miomi );
printf("当前所有学生的物理平均分为:%.2f 分.\n",totcl/miomi );
return ;
}
}
//修改学生信息结构体
void caffeeStudent(){
int i,id,j,f;
printf("请输入要修改学生的ID信息: ");
scanf("%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("%d",&j);
if(j == 4) break;
switch(j) {
case 1:
printf("请输入修改后学生的ID: ");
scanf("%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:
printf("请输入修改后学生的语文成绩: ");
scanf("%f", &students[i].score);
printf("请输入修改后学生的英语成绩: ");
scanf("%f", &students[i].yingyu[1]);
printf("请输入修改后学生的数学成绩: ");
scanf("%f", &students[i].shuxue);
printf("请输入修改后学生的物理成绩: ");
scanf("%f", &students[i].yuwen);
break;
default:
printf("无效的选择呢,请您重新选择。\n");
}
}
printf("学生信息修改成功!\n");
return ;
}
continue;
}
}
//主函数结构体
int main() {
int choice;
int u_u=0;
while (1) {
printf("\n==== 学生信息管理系统 ====\n");
printf("1. 添加学生信息\n");
printf("2. 进入管理员面板\n");
printf("3. 计算平均分\n");
printf("4. 搜索学生的信息\n");
printf("5. 退出程序\n");
printf("=========================\n");
printf("请选择操作序号: ");
scanf("%d", &choice);
switch(choice) {
case 1://添加学生信息
addStudent();
break;
case 2://进入管理员面板
diplawStudents();//进入管理员界面结构体
break;
case 3://计算平均分
calculateAverageScore();//进入计算平均分结构体
break;
case 4://搜索学生的信息
delkesStudent();
break;
case 5://退出程序
printf("再见宝贝,欢迎您下次使用系统\n");
return 0;
break;
default://无效的选择
printf("无效的选择呢,请您重新选择。\n");
}
}
}为该课设添加一个排序功能