C++ 职工工资管理的设计与实现

职工工资管理的设计与实现

职工工资管理设计与实现

功能设计要求

1. 输入记录:将每一个职工的姓名、ID号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。

2. 显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。

3. 修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。

4.查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。

5. 删除记录:可删除数据文件中的任一记录。

6. 统计: (A)计算各项工资平均工资及总工资,(B)统计符合指定条件(如职工工资前三项之和在3000元以上、3000~2000元、2000~1000元) 以内的工资职工人数及占总职工人数的百分比。(C)按字符表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资)。

7.保存数据文件功能。

例如:职工工资信息表

ID号 姓名 基本工资 职务工资 津贴 医疗保险- 公积金- 总工资

01   张望 1286     794       198      109       135      2034

02 李明     1185     628      135       94        114       1740

03 王小民 895      438       98        64         73         1294

04 张效章 1350    868       210      116       150      2162

05 彭山      745      398       84        61         68         1098

? ? ? ? ? ? ? ?

各项平均工资 1092.2 625.2 145 88.8 108

代码分析:

#define _CRT_SECURE_NO_WARNINGS1
#include<iostream>
#include<fstream>
#include<stdlib.h>
#include<string.h>
#include<Windows.h>
#define max 100000000;
using namespace std;
class staff
{
public:
	staff()
	{
		id[5]='0';
		name[10] = '0';
		mon1 = mon2 = mon3 = mon4 = mon5 =0.0;
	}
	void setstaff(char *ID,char *Name,double money1,double money2,double money3,double money4,double money5 )
	{
	  strcpy(id,ID);
	  strcpy(name,Name);
	  mon1 = money1;
	  mon2 = money2;
	  mon3 = money3;
	  mon4 = money4;
	  mon5 = money5;
	}
	void  print();//显示职工信息
	double summoney();//求每个人的总工资
	double avgmoney();//求每个人的平均工资

	char id[5],name[10];
	double mon1,mon2,mon3,mon4,mon5; 

};
//求每个人的总工资
double staff::summoney()
{
    double sum;
	sum= mon1 + mon2 + mon3 + mon4 + mon5;
	return sum;

}
//求每个人的平均工资
double staff::avgmoney()
{
	double avg;
	avg= (staff::summoney())/5;
	return avg;
}
void   staff::print()
{

	cout<<id<<"     "<<name<<"     "<<mon1<<"       "<<mon2<<"      "<<mon3<<"     "
		<<mon4<<"      "<<mon5<<"    "<<staff::summoney()<<"       "<<staff::avgmoney()<<endl;
}

