#include<iostream>
#include<string>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode
{ string name;//姓名
long no;//学号
ElemType data;//经验值
struct LNode *next;
}LNode,*LinkList;
//构造一个空的单链表L
Status InitList_L(LinkList &L){
L=new LNode;
L->next=NULL;
return OK;
}
//算法2.6 按序号查找
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;
}
//算法2.7 按值查找
LNode *LocateElem_L(LinkList L,ElemType e){
LNode *p;
p=L->next;
while(p&&p->data!=e)
p=p->next;
return p;
}
//算法2.8 单链表的插入
Status ListInsert_L(LinkList &L,int i,long &no1,string &name1,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->no=no1;
s->name=name1;
s->next=p->next;
p->next=s;
return OK;
}
//算法2.9 单链表的删除
Status ListDelete_L(LinkList &L,int a,long &no1,string &name1,ElemType &e){
LNode *p,*q;
p=L;
if(a==1)
{ cout<<"输入学号:";
long x;
cin>>x;
while(p->next&&p->next->no!=x){p=p->next;}
if(!(p->next)) return ERROR;
q=p->next;
p->next=q->next;
}
else
{ cout<<"输入姓名:";
string na;
cin>>na;
while(p->next&&p->next->name!=na){p=p->next;}//是p->next
if(!(p->next)) return ERROR;
q=p->next;
p->next=q->next;
}
e=q->data;
name1=q->name;
no1=q->no;
delete q;
return OK;
}
//显示全部学生信息
void Display_L(LinkList L)
{
LNode *p;
p=L->next;
cout<<"学号 "<<"姓名 "<<"经验值 "<<endl;
while(p)
{
cout<<p->no<<" "<<p->name<<" "<<p->data<<endl;
p=p->next;
}
}
//为某学号学生加指定经验值
Status Increasing_L(LinkList L,long no1,ElemType e)
{
LNode *p;
p=L->next;
while(p&&p->no!=no1)
{
p=p->next;
}
if(!p)
return ERROR;
p->data=p->data+e;
return OK;
}
//为某学号学生减指定经验值
Status Decreasing_L(LinkList L,long no1,ElemType e)
{
LNode *p;
p=L->next;
while(p&&p->no!=no1)
{
p=p->next;
}
if(!p)
return ERROR;
p->data=p->data-e;
return OK;
}
//按姓名查找学生经验值
Status Name_L(LinkList L,string name1,ElemType &e)
{
LNode *p;
p=L->next;
while(p&&p->name!=name1)
p=p->next;
if(!p)
return ERROR;
e=p->data;
return OK;
}
//算法2.10 前插法创建单链表
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;
}
}
//算法2.11 后插法创建单链表
void CreateList_L(LinkList &L,int n){
LNode *r,*p;
L=new LNode;
L->next=NULL;
r=L;
cout<<"分别输入学生的学号、姓名、经验值\n";
cout<<"学号"<<" "<<"姓名 "<<"经验值 "<<endl;
for(int i=0;i<n;i++){
p=new LNode;
cin>>p->no;
cin>>p->name;
cin>>p->data;
p->next=NULL;r->next=p;
r=p;
}
}
//求经验值最高的学生信息
void Maxstudent_L(LinkList L)
{ ElemType max;
LNode *p;
p=L->next;
max=p->data;
while(p)
{
if(p->data>max)
max=p->data;
p=p->next;
}
p=L->next;
while(p)
{
if(p->data==max)
cout<<"学号:"<<p->no<<" 姓名:"<<p->name<<" 经验值:"<<p->data<<endl;
p=p->next;
}
}
int main()
{ long no1;
int choose,n,date1,i,e,a;
string name1;
LNode *la;
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓";
cout<<"┃**************** ☆ 学 生 经 验 管 理 系 统 ☆ ****************** ┃";
cout<<"┃********** ★★★★★ ★★★★★★★ ★★★★★ *********** ┃";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫";
cout<<"┃****************★ ☆ 1.导入文件建学生经验值表 ☆ ★****************┃";
cout<<"┃****************★ ☆ 2.插入学生 ☆ ★****************┃";
cout<<"┃****************★ ☆ 3.删除学生 ☆ ★****************┃";
cout<<"┃****************★ ☆ 4.显示全部学生信息 ☆ ★****************┃";
cout<<"┃****************★ ☆ 5.为某学号学生加指定经验值 ☆ ★****************┃";
cout<<"┃****************★ ☆ 6.为某学号学生减指定经验值 ☆ ★****************┃";
cout<<"┃****************★ ☆ 7.按姓名查找学生经验值 ☆ ★****************┃";
cout<<"┃****************★ ☆ 8.求经验值最高的学生信息 ☆ ★****************┃";
cout<<"┃****************★ ☆ 0.存盘并退出 ☆ ★****************┃";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛";
choose=-1;
while(choose!=0)
{
cout<<"请选择:\n";
cin>>choose;
switch(choose)
{
case 1:
{
if(InitList_L(la))
{
cout<<"学生经验值表创建成功!\n";
cout<<"请输入学生的个数:";
cin>>n;
CreateList_L(la,n);
}
else
cout<<"学生经验值表创建失败!\n";
break;
}
case 2:
{ cout<<"请输入要插入的位置:";
cin>>i;
cout<<"请依次输入学生的学号、姓名、经验值:\n";
cin>>no1;
cin>>name1;
cin>>e;
if(ListInsert_L(la,i,no1,name1,e))
cout<<"插入成功!\n";
else
cout<<"插入失败!\n";
break;
}
case 3:
{
cout<<"请选择删除方式:\n";
cout<<"1.按学号删除\n";
cout<<"2.按姓名删除\n";
cin>>a;
if(a!=1&&a!=2)
cout<<"无此选项,请输入合法字符!\n";
else{
if(ListDelete_L(la,a,no1,name1,e))
cout<<"删除成功!\n";
else
{ if(a==1)
cout<<"删除失败!该学号不存在!\n";
else
cout<<"删除失败!该姓名不存在!\n";
}
}
break;
}
case 4:
{ Display_L(la);
break;
}
case 5:
{ cout<<"输入学生的学号和增加的经验值:\n";
cin>>no1;
cin>>e;
if(Increasing_L(la,no1,e))
cout<<"加经验值成功!\n";
else
cout<<"该学号不存在!\n";
break;
}
case 6:
{ cout<<"输入学生的学号和减少的经验值:\n";
cin>>no1;
cin>>e;
if(Decreasing_L(la,no1,e))
cout<<"减经验值成功!\n";
else
cout<<"该学号不存在!\n";
break;
}
case 7:
{ cout<<"输入要查找学生的名字:";
cin>>name1;
if(Name_L(la,name1,e))
cout<<name1<<"的经验值为"<<e<<endl;
else
cout<<"查找失败,该学生不存在!\n";
break;
}
case 8:
{ cout<<"经验值最高的学生为:\n";
Maxstudent_L(la);
break;
}
case 0:
exit(0);
default:
cout<<"没有此功能!\n";
}
}
}
学生课堂经验值管理系统2
最新推荐文章于 2022-07-05 21:55:39 发布