?? add.h
字號(hào):
//文件add.h(增加職工記錄函數(shù)add()的實(shí)現(xiàn)。
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<iomanip>
#include<string>
#include"str.h"
using namespace std;
/***************************************************************
要求職工編號(hào)只能在某一范圍之內(nèi)(根據(jù)數(shù)據(jù)文件來(lái)確定),不能超越此
范圍,而且職工編號(hào)不能出現(xiàn)重復(fù)的情況。
***************************************************************/
/*********************************增加職工記錄函數(shù)的實(shí)現(xiàn)************************************/
void add()
{
bool temp_bool=false; //用來(lái)容錯(cuò)的一個(gè)變量。
int max;
ofstream fcout("name.dat",ios::app); // 定義輸出流對(duì)象,并且可以繼續(xù)添加記錄。
if(fcout.fail())
{
cout<<"文件name.dat打開(kāi)失敗,程序?qū)⒔Y(jié)束!"<<endl;
exit(1);
}
for( ; ; )
{
/***********從數(shù)據(jù)文件中得知當(dāng)前的職工最大數(shù)是多少*********/
ifstream fcin("max.dat");
if(fcin.fail()) //判斷文件max.dat是否成功打開(kāi)。
{
cout<<"文件max.dat打開(kāi)失敗,程序?qū)⒔Y(jié)束"<<endl;
exit(1);
}
fcin>>max;
fcin.close(); //關(guān)閉文件max.dat。
if(max==100 ||max==1000 ||max==10000)
;
else
{
cout<<"對(duì)不起,您未設(shè)置職工最大數(shù),暫時(shí)不能增加職工記錄!"<<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'; //判斷用戶(hù)是否繼續(xù)增加職工記錄。
char temp='2'; //詢(xún)問(wèn)用戶(hù)是否確認(rèn)自己的輸入。
int back=1; //詢(xún)問(wèn)用戶(hù)是否返回主菜單。
/*****************************開(kāi)始輸入職工信息***********************/
while(select=='1')
{
int temp_num;
if(max==100)
temp_num=101;
else
if(max==1000)
temp_num=1001;
else
temp_num=10001;
/**********輸入職工的編號(hào),帶有容錯(cuò)機(jī)制***********/
while(temp=='2')
{
cout<<"**********開(kāi)始增加職工記錄**********"<<endl;
cout<<"請(qǐng)輸入職工的編號(hào)("<<temp_num<<"-"<<temp_num*2-2<<"):";
cin>>num_char; //輸入字符型的職工編號(hào)。
temp_bool=check_num(num_char); //判斷是否符合要求。
while(!temp_bool)
{
cout<<"對(duì)不起,您的輸入帶有非法字符!請(qǐng)重新輸入"<<endl;
cout<<"請(qǐng)輸入職工的編號(hào)("<<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<<"請(qǐng)輸入職工的編號(hào)("<<temp_num<<"-"<<temp_num*2-2<<"):";
cin>>num_char;
temp_bool=check_num(num_char);
while(!temp_bool)
{
cout<<"對(duì)不起,您的輸入帶有非法字符!請(qǐng)重新輸入"<<endl;
cout<<"請(qǐng)輸入職工的編號(hào)("<<temp_num<<"-"<<temp_num*2-2<<"):";
cin>>num_char;
temp_bool=check_num(num_char);
}
num=atoi(num_char);
}
/********判斷職工編號(hào)是否已經(jīng)存在******/
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"); //定義一個(gè)輸入流對(duì)象,用于讀取文件的記錄。
if(fin.fail())
{
cout<<"文件name.dat打開(kāi)失敗,程序?qū)⒔Y(jié)束"<<endl;
exit(1);
}
int i=0;
while(!fin.eof()) //文件末尾檢查,如果文件讀取沒(méi)結(jié)束,返回0。
{
fin>>employee[i].num>>employee[i].name>>employee[i].sex
>>employee[i].age>>employee[i].wage;
i++;
}
int max_=i; //當(dāng)前的職工最大數(shù)。
fin.close(); //關(guān)閉文件name.dat。
for(i=0;i<max_;i++)
{
if(employee[i].num==num)
have++;
}
if(have!=0)
{
cout<<"您輸入的職工編號(hào)已經(jīng)存在!"<<endl;
cout<<"請(qǐng)重新輸入職工的編號(hào)("<<temp_num<<"-"<<temp_num*2-2<<"):";
cin>>num_char; //輸入字符型的職工編號(hào)。
temp_bool=check_num(num_char); //判斷是否符合要求。
while(!temp_bool)
{
cout<<"對(duì)不起,您的輸入帶有非法字符!請(qǐng)重新輸入:";
cin>>num_char;
temp_bool=check_num(num_char);
}
num=atoi(num_char);
while(num<temp_num ||num>(temp_num*2-2))
{
cout<<"您的輸入有誤!";
cout<<"請(qǐng)輸入職工的編號(hào)("<<temp_num<<"-"<<temp_num*2-2<<"):";
cin>>num_char;
temp_bool=check_num(num_char);
while(!temp_bool)
{
cout<<"對(duì)不起,您的輸入帶有非法字符!請(qǐng)重新輸入:";
cin>>num_char;
temp_bool=check_num(num_char);
}
num=atoi(num_char);
}
}
}
/********判斷職工編號(hào)是否已經(jīng)存在結(jié)束******/
cout<<"您輸入的編號(hào)是:"<<num<<endl;
cout<<"確認(rèn)請(qǐng)按1,重新輸入請(qǐng)按2,返回主菜單請(qǐng)按0,請(qǐng)選擇:"<<endl;
cin>>temp;
while(temp!='1' && temp!='2' && temp!='0' )
{
cout<<"您的輸入有誤,請(qǐng)重新輸入!"<<endl;
cout<<"您輸入的編號(hào)是:"<<num<<endl;
cout<<"確認(rèn)您的輸入請(qǐng)按1,重新輸入請(qǐng)按2,返回主菜單請(qǐng)按0,請(qǐng)選擇:"<<endl;
cin>>temp;
}
if(temp=='1')
{
temp='2';
break;
}
else
if(temp=='2')
;
else
{
back=0;
break;
}
}
if(back==0)
break; //退出外層的while循環(huán)。
/**********輸入職工的姓名,帶有容錯(cuò)機(jī)制***********/
while(temp=='2')
{
cout<<"請(qǐng)輸入職工的姓名(中文或英文):";
cin>>name;
/* 不需要對(duì)姓名進(jìn)行驗(yàn)證。
temp_bool=check(name);
while(!temp_bool)
{
cout<<"對(duì)不起,您的輸入中帶有非法字符!請(qǐng)重新輸入:";
cin>>name;
temp_bool=check(name);
}
*/
cout<<"您輸入的姓名是:"<<name<<endl;
cout<<"確認(rèn)請(qǐng)按1,重新輸入請(qǐng)按2,返回主菜單請(qǐng)按0,請(qǐng)選擇:"<<endl;
cin>>temp;
while(temp!='1' && temp!='2' && temp!='0' )
{
cout<<"您的輸入有誤,請(qǐng)重新輸入!"<<endl;
cout<<"您輸入的姓名是:"<<name<<endl;
cout<<"確認(rèn)您的輸入請(qǐng)按1,重新輸入請(qǐng)按2,返回主菜單請(qǐng)按0,請(qǐng)選擇:"<<endl;
cin>>temp;
}
if(temp=='1')
{
temp='2';
break;
}
else
if(temp=='2')
;
else
{
back=0;
break;
}
}
if(back==0)
break; //退出外層的while循環(huán)。
/**********輸入職工的姓別,帶有容錯(cuò)機(jī)制***********/
while(temp=='2')
{
cout<<"請(qǐng)輸入職工的性別(男/女/m/f):";
cin>>sex;
/* 在下面已經(jīng)驗(yàn)證了
temp_bool=check(sex);
while(!temp_bool)
{
cout<<"對(duì)不起,您的輸入帶有非法字符!請(qǐng)重新輸入:";
cin>>sex;
temp_bool=check(sex);
}
*/
int temp_sex[4]; //臨時(shí)驗(yàn)證性別的變量。
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<<"您的輸入有誤,請(qǐng)重新輸入職工的性別(男/女/m/f):";
cin>>sex;
/*
temp_bool=check(sex);
while(!temp_bool)
{
cout<<"對(duì)不起,您的輸入帶有非法字符!請(qǐng)重新輸入:";
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<<"確認(rèn)請(qǐng)按1,重新輸入請(qǐng)按2,返回主菜單請(qǐng)按0,請(qǐng)選擇:"<<endl;
cin>>temp;
while(temp!='1'&& temp!='2' && temp!='0')
{
cout<<"您的輸入有誤,請(qǐng)重新輸入!"<<endl;
cout<<"您輸入的姓別是:"<<sex<<endl;
cout<<"確認(rèn)您的輸入請(qǐng)按1,重新輸入請(qǐng)按2,返回主菜單請(qǐng)按0,請(qǐng)選擇:"<<endl;
cin>>temp;
}
if(temp=='1')
{
temp='2';
break;
}
else
if(temp=='2')
;
else
{
back=0;
break;
}
}
if(back==0)
break; //退出外層的while循環(huán)。
/**********輸入職工的年齡,帶有容錯(cuò)機(jī)制***********/
while(temp=='2')
{
cout<<"請(qǐng)輸入職工的年齡(必須是阿拉伯?dāng)?shù)字):";
cin>>age_char;
temp_bool=check_num(age_char);
while(!temp_bool)
{
cout<<"對(duì)不起,您的輸入帶有非法字符!請(qǐng)重新輸入"<<endl;
cout<<"請(qǐng)輸入職工的年齡(必須是阿拉伯?dāng)?shù)字):";
cin>>age_char;
temp_bool=check_num(age_char);
}
age=atoi(age_char); //將年齡轉(zhuǎn)化成整型變量。
while(age>100||age<20)
{
if(age<20)
cout<<"您的輸入有誤,職工的年齡不能小于20"<<endl;
else
if(age>100)
cout<<"您的輸入有誤,職工的年齡不能大于100"<<endl;
cout<<"請(qǐng)重新輸入職工的年齡(必須是阿拉伯?dāng)?shù)字):";
cin>>age_char;
temp_bool=check_num(age_char);
while(!temp_bool)
{
cout<<"對(duì)不起,您的輸入帶有非法字符!請(qǐng)重新輸入"<<endl;
cout<<"請(qǐng)輸入職工的年齡(必須是阿拉伯?dāng)?shù)字):";
cin>>age_char;
temp_bool=check_num(age_char);
}
age=atoi(age_char); //將年齡轉(zhuǎn)化成整型變量。
}
cout<<"您輸入的年齡是:"<<age<<endl;
cout<<"確認(rèn)請(qǐng)按1,重新輸入請(qǐng)按2,返回主菜單請(qǐng)按0,請(qǐng)選擇:"<<endl;
cin>>temp;
while(temp!='1'&& temp!='2' && temp!='0')
{
cout<<"您的輸入有誤,請(qǐng)重新輸入!"<<endl;
cout<<"您輸入的年齡是:"<<age<<endl;
cout<<"確認(rèn)您的輸入請(qǐng)按1,重新輸入請(qǐng)按2,返回主菜單請(qǐng)按0,請(qǐng)選擇:"<<endl;
cin>>temp;
}
if(temp=='1')
{
temp='2';
break;
}
else
if(temp=='2')
;
else
{
back=0;
break;
}
}
if(back==0)
break; //退出外層的while循環(huán)。
/**********輸入職工的工資,帶有容錯(cuò)機(jī)制***********/
while(temp=='2')
{
cout<<"請(qǐng)輸入職工的工資(必須是阿拉伯?dāng)?shù)字):";
cin>>pay_char; //輸入職工的工資。
temp_bool=check_num(pay_char); //判斷輸入是否有誤。
while(!temp_bool)
{
cout<<"對(duì)不起,您的輸入帶有非法字符!請(qǐng)重新輸入<<endl";
cout<<"請(qǐng)輸入職工的工資(必須是阿拉伯?dāng)?shù)字):";
cin>>pay_char;
temp_bool=check_num(pay_char);
}
pay=atoi(pay_char);
cout<<"您輸入的工資是:"<<pay<<endl;
cout<<"確認(rèn)請(qǐng)按1,重新輸入請(qǐng)按2,返回主菜單請(qǐng)按0,請(qǐng)選擇:"<<endl;
cin>>temp;
while(temp!='1' && temp!='2' && temp!='0' )
{
cout<<"您的輸入有誤,請(qǐng)重新輸入!"<<endl;
cout<<"您輸入的工資是:"<<pay<<endl;
cout<<"確認(rèn)您的輸入請(qǐng)按1,重新輸入請(qǐng)按2,返回主菜單請(qǐng)按0,請(qǐng)選擇:"<<endl;
cin>>temp;
}
if(temp=='1')
{
temp='2';
break;
}
else
if(temp=='2')
;
else
{
back=0;
break;
}
}
if(back==0)
break; //退出外層的while循環(huán)。
fcout<<endl<<num<<" "<<name<<" "<<sex<<" "<<age<<" "<<pay; //寫(xiě)入文件。
//不要寫(xiě)成fcout<<endl<<num<<" "<<name<<" "<<sex<<" "<<age<<" "<<pay<<" ";
cout<<"職工信息增加成功!"<<endl;
cout<<"繼續(xù)增加職工記錄請(qǐng)按1,退出請(qǐng)按0:"; //詢(xún)問(wèn)用戶(hù)是否繼續(xù)增加職工記錄。
cin>>select; //用戶(hù)做出判斷,是否繼續(xù)增加職工記錄。
while(select!='1' && select!='0')
{
cout<<"您的輸入有誤!"<<endl;
cout<<"繼續(xù)增加職工記錄請(qǐng)按1,返回主菜單請(qǐng)按0:";
cin>>select;
}
}
fcout.close(); //關(guān)閉name.dat文件。
break; //退出for循環(huán)。
} //for循環(huán)結(jié)束。
}
/*********************************增加職工記錄函數(shù)的實(shí)現(xiàn)結(jié)束********************************/
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -