版权声明:欢迎大佬批评指正!O(∩_∩)O https://blog.csdn.net/wyh1618/article/details/83088526
考试报名管理
考试报名系统是对考试报名管理的简单模拟,用菜单选择方式完成下列功能:输入考生信息;输出考生信息;查询考生信息;添加考生信息;修改考生信息;删除考生信息。每条考生信息由准考证号、姓名、性别、年龄、报考类别等信息组成。
要求:定义一个专用的类型 ElemType,用于描述考生信息,数据结构用一个类描述,命名为List,包括数据、关系和基本操作;数据结构的存储结构分别用顺序和链式两种结构实现,所定义的数据结构在不改或稍加改动的情况下,可用于第二个项目。
链表:
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
typedef struct Stu
{
long long int card;
int age;
char name[9];
char sex[9];
char some[9];
}ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LinkNode;
ElemType t;
void InitList(LinkNode *&L)//初始化链表
{
L=(LinkNode *)malloc(sizeof(LinkNode));
L->next=NULL;
}
void CreatList(LinkNode *&L)//创建链表
{
cout<<"您要输入几条信息?"<<endl;
int n;
cin>>n;
cout<<"请依次输入学生的学号,姓名,年龄,性别,报考类别"<<endl;
LinkNode *s,*r;
L=(LinkNode *)malloc(sizeof(LinkNode));
r=L;
for(int i=0;i<n;i++)
{
s=(LinkNode *)malloc(sizeof(LinkNode));
scanf("%lld",&s->data.card);
scanf("%s",s->data.name);
scanf("%d",&s->data.age);
scanf("%s",s->data.sex);
scanf("%s",s->data.some);
r->next=s;
r=s;
}
r->next=NULL;
}
void DispList(LinkNode *L)//输出链表
{
LinkNode *p=L->next;//为什么改成*p=L,p->next!=NULL不对呢......?......
//cout<<"test"<<endl;
cout<<" card name age sex some"<<endl;
while(p!=NULL)
{
printf("%lld ",p->data.card);
printf("%s ",p->data.name);
printf("%d ",p->data.age);
printf("%s ",p->data.sex);
printf("%s ",p->data.some);
p=p->next;
printf("\n");
}
printf("\n");
}
void DestoryList(LinkNode *&L)//释放链表
{
LinkNode *pre=L,*p=L->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
}
bool ListEmpty(LinkNode *L)//判断是否为空
{
return (L->next==NULL);
}
int ListLength(LinkNode *L)//算得链表长度
{
int n=0;
LinkNode *p=L;
while(p->next!=NULL)
{
n++;
p=p->next;
}
return (n);
}
int GetElem(LinkNode *L)//修改信息
{
cout<<"请输入您要修改学生的信息的学号"<<endl;
scanf("%lld",&t.card);
cout<<"请依次输入修改后此学生的学号,姓名,年龄,性别,报考类别"<<endl;
LinkNode *p=L->next;
while(p->next!=NULL&&p->data.card!=t.card)
{
p=p->next;
}
if(p->data.card==t.card)
{
scanf("%lld",&p->data.card);
scanf("%s",p->data.name);
scanf("%d",&p->data.age);
scanf("%s",p->data.sex);
scanf("%s",p->data.some);
cout<<"修改成功!"<<endl;
return 0;
}
return 0;
}
int LocataElem(LinkNode *L)
{
int i=1;
LinkNode *p=L->next;
cout<<"请输入您要查找学生的学号"<<endl;
scanf("%lld",&t.card);
while(p!=NULL&&p->data.card!=t.card)
{
p=p->next;
}
if (p==NULL)
return(0);
else
{
cout<<" card name age sex some"<<endl;
printf("%lld ",p->data.card);
printf("%s ",p->data.name);
printf("%d ",p->data.age);
printf("%s ",p->data.sex);
printf("%s ",p->data.some);
cout<<endl;
return 1;
}
}
bool ListInsert(LinkNode *&L)
{
int j=0,n;
LinkNode *p=L,*s,*r;
while(p->next!=NULL)
{
p=p->next;
}
cout<<"您要插入几条信息?"<<endl;
cin>>n;
cout<<"请依次输入学生的学号,姓名,年龄,性别,报考类别"<<endl;
for(int i=0;i<n;i++)
{
s=(LinkNode *)malloc(sizeof(LinkNode));
scanf("%lld",&s->data.card);
scanf("%s",s->data.name);
scanf("%d",&s->data.age);
scanf("%s",s->data.sex);
scanf("%s",s->data.some);
p->next=s;
p=s;
r=s;
}
cout<<"插入成功!"<<endl;
r->next=NULL;
}
int ListDelete(LinkNode *&L)//删除链表中第i个位置上的元素
{
int j=0;
LinkNode *p=L,*q;
q=p->next;
cout<<"请输入您要删除的学生学号"<<endl;
scanf("%d",&t.card);
while(q->next!=NULL&&q->data.card!=t.card)
{
q=q->next;
p=p->next;
}
if(t.card!=q->data.card)
{
cout<<"没有此学号,请核对您输入的内容"<<endl;
return 0;
}
else
{
q=p->next;
p->next=q->next;
free(q);
cout<<"删除成功!"<<endl;
return 1;
}
}
int main()
{
int i,n;
LinkNode *L;
InitList (*&L);
//L=(LinkNode *)malloc(sizeof(LinkNode));
cout<<"\t欢迎使用考试报名系统"<<endl<<endl;
cout<<"\t请按提示输入!"<<endl<<endl;
cout<<"\t1->输入考生信息"<<endl<<endl;
cout<<"\t2->输出考生信息"<<endl<<endl;
cout<<"\t3->查询考生信息"<<endl<<endl;
cout<<"\t4->添加考生信息"<<endl<<endl;
cout<<"\t5->修改考生信息"<<endl<<endl;
cout<<"\t6->删除考生信息"<<endl<<endl;
cout<<"\t0->退出系统"<<endl<<endl;
/*CreatList(L);
DispList(L);
LocataElem(L);
ListInsert(L);
DispList(L);
GetElem(L);
ListDelete(L);
DispList(L);*/
while(1)
{
cin>>n;
switch(n)
{
case 1:
CreatList(L);
break;
case 2:
DispList(L);
break;
case 3:
LocataElem(L);
break;
case 4:
ListInsert(L);
break;
case 5:
GetElem(L);
break;
case 6:
ListDelete(L);
break;
case 0:
DestoryList(L);
cout<<"感谢使用!"<<endl;
exit(0);
}
}
return 0;
}
顺序表:
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
typedef struct Stu
{
long long int card;
int age;
char name[9];
char sex[9];
char some[9];
}ElemType;
typedef struct
{
ElemType data[9999];
int length;
}Sqlist;
int Init(Sqlist *&L)
{
L=(Sqlist *)malloc(sizeof(Sqlist));
L->length=0;
}
int GetLength(Sqlist *L)
{
return L->length;
}
void Destory(Sqlist *&L)
{
free(L);
}
bool ListEmpty(Sqlist *&L)
{
return L->length==0;
}
void Display(Sqlist *L)
{
cout<<" card name age sex some"<<endl;
for(int i=0;i<L->length;i++)
{
printf("%lld ",L->data[i].card);
printf("%s ",L->data[i].name);
printf("%d ",L->data[i].age);
printf("%s ",L->data[i].sex);
printf("%s ",L->data[i].some);
cout<<endl;
}
cout<<'\n';
}
void CreatList(Sqlist *&L)
{
int n,m,i,j;
cout<<"输入您要录入信息的条数"<<endl;
cin>>n;
cout<<"请依次输入学生的学号,姓名,年龄,性别,报考类别"<<endl;
for(i=0;i<n;i++)
{
scanf("%lld",&L->data[i].card);
scanf("%s",L->data[i].name);
scanf("%d",&L->data[i].age);
scanf("%s",L->data[i].sex);
scanf("%s",L->data[i].some);
}
L->length+=n;
}
void LocataElem(Sqlist *&L)
{
long long int num;
cout<<"您要查询哪个学生的信息?请输入学号"<<endl;
scanf("%lld",&num);
for(int i=0;i<L->length;i++)
{
if(L->data[i].card==num)
{
cout<<" card name age sex some"<<endl;
printf("%lld ",L->data[i].card);
printf("%s ",L->data[i].name);
printf("%d ",L->data[i].age);
printf("%s ",L->data[i].sex);
printf("%s ",L->data[i].some);
cout<<endl;
}
}
}
void ListInsert(Sqlist *&L)
{
int n,m,i,j;
cout<<"输入您要添加信息的条数"<<endl;
cin>>n;
cout<<"请依次输入学生的学号,姓名,年龄,性别,报考类别"<<endl;
for(i=L->length;i<L->length+n;i++)
{
scanf("%lld",&L->data[i].card);
scanf("%s",L->data[i].name);
scanf("%d",&L->data[i].age);
scanf("%s",L->data[i].sex);
scanf("%s",L->data[i].some);
}
L->length+=n;
cout<<"插入成功!"<<endl;
}
void GetElem(Sqlist *&L)//修改信息
{
int i,j,k;
long long int number;
cout<<"输入您想修改的学生信息的学号"<<endl;
cin>>number;
cout<<"请依次输入修改后此学生的学号,姓名,年龄,性别,报考类别"<<endl;
for(i=0;i<=L->length;i++)
{
if(L->data[i].card==number)
{
k=i;
break;
}
}
scanf("%lld",&L->data[k].card);
scanf("%s",L->data[k].name);
scanf("%d",&L->data[k].age);
scanf("%s",L->data[k].sex);
scanf("%s",L->data[k].some);
cout<<"修改成功!"<<endl;
}
void ListDelete(Sqlist *&L)
{
long long int number;
int i,j,k;
cout<<"输入您想删除的学生信息的学号"<<endl;
cin>>number;
for(i=0;i<=L->length;i++)
{
if(L->data[i].card==number)
{
k=i;
break;
}
}
for(i=k+1;i<L->length;i++)
L->data[i-1]=L->data[i];
L->length--;
cout<<"删除成功!"<<endl;
}
int main()
{
int i,n;
Sqlist *L;
L=(Sqlist *)malloc(sizeof(Sqlist));
Init(L);
cout<<"\t欢迎使用考试报名系统"<<endl<<endl;
cout<<"\t请按提示输入!"<<endl<<endl;
cout<<"\t1->输入考生信息"<<endl<<endl;
cout<<"\t2->输出考生信息"<<endl<<endl;
cout<<"\t3->查询考生信息"<<endl<<endl;
cout<<"\t4->添加考生信息"<<endl<<endl;
cout<<"\t5->修改考生信息"<<endl<<endl;
cout<<"\t6->删除考生信息"<<endl<<endl;
cout<<"\t0->退出系统"<<endl<<endl;
/*CreatList(L);
Display(L);
LocataElem(L);
ListInsert(L);
Display(L);
GetElem(L);
Display(L);
ListDelete(L);
Display(L);*/
while(1)
{
cin>>n;
switch(n)
{
case 1:
CreatList(L);
break;
case 2:
Display(L);
break;
case 3:
LocataElem(L);
break;
case 4:
ListInsert(L);
break;
case 5:
GetElem(L);
break;
case 6:
ListDelete(L);
break;
case 0:
cout<<"感谢使用!"<<endl;
Destory(L);
exit(0);
}
}
return 0;
}