用数据结果算法编写一个学生信息管理系统

用单链表编写,包含输入、插入、修改、删除、查询、显示功能。

#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
struct Student
{
string sex;//性别
string name;//姓名
char number[20];//学号
string id;//身份证号码
string bir;//出生日期
string adr;//家庭住址
string tel;//电话号码
string spe;//专业
string coll;//学院
};


struct Node
{
Student data;
Node *next;
};


class LinkList
{
private:
Node *first;
public:
LinkList();//构造函数
~LinkList();//析构函数
int Length();//求链表的长度
void Clear();//得到只有头结点的空链表
void Creat();//建立链表
void Input(Student &s);//输入信息
bool Insert(Student &s,int i);//插入
bool Delete(Student s,int i);//删除
bool Modify(Student &s,Student s1);//修改
Node *Search(Student s);//查找
void Output();//输出信息
};
//构造函数
LinkList::LinkList()
{
first=new Node;
first->next=NULL;
}
//析构函数
LinkList::~LinkList()
{
Node *q=NULL;
while(first!=NULL)//释放链表中每一个结点的存储空间
{
q=first;//暂存被释放结点
first=first->next;
delete q;
}
}
//求链表的长度
int LinkList::Length()
{
Node *p;
p=first->next;
int i=0;
while(p)
{
p=p->next;
i++;
}
return i;
}
//将有长度的链表清空,得到只有带头结点的链表
void LinkList::Clear()
{
Node *p=first->next,*q;
while(p)
{
q=p->next;
delete p;
p=q;
}
first->next=NULL;//得到带头结点的空链表
}
//输入学生信息
void LinkList::Input(Student &s)
{
cout<<"姓   名:";
cin>>s.name;
cout<<"性   别:";
cin>>s.sex;
cout<<"出生日期:";
cin>>s.bir;
cout<<"身份证号码:";
cin>>s.id;
cout<<"家庭住址:";
cin>>s.adr;
cout<<"电话号码:";
cin>>s.tel;
cout<<"学    号:";
cin>>s.number;
cout<<"学    院:";
cin>>s.coll;
cout<<"专    业:";
cin>>s.spe;
}
//建立链表
void LinkList::Creat()
{
Node *a;
Student s;
if(Length()!=0)
Clear();
Input(s);
a=new Node;
a->data=s;
a->next=first->next;
first->next=a;
cout<<"\n链表建成!\n";
}
//在指定位置插入信息
bool LinkList::Insert(Student &s,int i)
{
int j=1;
Node *p,*q;
p=new Node;//建立一个待插入的结点
p->data=s;
q=first;
while(q->next!=NULL&&j<i)//查找第i个结点
{
q=q->next;
j++;
}
if(j=i)
{
p->next=q->next;
q->next=p;
return true;
}
else
return false;
}
//删除信息
bool LinkList::Delete(Student s,int i)
{
int j=1;
Node *p,*q;
q=first;
p=q->next;
if(p==NULL)
cout<<"\n此链表为空链表!无法删除!\n";
while(j<i&&p->next!=NULL)
{
q=p;
p=p->next;
j++;
}
if(p!=NULL)
{
s=p->data;
q->next=p->next;
delete p;
return true;
}
else
return false;
}
//显示全部信息
void LinkList::Output()
{
Node *a=first->next;
if(a!=NULL)
{
cout<<"姓    名:"<<a->data.name<<endl;
   cout<<"性    别:"<<a->data.sex<<endl;
   cout<<"出生日期:"<<a->data.bir<<endl;
   cout<<"身份证号码:"<<a->data.id<<endl;
   cout<<"家庭住址:"<<a->data.adr<<endl;
   cout<<"电话号码:"<<a->data.tel<<endl;
   cout<<"学    号:"<<a->data.number<<endl;
   cout<<"学    院:"<<a->data.coll<<endl;
cout<<"专    业:"<<a->data.spe<<endl;
a=a->next;
}
else
cout<<"\n无信息!请先存储!\n";
}
//按学号查找
Node *LinkList::Search(Student s)
{
Node *p=first->next;
while(p!=NULL&&strcmp(p->data.number,s.number)!=0)
p=p->next;
if(p==NULL)
{
cout<<"\n无该学生信息!"<<endl;
return NULL;
}
return p;
}
//按学号修改
bool LinkList::Modify(Student &s,Student s1)
{
Node *p=first->next;
while(p)
{
if(p->data.number!=s.number)
{
p->data=s1;
   return true;
}
p=p->next;
}
return false;
}


