使用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、功能需要添加,如修改学生部分信息等;