(用C语言设计一个学生信息管理系统, 学生信息包括:学号,姓名,性别,出生年月,电话,英语,数学,总成绩等。使之能提供以下功能: 1) 系统以菜单方式工作 2) 学生信息录入功能(学生信息用文件保存)---输入 3) 学生信息浏览功能---输出 4) 根据输入英语、数学成绩,计算总成绩。 5) 按学号查询 6) 按姓名查询 7) 按照总成绩进行排序 8) 学生信息的删除与修改
时间: 2024-03-05 12:47:26 浏览: 80
学生信息管理系统,实现学生信息包括:学号、姓名、性别、年龄、班级等信息。
5星 · 资源好评率100%
好的,下面是一个简单的C语言学生信息管理系统的代码实现,可以实现您提到的所有功能。具体实现方式如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最大学生数量
#define MAX_NAME_LEN 20 // 最大姓名长度
#define FILE_NAME "students.txt" // 文件名
// 学生信息的结构体
typedef struct {
int id; // 学号
char name[MAX_NAME_LEN]; // 姓名
char sex; // 性别
char birth[11]; // 出生日期
char phone[12]; // 电话号码
int english; // 英语成绩
int math; // 数学成绩
int total; // 总成绩
} Student;
// 学生信息数组
Student students[MAX_STUDENTS];
// 学生数量
int student_count = 0;
// 从文件中读取学生信息
void read_students() {
FILE *fp;
fp = fopen(FILE_NAME, "r");
if (fp != NULL) {
while (!feof(fp)) {
fscanf(fp, "%d %s %c %s %s %d %d %d\n",
&students[student_count].id,
students[student_count].name,
&students[student_count].sex,
students[student_count].birth,
students[student_count].phone,
&students[student_count].english,
&students[student_count].math,
&students[student_count].total);
student_count++;
}
fclose(fp);
}
}
// 将学生信息写入文件
void write_students() {
FILE *fp;
fp = fopen(FILE_NAME, "w");
if (fp != NULL) {
for (int i = 0; i < student_count; i++) {
fprintf(fp, "%d %s %c %s %s %d %d %d\n",
students[i].id,
students[i].name,
students[i].sex,
students[i].birth,
students[i].phone,
students[i].english,
students[i].math,
students[i].total);
}
fclose(fp);
}
}
// 录入学生信息
void input_student() {
printf("\n请输入学生信息:\n");
printf("学号:");
scanf("%d", &students[student_count].id);
printf("姓名:");
scanf("%s", students[student_count].name);
printf("性别:");
scanf(" %c", &students[student_count].sex);
printf("出生日期:");
scanf("%s", students[student_count].birth);
printf("电话号码:");
scanf("%s", students[student_count].phone);
printf("英语成绩:");
scanf("%d", &students[student_count].english);
printf("数学成绩:");
scanf("%d", &students[student_count].math);
students[student_count].total = students[student_count].english + students[student_count].math;
student_count++;
printf("学生信息录入成功!\n");
}
// 浏览学生信息
void view_students() {
if (student_count == 0) {
printf("没有学生信息!\n");
return;
}
printf("\n学号\t姓名\t性别\t出生日期\t电话号码\t英语成绩\t数学成绩\t总成绩\n");
for (int i = 0; i < student_count; i++) {
printf("%d\t%s\t%c\t%s\t%s\t%d\t%d\t%d\n",
students[i].id,
students[i].name,
students[i].sex,
students[i].birth,
students[i].phone,
students[i].english,
students[i].math,
students[i].total);
}
}
// 按学号查询学生信息
void search_by_id() {
int id;
printf("请输入学号:");
scanf("%d", &id);
for (int i = 0; i < student_count; i++) {
if (students[i].id == id) {
printf("\n学号\t姓名\t性别\t出生日期\t电话号码\t英语成绩\t数学成绩\t总成绩\n");
printf("%d\t%s\t%c\t%s\t%s\t%d\t%d\t%d\n",
students[i].id,
students[i].name,
students[i].sex,
students[i].birth,
students[i].phone,
students[i].english,
students[i].math,
students[i].total);
return;
}
}
printf("没有该学生信息!\n");
}
// 按姓名查询学生信息
void search_by_name() {
char name[MAX_NAME_LEN];
printf("请输入姓名:");
scanf("%s", name);
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("\n学号\t姓名\t性别\t出生日期\t电话号码\t英语成绩\t数学成绩\t总成绩\n");
printf("%d\t%s\t%c\t%s\t%s\t%d\t%d\t%d\n",
students[i].id,
students[i].name,
students[i].sex,
students[i].birth,
students[i].phone,
students[i].english,
students[i].math,
students[i].total);
return;
}
}
printf("没有该学生信息!\n");
}
// 按总成绩排序
void sort_by_total() {
for (int i = 0; i < student_count - 1; i++) {
for (int j = i + 1; j < student_count; j++) {
if (students[i].total < students[j].total) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
printf("学生信息已按总成绩排序!\n");
}
// 删除学生信息
void delete_student() {
int id;
printf("请输入要删除的学生学号:");
scanf("%d", &id);
for (int i = 0; i < student_count; i++) {
if (students[i].id == id) {
for (int j = i; j < student_count - 1; j++) {
students[j] = students[j + 1];
}
student_count--;
printf("学号为%d的学生信息已被删除!\n", id);
return;
}
}
printf("没有该学生信息!\n");
}
// 修改学生信息
void modify_student() {
int id;
printf("请输入要修改的学生学号:");
scanf("%d", &id);
for (int i = 0; i < student_count; i++) {
if (students[i].id == id) {
printf("\n请输入修改后的学生信息:\n");
printf("学号:");
scanf("%d", &students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("性别:");
scanf(" %c", &students[i].sex);
printf("出生日期:");
scanf("%s", students[i].birth);
printf("电话号码:");
scanf("%s", students[i].phone);
printf("英语成绩:");
scanf("%d", &students[i].english);
printf("数学成绩:");
scanf("%d", &students[i].math);
students[i].total = students[i].english + students[i].math;
printf("学生信息修改成功!\n");
return;
}
}
printf("没有该学生信息!\n");
}
// 主函数
int main() {
int choice;
read_students();
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("8. 学生信息修改\n");
printf("0. 退出\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1: input_student(); break;
case 2: view_students(); break;
case 3:
for (int i = 0; i < student_count; i++) {
students[i].total = students[i].english + students[i].math;
}
printf("总成绩已计算!\n");
break;
case 4: search_by_id(); break;
case 5: search_by_name(); break;
case 6: sort_by_total(); break;
case 7: delete_student(); break;
case 8: modify_student(); break;
case 0:
write_students();
printf("程序已退出!\n");
exit(0);
default: printf("无效选项!\n");
}
}
return 0;
}
```
需要注意的是,该代码实现中使用了文件来保存学生信息。在程序运行时,会首先从文件中读取学生信息,并在程序结束时将学生信息写入文件中。这样可以保证学生信息的持久化,即使程序关闭后再次打开,学生信息也能够被恢复。另外,这里定义了一个 `MAX_STUDENTS` 的常量来限制最大学生数量,如果需要存储更多的学生信息,可以修改这个常量的值。
阅读全文