考试报名管理

/************************************************************
*版权所有 (C)2015.Gaozhe.
*
*文件名称:text.cpp
*文件标识:无
*内容摘要:该代码是对学生成绩管理的简单模拟
*其他说明:无
*当前版本:vc6.0
*作    者:高哲
*完成日期:2015年12月25日
*
**************************************************************/
#include<iostream>
#include<conio.h>
#include<algorithm>
#include<string>
using namespace std;
/*************************************************************/
struct Student                                //定义结构体
{
	long  num;//准考证号
	string name;//姓名
	string sex;//性别
	int age;//年龄
	string kind;//报考类型
};

    char RecSigal();                          //Y或N
    int RecSigal(int,int);
    Student &operator<<(ostream &,Student &); //重载
    Student &operator>>(istream &,Student &);
    struct Link                               
{
	Student Data;//Data为Student型
	Link *next;//Link的next指针
};
/***************************************************************/
typedef Link ElemType;                          //定义ElemType
class List_Link
{
private:
	ElemType *head;                             //头指针
	int length;                                 //定义长度
public:
	List_Link();
	void Interface();///主界面
	void Check();///选择操作
	void Input();///输入学生
	void Add();///添加学生
	void GetLength();///得到学生人数
	void Delete();///删除学生
	void Renew();///修改学生信息
	void SearchStud();///查找学生
	void Display();///输出所有学生信息
	
};
/*****************************************************************/
int main()
{
	cout<<"\n ★☆★☆★☆★☆★☆★☆★☆★☆★☆★"<<endl;
	cout<<" ☆ ☆"<<endl;
	cout<<" ★ *********************** ★"<<endl;
	cout<<" ☆ * 欢迎进入学生信息管理系统!* ☆"<<endl;
	cout<<" ★ *********************** ★"<<endl;
	cout<<" ☆ ☆"<<endl;
	cout<<" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★"<<endl;
	List_Link S;
	S.Interface();
	return 0;
}
/******************************************************************/
List_Link::List_Link()//Link的构造函数,初始化
{
	head=new ElemType;//开辟一个新的ElemType的指针
	length=0;         //初始长度为0
	head->next=NULL;  //头指针指向空
}
/******************************************************************
*功能描述:输入考生信息
*输入参数:考生准考证号num、姓名name、性别sex、年龄age、报考类型kind
*输出参数:无
*返回值:  无
*其它说明:消息字段之间用分号(;)分隔
*******************************************************************/
void List_Link::Input()
{
	if(head->next!=NULL)
	{
		cout<<"已有学生信息,请执行添加操作!";
		Interface();
	}
	bool flag=true;
	char x;
	cin>>head->Data;
	
	cout<<"\n考生信息录入成功!\n是否继续录入考生信息?\n是请按'Y',否则按'N'\n";
	x=RecSigal();
	switch(x)
	{
	case 'n':
	case 'N':
		cout<<"请继续其他操作!\n";
		Interface();
		break;
	case 'y':
	case 'Y':
		
		head->next=NULL;
		length++;
		Interface();
		break;
	}
}
/******************************************************************
*功能描述:添加考生信息
*输入参数:考生准考证号num、姓名name、性别sex、年龄age、报考类型kind
*输出参数:无
*返回值: 无
*其它说明:消息字段之间用分号(;)分隔
*******************************************************************/
void List_Link::Add()///添加学生
{
	if(length==0)
	{
		cout<<"\n还未输入考生信息,请执行最初操作:\n";
		Interface();
	}
	
	
	int i;
	bool flag=false;
	ElemType *p1,*p2,*p3;
	p1=head;
	p2=new ElemType;
	cin>>p2->Data;
	for(i=0;i<length;i++)
	{
		p3=p1->next;
		if((p2->Data.num>p1->Data.num)&&p1->next==NULL)
		{
			p1->next=p2;
			p2->next=NULL;
			flag=true;
			break;
			
		}
		else if((p2->Data.num)>(p1->Data.num)&&(p2->Data.num)<(p3->Data.num))
		{
			
			p1->next=p2;
			p2->next=p3;
			flag=true;
			break;
			
		}
		p1=p3;
	}
	if(flag)
	{
		cout<<"\n考生信息录入成功!\n是否继续录入考生信息?\n是请按'Y',否则按'N'\n";
		char
			x=RecSigal();
		switch(x)
		{
		case 'n':
		case 'N':
			
			cout<<"请继续其他操作!\n";
			Interface();
			break;
		case 'y':
		case 'Y':
			length++;
			Interface();
			break;
		}
	}
}
/******************************************************************
*功能描述:删除考生信息
*输入参数:要删除考生的考号num
*输出参数:无
*返回值:无
*其它说明:消息字段之间用分号(;)分隔
*******************************************************************/
void List_Link::Delete()
{
	if(length<1)
	{
		cout<<"\n考生信息为空!\n请重新选择操作项!\n";
		Interface();
	}
	
	cout<<"请输入要删除的考生的考号:";
	long n;
	cin>>n;
	bool flag=false;
	if(head->Data.num==n)//头指针中num等于n
	{
		cout<<"\n是否确认删除该考生信息?\n是请按'Y',否则按'N'\n";
		char f=RecSigal();
		if(f=='n'||f=='N')
		{
			cout<<"\n未执行删除操作!\n按任意键返回主界面!\n";
			char c=getch();//获得
			Interface();
		}
		else
		{
			head=head->next;
			flag=true;
		}
	}
	else
	{
		ElemType *p1,*p2;//定义两个临时指针
		p1=head;
		int i;
		for(i=0;i<length;i++)
		{
			p2=p1->next;
			if(p2->Data.num==n)
			{
				cout<<"\n是否确认删除该考生信息?\n是请按'Y',否则按'N'\n";
				char f=RecSigal();
				if(f=='n'||f=='N')
				{
					cout<<"\n未执行删除操作!\n按任意键返回主界面!\n";
					char c=getch();
					Interface();
				}
				else
				{
					p1->next=p2->next;
					delete p2;
					flag=true;
					break;
				}
			}
			p1=p2;
		}
	}
	if(flag)
	{
		length--;
		cout<<"\n考生信息删除成功!";
		cout<<"\n按任意键返回主界面!\n";
		char c=getch();
		Interface();
	}
	else
	{
		cout<<"\n未查找到此考生!\n请重新选择操作项!\n";
		Interface();
	}
}
/******************************************************************
*功能描述:修改考生信息
*输入参数:要修改考生的考号num
*输出参数:考生准考证号num、姓名name、性别sex、年龄age、报考类型kind
*返回值:无
*其它说明:消息字段之间用分号(;)分隔
*******************************************************************/
void List_Link::Renew()
{
	if(length<1)
	{
		cout<<"\n考生信息为空!\n请重新选择操作项!\n";
		Interface();
	}
	cout<<"请输入要修改的考生的考号:";
	long n;
	cin>>n;
	ElemType *p;
	p=head;
	
	for(int i=0;i<length;i++)
	{
		if(p->Data.num==n)
		{
			cout<<"\n考生有以下信息:";
			cout<<p->Data;
			cout<<"\n请输入要更改的信息项(除准考证以外的信息):";
			int a=RecSigal(2,5);
			switch(a)
			{
			case 2:
				{
					cout<<"请输入新的考生姓名:";
					string t;
					cin>>t;
					p->Data.name=t;
				}
				break;
			case 3:
				{
					cout<<"请输入新的考生性别:";
					char t;
					cin>>t;
					p->Data.sex=t;
				}
				break;
			case 4:
				{
					cout<<"请输入新的考生年龄:";
					int t;
					cin>>t;
					p->Data.age=t;
				}
				break;
			case 5:
				{
					cout<<"请输入新的报考类别:";
					string t;
					cin>>t;
					p->Data.kind=t;
				}
				break;
			}
			cout<<"\n修改成功!\n修改后的信息为:\n";
			cout<<p->Data;
			cout<<"\n按任意键返回主菜单!\n";
			char c=getch();
			Interface();
			break;
		}
		else p=p->next;
	}
	if(i>=length)
	{
		cout<<"\n未查找到此考生!\n请重新选择操作项!\n";
		Interface();
	}
}
/******************************************************************
*功能描述:查找考生信息
*输入参数:查找考生考号num
*输出参数:考生准考证号num、姓名name、性别sex、年龄age、报考类型kind
*返回值:无
*其它说明:消息字段之间用分号(;)分隔
*******************************************************************/
void List_Link::SearchStud()
{
	if(length<1)
	{
		cout<<"\n考生信息为空!\n请重新选择操作项!\n";
		Interface();
	}
	cout<<"请输入要查询的考生的考号:";
	long n;
	cin>>n;
	ElemType *p;
	p=head;
	int i;
	for(i=0;i<length;i++)
	{
		if(p->Data.num==n)
		{
			cout<<"\n考生信息为: ";
			cout<<p->Data;
			cout<<"\n\n查询成功!\n按任意键返回主界面!\n";
			char c=getch();
			Interface();
			break;
		}
		else p=p->next;
	}
	if(i>=length)
	{
		cout<<"\n未查找到此考生!\n请重新选择操作项!\n";
		Interface();
	}
}
/******************************************************************
*功能描述:输出所有考生信息
*输入参数:无
*输出参数:考生准考证号num、姓名name、性别sex、年龄age、报考类型kind
*返回值:无
*其它说明:消息字段之间用分号(;)分隔
*******************************************************************/
void List_Link::Display()
{
	if(length<1)
	{
		cout<<"\n考生信息为空!\n请重新选择操作项!\n";
		Interface();
	}
	ElemType *p;
	p=head;
	int i;
	for(i=0;i<length;i++)
	{
		cout<<"\n\n第 "<<i+1<<" 位考生信息:";
		cout<<p->Data;
		if(p->next!=NULL)
			p=p->next;
	}
	if(i>0&&i==length)
	{
		cout<<"\n\n查询成功!\n按任意键返回主界面!\n";
		char c=getch();
		Interface();
	}
}
/******************************************************************
*功能描述:主页面
*输入参数:无
*输出参数:无
*返回值:无
*其它说明:消息字段之间用分号(;)分隔
*******************************************************************/
    void List_Link::Interface()
{
	
	cout<<" 1.输入考生信息操作\n";
	cout<<" 2.查询考生信息操作\n";
	cout<<" 3.添加考生信息操作\n";
	cout<<" 4.修改考生信息操作\n";
	cout<<" 5.删除考生信息操作\n";
	cout<<" 6.查询全部信息操作\n";
	
	cout<<" 0.退出管理程序操作\n";
	cout<<"\n请输入你的操作:";
	
	Check();
}
/******************************************************************
*功能描述:查询考生信息
*输入参数:无
*输出参数:考生准考证号num、姓名name、性别sex、年龄age、报考类型kind
*返回值:无
*其它说明:消息字段之间用分号(;)分隔
*******************************************************************/
void List_Link::Check()
{
	int a;
	cin>>a;
	switch(a)
	{
	case 1:
		Input();
		break;
	case 2:
		SearchStud();
		break;
	case 3:
		Add();
		break;
	case 4:
		Renew();
		break;
	case 5:
		Delete();
		break;
	case 6:
		
		Display();
		break;
		
	case 0:
		cout<<"\n\t\t按任意键退出... ...\n";
		exit(0);
	default:
		cout<<"输入有误,请重新输入:";
		Check();
		break;
	}
}
/******************************************************************
*功能描述:判断Y或N
*输入参数:无
*输出参数:无
*返回值:无
*其它说明:消息字段之间用分号(;)分隔
*******************************************************************/
int RecSigal(int a,int b)
{
	int c;
	while(true)
	{
		cin>>c;
		if(c>=a&&c<=b)return c;
		else
		{
			cout<<"\n输入有误!\n请重新输入:";
			continue;
		}
	}
}

char RecSigal()//Y或N
{
	char f;
	while(true)
	{
		cin>>f;
		if(f=='y'||f=='Y'||f=='n'||f=='N')
			return f;
		else
		{
			cout<<"输入有误,请重新输入:";
			continue;
		}
	}
}
/******************************************************************
*功能描述:运算重载
*输入参数:无
*输出参数:无
*返回值:无
*其它说明:消息字段之间用分号(;)分隔
*******************************************************************/

Student &operator>>(istream &input,Student &s)
{
	cout<<"\n请输入准考证号:";
	input>>s.num;
	cout<<"\n请输入考生姓名:";
	input>>s.name;
	cout<<"\n请输入考生性别:";
	input>>s.sex;
	cout<<"\n请输入考生年龄:";
	input>>s.age;
	cout<<"\n请输入报考类别:";
	input>>s.kind;
	return s;
}
Student &operator<<(ostream &output,Student &s)
{
	output<<"\n1.准考证号:"<<s.num;
	output<<"\n2.考生姓名:"<<s.name;
	output<<"\n3.考生性别:"<<s.sex;
	output<<"\n4.考生年龄:"<<s.age;
	output<<"\n5.报考类别:"<<s.kind;
	return s;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值