2b青年欢乐多是什么歌:求C++编程的的工资管理系统源代码 小型的 交给老师的

来源:百度文库 编辑:高校问答 时间:2024/04/28 06:17:44
最好代码长度短点

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <conio.h>

#define TITLE "\n 月份 工号 姓名 应发工资 各种折扣 实发工资\n"
#define DATA " %2d %4ld %-10s %6.1f %6.1f %6.1f\n",p1->month,p1->num,p1->name,p1->should_pay,p1->rebate,p1->actual_pay

typedef struct pay
{
long num;
short month;
char name[20];
float gw,jn,zw,zl,jt,yj;
float should_pay;
float fz,gj,sd,others;
float rebate;
float actual_pay;
struct pay *next;
}PAY;

FILE *fp;
PAY *p1=NULL,*p2=NULL,*head=NULL;

void menu();
PAY *input();
void output();
void save(PAY *head);
PAY *open();
PAY *insert();
void search();
PAY *del();
PAY *revise();

/*主程序模块*/
void main(void)
{
short sel;
do
{
menu();
scanf("%d",&sel);
switch(sel)
{
case 1:
head=input(); //输入模块
break;
case 2:
head=insert(); //插入模块
break;
case 3:
head=revise(); //修改模块
break;
case 4:
head=del(); //删除模块
break;
case 5:
search(); //查找模块
break;
case 6:
output(); //输出模块
break;
case 7:
save(head); //保存模块
break;
case 0:
break;
}
}while(sel!=0);
}

/*菜单*/
void menu()
{
printf("\n\n\n\n\n\n\n");
printf("\t\t\t\t *主菜单选项*\n\n");
printf("\t\t\t\t1.创建工资档案\n");
printf("\t\t\t\t2.新增工资信息\n");
printf("\t\t\t\t3.修改工资信息\n");
printf("\t\t\t\t4.删除工资信息\n");
printf("\t\t\t\t5.查找工资信息\n");
printf("\t\t\t\t6.分类信息列表\n");
printf("\t\t\t\t7.保 存 信 息\n");
printf("\t\t\t\t0.退 出\n");
printf("\n\n\n\n\n\n\n\n");
}

/*输入模块*/
PAY *input()
{
short n=1;
p1=(PAY*)malloc(sizeof(PAY));
if(p1==NULL)
{
printf("内存不足,无法创建链表!");
getch();
}
printf("\n请输入第%d位职工的信息(以工号为0结束):\n",n);
printf(" 工号:");
scanf("%d",&p1->num);
if(p1->num==0)
{
printf("按任意键返回!");
getch();
free(p1);
return 0;
}
getchar();
printf(" 姓名:");
gets(p1->name);
printf(" 工资月份:");
scanf("%d",&p1->month);
printf(" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:\n");
scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj);
printf(" 房租扣款,公积金,水电费,其它扣款:\n");
scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others);
p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj;
p1->rebate=p1->fz+p1->gj+p1->sd+p1->others;
p1->actual_pay=p1->should_pay-p1->rebate;
while(p1!=NULL)
{
if(n==1)
head=p1;
else
p2->next=p1;
n++;
p2=p1;
p1=(PAY*)malloc(sizeof(PAY));
if(p1==NULL)
{
printf("内存不足,无法创建链表!");
getch();
}
printf("请输入第%d位职工的信息(以工号为0结束):\n",n);
printf(" 工号:");
scanf("%d",&p1->num);
getchar();
if(p1->num==0)
{
p1=NULL;
break;
}
printf(" 姓名:");
gets(p1->name);
printf(" 工资月份:");
scanf("%d",&p1->month);
printf(" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:\n");
scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj);
printf(" 房租扣款,公积金,水电费,其它扣款:\n");
scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others);
p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj;
p1->rebate=p1->fz+p1->gj+p1->sd+p1->others;
p1->actual_pay=p1->should_pay-p1->rebate;
}
p2->next=NULL;
//edit by Yan-Xingyu Class Network-021
printf("职工信息已输入,请按任意键返回,并存盘……");
getch();
return head;
}

