用C语言设计一个信息管理系统,比如设计一学生信息管理系统, 学生信息包括:学号,姓名,性别,出生年月,电话,英语,数学,总成绩等。使之能提供以下功能: 1) 系统以菜单方式工作 2) 学生信息录入功能(学生信息用文件保存)---输入 3) 学生信息浏览功能---输出 4) 根据输入英语、数学成绩,计算总成绩。 5) 按学号查询 6) 按姓名查询 7) 按照总成绩进行排序 8) 学生信息的删除与修改(可选项)
时间: 2024-03-05 08:49:12 浏览: 38
好的,这是一个比较全面的学生信息管理系统,以下是一个简单的实现代码(仅供参考):
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STUDENT_NUM 100 // 最大学生数
#define MAX_NAME_LEN 20 // 最大姓名长度
#define FILE_NAME "student.dat" // 学生信息文件名
// 学生信息结构体
typedef struct Student {
char id[10]; // 学号
char name[MAX_NAME_LEN]; // 姓名
char gender[10]; // 性别
char birth[20]; // 出生年月
char phone[20]; // 电话
int english; // 英语成绩
int math; // 数学成绩
int total; // 总成绩
} Student;
// 学生信息数组
Student students[MAX_STUDENT_NUM];
int student_num = 0; // 学生数目
// 读取学生信息文件
void readStudentFile() {
FILE *fp = fopen(FILE_NAME, "rb");
if (fp == NULL) {
printf("打开文件失败\n");
return;
}
fread(&student_num, sizeof(int), 1, fp);
fread(students, sizeof(Student), student_num, fp);
fclose(fp);
}
// 写入学生信息文件
void writeStudentFile() {
FILE *fp = fopen(FILE_NAME, "wb");
if (fp == NULL) {
printf("打开文件失败\n");
return;
}
fwrite(&student_num, sizeof(int), 1, fp);
fwrite(students, sizeof(Student), student_num, fp);
fclose(fp);
}
// 计算学生总成绩
void calcTotal(Student *s) {
s->total = s->english + s->math;
}
// 添加学生信息
void addStudent() {
if (student_num >= MAX_STUDENT_NUM) {
printf("学生数目已达到上限\n");
return;
}
Student s;
printf("请输入学号:");
scanf("%s", s.id);
printf("请输入姓名:");
scanf("%s", s.name);
printf("请输入性别:");
scanf("%s", s.gender);
printf("请输入出生年月:");
scanf("%s", s.birth);
printf("请输入电话:");
scanf("%s", s.phone);
printf("请输入英语成绩:");
scanf("%d", &s.english);
printf("请输入数学成绩:");
scanf("%d", &s.math);
calcTotal(&s);
students[student_num++] = s;
writeStudentFile();
printf("添加成功\n");
}
// 显示所有学生信息
void showAllStudents() {
printf("学号\t姓名\t性别\t出生年月\t电话\t英语\t数学\t总成绩\n");
for (int i = 0; i < student_num; i++) {
Student *s = &students[i];
printf("%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\n", s->id, s->name, s->gender, s->birth, s->phone, s->english, s->math, s->total);
}
}
// 根据英语和数学成绩计算总成绩
void calcTotalByScore() {
int english, math;
printf("请输入英语成绩:");
scanf("%d", &english);
printf("请输入数学成绩:");
scanf("%d", &math);
printf("学号\t姓名\t性别\t出生年月\t电话\t英语\t数学\t总成绩\n");
for (int i = 0; i < student_num; i++) {
Student *s = &students[i];
if (s->english == english && s->math == math) {
printf("%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\n", s->id, s->name, s->gender, s->birth, s->phone, s->english, s->math, s->total);
}
}
}
// 根据学号查询学生信息
void findStudentById() {
char id[10];
printf("请输入学号:");
scanf("%s", id);
Student *s = NULL;
for (int i = 0; i < student_num; i++) {
if (strcmp(students[i].id, id) == 0) {
s = &students[i];
break;
}
}
if (s != NULL) {
printf("学号\t姓名\t性别\t出生年月\t电话\t英语\t数学\t总成绩\n");
printf("%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\n", s->id, s->name, s->gender, s->birth, s->phone, s->english, s->math, s->total);
} else {
printf("未找到学生\n");
}
}
// 根据姓名查询学生信息
void findStudentByName() {
char name[MAX_NAME_LEN];
printf("请输入姓名:");
scanf("%s", name);
printf("学号\t姓名\t性别\t出生年月\t电话\t英语\t数学\t总成绩\n");
for (int i = 0; i < student_num; i++) {
Student *s = &students[i];
if (strcmp(s->name, name) == 0) {
printf("%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\n", s->id, s->name, s->gender, s->birth, s->phone, s->english, s->math, s->total);
}
}
}
// 按总成绩排序
void sortByTotal() {
for (int i = 0; i < student_num - 1; i++) {
for (int j = 0; j < student_num - i - 1; j++) {
if (students[j].total < students[j+1].total) {
Student temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
writeStudentFile();
printf("排序成功\n");
}
// 删除学生信息
void deleteStudent() {
char id[10];
printf("请输入学号:");
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) {
for (int i = index; i < student_num - 1; i++) {
students[i] = students[i+1];
}
student_num--;
writeStudentFile();
printf("删除成功\n");
} else {
printf("未找到学生\n");
}
}
// 修改学生信息
void modifyStudent() {
char id[10];
printf("请输入学号:");
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) {
Student *s = &students[index];
printf("请输入姓名:%s\n", s->name);
scanf("%s", s->name);
printf("请输入性别:%s\n", s->gender);
scanf("%s", s->gender);
printf("请输入出生年月:%s\n", s->birth);
scanf("%s", s->birth);
printf("请输入电话:%s\n", s->phone);
scanf("%s", s->phone);
printf("请输入英语成绩:%d\n", s->english);
scanf("%d", &s->english);
printf("请输入数学成绩:%d\n", s->math);
scanf("%d", &s->math);
calcTotal(s);
writeStudentFile();
printf("修改成功\n");
} else {
printf("未找到学生\n");
}
}
// 显示菜单
void showMenu() {
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");
}
int main() {
readStudentFile();
int choice;
do {
showMenu();
printf("请选择功能:");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent();
break;
case 2:
showAllStudents();
break;
case 3:
calcTotalByScore();
break;
case 4:
findStudentById();
break;
case 5:
findStudentByName();
break;
case 6:
sortByTotal();
break;
case 7:
deleteStudent();
break;
case 8:
modifyStudent();
break;
case 0:
printf("谢谢使用\n");
break;
default:
printf("无效的选择\n");
break;
}
} while (choice != 0);
return 0;
}
```
以上代码实现了学生
阅读全文