考试报名管理
考试报名系统是对考试报名管理的简单模拟,用菜单选择方式完成下列功能:输入考生信息;输出考生信息;查询考生信息;添加考生信息;修改考生信息;删除考生信息。每条考生信息由准考证号、姓名、性别、年龄、报考类别等信息组成。
要求:定义一个专用的类型 ElemType,用于描述考生信息,数据结构用一个类描述,命名为List,包括数据、关系和基本操作;数据结构的存储结构分别用顺序和链式两种结构实现,所定义的数据结构在不改或稍加改动的情况下,可用于第二个项目。\
单链表:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define SIZE 1005
using namespace std ;
typedef struct Student{
int IdCard ;
char name[SIZE] ;
char gender[SIZE] ;
int age ;
char ExamType[SIZE] ;
struct Student *next ;
}Elemtype;
Elemtype *Stu;
void MenuChoose();
class List{
public :
void InitList(Elemtype *&L) ;
void CreatList(Elemtype *L, int n );
void DisplayList(Elemtype *&L);
void FindList(Elemtype *&L, int n);
void InsertList(Elemtype *&L, int i , Elemtype &e) ;
bool DeleteList(Elemtype *&L , int i ,Elemtype &e) ;
void AlterList(Elemtype *&L , int i , Elemtype &e);
};
void List::InitList(Elemtype *&L)
{
L = (Elemtype*)malloc(sizeof(Elemtype));
L->next = NULL ;
return ;
}
void List::CreatList(Elemtype *L,int n )
{
Elemtype *p, *r ;
r = L;
for(int i = 0; i < n; i++)
{
p = (Elemtype*)malloc(sizeof(Elemtype));
printf("请输入第 %d 名学生的学号\n",i+1);
cin >> p->IdCard ;
printf("请输入第 %d 名学生的姓名\n",i+1);
cin >> p->name ;
printf("请输入第 %d 名学生的性别\n",i+1);
cin >> p->gender ;
printf("请输入第 %d 名学生的年龄\n",i+1);
cin >> p->age ;
printf("请输入第 %d 名学生的报考类型\n",i+1);
cin >> p->ExamType ;
p->next = NULL ;
if(L->next ==NULL)
{
L->next = p ;
}
else
{
r->next = p ;
}
r = p ;
}
}
void List::InsertList(Elemtype *&L, int i , Elemtype &e)
{
Elemtype *p = L->next ,*s ;
if(i <= 0)
return ;
int j = 1 ;
while(j < i && p!=NULL)
{
j++ ;
p = p->next ;
}
if(p == NULL)
{
return ;
}
else
{
s = (Elemtype *)malloc(sizeof(Elemtype));
s->IdCard = e.IdCard ;
strcpy(s->name,e.name);
strcpy(s->gender,e.gender);
s->age = e.age ;
strcpy(s->ExamType,e.ExamType);
s->next = p->next ;
p->next = s ;
}
return ;
}
void List::AlterList(Elemtype *&L ,int i ,Elemtype &e)
{
Elemtype *p = L ;
int j = 0 ;
while(j < i && p!=NULL)
{
j++ ;
p = p->next ;
}
if(p == NULL)
{
return ;
}
p->IdCard = e.IdCard ;
strcpy(p->gender,e.gender);
strcpy(p->name,e.name);
strcpy(p->ExamType,e.ExamType) ;
p->age = e.age ;
return ;
}
void List::FindList(Elemtype *&L, int n)
{
int i = 1;
Elemtype *q = L->next;
while(i < n && q != NULL)
{
i++;
q = q->next;
}
if(q == NULL)
return ;
else
{
printf("学号 : %d \n",q->IdCard);
printf("姓名 : %s \n",q->name) ;
printf("性别 : %s \n",q->gender) ;
printf("年龄 : %d \n",q->age);
printf("报考类型 : %s",q->ExamType);
printf("\n");
}
return ;
}
bool List::DeleteList(Elemtype *&L ,int i ,Elemtype &e)
{
Elemtype *p = L , *q;
int j = 0 ;
while(j < i - 1 && p!=NULL)
{
j++ ;
p = p->next ;
}
if(p ==NULL)
{
return false ;
}
else
{
q = p->next ;
if(q==NULL)
{
return false ;
}
e.IdCard = q->IdCard ;
strcpy(e.name,q->name);
strcpy(e.gender,q->gender);
strcpy(e.ExamType,q->ExamType) ;
e.age = q->age ;
p->next = q->next ;
free(q);
return true ;
}
}
void List::DisplayList(Elemtype *&L)
{
Elemtype *p = L->next ;
int i = 1 ;
cout<<endl;
while(p)
{
printf("第 %d 名学生信息 : \n",i) ;
printf("学号 : %d \n",p->IdCard);
printf("姓名 : %s \n",p->name) ;
printf("性别 : %s \n",p->gender) ;
printf("年龄 : %d \n",p->age);
printf("报考类型 : %s",p->ExamType);
printf("\n");
p = p->next ;
i++ ;
}
return ;
}
void Menu()
{
cout<<endl<<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;
return ;
}
void input_Student(Elemtype &e)
{
printf("请输入学生的学号\n");
cin >> e.IdCard ;
printf("请输入学生的姓名\n");
cin >> e.name ;
printf("请输入学生的性别\n");
cin >> e.gender ;
printf("请输入学生的年龄\n");
cin >> e.age ;
printf("请输入学生的报考类型\n");
cin >> e.ExamType ;
cout<<endl;
e.next = NULL ;
return ;
}
int main()
{
Menu();
List a ;
int n ;
Elemtype e ;
a.InitList(Stu);
int i ;
int num ;
printf("功能选择 : \n");
while(scanf("%d",&n) && n)
{
if(n==1)
{
printf("你需要输入多少学生\n");
cin >> num ;
a.CreatList(Stu,num);
}
else if(n==2)
{
printf("你要查找第几个学生\n");
cin >> num;
a.FindList(Stu,num);
}
else if(n==3)
{
printf("你要修改第几名学生信息 :");
cin >> i;
printf("请输入修改后的信息\n");
input_Student(e);
a.AlterList(Stu,i,e);
}
else if(n==4)
{
printf("你要删除第几名学生信息 :");
cin >> i;
a.DeleteList(Stu,i,e);
}
else if(n==5)
{
printf("你要在第几个序号后插入 :");
cin >> i;
printf("请输入插入学生的信息\n");
input_Student(e);
a.InsertList(Stu,i,e);
}
else if(n==6)
{
a.DisplayList(Stu);
cout<<endl;
}
else
{
cout<<"ERROR"<<endl;
}
Menu();
printf("功能选择 : \n");
}
return 0 ;
}
顺序表
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#define MaxSize 100
#define SIZE 100
using namespace std;
typedef struct Student{
// 考生信息;
int IdCard ;
char name[SIZE] ;
char gender[SIZE] ;
int age ;
char ExamType[SIZE] ;
}ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;
SqList *Stu;
class list{
public :
void InitList(SqList *&L) ; // 初始化
void CreatList(SqList *&L, ElemType a[], int n);// 创建学生信息;
void DispList(SqList *L);// 输出学生信息;
void FindList(SqList *L, int n);
bool ListEmpty(SqList *L);
bool ListInsert(SqList *&L, int i, ElemType e);
bool ListDelete(SqList *&L, int i, ElemType &e);
bool AlterList(SqList *L, int i, ElemType &e); // 修改 第i位置上的学生信息 ;
};
void list::InitList(SqList *&L)
{
L = (SqList *)malloc(sizeof(SqList));
L->length = 0;
}
bool list::ListEmpty(SqList *L)
{
return (L->length == 0);
}
void list::FindList(SqList *L, int n)
{
if(n < 1 || n > L->length)
return ;
printf("第 %d 名学生信息 : \n", n - 1) ;
printf("学号: %d \n", L->data[n - 1].IdCard);
printf("姓名: %s \n", L->data[n - 1].name);
printf("性别: %s \n", L->data[n - 1].gender);
printf("年龄: %d \n", L->data[n - 1].age);
printf("报考类型: %s \n", L->data[n - 1].ExamType);
}
void list::DispList(SqList *L)
{
int i;
if(ListEmpty(L))
return ;
for(i = 0; i < L->length; ++i)
{
printf("第 %d 名学生信息 : \n", i + 1) ;
printf("学号: %d \n", L->data[i].IdCard);
printf("姓名: %s \n", L->data[i].name);
printf("性别: %s \n", L->data[i].gender);
printf("年龄: %d \n", L->data[i].age);
printf("报考类型: %s \n", L->data[i].ExamType);
}
printf("\n");
}
bool list::AlterList(SqList *L, int i, ElemType &e)
{
if(i<1 || i>L->length)
return false ;
L->data[i - 1].age = e.age ;
strcpy(L->data[i - 1].ExamType,e.ExamType) ;
L->data[i - 1].IdCard = e.IdCard ;
strcpy(L->data[i - 1].gender,e.gender ) ;
strcpy(L->data[i - 1].name,e.name) ;
return true ;
}
bool list::ListInsert(SqList *&L, int i, ElemType e)
{
int j;
if(i < 1 || i > L->length + 1)
return false;
i--; //将逻辑序号转化为物理序号
for(j = L->length - 1; j >= i; j--) //注意边界条件
{
L->data[j + 1] = L->data[j];
}
L->data[i] = e;
L->length++; //注意!!!!!!
return true;
}
bool list::ListDelete(SqList *&L, int i, ElemType &e)
{
int j;
if(i < 1 || i > L->length)
return false;
i--;
e = L->data[i];
for(j = i; j < L->length - 1; j++) //注意边界条件
{
L->data[j] = L->data[j + 1];
}
L->length--;
return true;
}
void list::CreatList(SqList *&L, ElemType a[], int n)
{
L = (SqList *)malloc(sizeof(SqList));
for(int i = 0; i < n; ++i)
{
L->data[i] = a[i];
}
L->length = n;
}
void input_Student(ElemType &e)
{
printf("请输入学生的学号\n");
cin >> e.IdCard ;
printf("请输入学生的姓名\n");
cin >> e.name ;
printf("请输入学生的性别\n");
cin >> e.gender ;
printf("请输入学生的年龄\n");
cin >> e.age ;
printf("请输入学生的报考类型\n");
cin >> e.ExamType ;
cout<<endl;
return ;
}
void Menu()
{
cout<<endl<<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;
return ;
}
int main()
{
Menu();
list a;
int n ;
ElemType e ;
ElemType stu[SIZE] ;
a.InitList(Stu);
int i ;
int num ;
printf("功能选择 : \n");
while(scanf("%d",&n) && n)
{
if(n==1)
{
printf("你需要输入多少学生\n");
cin >> num ;
for(int i = 0 ; i<num ;i++)
{
printf("请输入学生的学号\n");
cin >> stu[i].IdCard ;
printf("请输入学生的姓名\n");
cin >> stu[i].name ;
printf("请输入学生的性别\n");
cin >> stu[i].gender ;
printf("请输入学生的年龄\n");
cin >> stu[i].age ;
printf("请输入学生的报考类型\n");
cin >> stu[i].ExamType ;
}
a.CreatList(Stu,stu,num);
}
else if(n==2)
{
printf("你要查询第几名学生的信息:\n");
cin >> n;
a.FindList(Stu,n);
}
else if(n==3)
{
printf("你要修改第几名学生信息 :");
scanf("%d",&i);
printf("请输入修改后的信息\n");
input_Student(e);
a.AlterList(Stu,i,e);
}
else if(n==4)
{
printf("你要删除第几名学生信息 :");
scanf("%d",&i);
a.ListDelete(Stu,i,e);
}
else if(n==5)
{
printf("你要在第几个序号后插入 :");
scanf("%d",&i);
printf("请输入插入学生的信息\n");
input_Student(e);
a.ListInsert(Stu,i,e);
}
else if(n==6)
{
a.DispList(Stu);
cout<<endl;
}
else
{
cout<<"ERORR"<<endl;
}
Menu();
printf("功能选择 : \n");
}
return 0 ;
}

浙公网安备 33010602011771号