单链表构建学生信息管理系统(C++)

此为我的第一篇博文,正巧最近正在复习数据结构与算法,便想拿练习的程序来练手。本人水平有限,文章内容粗浅,只是想与初学的朋友交流经验。对于文章中出现的错误和问题,请大家在留言中批评指正,我们互相学习提高。

使用单链表进行构建学生信息管理系统,这是每一位初学者在初步阶段都会遇到的练习题目。此程序有助于我们加深对于链表结构的认识和了解,在反复练习的前提下,接手进一步课题也会更加得心应手。

我在本文的样例程序中实现了管理系统的基本功能,有时间的话会进一步完善。目前在源代码中对于修改删除两个功能还只能通过位置查找,同学们可以进一步完善,通过遍历实现关键词查找。


  • 学生信息管理系统单链表结构
    • 头文件
      • iostream
      • iomanip
      • conioh
    • 结构体
      • 学生结构体 STD
      • 链表结构体 LinkList
    • 功能函数
    • 源代码
  • 总结与展望


学生信息管理系统—单链表结构

前言:因为针对初学者学习,我会尽可能地对于程序内容进行详细的介绍,拓展部分我会贴上相关文章的链接供读者学习。

头文件

本程序中因实现功能较简单,所需头文件三个便已足够,分别是
- iostream
- iomanip
- conio.h

iostream

本头文件是标准输入输出流文件,用来实现便捷的输入输出操作。具体的功能不再赘述,初学者可以通过下面的样例对其功能进行体会。

#include "iostream"
using namespace std;

int main()
{
    char name[10];

    cout<<"请输入您的名字:"<cin>>name;

    cout<<"欢迎使用:"<return 1;   
}

运行结果:
单链表构建学生信息管理系统(C++)_第1张图片

在头文件下的using namespace std,是命名空间,用于程序中关键词的命名冲突问题。详细用法请参见文章——C++命名空间

iomanip

iomanip头文件,在本程序中用来对标准输出流cin进行格式化输出。
该头文件中可实现的标准化输出函数有很多,在本程序中只用到了两个,分别是:

-setw(int n) 设置字宽
-setioflags(ios::left) 左对齐输出

实现效果如以下样例所示:

#include "iomanip"
#include "iostream"
using namespace std;

int main()
{
    int m,n;
    cout<<"请输入两数字m/n:"<cin>>m>>n;

    cout<<"标准输出"<cout<cout<<"格式化输出"<cout<6)<return 1;   
}

运行结果:
单链表构建学生信息管理系统(C++)_第2张图片

对于格式化输出更多的用法,请参见文章——C++标准库之-iomanip

conio.h

此头文件功能有很多,但我在此只介绍本例中用到的功能。
在此程序中主要用来实现“接收回车,不返回”功能——getch()

使用场景是,通过识别回车来确认操作,但无返回。即接收一个空回车。具体使用请参照以下样例:

#include "conio.h"
#include "iostream"
using namespace std;

int main()
{
    cout<<"欢迎使用!请输入回车退出!"<cout<<"感谢您的使用!"<return 1;   
}

运行结果:
单链表构建学生信息管理系统(C++)_第3张图片
单链表构建学生信息管理系统(C++)_第4张图片

结构体

本程序中用到的结构体有两个,分别为学生结构体和链表结构体。

学生结构体 STD

typedef struct
{
    char name[20];
    int score;
}STD;//学生结构体 
typedef struct Lnode
{
    STD data;
    struct Lnode *next;
}LNode,*LinkList;  //链表结构体 

功能函数

在本程序中实现的功能函数包括:

  • 信息录入 insertLinkList
  • 插入功能 同录入
  • 修改功能 updateLinkList
  • 删除功能 deleteLinkList
  • 显示功能 直接在case中实现

具体代码实现请参见源代码,基本解释通过注释给出。

源代码

#include "conio.h"
#include "iomanip" 
#include "iostream"
using namespace std;

typedef struct
{
    char name[20];
    int score;
}STD;//学生结构体 

typedef struct Lnode
{
    STD data;
    struct Lnode *next;
}LNode,*LinkList;  //链表结构体 


//链表初始化 
int initList(LinkList *L)
{
    *L = (LinkList)malloc(sizeof(LNode));
    if(*L==NULL)
        //cout<<"内存分配失败!"<
        return 0;
    (*L)->next==NULL;
    return 1;
}

//插入节点 
int insertLinkList(LinkList L,int i,STD x)
{
    LinkList p=L,s;
    int pos = 0;
    while(p!=NULL && pos1)
    {
        p=p->next;
        pos=pos+1;
    }
    if(p==NULL || pos1)
    {
        cout<<"插入位置不合理!"<return 0;
    }
    s = (LinkList)malloc(sizeof(LNode));
    s->next = p->next;
    s->data = x;
    p->next = s;
    return 1;
}

//删除节点,删除数据返回到 STD *x 
int deleteLinkList(LinkList L,int i)
{
    LinkList p=L,s;
    int pos=0;

    while(p->next!=NULL && pos1)
    {
        p = p->next;
        pos++;
    }
    if(p->next==NULL || pos>i-1)
    {
        cout<<"删除位置不合理!"<return 0;
    }
    //*x=p->next->data;
    s=(LinkList)malloc(sizeof(LNode));
    s=p->next;
    p->next = s->next;
    free(s);
    return 1; 
}


//修改节点
int updatLinkList(LinkList L,int i,STD x)
{
    LinkList p=L,s;
    int pos = 0;
    while(p!=NULL && posnext;
        pos++;
    }
    if(p==NULL || pos>i)
    {
        cout<<"位置有误!"<return 0; 
    }
    p->data = x;
    return 1;
} 

//功能选择表单
int menu()
{
    int k;
    while(1)
    {
        system("cls");
        cout<<"-----欢迎使用学生管理系统(链表)------"<cout<<"1.录入学生信息   2.插入学生信息"<cout<<"3.修改学生信息   4.删除学生信息"<cout<<"5.显示学生信息   0.退出"<cout<<"---------------------------------------"<cout<<"请选择功能序号:";
        cin>>k;
        cout<<"---------------------------------------"<if(k<0 || k>5)
        {
            cout<<"选择错误,重新选择!"<else 
            return k; 
    }
} 

int main()
{
    LinkList L;
    STD x;
    int choise,k,n=0; //k记录位置,n记录人数 
    initList(&L);
    /*if(initList(&L))
        cout<<"创建成功!"<
    while(1)
    {
        //system("cls");
        choise=menu();
        switch(choise)
        {
            case 1:      
                char judge;
                while(1)
                { 
                    cout<<"请输入学生姓名和成绩:"<cin>>x.name>>x.score;
                    n++;
                    insertLinkList(L,n,x);

                    cout<<"是否继续输入(y/n):";
                    cin>>judge;
                    cout<<"---------------------------------------"<if(judge!='y')  
                        break;          
                } 
                //getch();
                break;  
            case 2:
                cout<<"输入插入位置:";
                cin>>k;
                if(k<1 || k>n+1)
                {
                    cout<<"插入位置有误!"<break;
                } 
                cout<<"输入插入的学生信息:"<cin>>x.name>>x.score;
                insertLinkList(L,k,x);
                n++;

                cout<<"插入成功!";
                getch();
                break; 
            case 3:
                cout<<"输入修改位置:";
                cin>>k;
                if(k<1 || k>n)
                {
                    cout<<"修改位置有误!"<break;
                } 
                cout<<"输入修改的学生信息:"<cin>>x.name>>x.score;
                updatLinkList(L,k,x);

                cout<<"修改成功!";
                getch();
                break; 
            case 4:
                cout<<"输入删除位置:";
                cin>>k;
                if(deleteLinkList(L,k))
                {
                    n--;

                    cout<<"删除成功!";
                }

                getch();
                break;
            case 5:
                if(L->next == NULL)
                    cout<<"无数据!"<else
                {
                    LinkList p=L->next;
                    cout<<"学生姓名   学生成绩"<while(p!=NULL)
                    {
                        cout<8)<data.name<<"   "<data.score<next;
                    }
                }
                getch();
                break;      
            case 0: exit(0);
        }

    }

    return 1;
}

总结与展望

学生信息管理系统实现属于基础题目,代码难度不大,重点在于对于基础知识的理解与运用。希望通过本文的介绍,能够帮助到有兴趣的同学。编程需要积累,我以前就是吃了懈怠的亏,现在在补自己的坑。学习不易,且行且珍惜,万不可浪费光阴啊。

你可能感兴趣的:(C++初阶练习)