//为该系统添加职工信息
int    Input(staff sta[])
{
	cout<<"            职工信息输入"<<endl;
	cout<<"请输入所要输入的职工个数:"<<endl;
	int  num = 0;
	cin>>num;
	cout<<"ID号 姓名 基本工资 职务工资 津贴 医疗保险 公积金"<<endl;
	for(int i = 0;i < num; i++)
	{
	flag1:
		char id[10]={0},name[10]={0};
	    double mon1,mon2,mon3,mon4,mon5;
		cin>>id>>name>>mon1>>mon2>>mon3>>mon4>>mon5;
		for(int j =0;j < i ;j++)
		{
			if(strcmp(id,sta[j].id) == 0)
			   {
				   cout<<"该职工的职工号已存在请重新输入"<<endl;
				   goto  flag1;
			   }

		}
	    sta[i].setstaff(id,name,mon1,mon2,mon3,mon4,mon5);
	}
	return num;
}
// count为当前职工人数
int	   Insert(staff sta[],int count)
{
	int n=1;
    while(n==1)
	{
	    cout<<"请输入要添加的新职工信息:"<<endl;
		cout<<"ID号 姓名 基本工资 职务工资 津贴 医疗保险 公积金"<<endl;
	flag2:
		char id[10]={0},name[10]={0};
	    double mon1,mon2,mon3,mon4,mon5;
		cin>>id>>name>>mon1>>mon2>>mon3>>mon4>>mon5;
	    for(int j =0;j < count ;j++)
		{
			if(strcmp(id,sta[j].id) == 0)
			   {
				   cout<<"该职工的职工号已存在请重新输入"<<endl;
				   goto  flag2;
			   }
		}
		sta[count].setstaff(id,name,mon1,mon2,mon3,mon4,mon5);
	    cout<<"添加成功!";
		count++;
	    cout<<"是否继续添加,继续请按1 / 退出请按0:"<<endl;
	    cin>>n;
	}
	return count;
}
//查找职工信息 count 为职工人数
void   select(staff sta[],int count)
{
	cout<<"请输入所要查询的职工ID:";
	char id[10]={0};
	cin>>id;
	int i = 0;
	for( i = 0;i < count; i++)
	{
		if(strcmp(id,sta[i].id)==0)
		{
	        cout<<"该职工信息为:"<<endl;
			cout<<"ID号    姓名    基本工资   职务工资    津贴    医疗保险   公积金   总工资    平均工资"<<endl;
			sta[i].print();
			break;
		}
	}
	if(i >= count )
	   cout<<"系统中没有此职工信息"<<endl;

}
//存入文件中
void   Infile(staff sta[],int count)
{
	fstream outfile;
	outfile.open("staff.dat",ios::out);
	if(!outfile)
	{
		cout<<"文件夹不能打开."<<endl;
		abort();
	}
	for(int i=0; i < count ;i++ )
	{    

		outfile<<sta[i].id<<" "<<sta[i].name<<" "<<sta[i].mon1<<" "<<sta[i].mon2<<" "
			<<sta[i].mon3<<" "<<sta[i].mon4<<" "<<sta[i].mon5 <<"\n"  ;
	}
	outfile.close();
}
//修改职工信息
void   update(staff sta[],int count)
{
   flag3:
	    cout<<"请输入要修改信息的职工号:";
		char id[5] = {0};
		cin>>id;
		int  i= 0;
	    for( i=0;i <count ;i++)
		{
			if(strcmp(id,sta[i].id)==0)
			{

				cout<<"请选择要修改的信息:"<<endl;
				cout<<"***********************************************"<<endl;
				cout<<"******       1.修改基本工资              ******"<<endl;
				cout<<"******       2.修改职务工资              ******"<<endl;
				cout<<"******       3.修改紧贴                  ******"<<endl;
				cout<<"******       4.修改医疗保险              ******"<<endl;
				cout<<"******       5.修改公积金                ******"<<endl;
				cout<<"***********************************************"<<endl;
				cout<<"请选择对应数字序号进行操作:";
			    int a =0 ;
				char name[10] ={0};
			    double mon1 =0.0,mon2 =0.0,mon3 =0.0,mon4 =0.0,mon5 =0.0;
				cin>>a;
				switch(a)
				{
					case 1 :
					  cout<<"请输入新的基本工资:";
					  cin>>mon1;
					  sta[i].mon1 = mon1;
					  break;
					case 2:
					  cout<<"请输入新的岗位工资:";
					  cin>>mon2;
					  sta[i].mon2 = mon2;
					  break;
					case 3:
					  cout<<"请输入新的岗位工资:";

					  cin>>mon3;
					  sta[i].mon3 = mon3;
					  break;
					case 4 :
					  cout<<"请输入新的岗位工资:";
					  cin>>mon4;
					  sta[i].mon4 = mon4;
					  break;
					case 5:
					  cout<<"请输入新的岗位工资:";
					  cin>>mon5;
					  sta[i].mon5 = mon5;
					  break;
				default:
					cout<<"输入不合标准"<<endl;
				}
				break;
			}
		}
		if(i >=count)
		{
			cout<<"查询不到该职工的ID"<<endl;
			cout<<"请选择是否重新输入,如果是,输入是,否则输入其他"<<endl;
			char ch[5];
			cin>>ch;
			if(strcmp(ch,"是") ==0)
				goto flag3;
		}

}
//删除职工信息
int    Delete(staff sta[],int count)
{
	char id[10]={0};
	cout<<"请输入你所要删除的职工ID :";
	cin>>id;
	if(count < 1)
	{
	cout<<"该系统暂没有职工信息。"<<endl;
	return count;
	}
	else
	{
		for(int i = 0;i < count;i++)
		{
			if(strcmp(id,sta[i].id) == 0)
			{
				for(int j = i;j<(count-1); j++)
					 sta[j]=sta[j+1];
				return count-1;
		     }
		}
		cout<<"该平台没有此职工信息"<<endl;
		return count;
	}

}
//求每一项的平均值
void    money(staff sta[],int count)
{
	double count1 = 0;
	double count2 = 0;
	double count3 = 0;
	double count4 = 0;
	double count5 = 0;
	for(int i = 0;i< count; i++)
	{
		count1 = count1 + sta[i].mon1;
		count2 = count2 + sta[i].mon2;
		count3 = count3 + sta[i].mon3;
		count4 = count4 + sta[i].mon4;
		count5 = count5 + sta[i].mon5;
	}

	cout<<"各项工资的平均工资为 "<<count1/count<<" "<<count2/count<<" "<<count3/count<<" "<<count4/count<<" "<<count5/count<<endl;
}
//统计:统计符合指定条件(如职工工资前三项之和在3000元以上、3000~2000元、2000~1000元)
//以内的工资职工人数及占总职工人数的百分比。
double  tongji(staff sta[],int count,int m,int n) /* m-n为   1000-2000,2000-3000,3000-max*/
{
	double  number = 0.0;
	double  money = 0.0;
	for(int i = 0; i < count ;i++)
	{
		money = sta[i].mon1 + sta[i].mon2 + sta[i].mon3;
		if((money >= m)&& (money <= n))
		 number++;

	}
	return number/count;
}
//系统界面
void menu()
{
	cout<<"#######################################################################"<<endl;
	cout<<"--------------------------职工工资管理系统()---------------------------"<<endl;
	cout<<"***********************************************************************"<<endl;
	cout<<"**                        1. 修改职工信息                            **"<<endl;
	cout<<"**                        2. 添加职工信息                            **"<<endl;
    cout<<"**                        3. 删除职工信息                            **"<<endl;
    cout<<"**                        4. 查找职工信息                            **"<<endl;
	cout<<"**                        5. 统计职工信息                            **"<<endl;
	cout<<"**                        6. 显示职工信息                            **"<<endl;
	cout<<"**                        7. 退出系统                                **"<<endl;
	cout<<"#######################################################################"<<endl;

}
int main()
{

	staff  sta[100];
	int count = 0;
	menu();
	getchar();
    count = Input(sta);
	cout<<"ID号    姓名    基本工资   职务工资    津贴    医疗保险   公积金   总工资    平均工资"<<endl;
	for(int i =0; i< count;i++)
		sta[i].print();
	Infile(sta,count);

flag4:

	cout<<"请选择你要进行的功能:"<<endl;
	int num=0;
	double m = 0.0, n= 0.0;
	double temp = 0.0;
	cin>>num;
	switch(num)
	{

	  case 1:
		  update(sta,count);
		  Infile(sta,count);
		  cout<<"ID号    姓名    基本工资   职务工资    津贴    医疗保险   公积金   总工资    平均工资"<<endl;
		  for(int i =0; i< count;i++)
			  sta[i].print();
		  break;
	  case 2:
		  count=Insert(sta,count);
		  Infile(sta,count);
		  cout<<"ID号    姓名    基本工资   职务工资    津贴    医疗保险   公积金   总工资    平均工资"<<endl;
		  for(int i =0; i< count;i++)
			  sta[i].print();
		  break;
	  case 3:
		  count=Delete(sta,count);
		  Infile(sta,count);
		  cout<<"ID号    姓名    基本工资   职务工资    津贴    医疗保险   公积金   总工资    平均工资"<<endl;
		  for(int i =0; i< count;i++)
			  sta[i].print();
		  break;
	  case 4:
		  select(sta,count);break;
	  case 5:
		  cout<<"请输入你要统计的职工信息指定的条件m 和 n:";
		  cin>>m>>n;
		  if(m > n)
		  {
			temp = m;
			m = n;
			n=temp;
		  }
		  cout<<"职工工资前三项之和在"<<m<<"-"<<n<<"以内的工资职工人数及占总职工人数的百分比为:" <<tongji(sta,count,m,n)<<endl;
		  break;

	  case 6:
		   cout<<"ID号    姓名    基本工资   职务工资    津贴    医疗保险   公积金   总工资    平均工资"<<endl;
		   for(int i =0; i< count;i++)
			  sta[i].print();
		   money(sta,count);
		   break;
	  case 7:
		  cout<<"3秒后退出系统"<<endl;
		  Sleep(3000);
		  return 0;
	  default:
		  cout<<"输入不合标准"<<endl;
	}
	cout<<"请选择是否继续使用该系统,如果是 输入yes"<<endl;
	char ch[5]={0};
	cin>>ch;
	if(strcmp(ch,"yes")==0)
	{
		menu();
		goto flag4;
	}
	system("pause");
	return 0;
}

