用C语言设计一个信息管理系统,比如设计一学生信息管理系统, 学生信息包括:学号,姓名,性别,出生年月,电话,英语,数学,总成绩等。使之能提供以下功能: 1) 系统以菜单方式工作 2) 学生信息录入功能(学生信息用文件保存)---输入(注意学号不能重复) 3) 学生信息浏览功能---输出 4) 修改学生信息(注意学号不能修改) 5) 根据输入英语、数学成绩,计算总成绩。 6) 按学号查询 7) 学生信息删除(根据学号为关键字) 8) 按照总成绩进行排序 9) 学生信息的删除与修改(可选项)
时间: 2024-03-06 14:46:27 浏览: 165
好的,这是一个比较复杂的问题,需要用到结构体、文件操作、排序等知识。我会尽力回答,但由于篇幅限制,可能无法完整展示全部代码。以下是一个简单的示例代码,仅供参考。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最大学生数
// 学生结构体
typedef struct {
char id[10]; // 学号
char name[20]; // 姓名
char gender[10]; // 性别
char birth[20]; // 出生年月
char phone[20]; // 电话
int english; // 英语成绩
int math; // 数学成绩
int total; // 总成绩
} Student;
// 学生数组
Student students[MAX_STUDENTS];
int count = 0; // 学生数
// 显示菜单
void showMenu() {
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("=====================================\n");
}
// 录入学生信息
void addStudent() {
if (count == MAX_STUDENTS) {
printf("学生数已达到最大值,无法添加新的学生!\n");
return;
}
Student s;
printf("请输入学生信息(学号 姓名 性别 出生年月 电话 英语成绩 数学成绩):\n");
scanf("%s %s %s %s %s %d %d", s.id, s.name, s.gender, s.birth, s.phone, &s.english, &s.math);
for (int i = 0; i < count; i++) {
if (strcmp(students[i].id, s.id) == 0) {
printf("学号已存在,请重新输入!\n");
return;
}
}
s.total = s.english + s.math;
students[count++] = s;
printf("添加成功!\n");
}
// 浏览学生信息
void viewStudents() {
if (count == 0) {
printf("没有学生信息!\n");
return;
}
printf("学号\t姓名\t性别\t出生年月\t电话\t英语\t数学\t总成绩\n");
for (int i = 0; i < count; 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 modifyStudent() {
if (count == 0) {
printf("没有学生信息!\n");
return;
}
char id[10];
printf("请输入要修改的学生学号:\n");
scanf("%s", id);
for (int i = 0; i < count; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("请输入新的学生信息(姓名 性别 出生年月 电话 英语成绩 数学成绩):\n");
scanf("%s %s %s %s %d %d", students[i].name, students[i].gender, students[i].birth, students[i].phone, &students[i].english, &students[i].math);
students[i].total = students[i].english + students[i].math;
printf("修改成功!\n");
return;
}
}
printf("没有找到对应的学生!\n");
}
// 计算总成绩
void calculateTotal() {
if (count == 0) {
printf("没有学生信息!\n");
return;
}
for (int i = 0; i < count; i++) {
students[i].total = students[i].english + students[i].math;
}
printf("计算成功!\n");
}
// 按学号查询
void searchById() {
if (count == 0) {
printf("没有学生信息!\n");
return;
}
char id[10];
printf("请输入学生学号:\n");
scanf("%s", id);
for (int i = 0; i < count; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("学号\t姓名\t性别\t出生年月\t电话\t英语\t数学\t总成绩\n");
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);
return;
}
}
printf("没有找到对应的学生!\n");
}
// 删除学生信息
void deleteStudent() {
if (count == 0) {
printf("没有学生信息!\n");
return;
}
char id[10];
printf("请输入要删除的学生学号:\n");
scanf("%s", id);
for (int i = 0; i < count; i++) {
if (strcmp(students[i].id, id) == 0) {
for (int j = i; j < count - 1; j++) {
students[j] = students[j+1];
}
count--;
printf("删除成功!\n");
return;
}
}
printf("没有找到对应的学生!\n");
}
// 按总成绩排序
void sortByTotal() {
if (count == 0) {
printf("没有学生信息!\n");
return;
}
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (students[j].total < students[j+1].total) {
Student temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
printf("排序成功!\n");
}
// 保存学生信息到文件
void saveToFile() {
FILE *fp = fopen("students.dat", "wb");
if (fp == NULL) {
printf("无法打开文件!\n");
return;
}
fwrite(&count, sizeof(int), 1, fp);
fwrite(students, sizeof(Student), count, fp);
fclose(fp);
printf("保存成功!\n");
}
// 从文件中读取学生信息
void loadFromFile() {
FILE *fp = fopen("students.dat", "rb");
if (fp == NULL) {
printf("无法打开文件!\n");
return;
}
fread(&count, sizeof(int), 1, fp);
fread(students, sizeof(Student), count, fp);
fclose(fp);
printf("读取成功!\n");
}
int main() {
int choice;
loadFromFile(); // 从文件中读取学生信息
do {
showMenu();
printf("请输入选项:\n");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent();
break;
case 2:
viewStudents();
break;
case 3:
modifyStudent();
break;
case 4:
calculateTotal();
break;
case 5:
searchById();
break;
case 6:
deleteStudent();
break;
case 7:
sortByTotal();
break;
case 8:
saveToFile(); // 保存学生信息到文件
printf("谢谢使用!\n");
exit(0);
default:
printf("无效选项,请重新输入!\n");
break;
}
} while (1);
return 0;
}
```
需要说明的是,这只是一个简单的示例代码,仅包含了基本的功能,实际情况可能更加复杂,需要根据具体需求进行修改和完善。同时,也需要注意文件操作的异常处理和数据的存储安全性。
阅读全文