C++基于单链表实现学生成绩管理系统

本文实例为大家分享了C++实现学生成绩管理系统的具体代码,供大家参考,具体内容如下

/*程序说明:
    程序是由单链表实现的学生成绩管理系统,主要功能有输入/查找/删除/修改/排序/显示学生成绩;
    输入功能由带头结点的单链表实现,并且使用前插法输入学生信息;
    输入功能可以实现插入学生信息的功能,所以无需再专门写一个插入的函数;
    删除/修改学生信息要用到查找功能,所以将查找与删除/修改功能写到一起;
    查找功能使用顺序查找遍历整个单链表;
    使用直接插入法对学生信息排序;

    程序主要复习对单链表的使用,所以并没有完整的对错误输入的保护功能;
    由于学过的是c++,但教科书是由c语言为主,所以写的代码是混合c与c++;

    编译环境:visual studio 2017
    2017.5.13
*/

#include<iostream>
using namespace std;
struct Node;
typedef struct Node* PNode;
struct Node
{
    long int stuId;
    char name[30];
    //成绩
    float Math;
    float English;
    float Chinese;

    float sum;//总分
    PNode link;
};
typedef struct Node* LinkList;

//输入学生信息
LinkList Input(LinkList llist)
{
    LinkList p;
    long int n;
    cout << "\n***********************成绩输入入口***********************\n";
    cout << "请输入你想输入的学生信息个数:\n";
    cin >> n;
    for (int i = n; i > 0; i--)//前插法插入信息
    {
        p = (LinkList)malloc(sizeof(struct Node));
        cout << "输入学生学号:\n";
        cin >> p->stuId;
        cout << "输入学生姓名:\n";
        cin >> p->name;
        cout << "输入学生数学成绩:\n";
        cin >> p->Math;
        cout << "输入学生英语成绩:\n";
        cin >> p->English;
        cout << "输入学生语文成绩:\n";
        cin >> p->Chinese;

        p->sum = p->Math + p->English + p->Chinese;//总分

        //使用含有头结点的单链表实现信息的输入
        p->link = llist->link;
        llist->link = p;
    }
    return llist;
}

//查找/修正学生的信息
void Check(LinkList llist)
{
    LinkList p, q;
    long int id;
    char sName[30];
    cout << "\n***********************成绩查改入口***********************\n";
    if (llist->link == NULL)
        cout << "没有学生信息记录\n";
    else
    {
        cout << "输入查找方式:\n"
            << "1.按学号查找\n2.按姓名查找\n";
        int a;
        cin >> a;
        if (a == 1)//按学号查找
        {
            p = llist;
            q = p->link;
            cout << "输入学生学号:\n";
            cin >> id;
            while (q->stuId != id&&q->link != NULL)//从单链表表头顺序查找
            {
                p = q;
                q = q->link;
            }
            if (q->stuId == id)
            {
                cout << "学生信息如下:\n";
                cout << q->stuId << "\t" << q->name << "\t" << q->Math << "\t"
                    << q->English << "\t" << q->Chinese << "\t" << q->sum << endl;
                cout << "输入功能序号:\n"
                    << "1.修改学生信息\n2.删除学生信息\n0.退出\n";
                int b;
                cin >> b;
                if (b == 1)//修改学生信息
                {
                    cout << "请输入修正后的学生信息:\n";
                    cout << "输入学生学号:\n";
                    cin >> q->stuId;
                    cout << "输入学生姓名:\n";
                    cin >> q->name;
                    cout << "输入学生数学成绩:\n";
                    cin >> q->Math;
                    cout << "输入学生英语成绩:\n";
                    cin >> q->English;
                    cout << "输入学生语文成绩:\n";
                    cin >> q->Chinese;

                    q->sum = q->Math + q->English + q->Chinese;
                }
                else if (b == 2)//删除学生信息
                {
                    p->link = q->link;
                    free(q);
                }
            }
            else
                cout << "查无此人\n";
        }

        else if (a == 2)//按姓名查找
        {
            p = llist;
            q = p->link;
            cout << "输入学生姓名:\n";
            cin >> sName;
            while (strcmp(sName, q->name) != 0 && q->link != NULL)//从单链表表头顺序查找
            {
                p = q;
                q = q->link;
            }
            if (strcmp(sName, q->name) == 0)
            {
                cout << "学生信息如下:\n";
                cout << q->stuId << "\t" << q->name << "\t" << q->Math << "\t"
                    << q->English << "\t" << q->Chinese << "\t" << q->sum << endl;
                cout << "输入功能序号:\n"
                    << "1.修改学生信息\n2.删除学生信息\n0.退出\n";
                int b;
                cin >> b;
                if (b == 1)//修改学生信息
                {
                    cout << "请输入修正后的学生信息:\n";
                    cout << "输入学生学号:\n";
                    cin >> q->stuId;
                    cout << "输入学生姓名:\n";
                    cin >> q->name;
                    cout << "输入学生数学成绩:\n";
                    cin >> q->Math;
                    cout << "输入学生英语成绩:\n";
                    cin >> q->English;
                    cout << "输入学生语文成绩:\n";
                    cin >> q->Chinese;

                    q->sum = q->Math + q->English + q->Chinese;
                }
                else if (b == 2)//删除学生信息
                {
                    p->link = q->link;
                    free(q);
                }
            }
            else
                cout << "查无此人";
        }
    }
}

//对学生信息排序
void Sort(LinkList llist)
{
    LinkList p, q, r;
    cout << "\n***********************成绩排序入口***********************\n";

    if (llist->link == NULL)
        cout << "没有学生信息记录\n";
    else
    {
        cout << "选择排序方式:\n"
            << "1.按学号\n2.按数学成绩\n3.按英语成绩\n4.按语文成绩\n5.按总分\n";
        int a;
        cin >> a;
        //使用直接插入法进行排序
        switch (a)
        {
        case 1://按学号
            p = llist->link->link;
            llist->link->link = NULL;
            while (p != NULL)//学号由小到大排列
            {
                r = p->link;
                q = llist;
                while (q->link != NULL&&q->link->stuId < p->stuId)//查找插入位置
                    q = q->link;
                //插入
                p->link = q->link;
                q->link = p;
                p = r;
            }
            break;
        case 2://按数学
            p = llist->link->link;
            llist->link->link = NULL;
            while (p != NULL)//数学成绩由高到低排列
            {
                r = p->link;
                q = llist;
                while (q->link != NULL&&q->link->Math > p->Math)//查找插入位置
                    q = q->link;
                //插入
                p->link = q->link;
                q->link = p;
                p = r;
            }
            break;
        case 3://按英语
            p = llist->link->link;
            llist->link->link = NULL;
            while (p != NULL)//英语成绩由高到低排列
            {
                r = p->link;
                q = llist;
                while (q->link != NULL&&q->link->English > p->English)//查找插入位置
                    q = q->link;
                //插入
                p->link = q->link;
                q->link = p;
                p = r;
            }
            break;
        case 4://按语文
            p = llist->link->link;
            llist->link->link = NULL;
            while (p != NULL)//语文成绩由高到低排列
            {
                r = p->link;
                q = llist;
                while (q->link != NULL&&q->link->Chinese > p->Chinese)//查找插入位置
                    q = q->link;
                //插入
                p->link = q->link;
                q->link = p;
                p = r;
            }
            break;
        case 5://按总分
            p = llist->link->link;
            llist->link->link = NULL;
            while (p != NULL)//总分成绩由高到低排列
            {
                r = p->link;
                q = llist;
                while (q->link != NULL&&q->link->sum > p->sum)//查找插入位置
                    q = q->link;
                //插入
                p->link = q->link;
                q->link = p;
                p = r;
            }
            break;
        }
    }
}

//显示学生的信息
void Display(LinkList llist)
{
    LinkList p;
    p = llist->link;
    cout << "\n***********************成绩显示入口***********************\n";
    if (llist->link == NULL)
        cout << "没有学生信息记录\n";
    else
    {
        cout << "学生信息如下:\n";
        cout << "学号\t 姓名\t 数学\t 英语\t 语文\t 总分\n";
        while (p)//输出学生信息
        {
            cout << p->stuId << "\t" << p->name << "\t" << p->Math << "\t"
                << p->English << "\t" << p->Chinese << "\t" << p->sum<<endl;
            p = p->link;
        }
    }
}

