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

📄 cpp1.cpp

📁 顶顶 顶顶 顶顶 顶顶 顶顶 顶顶 顶顶 顶顶 顶顶 顶顶 顶顶 顶顶 顶顶 淡淡的
💻 CPP
字号:


#include <iostream.h>
#include <string.h>
#include <stdlib.h>
//定义一个职工类
class zhigong{      
	int number;
	char name[10];
	int age;
	int qingjia;
	int chuqin;
	int jiben;
	int jiangjin;
	int zonggong;
	int order;
public:
	zhigong () {}
	zhigong (int n, char na[10], int age, int q, int c, int j, int jj, int z,int or=0)
	{
     number=n;
	strcpy( name,na);
     age=age;
	 qingjia=q;
	 chuqin=c;
	 jiben=j;
	 jiangjin=jj;
	 zonggong=z;
	 order=or;
	}
	zhigong( zhigong &x)
	{
     number=x.number;
	 strcpy( name,x.name);
     age=x.age;
	 qingjia=x.qingjia;
	 chuqin=x.chuqin;
	 jiben=x.jiben;
	 jiangjin=x.jiangjin;
	 zonggong=x.zonggong;
	 order=x.order;
	}
	//类中的输入函数
	void get()
	{
    cout<<"请输入职工号:";
    cin>>number;
	cout<<endl;
    cout<<"请输入姓名:";
	cin>>name;
	cout<<endl;
	cout<<"请输入年龄:";
	cin>>age;
	cout<<endl;
	cout<<"请输入请假天数:";
	cin>>qingjia;
	cout<<endl;
	cout<<"请输入出勤天数:";
	cin>>chuqin;
	cout<<endl;
	cout<<"请输入基本工资:";
	cin>>jiben;
	cout<<endl;
	cout<<"请输入奖金数:";
	cin>>jiangjin;
	cout<<endl;
	zonggong=(jiben/30)*chuqin+jiangjin;
	order=0;
	}
	//类中的输出函数
    void _return()
	{
		cout<<number<<"     ";
		cout<<name<<"     ";
		cout<<age<<"     ";
		cout<<qingjia<<"     ";
		cout<<chuqin<<"     ";
		cout<<jiben<<"     ";
		cout<<jiangjin<<"     ";
		cout<<zonggong<<"     ";
		cout<<order<<"     ";
		cout<<endl;
	}
	//返回总工资的函数
	int zong_return()
	{
		return zonggong;
	}
	int hao_return()
	{
		return number;
	}
	void or_get(int i)
	{
		order=i;
	}
};


//定义一个结构体已实现链表
typedef struct link
{
	zhigong date;
	struct link *next;
}XH;
//初始化链表
XH *init()
{
   return NULL;
}
//外部的输入函数
XH *input()
{
   char s[3];
   XH *h=NULL;  /* XH指向结构体的指针*/
   XH *info;
   for(;;)
   {
      info= new XH;  //申请空间
      if(!info)   //如果指针info为空
      {
	  cout<<"内存溢出";
	  return NULL;           /*返回空指针*/
      }
	  else
	  {
	  info->date.get();
      info->next=h;   /*将头结点做为新输入结点的后继结点*/  
	  h=info;    /*新输入结点为新的头结点*/   
	  cout<<"如果停止请输入(@),否则请输入任意数继续,请输入:";
	  cin>>s;
	  cout<<endl;
	  if (!strcmp(s,"@"))break;
	  }
   }
    return(h);   /*返回头指针*/
   
}
//外部的输出函数
void output(XH *h)
{
   char s;
   XH *p;  /*移动指针*/
   p=h;      /*初值为头指针*/
   cout<<"\n\n\n**************************表单*****************************\n";
    cout<<"职工号 姓名 年龄 请假天数 出勤天数 基本工资 奖金数 总工资 次序"<<endl;
   cout<<"***********************************************************"<<endl;
   while(p!=NULL)
   {
       p->date._return();
       p=p->next;
   }
   cout<<"***************************结束****************************"<<endl;
   cout<<"请输入任意数返回:";
   cin>>s;
}

