C++ 课设 职工工资管理系统

职工工资管理系统 


现在的大学里经常有一些课程设计 ,这不,我就遇到了 。
我们的c++老师 ,给了我们许 多的题目要我们来选择 ,我就选择了这个 ,说难又不难 ,说简单,又不简单的
题目 ——职工工资管理系统   。

我们老师给的题目是这样的!!

职工工资管理设计与实现

功能设计要求

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

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

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

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

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

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

7.保存数据文件功能。



下面是我设计的程序功能 

功能模块

1.主函数 main(void):调用设计者的相关信息函数、调用       Menu()函数,实现系统的主要功能处理;

2.主菜单Menu()函数:确定如何选择所需功能,调用数据输入、显示、查找、增加、删除、修改、保存等函数,完成职工工资管理系统的数据处理;

3.数据输入Input():完成职工信息添加;

4.数据修改函数 update():修改职工工资等信息数据;


5.数据删除函数Delete():删除职工信息数据;

6.数据查找函数 select():查找某一职工工资等信息情况;

7.数据统计函数tongji():统计职工人数;

8.数据显示函数print():将职工信息数据显示出来;

9.文件保存函数Save():将录入的职工信息保存到文件;

10 文件读取函数Read(): 从文件中读取职工信息;


代码的流程图




代码的实现

~~~~~~~~~~~~~头文件~~~~~~~~~~~~~~

#ifndef  __MONEY__
#define  __MONEY__

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

#define MAX_NAME  10//定义姓名的最大长度
#define START   3//初始化为职工开辟的空间
#define ADD     5//每次为职工增加的空间
#define FILENAME  "staff.dat"//存入的文件名 
//定义一个职工类
class Staff
{
public:
	//显示职工信息
	void  print()  
	{
		cout<<id<<"     "<<name<<"     "<<mon1<<"     "<<mon2<<"     "<<mon3<<"     "
		<<mon4<<"     "<<mon5<<"     "<<Staff::summoney()<<"     "<<Staff::avgmoney()<<endl;	
	}
	//求每个人的总工资
	double summoney()  
	{
		double sum;
		sum= mon1 + mon2 + mon3 + mon4 + mon5;
		return sum;
	}
	//求每个人的平均工资
	double avgmoney()
	{
		double avg;
		avg= (Staff::summoney())/5;
		return avg;
	}
	
	char name[MAX_NAME];
	int id ;
	double mon1,mon2,mon3,mon4,mon5; 
	
}; 
//定一个系统类 
class System 
{
public:
	//显示系统内的职工信息
	void print()
	{
		size_t i =0;
		if(System::len ==0)
		{
		cout<<"系统中没有职工信息"<<endl;
		}

		for(i = 0;i< System::len;i++)
		{
			(System::staff+i)->print();
		}
	}


	Staff *staff;//职工类的指针
	size_t len ;//职工人数
	size_t width;//为职工创建的空间大小

};

//初始化系统
void Initclass(System * my_sys);
//添加职工信息
void Input(System * my_sys);
//查找职工信息
void Select(System * my_sys);
//修改职工信息
void Update(System * my_sys);
//删除职工信息
void Delete(System * my_sys);
//统计职工信息
void tongji(System * my_sys);
//求每一项的平均值
void  money(System * my_sys);
//从文件读取职工信息	
void  Read(System *my_sys);
//将职工信息写入文件
void  Save(System *my_sys);
//释放动态开辟的空间
void Free(System *my_sys);


#endif  //__MONEY__



~~~~~~~~~~~源文件~~~~~~~~~~~~~~~

#define _CRT_SECURE_NO_WARNINGS 1

#include "xiaodong.h"