这个实验中的代码还是有很多的问题的。比如,建立的类数组所占的内存空间太大了,有很多空余。我觉得下次可以尝试使用链表来做。

时间: 2024-08-10 19:18:29

C++ 职工工资管理的设计与实现的相关文章

职工工资管理

https://wenku.baidu.com/view/d7bee9bdfd0a79563c1e7286.html 5 职工工资管理系统 2.3 接口设计 1. 外部接口 (1) 用户界面 采用图形用户界面( GUI ) ,包含用户名.密码等. (2) 软件接口 软件运行于 windous 以上和 XP 平台上. 2. 内部接口 (1) 初始化模块:系统初始时由操作系统调用,之后进入消息循环状态. (2) 关闭系统模块:由系统功能模块调用,之后退出系统. (3) 系统功能模块:接受各事件驱动消

C++/C课程设计(2)工资管理系统功能说明

原文取自个人博客:www.jycoder.com欢迎访问 百度网盘下载源代码:Demo.zip 百度网盘下载软件文档:软件文档.zip 工资管理系统 一,     基本功能要求: 1)以密码登录系统 密码登录时读取文件info.txt(保存员工信息)和Admin.txt(保存管理员息) 如果密码错误或者用户账号不存在,会给出相应提示 二,     主功能界面 菜单布局,对应不同功能 2)录入员工信息具体工资,计算相应的税金(计算规则参见最新公布的政策) 3)查询并显示所有的员工具体信息 4)显示

