C 学生管理系统
提交文件结构
├── README.md
├── report.pdf
├── src
│ ├── main.c
│ ├── student.h
│ └── student.c
├── tests
│ ├── test_main.c
│ └── test_student.c
└── Makefile
README.md
# C 学生管理系统
## 文件结构
- `README.md`: 项目描述和使用说明。
- `report.pdf`: 作业报告,包含算法描述、实验结果和分析。
- `src/`: 源代码文件夹。
- `main.c`: 主程序。
- `student.h`: 学生管理系统的头文件。
- `student.c`: 学生管理系统的实现文件。
- `tests/`: 测试代码文件夹。
- `test_main.c`: 主程序的测试代码。
- `test_student.c`: 学生管理系统的测试代码。
- `Makefile`: 构建和运行程序的Makefile文件。
## 编译和运行
```sh
make
./main
测试
make test
./test_main
作者
### src/main.c
```c
#include <stdio.h>
#include "student.h"
// 主函数:提供用户交互界面,实现添加、删除、显示和查找学生功能
int main() {
int choice, id, age;
char name[NAME_LENGTH];
while (1) {
printf("\n学生管理系统\n");
printf("1. 添加学生\n");
printf("2. 删除学生\n");
printf("3. 显示所有学生\n");
printf("4. 查找学生\n");
printf("5. 退出\n");
printf("选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("输入学生ID:");
scanf("%d", &id);
printf("输入学生姓名:");
scanf("%s", name);
printf("输入学生年龄:");
scanf("%d", &age);
addStudent(id, name, age);
break;
case 2:
printf("输入要删除的学生ID:");
scanf("%d", &id);
deleteStudent(id);
break;
case 3:
displayStudents();
break;
case 4:
printf("输入要查找的学生ID:");
scanf("%d", &id);
findStudent(id);
break;
case 5:
printf("退出系统。\n");
return 0;
default:
printf("无效选择,请重新输入。\n");
}
}
}
src/student.h
#ifndef STUDENT_H
#define STUDENT_H
#define NAME_LENGTH 50
typedef struct {
int id;
char name[NAME_LENGTH];
int age;
} Student;
void addStudent(int id, const char *name, int age);
void deleteStudent(int id);
void displayStudents();
void findStudent(int id);
#endif
src/student.c
#include <stdio.h>
#include <string.h>
#include "student.h"
#define MAX_STUDENTS 100
Student students[MAX_STUDENTS];
int studentCount = 0;
void addStudent(int id, const char *name, int age) {
if (studentCount >= MAX_STUDENTS) {
printf("学生已满,无法添加更多学生。\n");
return;
}
students[studentCount].id = id;
strncpy(students[studentCount].name, name, NAME_LENGTH);
students[studentCount].age = age;
studentCount++;
printf("成功添加学生:%s\n", name);
}
void deleteStudent(int id) {
int found = 0;
for (int i = 0; i < studentCount; i++) {
if (students[i].id == id) {
found = 1;
for (int j = i; j < studentCount - 1; j++) {
students[j] = students[j + 1];
}
studentCount--;
printf("成功删除学生ID:%d\n", id);
break;
}
}
if (!found) {
printf("未找到学生ID:%d\n", id);
}
}
void displayStudents() {
if (studentCount == 0) {
printf("没有学生记录。\n");
return;
}
printf("学生列表:\n");
for (int i = 0; i < studentCount; i++) {
printf("ID: %d, 姓名: %s, 年龄: %d\n", students[i].id, students[i].name, students[i].age);
}
}
void findStudent(int id) {
for (int i = 0; i < studentCount; i++) {
if (students[i].id == id) {
printf("找到学生:ID: %d, 姓名: %s, 年龄: %d\n", id, students[i].name, students[i].age);
return;
}
}
printf("未找到学生ID:%d\n", id);
}
tests/test_main.c
#include <stdio.h>
#include "student.h"
void test_addStudent() {
addStudent(1, "Alice", 20);
addStudent(2, "Bob", 22);
displayStudents();
}
void test_deleteStudent() {
deleteStudent(1);
displayStudents();
}
void test_findStudent() {
findStudent(2);
}
int main() {
printf("测试添加学生\n");
test_addStudent();
printf("\n测试删除学生\n");
test_deleteStudent();
printf("\n测试查找学生\n");
test_findStudent();
return 0;
}
Makefile
CC = gcc
CFLAGS = -Wall
SRC = src/main.c src/student.c
TEST_SRC = tests/test_main.c src/student.c
all: main
main: $(SRC)
$(CC) $(CFLAGS) -o main $(SRC)
test: $(TEST_SRC)
$(CC) $(CFLAGS) -o test_main $(TEST_SRC)
clean:
rm -f main test_main