请用c语言实现一个学生信息管理系统要求实现功能(以函数方式实现):学生信息链表创建、学生信息输入、学生信息 查询、学生信息修改、学生信息删除、学生信息输出(全部或部分输出)或保存到文件,学生相关排序并且注释
时间: 2023-12-20 22:07:38 浏览: 73
学生信息管理系统(C++实现,链表实现,还有完整的实验报告)
5星 · 资源好评率100%
好的,我会用C语言为你实现一个基本的学生信息管理系统,以下是实现代码和注释:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生信息结构体
struct Student {
char name[20];
int age;
char gender[10];
char department[30];
char major[30];
int id;
struct Student *next;
};
// 学生信息链表创建
struct Student *create() {
struct Student *head, *p, *q;
head = (struct Student *)malloc(sizeof(struct Student)); // 创建头节点
head->next = NULL;
q = head;
printf("请输入学生信息,按0结束输入:\n");
while (1) {
p = (struct Student *)malloc(sizeof(struct Student));
scanf("%s", p->name);
if (strcmp(p->name, "0") == 0) {
break;
}
scanf("%d%s%s%s%d", &p->age, p->gender, p->department, p->major, &p->id);
q->next = p;
q = p;
}
q->next = NULL;
return head;
}
// 学生信息输入
void input(struct Student *p) {
printf("请输入学生信息:\n");
scanf("%s%d%s%s%s%d", p->name, &p->age, p->gender, p->department, p->major, &p->id);
}
// 学生信息查询
void search(struct Student *head) {
struct Student *p;
int id;
printf("请输入要查询的学生的学号:\n");
scanf("%d", &id);
p = head->next;
while (p) {
if (p->id == id) {
printf("姓名:%s\n", p->name);
printf("年龄:%d\n", p->age);
printf("性别:%s\n", p->gender);
printf("学院:%s\n", p->department);
printf("专业:%s\n", p->major);
printf("学号:%d\n", p->id);
return;
}
p = p->next;
}
printf("没有找到该学生!\n");
}
// 学生信息修改
void modify(struct Student *head) {
struct Student *p;
int id;
printf("请输入要修改的学生的学号:\n");
scanf("%d", &id);
p = head->next;
while (p) {
if (p->id == id) {
input(p); // 调用输入函数修改学生信息
printf("学生信息修改成功!\n");
return;
}
p = p->next;
}
printf("没有找到该学生!\n");
}
// 学生信息删除
void del(struct Student *head) {
struct Student *p, *q;
int id;
printf("请输入要删除的学生的学号:\n");
scanf("%d", &id);
p = head->next;
q = head;
while (p) {
if (p->id == id) {
q->next = p->next;
free(p);
printf("学生信息删除成功!\n");
return;
}
q = p;
p = p->next;
}
printf("没有找到该学生!\n");
}
// 学生信息输出
void output(struct Student *head) {
struct Student *p;
p = head->next;
printf("所有学生信息如下:\n");
while (p) {
printf("姓名:%s\n", p->name);
printf("年龄:%d\n", p->age);
printf("性别:%s\n", p->gender);
printf("学院:%s\n", p->department);
printf("专业:%s\n", p->major);
printf("学号:%d\n", p->id);
p = p->next;
}
}
// 将学生信息保存到文件
void save(struct Student *head) {
FILE *fp;
struct Student *p;
p = head->next;
fp = fopen("student.txt", "w");
while (p) {
fprintf(fp, "%s %d %s %s %s %d\n", p->name, p->age, p->gender, p->department, p->major, p->id);
p = p->next;
}
fclose(fp);
printf("学生信息保存成功!\n");
}
// 学生信息排序(按学号升序)
void sort(struct Student *head) {
struct Student *p, *q, *temp;
p = head->next;
while (p) {
q = p->next;
while (q) {
if (p->id > q->id) {
temp = (struct Student *)malloc(sizeof(struct Student));
memcpy(temp, p, sizeof(struct Student));
memcpy(p, q, sizeof(struct Student));
memcpy(q, temp, sizeof(struct Student));
free(temp);
}
q = q->next;
}
p = p->next;
}
printf("学生信息排序成功!\n");
}
int main() {
int choice;
struct Student *head;
head = create();
while (1) {
printf("请选择要进行的操作:\n");
printf("1. 学生信息查询\n");
printf("2. 学生信息修改\n");
printf("3. 学生信息删除\n");
printf("4. 所有学生信息输出\n");
printf("5. 学生信息保存到文件\n");
printf("6. 学生信息排序\n");
printf("7. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
search(head);
break;
case 2:
modify(head);
break;
case 3:
del(head);
break;
case 4:
output(head);
break;
case 5:
save(head);
break;
case 6:
sort(head);
break;
case 7:
exit(0);
default:
printf("输入错误,请重新输入!\n");
break;
}
}
return 0;
}
```
以上是一个简单的学生信息管理系统,具有基本的增删改查功能,并且可以将学生信息保存到文件,进行排序等操作。
阅读全文