人员信息管理系统论文

人员信息管理系统论文
人员信息管理系统论文

北华航天工业学院

《基于C++的面向对象程序设计实例》课程设计报告

报告题目:公司人员信息管理系统

作者所在系部:计算机系

作者所在专业:计算机科学与技术

作者所在班级:

作者姓名:

指导教师姓名:

完成时间:2009-6-25

北华航天工业学院教务处制

摘要

在当前的市场经济体制下,企业要想提高市场的竞争力,不但要有好的产品,同时内部也要有科学的管理和劳动报酬的合理分配,就必须拥有一套完善的并且适合自身特点的信息化管理系统,以统计公司员工的信息、完善内部管理、明确各员工的分工、使劳动报酬的分配更合理、更便于操作。

本文利用VC++6.0编写程序,实现了公司对员工个人信息的统计和工资的计算。本程序将员工的信息存储在文本文档中(txt格式),便于对员工信息的浏览。

本系统主要有五个功能模块:添加员工信息、查询员工信息、修改员工信息、删除员工信息、显示员工信息。已经过全面的系统测试,能够很好的运行,达到了预期的效果。

关键词:程序设计公司信息管理文本文档工资计算

目录

摘要Ⅰ第1章绪论

1.1 课程设计的目的 1

1.2课程设计的背景和意义 1

1.2.1课程设计的背景 1

1.2.2课程设计的意义 1

1.3课程设计环境 1 第2章需求分析2 2.1 问题描述 2 2.2 功能要求 2 2.3 问题的解决方案 2 第3章系统设计3 3.1 数据设计 3 3.1.1 类设计 3

3.1.2 类之间的关系 3

3.1.3 函数设计 3 3.2 结构设计 4 3.2.1 系统流程图 4

3.2.2 界面设计8 第4章系统实现8 4.1 类实现8 4.2 函数实现9 4.3 主函数实现18 第5章系统测试19

5.1模块测试19

5.2课程设计过程中遇到的问题26 总结26致谢26参考文献26附录27

第一章绪论

1.1 课程设计的目的

(1)要求学生达到熟练掌握C++语言的基本知识和技能

(2)基本掌握面向对象程序设计的基本思路和方法

