用c语音编译学生管理系统
时间: 2023-12-15 10:04:21 浏览: 63
这是一个简单的学生管理系统的C语言代码,包含添加学生、查找学生、删除学生、修改学生信息等基本功能。请注意,这只是一个示例,实际使用中需要根据具体需求进行修改和完善。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct student {
char name[20]; // 学生姓名
int age; // 学生年龄
char sex[5]; // 学生性别
int id; // 学生学号
} Student;
// 定义链表结构体
typedef struct node {
Student data;
struct node *next;
} Node;
// 全局变量
Node *head = NULL;
// 函数声明
void add_student(); //添加学生信息
void find_student(); //查找学生信息
void delete_student(); //删除学生信息
void modify_student(); //修改学生信息
void show_student_list(); //显示学生信息列表
void save_to_file(); //将学生信息保存到文件
void read_from_file(); //从文件中读取学生信息
// 主函数
int main() {
int choice;
read_from_file(); //从文件中读取学生信息
while (1) {
printf("\n");
printf("**************************\n");
printf("1. 添加学生信息\n");
printf("2. 查找学生信息\n");
printf("3. 删除学生信息\n");
printf("4. 修改学生信息\n");
printf("5. 显示学生信息列表\n");
printf("0. 退出系统\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
find_student();
break;
case 3:
delete_student();
break;
case 4:
modify_student();
break;
case 5:
show_student_list();
break;
case 0:
save_to_file(); //将学生信息保存到文件
printf("谢谢使用!\n");
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
// 添加学生信息
void add_student() {
Student new_student;
printf("请输入学生姓名:");
scanf("%s", new_student.name);
printf("请输入学生年龄:");
scanf("%d", &new_student.age);
printf("请输入学生性别:");
scanf("%s", new_student.sex);
printf("请输入学生学号:");
scanf("%d", &new_student.id);
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->data = new_student;
new_node->next = NULL;
if (head == NULL) {
head = new_node;
} else {
Node *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = new_node;
}
printf("添加成功!\n");
}
// 查找学生信息
void find_student() {
int id;
printf("请输入要查找的学生学号:");
scanf("%d", &id);
Node *current = head;
while (current != NULL) {
if (current->data.id == id) {
printf("学生姓名:%s\n", current->data.name);
printf("学生年龄:%d\n", current->data.age);
printf("学生性别:%s\n", current->data.sex);
printf("学生学号:%d\n", current->data.id);
return;
}
current = current->next;
}
printf("未找到该学生信息!\n");
}
// 删除学生信息
void delete_student() {
int id;
printf("请输入要删除的学生学号:");
scanf("%d", &id);
Node *current = head;
Node *previous = NULL;
while (current != NULL) {
if (current->data.id == id) {
if (previous == NULL) {
head = current->next;
} else {
previous->next = current->next;
}
free(current);
printf("删除成功!\n");
return;
}
previous = current;
current = current->next;
}
printf("未找到该学生信息!\n");
}
// 修改学生信息
void modify_student() {
int id;
printf("请输入要修改的学生学号:");
scanf("%d", &id);
Node *current = head;
while (current != NULL) {
if (current->data.id == id) {
printf("请输入学生姓名:");
scanf("%s", current->data.name);
printf("请输入学生年龄:");
scanf("%d", ¤t->data.age);
printf("请输入学生性别:");
scanf("%s", current->data.sex);
printf("修改成功!\n");
return;
}
current = current->next;
}
printf("未找到该学生信息!\n");
}
// 显示学生信息列表
void show_student_list() {
if (head == NULL) {
printf("无学生信息!\n");
return;
}
Node *current = head;
printf("学生姓名\t学生年龄\t学生性别\t学生学号\n");
while (current != NULL) {
printf("%s\t\t%d\t\t%s\t\t%d\n", current->data.name, current->data.age, current->data.sex, current->data.id);
current = current->next;
}
}
// 将学生信息保存到文件
void save_to_file() {
Node *current = head;
FILE *fp = fopen("student.txt", "w");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
while (current != NULL) {
fprintf(fp, "%s %d %s %d\n", current->data.name, current->data.age, current->data.sex, current->data.id);
current = current->next;
}
fclose(fp);
printf("学生信息已保存至文件!\n");
}
// 从文件中读取学生信息
void read_from_file() {
FILE *fp = fopen("student.txt", "r");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
while (!feof(fp)) {
Student student;
fscanf(fp, "%s %d %s %d\n", student.name, &student.age, student.sex, &student.id);
if (feof(fp)) {
break;
}
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->data = student;
new_node->next = NULL;
if (head == NULL) {
head = new_node;
} else {
Node *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = new_node;
}
}
fclose(fp);
}
```
该程序的主要逻辑如下:
1. 定义学生结构体和链表结构体;
2. 定义全局变量head表示链表头节点;
3. 实现添加学生、查找学生、删除学生、修改学生信息、显示学生信息列表、将学生信息保存到文件和从文件中读取学生信息等基本功能;
4. 在主函数中,通过switch语句实现不同的操作选项。
请注意,该程序并没有进行错误处理,例如输入非法字符或者非法的学生学号等情况。在实际使用中需要根据具体需求进行修改和完善。
阅读全文