用C语言设计一个信息管理系统,比如设计一学生信息管理系统, 学生信息包括:学号,姓名,性别,出生年月,电话,英语,数学,总成绩等。使之能提供以下功能: 1) 系统以菜单方式工作 2) 学生信息录入功能(学生信息用文件保存)---输入 3) 学生信息浏览功能---输出 4) 根据输入英语、数学成绩,计算总成绩。 5) 按学号查询 6) 按姓名查询 7) 按照总成绩进行排序 8) 学生信息的删除与修改(可选项)
时间: 2024-03-08 07:46:10 浏览: 86
好的,这是一个比较完整的学生信息管理系统,需要综合运用C语言的各种知识点。下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
struct student {
char num[10]; // 学号
char name[20]; // 姓名
char sex[5]; // 性别
char birth[20]; // 出生年月
char phone[20]; // 电话
int english; // 英语成绩
int math; // 数学成绩
int sum; // 总成绩
};
// 定义全局变量
int count = 0; // 学生数量
struct student stu[100]; // 学生数组
char filename[20] = "student.txt"; // 文件名
// 函数声明
void menu(); // 菜单
void input(); // 学生信息录入
void output(); // 学生信息浏览
void calc_sum(); // 计算总成绩
void sort_sum(); // 按照总成绩排序
void search_num(); // 按学号查询
void search_name(); // 按姓名查询
void modify(); // 修改学生信息
void delete(); // 删除学生信息
void save(); // 保存学生信息到文件
void load(); // 从文件中读取学生信息
int main() {
load(); // 读取学生信息
menu(); // 运行菜单
return 0;
}
void menu() {
int choice;
do {
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("0. 退出系统\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
input();
break;
case 2:
output();
break;
case 3:
calc_sum();
break;
case 4:
search_num();
break;
case 5:
search_name();
break;
case 6:
sort_sum();
break;
case 7:
modify();
break;
case 8:
delete();
break;
case 0:
save(); // 保存学生信息
printf("已退出系统。\n");
break;
default:
printf("输入有误,请重新输入。\n");
break;
}
} while (choice != 0);
}
void input() {
printf("\n学生信息录入\n");
printf("请输入学生数量:");
int n;
scanf("%d", &n);
for (int i = count; i < count + n; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%s", stu[i].num);
printf("姓名:");
scanf("%s", stu[i].name);
printf("性别:");
scanf("%s", stu[i].sex);
printf("出生年月:");
scanf("%s", stu[i].birth);
printf("电话:");
scanf("%s", stu[i].phone);
printf("英语成绩:");
scanf("%d", &stu[i].english);
printf("数学成绩:");
scanf("%d", &stu[i].math);
stu[i].sum = 0; // 总成绩先设为0
}
count += n;
printf("学生信息录入成功。\n");
}
void output() {
printf("\n学生信息浏览\n");
if (count == 0) {
printf("学生信息为空。\n");
return;
}
printf("学号\t姓名\t性别\t出生年月\t电话\t英语\t数学\t总成绩\n");
for (int i = 0; i < count; i++) {
printf("%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\n", stu[i].num, stu[i].name, stu[i].sex, stu[i].birth, stu[i].phone, stu[i].english, stu[i].math, stu[i].sum);
}
}
void calc_sum() {
printf("\n计算总成绩\n");
if (count == 0) {
printf("学生信息为空。\n");
return;
}
for (int i = 0; i < count; i++) {
stu[i].sum = stu[i].english + stu[i].math; // 计算总成绩
}
printf("总成绩计算成功。\n");
}
void sort_sum() {
printf("\n按总成绩排序\n");
if (count == 0) {
printf("学生信息为空。\n");
return;
}
// 冒泡排序
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (stu[j].sum < stu[j + 1].sum) {
struct student temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
printf("按总成绩排序成功。\n");
}
void search_num() {
printf("\n按学号查询\n");
if (count == 0) {
printf("学生信息为空。\n");
return;
}
char num[10];
printf("请输入学号:");
scanf("%s", num);
for (int i = 0; i < count; i++) {
if (strcmp(stu[i].num, num) == 0) {
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", stu[i].num, stu[i].name, stu[i].sex, stu[i].birth, stu[i].phone, stu[i].english, stu[i].math, stu[i].sum);
return;
}
}
printf("未找到该学生。\n");
}
void search_name() {
printf("\n按姓名查询\n");
if (count == 0) {
printf("学生信息为空。\n");
return;
}
char name[20];
printf("请输入姓名:");
scanf("%s", name);
int flag = 0;
for (int i = 0; i < count; i++) {
if (strcmp(stu[i].name, name) == 0) {
if (flag == 0) {
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", stu[i].num, stu[i].name, stu[i].sex, stu[i].birth, stu[i].phone, stu[i].english, stu[i].math, stu[i].sum);
flag = 1;
}
}
if (flag == 0) {
printf("未找到该学生。\n");
}
}
void modify() {
printf("\n修改学生信息\n");
if (count == 0) {
printf("学生信息为空。\n");
return;
}
char num[10];
printf("请输入要修改的学生的学号:");
scanf("%s", num);
for (int i = 0; i < count; i++) {
if (strcmp(stu[i].num, num) == 0) {
printf("请输入修改后的信息:\n");
printf("学号:");
scanf("%s", stu[i].num);
printf("姓名:");
scanf("%s", stu[i].name);
printf("性别:");
scanf("%s", stu[i].sex);
printf("出生年月:");
scanf("%s", stu[i].birth);
printf("电话:");
scanf("%s", stu[i].phone);
printf("英语成绩:");
scanf("%d", &stu[i].english);
printf("数学成绩:");
scanf("%d", &stu[i].math);
printf("学生信息修改成功。\n");
return;
}
}
printf("未找到该学生。\n");
}
void delete() {
printf("\n删除学生信息\n");
if (count == 0) {
printf("学生信息为空。\n");
return;
}
char num[10];
printf("请输入要删除的学生的学号:");
scanf("%s", num);
for (int i = 0; i < count; i++) {
if (strcmp(stu[i].num, num) == 0) {
for (int j = i; j < count - 1; j++) {
stu[j] = stu[j + 1];
}
count--;
printf("学生信息删除成功。\n");
return;
}
}
printf("未找到该学生。\n");
}
void save() {
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("打开文件失败。\n");
return;
}
fprintf(fp, "%d\n", count);
for (int i = 0; i < count; i++) {
fprintf(fp, "%s %s %s %s %s %d %d %d\n", stu[i].num, stu[i].name, stu[i].sex, stu[i].birth, stu[i].phone, stu[i].english, stu[i].math, stu[i].sum);
}
fclose(fp);
printf("学生信息保存成功。\n");
}
void load() {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("打开文件失败,可能是文件不存在。\n");
return;
}
fscanf(fp, "%d", &count);
for (int i = 0; i < count; i++) {
fscanf(fp, "%s %s %s %s %s %d %d %d", stu[i].num, stu[i].name, stu[i].sex, stu[i].birth, stu[i].phone, &stu[i].english, &stu[i].math, &stu[i].sum);
}
fclose(fp);
printf("学生信息读取成功。\n");
}
```
代码解释:
- 定义了一个 `student` 结构体,包含学生的各个信息。
- 定义了全局变量 `count` 表示学生数量,`stu` 数组保存所有学生的信息,`filename` 保存学生信息的文件名。
- `menu` 函数是主菜单,根据用户的选择调用相应的函数。
- `input` 函数用于录入学生信息,需要用户输入学生数量和每个学生的信息。
- `output` 函数用于浏览学生信息,将所有学生的信息打印出来。
- `calc_sum` 函数用于计算所有学生的总成绩,将总成绩保存在结构体中。
- `sort_sum` 函数用冒泡排序按照总成绩从高到低排序所有学生的信息。
- `search_num` 函数按照学号查询指定学生的信息。
- `search_name` 函数按照姓名查询指定学生的信息。
- `modify` 函数按照学号修改指定学生的信息。
- `delete` 函数按照学号删除指定学生的信息。
- `save` 函数将所有学生的信息保存到文件中。
- `load` 函数从文件中读取所有学生的信息。
注意事项:
- 为了简化代码,没有进行输入检查,请确保输入的数据符合要求。
- 为了方便演示,使用了固定的文件名和最多100个学生,实际应用中可以根据需要修改。
- 为了保证学号的唯一性,未提供学号的修改功能,需要删除后重新录入。
阅读全文