//自定义函数
void menu()
{
cout<<"\n                 ------------------------------"<<endl;
cout<<"                 |       ^^^^^^^^^^^^^^^^     |"<<endl;
cout<<"                 |       学生信息管理系统     |"<<endl;
cout<<"                 |                            |"<<endl;
cout<<"                 |       ^^^^^^^^^^^^^^^^     |"<<endl;
cout<<"                 ------------------------------"<<endl;
cout<<"                 |        1.输入学生信息      |"<<endl;
cout<<"                 |        2.插入学生信息      |"<<endl;
cout<<"                 |        3.修改学生信息      |"<<endl;
cout<<"                 |        4.删除学生信息      |"<<endl;
cout<<"                 |        5.查询学生信息      |"<<endl;
cout<<"                 |        6.显示学生信息      |"<<endl;
cout<<"                 |        0.退出本系统        |"<<endl;
cout<<"                 ------------------------------"<<endl;
cout<<endl;
cout<<"             *提示:输入上述编号并回车即可执行操作!"<<endl;
}




int main(void)
{
LinkList L;
Student s,s1;
Node *p;
int n;
cout<<"********************************\n";
cout<<"*          Welcome!            *\n";
cout<<"*       欢迎使用本系统!       *\n";
cout<<"********************************\n";
cout<<endl;
do
{
system("pause");
system("cls");
menu();
cout<<"\n请输入您的选择:";
cin>>n;
if(n<0||n>6)
cout<<"\n输入有误!请重新输入!"<<endl;
else
{
switch(n)
{
case 1:
cout<<"\n****************************"<<endl;
cout<<"*       输入学生信息       *"<<endl;
cout<<"****************************"<<endl;
L.Creat();
break;
case 2:
cout<<"\n****************************"<<endl;
cout<<"*       插入学生信息       *"<<endl;
cout<<"****************************"<<endl;
int i;
bool j;
cout<<"请输入插入位置:";
cin>>i;
cout<<endl;
if(i<1||i>L.Length()+1)
cout<<"插入位置不合法!"<<endl;
else
{
cout<<"请输入学生信息!"<<endl;
L.Input(s);
j=L.Insert(s,i);
if(false==j)
cout<<"\n插入信息失败!"<<endl;
else
cout<<"\n插入信息成功!"<<endl;
}
break;
case 3:
cout<<"\n****************************"<<endl;
cout<<"*       修改学生信息       *"<<endl;
cout<<"****************************"<<endl;
cout<<"请输入您要修改的学生学号:";
cin>>s.number;
cout<<endl;
p=L.Search(s);
if(p)
{
cout<<"请输入该学生的新信息:"<<endl;
L.Input(s1);
L.Modify(s,s1);
cout<<"\n修改成功!"<<endl;
}
break;
case 4:
cout<<"\n****************************"<<endl;
cout<<"*       删除学生信息       *"<<endl;
cout<<"****************************"<<endl;
int q;
cout<<"请输入删除的位置:";
cin>>q;
cout<<endl;
if(q<1||q>L.Length())
cout<<"\n删除位置不合法!"<<endl;
else
{
L.Delete(s,q);
cout<<"\n删除成功!"<<endl;
}
break;
case 5:
cout<<"\n****************************"<<endl;
cout<<"*       查询学生信息       *"<<endl;
cout<<"****************************"<<endl;
cout<<"请输入要查询的学生学号:"<<endl;
cin>>s.number;
p=L.Search(s);
if(p!=NULL)
{
cout<<"该学生的信息如下:"<<endl;
cout<<"姓    名:"<<p->data.name<<endl;
           cout<<"性    别:"<<p->data.sex<<endl;
           cout<<"出生日期:"<<p->data.bir<<endl;
cout<<"身份证号码:"<<p->data.id<<endl;
cout<<"家庭住址:"<<p->data.adr<<endl;
cout<<"电话号码:"<<p->data.tel<<endl;
cout<<"学    号:"<<p->data.number<<endl;
cout<<"学    院:"<<p->data.coll<<endl;
cout<<"专    业:"<<p->data.spe<<endl;
}
break;
case 6:
cout<<"\n***************************"<<endl;
cout<<"*     显示所有学生信息    *"<<endl;
cout<<"***************************"<<endl;
L.Output();
break;
case 0:
cout<<"\n****************************"<<endl;
cout<<"*        退出本系统        *"<<endl;
cout<<"****************************"<<endl;
cout<<"            再见!          "<<endl;
cout<<endl;
break;
}
}
}while(n);
system("pause");
return 0;
}




















  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值