高校教师绩效工资管理系统设计开发,源码下载

大家好,我是全微毕设团队的创始人,本团队擅长JAVA(SSM,SSH,SPRINGBOOT).PYTHON.PHP.C#.安卓等多项技术.今天将为大家分析一个高校教师绩效工资管理系统(高校教师绩效工资管理系统的设计得益于管理科学与信息技术的有机结合,并基于高校教师的职业与人事管理特征有效实现管理自动化.信息透明化.公平效率化的设计初衷.系统通过几个主要功能模块的分工与流程,结合系统的参数设置与运算,可以自动生成教师的绩效津贴.从而实现高校有限资源的优化配置与绩效工资的合理分配,在激励教职员工爱岗

后台管理界面--管理页设计

本章我们开始进行后台管理界面的设计,本节课设计一下登录后的管理页. 一. 登录验证首先,创建一个数据库:easyui:其次,创建一个表:easyui_admin:然后,创建三个字段:id(自动编号).manager(管理员帐号).password(管理员密码).create(创建时间).//服务器端验证$.ajax({url : 'checklogin.php',type : 'POST',data : {manager : $('#manager').val(),password : $('#

Atitit.index&#160;manager&#160;api&#160;design&#160;索引管理api设计

Atitit.index manager api design 索引管理api设计 1. kw1 1.1. 索引类型 unique,normal,fulltxt1 1.2. 聚集索引(clustered index,也称聚类索引1 1.3. 索引方式:btree,hashtable2 1.4. 索引使用所有的页面规模百分比2 2. Ui2 3. api2 3.1. createIndex(indexName,cols)2 3.2. Rebuild2 3.3. Del2 3.4. Up2 4. -

职工工资管理系统 --C语言

#include<stdio.h> #include<string.h> #include<stdlib.h> #define NUM 1000 void enter(); void search_num(); void dele_num(); void modi_num(); void browse(); void count(); void load(); void add(); void menu(); int n; //员工的总数 struct emploee

spring事务管理器设计思想(一)

首先堆栈和堆(托管堆)都在进程的虚拟内存中.(在32位处理器上每个进程的虚拟内存为4GB) 堆栈stack 1.堆栈中存储值类型 2.堆栈实际上是向下填充,即由高内存地址指向低内存地址填充 3.堆栈的工作方式是先分配内存的变量后释放(先进后出原则) 4.堆栈中的变量是从下向上释放,这样就保证了堆栈中先进后出的规则不与变量的生命周期起冲突 5.堆栈的性能非常高,但是对于所有的变量来说还不灵活,而且变量的生命周期必须嵌套. 6.通常我们希望使用一种方法分配内存来存储数据,并且方法退出后很长一段时间内

RBAC用户权限管理数据库设计

http://minjiechenjava.iteye.com/blog/1759482 RBAC用户权限管理数据库设计 博客分类: RBAC 权限设计 RBAC RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用户-角色-权限"的授权模型.在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系.(如下图) 角色是什么?可以理解为一定数

SoC嵌入式软件架构设计II:否MMU的CPU虚拟内存管理的设计与实现方法

大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其他代码.我们PC然在同一时间大量的应用,能够整个线性地址空间(除了部分留给操作系统或者预留它用),能够觉得每一个应用程序都独占了整个虚拟地址空间(字长是32的CPU是4G的虚拟地址空间),但我们的物理内存仅仅是1G或者2G.即多个应用程序在同一时候竞争使用这块物理内存.其必定会导致某个时刻仅仅存在程序的某个片段在运行,也即是全部程序代码和数据分时复用物理内存空间-这就是内存管理单元(MMU)工作核心作用所在. 处理器