使用c语言用面向对象的方法重新编写一个学生成绩管理程序。要求能添加、编辑、查找、删除学生有关信息
时间: 2023-12-22 20:05:24 浏览: 76
在C语言中,没有面向对象这种概念,但是可以通过结构体和函数指针来模拟面向对象的思想。下面是一个简单的学生成绩管理程序的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char name[20]; // 学生姓名
int id; // 学生ID
float score; // 学生成绩
} Student;
// 定义函数指针类型
typedef void (*Action)(Student*);
// 添加学生信息
void addStudent(Student *s) {
printf("请输入学生姓名:");
scanf("%s", s->name);
printf("请输入学生ID:");
scanf("%d", &s->id);
printf("请输入学生成绩:");
scanf("%f", &s->score);
}
// 编辑学生信息
void editStudent(Student *s) {
printf("请输入学生新姓名:");
scanf("%s", s->name);
printf("请输入学生新ID:");
scanf("%d", &s->id);
printf("请输入学生新成绩:");
scanf("%f", &s->score);
}
// 查找学生信息
void findStudent(Student *s) {
printf("学生姓名:%s\n", s->name);
printf("学生ID:%d\n", s->id);
printf("学生成绩:%f\n", s->score);
}
// 删除学生信息
void deleteStudent(Student *s) {
strcpy(s->name, "");
s->id = 0;
s->score = 0.0;
}
// 显示学生信息
void showStudent(Student *s) {
printf("学生姓名:%s\n", s->name);
printf("学生ID:%d\n", s->id);
printf("学生成绩:%f\n", s->score);
}
// 主函数
int main() {
int n = 0; // 学生数量
Student *students; // 学生数组
Action actions[] = {addStudent, editStudent, findStudent, deleteStudent}; // 函数指针数组
int action; // 用户选择的操作
int id; // 用户输入的学生ID
int i; // 循环计数器
printf("请输入学生数量:");
scanf("%d", &n);
// 分配内存空间
students = (Student*)malloc(n * sizeof(Student));
// 初始化学生信息
for (i = 0; i < n; i++) {
addStudent(&students[i]);
}
// 循环执行用户操作
while (1) {
printf("请选择操作:\n");
printf("1.添加学生信息\n");
printf("2.编辑学生信息\n");
printf("3.查找学生信息\n");
printf("4.删除学生信息\n");
printf("5.显示所有学生信息\n");
printf("6.退出\n");
scanf("%d", &action);
if (action == 6) {
break;
}
printf("请输入学生ID:");
scanf("%d", &id);
// 查找对应ID的学生
for (i = 0; i < n; i++) {
if (students[i].id == id) {
// 执行用户选择的操作
actions[action - 1](&students[i]);
break;
}
}
if (i == n) {
printf("未找到该学生\n");
}
}
// 释放内存空间
free(students);
return 0;
}
```
该程序使用了结构体来保存学生信息,使用函数指针来处理不同的用户操作。用户可以通过菜单选择添加、编辑、查找、删除学生信息,也可以显示所有学生信息或退出程序。程序运行结束后会释放分配的内存空间。
阅读全文