/*输出模块*/
void output()
{
short sel,flag,month;
float min,max;
do
{
do
{
printf("\n\n请选择您的列表方式:\n");
printf("\t\t1.全部清单\n");
printf("\t\t2.按月输出\n");
printf("\t\t3.按工资段输出\n");
printf("\t\t0.返回\n");
scanf("%d",&sel);
}while(sel!=1&&sel!=2&&sel!=3&&sel!=0);
head=open();
if(head==NULL)
return;
else
switch(sel)
{
case 1:
printf("\n\t\t\t ******全部清单******\n");
printf(TITLE);
p1=head;
do
{
printf(DATA);
p1=p1->next;
}while(p1!=NULL);
break;
case 2:
flag=0;
printf("输入要查的月份:");
scanf("%d",&month);
printf("\n\t\t\t******第%d月工资清单******\n",month);
printf(TITLE);
p1=head;
do
{
if(p1->month==month)
{
printf(DATA);
p1=p1->next;
flag=1;
}
else
p1=p1->next;
}while(p1!=NULL);
if(flag==0)
printf("没有该月清单\n");
break;
case 3:
flag=0;
printf("输入最低工资:");
scanf("%f",&min);
printf("输入最高工资:");
scanf("%f",&max);
printf("\n\t\t ******%5.1f到%5.1f工资的名单******\n",min,max);
printf(TITLE);
p1=head;
do
{
if(p1->actual_pay>min&&p1->actual_pay<max)
{
printf(DATA);
p1=p1->next;
flag=1;
}
else
p1=p1->next;
}while(p1!=NULL);
if(flag==0)
printf("没有该工资段的职工\n");
break;
case 0:
break;
}
}while(sel!=0);
}

/*保存文件*/
void save(PAY *head)
{
short write;
fp=fopen("pay.txt","w");
if(fp==NULL)
{
printf("创建文件失败!");
getch();
return;
}
p1=p2=head;
while(p1!=NULL)
{
write=fwrite(p1,sizeof(PAY),1,fp);
if(!write)
{
printf("无法写入文件!");
getch();
return;
}
p1=p1->next;
}
fclose(fp);
printf("成功存盘!");
getch();
}

/*打开文件*/
PAY *open()
{
short n=1,read;
fp=fopen("pay.txt","r");
if(fp==NULL)
{
printf("无法打开档案文件!");
getch();
return NULL;
}
if((p1=p2=(PAY*)malloc(sizeof(PAY)))==NULL)
{
printf("内存不足!");
getch();
return NULL;
}
read=fread(p1,sizeof(PAY),1,fp);
if(!read)
{
printf("文件读取出错!1");
getch();
return NULL;
}
if(p1->next==NULL)
head=p1;
else
{
do
{
if(n==1)
head=p1;
else
p2->next=p1;
n++;
p2=p1;
if((p1=(PAY*)malloc(sizeof(PAY)))==NULL)
{
printf("内存不足!");
getch();
return NULL;
}
read=fread(p1,sizeof(PAY),1,fp);
if(!read)
{
printf("文件读取出错!2");
getch();
return NULL;
}
}while(p1->next!=NULL);
p2->next=p1;
}
return head;
fclose(fp);
}

/*插入模块*/
PAY *insert()
{
PAY *p3=NULL;
char sel;
head=open();
if(head==NULL)
return NULL;
else
do
{
printf("请输入要插入的职工信息:\n");
p3=(PAY*)malloc(sizeof(PAY));
if(p3==NULL)
{
printf("内存不足,无法创建链表!");
getch();
}
printf(" 工号:");
scanf("%d",&p3->num);
getchar();
printf(" 姓名:");
gets(p3->name);
printf(" 工资月份:");
scanf("%d",&p3->month);
printf(" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:\n");
scanf("%f,%f,%f,%f,%f,%f",&p3->gw,&p3->jn,&p3->zw,&p3->zl,&p3->jt,&p3->yj);
printf(" 房租扣款,公积金,水电费,其它扣款:\n");
scanf("%f,%f,%f,%f",&p3->fz,&p3->gj,&p3->sd,&p3->others);
p3->should_pay=p3->gw+p3->jn+p3->zw+p3->zl+p3->jt+p3->yj;
p3->rebate=p3->fz+p3->gj+p3->sd+p3->others;
p3->actual_pay=p3->should_pay-p3->rebate;
p1=head;
while(p1!=NULL)
{
p2=p1;
p1=p1->next;
}
p2->next=p3;
p3->next=NULL;
printf("成功插入,是否继续?是(Y) 否(N)\n");
sel=getch();
}while(sel=='Y'||sel=='y');
printf("\n任意键返回,并存盘……\n");
getch();
return head;
}

