/************************************************************
*版权所有 (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;
}
考试报名管理
最新推荐文章于 2022-08-16 10:28:24 发布