考试报名管理

考试报名系统是对考试报名管理的简单模拟,用菜单选择方式完成下列功能:输入考生信息;输出考生信息;查询考生信息;添加考生信息;修改考生信息;删除考生信息。每条考生信息由准考证号、姓名、性别、年龄、报考类别等信息组成。
       要求:定义一个专用的类型 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 ;
}

  

posted @ 2019-07-31 18:40  青衫客36  阅读(247)  评论(0编辑  收藏  举报