(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

1.2 课程设计的背景和意义

1.2.1 课程设计的背景

1. 理论研究基础

本次课程设计,主要研究类的继承、友员函数、函数的调用以及对文件进行各项操作(如添加、修改、删除、查询、显示等)。这次课程设计应用面向对象的程序设计思路,着重使用在C++中对文本文件进行添加、查找、删除、修改等操作。根据公司中不同员工工资的不同计算方法计算并储存员工的工资及其他信息。

2. 技术层面的支持

(1)C++面向对象程序设计中类的多重继承和多级继承

(3)C++ I/O流库的处理,文本文件的创建与保存。

(4)VC6.0软件

1.2.2 课程设计的意义

通过设计能熟练掌握了C++语言的基本知识和技能、解决简单的面向对象程序设计问题、掌握面向对象程序设计的基本思路和方法、能熟练运用面向对象的方法以及C++的编程思想来完成系统的设计。

1.3 课程设计环境

Windows xp 操作系统。CPU P4 1.6GHz,内存256兆以上。VC6.0

第二章需求分析

2.1 问题描述

某公司需要存储雇员的编号、姓名、级别和月薪,并显示全部信息。雇员分为经理、技术人员、销售人员和销售经理。四类人员的月薪计算方法如下:经理拿固定月薪8000元;技术人员按每小时100元领取月薪;销售人员按其当月销售额的4%领取工资;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为销售总额的5‰。

设计一程序能够对公司人员进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。

2.2 功能要求

1.本程序完成的功能主要有:

(1)显示雇员信息。

(2)添加雇员信息,并保存。

(3)删除雇员信息,并保存。

(4)修改雇员信息,并保存。

(5)查询雇员信息。

(6)系统退出。

2.学生在完成本次课程设计的基本要求后,从便于用户使用和功能完整性的角度考虑

进一步完善程序,请参照题目1和2的要求。

2.3 问题的解决方案

1.应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;

2.分析系统中的各个实体及它们之间的关系;

3.根据问题描述,设计系统的类层次;

4.完成类层次中各个类的描述;

5.完成类中各个成员函数的定义;

6.完成系统的应用模块;

7.功能调试;

8.完成系统总结报告。

第三章系统设计

3.1 数据设计

3.1.1 类设计

本程序中共定义了五个类:stuff(员工基类),manager(经理类),technician(技术人员类),seller(销售人员类),sellmanager(销售经理类)。stuff(员工基类)数据成员有:name(姓名),sex(性别),num(编号),monpay(月薪);成员函数有:void display1();(输出函数)void getin_0();(读入姓名,编号,性别)void getin_();(从文件中读取数据的函数)friendvoidgetin1(manager*p_manager1,int &i1);(从文件中读取经理数据)

friend void getin1(technician*p_technician1,int &j1); (从文件中读取技术人员数据)friend void getin1(seller*p_seller1,int &m1); (从文件中读取销售人员数据)

friend void getin1(sellmanager*p_sellmanager1,int &n1); (从文件中读取销售经理数据)friend void putout1(manager*p_manager1,int &i1); (向文件中输出经理数据)friend void putout1(technician*p_technician1,int &j1); (向文件中输出技术人员数据)

friend void putout1(seller*p_seller1,int &m1); (向文件中输出销售人员数据)

friend void putout1(sellmanager*p_sellmanager1,int&n1); (向文件中输出销售经理数据)。manager(经理类)数据成员:pay(固定工资);成员函数:void getin_1();(计算经理的月薪)。technician(技术人员类)数据成员:hour(工作时间);成员函数:void getin_2();(计算技术人员的月薪)。seller(销售人员类)数据成员:market(月销售额)rate(提成率),dedu(提成);成员函数:void getin_2();(计算销售人员的月薪),sellmanager(销售经理类)成员函数:void wages();(计算销售经理的月薪)。上述类中的数据成员均是私有的,有利于数据的保护,成员函数为共有的。

3.1.2 类之间的关系

manager(经理类),technician(技术人员类),seller(销售人员类)共有继承stuff(员工基类);sellmanager(销售经理类)共有继承manager(经理类),seller(销售人员类)

员工基类中有公有的数据:姓名,性别,编号,月薪。公有的基本输入输出函数。销售经理的工资计算方法好是销售人员和经理的工资之和。

3.1.3 函数设计

add(manager1,technician1,seller1,sellmanager1,i,j,m,n);(添加功能的实现)

check(manager1,technician1,seller1,sellmanager1);(查询功能的实现)

delet(manager1,technician1,seller1,sellmanager1);(删除功能的实现)

change(manager1,technician1,seller1,sellmanager1);(修改功能的实现)

p=esc();(退出功能的实现)

realize();(调用各个功能函数)

3.2 结构设计

3.2.1 系统流程图

图3—1

图3—2

图3—3

图3—4

图3—5

图3—6

图3—7

3.2.2 界面设计

主菜单是一个功能选择菜单,里面包含了选择时各个功能的代号,由该语句输出cout<<"~~~~~~~~~~~~~~~~~~~"<<" 添加<1>,查询<2>,删除<3>,修改<4>,退出

<5>~~~~~~~~~~~~~~~~~~~"<

cout<<"经理《1》,技术人员《2》,销售人员《3》,销售经理《4》"<

第四章系统实现

4.1 类实现

class stuff

{

protected:

string name,sex;//定义姓名,性别,学号,月薪的变量

int num,monpay;

public:

void display1();

void getin_0();

void getin_();

friend void getin1(manager*p_manager1,int &i1);

friend void getin1(technician*p_technician1,int &j1);

friend void getin1(seller*p_seller1,int &m1);

friend void getin1(sellmanager*p_sellmanager1,int &n1);

friend void putout1(manager*p_manager1,int &i1);

friend void putout1(technician*p_technician1,int &j1);

friend void putout1(seller*p_seller1,int &m1);

friend void putout1(sellmanager*p_sellmanager1,int &n1);

};

/*定义经理类*/

class manager:virtual public stuff

{

protected:

int pay;//固定工资

public:

void getin_1();//计算经理月薪

};

/*定义技术人员类*/

class technician:public stuff

{

int hour;//工作时间

public:

void getin_2();//计算技术人员月薪

};

/*定义销售人员类*/

class seller :virtual public stuff

{

protected:

int market;//月销售额

float rate,dedu;//提成百分比,提成

public:

void getin_3();//计算销售人员月薪

};

/*定义销售经理类*/

class sellmanager :public seller,public manager

{

public:

void wages();//计算销售经理月薪

};

4.2 函数实现

/*类函数的定义*/

void stuff::display1()

{

cout<<"姓名"<<" "<<"编号"<<" "<<"性别"<<" "<<"月薪"<

cout<

void stuff::getin_0()

{

cout<<"依次输入姓名,编号,性别"<

cin>>name>>num>>sex;

}

void stuff::getin_()

{

cin>>name>>num>>sex>>monpay;

}

void manager:: getin_1()

{

cout<<"输入固定月薪"<

cin>>pay;

}

void technician:: getin_2()

{

cout<<"输入技术人员工作时间(单位:小时)"<

cin>>hour;

monpay=100*hour;

}

void seller::getin_3()

{

cout<<"输入销售人员的月销售额和提成百分比或销售经理的销售总额和提成百分比"<

cin>>market>>rate;

dedu=rate*market;

monpay=dedu;

}

void sellmanager::wages()

{

monpay=pay+dedu;

}

/*从文件中读取数据*/

void getin1(manager*p_manager1,int &i1)

{

ifstream infile1("经理.txt",ios::in );

if(!infile1)

{

cerr<<"经理文件打开失败"<

exit(1);

}

for(i1;!infile1.eof ();i1++)

{

infile1>>(p_manager1+i1)->name>>(p_manager1+i1)->num>>(p_manager1+i1)->sex>>(p_manager1+i1)->monpay ;

}

infile1.close();

}

void getin1(technician*p_technician1,int &j1)

{

ifstream infile2("技术人员.txt",ios::in );

if(!infile2)

{

cerr<<"技术人员文件打开失败"<

exit(1);

}

for(j1;!infile2.eof ();j1++)

{

infile2>>(p_technician1+j1)->name>>(p_technician1+j1)->num>>(p_technician1+j1)->sex>>(p_technician1 +j1)->monpay;

}

infile2.close();

}

void getin1(seller*p_seller1,int &m1)

{

ifstream infile3("销售人员.txt",ios::in );

if(!infile3)

{

cerr<<"销售人员文件打开失败"<

exit(1);

}

for(m1;!infile3.eof ();m1++)

{

infile3>>(p_seller1+m1)->name>>(p_seller1+m1)->num>>(p_seller1+m1)->sex>>(p_seller1+m1)->monpay;

}

infile3.close();

}

void getin1(sellmanager*p_sellmanager1,int &n1)

{

ifstream infile4("销售经理.txt",ios::in );

if(!infile4)

{

cerr<<"销售经理文件打开失败"<

exit(1);

}

for(n1;!infile4.eof ();n1++)

{

infile4>>(p_sellmanager1+n1)->name>>(p_sellmanager1+n1)->num>>(p_sellmanager1+n1)->sex>>(p_sellmana ger1+n1)->monpay;

}

infile4.close();

}

/*向文件中输出数据*/

void putout1(manager*p_manager1,int &i1)

{

int t;

ofstream outfile1("经理.txt",ios::out);

if(!outfile1)

{

cerr<<"输出文件打开失败"<

exit(1);

}

for(t=0;t

{

outfile1<<(p_manager1+t)->name<<" "<<(p_manager1+t)->num<<" "<<(p_manager1+t)->sex<<" "<<(p_manager1+t)->monpay<

}

outfile1.close();

}

void putout1(technician*p_technician1,int &j1)

{

int t;

ofstream outfile2("技术人员.txt",ios::out);

if(!outfile2)

{

cerr<<"输出文件打开失败"<

exit(1);

}

for(t=0;t

{

outfile2<<(p_technician1+t)->name<<" "<<(p_technician1+t)->num<<"

"<<(p_technician1+t)->sex<<" "<<(p_technician1+t)->monpay<

}

outfile2.close();

}

void putout1(seller*p_seller1,int &m1)

{

int t;

ofstream outfile3("销售人员.txt",ios::out);

if(!outfile3)

{

cerr<<"输出文件打开失败"<

exit(1);

}

for(t=0;t

{

outfile3<<(p_seller1+t)->name<<" "<<(p_seller1+t)->num<<" "<<(p_seller1+t)->sex<<" "<<(p_seller1+t)->monpay<

}

outfile3.close();

}

相关文档
最新文档