目录
设计框架
流程图:
显示教师信息:
选择该功能后,打开教师的信息,读取内容,利用cout输出字符串变量,以及输入流ifstream类,支持从磁盘文件输入,其中包括编号,姓名,职位,年龄,出生日期,电话号码,住址, 电子邮件地址。若信息文件打开错误,则系统输出“open error!”并终止运行。
void teacher::display()
{
int i,l;
l=length();
cout<<" 编号 姓名 职位 年龄 出生日期 电话号码 住址 电子邮件地址"<<endl;
ifstream infile("teacher1.dat",ios::in|ios::binary);
if(! infile) { cerr<<"open error!"<<endl;
abort();
}
for( i=0;i<l;i++)
{
infile.read((char *)&tea[i],sizeof(tea[i]));
cout<<" "<<tea[i].num<<" "<<tea[i].name<<" "<<tea[i].call<<" "
<<tea[i].age<<" "<<tea[i].birthday <<" "<<tea[i].phone<<" "
<<tea[i].addr<<" "<<tea[i].eaddr<<endl;
}
infile.close(); }
删除教师信息
与显示教师信息大致相同,定义l类指针,获取length成员的值,利用ifstream类,用来支持磁盘文件的输入。选择该功能后,输入要删除的教师编号,若编号正确,则删除成功。若编号错误,则显示输入有误。
void teacher::del()
{
int i,a=0,j,l;
l=length();
ifstream infile("teacher1.dat",ios::in|ios::binary);
if(! infile)
{
cerr<<"open error!"<<endl;
abort();
}
for( i=0;i<l;i++)
{
infile.read((char *)&tea[i],sizeof(tea[i]));
}
int num;
cout<<"请输入要删除的编号:";
cin>>num;
cout<<endl;
for(i=0;i<l;i++)
{
if(tea[i].num==num)
{
a=1;
for(j=i;j<l-1;j++)
tea[j]=tea[j+1];
break;
}
}
if(a==0)
{
cout<<"输入有误!"<<endl;
cout<<" 编号 姓名 职位 年龄 出生日期 电话号码 住址 电子邮件地址"<<endl;
for( i=0;i<l;i++)
{
infile.read((char *)&tea[i],sizeof(tea[i]));
cout<<" "<<tea[i].num<<" "<<tea[i].name<<" "<<tea[i].call<<" "<<tea[i].age<<" "<<tea[i].birthday
<<" "<<tea[i].phone<<" "<<tea[i].addr<<" "<<tea[i].eaddr<<endl;
}
}
else if(a==1)
{
cout<<"删除成功! "<<endl;
cout<<" 编号 姓名 职位 年龄 出生日期 电话号码 住址 电子邮件地址"<<endl;
for( i=0;i<l-1;i++)
{ infile.read((char *)&tea[i],sizeof(tea[i]));
cout<<" "<<tea[i].num<<" "<<tea[i].name<<" "<<tea[i].call<<" "<<tea[i].age<<" "<<tea[i].birthday <<" "<<tea[i].phone<<" "<<tea[i].addr
<<" "<<tea[i].eaddr<<endl; }
ofstream outfile("teacher1.dat",ios::out|ios::binary);
if(! outfile)
{
cerr<<"open error!"<<endl;
abort();
}
for(j=0;j<l-1;j++)
outfile.write((char *)&tea[j],sizeof(tea[j]));
outfile.close();
}
}
【数据结构】
int num;//编号
char name[20];//姓名
int age;//年龄
char birthday[20];//出生日期
char addr[20];//住址
int phone;//电话号码
char eaddr[20];//电子邮件地址
char call[20];//在校职位
int length()
全部代码
//教师管理系统
#include <iostream> //基本输入输出函数
#include<fstream> //文件操作,打开文件,关闭文件函数
using namespace std; //用string定义数据类型
#include <string.h>
class teacher //定义教师类
{public:
int num;//编号
char name[20];//姓名
int age;//年龄
char birthday[20];//出生日期
char addr[20];//住址
int phone;//电话号码
char eaddr[20];//电子邮件地址
char call[20];//在校职位
void set();
void display();
void del();
void zhao();
void renshu();
}tea[100];
int length()
{
ifstream infile("teacher1.dat",ios::binary);
if(! infile)
{
cerr<<"open error!"<<endl;
abort();
}
int len;
infile.seekg(0,ios::end);
len=infile.tellg()/sizeof(teacher);
return len;
}
void teacher::set() //增加教师信息
{
int n,i,j;
int l=0;
ofstream outfile("teacher1.dat",ios::app|ios::binary); //使用了teacher1文件 文件写操作,内存写入存储设备中
if(! outfile)
{
cerr<<"open error!"<<endl;
abort();
}
l=length();cout<<l<<endl;
if(l>0)
{ ifstream infile("teacher1.dat",ios::in|ios::binary); //录入文件, 向已有的文件读入
if(! infile)
{
cerr<<"open error!"<<endl; //输出错误信息
abort();
}
for( i=0;i<l;i++)
infile.read((char *)&tea[i],sizeof(tea[i])); //存放数据
}
n=0;
cout<<"请输入要录入的教师人数(<=100):"<<endl;
cin>>n;
cout<<"请输入1个教师的信息:"<<endl;//编号、姓名、年龄、出生日期、住址、电话号码、电子邮件地址、在校职位
cout<<endl;
for(i=l;i<n+l;)
{
cout<<"输入教师编号:";
cin>>tea[i].num;
if(i>0)
{
int h=i;
for(j=0;j<h;)
{
if(tea[h].num==tea[j].num)
{
cout<<"教师号重复,请重新输入!"<<endl;
}
else {j++;continue;}
cout<<"输入教师编号:";
cin>>tea[h].num;
j=0;
}
}
cout<<"输入教师姓名:";
cin>>tea[i].name;
cout<<"输入教师职位:";
cin>>tea[i].call;
cout<<"输入教师年龄:";
cin>>tea[i].age;
cout<<"输入教师出生日期:";
cin>>tea[i].birthday;
cout<<"输入教师电话号码:";
cin>>tea[i].phone;
cout<<"输入教师住址:";
cin>>tea[i].addr;
cout<<"输入教师电子邮件地址:";
cin>>tea[i].eaddr;
//cout<<endl;
i++;
if(i<n+l)
cout<<"请输入"<<i+l+1<<"个教师的信息:"<<endl;
}
for(j=l;j<n+l;j++)
outfile.write((char *)&tea[j],sizeof(tea[j]));
outfile.close();
cout<<"数据已保存!\n";
}
void teacher::display() // 显示所有教师信息
{
int i,l;
l=length();
cout<<" 编号 姓名 职位 年龄 出生日期 电话号码 住址 电子邮件地址"<<endl;
ifstream infile("teacher1.dat",ios::in|ios::binary);
if(! infile) { cerr<<"open error!"<<endl;
abort();
}
for( i=0;i<l;i++)
{
infile.read((char *)&tea[i],sizeof(tea[i]));
cout<<" "<<tea[i].num<<" "<<tea[i].name<<" "<<tea[i].call<<" "
<<tea[i].age<<" "<<tea[i].birthday <<" "<<tea[i].phone<<" "
<<tea[i].addr<<" "<<tea[i].eaddr<<endl;
}
infile.close(); }
void teacher::del() //删除教师信息
{
int i,a=0,j,l;
l=length();
ifstream infile("teacher1.dat",ios::in|ios::binary);
if(! infile)
{
cerr<<"open error!"<<endl;
abort();
}
for( i=0;i<l;i++)
{
infile.read((char *)&tea[i],sizeof(tea[i]));
}
int num;
cout<<"请输入要删除的编号:";
cin>>num;
cout<<endl;
for(i=0;i<l;i++)
{
if(tea[i].num==num)
{
a=1;
for(j=i;j<l-1;j++)
tea[j]=tea[j+1];
break;
}
}
if(a==0)
{
cout<<"输入有误!"<<endl;
cout<<" 编号 姓名 职位 年龄 出生日期 电话号码 住址 电子邮件地址"<<endl;
for( i=0;i<l;i++)
{
infile.read((char *)&tea[i],sizeof(tea[i]));
cout<<" "<<tea[i].num<<" "<<tea[i].name<<" "<<tea[i].call<<" "<<tea[i].age<<" "<<tea[i].birthday
<<" "<<tea[i].phone<<" "<<tea[i].addr<<" "<<tea[i].eaddr<<endl;
}
}
else if(a==1)
{
cout<<"删除成功! "<<endl;
cout<<" 编号 姓名 职位 年龄 出生日期 电话号码 住址 电子邮件地址"<<endl;
for( i=0;i<l-1;i++)
{ infile.read((char *)&tea[i],sizeof(tea[i]));
cout<<" "<<tea[i].num<<" "<<tea[i].name<<" "<<tea[i].call<<" "<<tea[i].age<<" "<<tea[i].birthday <<" "<<tea[i].phone<<" "<<tea[i].addr
<<" "<<tea[i].eaddr<<endl; }
ofstream outfile("teacher1.dat",ios::out|ios::binary);
if(! outfile)
{
cerr<<"open error!"<<endl;
abort();
}
for(j=0;j<l-1;j++)
outfile.write((char *)&tea[j],sizeof(tea[j]));
outfile.close();
}
}
void teacher::zhao() //查找教师信息
{
int i,l,m=0;
int n;
l=length(); //建立l指针,录入结构体成员
cout<<l<<endl;
ifstream infile("teacher1.dat",ios::in|ios::binary); //读取存放的数据
if(! infile)
{
cerr<<"open error!"<<endl; //用if语句,teacher1错误显示error
abort();
}
for( i=0;i<l;i++) //for循环
{
infile.read((char *)&tea[i],sizeof(tea[i]));
}
cout<<"请选择按(1.教师编号;2.教师姓名)查找\n";
for(;;)
{
int x;
cin>>x;
if(x==1)
{
cout<<"请输入要查找的编号:";
cin>>n;
cout<<endl;
for(i=0;i<l;i++)
{
if(n==tea[i].num) //用if函数和for循环,把输入值放到数组tea里
{
cout<<" 编号 姓名 职位 年龄 出生日期 电话号码 住址 电子邮件地址"<<endl;
cout<<" "<<tea[i].num<<" "<<tea[i].name<<" "<<tea[i].call<<" "<<tea[i].age<<" "<<tea[i].birthday <<" "<<tea[i].phone<<" "
<<tea[i].addr<<" "<<tea[i].eaddr<<endl;
m=1;
break;
}
}
break;
if(m==0)
cout<<"未找到!"<<endl;
}
if(x==2)
{
cout<<"请输入要查找的姓名:";
char y[10]; //定义插入数据类型 ,用if函数和for循环,把输入值放到数组tea里
cin>>y;
cout<<endl;
for(i=0;i<l;i++)
{
if(strcmp(y,tea[i].name)==0)
{
cout<<" 编号 姓名 职位 年龄 出生日期 电话号码 住址 电子邮件地址"<<endl;
cout<<" "<<tea[i].num<<" "<<tea[i].name<<" "<<tea[i].call<<" "<<tea[i].age<<" "<<tea[i].birthday <<" "<<tea[i].phone<<" "
<<tea[i].addr<<" "<<tea[i].eaddr<<endl;
m=1;
break;
}
}
break;
if(m==0) //判断语句
cout<<"未找到!"<<endl; //输入编号或姓名没有则未找到
} if(x!=1||x!=2)
{
cout<<"输入错误!请重新输入!\n"; //如果 输入形式不对则输出,输入错误
continue;
}
}
}
void teacher::renshu() //显示教师信息
{
int l=length(); //建立l指针统计教师人数
cout<<"统计教师人数:"<<l<<endl;
}
int main()
{
teacher a;
int select=0;
while(1) //while循环体和swich语句将数据整合 为一个菜单
{
cout<<"********************************************"<<endl;
cout<<"* 欢迎使用教师信息管理系统 *"<<endl;
cout<<"* 1.增加教师信息 *"<<endl;
cout<<"* 2.删除教师信息 *"<<endl;
cout<<"* 3.显示教师信息 *"<<endl;
cout<<"* 4.查找教师信息 *"<<endl;
cout<<"* 5.统计教师人数 *"<<endl;
cout<<"* 6.退 出 系 统 *"<<endl;
cout<<"********************************************"<<endl;
cout<<("请输入您的选择 (1-6) : [ ]\b\b");
cin>>select;
switch(select)
{
case 1:
a.set();
break;
case 2:
a.del();
break;
case 3:
a.display();
break;
case 4:
a.zhao();
break;
case 5:
a.renshu();
break;
case 6:
exit(0);
break;
default:
cout<<"输入错误!"<<endl;
}
}
return 0;
}
【程序最终运行情况】
(1)增加教师信息
(2)删除教师信息
(3)显示教师信息
(4)查找教师信息
(5)统计教师人数
【参考文献】
[1]谭浩强.C++面向对象程序设计(第三版)[M]北京:清华出版社.2020
[2]谭浩强.C程序设计(第五版)[M]北京:清华出版社.2017
[3]谭浩强.C++程序设计(第二版)[M]北京:清华出版社.2004
[4]杨秀金.数据结构(c++版)[M]北京:人民邮电出版社,2009.4
[5]湛为芳.C++程序设计技术习题解答和实验指导 [M]北京:清华出版社,2009.10
[6]伍俊良编著:Vusual C++6.0课程设计与系统开发案例.北京:清华大学出版社,2002.11
[7](美)戴特尔(Deitel,H.M.)等编著,张引等译:C++大学基础教程(第五版),北京:电子工业出版社,2006.6
[8][ C ++基础]命名空间 namespace 的了解和使用 zhaozhenyu123的博客
[9] 郑莉,董渊,张瑞丰.C++语言程序设计(第3版).北京:清华大学出版社,2003
[10] 邓振杰.C++程序设计,北京:人民邮电出版社,2005