• 大小: 7KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: C/C++
  • 标签: 链表  

资源简介

1、学生成绩管理(必做)(链表) [问题描述]   设计一个程序,记录并统计班级学生的成绩情况。 [基本要求] (1) 该题目要求使用双向链式线性表。每个结点存储的信息包括姓名,成绩。排序要求是按照成绩自多到少排序。另外,将有不及格成绩的学生单独存成一个链表。 (2) 初始输入: 从文件读入学生信息,建立初始链表。 (3)动态调整链表结点顺序,不及格成绩学生结点移到另外一个链表。 (4) 可有补考成绩输入,补考后及格的学生结点再移入正常链表。 (5) 可进行各种常见操作,例如显示所有学生成绩、插入一个学生节点、删除一个学生节点、查询学生成绩等。

资源截图

代码片段和文件信息

#include
using namespace std;
#include
#include
#include
typedef struct Student        //定义包含学生姓名和成绩的结构体
{
char*name;
int grade;
}ST;
typedef struct DuLNode       //定义双向链表
{
ST data;
struct DuLNode *prior *next;      //前后指针
}LIST;
LIST* insert(LIST* LIST*);                   //插入节点
void creat_list(LIST* LIST*);                //创建双向链表
LIST *del(LIST* char *);                           //删除节点
int menu_select();                            //功能选择
LIST*search(LIST*);                           //寻找节点
void show_list(LIST*);                        //显示链表信息
//*****************************************************主函数
void main()
{
LIST*pass *fail *p *q;
char student_name[20];
int grade;
for (;;)
{
switch (menu_select())
{
case 1:printf(“建立学生成绩管理系统!\n“);
pass = (LIST*)malloc(sizeof(LIST));
fail = (LIST*)malloc(sizeof(LIST));
creat_list(pass fail);
printf(“系统成功建立!\n“);
break;
case 2:printf(“插入一个学生节点!\n“);
p = (LIST*)malloc(sizeof(LIST));
printf(“请输入插入学生的姓名:\n“);
scanf(“%s“ student_name);
printf(“请输入该生成绩:\n“);
scanf(“%d“ &grade);
p->data.name = (char*)malloc(strlen(student_name)*sizeof(char));
strcpy(p->data.name student_name);
p->data.grade = grade;
if (p->data.grade >= 60)                //该生及格
pass = insert(pass p);
else                                    //该生不及格
fail = insert(fail p);
printf(“插入成功!\n“);
break;
case 3:printf(“查询学生成绩!\n“);
printf(“现在先在及格学生中查找!\n“);
p = search(pass);
if (p == NULL)               //表面所查找学生不在及格学生之列
{
printf(“现在在不及格学生中查找!\n“);
p = search(fail);
if (p == NULL)
{
printf(“请检查输入是否有误!\n“);
break;
}
}
printf(“所查询学生的成绩为:%d\n“ p->data.grade);
break;
case 4:printf(“删除学生信息!\n“);
printf(“请输入删除学生的姓名:\n“);
scanf(“%s“ student_name);
printf(“现在先在及格学生中查找要删除的学生!\n“);
p = del(pass student_name);
if (p == NULL)
{
printf(“现在在不及格学生中查找要删除的学生!\n“);
del(fail student_name);
}
break;
case 5:printf(“输出成绩!\n“);
printf(“及格学生成绩为:\n“);
show_list(pass);
printf(“不及格学生成绩为:\n“);
show_list(fail);
break;
case 6:printf(“输入补考成绩!\n“);
q = (LIST*)malloc(sizeof(LIST));
q->data.name = (char*)malloc(strlen(student_name)*sizeof(char));
q = search(fail);                         //在不及格学生链表中找到对应的学生
strcpy(student_name q->data.name);
if (fail->next == q)
{
fail->next = q->next;
if (q->next)
q->next->prior = fail;
}
else
{
q->prior->next = q->next;
if (q->next)
q->next->prior = q->prior;
}
free(q);                                      //在不及格学生中删除该生信息
p = (LIST*)malloc(sizeof(LIST));
p->data.name = (char*)malloc(strlen(student_name)*sizeof(char));
strcpy(p->data.name student_name);
printf(“请输入该生补考成绩:\n“);
scanf(“%d“ &grade);
p->data.grade = grade;
if (p->da

评论

共有 条评论