//删除数据
XH *del(XH *h)
{  char i;
   XH *p,*q;  /*p为查找到要删除的结点指针,q为其前驱指针*/
   int s;     /*存放查找号*/
   cout<<"请输入要删除职工的职工号:";
   cin>>s;   /*输入要删除记录的人员号*/
   q=p=h;    /*给q和p赋初值头指针*/
   while(p->date.hao_return()!=s&&p!=NULL)   /*当记录的人员号不是要找的,或指针不为空时*/
   {
      q=p;       /*将p指针值赋给q作为p的前驱指针*/
      p=p->next;      /*将p指针指向下一条记录*/
   }
   if(p==NULL)     /*如果p为空,说明链表中没有该结点*/
      cout<<"没有这个职工";
   else       /*p不为空,显示找到的记录信息*/
   {
     cout<<"***************************发现***********************"<<endl;
      cout<<"职工号 姓名 年龄 请假天数 出勤天数 基本工资 奖金数 总工资 次序"<<endl;
     cout<<"***************************************************************"<<endl;
      
      p->date._return();
     cout<<"******************************结束****************************"<<endl;
      if(p==h)    /*如果p==h,说明被删结点是头结点*/
	  h=p->next;     /*修改头指针指向下一条记录*/
      else
	  q->next=p->next; /*不是头指针,将p的后继结点作为q的后继结点*/
      delete(p);          /*释放p所指结点空间*/
      cout<<"已经删除!"<<endl;
	  cout<<"请输入任意数返回:";
      cin>>i;
   }
   return(h);      /*返回头指针*/
}
//查找
void lookup(XH *h)
{  char i;
   XH *p;    /*  移动指针*/
   int s;    /*存放姓名的字符数组*/
   cout<<"请输入要查找职工的职工号:";
   cin>>s;   
   p=h;    /*将头指针赋给p*/
   while(s!=p->date.hao_return()&&p!=NULL)  /*当记录的号不是要找的,或指针不为空时*/
   p=p->next;     /*移动指针,指向下一结点*/
   if(p==NULL)         /*如果指针为空*/
     cout<<" 没有这个职工"<<endl;
   else           /*显示找到的记录信息*/
   {
      cout<<"***************************发现***********************"<<endl;
      cout<<"职工号 姓名 年龄 请假天数 出勤天数 基本工资 奖金数 总工资 次序"<<endl;
     cout<<"***************************************************************"<<endl;
      
      p->date._return();
     cout<<"******************************结束****************************"<<endl;
	 cout<<"请输入任意数返回:";
     cin>>i;
   }
}
//插入记录
XH  *insert(XH *h)
{  char i;
   XH *p,*q,*info; /*p指向插入位置,q是其前驱,info指新插入记录*/
   int s;  /*保存插入点位置的人员号*/
   cout<<"输入插入点人员号:";
   cin>>s;
   cout<<endl;
   cout<<"请输入新的记录"<<endl;
   info=new XH;   /*申请空间*/
   if(!info)
   {
     cout<<" 内存溢出"<<endl;
      return NULL;             /*返回空指针*/
   }
   info->date.get();
   info->next=NULL;     /*设后继指针为空*/
   p=h;               /*将指针赋值给p*/
   q=h;             /*将指针赋值给q*/
   while(p->date.hao_return()==s&&p!=NULL)    /*查找插入位置*/
   {
      q=p;                 /*保存指针p,作为下一个p的前驱*/
      p=p->next;          /*将指针p后移*/
   }
   if(p==NULL)      /*如果p指针为空,说明没有指定结点*/
      if(p==h)      /*同时p等于h,说明链表为空*/
	 h=info;   /*新记录则为头结点*/
      else
	 q->next=info;  /*p为空,但p不等于h,将新结点插在表尾*/
   else
      if(p==h)     /*p不为空,则找到了指定结点*/
      {
	 info->next=p; /*如果p等于h,则新结点插入在第一个结点之前*/
	 h=info;    /*新结点为新的头结点*/
      }
      else
      {
	 info->next=p;   /*不是头结点,则是中间某个位置,新结点的后继为p*/
	 q->next=info;  /*新结点作为q的后继结点*/
      }
   cout<<"插入完成"<<endl;
   cout<<"请输入任意数返回:";
   cin>>i;
   return(h);         /*返回头指针*/
}
//排序
XH *sort(XH *h) 
{char a;
int i=0;
XH *p,*q,*t,*s,*g; 
g=new XH; 
g->next=h; 
p=g; 
while(p->next->next!=NULL) 
{ 
for(s=p,q=p->next;q->next!=NULL;q=q->next) 
if(q->next->date.zong_return()<s->next->date.zong_return()) 
s=q; 
if(s!=q) 
{ 
t=s->next; 
s->next=t->next; 
t->next=p->next; 
p->next=t; 
} 
p=p->next; 
} 
h=g->next; 
p=h;
while(p!=NULL)  /*当p不为空时,进行下列操作*/
   {
      i++;       /*结点序号*/
      p->date.or_get(i);   /*将名次赋值*/
      p=p->next;   /*指针后移*/
   }
   cout<<"排序成功"<<endl;
   cout<<"请输入任意数返回:";
   cin>>a;
delete(g); 
return h; 
} 
//修改记录
void modify(XH *h)
{  char a,b[2];
   XH *p;    /*  移动指针*/
   int s;    /*存放姓名的字符数组*/
   cout<<"请输入要修改职工的职工号:";
   cin>>s;   
   p=h;    /*将头指针赋给p*/
   while(s!=p->date.hao_return()&&p!=NULL)  /*当记录的号不是要找的,或指针不为空时*/
   p=p->next;     /*移动指针,指向下一结点*/
   if(p==NULL)         /*如果指针为空*/
     cout<<" 没有这个职工"<<endl;
   else           /*显示找到的记录信息*/
   {
      cout<<"***************************发现***********************"<<endl;
      cout<<"职工号 姓名 年龄 请假天数 出勤天数 基本工资 奖金数 总工资 次序"<<endl;
     cout<<"***************************************************************"<<endl;
      
      p->date._return();
     cout<<"******************************结束****************************"<<endl;
      
   }
   cout<<"你确实要修改这条记录吗?(Y/N)";
   cin>>b;
   if (!strcmp(b,"Y"))
   {p->date.get();
   cout<<"修改成功"<<endl;
   cout<<"请输入任意数返回:";
   cin>>a;
   }
   else {
     cout<<"请输入任意数返回:";
     cin>>a;
   }
}
//定义菜单函数
int menu_select()
{
   char *menu[]={"***************菜单***************",  /*定义菜单字符串数组*/
   " 0. 初始化链表",    
   " 1. 输入记录并计算总工资",   
   " 2. 从表中删除记录",  
   " 3. 显示单链表中所有记录",       
   " 4. 按照职工号查找记录",
   " 5. 修改指定工号职工工资记录",
   " 6. 按实发工资顺序插入新记录",   
   " 7. 按实发工资对职工记录项进行降序排序",   
   " 8. 退出"};              
   int c,i;
   for(i=0;i<10;i++)       /*输出主菜单数组*/
   {
      cout<<menu[i]<<endl;
   }
    do{
      cout<<"\n请输入要执行的命令(0~8):";    /*在菜单窗口外显示提示信息*/
      cin>>c;           /*输入选择项*/
	  cout<<"\n\n\n\n";
   }while(c<0||c>8);    /*选择项不在0~8之间重输*/
   return c; 
}
void main()
{
   XH *head;     /*链表定义头指针*/
   for(;;)             /*无限循环*/
   {  
      switch(menu_select())     /*调用主菜单函数,返回值整数作开关语句的条件*/
      {                     /*值不同,执行的函数不同,break 不能省略*/
	 case 0:head=init();break;   /*执行初始化*/
	 case 1:head=input();break; /*创建链表输入数据*/
	 case 2:head=del(head);break; /*删除记录*/
	 case 3:output(head);break;   /*显示全部记录*/
	 case 4:lookup(head);break;  /*查找记录*/
	 case 5:modify(head);break;  /*修改记录*/
	 case 6:head=insert(head);break; /*插入记录*/
	 case 7:head=sort(head);break;  /*排序*/
	 case 8:exit(0);       /*如菜单返回值为8程序结束*/
      }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -