1、数 据 结 构 课程设计报告书 学校 学号 姓名 指导老师 课程设计的名称:课程设计的名称:学生成绩管理学生成绩管理 1. 问题描述: 学生成绩管理是学校教务管理的重要组成部分, 其处理信息量很大, 该题目是对学生的成绩 管理作一个简单的模拟,其中学生信息包括:学号、姓名与成绩。成绩分为课程 1 成绩、课 程 2 成绩、课程 3 成绩和总成绩。要求设计一个简易的成绩管理系统,输入各门功课的成绩 后能自动求出总成绩,并通过菜单选择操作方式完成下列功能: 登记学生成绩; 查询学生成绩; 插入学生成绩; 删除学生成绩; 按总成绩降序排序。 2. 基本要求: 该题目涉及到单链表的各种操作, 包括单链表
2、的建立、 结点的查找、 插入、 删除等基本运算。 首先建立学生成绩单链表,链表中每个结点由 4 个域组成,分别为:学号、姓名、成绩、存 放下一个结点地址的 next 域。然后将要求完成的四项功能写成四个函数,登记学生成绩对 应建立学生单链表的功能,后三个功能分别对应单链表的查询、插入与删除三大基本操作。 3. 算法思想: Creat()函数算法思想:从 0 至 n 循环输入 n 个同学的三科成绩,并且计算总成绩。 Inquiry()函数算法思想: 将学号与已输入的所有学号做比较, 一旦相同则输出该学号信息, 否则显示没有该学生信息。 Insert ()函数算法思想:生成一个新节点,然后将其接到
3、原有链表尾部。 Delete()函数算法思想:通过 ID 找到该节点,并删去该节点。 Sort(函数算法思想:利用排序算法对每一个节点作比较并更换其在链表中的位置顺序。 4. 模块划分 (1)LinkList Creat(LinkList T,int n)其功能是创造节点,录入成绩。 (2)void Inquiry(LinkList T)其功能是查询与已知 ID 一致的学生信息并展示出来。 (3)void Insert(LinkList T,int n) 其功能是添加若干个学生的成绩信息。 (4)void Delete(LinkList T) 其功能是删除若干个学生的成绩信息。 (5)void
4、 Sort(LNode *p) 其功能是排序并展示若干个学生的成绩信息。 5. 数据结构: 数据类型 LNode 定义如下: typedef struct LNode int ID; char name20; int score1; int score2; int score3; int total; struct LNode *next; LNode,*LinkList; 6. 源程序: 源代码 /main.c #include #include typedef struct LNode int ID; char name20; int score1; int score2; int sco
5、re3; int total; struct LNode *next; LNode,*LinkList; LinkList Creat(LinkList T,int n); void Delete(LinkList T); void Inquiry(LinkList T); void Insert(LinkList T,int n); void Sort(LNode *p); void Insert(LinkList T,int n) int i; LNode *r=T,*p; while(r-next)!=NULL) r=r-next; for(i=0;iID); printf(“Pleas
6、e enter the students name: “); scanf(“%s“,p-name); printf(“Please enter the students score 1: “); scanf(“%d“, printf(“Please enter the students score 2: “); scanf(“%d“, printf(“Please enter the students score 3: “); scanf(“%d“, p-total=p-score1+p-score2+p-score3; printf(“The total score is %dn“,p-total); p-next=NULL; r-next=p; r=p; printf(“nInsert is complete!“); void Inquiry(LinkList T) int id; printf(“Pl