C++学生信息管理系统2.0

//example4_06_student.h:定义学生类
#ifndef _STUDENT
#define _STUDENT
#include<iostream>
#include<string>
using namespace std;
#define SIZE 80
class Student
{
	char *name;
	char ID[19];
	char number[10];
	char speciality[20];
	int age;
	static int count;     //实际有意义的学生个数,小于等于对象的个数
public:
	Student();
	Student( char *na , char *id , char *num , char * spec ,int ag);
	Student(const Student &per);
	~Student();
    char* GetName()const;  //可以定义为常成员函数
	char* GetID();   //不可以定义为常成员函数
	char* GetNumber();  //不可以定义为常成员函数
	char* GetSpec();  //不可以定义为常成员函数
	int GetAge()const;     
	void Display()const;   
	void Input();
	void Insert();
	void Delete();
	static int GetCount( );  //新增加的静态成员函数
};
#endif
//example4_06_student.cpp:实现学生类
#include "example4_06_student.h"
int Student::count=0;      //静态数据成员的初始化
Student::Student()
{
	name=NULL;
	age=0;
}

Student::Student( char *na , char *id , char *num , char * spec ,int ag)
{	if(na)
	{ 
		name=new char[strlen(na)+1];
		strcpy(name,na);
	}
    strcpy(ID, id);
	strcpy(number,num);
	strcpy(speciality, spec);
	age=ag;
	count++;
}

Student::Student(const Student &per)
{
	if(per.name)
	{
		name=new char[strlen(per.name)+1];
		strcpy(name,per.name);
	}
	strcpy(ID, per.ID);
	strcpy(number,per.number);
	strcpy(speciality, per.speciality);
	age=per.age;
	count++;
}
	
Student::~Student()
{
	cout<<"disCon"<<endl;
	if (name)
		delete []name;
	count--;
}
   
char* Student:: GetName()const
{
	return name;
}
char* Student::GetID()
{  
	return ID;
}
int Student::GetAge()const
{  
	return age;
}
char* Student::GetSpec()
{
	return speciality;
}
char* Student::GetNumber()
{
	return number;
}
void Student::Display()const
{
	cout<<"姓  名:"<<name<<endl;
	cout<<"身份证:"<<ID<<endl;
	cout<<"学  号:"<<number<<endl;
	cout<<"专  业:"<<speciality<<endl;	
	cout<<"年  龄:"<<age<<endl<<endl;
}
void Student::Input()
{
	char na[10];
	cout<<"输入姓  名:";
	cin>>na ;
	if(name)
		delete []name;
	name=new char[ strlen(na)+1];
	strcpy( name, na );
	cout<<"输入身份证:";
	   cin>>ID ;
	cout<<"输入年  龄:";
	   cin>>age; 
	cout<<"输入专  业:";
	   cin>>speciality ;
	cout<<"输入学  号:";
	   cin>>number;	  
	count++;         //此句增加,每输入一个,学生总数加1
}

void Student::Insert()   //新增
{
	if (!age)           //当对象的age成员值为0时,就可以在此对象处重新输入以覆盖
		Input();
}

void Student::Delete()   //新增
{
	age=0;               //只简单地将age置0而不移动数组元素
	count--;
}

int  Student::GetCount( ) //新增静态成员函数,专门用来访问静态数据成员
{
	return count;
}
//example4_06.cpp: 第三个文件,定义学生类的对象以及一些函数,完成程序功能
#include<iostream>
#include "example4_06_student.h"
using namespace std;
const int N=10;


void menu();
void OutputStu(const Student *array );      //指针形式参数前加const保护       
void InputStu(Student *array);
int SearchStu(const Student *array, char *na); //指针形式参数前加const保护 
bool InsertStu(Student *array);
bool DeleteStu(Student *array, char *na);

int main()
{
	Student array[N];
	int choice;
	char na[20];
	
	do
	{
		menu();
		cout<<"Please input your choice:";
		cin>>choice;
		if( choice>=0 && choice <= 5 )
			switch(choice)
		{
			case 1:InputStu(array);break;
			case 2:
				   cout<<"Input the name searched:"<<endl;			      
				   cin>>na;
				   int i;
					   i=SearchStu(array, na);
				   if (i==N)
					   cout<<"查无此人!\n";
				   else
					   array[i].Display();
				   break;
			case 3:OutputStu(array); break;
			case 4: if (InsertStu(array))
						cout<<"成功插入一条记录\n"; 
				    else
						cout<<"插入失败!\n";
					break;
			case 5:
				   cout<<"Input the name deleted:"<<endl;
			       cin>>na;
				   if ( DeleteStu(array,na) )
					   cout<<"成功删除一条记录\n";
				   else
					   cout<<"删除失败!\n";
				   break;
			default:break;
		}
	}while(choice);
	return 0;
}
				   


void menu()
{
	cout<<"**********1.录入信息**********"<<endl;
	cout<<"**********2.查询信息**********"<<endl;
	cout<<"**********3.浏览信息**********"<<endl;
	cout<<"**********4.插入信息**********"<<endl;   //新增菜单
	cout<<"**********5.删除信息**********"<<endl;   //新增菜单
	cout<<"**********0.退    出**********"<<endl;
}

void OutputStu(const Student *array )
{
	cout<<"学生总人数="<<Student::GetCount()<<endl;  //此句有修改
	for(int i=0 ; i<N ; i++)                //此句有修改,循环控制条件及输出条件
		if (array[i].GetAge()) 
			array[i].Display();
}


int SearchStu(const Student *array, char *na)
{
	int i,j=N;
	for(i=0 ; i<N ; i++)          //此句有修改,循环控制条件
	   if (array[i].GetAge())     //保证是有效记录
		  if( strcmp( array[i].GetName() , na) == 0 )
		  {
			j=i;
			break;
		  }
	return j;
}

void InputStu(Student *array )   //此函数与第三章中有较大修改,请注意
{
	char ch;
	int i=0; 
	do
	{   if (Student::GetCount()==N)             
		     cout<<"人数已满,无法继续录入!"<<endl;
		if (!array[i].GetAge())
			array[i++].Input();
		cout<<"继续输入吗?(Y or N )"<<endl;
		cin>>ch;
	}while(ch=='Y');
}

bool InsertStu(Student *array)
{
	if (Student::GetCount()==N)    //判断是否有位置插入记录
	{
		cout<<"人数已满,无法插入记录!"<<endl;
		return false;
	}
	for (int i=0; array[i].GetAge() ; i++);   //找第一个年龄为0的空位置
		array[i].Insert();
	return true;
}

bool DeleteStu(Student *array, char *na)
{
    if (Student::GetCount()==0) 
	{
		cout<<"没有记录,无法删除!"<<endl;
		return false;
	}
	int  i=SearchStu(array, na);  //调用查找函数,判断此人是否存在
	if (i==N)
	{
		cout<<"查无此人,无法删除!\n";
        return false;
	}
	array[i].Delete();            //如果存在,直接删除
	return true;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值