基于C语言实现的学生信息管理系统
时间: 2023-11-15 13:06:29 浏览: 38
学生信息管理系统需要实现以下功能:
1. 添加学生信息:包括学号、姓名、性别、年龄、班级、联系方式等。
2. 查询学生信息:可以按照学号、姓名、班级等条件进行查询。
3. 修改学生信息:可以修改学生的各项信息。
4. 删除学生信息:可以根据学号或姓名删除学生信息。
5. 统计学生信息:可以统计班级总人数、男女人数等信息。
6. 存储学生信息:可以将学生信息存储到文件中,下次启动程序时可以读取之前保存的信息。
以下是一个基于C语言实现的简单的学生信息管理系统的代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生信息结构体
typedef struct student {
char id[20]; // 学号
char name[20]; // 姓名
char gender[10]; // 性别
int age; // 年龄
char cls[20]; // 班级
char tel[20]; // 联系方式
} Student;
// 学生链表结构体
typedef struct node {
Student data; // 学生信息
struct node *next; // 指向下一个节点的指针
} Node;
// 全局变量,存储学生链表的头节点
Node *head = NULL;
// 添加学生信息
void add_student() {
Student stu;
printf("请输入学生信息:\n");
printf("学号:");
scanf("%s", stu.id);
printf("姓名:");
scanf("%s", stu.name);
printf("性别:");
scanf("%s", stu.gender);
printf("年龄:");
scanf("%d", &stu.age);
printf("班级:");
scanf("%s", stu.cls);
printf("联系方式:");
scanf("%s", stu.tel);
// 创建新节点
Node *new_node = (Node *)malloc(sizeof(Node));
new_node->data = stu;
new_node->next = NULL;
// 将节点插入链表末尾
if (head == NULL) {
head = new_node;
} else {
Node *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_node;
}
printf("添加成功!\n");
}
// 查询学生信息
void query_student() {
int choice;
printf("请选择查询方式:\n");
printf("1.按学号查询\n2.按姓名查询\n3.按班级查询\n");
scanf("%d", &choice);
char key[20];
printf("请输入查询关键字:");
scanf("%s", key);
Node *p = head;
int flag = 0;
while (p != NULL) {
if ((choice == 1 && strcmp(p->data.id, key) == 0) ||
(choice == 2 && strcmp(p->data.name, key) == 0) ||
(choice == 3 && strcmp(p->data.cls, key) == 0)) {
printf("学号:%s\n", p->data.id);
printf("姓名:%s\n", p->data.name);
printf("性别:%s\n", p->data.gender);
printf("年龄:%d\n", p->data.age);
printf("班级:%s\n", p->data.cls);
printf("联系方式:%s\n", p->data.tel);
flag = 1;
}
p = p->next;
}
if (!flag) {
printf("未找到相关学生信息!\n");
}
}
// 修改学生信息
void modify_student() {
char key[20];
printf("请输入要修改的学生姓名:");
scanf("%s", key);
Node *p = head;
int flag = 0;
while (p != NULL) {
if (strcmp(p->data.name, key) == 0) {
printf("请输入修改后的信息:\n");
printf("学号:");
scanf("%s", p->data.id);
printf("姓名:");
scanf("%s", p->data.name);
printf("性别:");
scanf("%s", p->data.gender);
printf("年龄:");
scanf("%d", &p->data.age);
printf("班级:");
scanf("%s", p->data.cls);
printf("联系方式:");
scanf("%s", p->data.tel);
printf("修改成功!\n");
flag = 1;
}
p = p->next;
}
if (!flag) {
printf("未找到相关学生信息!\n");
}
}
// 删除学生信息
void delete_student() {
int choice;
printf("请选择删除方式:\n");
printf("1.按学号删除\n2.按姓名删除\n");
scanf("%d", &choice);
char key[20];
printf("请输入删除关键字:");
scanf("%s", key);
Node *p = head;
Node *prev = NULL;
int flag = 0;
while (p != NULL) {
if ((choice == 1 && strcmp(p->data.id, key) == 0) ||
(choice == 2 && strcmp(p->data.name, key) == 0)) {
if (prev == NULL) {
head = p->next;
} else {
prev->next = p->next;
}
free(p);
printf("删除成功!\n");
flag = 1;
break;
}
prev = p;
p = p->next;
}
if (!flag) {
printf("未找到相关学生信息!\n");
}
}
// 统计学生信息
void statistics_student() {
int choice;
printf("请选择统计方式:\n");
printf("1.统计班级总人数\n2.统计男女人数\n");
scanf("%d", &choice);
if (choice == 1) {
char cls[20];
printf("请输入班级名称:");
scanf("%s", cls);
Node *p = head;
int count = 0;
while (p != NULL) {
if (strcmp(p->data.cls, cls) == 0) {
count++;
}
p = p->next;
}
printf("%s班的总人数为:%d\n", cls, count);
} else if (choice == 2) {
Node *p = head;
int male_count = 0, female_count = 0;
while (p != NULL) {
if (strcmp(p->data.gender, "男") == 0) {
male_count++;
} else if (strcmp(p->data.gender, "女") == 0) {
female_count++;
}
p = p->next;
}
printf("男生人数为:%d,女生人数为:%d\n", male_count, female_count);
} else {
printf("输入有误!\n");
}
}
// 保存学生信息
void save_student() {
FILE *fp = fopen("students.dat", "wb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
Node *p = head;
while (p != NULL) {
fwrite(&(p->data), sizeof(Student), 1, fp);
p = p->next;
}
fclose(fp);
printf("保存成功!\n");
}
// 读取学生信息
void load_student() {
FILE *fp = fopen("students.dat", "rb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
Student stu;
while (fread(&stu, sizeof(Student), 1, fp) == 1) {
Node *new_node = (Node *)malloc(sizeof(Node));
new_node->data = stu;
new_node->next = NULL;
if (head == NULL) {
head = new_node;
} else {
Node *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_node;
}
}
fclose(fp);
printf("读取成功!\n");
}
int main() {
int choice;
while (1) {
printf("1.添加学生信息\n");
printf("2.查询学生信息\n");
printf("3.修改学生信息\n");
printf("4.删除学生信息\n");
printf("5.统计学生信息\n");
printf("6.保存学生信息\n");
printf("7.读取学生信息\n");
printf("0.退出程序\n");
printf("请选择功能:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
query_student();
break;
case 3:
modify_student();
break;
case 4:
delete_student();
break;
case 5:
statistics_student();
break;
case 6:
save_student();
break;
case 7:
load_student();
break;
case 0:
printf("欢迎下次使用!\n");
return 0;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
}
```