学生档案管理程序c语言2.根据所要保存的学生档案记录内容(学号、姓名、性别、年龄和总绩点),设计结构体数据类型,结合结构体数组的运用实现文件记录的读写访问 3.将以上各功能都设计成独立的函数,在main函数中显示一个菜单,让用户选择要执行的功能,然后转而执行相应的函数
时间: 2024-03-08 19:50:43 浏览: 61
好的,以下是一个基本的学生档案管理程序的C语言代码,包括了结构体数据类型和文件读写功能,以及菜单功能:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENTS 1000 //最大学生数量
//学生结构体数据类型
typedef struct {
int id; //学号
char name[20]; //姓名
char gender; //性别
int age; //年龄
float gpa; //总绩点
} Student;
//文件读写函数
void saveStudents(Student students[], int count) {
FILE *fp = fopen("students.dat", "wb"); //以二进制写入方式打开文件
fwrite(students, sizeof(Student), count, fp); //将学生数组写入文件中
fclose(fp); //关闭文件
}
void loadStudents(Student students[], int *count) {
FILE *fp = fopen("students.dat", "rb"); //以二进制读取方式打开文件
if (fp != NULL) {
*count = fread(students, sizeof(Student), MAX_STUDENTS, fp); //从文件中读取学生数组
fclose(fp); //关闭文件
}
}
//添加学生函数
void addStudent(Student students[], int *count) {
if (*count < MAX_STUDENTS) { //判断学生数量是否已满
printf("请输入学生学号:");
scanf("%d", &students[*count].id);
printf("请输入学生姓名:");
scanf("%s", students[*count].name);
printf("请输入学生性别(男/女):");
scanf("%s", &students[*count].gender);
printf("请输入学生年龄:");
scanf("%d", &students[*count].age);
printf("请输入学生总绩点:");
scanf("%f", &students[*count].gpa);
(*count)++;
printf("添加成功!\n");
} else {
printf("学生数量已满,无法添加!\n");
}
}
//删除学生函数
void deleteStudent(Student students[], int *count) {
int id;
printf("请输入要删除的学生学号:");
scanf("%d", &id);
int i;
for (i = 0; i < *count; i++) {
if (students[i].id == id) { //找到要删除的学生
int j;
for (j = i; j < *count - 1; j++) {
students[j] = students[j + 1]; //将后面的学生往前移动
}
(*count)--;
printf("删除成功!\n");
return;
}
}
printf("未找到该学生,删除失败!\n");
}
//修改学生函数
void modifyStudent(Student students[], int count) {
int id;
printf("请输入要修改的学生学号:");
scanf("%d", &id);
int i;
for (i = 0; i < count; i++) {
if (students[i].id == id) { //找到要修改的学生
printf("请输入新的学生姓名:");
scanf("%s", students[i].name);
printf("请输入新的学生性别(男/女):");
scanf("%s", &students[i].gender);
printf("请输入新的学生年龄:");
scanf("%d", &students[i].age);
printf("请输入新的学生总绩点:");
scanf("%f", &students[i].gpa);
printf("修改成功!\n");
return;
}
}
printf("未找到该学生,修改失败!\n");
}
//显示所有学生函数
void showAllStudents(Student students[], int count) {
printf("学号\t姓名\t性别\t年龄\t总绩点\n");
int i;
for (i = 0; i < count; i++) {
printf("%d\t%s\t%c\t%d\t%.2f\n", students[i].id, students[i].name, students[i].gender, students[i].age, students[i].gpa);
}
}
//菜单函数
void menu() {
printf("欢迎使用学生档案管理程序!\n");
printf("1. 添加学生\n");
printf("2. 删除学生\n");
printf("3. 修改学生\n");
printf("4. 显示所有学生\n");
printf("5. 退出\n");
}
int main() {
Student students[MAX_STUDENTS]; //学生数组
int count = 0; //学生数量
loadStudents(students, &count); //从文件中读取学生数组
int choice;
do {
menu(); //显示菜单
printf("请输入你的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent(students, &count);
saveStudents(students, count); //保存学生数组到文件中
break;
case 2:
deleteStudent(students, &count);
saveStudents(students, count);
break;
case 3:
modifyStudent(students, count);
saveStudents(students, count);
break;
case 4:
showAllStudents(students, count);
break;
case 5:
printf("谢谢使用!\n");
break;
default:
printf("无效的选择,请重新输入!\n");
break;
}
} while (choice != 5);
return 0;
}
```
注意:在运行该程序之前,需要先创建一个名为“students.dat”的文件,用于保存学生档案记录。
阅读全文