学生信息管理-类

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


/***********************************************************************************************************
题目 学生信息管理系统

1、功能要求
(1)添加功能:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,
要求学生的学号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:可根据编号、姓名等信息对已添加的记录进行查询,如果未找到,给出相应的提示信息,如果找到,
则显示相应的记录信息。
(3)显示功能:可显示当前系统中所有记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录,则提示"记录为空!"
并返回操作;否则,输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,
则提示相应的记录不存。
(6)统计功能:能根据多种参数进行人员的统计。能统计四类人员数量以及总数,统计男、女员工的数量。
(7)保存功能:可将当前系统中各类人员记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的人员信息读入到当前系统中,供用户进行使用。

*************************************************************************************************************/
#include
#include
#include
#include
#include
#define MAX 100//定义人数最大为一百
using namespace std;

/***********************************************************************
定义日期类型(Mydate): 年、月、日
***********************************************************************/
typedef struct Date//日期结构体类型
{
int year;
int month;
int day;
}Mydate;//日期类型的类型名

/*******************************************************************
定义学生类(student): 学号、姓名、性别、出生日期、家庭住址、联系电话
********************************************************************/

class Student//定义学生类
{
public:
char num[15]; //学号
char name[30]; //姓名
char sex[4]; //性别
Mydate birthday; //出生日期
char address[50];
char phone[15];
/**********************************************
输入学生信息
**********************************************/
void Input(char xh[]) //输入数据,未存入数组
{
strcpy(num,xh);
cout<<"姓名:";
cin>>name;
cout<<"性别:";
cin>>sex;
cout<<"出生日期:"<cout<<"年份:";
cin>>birthday.year;
cout<<"月分:";
cin>>birthday.mon

th;
cout<<"日:";
cin>>birthday.day;
cout<<"家庭住址:";
cin>>address;
cout<<"联系电话:";
cin>>phone;
}
void Output() //输出学生记录
{
cout<cout<<<<<<<<}
};
Student st[MAX],stu; //定义学生类型数组,最多可以存入MAX个学生记录
static Teatop; //静态变量,记录的个数
/********************************************
定义学生管理类
声明学生的增加,查找、显示、编辑、删除、
保存到文件、从文件读取函数,在类体外实现
*********************************************/

