公司财务管理系统(C++)
提示:此为本人C++课程作业,给广大同学们作为参考
文章目录
摘要
公司人事财务管理系统是一款管理公司人事财务的应用软件。该软件代替了手工登记的麻烦,可以方便的实现公司内各个员工收支状况以及工作岗位等数据的浏览、添加、删除、修改、查询等功能,适合小型公司管理自己的人事财务情况。该系统运用了C++语言程序设计知识中的面向对象的思想,在VC++6.0集成开发环境下完成函数的编写。
一、需求分析
1)函数中的收支情况按添加顺序存放,可以实时读数据;
2)基础数据包括每个人的名字、ID、出生年月日、入职年月、离职年月(没离职为N/A)、工作的月份数、是否离职、离职是否因为退休了;
3)每个人的基础数据之外还应该有每个人的财务数据,按月份进行存储,其中每个人每个月的财务数据包括发工资日期、当月岗位、当月工资、当月奖金、当月其他奖励以及当月处罚;
3)功能上可以修改、删除、添加某个员工的基础数据以及财务数据;
4)可以根据需求对显示的数据进行排序;
5)可以查询单个员工的数据、符合某条件员工的数据以及全部员工的数据;
6)整个系统应该全部满足需求,并且尽可能的方便用户使用,在满足上述条件之后占用内存空间应该尽可能的少。
二、概要设计
系统的功能模块划分:
为满足上述需求,本系统采用一个类去建立公司人事的基础信息(包括每个人的名字、ID、出生年月日、入职年月、离职年月(没离职为N/A)、工作的月份数、是否离职、离职是否因为退休了、以及该员工的薪资状况。)由于员工的薪资状况是一个多维的数据,故采用一个结构体去构建一个财务数据组。
在登录界面尽量采用一层结构,不需要用户过多浪费时间去选择服务项目,在遍历查看数据的时候要求高效并且准确。
因为公司员工数目是未知的且是可变的,采用一个全局变量先给可能的员工数目腾出空间。每个员工的财务信息也是未知的,可能1个月也可能12x50个月,使用采用最大12x50的空间,通过指针去创建数组,一方面方便管理同时也可以减少不必要的空间浪费。
整体设计完成之后方便查看和修改,应该增加对初始建立的公司人事的基础信息类进行封装,提高函数的可读性和编写的方便。
三、详细设计
3.1.系统主界面设计
主界面左侧有8个选项,分别为添加员工、查找员工、删除员工、重新排序、显示员工名单、显示员工工资单、修改员工信息。
相应代码(封装在基础设置类里面):
下面展示一些 内联代码片
。
/*显示菜单***************************************************/
char ShowMenu()
{
char choice;
do
{
system("cls");
cout<<"------------欢迎使用本系统---------------\n\n";
cout<<" 1.添加员工\n";
cout<<" 2.查找员工\n";
cout<<" 3.删除员工\n";
cout<<" 4.重新排序\n";
cout<<" 5.显示员工名单\n";
cout<<" 6.显示员工工资单\n";
cout<<" 7.修改员工信息\n";
cout<<" 8.退出\n";
cin>>choice;
}while(choice<'1'||choice>'8');
return choice;
}
在主函数中调用函数为:
/*主函数************************************************************/
int main()
{
short quit=0;
char choice;
DataBase man;
Init(man);
while(quit==0)
{
choice=man.ShowMenu();
switch(choice)
{
case '1':man.Push();break;
case '2':man.Search();break;
case '3':man.Delete();break;
case '4':man.Sort();break;
case '5':man.Display_Init();break;
case '6':man.Display();break;
case '7':man.Alter();break;
case '8':quit=1;break;
}
}
return 0;
}
3.2 个人财务结构体设计
每个人的财务数据,按月份进行存储,其中每个人每个月的财务数据包括发工资日期、当月岗位、当月工资、当月奖金、当月其他奖励以及当月处罚;由于工作月份是未知的、不定的、可变的使用采用独立的结构体去建立,然后交由各个员工对于的数据类进行调用。
3.3类·个人数据设计
由于员工未知,所以定义一个全局变量去控制员工的最大数目。定义全局变量也可以方便修改。
代码:
const int SIZE_MAX1=50;
3.3.1私有变量定义
定义变量包括每个人的名字、ID、出生年月日、入职年月、离职年月(没离职为N/A)、工作的月份数、是否离职、离职是否因为退休了;
3.3.2设置数据的函数
通过构造函数在定义的时候就可直接设计员工的名字或者名字和ID,并且设置各种函数对每个变量可以单独的设置。
代码为:
/*设置数据的函数*/
Human(){}; //空的构造函数
Human(char*n){strcpy(name,n);}//构造函数写一个名字
Human(char*n,char*i){strcpy(name,n);strcpy(id,i);}//构造函数写一个名字
void SetName(char*n){strcpy(name,n);}//设置名字
void SetId(char*i){strcpy(id,i);}//设置id
void SetBir_Data(char*n){strcpy(Bir_Data,n);}//设置出生年月(例:19980608)
void SetEntry_Data(char*n){strcpy(Entry_Data,n);}//设置入职年月(例:199806)
void SetDeparture_Data(char*n){strcpy(Departure_Data,n);}//设置离职年月(例:199808)
void SetIsWroking(bool n){IsWroking=n;}//设置是否工作
void SetIsRetire(bool n){IsRetire=n;}//设置是否退休
void SetTimes(unsigned int n){Times=n;}//设置已上班的月数&用作标志位
3.3.3获得数据的函数
代码为:
/*获得数据的函数***********************************************************************************/
string GetName(){return name;}
string GetId(){return id;}
string GetBir_Data(){return Bir_Data;}
string GetEntry_Data(){return Entry_Data;}
string GetDeparture_Data(){return Departure_Data;}
bool GetIsWroking(){return IsWroking;}
bool GetIsRetire(){return IsRetire;}
unsigned int GetTimes(){return Times;}
/*CASH内的查询*************************************************************************************/
string GetDate(int times){return Cash.Date[times];} //年月
string GetJob(int times){return Cash.Job[times];} //岗位
short GetUnwrok_days(int times){return Cash.Unwrok_days[times];} //不上班的天数
float GetWages(int times){return Cash.Wages[times];} //工资金额
float GetBonus(int times){return Cash.Bonus[times];} //奖金金额
float GetOther_Reward(int times){return Cash.Other_Reward[times];} //其他奖励金额
float GetPunish(int times){return Cash.Punish[times];} //处罚金额
3.3.4查询函数&打印函数设计
查询函数:设计可以根据用户选择通过名字或ID对已有员工列表进行遍历,查询是否有此人。
//1:按名字查询有无此人;~1:按ID查询有无此人
bool Match(char *str,short flag)
{return flag==1?strcmp(name,str)==0:strcmp(id,str)==0;}
显示函数分为两个,一个是仅仅显示员工个人信息列表,另一个为显示员工的薪资列表。
3.4类·建立数据设计
此类主要对数据类的封装提高编程效率和可读性,其中需要定义1个变量size,每次创建新的员工时++size。
3.4.1输入数据函数设计
输入数据分为三个函数,其中两个为带参的,一个通过用户去实时输入的。其流程图为: