使用文件处理存储学生学籍信息,给出代码学生学籍管理系统详细C语言
时间: 2023-08-18 16:35:16 浏览: 107
学生学籍管理系统 C语言
下面是一个简单的学生学籍管理系统的C语言代码,使用文件处理来存储学生信息:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100 //最多存储100个学生的信息
struct Student {
char name[20];
char id[10];
int age;
char gender[5];
char birthday[20];
char phone[20];
};
int main()
{
int count = 0; //当前存储的学生数量
struct Student students[MAX_STUDENTS]; //用数组存储学生信息
//从文件中读取学生信息
FILE *fp = fopen("students.txt", "r");
if (fp != NULL) {
char line[100];
while (fgets(line, 100, fp) != NULL) {
//将一行字符串解析为学生信息
sscanf(line, "%s %s %d %s %s %s",
students[count].name, students[count].id, &students[count].age,
students[count].gender, students[count].birthday, students[count].phone);
count++;
}
fclose(fp);
}
//显示菜单
while (1) {
printf("\n");
printf("1. 添加学生信息\n");
printf("2. 修改学生信息\n");
printf("3. 查询学生信息\n");
printf("4. 显示所有学生信息\n");
printf("5. 退出\n");
printf("请选择操作(1-5):");
int choice;
scanf("%d", &choice);
getchar(); //吃掉回车符
switch (choice) {
case 1: //添加学生信息
if (count < MAX_STUDENTS) {
printf("请输入学生姓名:");
fgets(students[count].name, 20, stdin);
strtok(students[count].name, "\n"); //去掉输入中的换行符
printf("请输入学生学号:");
fgets(students[count].id, 10, stdin);
strtok(students[count].id, "\n");
printf("请输入学生年龄:");
scanf("%d", &students[count].age);
getchar();
printf("请输入学生性别:");
fgets(students[count].gender, 5, stdin);
strtok(students[count].gender, "\n");
printf("请输入学生出生日期:");
fgets(students[count].birthday, 20, stdin);
strtok(students[count].birthday, "\n");
printf("请输入学生联系方式:");
fgets(students[count].phone, 20, stdin);
strtok(students[count].phone, "\n");
count++; //增加学生数量
//将学生信息写入文件
fp = fopen("students.txt", "a");
fprintf(fp, "%s %s %d %s %s %s\n",
students[count-1].name, students[count-1].id, students[count-1].age,
students[count-1].gender, students[count-1].birthday, students[count-1].phone);
fclose(fp);
printf("学生信息已添加!\n");
} else {
printf("学生信息已满,无法添加!\n");
}
break;
case 2: //修改学生信息
if (count > 0) {
printf("请输入要修改的学生学号:");
char id[10];
fgets(id, 10, stdin);
strtok(id, "\n");
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("请输入学生姓名:");
fgets(students[i].name, 20, stdin);
strtok(students[i].name, "\n");
printf("请输入学生年龄:");
scanf("%d", &students[i].age);
getchar();
printf("请输入学生性别:");
fgets(students[i].gender, 5, stdin);
strtok(students[i].gender, "\n");
printf("请输入学生出生日期:");
fgets(students[i].birthday, 20, stdin);
strtok(students[i].birthday, "\n");
printf("请输入学生联系方式:");
fgets(students[i].phone, 20, stdin);
strtok(students[i].phone, "\n");
//更新文件中的学生信息
fp = fopen("students.txt", "w");
int j;
for (j = 0; j < count; j++) {
fprintf(fp, "%s %s %d %s %s %s\n",
students[j].name, students[j].id, students[j].age,
students[j].gender, students[j].birthday, students[j].phone);
}
fclose(fp);
printf("学生信息已修改!\n");
break;
}
}
if (i == count) {
printf("未找到学号为%s的学生!\n", id);
}
} else {
printf("学生信息为空,无法修改!\n");
}
break;
case 3: //查询学生信息
if (count > 0) {
printf("请输入要查询的学生学号:");
char id[10];
fgets(id, 10, stdin);
strtok(id, "\n");
int i;
for (i = 0; i < count; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("学生姓名:%s\n", students[i].name);
printf("学生学号:%s\n", students[i].id);
printf("学生年龄:%d\n", students[i].age);
printf("学生性别:%s\n", students[i].gender);
printf("学生出生日期:%s\n", students[i].birthday);
printf("学生联系方式:%s\n", students[i].phone);
break;
}
}
if (i == count) {
printf("未找到学号为%s的学生!\n", id);
}
} else {
printf("学生信息为空,无法查询!\n");
}
break;
case 4: //显示所有学生信息
if (count > 0) {
int i;
for (i = 0; i < count; i++) {
printf("学生姓名:%s\n", students[i].name);
printf("学生学号:%s\n", students[i].id);
printf("学生年龄:%d\n", students[i].age);
printf("学生性别:%s\n", students[i].gender);
printf("学生出生日期:%s\n", students[i].birthday);
printf("学生联系方式:%s\n", students[i].phone);
printf("\n");
}
} else {
printf("学生信息为空!\n");
}
break;
case 5: //退出
exit(0);
default:
printf("无效的操作!\n");
break;
}
}
return 0;
}
```
在代码中,通过 `FILE` 结构体和文件读写函数来读取和写入学生信息。每个学生信息按一行字符串存储,不同属性用空格分隔。在添加、修改或删除学生信息时,需要同时更新文件中的内容。
阅读全文