class StudentManager //定义学生管理类
{
public:
int Add(); //增加
int Search(); //查找
void Show(); //显示
void Edit(); //编辑
int Delete(); //删除
void CountStu(); //统计
void Save(); //保存到文件
void Read(); //从文件读取
};
/********************************************
/*实现增加学生信息函数功能
/*t: 学生对象
/*i: 循环输入计数器
/*bh: 输入编号
/*添加成功,返回1,否则返回0
*********************************************/
int StudentManager::Add()
{
Student s; //定义学生对象
int i;
char xh[12];
Read(); //读文件
if(Teatop==MAX) //数组已满
{
cout<<"人数已满"<return 0;
}
cout<<"请输入学号:"; //如果没满,则输入记录
cin>>xh;
for(i=0;i{
if(strcmp(xh,st[i].num)==0) //学号存在相同的,返回0
{
cout<<"已有学号,请从输入"<return 0;
}
}
s.Input(xh); //不存在学号相同的,调用Input()函数,输入记录
st[Teatop]=s; //把记录存入数组中
Teatop++; //元素个数加1
cout<<"添加成功!"<return 1;
}
/********************************************
实现查找学生信息功能
可根据学号或姓名查找
j: 进行循环查找的计数器
bh: 输入的学号
fs: 查找的方式
xm: 输入的姓名
查找成功,返回1
*********************************************/
int StudentManager::Search()
{
int j,fs;
char xm[20],xh[12];
cout<<"选择查找方式 ,按编号查找(0)|按姓名查找(1):";
cin>>fs; //输入要查找的方式
switch(fs)
{
case 0: //根据编号查找
cout<<"请输入学号:";
cin>>xh;
for(j=0;j{
if(strcmp(xh,st[j].num)==0) break; //找到
}
if(j==Teatop) //没找到
{
cout<<"没有此人!"<return 0;
}
else
{
st[j].Output(); //输出找到的记录
}
break;
ca

se 1: //根据姓名查找
cout<<"请输入姓名:";
cin>>xm;
for(j=0;j{

if(strcmp(xm,st[j].name)==0) break;//找到
}
if(j==Teatop) //没找到
cout<<"没有此人!"<else
{
st[j].Output(); //找到并输出
}
break;
}
return 1;

}
/******************************************
显示教师信息
*******************************************/
void StudentManager::Show()
{
int i;
if(Teatop==0)
{
cout<<"记录为空!"<return;
}
cout<cout<<<<<<for(i=0;ist[i].Output();
}
/******************************************
编辑教师信息
根据编号查找到该记录,再进行修改
*******************************************/
void StudentManager::Edit()
{
Student t1;
int j;
char xh[12];
cout<<"请输入要编辑的学生的学号:";
cin>>xh;
for(j=0;j{
if(strcmp(xh,st[j].num)==0) break;
}
if(j==Teatop)
{
cout<<"没有此人!"<return;
}
st[j].Output();
cout<<"输入修改后的信息,学号不能改:"<t1.Input(xh); //重新输入该记录的信息
st[j]=t1; //将该记录写入数组
cout<<"编辑成功!"<}
/******************************************
删除学生信息
根据学号找到要删除的记录,进行删除
i: 循环查找计数器
k: 要删除的记录的位置
bh: 输入要删除的记录的学号
*******************************************/
int StudentManager::Delete()
{
int j,k;
char xh[12];
cout<<"请输入要删除的人的编号:";
cin>>xh;
for(j=0;j{
if(strcmp(xh,st[j].num)==0) break;
}
if(j==Teatop)
{
cout<<"没有此人!"<return 0;
}
for(k=j;k{
st[k]=st[k+1];
}
Teatop--; //记录数减1
cout<<"删除成功!"<return 1;
}

/*************************************
统计学生信息
对性别、部门等进行分类统计人数
tj: 分类统计
i: 循环控制
countm:男学生人数
countf:女学生人数
***************************************/
void StudentManager::CountStu()
{

int tj,i,countm=0,countf=0; //统计类别
Read(); //从文件中读取数据到数组中
cout<<"输入统计的类别:0-性别|1-省份";
cin>>tj;
switch(tj)
{
case 0: //按性别统计
for(i=0;i{
if(strcmp("男",st[i].sex)==0)countm++;
if(strcmp("女",st[i].sex)==0)countf++;
}
cout.setf(ios::left);
cout<

学生人数为:"<cout<cout<break;
case 1: //按学院统计员工数

break;
}


}
/******************************************
保存学生信息,写入文件Student.dat //Dat文件是由特定应用程序创建的通用数据文件,它可能包含二进制或文本格式的数据

*******************************************/
void StudentManager::Save()
{
int i;
ofstream outfile,outfile1; //输出文件流对象
outfile1.open("d:\\tt\\student.dat",ios::out);//打开文件
outfile1<outfile.open("d:\\tt\\student_data.dat",ios::binary);//打开文件
if(!outfile) //打开不成功
{
cerr<<"打开文件错误!"<return;
}
for(i=0;ioutfile.write((char *)&st[i],sizeof(st[i]));
outfile.close(); //关闭文件流
cout<<"保存成功!"<}
/******************************************
读取教师信息,从文件Student.dat读取
*******************************************/
void StudentManager::Read()
{
int i;
ifstream infile,infile1; //输入流对象
infile1.open("d:\\tt\\student.dat",ios::in);//以输入的方式打开文件
infile1>>Teatop; //输入文件流中记录的个数 存入Teatop
infile.open("d:\\tt\\student_data.dat",ios::binary); //打开文件
if(!infile) //打开文件不成功
{
cerr<<"打开文件错误!"<return;
}
for(i=0;iinfile.read((char *)&st[i],sizeof(st[i]));
infile.close();
cout<<"读取成功!"<}

/****************************************************
主函数
stud: 学生管理类对象
choice: 选择项
password:密码
c: 获取单个字符,实现暂停
*****************************************************/
int main()
{
StudentManager stud;
int choice,password;
char c;
cout<<" *************************************";
cout<cout<<" *************************************";
cout<cin>>password;
if(password!=123456)
{
cout<<"密码错误!"<flushall(); // 清除所有缓冲区
c=getchar();
return 0;
}
char ch;
do{
cout<<"学生管理"<cout<<"=========================================================================================="<cout<<"| 1.添加 ";
cout<<"2.查询 ";
cout<<"3.显示 ";
cout<<"4.编辑 ";
cout<<"5.删除 ";
cout<<"6.统计 ";
cout<<"7.保存 "

;
cout<<"8.读取 ";
cout<<"0.退出 |"<cout<<"=========================================================================================="<cout<<"请选择:";
cin>>choice;
switch(choice) //不同的选择,调用TeaManager类中相应用函数
{
case 1:stud.Add();break;
case 2:stud.Search();break;
case 3:stud.Show();break;
case 4:stud.Edit();break;
case 5:stud.Delete();break;
case 6:stud.CountStu();break;
case 7:stud.Save();break;
case 8:stud.Read();break;
default:cout<<"\n 选择错误!"<case 0:break;
}
cout<<"按回车键继续"<flushall();
ch=getchar();
system("cls");
}while(choice!=0);
cout<flushall(); //清除所有缓冲区
c=getchar(); //暂停
return 0;

}

相关文档
最新文档