⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 add.h

📁 一个公司职员信息管理系统,用C++做的,好用
💻 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 + -