帮我写一段1、学生信息管理系统 要求: (1)数据结构:创建学生信息结点类型以及学生信息结构体; (2)存储结构:选择单链表存储学生信息。 (3)实现功能(以函数方式实现):学生信息链表创建、学生信息输入、学生信息 查询、学生信息修改、学生信息删除、学生信息输出(全部或部分输出)或保存到文件,学生相关排序。有关的代码
时间: 2023-12-20 18:05:57 浏览: 91
好的,这是一个基本的学生信息管理系统的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_ID_LEN 10
#define MAX_GRADE_LEN 5
// 学生信息结构体
typedef struct student {
char name[MAX_NAME_LEN]; // 姓名
char id[MAX_ID_LEN]; // 学号
char grade[MAX_GRADE_LEN];// 成绩
struct student *next; // 指向下一个学生信息结点的指针
} Student;
// 学生信息链表的头指针
Student *head = NULL;
// 学生信息链表的创建
void createList() {
head = (Student*) malloc(sizeof(Student));
head->next = NULL;
}
// 学生信息输入
void input() {
Student *p = head;
while (p->next != NULL) {
p = p->next;
}
Student *newStudent = (Student*) malloc(sizeof(Student));
printf("请输入学生姓名:");
scanf("%s", newStudent->name);
printf("请输入学生学号:");
scanf("%s", newStudent->id);
printf("请输入学生成绩:");
scanf("%s", newStudent->grade);
newStudent->next = NULL;
p->next = newStudent;
}
// 学生信息查询
void search() {
char id[MAX_ID_LEN];
printf("请输入需要查找的学生学号:");
scanf("%s", id);
Student *p = head->next;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
printf("姓名:%s 学号:%s 成绩:%s\n", p->name, p->id, p->grade);
return;
}
p = p->next;
}
printf("没有找到该学生信息!\n");
}
// 学生信息修改
void modify() {
char id[MAX_ID_LEN];
printf("请输入需要修改的学生学号:");
scanf("%s", id);
Student *p = head->next;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
printf("请输入修改后的学生姓名:");
scanf("%s", p->name);
printf("请输入修改后的学生成绩:");
scanf("%s", p->grade);
printf("学生信息修改成功!\n");
return;
}
p = p->next;
}
printf("没有找到该学生信息!\n");
}
// 学生信息删除
void delete() {
char id[MAX_ID_LEN];
printf("请输入需要删除的学生学号:");
scanf("%s", id);
Student *p = head->next;
Student *pre = head; // 记录当前结点的前一个结点
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
pre->next = p->next;
free(p);
printf("学生信息删除成功!\n");
return;
}
pre = p;
p = p->next;
}
printf("没有找到该学生信息!\n");
}
// 学生信息输出
void output() {
Student *p = head->next;
while (p != NULL) {
printf("姓名:%s 学号:%s 成绩:%s\n", p->name, p->id, p->grade);
p = p->next;
}
}
// 学生信息保存到文件
void saveToFile() {
FILE *fp = fopen("student.txt", "w");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
Student *p = head->next;
while (p != NULL) {
fprintf(fp, "%s %s %s\n", p->name, p->id, p->grade);
p = p->next;
}
printf("学生信息保存成功!\n");
fclose(fp);
}
// 学生信息排序
void sort() {
Student *p, *q, *temp;
char tempId[MAX_ID_LEN], tempName[MAX_NAME_LEN], tempGrade[MAX_GRADE_LEN];
for (p = head->next; p != NULL; p = p->next) {
for (q = p->next; q != NULL; q = q->next) {
if (strcmp(p->id, q->id) > 0) {
strcpy(tempId, p->id);
strcpy(tempName, p->name);
strcpy(tempGrade, p->grade);
strcpy(p->id, q->id);
strcpy(p->name, q->name);
strcpy(p->grade, q->grade);
strcpy(q->id, tempId);
strcpy(q->name, tempName);
strcpy(q->grade, tempGrade);
}
}
}
printf("学生信息排序成功!\n");
}
int main() {
int choice;
createList();
do {
printf("**********学生信息管理系统**********\n");
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:
input();
break;
case 2:
search();
break;
case 3:
modify();
break;
case 4:
delete();
break;
case 5:
output();
break;
case 6:
saveToFile();
break;
case 7:
sort();
break;
case 0:
printf("谢谢使用!\n");
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
} while (choice != 0);
return 0;
}
```
注意:本代码仅供学习参考,可能存在不足之处,如有疑问欢迎交流讨论。
阅读全文