此为我的第一篇博文,正巧最近正在复习数据结构与算法,便想拿练习的程序来练手。本人水平有限,文章内容粗浅,只是想与初学的朋友交流经验。对于文章中出现的错误和问题,请大家在留言中批评指正,我们互相学习提高。
使用单链表进行构建学生信息管理系统,这是每一位初学者在初步阶段都会遇到的练习题目。此程序有助于我们加深对于链表结构的认识和了解,在反复练习的前提下,接手进一步课题也会更加得心应手。
我在本文的样例程序中实现了管理系统的基本功能,有时间的话会进一步完善。目前在源代码中对于修改和删除两个功能还只能通过位置查找,同学们可以进一步完善,通过遍历实现关键词查找。
前言:因为针对初学者学习,我会尽可能地对于程序内容进行详细的介绍,拓展部分我会贴上相关文章的链接供读者学习。
本程序中因实现功能较简单,所需头文件三个便已足够,分别是
- iostream
- iomanip
- conio.h
本头文件是标准输入输出流文件,用来实现便捷的输入输出操作。具体的功能不再赘述,初学者可以通过下面的样例对其功能进行体会。
#include "iostream"
using namespace std;
int main()
{
char name[10];
cout<<"请输入您的名字:"<cin>>name;
cout<<"欢迎使用:"<return 1;
}
在头文件下的
using namespace std
,是命名空间,用于程序中关键词的命名冲突问题。详细用法请参见文章——C++命名空间
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++标准库之-iomanip
此头文件功能有很多,但我在此只介绍本例中用到的功能。
在此程序中主要用来实现“接收回车,不返回”功能——getch()
使用场景是,通过识别回车来确认操作,但无返回。即接收一个空回车。具体使用请参照以下样例:
#include "conio.h"
#include "iostream"
using namespace std;
int main()
{
cout<<"欢迎使用!请输入回车退出!"<cout<<"感谢您的使用!"<return 1;
}
本程序中用到的结构体有两个,分别为学生结构体和链表结构体。
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;
}
学生信息管理系统实现属于基础题目,代码难度不大,重点在于对于基础知识的理解与运用。希望通过本文的介绍,能够帮助到有兴趣的同学。编程需要积累,我以前就是吃了懈怠的亏,现在在补自己的坑。学习不易,且行且珍惜,万不可浪费光阴啊。