//初始化系统
void Initclass(System * my_sys)
{
	my_sys->staff= (Staff *)calloc(START ,sizeof(Staff));
	if(my_sys->staff == NULL)
	{
		cout<<"开辟空间失败"<<endl;
		exit(EXIT_FAILURE);
	}
	my_sys->len = 0 ;
	my_sys->width = START;
}
void  IF_space(System * my_sys)
{
	if(my_sys->len == my_sys->width)
	{
		Staff *temp = (Staff *)realloc(my_sys->staff,my_sys->width+ADD);
		if(temp == NULL)
		{
			cout<<"职工人数已达系统限定,"<<endl;
		}
		else 
		{	
			my_sys->staff = temp;
			my_sys->width += ADD;
		}
	}
}
//添加职工信息
void Input(System * my_sys)
{
	IF_space(my_sys);
	cout<<"请输入职工信息:"<<endl;
	cout<<"姓名 基本工资 职务工资 津贴 医疗保险 公积金"<<endl;
	cin>>(my_sys->staff+my_sys->len)->name
		>>(my_sys->staff+my_sys->len)->mon1
		>>(my_sys->staff+my_sys->len)->mon2
		>>(my_sys->staff+my_sys->len)->mon3
		>>(my_sys->staff+my_sys->len)->mon4
		>>(my_sys->staff+my_sys->len)->mon5;
	(my_sys->staff + my_sys->len)->id =  my_sys->len+1;
	my_sys->len += 1;
	
}
//查找职工信息
void Select(System * my_sys)
{
	if(my_sys->len == 0)
	{
		cout<<"系统中没有保存职工信息"<<endl;
	}
	else
	{
		cout<<"请输入所要查询的职工姓名:";
		char Name[10]={0};
		cin>>Name;
		size_t i = 0;
		for( i = 0;i < my_sys->len; i++)
		{
			if(strcmp(Name,(my_sys->staff+i)->name)==0)
			{
	        cout<<"该职工信息为:"<<endl;
			cout<<"ID号    姓名    基本工资   职务工资    津贴    医疗保险   公积金   总工资    平均工资"<<endl;
			my_sys->staff->print();
			break;
			}
		}
		if(i >= my_sys->len)
			cout<<"系统中没有此职工信息"<<endl;
	}
	
}
void menu1()
{
	cout<<"请选择要修改的信息:"<<endl;
	cout<<"***********************************************"<<endl; 
	cout<<"******       1.修改职工姓名              ******"<<endl;
	cout<<"******       2.修改基本工资              ******"<<endl;
	cout<<"******       3.修改职务工资              ******"<<endl;
	cout<<"******       4.修改紧贴                  ******"<<endl;
	cout<<"******       5.修改医疗保险              ******"<<endl;
	cout<<"******       6.修改公积金                ******"<<endl;
	cout<<"***********************************************"<<endl;


}
//修改职工信息
void Update(System * my_sys)

{
	if(my_sys->len == 0)
	{
		cout<<"系统中没有保存职工信息"<<endl;
	}
	else
	{
		cout<<"请输入所要修改的职工姓名:";
		char Name[MAX_NAME]={0};
		cin>>Name;
		size_t i = 0;
		for( i = 0;i < my_sys->len; i++)
		{
			if(strcmp(Name,(my_sys->staff+i)->name)==0)
			{
			    
				menu1();
				cout<<"请选择对应数字序号进行操作:";
			    int a =0 ;
				char name[MAX_NAME] ={0};
			    double mon1 =0.0,mon2 =0.0,mon3 =0.0,mon4 =0.0,mon5 =0.0;
				cin>>a;
				switch(a)
				{<strong>
</strong>				case 1:
					  cout<<"请输入新的职工姓名:";
					  cin>>name;
					  strcpy(my_sys->staff->name,name);
					  break;

				case 2 :
					  cout<<"请输入新的基本工资:";
					  cin>>mon1;
					  my_sys->staff->mon1 = mon1;
					  break;
				case 3:
					  cout<<"请输入新的岗位工资:";
					  cin>>mon2;
					  my_sys->staff->mon2 = mon2;
					  break;
				case 4:
					  cout<<"请输入新的岗位工资:";
					  cin>>mon3;
					  my_sys->staff->mon3 = mon3;
					  break;
				case 5 :
					  cout<<"请输入新的岗位工资:";
					  cin>>mon4;
					  my_sys->staff->mon4 = mon4;
					  break;
				case 6:
					  cout<<"请输入新的岗位工资:"; 
					  cin>>mon5;
					  my_sys->staff->mon5 = mon5;
					  break;
				default:
					cout<<"输入不合标准"<<endl;
					break;
				}
				break;
			}

		}
		if(i >= my_sys->len)
			cout<<"系统中没有此职工信息"<<endl;
	}
}
//删除职工信息
void Delete(System * my_sys)
{
	if(my_sys->len == 0)
	{
		cout<<"系统中没有保存职工信息"<<endl;
	}
	else
	{
		cout<<"请输入所要删除的职工姓名:";
		char Name[MAX_NAME]={0};
		cin>>Name;
		size_t i = 0;
		size_t m = my_sys->len;
		for( i = 0;i < my_sys->len; i++)
		{
			if(strcmp(Name,(my_sys->staff+i)->name)==0)
			{
				for(size_t j = i;j<my_sys->len-1; j++)
					*(my_sys->staff+j) = *(my_sys->staff+j+1);
				my_sys->len--;
				break;
			}
		}
		if(i >= m)
			cout<<"系统中没有此职工信息"<<endl;	
	}
	
}

