#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX_STUDENT_NUM 100
struct Student {
char name[20];
char id[20];
char dormitory[20];
char qq[20];
char phone[20];
int cet_score;
};
struct Student students[MAX_STUDENT_NUM];
int student_num = 0;
void add_student() {
if (student_num >= MAX_STUDENT_NUM) {
printf("学生已满,无法添加!\n");
return;
}
struct Student new_student;
printf("请输入学生姓名:");
scanf("%s", new_student.name);
printf("请输入学生学号:");
scanf("%s", new_student.id);
printf("请输入学生宿舍号:");
scanf("%s", new_student.dormitory);
printf("请输入学生QQ号码:");
scanf("%s", new_student.qq);
printf("请输入学生电话号码:");
scanf("%s", new_student.phone);
printf("请输入学生CET-4成绩:");
scanf("%d", &new_student.cet_score);
students[student_num] = new_student;
student_num++;
printf("学生 %s 添加成功!\n", new_student.name);
}
void delete_student() {
printf("请输入要删除的学生姓名:");
char name[20];
scanf("%s", name);
int index = -1;
for (int i = 0; i < student_num; i++) {
if (strcmp(students[i].name, name) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("学生 %s 不存在!\n", name);
return;
}
struct Student deleted_student = students[index];
for (int i = index; i < student_num - 1; i++) {
students[i] = students[i + 1];
}
student_num--;
printf("学生 %s 的信息已被删除!\n", deleted_student.name);
}
void show_all_students() {
printf("姓名\t学号\t宿舍\tQQ号码\t\t电话号码\tCET-4成绩\n");
for (int i = 0; i < student_num; i++) {
printf("%s\t%s\t%s\t%s\t%s\t%d\n", students[i].name, students[i].id, students[i].dormitory,
students[i].qq, students[i].phone, students[i].cet_score);
}
}
void sort_by_phone() {
for (int i = 0; i < student_num - 1; i++) {
for (int j = 0; j < student_num - i - 1; j++) {
if (strcmp(students[j].phone, students[j + 1].phone) > 0) {
struct Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("按电话号码排序后的学生信息:\n");
show_all_students();
}
void sort_by_name() {
for (int i = 0; i < student_num - 1; i++) {
for (int j = 0; j < student_num - i - 1; j++) {
if (strcmp(students[j].name, students[j + 1].name) > 0) {
struct Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("按姓名排序后的学生信息:\n");
show_all_students();
}
void search_phone_by_name() {
printf("请输入要查询的学生姓名:");
char name[20];
scanf("%s", name);
int index = -1;
for (int i = 0; i < student_num; i++) {
if (strcmp(students[i].name, name) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("学生 %s 不存在!\n", name);
return;
}
printf("学生 %s 的电话号码为:%s\n", students[index].name, students[index].phone);
}
void search_name_by_phone() {
printf("请输入要查询的学生电话号码:");
char phone[20];
scanf("%s", phone);
int index = -1;
for (int i = 0; i < student_num; i++) {
if (strcmp(students[i].phone, phone) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("学生电话号码 %s 不存在!\n", phone);
return;
}
printf("电话号码为 %s 的学生是:%s\n", students[index].phone, students[index].name);
}
void modify_student() {
printf("请输入要修改的学生学号:");
char id[20];
scanf("%s", id);
int index = -1;
for (int i = 0; i < student_num; i++) {
if (strcmp(students[i].id, id) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("学号 %s 的学生不存在!\n", id);
return;
}
printf("请选择要修改的信息类型:\n");
printf("1. 宿舍\n");
printf("2. QQ号码\n");
printf("请输入选项:");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入新的宿舍:");
scanf("%s", students[index].dormitory);
printf("宿舍修改成功!\n");
break;
case 2:
printf("请输入新的QQ号码:");
scanf("%s", students[index].qq);
printf("QQ号码修改成功!\n");
break;
default:
printf("无效的选项!\n");
break;
}
}
void cet_analysis() {
int total_score = 0;
double average_score;
double variance = 0;
int pass_num = 0;
double pass_rate;
for (int i = 0; i < student_num; i++) {
total_score += students[i].cet_score;
if (students[i].cet_score >= 425) {
pass_num++;
}
}
average_score = (double)total_score / student_num;
pass_rate = (double)pass_num / student_num;
for (int i = 0; i < student_num; i++) {
variance += pow((students[i].cet_score - average_score), 2);
}
variance = variance / student_num;
printf("全班CET-4成绩分析如下:\n");
printf("平均成绩:%.2lf\n", average_score);
printf("方差:%.2lf\n", variance);
printf("及格率:%.2lf%%\n", pass_rate * 100);
}
int main() {
while (1) {
printf("班级同学信息管理系统\n");
printf("1. 添加同学信息\n");
printf("2. 删除同学信息\n");
printf("3. 显示全部同学信息\n");
printf("4. 按电话号码排序同学信息\n");
printf("5. 按姓名排序同学信息\n");
printf("6. 按姓名查询电话号码\n");
printf("7. 按电话号码查询姓名\n");
printf("8. 修改同学信息\n");
printf("9. CET成绩分析\n");
printf("0. 退出程序\n");
printf("请选择要执行的操作:");
int choice;
scanf("%d", &choice);
switch (choice) {
case 0:
printf("程序已退出!\n");
return 0;
case 1:
add_student();
break;
case 2:
delete_student();
break;
case 3:
show_all_students();
break;
case 4:
sort_by_phone();
break;
case 5:
sort_by_name();
break;
case 6:
search_phone_by_name();
break;
case 7:
search_name_by_phone();
break;
case 8:
modify_student();
break;
case 9:
cet_analysis();
break;
default:
printf("无效的选项!\n");
break;
}
printf("\n");
}
}