📄 cpp1.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 + -