c语言实现学生档案系统
时间: 2023-11-18 21:07:43 浏览: 40
学生档案系统主要包括以下功能:
1. 添加学生信息:输入学生姓名、学号、性别、年龄、班级等信息,将其存储到文件中。
2. 查找学生信息:输入学生姓名或学号,可以查找该学生的详细信息。
3. 修改学生信息:输入学生姓名或学号,可以修改该学生的信息。
4. 删除学生信息:输入学生姓名或学号,可以删除该学生的信息。
5. 显示所有学生信息:显示所有学生的详细信息。
下面是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT 100 // 最大学生数
#define FILE_NAME "students.dat" // 数据文件名
typedef struct {
char name[20]; // 姓名
char id[10]; // 学号
char gender[5]; // 性别
int age; // 年龄
char cls[20]; // 班级
} Student;
Student students[MAX_STUDENT]; // 学生数组
int count = 0; // 学生数
// 添加学生信息
void add_student() {
Student student;
printf("请输入学生姓名:");
scanf("%s", student.name);
printf("请输入学生学号:");
scanf("%s", student.id);
printf("请输入学生性别:");
scanf("%s", student.gender);
printf("请输入学生年龄:");
scanf("%d", &student.age);
printf("请输入学生班级:");
scanf("%s", student.cls);
// 将学生信息存储到文件中
FILE *fp = fopen(FILE_NAME, "ab");
if (fp == NULL) {
printf("无法打开文件 %s!\n", FILE_NAME);
return;
}
fwrite(&student, sizeof(Student), 1, fp);
fclose(fp);
printf("添加学生信息成功!\n");
}
// 查找学生信息
void find_student() {
char keyword[20];
printf("请输入要查找的学生姓名或学号:");
scanf("%s", keyword);
// 从文件中读取学生信息
FILE *fp = fopen(FILE_NAME, "rb");
if (fp == NULL) {
printf("无法打开文件 %s!\n", FILE_NAME);
return;
}
int found = 0;
while (fread(&students[count], sizeof(Student), 1, fp) == 1) {
if (strcmp(students[count].name, keyword) == 0
|| strcmp(students[count].id, keyword) == 0) {
found = 1;
printf("姓名:%s\n学号:%s\n性别:%s\n年龄:%d\n班级:%s\n",
students[count].name, students[count].id,
students[count].gender, students[count].age,
students[count].cls);
}
count++;
}
fclose(fp);
if (!found) {
printf("没有找到该学生!\n");
}
}
// 修改学生信息
void update_student() {
char keyword[20];
printf("请输入要修改的学生姓名或学号:");
scanf("%s", keyword);
// 读取文件中的学生信息
FILE *fp = fopen(FILE_NAME, "rb");
if (fp == NULL) {
printf("无法打开文件 %s!\n", FILE_NAME);
return;
}
int found = 0;
while (fread(&students[count], sizeof(Student), 1, fp) == 1) {
if (strcmp(students[count].name, keyword) == 0
|| strcmp(students[count].id, keyword) == 0) {
found = 1;
printf("请输入新的学生姓名:");
scanf("%s", students[count].name);
printf("请输入新的学生学号:");
scanf("%s", students[count].id);
printf("请输入新的学生性别:");
scanf("%s", students[count].gender);
printf("请输入新的学生年龄:");
scanf("%d", &students[count].age);
printf("请输入新的学生班级:");
scanf("%s", students[count].cls);
fseek(fp, -sizeof(Student), SEEK_CUR);
fwrite(&students[count], sizeof(Student), 1, fp);
printf("修改学生信息成功!\n");
break;
}
count++;
}
fclose(fp);
if (!found) {
printf("没有找到该学生!\n");
}
}
// 删除学生信息
void delete_student() {
char keyword[20];
printf("请输入要删除的学生姓名或学号:");
scanf("%s", keyword);
// 读取文件中的学生信息
FILE *fp = fopen(FILE_NAME, "rb");
if (fp == NULL) {
printf("无法打开文件 %s!\n", FILE_NAME);
return;
}
FILE *tmp_fp = fopen("tmp.dat", "wb");
if (tmp_fp == NULL) {
printf("无法打开文件 tmp.dat!\n");
fclose(fp);
return;
}
int found = 0;
while (fread(&students[count], sizeof(Student), 1, fp) == 1) {
if (strcmp(students[count].name, keyword) == 0
|| strcmp(students[count].id, keyword) == 0) {
found = 1;
printf("删除学生信息成功!\n");
} else {
fwrite(&students[count], sizeof(Student), 1, tmp_fp);
}
count++;
}
fclose(fp);
fclose(tmp_fp);
// 将临时文件 tmp.dat 重命名为原始文件 students.dat
remove(FILE_NAME);
rename("tmp.dat", FILE_NAME);
if (!found) {
printf("没有找到该学生!\n");
}
}
// 显示所有学生信息
void show_all_students() {
// 读取文件中的学生信息
FILE *fp = fopen(FILE_NAME, "rb");
if (fp == NULL) {
printf("无法打开文件 %s!\n", FILE_NAME);
return;
}
while (fread(&students[count], sizeof(Student), 1, fp) == 1) {
printf("姓名:%s\n学号:%s\n性别:%s\n年龄:%d\n班级:%s\n\n",
students[count].name, students[count].id,
students[count].gender, students[count].age,
students[count].cls);
count++;
}
fclose(fp);
}
int main() {
int choice;
while (1) {
printf("请选择操作:\n");
printf("1. 添加学生信息\n");
printf("2. 查找学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 删除学生信息\n");
printf("5. 显示所有学生信息\n");
printf("6. 退出程序\n");
printf("请输入操作序号:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
find_student();
break;
case 3:
update_student();
break;
case 4:
delete_student();
break;
case 5:
show_all_students();
break;
case 6:
printf("感谢使用!\n");
return 0;
default:
printf("请输入正确的操作序号!\n");
}
count = 0;
}
return 0;
}
```
该程序将学生信息存储在名为 `students.dat` 的二进制文件中。可以通过菜单选择添加、查找、修改、删除或显示所有学生信息。其中,查找、修改和删除操作会先从文件中读取学生信息,然后进行查找、修改或删除。