qq_58351766 2021-06-21 14:46 采纳率: 100%
浏览 101
已结题

人员类,编号,性别,工作日期,出生日期

设计一个程序,用于人事管理,要求可以对人员的基本情况进行修改。设计一个“人

员”类,包括有编号、性别、参加工作日期、出生日期,现在的日期等数据类型,其中“参加

工作日期、出生日期、现在的日期”为另一个“日期”类内嵌子对象,用成员函数实现对人员

信息的录入和显示,用函数Age()计算并输出人员的工龄和年龄,另设计一个函数实现

对人员的排序(按年龄由大到小进行排序)。输入的数据应保存至磁盘文件中。

 

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-06-21 15:32
    关注

    代码如下:如有帮助,请采纳一下,谢谢。

    #include <iostream>
    #include <fstream>
    using namespace std;
    class People
    {
    private:
    	int mId;
    	char mSex;
    	class Date
    	{
    	public:
    		int year,mon,day;
    	}mGzrq,mCsrq,mCurrent; //工作日期、出生日期、当前日期
    public:
    	People(){}
    	void SetId(int id){mId = id;}
    	void SetSex(char sex){mSex = sex;}
    	void SetGzrq(int y,int m,int d){mGzrq.year = y;mGzrq.mon = m;mGzrq.day = d;}
    	void SetCsrq(int y,int m,int d){mCsrq.year = y;mCsrq.mon = m;mCsrq.day = d;}
    	void SetCurrent(int y,int m,int d){mCurrent.year = y;mCurrent.mon = m;mCurrent.day = d;}
    	int Age()
    	{
    		//工龄
    		int glyear,glmon;
    		int nl;
    		if(mCurrent.mon > mGzrq.mon)
    		{
    			glyear = mCurrent.year - mGzrq.year;
    			glmon = mCurrent.mon - mGzrq.mon;
    		}
    		else
    		{
    			glyear = mCurrent.year - mGzrq.year -1;
    			glmon = mCurrent.mon + 12 - mGzrq.mon;
    		}
    		//年龄
    		if(mCurrent.mon > mCsrq.mon)
    			nl = mCurrent.year - mCsrq.year;
    		else
    			nl = mCurrent.year - mCsrq.year -1;
    		cout << "工龄:" << glyear << "年" << glmon << "月" << endl;
    		cout << "年龄:" << nl << endl;
    
    		return nl;
    	}
    
    
    
    	int getId(){return mId;}
    	char getSex(){return mSex;}
    	int getCsriYear(){return mCsrq.year;}
    	int getCsriMon(){return mCsrq.mon;}
    	int getCsriDay(){return mCsrq.day;}
    
    	int getGzrqiYear(){return mGzrq.year;}
    	int getGzrqMon(){return mGzrq.mon;}
    	int getGzrqDay(){return mGzrq.day;}
    };
    
    
    void Sort(People pp[],int n)
    {
    	int i,j;
    	People pt;
    	for (i =0;i<n-1;i++)
    	{
    		for(j=0;j<n-1-i;j++)
    		{
    			if(pp[j].Age() <pp[j+1].Age())
    			{
    				pt = pp[j];
    				pp[j] = pp[j+1];
    				pp[j+1] = pt;
    			}
    		}
    	}
    }
    
    
    int main()
    {
    	People pp[4];
    	pp[0].SetId(1001);
    	pp[0].SetSex('F');
    	pp[0].SetCsrq(1988,1,1);
    	pp[0].SetGzrq(2010,10,2);
    	pp[0].SetCurrent(2021,6,21);
    
    	pp[1].SetId(1002);
    	pp[1].SetSex('F');
    	pp[1].SetCsrq(1990,1,1);
    	pp[1].SetGzrq(2013,10,2);
    	pp[1].SetCurrent(2021,6,21);
    
    	pp[2].SetId(1003);
    	pp[2].SetSex('M');
    	pp[2].SetCsrq(1970,1,1);
    	pp[2].SetGzrq(2003,10,2);
    	pp[2].SetCurrent(2021,6,21);
    
    	pp[3].SetId(1004);
    	pp[3].SetSex('F');
    	pp[3].SetCsrq(1999,1,1);
    	pp[3].SetGzrq(2018,10,2);
    	pp[3].SetCurrent(2021,6,21);
    
    	Sort(pp,4);
    
    	ofstream os("a.txt");
    	if (!os.is_open())
    	{
    		cout << "文件打开失败" <<endl;
    		return 0;
    	}
    	for(int i =0;i<4;i++)
    	{
    		os << pp[i].getId() << "\t" << pp[i].getSex() << "\t" ;
    		os<< pp[i].getCsriYear() << "\t" << pp[i].getCsriMon() << "\t" << pp[i].getCsriDay()<<"\t";
    		os << pp[i].getGzrqiYear() << "\t" << pp[i].getGzrqMon() << "\t" << pp[i].getGzrqDay()<< endl;
    	}
    	os.close();
    
    	return 0;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月31日
  • 已采纳回答 3月23日

悬赏问题

  • ¥30 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像