C语言学习代码,自己做的一个学生信息管理系统,其中具有增删改查以及文件保存,其中涉及到指针、结构体、链表操作、以及文件管理
时间: 2024-02-01 20:02:39 浏览: 69
非常好!以下是一个简单的 C 语言学生信息管理系统,其中包括增加、删除、修改和查找学生信息,以及保存到文件中的功能。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct student {
char name[20];
int age;
int score;
struct student *next;
} Student;
// 声明函数
void addStudent(Student **head);
void deleteStudent(Student **head);
void modifyStudent(Student *head);
void searchStudent(Student *head);
void saveToFile(Student *head);
void printMenu();
void printStudent(Student *s);
int main() {
Student *head = NULL; // 初始化链表头
int choice;
do {
printMenu();
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent(&head);
break;
case 2:
deleteStudent(&head);
break;
case 3:
modifyStudent(head);
break;
case 4:
searchStudent(head);
break;
case 5:
saveToFile(head);
break;
case 6:
printf("退出程序。\n");
break;
default:
printf("无效的选择,请重新选择。\n");
break;
}
} while (choice != 6);
// 释放链表内存
Student *p = head;
while (p) {
head = p->next;
free(p);
p = head;
}
return 0;
}
// 添加学生信息
void addStudent(Student **head) {
printf("请输入学生姓名、年龄和成绩:\n");
Student *newStudent = (Student *)malloc(sizeof(Student));
scanf("%s %d %d", newStudent->name, &(newStudent->age), &(newStudent->score));
newStudent->next = NULL;
if (*head == NULL) {
*head = newStudent;
} else {
Student *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = newStudent;
}
printf("添加成功!\n");
}
// 删除学生信息
void deleteStudent(Student **head) {
if (*head == NULL) {
printf("链表为空,无法删除学生信息。\n");
return;
}
printf("请输入要删除的学生姓名:\n");
char name[20];
scanf("%s", name);
Student *p = *head;
Student *prev = NULL;
while (p != NULL && strcmp(p->name, name) != 0) {
prev = p;
p = p->next;
}
if (p == NULL) {
printf("未找到该学生,删除失败。\n");
} else {
if (prev == NULL) { // 删除头结点
*head = (*head)->next;
} else {
prev->next = p->next;
}
free(p);
printf("删除成功!\n");
}
}
// 修改学生信息
void modifyStudent(Student *head) {
if (head == NULL) {
printf("链表为空,无法修改学生信息。\n");
return;
}
printf("请输入要修改的学生姓名:\n");
char name[20];
scanf("%s", name);
Student *p = head;
while (p != NULL && strcmp(p->name, name) != 0) {
p = p->next;
}
if (p == NULL) {
printf("未找到该学生,修改失败。\n");
} else {
printf("请输入新的学生年龄和成绩:\n");
scanf("%d %d", &(p->age), &(p->score));
printf("修改成功!\n");
}
}
// 查找学生信息
void searchStudent(Student *head) {
if (head == NULL) {
printf("链表为空,无法查找学生信息。\n");
return;
}
printf("请输入要查找的学生姓名:\n");
char name[20];
scanf("%s", name);
Student *p = head;
while (p != NULL && strcmp(p->name, name) != 0) {
p = p->next;
}
if (p == NULL) {
printf("未找到该学生。\n");
} else {
printStudent(p);
}
}
// 保存学生信息到文件
void saveToFile(Student *head) {
if (head == NULL) {
printf("链表为空,无法保存学生信息到文件。\n");
return;
}
FILE *fp = fopen("students.dat", "w");
if (fp == NULL) {
printf("打开文件失败。\n");
return;
}
Student *p = head;
while (p != NULL) {
fprintf(fp, "%s %d %d\n", p->name, p->age, p->score);
p = p->next;
}
fclose(fp);
printf("学生信息已保存到文件中。\n");
}
// 打印菜单
void printMenu() {
printf("\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 查找学生信息\n");
printf("5. 保存学生信息到文件\n");
printf("6. 退出程序\n");
printf("请选择您的操作:\n");
}
// 打印学生信息
void printStudent(Student *s) {
printf("%s %d %d\n", s->name, s->age, s->score);
}
```
这个程序使用了链表来存储学生信息,通过指针和结构体来操作链表。同时,也实现了将学生信息保存到文件中的功能,通过文件管理来进行保存和读取数据。
阅读全文