#if 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int MAX = 100;
// 定义学生结构体
typedef struct {
char name[20];
char birthday[20];//出生年月
char jiguna[20];//籍贯
char phone[20];//手机号
char gender[10];
int studentID;
float score;
} Student;
// 定义全局变量,存储学生信息
Student students[MAX];
int numStudents = 0;
// 加载学生信息文件,读入到结构体
void loadStudentsFromFile() {
FILE *file = fopen("D:/JK0112.txt", "r");
if (file == NULL) {
printf("无法打开文件!\n");
return;
}
numStudents = 0;
while (fscanf(file, "%d %s %s %s %s %s %f\n", &students[numStudents].studentID, students[numStudents].name, students[numStudents].gender,
students[numStudents].birthday,students[numStudents].jiguna,students[numStudents].phone, &students[numStudents].score) ==7) {
numStudents++;
}
fclose(file);//文件关闭
}
// 显示菜单
void displayMenu() {
printf("\t \"---------------------------------------------------------------------------------|\n");
printf("\t \"| 欢迎使用学生管理系统 |\n");
printf("\t \"|--------------------------------------------------------------------------------|\n");
printf("\t \"| 1、查询 | 2、排序 |\n");
printf("\t \"|----------------------------------------|---------------------------------------|\n");
printf("\t \"| 3、添加 | 4、删除 |\n");
printf("\t \"|----------------------------------------|---------------------------------------|\n");
printf("\t \"| 5、修改 | 6、按性别分割文件 |\n");
printf("\t \"|----------------------------------------|---------------------------------------|\n");
printf("\t \"| 0、退出系统 |\n");
printf("\t \"---------------------------------------------------------------------------------|\n");
printf("请输入选项:");
}
// 按姓名查询显示
void searchByName() {
char name[20];
printf("请输入要查询的学生姓名:");
scanf("%s", name);
for (int i = 0; i < numStudents; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("姓名\t学号\t性别\t籍贯\t出生年月\t电话\t\t\t成绩\n");
printf("%s\t%d\t%s\t\t%s\t%s\t\t%s\t\t%.2f\n", students[i].name,students[i].studentID, students[i].gender,
students[i].jiguna,students[i].birthday,students[i].phone, students[i].score);
}
}
}
// 按学号查询显示
void searchByStudentID() {
int studentID;
printf("请输入要查询的学生学号:");
scanf("%d", &studentID);
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == studentID) {
printf("姓名\t学号\t性别\t籍贯\t出生年月\t电话\t\t\t成绩\n");
printf("%s\t%d\t%s\t\t%s\t%s\t\t%s\t\t%.2f\n", students[i].name,students[i].studentID, students[i].gender,
students[i].jiguna,students[i].birthday,students[i].phone, students[i].score);
return;
}
}
printf("找不到该学号对应的学生信息!\n");
}
// 显示全部学生信息
void displayAllStudents() {
printf("姓名\t学号\t性别\t籍贯\t出生年月\t电话\t\t\t成绩\n");
for (int i = 0; i < numStudents; i++) {
printf("%s\t%d\t%s\t\t%s\t%s\t\t%s\t\t%.2f\n", students[i].name,students[i].studentID, students[i].gender,
students[i].jiguna,students[i].birthday,students[i].phone, students[i].score);
}
}
// 按姓名排序
int compareByName(const void *a, const void *b) {
Student *studentA = (Student *)a;
Student *studentB = (Student *)b;
return strcmp(studentA->name, studentB->name);
}
// 按成绩排序
int compareByScore(const void *a, const void *b) {
Student *studentA = (Student *)a;
Student *studentB = (Student *)b;
if (studentA->score > studentB->score) {
return 1;
} else if (studentA->score < studentB->score) {
return -1;
} else {
return 0;
}
}
// 按姓名排序并显示
void sortByName() {
qsort(students, numStudents, sizeof(Student), compareByName);
displayAllStudents();
}
// 按成绩排序并显示
void sortByScore() {
qsort(students, numStudents, sizeof(Student), compareByScore);
displayAllStudents();
}
// 添加新的学生信息
void addStudent() {
if (numStudents >= 100) {
printf("学生信息已满,无法添加!\n");
return;
}
//Student newStudent;
printf("请输入学生姓名:");
scanf("%s", students[numStudents].name);
printf("请输入学生学号:");
scanf("%d", &students[numStudents].studentID);
printf("请输入学生性别:");
scanf("%s", students[numStudents].gender);
printf("请输入学生籍贯:");
scanf("%s", students[numStudents].jiguna);
printf("请修改学生生日:");
scanf("%s", students[numStudents].birthday);
printf("请输入学生手机号:");
scanf("%s", students[numStudents].phone);
printf("请输入学生成绩:");
scanf("%f", &students[numStudents].score);
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == students[numStudents].studentID) {
printf("该学号已存在,无法添加!\n");
return;
}
}
printf("学生信息添加成功!\n");
numStudents++;
}
// 按姓名删除学生信息
void deleteByName() {
char name[20];
printf("请输入要删除的学生姓名:");
scanf("%s", name);
int found = 0;
for (int i = 0; i < numStudents; i++) {
if (strcmp(students[i].name, name) == 0) {
students[i] = students[--numStudents];
found = 1;
}
}
if (found) {
printf("学生信息删除成功!\n");
} else {
printf("找不到该姓名对应的学生信息!\n");
}
}
// 按学号删除学生信息
void deleteByStudentID() {
int studentID;
printf("请输入要删除的学生学号:");
scanf("%d", &studentID);
int found = 0;
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == studentID) {
students[i] = students[--numStudents];
found = 1;
}
}
if (found) {
printf("学生信息删除成功!\n");
} else {
printf("找不到该学号对应的学生信息!\n");
}
}
// 修改学生信息
void modifyStudent() {
int studentID;
printf("请输入要修改的学生学号:");
scanf("%d", &studentID);
int found = 0;
for (int i = 0; i < numStudents; i++) {
if (students[i].studentID == studentID) {
printf("找到学生信息,请输入修改后的学生姓名:");
scanf("%s", students[i].name);
printf("请修改学生学号:");
scanf("%d", &students[i].studentID);
printf("请修改学生性别:");
scanf("%s", students[i].gender);
printf("请修改学生出生年月:");
scanf("%s", students[i].birthday);
printf("请修改学生籍贯:");
scanf("%s", students[i].jiguna);
printf("请修改学生手机号:");
scanf("%s", students[i].phone);
printf("请修改学生成绩:");
scanf("%f", &students[i].score);
printf("学生信息修改成功!\n");
found = 1;
}
}
if (!found) {
printf("找不到该学号对应的学生信息!\n");
}
}
// 将学生信息按性别分割成两个文件
void splitByGender() {
FILE *maleFile = fopen("D:/male.txt", "w");
FILE *femaleFile = fopen("D:/female.txt", "w");
//fscanf(file, "%d %s %s %s %s %s %f", &students[numStudents].studentID, students[numStudents].name, students[numStudents].gender,
// students[numStudents].birthday,students[numStudents].jiguna,students[numStudents].phone, &students[numStudents].score) ==6)
for (int i = 0; i < numStudents; i++) {
if (strcmp(students[i].gender, "male") == 0) {
fprintf(maleFile, "%d %s %s %s %s %s %f\n",students[i].studentID, students[i].name, students[i].gender,
students[i].birthday,students[i].jiguna, students[i].phone,students[i].score);
} else if (strcmp(students[i].gender, "female") == 0) {
fprintf(femaleFile, "%d %s %s %s %s %s %f\n",students[i].studentID, students[i].name, students[i].gender,
students[i].birthday,students[i].jiguna, students[i].phone,students[i].score);
}
}
fclose(maleFile);
fclose(femaleFile);
printf("学生信息已按性别分割并保存到文件!\n");
}
//将数据写入文件
void Write_File(){
FILE *file = fopen("D:/JK0112.txt", "w");
if (file == NULL) {
printf("无法打开文件!\n");
return;
}
for(int i = 0 ;i<numStudents;i++) {
fprintf(file, "%d %s %s %s %s %s %f\n", students[numStudents].studentID, students[numStudents].name,
students[numStudents].gender, students[numStudents].birthday, students[numStudents].jiguna,
students[numStudents].phone, students[numStudents].score);
}
printf("信息保存成功!\n");
}
int main() {
loadStudentsFromFile();//加载数据到结构体
int option;
do {
displayMenu();
scanf("%d", &option);
switch (option) {
case 1:
printf("请选择查询方式:\n");
printf("1. 按姓名查询\n");
printf("2. 按学号查询\n");
printf("3. 显示全部\n");
printf("请输入选项:");
int searchOption;
scanf("%d", &searchOption);
switch (searchOption) {
case 1:
searchByName();
break;
case 2:
searchByStudentID();
break;
case 3:
displayAllStudents();
break;
default:
printf("无效的选项!\n");
break;
}
break;
case 2:
printf("请选择排序方式:\n");
printf("1. 按姓名排序\n");
printf("2. 按成绩排序\n");
printf("请输入选项:");
int sortOption;
scanf("%d", &sortOption);
switch (sortOption) {
case 1:
sortByName();
break;
case 2:
sortByScore();
break;
default:
printf("无效的选项!\n");
break;
}
break;
case 3:
addStudent();
break;
case 4:
printf("请选择删除方式:\n");
printf("1. 按姓名删除\n");
printf("2. 按学号删除\n");
printf("请输入选项:");
int deleteOption;
scanf("%d", &deleteOption);
switch (deleteOption) {
case 1:
deleteByName();
break;
case 2:
deleteByStudentID();
break;
default:
printf("无效的选项!\n");
break;
}
break;
case 5:
modifyStudent();
break;
case 6:
splitByGender();
break;
case 0:
Write_File();
printf("退出程序。\n");
break;
default:
printf("无效的选项!\n");
break;
}
} while (option != 0);
return 0;
}
#endif
[C/C++]学生管理系统带文件操作
于 2023-06-20 15:53:03 首次发布
该代码实现了一个基于C语言的学生信息管理系统,包括加载学生数据、查询、排序、添加、删除、修改和按性别分割文件等功能。系统使用结构体存储学生信息,并通过文件进行数据持久化。用户通过菜单交互,可选择不同操作对数据进行处理。
摘要由CSDN通过智能技术生成