📄 add.h
字号:
//文件add.h(增加职工记录函数add()的实现。
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<iomanip>
#include<string>
#include"str.h"
using namespace std;
/***************************************************************
要求职工编号只能在某一范围之内(根据数据文件来确定),不能超越此
范围,而且职工编号不能出现重复的情况。
***************************************************************/
/*********************************增加职工记录函数的实现************************************/
void add()
{
bool temp_bool=false; //用来容错的一个变量。
int max;
ofstream fcout("name.dat",ios::app); // 定义输出流对象,并且可以继续添加记录。
if(fcout.fail())
{
cout<<"文件name.dat打开失败,程序将结束!"<<endl;
exit(1);
}
for( ; ; )
{
/***********从数据文件中得知当前的职工最大数是多少*********/
ifstream fcin("max.dat");
if(fcin.fail()) //判断文件max.dat是否成功打开。
{
cout<<"文件max.dat打开失败,程序将结束"<<endl;
exit(1);
}
fcin>>max;
fcin.close(); //关闭文件max.dat。
if(max==100 ||max==1000 ||max==10000)
;
else
{
cout<<"对不起,您未设置职工最大数,暂时不能增加职工记录!"<<endl;
break;
}
int num;
char num_char[256];
char name[256];
char sex[256];
int age;
char age_char[256];
int pay;
char pay_char[256];
char select='1'; //判断用户是否继续增加职工记录。
char temp='2'; //询问用户是否确认自己的输入。
int back=1; //询问用户是否返回主菜单。
/*****************************开始输入职工信息***********************/
while(select=='1')
{
int temp_num;
if(max==100)
temp_num=101;
else
if(max==1000)
temp_num=1001;
else
temp_num=10001;
/**********输入职工的编号,带有容错机制***********/
while(temp=='2')
{
cout<<"**********开始增加职工记录**********"<<endl;
cout<<"请输入职工的编号("<<temp_num<<"-"<<temp_num*2-2<<"):";
cin>>num_char; //输入字符型的职工编号。
temp_bool=check_num(num_char); //判断是否符合要求。
while(!temp_bool)
{
cout<<"对不起,您的输入带有非法字符!请重新输入"<<endl;
cout<<"请输入职工的编号("<<temp_num<<"-"<<temp_num*2-2<<"):";
cin>>num_char;
temp_bool=check_num(num_char);
}
num=atoi(num_char);
while(num<temp_num ||num>(temp_num*2-2))
{
cout<<"您的输入有误!";
cout<<"请输入职工的编号("<<temp_num<<"-"<<temp_num*2-2<<"):";
cin>>num_char;
temp_bool=check_num(num_char);
while(!temp_bool)
{
cout<<"对不起,您的输入带有非法字符!请重新输入"<<endl;
cout<<"请输入职工的编号("<<temp_num<<"-"<<temp_num*2-2<<"):";
cin>>num_char;
temp_bool=check_num(num_char);
}
num=atoi(num_char);
}
/********判断职工编号是否已经存在******/
struct _Employee
{
int num;
string name;
string sex;
int age;
int wage;
};
_Employee *employee=new _Employee[max];
int have=1;
while(have!=0)
{
have=0;
ifstream fin("name.dat"); //定义一个输入流对象,用于读取文件的记录。
if(fin.fail())
{
cout<<"文件name.dat打开失败,程序将结束"<<endl;
exit(1);
}
int i=0;
while(!fin.eof()) //文件末尾检查,如果文件读取没结束,返回0。
{
fin>>employee[i].num>>employee[i].name>>employee[i].sex
>>employee[i].age>>employee[i].wage;
i++;
}
int max_=i; //当前的职工最大数。
fin.close(); //关闭文件name.dat。
for(i=0;i<max_;i++)
{
if(employee[i].num==num)
have++;
}
if(have!=0)
{
cout<<"您输入的职工编号已经存在!"<<endl;
cout<<"请重新输入职工的编号("<<temp_num<<"-"<<temp_num*2-2<<"):";
cin>>num_char; //输入字符型的职工编号。
temp_bool=check_num(num_char); //判断是否符合要求。
while(!temp_bool)
{
cout<<"对不起,您的输入带有非法字符!请重新输入:";
cin>>num_char;
temp_bool=check_num(num_char);
}
num=atoi(num_char);
while(num<temp_num ||num>(temp_num*2-2))
{
cout<<"您的输入有误!";
cout<<"请输入职工的编号("<<temp_num<<"-"<<temp_num*2-2<<"):";
cin>>num_char;
temp_bool=check_num(num_char);
while(!temp_bool)
{
cout<<"对不起,您的输入带有非法字符!请重新输入:";
cin>>num_char;
temp_bool=check_num(num_char);
}
num=atoi(num_char);
}
}
}
/********判断职工编号是否已经存在结束******/
cout<<"您输入的编号是:"<<num<<endl;
cout<<"确认请按1,重新输入请按2,返回主菜单请按0,请选择:"<<endl;
cin>>temp;
while(temp!='1' && temp!='2' && temp!='0' )
{
cout<<"您的输入有误,请重新输入!"<<endl;
cout<<"您输入的编号是:"<<num<<endl;
cout<<"确认您的输入请按1,重新输入请按2,返回主菜单请按0,请选择:"<<endl;
cin>>temp;
}
if(temp=='1')
{
temp='2';
break;
}
else
if(temp=='2')
;
else
{
back=0;
break;
}
}
if(back==0)
break; //退出外层的while循环。
/**********输入职工的姓名,带有容错机制***********/
while(temp=='2')
{
cout<<"请输入职工的姓名(中文或英文):";
cin>>name;
/* 不需要对姓名进行验证。
temp_bool=check(name);
while(!temp_bool)
{
cout<<"对不起,您的输入中带有非法字符!请重新输入:";
cin>>name;
temp_bool=check(name);
}
*/
cout<<"您输入的姓名是:"<<name<<endl;
cout<<"确认请按1,重新输入请按2,返回主菜单请按0,请选择:"<<endl;
cin>>temp;
while(temp!='1' && temp!='2' && temp!='0' )
{
cout<<"您的输入有误,请重新输入!"<<endl;
cout<<"您输入的姓名是:"<<name<<endl;
cout<<"确认您的输入请按1,重新输入请按2,返回主菜单请按0,请选择:"<<endl;
cin>>temp;
}
if(temp=='1')
{
temp='2';
break;
}
else
if(temp=='2')
;
else
{
back=0;
break;
}
}
if(back==0)
break; //退出外层的while循环。
/**********输入职工的姓别,带有容错机制***********/
while(temp=='2')
{
cout<<"请输入职工的性别(男/女/m/f):";
cin>>sex;
/* 在下面已经验证了
temp_bool=check(sex);
while(!temp_bool)
{
cout<<"对不起,您的输入带有非法字符!请重新输入:";
cin>>sex;
temp_bool=check(sex);
}
*/
int temp_sex[4]; //临时验证性别的变量。
temp_sex[0]=strcmp(sex,"男");
temp_sex[1]=strcmp(sex,"女");
temp_sex[2]=strcmp(sex,"m");
temp_sex[3]=strcmp(sex,"f");
while(temp_sex[0]!=0 && temp_sex[1]!=0 &&temp_sex[2]!=0 && temp_sex[3]!=0)
{
cout<<"您的输入有误,请重新输入职工的性别(男/女/m/f):";
cin>>sex;
/*
temp_bool=check(sex);
while(!temp_bool)
{
cout<<"对不起,您的输入带有非法字符!请重新输入:";
cin>>sex;
temp_bool=check(sex);
}
*/
temp_sex[0]=strcmp(sex,"男");
temp_sex[1]=strcmp(sex,"女");
temp_sex[2]=strcmp(sex,"m");
temp_sex[3]=strcmp(sex,"f");
}
cout<<"您输入的姓别是:"<<sex<<endl;
cout<<"确认请按1,重新输入请按2,返回主菜单请按0,请选择:"<<endl;
cin>>temp;
while(temp!='1'&& temp!='2' && temp!='0')
{
cout<<"您的输入有误,请重新输入!"<<endl;
cout<<"您输入的姓别是:"<<sex<<endl;
cout<<"确认您的输入请按1,重新输入请按2,返回主菜单请按0,请选择:"<<endl;
cin>>temp;
}
if(temp=='1')
{
temp='2';
break;
}
else
if(temp=='2')
;
else
{
back=0;
break;
}
}
if(back==0)
break; //退出外层的while循环。
/**********输入职工的年龄,带有容错机制***********/
while(temp=='2')
{
cout<<"请输入职工的年龄(必须是阿拉伯数字):";
cin>>age_char;
temp_bool=check_num(age_char);
while(!temp_bool)
{
cout<<"对不起,您的输入带有非法字符!请重新输入"<<endl;
cout<<"请输入职工的年龄(必须是阿拉伯数字):";
cin>>age_char;
temp_bool=check_num(age_char);
}
age=atoi(age_char); //将年龄转化成整型变量。
while(age>100||age<20)
{
if(age<20)
cout<<"您的输入有误,职工的年龄不能小于20"<<endl;
else
if(age>100)
cout<<"您的输入有误,职工的年龄不能大于100"<<endl;
cout<<"请重新输入职工的年龄(必须是阿拉伯数字):";
cin>>age_char;
temp_bool=check_num(age_char);
while(!temp_bool)
{
cout<<"对不起,您的输入带有非法字符!请重新输入"<<endl;
cout<<"请输入职工的年龄(必须是阿拉伯数字):";
cin>>age_char;
temp_bool=check_num(age_char);
}
age=atoi(age_char); //将年龄转化成整型变量。
}
cout<<"您输入的年龄是:"<<age<<endl;
cout<<"确认请按1,重新输入请按2,返回主菜单请按0,请选择:"<<endl;
cin>>temp;
while(temp!='1'&& temp!='2' && temp!='0')
{
cout<<"您的输入有误,请重新输入!"<<endl;
cout<<"您输入的年龄是:"<<age<<endl;
cout<<"确认您的输入请按1,重新输入请按2,返回主菜单请按0,请选择:"<<endl;
cin>>temp;
}
if(temp=='1')
{
temp='2';
break;
}
else
if(temp=='2')
;
else
{
back=0;
break;
}
}
if(back==0)
break; //退出外层的while循环。
/**********输入职工的工资,带有容错机制***********/
while(temp=='2')
{
cout<<"请输入职工的工资(必须是阿拉伯数字):";
cin>>pay_char; //输入职工的工资。
temp_bool=check_num(pay_char); //判断输入是否有误。
while(!temp_bool)
{
cout<<"对不起,您的输入带有非法字符!请重新输入<<endl";
cout<<"请输入职工的工资(必须是阿拉伯数字):";
cin>>pay_char;
temp_bool=check_num(pay_char);
}
pay=atoi(pay_char);
cout<<"您输入的工资是:"<<pay<<endl;
cout<<"确认请按1,重新输入请按2,返回主菜单请按0,请选择:"<<endl;
cin>>temp;
while(temp!='1' && temp!='2' && temp!='0' )
{
cout<<"您的输入有误,请重新输入!"<<endl;
cout<<"您输入的工资是:"<<pay<<endl;
cout<<"确认您的输入请按1,重新输入请按2,返回主菜单请按0,请选择:"<<endl;
cin>>temp;
}
if(temp=='1')
{
temp='2';
break;
}
else
if(temp=='2')
;
else
{
back=0;
break;
}
}
if(back==0)
break; //退出外层的while循环。
fcout<<endl<<num<<" "<<name<<" "<<sex<<" "<<age<<" "<<pay; //写入文件。
//不要写成fcout<<endl<<num<<" "<<name<<" "<<sex<<" "<<age<<" "<<pay<<" ";
cout<<"职工信息增加成功!"<<endl;
cout<<"继续增加职工记录请按1,退出请按0:"; //询问用户是否继续增加职工记录。
cin>>select; //用户做出判断,是否继续增加职工记录。
while(select!='1' && select!='0')
{
cout<<"您的输入有误!"<<endl;
cout<<"继续增加职工记录请按1,返回主菜单请按0:";
cin>>select;
}
}
fcout.close(); //关闭name.dat文件。
break; //退出for循环。
} //for循环结束。
}
/*********************************增加职工记录函数的实现结束********************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -