- 基于链表的“学生信息管理系统”
实验内容:编写并调试程序,实现学校各专业班级学生信息的管理。定义学生信息的链表结点类型,包括:学号、姓名、班级、专业、3门成绩。
实验要求:
-
- main函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。
- 定义函数CreateList:按学号由小到大,建立有序的链表。逆序输入 n 个学生信息(调用n次input),学号大的先输入,建立带头结点的单链表。
- 定义函数Output:以指向某个学生结点的指针为参数,将学生信息格式化输出。
- 定义函数Save:将某个学生信息存入文件。
- 定义函数Fetch:从文件中随机读取某个学生的信息。
- 定义函数Search_num:查找指定学号的学生,返回指向该学生结点的指针。
- 定义函数InsertList:在函数中输入一个学生的信息,将该学生信息插入到链表中的相应位置,并保持此链表按学号的有序性。
- 定义函数Delete_num:从链表中删除指定学号的学生。
- 定义函数Search_major _subject_score:查找某个专业的、某门课程的成绩小于某个分数的学生,返回指向该学生结点的指针。
- 定义函数Delete_ major _subject:从链表中删除某个专业的、某门课程的成绩小于某个分数的学生。
题目如上
源代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef long long ll;
struct Student{
char num[15];//学号
char name[15];//姓名
char major[10];//专业(computer,software,network)
int classNo;//班级(1-2)
int score[3];//3门课的成绩(0-2)
ll numll;
struct Student *next;
};
typedef struct Student STU;
STU *head=NULL;
STU *p=NULL,*pr=NULL;
int N;
STU* AppendNode(STU *head)//下一元素
{
STU *p=NULL,*pr=head;
p=(STU*)malloc(sizeof(STU));
if(head==NULL)
{
head=p;//第一次创建
}
else//第二次及以后
{
while(pr->next!=NULL) //pr给的头指针地址,每次添加都从头开始寻找
{
pr=pr->next;//直到找到尾节点停止
}
pr->next=p; //给当前阶段尾节点以新创建的地址值
}
p->next=NULL;//一定要给予next赋值为NULL,也就是某个阶段的尾节点一定是NULL值
return head;
}
void Input(STU *p)
{
scanf("%s %s %s %d %d %d %d