#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status InitList_L(LinkList &L){
L=new LNode;
L->next=NULL;
return OK;
}
Status GetElem_L(LinkList L,int i,ElemType &e){
int j;
LNode *p;
p=L->next;j=1;
while(j<i&&p){
p=p->next;++j;
}
if(!p || j>i)return ERROR;
e=p->data;
return OK;
}
LNode *LocateElem_L(LinkList L,ElemType e){
LNode *p;
p=L->next;
while(p&&p->data!=e)
p=p->next;
return p;
}
Status ListInsert_L(LinkList &L,int i,ElemType &e){
int j;
LNode *p,*s;
p=L;j=0;
while(p && j<i-1){p=p->next;++j;}
if(!p||j>i-1)return ERROR;
s=new LNode;
s->data=e;
s->next=p->next;
return OK;
}
Status ListDelete_L(LinkList &L,int i,ElemType &e){
LNode *p,*q;
int j;
p=L;j=0;
while(p->next && j<i-1){p=p->next;++j;}
if(!(p->next) || j>i-1)return ERROR;
q=p->next;
p->next=q->next;
e=q->data;
delete q;
return OK;
}
void CreateList_F(LinkList &L,int n){
LNode *p;
L=new LNode;
L->next=NULL;
cout<<" "<<n<<" :\n";
for(int i=n;i>0;--i){
p=new LNode;
cin>>p->data;
p->next=L->next;L->next=p;
}
}
void CreateList_L(LinkList &L,int n){
LNode *r,*p;
L=new LNode;
L->next=NULL;
r=L;
cout<<"?????? "<<n<<" ????:\n";
for(int i=0;i<n;i++){
p=new LNode;
cin>>p->data;
p->next=NULL;r->next=p;
r=p;
}
}
int main()
{
int res,a,b,choose;
LNode *L,*p;
cout<<"课堂经验值管理系统\n";
cout<<"1.导入文件建学生经验值表\n";
cout<<"2. 插入学生\n";
cout<<"3. 删除学生\n";
cout<<"4. 显示全部学生信息\n";
cout<<"5. 为某学号同学加指定经验值\n";
cout<<"6. 为某学号同学减指定经验值\n";
cout<<"7.按姓名查找学生经验值\n";
cout<<"8.求经验值最高的学生信息 ";
cout<<"0. 存盘并退出\n";
choose=-1;
while(choose!=0)
{
cout<<"请选择:";
cin>>choose;
switch(choose)
{
case 1:
if(InitList_Link(L))//创建单链表
cout<<"成功导入学生经验值表\n";
else
cout<<"学生经验值表导入失败\n";
break;
case 2://单链表的插入
cout<<"请输入要插入的新同学信息:\n";
cout<<"插入的位置 学号 姓名 经验值:\n";
cin>>a>>b.no>>b.name>>b.jyz;//输入a和b,a代表插入的位置,b代表插入的数值
if(ListInsert_Link(L,a,b))
cout<<"插入成功.\n";
else
cout<<"插入失败.\n";
break;
case 3://单链表的删除
cout<<"请输入所要删除的离班学生的位置:";
cin>>c;//输入c,代表要删除数的位置
if(ListDelete_Link(L,c,res))
cout<<"删除成功.\n被删除离班学生是:"<<res.no<<" "<<res.name<<endl;
else
cout<<"删除失败.\n";
break;
case 4:
break;
case 5://单链表的查找
cout<<"请输入所要加经验值的学生学号:";
cin>>b.no;//输入e,代表所要查找的数值
cout<<"请输入所要加的经验值:";
cin>>jyz;
temp=jia(L,b,jyz);
if(temp!=0)
cout<<b.no<<" 学生的经验值已加 "<<jyz<<" .\n";
else
cout<<"查找失败!没有这样的学生信息\n";
break;
case 6: //单链表的查找
cout<<"请输入所要减检验值的学生学号:";
cin>>b.no;//输入e,代表所要查找的数值
cout<<"请输入所要减的经验值:";
cin>>jyz;
temp=jian(L,b,jyz);
if(temp!=0)
cout<<b.no<<" 学生的经验值已减 "<<jyz<<" .\n";
else
cout<<"查找失败!没有这样的学生信息\n";
break;
case 7://单链表的查找
cout<<"请输入所要查找的学生学号:";
cin>>b.no;//输入e,代表所要查找的数值
temp=LocateElem_Link(L,b);
if(temp!=0)
cout<<b.no<<" 学生的经验值是 "<<temp<<" .\n";
else
cout<<"查找失败!没有这样的学生信息\n";
break;
case 8://单链表的输出
cout<<"当前学生信息表为:\n";
cout<<"学号 姓名 经验值\n";
for(i=0;i<L.length;i++)
cout<<L.elem[i].no<<" "<<L.elem[i].name<<" "<<L.elem[i].jyz<<" \n";
cout<<endl<<endl;
break;
case 0:
}
}
return 0;
}
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status InitList_L(LinkList &L){
L=new LNode;
L->next=NULL;
return OK;
}
Status GetElem_L(LinkList L,int i,ElemType &e){
int j;
LNode *p;
p=L->next;j=1;
while(j<i&&p){
p=p->next;++j;
}
if(!p || j>i)return ERROR;
e=p->data;
return OK;
}
LNode *LocateElem_L(LinkList L,ElemType e){
LNode *p;
p=L->next;
while(p&&p->data!=e)
p=p->next;
return p;
}
Status ListInsert_L(LinkList &L,int i,ElemType &e){
int j;
LNode *p,*s;
p=L;j=0;
while(p && j<i-1){p=p->next;++j;}
if(!p||j>i-1)return ERROR;
s=new LNode;
s->data=e;
s->next=p->next;
return OK;
}
Status ListDelete_L(LinkList &L,int i,ElemType &e){
LNode *p,*q;
int j;
p=L;j=0;
while(p->next && j<i-1){p=p->next;++j;}
if(!(p->next) || j>i-1)return ERROR;
q=p->next;
p->next=q->next;
e=q->data;
delete q;
return OK;
}
void CreateList_F(LinkList &L,int n){
LNode *p;
L=new LNode;
L->next=NULL;
cout<<" "<<n<<" :\n";
for(int i=n;i>0;--i){
p=new LNode;
cin>>p->data;
p->next=L->next;L->next=p;
}
}
void CreateList_L(LinkList &L,int n){
LNode *r,*p;
L=new LNode;
L->next=NULL;
r=L;
cout<<"?????? "<<n<<" ????:\n";
for(int i=0;i<n;i++){
p=new LNode;
cin>>p->data;
p->next=NULL;r->next=p;
r=p;
}
}
int main()
{
int res,a,b,choose;
LNode *L,*p;
cout<<"课堂经验值管理系统\n";
cout<<"1.导入文件建学生经验值表\n";
cout<<"2. 插入学生\n";
cout<<"3. 删除学生\n";
cout<<"4. 显示全部学生信息\n";
cout<<"5. 为某学号同学加指定经验值\n";
cout<<"6. 为某学号同学减指定经验值\n";
cout<<"7.按姓名查找学生经验值\n";
cout<<"8.求经验值最高的学生信息 ";
cout<<"0. 存盘并退出\n";
choose=-1;
while(choose!=0)
{
cout<<"请选择:";
cin>>choose;
switch(choose)
{
case 1:
if(InitList_Link(L))//创建单链表
cout<<"成功导入学生经验值表\n";
else
cout<<"学生经验值表导入失败\n";
break;
case 2://单链表的插入
cout<<"请输入要插入的新同学信息:\n";
cout<<"插入的位置 学号 姓名 经验值:\n";
cin>>a>>b.no>>b.name>>b.jyz;//输入a和b,a代表插入的位置,b代表插入的数值
if(ListInsert_Link(L,a,b))
cout<<"插入成功.\n";
else
cout<<"插入失败.\n";
break;
case 3://单链表的删除
cout<<"请输入所要删除的离班学生的位置:";
cin>>c;//输入c,代表要删除数的位置
if(ListDelete_Link(L,c,res))
cout<<"删除成功.\n被删除离班学生是:"<<res.no<<" "<<res.name<<endl;
else
cout<<"删除失败.\n";
break;
case 4:
break;
case 5://单链表的查找
cout<<"请输入所要加经验值的学生学号:";
cin>>b.no;//输入e,代表所要查找的数值
cout<<"请输入所要加的经验值:";
cin>>jyz;
temp=jia(L,b,jyz);
if(temp!=0)
cout<<b.no<<" 学生的经验值已加 "<<jyz<<" .\n";
else
cout<<"查找失败!没有这样的学生信息\n";
break;
case 6: //单链表的查找
cout<<"请输入所要减检验值的学生学号:";
cin>>b.no;//输入e,代表所要查找的数值
cout<<"请输入所要减的经验值:";
cin>>jyz;
temp=jian(L,b,jyz);
if(temp!=0)
cout<<b.no<<" 学生的经验值已减 "<<jyz<<" .\n";
else
cout<<"查找失败!没有这样的学生信息\n";
break;
case 7://单链表的查找
cout<<"请输入所要查找的学生学号:";
cin>>b.no;//输入e,代表所要查找的数值
temp=LocateElem_Link(L,b);
if(temp!=0)
cout<<b.no<<" 学生的经验值是 "<<temp<<" .\n";
else
cout<<"查找失败!没有这样的学生信息\n";
break;
case 8://单链表的输出
cout<<"当前学生信息表为:\n";
cout<<"学号 姓名 经验值\n";
for(i=0;i<L.length;i++)
cout<<L.elem[i].no<<" "<<L.elem[i].name<<" "<<L.elem[i].jyz<<" \n";
cout<<endl<<endl;
break;
case 0:
}
}
return 0;
}