C++实现学生管理系统

使用C++在VS环境下模拟学生管理系统,需要实现的具体功能有

1、菜单界面

2、功能:实现查看学生、添加学生、删除学生、将学生信息保存在文件中;

具体实现:定义学生类,类成员包括学生姓名,学号,身份证,性别,年龄,和序号;

下面是学生类的头文件,包括类成员和函数定义;

#ifndef _CSTUDENT_H_
#define _CSTUDENT_H_
#include "string"
#include "iomanip"
#include "iostream"
using namespace std;
/***************************************/
//数据定义;
typedef string _name;
typedef string _S_number;
typedef string _ID;
typedef string _sex;
typedef int  _age;
typedef int  _number;
/***************************************/
//类声明
class Student
{
private:
	static _number count;	//定义静态变量,成员总数
	_number number;
	_name name;
	_sex sex;
	_age age;
	_S_number S_number;	//学号
	string ID;
public:
	Student();
	Student(_number in_number,_name in_name,string in_sex,_age in_age,_S_number in_S_number,_ID in_ID);	//构建函数,没有缺省构建函数;

	void setNumber(_number in_number);	//设置序号
	_number out_Number();
	
	void setName(_name in_name);		//名字
	_name out_Name();
	
	void setSex(_sex in_sex);		//性别
	_sex out_Sex();

	void setAge(_age in_age);		//年龄
	_age out_Age();

	void set_S_number(_S_number in_S_number);		//学号
	_S_number out_S_number();

	void set_ID(_ID in_ID);		//身份证
	_ID out_ID();
	
	void display();			//显示学生信息;
	
	static void add_Count();	//增加成员总数
	static void dec_Count();	//减少成员总数
	static _number out_Count();	//输出成员总数

};
void new_Student(Student student[]);
void input_Student(string &name,string &sex,int &age,string &snumber,string &ID);
#endif

类的具体实现如下:

#include "Cstudent.h"
#include "stdafx.h"
/***********************************************************************************/
//定义无参数成员,
/*********************************************/
Student::Student()
{
	number=0;
	name="规范";
	sex="男";
	age=0; 
	S_number="0";
	ID="0";
}
//构建函数
//有参数构建函数
Student::Student(_number in_number,_name in_name,_sex in_sex,_age in_age,_S_number in_S_number,_ID in_ID)	
{
	number=in_number;	//要构建的成员序号
	name=in_name;
	sex=in_sex;
	age=in_age;
	S_number=in_S_number;
	ID=in_ID;
}

/*********************************************/
//学生序号函数
void Student::setNumber(_number in_number)
{
	number=in_number;
}
_number Student::out_Number()
{
	return number;
}

/*********************************************/
//学生姓名函数
void Student::setName(_name in_name)
{
	name=in_name;
}
_name Student::out_Name()
{
	return name;
}
	/*********************************************/
	//学生性别函数
	void Student::setSex(_sex in_sex)				//性别
	{
		sex=in_sex;
	}		
	_sex Student::out_Sex()
	{
		return sex;
	}
	/*********************************************/
	//学生年龄函数
	void Student::setAge(_age  in_age)		//年龄
	{
		age=in_age;
	}
	_age Student::out_Age()
	{
		return age;
	}
	/*********************************************/
	//学生学号函数
	void Student::set_S_number(_S_number in_S_number)		//设置
	{
		S_number=in_S_number;
	}
	_S_number Student::out_S_number()									//输出
	{
		return S_number;
	}
	/*********************************************/
	//学生身份证函数
	void Student::set_ID(_ID in_ID)											//设置身份证
	{
		ID=in_ID;
	}
	_ID Student::out_ID()
	{
		return ID;
	}
/***********************************************************************************/	

	/*********************************************/
	//显示学生信息
	void Student::display()		
	{
		cout<<"--------------------------------------------------------"<<endl;
		cout<<"*"<<" "<<"序号:"<<left<<setw(8)<<number<<"学号:"<<left<<setw(10)<<S_number<<endl;
		cout<<"*"<<" "<<"姓名:"<<left<<setw(8)<<name<<"性别:"<<left<<setw(10)<<sex<<endl;
		cout<<"*"<<" "<<"年龄:"<<left<<setw(8)<<age<<"身份证号:"<<left<<setw(10)<<ID<<endl;
		cout<<"--------------------------------------------------------"<<endl;
	}

/***********************************************************************************/	