//统计:统计符合指定条件(如职工工资前三项之和在3000元以上、3000~2000元、2000~1000元)
//以内的工资职工人数及占总职工人数的百分比。
void  tongji(System * my_sys) /* m-n为   1000-2000,2000-3000,3000-max*/
{
	double  number = 0.0;
	double  money = 0.0;
	double  m =0.0;
	double  n = 0.0;
	if(my_sys->len == 0)
	{
		cout<<"系统中没有保存职工信息"<<endl;
	}
	else
	{
		cout<<"请输入你要统计的职工信息指定的条件m 和 n:";  
		cin>>m>>n;  
		for(size_t i = 0; i<my_sys->len ;i++)
		{
			money = (my_sys->staff+i)->mon1 + (my_sys->staff+i)->mon2 + (my_sys->staff+i)->mon3;
			if((money >= m)&& (money <= n))
				number++;
		}
		cout<<"职工工资前三项之和在 " <<m <<" --"<<n <<"职工人数及占总职工人数的百分比为:"<<(double)number/my_sys->len<<endl;
	}
}
//求每一项的平均值
void  money(System * my_sys)
{
	double count1 = 0;
	double count2 = 0;
	double count3 = 0;
	double count4 = 0;
	double count5 = 0;
	if(my_sys->len> 0)
	{
		for(size_t i = 0;i< my_sys->len; i++)
		{
			count1 = count1 + my_sys->staff->mon1;
			count2 = count2 + my_sys->staff->mon1;
			count3 = count3 + my_sys->staff->mon1;
			count4 = count4 + my_sys->staff->mon1;
			count5 = count5 + my_sys->staff->mon1;
		}
	
		cout<<"各项工资的平均工资为 "
			<<count1/my_sys->len<<" "
			<<count2/my_sys->len<<" "
			<<count3/my_sys->len<<" "
			<<count4/my_sys->len<<" "
			<<count5/my_sys->len<<endl;
	}
}

//从文件读取职工信息	
void  Read(System *my_sys)
{
	Staff  s;
	FILE *pf =fopen(FILENAME,"r");
	if(pf == NULL)
	{
		perror("error:");
		Free(my_sys);
		exit(EXIT_FAILURE);
	}
	while(fread(&s,sizeof(Staff),1,pf))//从文件中读取数据,,直到读取的为空
	{
		IF_space(my_sys);
		my_sys->staff[my_sys->len++] = s;
	}
	fclose(pf);//记着关闭文件


}
//将职工信息写入文件
void  Save(System *my_sys)  
{
	FILE *pf = fopen(FILENAME,"w");
	if(pf==NULL)
	{
		perror("error:");
		Free(my_sys);
		exit(EXIT_FAILURE);
	}
	for(size_t i=0; i<my_sys->len ;i++ )
	{    
		fwrite(my_sys->staff+i,1,sizeof(Staff),pf);   
	}
	fclose(pf);
}

void Free(System *my_sys)
{
	if(my_sys->staff!= NULL)
	{
		free(my_sys->staff);
		my_sys->staff=NULL;
	}
}
<strong>
</strong>


~~~~~~~~~~测试代码~~~~~~~~~~~~

#define  _CRT_SECURE_NO_WARNINGS 

#include "xiaodong.h"
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<<"**                        0. 退出系统                                **"<<endl;
	cout<<"#######################################################################"<<endl;

}
int main()
{
	System my_system;
	int input = 1;
	Initclass(&my_system);
	Read(&my_system);
	while(input)
	{
		menu();
		cout<<"请输入要选择的功能:>";
		cin>>input;
		switch(input)
		{
		case 1:
			Update(&my_system);
			break;
		case 2:
			Input(&my_system);
			break;
		case 3:
			Delete(&my_system);
			break;
		case 4:
			Select(&my_system);
			break;
		case 5:
			tongji(&my_system);
			break;
		case 6:
			cout<<"ID号	姓名  基本工资  职务工资  津贴  医疗保险  公积金  总工资  平均工资"<<endl;
			my_system.print();
			money(&my_system);
			break;
		case 0:
			break;
		default:
			break;
		}
	}
	Save(&my_system);
	free(my_system.staff);//一定要记得回收
	system("pause");
	return 0;
}








  • 37
    点赞
  • 286
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值