学生信息管理系统 1 、制作管理系统 2、能实现信息录人、删除学生信息、修改信息、查询信息、排序。 信息包括,学号、姓名、性别、班级、本学朗三门以上学科成绩,平均成绩,总成绩、 最高成绩、最低成绩。 4.排序能够按照学号姓名,或各科成绩进行排序, 等级分组 5.显示所有记录
参考https://blog.csdn.net/weixin_44369212/article/details/89058548
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
// 学生结构体
typedef struct {
char id[20];
char name[50];
char gender[10];
char clas[20];
float scores[3];
float averageScore;
float totalScore;
float maxScore;
float minScore;
} Student;
// 全局学生数组和学生数量
Student students[MAX_STUDENTS];
int studentCount = 0;
// 辅助函数声明
int findStudentIndexById(const char* id);
void printStudent(const Student* student);
void printAllStudents();
void addStudent();
void deleteStudent();
void modifyStudent();
void searchStudent();
void sortStudents();
void groupStudents();
int main() {
int choice;
while (1) {
printf("\n----------- 学生信息管理系统 -----------\n");
printf("1. 显示所有学生信息\n");
printf("2. 录入学生信息\n");
printf("3. 删除学生信息\n");
printf("4. 修改学生信息\n");
printf("5. 查询学生信息\n");
printf("6. 排序学生信息\n");
printf("7. 分组学生信息\n");
printf("0. 退出系统\n");
printf("---------------------------------------\n");
printf("请输入要进行的操作(0-7):");
scanf("%d", &choice);
switch (choice) {
case 1:
printAllStudents();
break;
case 2:
addStudent();
break;
case 3:
deleteStudent();
break;
case 4:
modifyStudent();
break;
case 5:
searchStudent();
break;
case 6:
sortStudents();
break;
case 7:
groupStudents();
break;
case 0:
printf("感谢使用学生信息管理系统!\n");
exit(0);
default:
printf("无效的选择,请重新输入!\n");
break;
}
}
return 0;
}
// 根据学号查找学生在数组中的索引
int findStudentIndexById(const char* id) {
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].id, id) == 0) {
return i;
}
}
return -1;
}
// 打印学生信息
void printStudent(const Student* student) {
printf("学号:%s\n", student->id);
printf("姓名:%s\n", student->name);
printf("性别:%s\n", student->gender);
printf("班级:%s\n", student->clas);
printf("学科成绩:\n");
printf(" 语文:%.2f\n", student->scores[0]);
printf(" 数学:%.2f\n", student->scores[1]);
printf(" 英语:%.2f\n", student->scores[2]);
printf("平均成绩:%.2f\n", student->averageScore);
printf("总成绩:%.2f\n", student->totalScore);
printf("最高成绩:%.2f\n", student->maxScore);
printf("最低成绩:%.2f\n", student->minScore);
printf("\n");
}
// 打印所有学生信息
void printAllStudents() {
printf("\n=========== 所有学生信息 ===========\n");
for (int i = 0; i < studentCount; i++) {
printStudent(&students[i]);
}
printf("共%d名学生\n", studentCount);
printf("===================================\n");
}
// 录入学生信息
void addStudent() {
if (studentCount >= MAX_STUDENTS) {
printf("学生信息已达到上限,无法继续添加!\n");
return;
}
Student newStudent;
printf("\n请输入学号:");
scanf("%s", newStudent.id);
// 检查学号是否已存在
if (findStudentIndexById(newStudent.id) != -1) {
printf("学号已存在,请重新输入!\n");
return;
}
printf("请输入姓名:");
scanf("%s", newStudent.name);
printf("请输入性别:");
scanf("%s", newStudent.gender);
printf("请输入班级:");
scanf("%s", newStudent.clas);
printf("请输入语文成绩:");
scanf("%f", &newStudent.scores[0]);
printf("请输入数学成绩:");
scanf("%f", &newStudent.scores[1]);
printf("请输入英语成绩:");
scanf("%f", &newStudent.scores[2]);
// 计算平均成绩、总成绩、最高成绩和最低成绩
newStudent.totalScore = newStudent.scores[0] + newStudent.scores[1] + newStudent.scores[2];
newStudent.averageScore = newStudent.totalScore / 3.0;
newStudent.maxScore = newStudent.scores[0];
newStudent.minScore = newStudent.scores[0];
for (int i = 1; i < 3; i++) {
if (newStudent.scores[i] > newStudent.maxScore) {
newStudent.maxScore = newStudent.scores[i];
}
if (newStudent.scores[i] < newStudent.minScore) {
newStudent.minScore = newStudent.scores[i];
}
}
// 将新学生信息添加到数组中
students[studentCount] = newStudent;
studentCount++;
printf("学生信息添加成功!\n");
}
// 删除学生信息
void deleteStudent() {
char id[20];
printf("\n请输入要删除的学生学号:");
scanf("%s", id);
int index = findStudentIndexById(id);
if (index == -1) {
printf("未找到学号为%s的学生!\n", id);
return;
}
// 将要删除的学生信息从数组中移除
for (int i = index; i < studentCount - 1; i++) {
students[i] = students[i + 1];
}
studentCount--;
printf("学生信息删除成功!\n");
}
// 修改学生信息
void modifyStudent() {
char id[20];
printf("\n请输入要修改的学生学号:");
scanf("%s", id);
int index = findStudentIndexById(id);
if (index == -1) {
printf("未找到学号为%s的学生!\n", id);
return;
}
Student* student = &students[index];
printf("学号:%s\n", student->id);
printf("姓名:%s\n", student->name);
printf("性别:%s\n", student->gender);
printf("班级:%s\n", student->clas);
printf("学科成绩:\n");
printf(" 语文:%.2f\n", student->scores[0]);
printf(" 数学:%.2f\n", student->scores[1]);
printf(" 英语:%.2f\n", student->scores[2]);
printf("平均成绩:%.2f\n", student->averageScore);
printf("总成绩:%.2f\n", student->totalScore);
printf("最高成绩:%.2f\n", student->maxScore);
printf("最低成绩:%.2f\n", student->minScore);
printf("\n请输入新的学生信息:\n");
printf("请输入姓名:");
scanf("%s", student->name);
printf("请输入性别:");
scanf("%s", student->gender);
printf("请输入班级:");
scanf("%s", student->clas);
printf("请输入语文成绩:");
scanf("%f", &student->scores[0]);
printf("请输入数学成绩:");
scanf("%f", &student->scores[1]);
printf("请输入英语成绩:");
scanf("%f", &student->scores[2]);
// 更新平均成绩、总成绩、最高成绩和最低成绩
student->totalScore = student->scores[0] + student->scores[1] + student->scores[2];
student->averageScore = student->totalScore / 3.0;
student->maxScore = student->scores[0];
student->minScore = student->scores[0];
for (int i = 1; i < 3; i++) {
if (student->scores[i] > student->maxScore) {
student->maxScore = student->scores[i];
}
if (student->scores[i] < student->minScore) {
student->minScore = student->scores[i];
}
}
printf("学生信息修改成功!\n");
}
// 查找学生信息
void searchStudent() {
char id[20];
printf("\n请输入要查找的学生学号:");
scanf("%s", id);
int index = findStudentIndexById(id);
if (index == -1) {
printf("未找到学号为%s的学生!\n", id);
return;
}
printf("\n=========== 查找到的学生信息 ===========\n");
printStudent(&students[index]);
printf("=======================================\n");
}
// 根据平均成绩排序学生信息
void sortStudents() {
for (int i = 0; i < studentCount - 1; i++) {
for (int j = 0; j < studentCount - i - 1; j++) {
if (students[j].averageScore < students[j + 1].averageScore) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("学生信息排序成功!\n");
}
// 分组学生信息
void groupStudents() {
int groupCount;
printf("\n请输入要分组的组数:");
scanf("%d", &groupCount);
if (groupCount <= 0 || groupCount > studentCount) {
printf("无效的组数,请重新输入!\n");
return;
}
int studentsPerGroup = studentCount / groupCount;
int remainingStudents = studentCount % groupCount;
int startIndex = 0;
for (int i = 0; i < groupCount; i++) {
int endIndex = startIndex + studentsPerGroup;
if (remainingStudents > 0) {
endIndex++;
remainingStudents--;
}
printf("\n=========== 第%d组学生信息 ===========\n", i + 1);
for (int j = startIndex; j < endIndex; j++) {
printStudent(&students[j]);
}
printf("======================================\n");
startIndex = endIndex;
}
}
基于new bing 加以修改的编写:
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT_NUM 100
#define MAX_NAME_LEN 20
#define MAX_CLASS_LEN 10
struct Student {
int id;
char name[MAX_NAME_LEN];
char gender[5];
char class[MAX_CLASS_LEN];
float math_score;
float english_score;
float chinese_score;
float average_score;
float total_score;
};
int student_num = 0;
struct Student students[MAX_STUDENT_NUM];
void print_student(struct Student student) {
printf("-------------------------------------------------------\n");
printf("ID: %d, 姓名: %s, 性别: %s, 班级: %s\n", student.id, student.name, student.gender, student.class);
printf("数学成绩: %.2f, 英语成绩: %.2f, 语文成绩: %.2f\n", student.math_score, student.english_score, student.chinese_score);
printf("平均分: %.2f, 总分: %.2f\n", student.average_score, student.total_score);
}
void show_student() {
for (int i = 0; i < student_num; i++) {
print_student(students[i]);
}
}
void add_student() {
if (student_num >= MAX_STUDENT_NUM) {
printf("无法添加更多学生\n");
return;
}
struct Student new_student;
printf("请输入学生的学号: ");
scanf("%d", &new_student.id);
getchar();
printf("请输入学生的姓名: ");
scanf("%s", new_student.name);
getchar();
printf("请输入学生的性别: ");
scanf(" %s", new_student.gender);
getchar();
printf("请输入学生的班级: ");
scanf("%s", new_student.class);
getchar();
printf("请输入学生的数学成绩: ");
scanf("%f", &new_student.math_score);
getchar();
printf("请输入学生的英语成绩: ");
scanf("%f", &new_student.english_score);
getchar();
printf("请输入学生的语文成绩: ");
scanf("%f", &new_student.chinese_score);
getchar();
new_student.total_score = new_student.math_score + new_student.english_score + new_student.chinese_score;
new_student.average_score = new_student.total_score / 3;
students[student_num++] = new_student;
printf("学生信息添加成功\n");
}
void delete_student() {
int id;
printf("请输入要删除的学生的学号: ");
scanf("%d", &id);
getchar();
for (int i = 0; i < student_num; i++) {
if (students[i].id == id) {
for (int j = i; j < student_num - 1; j++) {
students[j] = students[j + 1];
}
student_num--;
printf("学生信息删除成功\n");
return;
}
}
printf("未找到学号为 %d 的学生\n", id);
}
void modify_student() {
int id;
printf("请输入要修改的学生的学号: ");
scanf("%d", &id);
getchar();
for (int i = 0; i < student_num; i++) {
if (students[i].id == id) {
printf("请输入新的数学成绩: ");
scanf("%f", &students[i].math_score);
getchar();
printf("请输入新的英语成绩: ");
scanf("%f", &students[i].english_score);
getchar();
printf("请输入新的语文成绩: ");
scanf("%f", &students[i].chinese_score);
getchar();
students[i].total_score = students[i].math_score + students[i].english_score + students[i].chinese_score;
students[i].average_score = students[i].total_score / 3;
printf("学生信息修改成功\n");
return;
}
}
printf("未找到学号为 %d 的学生\n", id);
}
void query_student() {
int id;
printf("请输入要查询的学生的学号: ");
scanf("%d", &id);
getchar();
for (int i = 0; i < student_num; i++) {
if (students[i].id == id) {
print_student(students[i]);
return;
}
}
printf("未找到学号为 %d 的学生\n", id);
}
void sort_student() {
int option;
printf("请选择您要排序的科目:\n");
printf("1. 数学成绩\n");
printf("2. 英语成绩\n");
printf("3. 语文成绩\n");
printf("您的选择: ");
scanf("%d", &option);
switch(option) {
case 1:
for (int i = 0; i < student_num; i++) {
for (int j = i + 1; j < student_num; j++) {
if (students[i].math_score < students[j].math_score) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
show_student();
break;
case 2:
for (int i = 0; i < student_num; i++) {
for (int j = i + 1; j < student_num; j++) {
if (students[i].english_score < students[j].english_score) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
show_student();
break;
case 3:
for (int i = 0; i < student_num; i++) {
for (int j = i + 1; j < student_num; j++) {
if (students[i].chinese_score < students[j].chinese_score) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
show_student();
break;
default:
printf("无效选项\n");
return;
}
printf("排序成功\n");
}
int main() {
int option;
while (1) {
printf("\n 请选择您要执行的操作:\n");
printf("-------------1. 添加学生信息-------------\n");
printf("-------------2. 删除学生信息-------------\n");
printf("-------------3. 修改学生信息-------------\n");
printf("-------------4. 查询学生信息-------------\n");
printf("-------------5. 排序学生信息-------------\n");
printf("-------------6. 显示所有学生信息---------\n");
printf("-------------7. 退出程序-----------------\n");
printf("您的选择: ");
scanf("%d", &option);
switch(option) {
case 1:
add_student();
break;
case 2:
delete_student();
break;
case 3:
modify_student();
break;
case 4:
query_student();
break;
case 5:
sort_student();
break;
case 6:
show_student();
break;
case 7:
return 0;
default:
printf("无效选项\n");
break;
}
}
return 0;
}
学生信息管理系统——C语言版
https://blog.csdn.net/qq_63099085/article/details/126002741
输入:
请输入第1个学生的学号,姓名,性别,年龄,三门课成绩:3 邹研研 女 22 90 80 140
该学生的平均成绩为:103.33
请输入第2个学生的学号,姓名,性别,年龄,三门课成绩:2 葛新龙 男 21 66 44 150
该学生的平均成绩为:86.67
请输入第3个学生的学号,姓名,性别,年龄,三门课成绩:1 李文杰 男 21 88 66 120
该学生的平均成绩为:91.33
输出:
拍完序的结果为:
3 邹研研 女 22 90 80 140 103.33
1 葛新龙 男 21 66 44 150 86.67
2 李文杰 男 21 88 66 120 91.33
我可以为您设计学生信息管理系统。根据您的需求,这个系统需要具有以下功能:
1.信息录入:可以在系统中录入学生的学号、姓名、性别、班级、各门学科成绩等信息;
2.信息删除:可以根据需要删除学生的信息;
3.信息修改:可以修改学生的各项信息,如姓名、班级等;
4.信息查询:可以通过学号或姓名等关键字进行查询,查找学生的详细信息;
5.信息排序:可以将学生的信息按学号、姓名、各科成绩进行排序,按升序或降序排列;
6.等级分组:可以将学生按照成绩等级进行分组,并按照每个组的成绩平均分进行显示;
7.显示所有学生记录:可以将所有学生的记录显示出来,包括学号、姓名、性别、班级、各科成绩、平均成绩、总成绩、最高成绩和最低成绩等。
以下是系统的具体实现步骤:
1.首先要定义学生结构体,包含学号、姓名、性别、班级、各科成绩、平均成绩、总成绩、最高成绩和最低成绩等信息;
2.编写菜单界面,让用户可以选择想要进行的操作;
3.通过switch语句,根据用户选择的操作,执行相应的功能函数;
4.实现信息录入功能,可以通过scanf等输入函数获取用户输入的学生信息,然后将其保存到结构体数组中;
5.实现信息删除功能,可以通过输入学号或姓名等关键字,从学生数组中删除对应的信息;
6.实现信息修改功能,可以通过输入学号或姓名等关键字,找到对应的学生信息,然后修改其各项信息;
7.实现信息查询功能,可以通过输入学号或姓名等关键字,找到对应的学生信息,然后将其详细信息显示出来;
8.实现信息排序功能,可以通过选择排序关键字和排序方式(升序或降序),将学生的信息按照关键字进行排序;
9.实现等级分组功能,可以将学生成绩按照一定规则进行分组,并按照每个组的成绩平均分进行显示;
10.实现显示所有学生记录功能,可以将所有学生的记录显示出来,包括学号、姓名、性别、班级、各科成绩、平均成绩、总成绩、最高成绩和最低成绩等。
以下是一个简单的示例程序,可以用来实现上述功能:
// 学生结构体 typedef struct { int num; // 学号 char name[MAX_NAME_LEN]; // 姓名 char sex; // 性别 int cls; // 班级 int score[3]; // 各科成绩 double avg; // 平均成绩 int tot; // 总成绩 int maxsc; // 最高成绩 int minsc; // 最低成绩 } student;
student stu_array[MAX_STU_NUM]; // 学生数组 int stu_num; // 学生数
// 菜单函数 void menu() { printf("=============================================\n"); printf(" 学生信息管理系统 \n"); printf("=============================================\n"); printf("1. 录入学生信息\n"); printf("2. 删除学生信息\n"); printf("3. 修改学生信息\n"); printf("4. 查询学生信息\n"); printf("5. 学生信息排序\n"); printf("6. 学生成绩分组\n"); printf("7. 显示所有学生记录\n"); printf("0. 退出程序\n"); printf("=============================================\n"); }
// 录入学生信息函数 void input_stu_info() { printf("请输入学生数:"); scanf("%d", &stu_num); for (int i = 0; i < stu_num; i++) { printf("请输入第%d位学生的信息:\n", i + 1); printf("学号:"); scanf("%d", &stu_array[i].num); printf("姓名:"); scanf("%s", stu_array[i].name); printf("性别:"); scanf(" %c", &stu_array[i].sex); printf("班级:"); scanf("%d", &stu_array[i].cls); printf("语文成绩:"); scanf("%d", &stu_array[i].score[0]); printf("数学成绩:"); scanf("%d", &stu_array[i].score[1]); printf("英语成绩:"); scanf("%d", &stu_array[i].score[2]); stu_array[i].tot = stu_array[i].score[0] + stu_array[i].score[1] + stu_array[i].score[2]; // 计算总成绩 stu_array[i].avg = stu_array[i].tot / 3.0; // 计算平均成绩 stu_array[i].maxsc = stu_array[i].score[0]; stu_array[i].minsc = stu_array[i].score[0]; for (int j = 1; j < 3; j++) { // 计算最高成绩和最低成绩 if (stu_array[i].score[j] > stu_array[i].maxsc) { stu_array[i].maxsc = stu_array[i].score[j]; } else if (stu_array[i].score[j] < stu_array[i].minsc) { stu_array[i].minsc = stu_array[i].score[j]; } } } printf("学生信息录入完毕!\n"); }
// 删除学生信息函数 void delete_stu_info() { int num; printf("请输入要删除学生的学号或姓名:"); scanf("%d", &num); for (int i = 0; i < stu_num; i++) { if (stu_array[i].num == num || strcmp(stu_array[i].name, num) == 0) { for (int j = i; j < stu_num - 1; j++) { // 从要删除的学生后一个位置开始,将后面的学生左移 stu_array[j] = stu_array[j + 1]; } stu_num--; printf("学生信息删除成功!\n"); return; } } printf("未找到匹配的学生信息!\n"); }
// 修改学生信息函数 void modify_stu_info() { int num; printf("请输入要修改学生的学号或姓名:"); scanf("%d", &num); for (int i = 0; i < stu_num; i++) { if (stu_array[i].num == num || strcmp(stu_array[i].name, num) == 0) { printf("请输入要修改的信息(学号、姓名、性别、班级、三个科目成绩):\n"); printf("学号:"); scanf("%d", &stu_array[i].num); printf("姓名:"); scanf("%s", stu_array[i].name); printf("性别:"); scanf(" %c", &stu_array[i].sex); printf("班级:"); scanf("%d", &stu_array[i].cls); printf("语文成绩:"); scanf("%d", &stu_array[i].score[0]); printf("数学成绩:"); scanf("%d", &stu_array[i].score[1]); printf("英语成绩:"); scanf("%d", &stu_array[i].score[2]); stu_array[i].tot = stu_array[i].score[0] + stu_array[i].score[1] + stu_array[i].score[2]; stu_array[i].avg = stu_array[i].tot / 3.0; stu_array[i].maxsc = stu_array[i].score[0]; stu_array[i].minsc = stu_array[i].score[0]; for (int j = 1; j < 3; j++) { if (stu_array[i].score[j] > stu_array[i].maxsc) { stu_array[i].maxsc = stu_array[i].score[j]; } else if (stu_array[i].score[j] < stu_array[i].minsc) { stu_array[i].minsc = stu_array[i].score[j]; } } printf("学生信息修改成功!\n"); return; } } printf("未找到匹配的学生信息!\n"); }
// 查询学生信息函数 void query_stu_info() { int num; char name[MAX_NAME_LEN]; printf("请输入要查询学生的学号或姓名:"); scanf("%d", &num); scanf("%s", name); // 需要先读取一个换行符,再读取名字,避免被输入函数误读为空字符串 for (int i = 0; i < stu_num; i++) { if (stu_array[i].num == num || strcmp(stu_array[i].name, name) == 0) { printf("学号:%d\n", stu_array[i].num); printf("姓名:%s\n", stu_array[i].name); printf("性别:%c\n", stu_array[i].sex); printf("班级:%d\n", stu_array[i].cls); printf("语文成绩:%d\n", stu_array[i].score[0]); printf("数学成绩:%d\n", stu_array[i].score[1]); printf("英语成绩:%d\n", stu_array[i].score[2]); printf("总成绩:%d\n", stu_array[i].tot); printf("平均成绩:%.2lf\n", stu_array[i].avg); printf("最高成绩:%d\n", stu_array[i].maxsc); printf("最低成绩:%d\n", stu_array[i].minsc); return; } } printf("未找到匹配的学生信息!\n"); }
// 冒泡排序函数 void bubble_sort(student stu[], int n, int idx, int order) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (order == 0) { // 升序 if (stu[j].score[idx] > stu[j + 1].score[idx]) { student tmp = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = tmp; } } else { // 降序 if (
来自百度GPT:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100
struct Student {
char id[20];
char name[20];
char gender[10];
char class[20];
float scores[3];
float average;
float total;
float maxScore;
float minScore;
};
struct Student students[MAX_STUDENT_NUM];
int studentCount = 0;
void addStudent() {
struct Student student;
printf("请输入学生学号:");
scanf("%s", student.id);
printf("请输入学生姓名:");
scanf("%s", student.name);
printf("请输入学生性别:");
scanf("%s", student.gender);
printf("请输入学生班级:");
scanf("%s", student.class);
printf("请输入学生三门以上学科成绩:\\n");
float totalScore = 0;
float maxScore = 0;
float minScore = 100;
for (int i = 0; i < 3; i++) {
printf("请输入第 %d 门课程成绩:", i + 1);
scanf("%f", &student.scores[i]);
totalScore += student.scores[i];
if (student.scores[i] > maxScore) {
maxScore = student.scores[i];
}
if (student.scores[i] < minScore) {
minScore = student.scores[i];
}
}
student.average = totalScore / 3;
student.total = totalScore;
student.maxScore = maxScore;
student.minScore = minScore;
students[studentCount++] = student;
printf("添加成功!\\n");
}
void deleteStudent() {
char id[20];
printf("请输入要删除的学生学号:");
scanf("%s", id);
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].id, id) == 0) {
for (int j = i; j < studentCount - 1; j++) {
students[j] = students[j + 1];
}
studentCount--;
printf("删除成功!\\n");
return;
}
}
printf("未找到该学生!\\n");
}
void modifyStudent() {
char id[20];
printf("请输入要修改的学生学号:");
scanf("%s", id);
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("请输入学生姓名:");
scanf("%s", students[i].name);
printf("请输入学生性别:");
scanf("%s", students[i].gender);
printf("请输入学生班级:");
scanf("%s", students[i].class);
printf("请输入学生三门以上学科成绩:\\n");
float totalScore = 0;
float maxScore = 0;
float minScore = 100;
for (int j = 0; j < 3; j++) {
printf("请输入第 %d 门课程成绩:", j + 1);
scanf("%f", &students[i].scores[j]);
totalScore += students[i].scores[j];
if (students[i].scores[j] > maxScore) {
maxScore = students[i].scores[j];
}
if (students[i].scores[j] < minScore) {
minScore = students[i].scores[j];
}
}
students[i].average = totalScore / 3;
students[i].total = totalScore;
students[i].maxScore = maxScore;
students[i].minScore = minScore;
printf("修改成功!\\n");
return;
}
}
printf("未找到该学生!\\n");
}
void queryStudent() {
char id[20];
printf("请输入要查询的学生学号:");
scanf("%s", id);
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("学生学号:%s\\n", students[i].id);
printf("学生姓名:%s\\n", students[i].name);
printf("学生性别:%s\\n", students[i].gender);
printf("学生班级:%s\\n", students[i].class);
printf("学生成绩:\\n");
for (int j = 0; j < 3; j++) {
printf(" 第 %d 门课程成绩:%f\\n", j + 1, students[i].scores[j]);
}
printf("学生平均成绩:%f\\n", students[i].average);
printf("学生总成绩:%f\\n", students[i].total);
printf("学生最高成绩:%f\\n", students[i].maxScore);
printf("学生最低成绩:%f\\n", students[i].minScore);
return;
}
}
printf("未找到该学生!\\n");
}
void sortStudent() {
int type;
printf("请选择排序方式:\\n");
printf("1.学号 2.姓名 3.三门以上学科平均成绩 4.三门以上学科总成绩 5.三门以上学科最高成绩 6.三门以上学科最低成绩\\n");
scanf("%d", &type);
switch (type) {
case 1:
for (int i = 0; i < studentCount - 1; i++) {
for (int j = 0; j < studentCount - 1 - i; j++) {
if (strcmp(students[j].id, students[j + 1].id) > 0) {
struct Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
break;
case 2:
for (int i = 0; i < studentCount - 1; i++) {
for (int j = 0; j < studentCount - 1 - i; 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;
}
}
}
break;
case 3:
for (int i = 0; i < studentCount - 1; i++) {
for (int j = 0; j < studentCount - 1 - i; j++) {
if (students[j].average > students[j + 1].average) {
struct Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
break;
case 4:
for (int i = 0; i < studentCount - 1; i++) {
for (int j = 0; j < studentCount - 1 - i; j++) {
if (students[j].total > students[j + 1].total) {
struct Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
break;
case 5:
for (int i = 0; i < studentCount - 1; i++) {
for (int j = 0; j < studentCount - 1 - i; j++) {
if (students[j].maxScore > students[j + 1].maxScore) {
struct Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
break;
case 6:
for (int i = 0; i < studentCount - 1; i++) {
for (int j = 0; j < studentCount - 1 - i; j++) {
if (students[j].minScore > students[j + 1].minScore) {
struct Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
break;
default:
printf("无效的排序方式!\\n");
return;
}
printf("排序成功!\\n");
}
void showAllStudents() {
if (studentCount == 0) {
printf("没有学生记录!\\n");
} else {
printf("共有 %d 名学生记录:\\n", studentCount);
for (int i = 0; i < studentCount; i++) {
printf("%d. 学号:%s 姓名:%s 性别:%s 班级:%s\\n", i + 1, students[i].id, students[i].name, students[i].gender, students[i].class);
printf(" 成绩:语文 %f 数学 %f 英语 %f 平均 %f 总分 %f 最高分 %f 最低分 %f\\n", students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average, students[i].total, students[i].maxScore, students[i].minScore);
}
}
}
int main() {
int choice;
while (1) {
printf("请选择操作:\\n");
printf("1.添加学生 2.删除学生 3.修改学生信息 4.查询学生信息 5.排序学生信息 6.显示所有学生记录 7.退出\\n");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent();
break;
case 2:
deleteStudent();
break;
case 3:
modifyStudent();
break;
case 4:
queryStudent();
break;
case 5:
sortStudent();
break;
case 6:
showAllStudents();
break;
case 7:
printf("退出程序!\\n");
return 0;
default:
printf("无效的操作!\\n");
break;
}
}
return 0;
}
纯手写,有帮助请采纳
//
#include<stdio.h>
#include<windows.h>
#define Max_stu_num 25
#define obj_num 3
char File_Path[]="student_inf.txt";
typedef struct
{
char Name[25]; //姓名
int Number; //学号
char gender[25]; //性别
char city[25]; //籍贯
int score[obj_num]; //数学成绩//语文成绩//英语成绩
int Sum_score; //总成绩
} Stu;
char obj_name[obj_num][25]= {"数学","语文","英语"};
double ave[obj_num];
double stu_avescore[Max_stu_num]; //平均成绩
Stu stu[Max_stu_num];
int count_stu=0;
void cal_sum_score(int index)
{
stu[index].Sum_score=0;
for(int j=0; j<obj_num; j++)
{
stu[index].Sum_score+=stu[index].score[j];
}
}
void input()
{
printf("输入姓名:\n");
fflush(stdin);
scanf("%s",stu[count_stu].Name);
printf("输入学号:\n");
fflush(stdin);
scanf("%d",&stu[count_stu].Number);
printf("输入性别:\n");
fflush(stdin);
scanf("%s",stu[count_stu].gender);
printf("输入籍贯:\n");
fflush(stdin);
scanf("%s",stu[count_stu].city);
for(int i=0; i<obj_num; i++)
{
printf("输入%s成绩:\n",obj_name[i]);
fflush(stdin);
scanf("%d",&stu[count_stu].score[i]);
}
cal_sum_score(count_stu);
count_stu++;
}
void output_head()
{
printf("姓名\t学号\t\t性别\t籍贯\t");
for(int i=0; i<obj_num; i++)
{
printf("%s\t",obj_name[i]);
}
printf("总分\n");
}
void outputOne(int index)
{
printf("%s\t",stu[index].Name);
printf("%d\t",stu[index].Number);
printf("%s\t",stu[index].gender);
printf("%s\t",stu[index].city);
for(int i=0; i<obj_num; i++)
{
printf("%d\t",stu[index].score[i]);
}
printf("%d\t",stu[index].Sum_score);
printf("\n");
}
void output_all(int n)
{
output_head();
int j;
for(j=0; j<n; j++)
{
outputOne(j);
}
printf("---------------------------------------------------\n");
}
int search(int number)
{
int i,p=-1;
for(i=0; i<count_stu; i++)
{
if(stu[i].Number==number)
{
p=i;
return p;
}
}
return -1;
}
void modify(int number)
{
int index=search(number);
if(index==-1)
{
printf("找不到该学号\n");
}
else
{
printf("学号%d的学生是第%d位\n",number,index+1);
output_head();
outputOne(index);
puts("修改信息");
printf("输入姓名:\n");
fflush(stdin);
scanf("%s",stu[index].Name);
printf("输入学号:\n");
fflush(stdin);
scanf("%d",&stu[index].Number);
stu[index].Sum_score=0;
for(int i=0; i<obj_num; i++)
{
printf("输入%s成绩:\n",obj_name[i]);
fflush(stdin);
scanf("%d",&stu[index].score[i]);
stu[index].Sum_score+=stu[index].score[i];
}
cal_sum_score(index);
printf("修改成功\n");
}
}
void del(int number)
{
int index=search(number);
if(index==-1)
{
printf("找不到该学号\n");
}
else
{
printf("学号%d的学生是第%d位\n",number,index+1);
output_head();
outputOne(index);
int i;
for(i=index; i<count_stu-1; i++)
{
stu[i]= stu[i+1];
}
printf("删除成功\n");
count_stu--;
}
}
double calave()
{
int score_sum[obj_num]= {0};
for(int i=0; i<count_stu; i++)
{
for(int j=0; j<obj_num; j++)
{
score_sum[j]+=stu[i].score[j];
}
}
for(int j=0; j<obj_num; j++)
{
ave[j]=(double)score_sum[j]/count_stu;
}
}
void save()
{
FILE *fp;
fp = fopen(File_Path,"w");
if(fp == NULL)
{
printf("error!");
}
else
{
for(int j=0; j<count_stu; j++)
{
fprintf(fp,"%s %d ",stu[j].Name,stu[j].Number);
fprintf(fp,"%s %s ",stu[j].gender,stu[j].city);
for(int i=0; i<obj_num; i++)
{
fprintf(fp,"%d ",stu[j].score[i]);
}
fprintf(fp,"%d\n",stu[j].Sum_score);
}
printf("文件写入成功\n");
}
fclose(fp);
}
void read()
{
FILE *fp;
fp = fopen(File_Path,"r");
int count=0;
if(fp == NULL)
{
printf("error!");
}
else
{
int flag=2;
int j=count_stu;
do
{
flag=fscanf(fp,"%s %d ",stu[j].Name,&stu[j].Number);
fscanf(fp,"%s %s ",stu[j].gender,stu[j].city);
for(int i=0; i<obj_num; i++)
{
fscanf(fp,"%d ",&stu[j].score[i]);
}
fscanf(fp,"%d\n",&stu[j].Sum_score);
if(flag!=-1)
{
cal_sum_score(count);
count++;
}
j++;
}
while(flag>0);
printf("文件读取成功\n");
count_stu+=count;
}
fclose(fp);
}
void swap_stu_inf(Stu stu[],int a,int b)
{
Stu tem=stu[a];
stu[a]=stu[b];
stu[b]=tem;
}
void BubbleSort_number(Stu stu[],int n)
{
int j,k;
Stu t;
for(j=0; j<n-1; j++)
{
for(k=0; k<n-j-1; k++)
{
if(stu[k].Number>stu[k+1].Number)
{
t=stu[k];
stu[k]=stu[k+1];
stu[k+1]=t;
}
}
}
}
void BubbleSort_score(Stu stu[],int n)
{
int j,k;
Stu t;
for(j=0; j<n-1; j++)
{
for(k=0; k<n-j-1; k++)
{
if(stu[k].Sum_score<stu[k+1].Sum_score)
{
t=stu[k];
stu[k]=stu[k+1];
stu[k+1]=t;
}
}
}
}
void out_aveScore()
{
printf("平均分\t\t");
for(int i=0; i<obj_num; i++)
{
printf("%.2lf\t",ave[i]);
}
printf("\n");
}
void cal_stu_avescore()
{
for(int i=0; i<count_stu; i++)
{
stu_avescore[i]=(double)stu[i].Sum_score/obj_num;
}
}
void color(short x) //自定义函根据参数改变颜色
{
if(x>=0 && x<=15)//参数在0-15的范围颜色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x); //只有一个参数,改变字体颜色
else//默认的颜色白色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
void put_stu_ave_score()
{
cal_stu_avescore();
printf("姓名\t学号\t平均分\n");
for(int i=0; i<count_stu; i++)
{
if(stu_avescore[i]<60)
{
color(6);
}
printf("%s\t%d\t%.2f\n",stu[i].Name,stu[i].Number,stu_avescore[i]);
color(7);
}
//color(7);
}
void sort_menu()
{
puts("--------1.按学号排序------------------------------");
puts("--------2.按总成绩排序----------------------------");
puts("--------3.返回主菜单------------------------------");
int option=0;
fflush(stdin);
scanf("%d",&option);
if(option==1)
{
system("cls");
BubbleSort_number(stu,count_stu);
puts("排序完成");
output_all(count_stu);
}
else if(option==2)
{
system("cls");
BubbleSort_score(stu,count_stu);
puts("排序完成");
output_all(count_stu);
}
else if(option==3)
{
return;
}
}
void count_stu_()
{
printf("统计学生总数\n");
printf("一共 %d 名学生\n",count_stu);
}
void insert(int index,Stu stu_)
{
for(int i=count_stu+1; i>index; i--)
{
stu[i]=stu[i-1];
}
stu[index]=stu_;
count_stu++;
cal_sum_score(index);
}
void menu()
{
int option=0;
while(option!=11)
{
system("cls");
printf("--------------------------------------------------------------------------------\n");
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.文件读入 --------------------------------------------------------------\n");
printf("------10.保存至文件--------------------------------------------------------------\n");
printf("------11.退出系统---------------------------------------------------------------\n");
printf("--------------------------------------------------------------------------------\n");
printf("输入选项:\n");
fflush(stdin);
scanf("%d",&option);
if(option==1)
{
system("cls");
input();
system("pause");
}
else if(option==2)
{
system("cls");
//output(count_stu);
int number;
printf("输入要查找的学号:");
fflush(stdin);
scanf("%d",&number);
int index=search(number);
if(index==-1)
{
printf("查找失败\n");
}
else
{
printf("查找成功\n");
output_head();
outputOne(index);
}
system("pause");
}
else if(option==3)
{
system("cls");
int number;
printf("输入要删除的学号:");
scanf("%d",&number);
del(number);
puts("完成");
system("pause");
}
else if(option==4)
{
system("cls");
output_all(count_stu);
int number;
printf("输入要修改成绩的学生对应的学号:");
scanf("%d",&number);
modify(number);
system("pause");
}
else if(option==5)
{
system("cls");
sort_menu();
system("pause");
}
else if(option==6)
{
system("cls");
count_stu_();
system("pause");
}
else if(option==7)
{
system("cls");
puts("显示所有学生信息");
/**/
output_all(count_stu);
system("pause");
}
else if(option==8)
{
system("cls");
int index;
printf("输入要插入的位置(0~%d)",count_stu);
scanf("%d",&index);
Stu stu_;
printf("输入姓名:\n");
fflush(stdin);
scanf("%s",stu_.Name);
printf("输入学号:\n");
fflush(stdin);
scanf("%d",&stu_.Number);
printf("输入性别:\n");
fflush(stdin);
scanf("%s",stu_.gender);
printf("输入籍贯:\n");
fflush(stdin);
scanf("%s",stu_.city);
for(int i=0; i<obj_num; i++)
{
printf("输入%s成绩:\n",obj_name[i]);
fflush(stdin);
scanf("%d",&stu_.score[i]);
}
insert(index,stu_);
puts("插入完成");
system("pause");
}
else if(option==9)
{
system("cls");
read();
system("pause");
}
else if(option==10)
{
system("cls");
save();
system("pause");
}
else if(option==11)
{
system("cls");
return;
system("pause");
}
}
}
int main()
{
menu();
return 0;
}
请看一下
#include<bits/stdc++.h>
using namespace std;
string s,w;
struct student {
string name;
int chinese,math,english,science;
int total;
} a[10086];
int main() {
int n,nn,z,anything=0;
cin>>n;
cout<<"please send in the students name and their chinese,math,English and science score"<<endl;
for(int i=1; i<=n; i++) {
cin>>a[i].name>>a[i].chinese>>a[i].math>>a[i].english>>a[i].science;
a[i].total=a[i].chinese+a[i].math+a[i].english+a[i].science;
}
while(anything==0) {
cout<<"what do you want to do? 1 send out all the students name and score. 2 reset the score of any student. 0 close"<<endl;
cin>>nn;
if(nn==1) {
for(int i=1; i<=n; i++) {
cout<<a[i].name<<" "<<a[i].chinese<<" "<<a[i].math<<" "<<a[i].english<<" "<<a[i].science<<endl;
}
}
if(nn==2) {
cout<<"which person you want to change? And what subject to which score?"<<endl;
cin>>s>>w>>z;
for(int i=1; i<=n; i++) {
if(s==a[i].name) {
if(w=="chinese") {
a[i].chinese=z;
}
if(w=="math") {
a[i].math=z;
}
if(w=="English") {
a[i].english=z;
}
if(w=="science") {
a[i].science=z;
}
}
}
}
if(nn==0){
return 0;
}
}
}
先定义学生、学科成绩等实体,然后数据库可以使用mysql,进行一个增删改查就可以了,GUI界面可以用QT来写