/***********************************************************************************/	

	/*********************************************/
	//成员总数
	void Student::add_Count()		//总数增加
	{
		count++;
	}

	void Student::dec_Count()		//总数减少
	{
		count--;
	}

	_number Student::out_Count()		//输出总数
	{
		return count;
	}

/***********************************************************************************/	

//写入学生信息函数;
void input_Student(_name &name,_sex &sex,_age &age,_S_number &snumber,_ID &ID)
{

	cout<<"学号"<<endl;
	cin>>snumber;
	cout<<"姓名"<<endl;
	cin>>name;
	cout<<"性别"<<endl;
	cin>>sex;
	cout<<"年龄"<<endl;
	cin>>age;
	cout<<"身份证号"<<endl;
	cin>>ID;
}

void new_Student(Student student[])		//添加的学生
{
	Student *p;
	p=student;	
	
	static _name name;
	static _sex sex;
	static _age age;
	static _S_number S_number;	
	static _ID ID;
	input_Student(name,sex,age,S_number,ID);	//将信息存储在局部变量中;
	Student S1(Student::out_Count()+1,name,sex,age,S_number,ID);	//构建一个学生成员S1;

	p=p+Student::out_Count();		//p指向S[n],n为当前要写入的类数组;
	*p=S1;
	Student::add_Count();				//更新学生总数;
}

初步编写好学生类,可以在菜单中及其他函数中调用;

下面是菜单的具体实现,定义了一个主菜单函数,其他的子菜单都用内联函数形式实现;

1、菜单头文件;

#ifndef _MENU_H_
#define _MENU_H_

#include "iostream"
#include"stdio.h"
#include"Cstudent.h"
using namespace std;
int disp_menu(Student student[]);	//显示菜单
void move_student(Student student[],int &count);		//删除学生
#endif

2、菜单的C文件;

扫描二维码关注公众号,回复: 3380491 查看本文章
#include "stdafx.h"
#include "menu.h"
//其中有一个主菜单,在主函数中调用,其他都是子菜单,只需要在主菜单函数中调用;
//因此,都使用了内联函数定义;

/*********************************************************************************************/
//函数功能:显示指定序号的学生成员信息
//输入:按键输入序号,要显示的类数组
//输出:无
/*********************************************************************************************/
 inline void disp_menu_zi1(Student student[])	//显示指定成员
{
	char zi;
	cout<<"输入要查看的成员序号"<<endl;
	while((zi=getchar())=='\n');			//使用getchar()去除缓存区的回车符;
	zi=zi-'0';			//得到序号
	student[zi-1].display();		//换成数组要-1;
	
}
 /*********************************************************************************************/
//函数功能:查看信息菜单,
//输入:要显示的类数组,当前已存序号;
//输出:无
/*********************************************************************************************/
 inline void disp_menu_zi(Student student[])		
{
	char c1;
	int i;
	cout<<"-------------------------------------------------------"<<endl;
	cout<<"1、查看指定成员"<<endl;
	cout<<"2、查看全部学生成员"<<endl;
	cout<<"3、离开"<<endl;
	cout<<"-------------------------------------------------------"<<endl;
	while((c1=getchar())=='\n');	//清除缓存区的回车符;
	
	switch(c1)		//C1表示输入学生的序号;
	{
		case'1':disp_menu_zi1(student);break;			//如果查看指定成员,调用函数;
		case'2':for(i=0;i<Student::out_Count();i++)	//查看全部成员,依次输出所有成员信息;
				{
					student[i].display();
				}break;
		case'3':break;
		default:break;
	}
}
/*********************************************************************************************/
//函数功能:删除成员 ,
//输入:student:要改动的数组;count_shuzu:要删除的成员索引;
//输出:无
/*********************************************************************************************/
 inline void dele_student(Student student[],int count_shuzu)
 {
	 int i;
	 for(i=count_shuzu;i<Student::out_Count();i++)	
	 {
		student[i]=student[i+1];
		student[i].setNumber(i+1);
	 } 
 }
/*********************************************************************************************/
//函数功能:删除成员 ,
//输入:student:需要改动的数组;
//输出:无
/*********************************************************************************************/
void move_student(Student student[])	
 {
	char ch;
	cout<<"-------------------------------------------------------"<<endl;
	cout<<"请输入要删除的学生序号:"<<endl;
	cout<<"-------------------------------------------------------"<<endl;
	while((ch=getchar())=='\n');	//得到要删除的学生序号;
	ch=ch-'1';								//得到在数组中的序号;
	dele_student(student,ch);
	Student::dec_Count();			//删除一个学生,当前成员数要-1;
 }