//程序主体
int main()
{
    LinkList llist= (LinkList)malloc(sizeof(struct Node));
    llist->link = NULL;
    int a, b=1;
    while (b)//循环使用菜单
    {
        cout << "\n***********************成绩管理系统***********************\n"
            << "请选择你所需要的功能:\n"
            << "1.输入学生信息\n2.查找/修正学生信息\n3.排序学生信息\n4.显示学生信息\n5.退出\n";
        cin >> a;
        switch (a)
        {
        case 1:
            llist=Input(llist);
            break;
        case 2:
            Check(llist);
            break;
        case 3:
            Sort(llist);
            break;
        case 4:
            Display(llist);
            break;
        case 5:
            b = 0;
            break;
        }
    }
    cout << "\n***********************感谢您的使用***********************\n";
    cin.get(); cin.get();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++课程设计之学生成绩管理系统

    本文实例为大家分享了C++学生成绩管理系统的具体代码,供大家参考,具体内容如下 /*要求:设立程序管理学生如下信息:学生学号.姓名.班级,语文.数学.英语成绩. 至少要有10名以上学生. 能够实现根据以下关键字查询:学生姓名 .学号.班级.课程名称. 能够实现按照单科成绩.总成绩.平均成绩.学号排序. 能够实现学生信息的插入.删除和修改. 能够查询每个课程的最高分.最低分及相应学生姓名.班级和学号. 能够查询每个班级某门课程的优秀率(90分及以上).不及格率,并进行排序.*/ #include<

  • C++实现简单班级成绩管理系统

    本文实例为大家分享了C++实现简单班级成绩管理系统的具体代码,供大家参考,具体内容如下 #include<iostream> #include<fstream> #include<cstring> #include <stdlib.h> #include <conio.h> using namespace std; int n=0; class Student {public:       string name;     string num;

  • C++实现班级成绩管理系统

    本文实例为大家分享了C++实现班级成绩管理系统的具体代码,供大家参考,具体内容如下 本文定义了一个学生类的结构体,通过vector 数组来存储这个结构体.通过运算求出每个同学的总分,平均分.计算得到班级中各科的最高分和最低分,总成绩的最高分和最低分. #include<iostream> #include<vector> #include<algorithm> #include<string> //引入头文件 using namespace std; //

  • C++实现学生成绩管理系统最新版

    学生成绩管理系统,供大家参考,具体内容如下 一.问题描述及功能要求 (1)输入同学的学号,姓名,三门科成绩(应用数学.大学英语.计算机应用基础) (2)可以计算出每个学生三门课的平均成绩. (3)可通过输入姓名.学号查询成绩,也可通过姓名修改学生信息,也可通过主界面删除学生信息,以及清楚所有信息 二.代码实现 带有注释 废话不说,直接代码,欢迎指正. 大家CV可能有不兼容的情况,可以跟我滴滴,尽可能解决问题地回复. #include <cstdlib> #include <iostrea

  • C++实现学生成绩管理系统

    终于结束了期末考试,有时间将这学期C++作业整理一下,都是一些基础的内容,写出来希望给一些初学者一些参考.主要使用到C++的面对对象编程思想,对学生信息类及链表类进行封装 文章可能有点长,可以只参考需要的部分 题目要求 用C++及类和对象来进行抽象.封装与实现,用作课内的第四次作业.注意学生的成绩需要用链表来实现,并且链表也需要实现封装. 成绩管理系统 信息描述: 现有学生成绩信息,内容如下 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 0

  • 学生成绩管理系统C++实现代码

    本文实例为大家分享了C++学生成绩管理系统的具体代码,供大家参考,具体内容如下 * (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: <C++编写 学生成绩管理系统> * 作 者: 刘江波 * 完成日期: 2012 年 6 月 26 日 * 版 本 号: v.626 * 对任务及求解方法的描述部分 * 问题描述: 用C++编写一个学生成绩管理系统 1.可以实现以下

  • C++实现简单学生成绩管理系统

    本文实例为大家分享了C++实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 一.问题描述 设计一个学生成绩管理程序,实现按班级完成对学生成绩信息的录入和修改,并用文件保存.实现按班级输出学生的成绩单:实现按学号和姓名进行查询,按平均成绩进行排序功能. 二.基本要求 (1)使用面向对象编程思想编写开发过程中需要用到的类,比如:Person 类,学生类继承Person类,管理类实现对成绩信息的操作. (2)输入和输出可以使用文本文件重定向输入(保存数据为磁盘文件):也可以使用标准输入输出进行

  • C++实现简单的学生成绩管理系统

    本文实例为大家分享了C++实现简单学生成绩管理系统的具体代码,供大家参考,具体内容如下 manage.h #include <iostream> #include <fstream> #include <string> using namespace std; //学生 template <class T> class Student {     template <class T>     friend class StudentManage;

  • C++基于单链表实现学生成绩管理系统

    本文实例为大家分享了C++实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 /*程序说明:     程序是由单链表实现的学生成绩管理系统,主要功能有输入/查找/删除/修改/排序/显示学生成绩;     输入功能由带头结点的单链表实现,并且使用前插法输入学生信息;     输入功能可以实现插入学生信息的功能,所以无需再专门写一个插入的函数;     删除/修改学生信息要用到查找功能,所以将查找与删除/修改功能写到一起;     查找功能使用顺序查找遍历整个单链表;     使用直接插入法对

  • C语言单链表版学生信息管理系统

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 代码: //以单链表作为存储结构,设计和实现课程成绩管理的完整程序. //程序包括如下功能. //1.建立学生成绩表,包含学生的学号.姓名和成绩. //2.可以显示所有学生成绩. //3.可以计算学生的总数. //4.可以按学号和序号查找学生. //5.可以在指定位置插入学生成绩数据. //6.可以删除指定位置的学生数据. //7.可以把学生成绩按从高到低的顺序排序. //作者: yinlinqvan //操作系统:

  • 基于C语言实现学生成绩管理系统

    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 这里只贴代码,具体介绍省略. #include <stdio.h> #include <io.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define MAX 200 struct student { char no[10]; // 学号 char name[50]; // 姓名 f

  • C语言使用单链表实现学生信息管理系统

    本文实例为大家分享了C语言使用单链表实现学生信息管理系统,供大家参考,具体内容如下 初学数据结构,记录一下学习过程. 运行结果如图: 1.运行界面 2.录入学生信息 3.按照总分进行排序 代码如下: #define ERROR 0 #define OK 1 #define OVERFLOW -1; typedef int ElemType; typedef int Status; #include<stdio.h> #include<stdlib.h> #include<ma

  • C语言链表实现学生成绩管理系统

    目录 一.课程设计题目及内容 二.主要设计思路 三.程序源码及具体注释 (1)预处理指令 (2)类型定义 (3)函数原型 (4)main函数定义 (5)其他函数定义 四.运行示例 五.注意事项 本文实例为大家分享了C语言基于链表实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 一.课程设计题目及内容 程序名称:学生成绩管理系统 功能要求:录入学生成绩,修改学生成绩,统计每个学生的总分及平均分并能根据学生的平均成绩排序,查询学生成绩,输出学生成绩单.能够保存学生成绩,实现文件的读写.界面简

  • C语言嵌套链表实现学生成绩管理系统

    C语言嵌套链表实现学生成绩管理系统,供大家参考,具体内容如下 链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点. 场景: 一个年级,相当链表A 该年级5个班,每个班5个人,相当于链表B1--B5 做一个学生成绩管理系统 学生成绩有语文 数学 英语 功能: 录入成绩 找三科总分的最高分 最低分 算出平均分 前言 链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用. 链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还

  • C语言利用链表实现学生成绩管理系统

    链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用. 链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点. 链表都有一个头指针,一般以head来表示,存放的是一个地址.链表中的节点分为两类,头结点和一般节点,头结点是没有数据域的.链表中每个节点都分为两部分,一个数据域,一个是指针域. 说到这里你应该就明白了,链表就如同车链子一样,head指向第一个元素:第一个元素又指向第二个元素:……,直到最后一

  • C语言版学生成绩管理系统

    本文实例为大家分享了C语言版学生成绩管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<string.h> #include<algorithm> char buf[255]; char c=14; char path[]="D:\\data"; char tm

  • C语言实现简单学生成绩管理系统

    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 C语言小项目 实现一个学生成绩管理系统 系统功能: 1.实现所有学生成绩的录入(利用结构体数组),当输入字符为end时候,结束成绩的录入:  2.实现所有学生信息的输出  3.输入指定学生姓名,并能输出这名学生的信息  4.将学生成绩按照语文和数学成绩排序 思路: 1. 首先,先把这个小项目的框架打好.考虑要写几个文件,每一个文件里面实现怎样的功能.考虑到这个小项目的代码量以及程序的易读性,我决定将写三个文件.一

  • C语言单链表实现学生管理系统

    本文实例为大家分享了C语言单链表实现学生管理系统的具体代码,供大家参考,具体内容如下 代码: #include<stdio.h> #include<stdlib.h> #include <string.h> #include <malloc.h> struct Student { int num;//学号 char name[20];//名字 char sex[2]; int age; struct Student *next; }; void insert

随机推荐