/*查找模块*/
void search()
{
short sel;
long num;
char name[20],choose;
head=open();
if(head==NULL)
return;
else
do
{
do
{
printf("\n选择查找方式:\n");
printf("\t\t1.按工号查找\n");
printf("\t\t2.按姓名查找\n");
scanf("%d",&sel);
getchar();
}while(sel!=1&&sel!=2);
switch(sel)
{
case 1:
printf("输入要查的工号:");
scanf("%ld",&num);
break;
case 2:
printf("输入要查的姓名:");
gets(name);
break;
}
p1=head;
while((p1->next!=NULL)&&(p1->num!=num)&&(strcmp(p1->name,name)!=0)) //用成p1!=NULL有问题?
p1=p1->next;
if((p1->num==num)||strcmp(p1->name,name)==0)
{
printf("您要查找的信息如下:\n");
printf(TITLE);
printf(DATA);
}
else
printf("没有该信息!\n");
printf("是否继续?是(Y) 否(N)\n");
choose=getch();
}while(choose=='Y'||choose=='y');
printf("任意键返回");
getch();
}

/*删除模块*/
PAY *del()
{
short sel;
long num;
char name[20],choose;
head=open();
if(head==NULL)
return NULL;
else
do
{
do
{
printf("\n选择删除方式:\n");
printf("\t\t1.按工号删除\n");
printf("\t\t2.按姓名删除\n");
scanf("%d",&sel);
getchar();
}while(sel!=1&&sel!=2);
switch(sel)
{
case 1:
printf("输入要删除的工号:");
scanf("%ld",&num);
break;
case 2:
printf("输入要删除的姓名:");
gets(name);
break;
}
p1=head;
if((p1->num==num)||strcmp(p1->name,name)==0)
{
head=p1->next;
printf("删除信息成功!");
}
else
{
while((p1->next!=NULL)&&(p1->num!=num)&&(strcmp(p1->name,name)!=0))
{
p2=p1;
p1=p1->next;
}
if((p1->num==num)||strcmp(p1->name,name)==0)
{
p2->next=p1->next;
free(p1);
printf("\n删除信息成功!\n");
}
else
printf("\n没有该信息!\n");
}
printf("是否继续?是(Y) 否(N)\n");
choose=getch();
}while(choose=='Y'||choose=='y');
printf("任意键返回,并存盘……");
getch();
return head;
}

/*修改模块*/
PAY *revise()
{
short sel;
long num;
char name[20],choose;
head=open();
if(head==NULL)
return NULL;
else
do
{
do
{
printf("\n查找要修改的对象:\n");
printf("\t\t1.按工号查找\n");
printf("\t\t2.按姓名查找\n");
scanf("%d",&sel);
getchar();
}while(sel!=1&&sel!=2);
switch(sel)
{
case 1:
printf("输入要查的工号:");
scanf("%ld",&num);
break;
case 2:
printf("输入要查的姓名:");
gets(name);
break;
}
p1=head;
while((p1->next!=NULL)&&(p1->num!=num)&&(strcmp(p1->name,name)!=0)) //用成p1!=NULL有问题?
p1=p1->next;
if((p1->num==num)||strcmp(p1->name,name)==0)
{
printf("您要修改的原始信息如下:\n");
printf(TITLE);
printf(DATA);
printf("\n将上述信息改为如下信息:\n");
printf(" 工号:");
scanf("%d",&p1->num);
getchar();
printf(" 姓名:");
gets(p1->name);
printf(" 工资月份:");
scanf("%d",&p1->month);
printf(" 岗位工资,技能工资,职务津贴,职龄津贴,交通补贴,业绩津贴:\n");
scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj);
printf(" 房租扣款,公积金,水电费,其它扣款:\n");
scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others);
p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj;
p1->rebate=p1->fz+p1->gj+p1->sd+p1->others;
p1->actual_pay=p1->should_pay-p1->rebate;
}
else
printf("你要修改的信息不存在!\n");
printf("是否继续?是(Y) 否(N)\n");
choose=getch();
}while(choose=='Y'||choose=='y');
printf("任意键返回,并存盘……");
getch();
return head;
}