/*********************************************************************************************/
//函数功能:主菜单界面 ,
//输入:student:要改动的数组;
//输出:无
/*********************************************************************************************/

int disp_menu(Student student[])
{
	char c;
	cout<<"*******************************************************"<<endl;
	cout<<"学生管理系统"<<endl;
	cout<<"菜单:"<<endl;
	cout<<"1、添加学生成员"<<endl;
	cout<<"2、查看学生成员"<<endl;
	cout<<"3、删除学生成员"<<endl;
	cout<<"4、退出"<<endl;
	cout<<"*******************************************************"<<endl;
	cout<<"请做出选择"<<endl;
	while((c=getchar())=='\n');
	switch (c)
	{
		case '1' :new_Student(student);break;	//添加学生成员;
		case '2' :disp_menu_zi(student);break;	//显示菜单界面;
		case'3':move_student(student);break;	//删除指定成员;
		case '4':return 0;break;							//退出管理系统;
		default:break;
	}
	return 1;
}




实现了类的定义和菜单功能后,开始在主函数中编写,包括对文件的读取和保存;

#include "stdafx.h"


_number Student::count=0;										//在Student类里定义的静态变量,需要声明及初始化;
void Write_Student(ofstream &out, Student &p);		//向文件中写入学生信息;
void Read_Student(ifstream &in, Student &p);			//读取文件;

int main()
{
	int count=0;
	int flag=1;				//退出系统标准位;	
	Student S[20];		//定义20个学生成员;
	
	string ch;
	stringstream ss;
                                                                        //第一次进入系统,需要屏蔽读取文件部分;
	ifstream in;				
	in.open("text.txt");		//打开text.txt文件作为输入;
	in>>ch;					//取出第一行;
	ch=ch.substr(19);		//取出学生总数;
	ss<<ch;
	ss>>count;				//将学生总数转成int类型;
	for(int j=0;j<count;j++)
	{
		Read_Student(in,S[j]);	//分别取出学生信息,保存在数组中;
	}
	in.close();

  
	while(flag)			//按下4退出键,flag变为0;
	{
		flag=disp_menu(S);		
	}

	ofstream out;
	out.open("text.txt");
	out<<"学生管理系统总人数:"<<left<<setw(8)<<Student::out_Count()<<endl;
	for(int i=0;i<Student::out_Count();i++)	//退出系统时保存所有学生信息;
	{
		
		Write_Student(out,S[i]);
	}
	out.close();
	return 0;
}
//写入文件;
void Write_Student(ofstream &out, Student &p)	//将学生信息输出到txt文件中;	
{

	out<<"学生序号:"<<left<<setw(8)<<p.out_Number();
	out<<"学生姓名:"<<left<<setw(10)<<p.out_Name();
	out<<"学生性别:"<<left<<setw(8)<<p.out_Sex();
	out<<"学生年龄:"<<left<<setw(8)<<p.out_Age();
	out<<"学生学号:"<<left<<setw(14)<<p.out_S_number();
	out<<"学生身份证:"<<left<<setw(8)<<p.out_ID()<<endl;
}
void Read_Student(ifstream &in,Student &p)		//将文件中的学生信息写入到类数组中;
{
	string ch,number;
	
	in>>ch;
	p.setNumber(atoi(ch.substr(9).c_str()));	//取出序号;	
	
	in>>ch;
	p.setName(ch.substr(9));	//取出姓名;
	
	in>>ch;
	p.setSex(ch.substr(9));	//取出性别;

	in>>ch;
	p.setAge(atoi(ch.substr(9).c_str()));	//取出年龄;

	in>>ch;
	p.set_S_number(ch.substr(9));	//取出学号;

	in>>ch;
	p.set_ID(ch.substr(11));	//取出身份证号;

	Student::add_Count();	//取出学生信息,学生数增加;

}


这样,一个简易的学生系统的功能就实现了,还有很多地需要完善,

1、缺少登陆界面,需要实现管理人员和学生权限;

2、对于刚创建的文件,程序会报错,需要将读取文件先屏蔽掉,有信息之后才行;

3、输入信息的报错处理,如输入身份证检测;

4、数组的动态开辟,目前只能容纳20个学生成员;

5、保存及读取文件时,需要优化;

6、功能需要添加,如修改学生部分信息等;

猜你喜欢

转载自blog.csdn.net/stm32_newlearner/article/details/80984724