要求:用链表实现学生信息管理系统
代码:
#include<cstdio>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#define MASZIZE 100 //管理系统可能达到的最大长度
#define ERROR 0
#define OK 1
#define OVERFLOW -1
using namespace std;
void setmenu();
typedef int Status;
//学生信息结构体
typedef struct
{
char num[20];
char name[20];
int score;
}Student;
//链表
typedef struct LNode
{
Student data;
struct LNode *next;//节点的指针域
}LNode,*Linklist;//Linklist为指向结构体LNode的指针类型
Linklist L;
//创建一个链表
void Createlist()
{
//构造一个空的单链表L
L=new LNode;//生成新结点作为头结点
L->next=NULL;//头结点的指针域置空
}
//长度
void Length()
{
Linklist p;
int ans=0;
p=L->next;
while(p)
{
ans++;
p=p->next;
}
printf("一共有%d学生\n",ans);
}
//取值
void Input(int m)
{
int i;LNode *p;LNode *q;
q=L;
for(i=0;i<m;i++)
{
p=new LNode;
printf("学号:");
cin>>p->data.num;
printf("姓名:");
cin>>p->data.name;
printf("成绩:");
cin>>p->data.score;
p->next=NULL;
q->next=p;
q=p;
}
printf("**输入成功**\n");
}
//
void Output()
{
Linklist p;
p=L->next;
while(p)
{
cout<<"学号:"<<endl;
cout<<p->data.num<<endl;
cout<<"姓名:"<<endl;
cout<<p->data.name<<endl;
cout<<"成绩:"<<endl;
cout<<p->data.score<<endl;
p=p->next;
}
}
//插入
Status ListInsert()
{
int t;
printf("请输入要插入的位置:\n");
scanf("%d",&t);
Linklist p,q;
int j=0;
p=L;
while(p&&j<t-1)
{
p=p->next;
++j;
}
if(!p||j>t-1)
{
cout<<"输入错误,插入失败!!!"<<endl;
return ERROR;
}
else
{
q=new LNode;
printf("请输入学号:");
scanf("%s",q->data.num);
printf("请输入姓名:");
scanf("%s",q->data.name);
printf("请输入成绩:");
scanf("%d",&q->data.score);
q->next=p->next;
p->next=q;
printf("**插入成功**\n");
}
}
//删除
Status ListDelete()
{
//在带头结点的单链表中,删除第i个元素
int i;
printf("请输入要删除的位置:\n");
scanf("%d",&i);
LNode *p;LNode *q;
int j;
p=L;j=0;
q=new LNode;
while((p->next)&&(j<i-1))//查找第i-1个结点,p指向该结点
{
p=p->next;++j;
}
if(!(p->next)||(j>i-1))
return ERROR;
q=p->next;
p->next=q->next;
delete q;
printf("删除成功\n");
}
//查找
LNode LocateElem()
{//在带头结点的单链表L中查找指定学号的元素
printf("请输入您要查找的人的学号:\n");
char numb[20]; int ans=0;
scanf("%s",numb);
LNode *p;
p=L->next;//p指向首元结点
while(p)//顺链域向后扫描,直到p为空或p所指结点的数据域等于e
{
if((strcmp(p->data.num,numb)==0))
{
printf("学号:%s\n",p->data.num);
printf("姓名:%s\n",p->data.name);
printf("成绩:%d\n",p->data.score);
ans=1;
break;
}
p=p->next;
}
if(!p)
{
cout<<"不存在此学生:"<<endl;
}
}
int main()
{
int sum,n;
//Student p;
printf("*************欢迎使用学生信息管理系统*************\n");
printf("输入[1]建一个新链表\n");
printf("输入[2]输入信息\n");
printf("输入[3]查找给定的学生信息\n");
printf("输入[4]输出所有学生信息\n");
printf("输入[5]插入信息\n");
printf("输入[6]删除信息\n");
printf("输入[7]统计学生人数\n");
printf("输入[8]退出系统\n");
while(OK)
{
scanf("%d",&n);
switch(n)
{
case 1:
Createlist();
printf("链表创建成功\n");break;
case 2:
printf("请输入学生个数:\n");
scanf("%d",&sum);
Input(sum);
break;
case 3:
LocateElem();break;
case 4:
Output();break;
case 5:
ListInsert();break;
case 6:
ListDelete();break;
case 7:
Length();
break;
case 8:
exit(0);
}
}
return 0;
}