#include <iostream>
#include <stdlib.h>
class Employee
{
public:
int i,j,tmp,N; //N作为数组元素个数,声明为全局变量
int *pay; //定义工资数组指针
void accept();//接受数据输入
void count();//冒泡排序
void average();//计算平均数
void more(int *);//工资大于XX的人数
};
void Employee::accept()//接受数据输入
{
for (i=0;i<N ;i++ )
{
cout<<"\n\t第 "<<i+1<<"个人的工资:";
cin>>*(pay+i);
}
cout<<"\n\n所输入的所有数据如下:\n" ;
for (i=0;i<N ;i++ )//输入完毕遍历数组
{
cout<<"("<<i+1<<")\t"<<*(pay+i)<<"\t";
if((i+1)%5==0)
{cout<<endl;}
}
go:cout<<endl<<"是否修改数据?"<<endl<<"[0—修改]\t[1—不修改]:\t";
cin>>j;
if (j==0)
{
cout<<endl<<"请输入修改的序号:";
cin>>i;
if (i>0&&i<=N)
{
cout<<endl<<"原数据为:"<<*(pay+i-1)<<endl<<"请输入更新数据:";
cin>>*(pay+i-1);
goto go;
}
else
{
cout<<"请输入1-"<<N<<"10!!!";
goto go;
}
}
else if (j!=0&&j!=1)
{
cout<<endl<<"请输入0或者1,进行选择!!!";
goto go;
}
}

void Employee::count()//冒泡排序
{
for (i=N-1;i>0 ;i-- )
{
for (j=0;j<i ;j++ )
{
if (*(pay+j)>*(pay+j+1))
{tmp=*(pay+j);*(pay+j)=*(pay+j+1);*(pay+j+1)=tmp;}
}
}
}

void Employee::average()//计算平均数
{
for (tmp=i=0;i<N ;i++ )
{
tmp=tmp+*(pay+i);
}
tmp=tmp/N;
}

void Employee::more(int *m)//工资大于XX的人数
{
for(i=j=0;i<N;i++)
{
if (*(pay+i)>*m)
{j++;}
}
}
void main()//////Employee类的友员函数
{
int choice=0,n;
Employee obj;
cout<<"\n=============工资系统=============\n"<<endl;
cout<<"输入职工人数:";//////定义工资数组元素个数!
cin>>obj.N;
obj.pay=(int *)calloc(obj.N,sizeof(int));////////动态分配内存////////
obj.accept();
loop:cout<<endl<<"\t\t\t------------菜 单------------"<<endl<<endl;
cout<<"\t\t\t1) 最高工资"<<endl;
cout<<"\t\t\t2) 最低工资"<<endl;
cout<<"\t\t\t3) 平均工资"<<endl;
cout<<"\t\t\t4) 工资大于XX元的职工总数"<<endl;
cout<<"\t\t\t5) 以递升顺序排列工资"<<endl;
cout<<"\t\t\t6) 以递降顺序排列工资"<<endl;
cout<<"\t\t\t7) 退 出"<<endl<<endl;
cout<<endl<<"请输入选择[1-7]:";
cin>>choice;

switch (choice)
{
case 1:
obj.count ();
cout<<"\n\n最高工资:"<<*(obj.pay+obj.N-1)<<endl<<endl;//pay和N都
goto loop; //是类中定
case 2: //义的元素!
obj.count ();
cout<<"\n\n最低工资:"<<*(obj.pay)<<endl<<endl;
goto loop;
case 3:
obj.average();
cout<<"\n\n平均工资:"<<obj.tmp<<endl<<endl;
goto loop;
case 4:
cout<<"\n\n统计工资大于多少的职工总数?";
cin>>n;
obj.more(&n);
cout<<"\n\n工资大于"<<n<<"元的职工总数:"<<obj.j<<endl<<endl;
goto loop;
case 5:
obj.count ();
cout<<"\n\n以递升顺序排列工资:\n"<<endl;
for (choice=n=0;n<obj.N ;n++ )
{
cout<<"("<<choice+1<<")\t"<<*(obj.pay+n)<<"\t";
choice++; ///换行计数器
if (choice%5==0)///5个数据作为一行
{cout<<endl;}
}
cout<<endl<<endl;
system("PAUSE");
goto loop;
case 6:
obj.count ();
cout<<"\n\n以递降顺序排列工资:\n"<<endl;
for (choice=0,n=obj.N-1;n>=0 ;n-- )
{
cout<<"("<<choice+1<<")\t"<<*(obj.pay+n)<<"\t";
choice++;
if (choice%5==0)///5个数据作为一行
{cout<<endl;}
}
cout<<endl<<endl;
system("PAUSE");
goto loop;
case 7:
cout<<endl<<"退出系统........."<<endl;
system("PAUSE");
exit (0);
default:
cout<<"输入1-7!!!"<<endl;
goto loop;
}
free(obj.pay);/////////////释放内存///////////
}

VC++的行吗?用的是SQL的数据库,自己从我们公司的网站上下吧
http://61.181.80.158/sql.rar