资源描述
程序设计报告
( 2013 / 2014 学年 第 1学期)
题 目: 模拟工资管理系统
专 业: 计算机科学与技术
学 生 姓 名:
班 级 学 号:
指 导 教 师:
指 导 单 位: 南京邮电大学通达学院
日期: 2013年 12月 9日
评 分 细 则
评分项
优秀
良好
中等
差
遵守机房规章制度
上机时的表现
学习态度
程序准备情况
程序设计能力
团队合作精神
课题功能实现情况
算法设计合理性
用户界面设计
报告书写认真程度
内容详实程度
文字表达熟练程度
回答问题准确度
简 短 评 语
教师签名:
年 月 日
评分等级
备注
评分等级有五种:优秀、良好、中等、及格、不及格
模拟工资管理系统
一 课题内容和要求
工资管理系统是一个单位最基本的一项财务管理,该系统要求实现查找,修改,删除,统计,排序等。所以帐务数据都要利用文件系统保存,以备系统下次运行时使用。通过此课题,熟练掌握文件,数组,指针的各项操作,以及一些基本算法思想的应用。
基本要求:
管理员:
1) 以密码系统登录
2) 录入员工信息具体工资,计算相应的税金(计算规则参见最新公布的政策)
3) 查询并显示所有员工具体信息
4) 显示统计信息:员工数目,工资总数和税金总数
5) 按照指定条件查询
6) 增减具体员工记录
税金政策基本是不同收入等级的工资使用不同的比例收取税金。类似于下表:
工资 税金
0~1500 0%(超出部分)
1500~2500 10%(超出部分)
2500~3500 15%(超出部分)
3500~5000 20%(超出部分)
5000~10000 30%(超出部分)
10000~ 40%(超出部分)
员工:
1) 以工号为登录ID,密码自己设定;
2) 可以查询本人的相关信息;
3) 系统提供指定时间间隔的查询功能。
二 需求分析
工资管理系统的功能框架图如图1所示。
添加
查找
修改
删除
显示
排序
显示
退出
工资管理系统
保存
图一(功能框架图)
(1) 根据工资管理系统的要求,设计合适的数据结构。
(2) 选择文件存储格式(文本或是二进制)和文件名。
(3) 采用自顶向下的设计方法,设计系统的总体模块组成和数据结构。
(4) 对于每项操作,设计一个函数(方法、子模块)进行实现,要明确定义函数类型。
(5) 根据设计结果分布开发实现各模块,最后进行总体集成。
三、概要设计
1 主要结构体
class worker
{
public:
worker()
{
}
void show();//职工信息显示
~worker()
{
}
double GetTax (); // 获取缴税
double GetAccumPay (); // 获取实发工资
friend class WorkerList;
private:
string num,name,sex,edu,address,tel;//姓名,性别,教育程度,住址,电话
int age,salary,A;//年龄,薪水,税金
};
class WorkerList
{
private:
worker w[N];
int NUM;//用来计算职工数目
int count;//用来暂时记录当前操作第几个职工
public:
void add();//职工信息录入
void sort();//职工信息排序
void search();//职工信息查找
void dele();//职工信息删除
void modify();//职工信息修改
void save();//职工信息以文件形式保存
void showworker();//显示职工信息在屏幕上
void read();
WorkerList()
{
NUM=0;
count=0;
}
};
2 主要函数流程图
(1) 登录函数 (如图二所示)
开始
管理员
用户
请输入密码
请输入密码
N Y Y N
能否登录
能否登录
进入系统
图二(登录函数图)
(2)职工信息录入 如图三所示
学历
添加新员工信息
请输入要添加的员工人数
姓名
工号
年龄
工资
电话
地址
性别
图三 (录入函数)
(3)职工信息查找 (如图四所示)
查询员工
请选择查询方式
学历
工资
姓名
工号
请输入待查询的员工的工资
请输入待查询的员工的姓名
请输入待查询的员工的学历
请输入待查询的员工的工号
所查询的员工信息
按任意键返回
图四 (查找函数)
(4)职工信息统计 (如图五所示)
打印员工信息
所以员工信息列表
按任意键返回
图五(统计函数)
(5)职工信息修改 (如图六所示)
请输入数字2
1学历
2电话
3姓名
4工号
5工资
6年龄
7地址
8性别
输入您要修改的学历
输入您要修改的的电话
输入您要修改的姓名
输入您要修改的工号
输入您要修改的工资
输入您要修改的年龄
输入您要修改的地址
输入您要修改的性别
修改信息已保存
现返回主菜单
图六(修改函数)
(6)职工信息删除 (如图七所示)
请输入要删除职工的工号
请输入数字3
显示所删除职工信息
确认请输入Y
返回菜单请输入N
图七 (删除函数)
请输入数字编号
职工信息保存
(7)职工信息保存(如图八所示)
文件正在保存。。请稍候
数据保存成功
系统返回主菜单
图八
(8)职工信息排序(如图九所示)
职
工
信
息
排
序
按工号排序(升序)
按工号排序(升序)
按工号排序(升序)
按工号排序(升序)
按工号排序(升序)
按工号排序(升序)
按工号排序(升序)
请选择数字编号
图九
四.源代码
#include<iostream>
#include<string>
#include<fstream>
#include <stdlib.h>
#include <cstdlib>
#include"conio.h"
using namespace std;
#define N 100//N作为最大职工总数
int f=0;//f作为开关
string p;//p作为接收菜单选项的字符串
int error=0;
void menu();//显示菜单
class worker
{
public:
worker()
{
}
void show();//职工信息显示
~worker()
{
}
double GetTax (); // 获取缴税
double GetAccumPay (); // 获取实发工资
friend class WorkerList;
private:
string num,name,sex,edu,address,tel;//姓名,性别,教育程度,住址,电话
int age,salary,A;//年龄,薪水,税金
};
class WorkerList
{
private:
worker w[N];
int NUM;//用来计算职工数目
int count;//用来暂时记录当前操作第几个职工
public:
void add();//职工信息录入
void sort();//职工信息排序
void search();//职工信息查找
void dele();//职工信息删除
void modify();//职工信息修改
void save();//职工信息以文件形式保存
void showworker();//显示职工信息在屏幕上
void read();
WorkerList()
{
NUM=0;
count=0;
}
};
double worker::GetTax () // 缴税
{
if(salary<=1500)
{
return A==0;
}
else
if(salary<=2500)
{
return A=(salary-1500)*10/100;
}
else
if(salary<=3500)
{
return A=(salary-2500)*15/100+100;
}
else
if(salary<=5000)
{
return A=(salary-3500)*20/100+100+150;
}
else
if(salary<=10000)
{
return A=(salary-5000)*30/100+100+150+300;
}
else
if(salary>10000)
{
return A=(salary-10000)*40/100+100+150+300+1500;
}
}
double worker::GetAccumPay ()
{
return salary-A;
}
//登陆函数
void login()
{
system("cls");
cout<<"\n\n*************************************************"<<endl;
cout<<"** 请选择您所需要的模式 **"<<endl;
cout<<"** 1.管理员模式 **"<<endl;
cout<<"** 2.用户模式 **"<<endl;
cout<<"*************************************************"<<endl;
}
void menu()
{
cout<<endl;
cout<<"**************************************************************"<<endl;
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<<"** 8.职工信息查看 **"<<endl;
cout<<"** 0.退出 **"<<endl;
cout<<"** **"<<endl;
cout<<"**************************************************************"<<endl;
cout<<endl;
}
void menu1()
{
cout<<endl;
cout<<"**************************************************************"<<endl;
cout<<"** **"<<endl;
cout<<"** ===欢迎使用南京邮电大学职工工资管理系统=== **"<<endl;
cout<<"** **"<<endl;
cout<<"** 1.职工信息查找 **"<<endl;
cout<<"** 0.退出 **"<<endl;
cout<<"** **"<<endl;
cout<<"**************************************************************"<<endl;
cout<<endl;
}
void domain()//主菜单函数实现
{
char pa[20];
int abcd;
char before;
WorkerList wl;
int a;
cout<<"请输入选择:";
cin>>a;
switch(a)
{
case 1:
cout<<"请输入密码:";
int j;
for( j=0;j<10;j++)
{
before=getch();
if(before==13)
{
pa[j]='\0';
break;
}
if(before==8)
{
before=getchar();
}
else
{
pa[j]=before;
cout<<'*';
}
}
if(strcmp(pa,"123")==0||strcmp(pa,"456")==0)
{
cout << "\n登录成功,祝您工作顺利,心情愉快!"<<endl;
}
else
{
do
{
error++;
if(error==3)
{
cout<<endl;
cout<<"\n**************************************************"<<endl;
cout<<"** 密码错误,系统自动退出,请稍后重新登录 **"<<endl;
cout<<"**************************************************"<<endl;
for(abcd=1;abcd<=100000000;abcd++)
{
}
exit(1);
}
cout<<"\n密码错误!请重新输入"<<endl;
for(abcd=1;abcd<=100000000;abcd++)
{
}
login();
}
while(error<3);
}
while(1)
{
system("cls");
menu();
cout<<"请选择数字编号0~8"<<endl;
int i1;
cin>>i1;
while(!(i1>=0&&i1<=8))
{
cout<<"输入有误,请重新输入:"<<endl;
cin>>i1;
}
switch(i1)
{
case 1:
wl.add();//添加
break;
case 2:
wl.modify();//修改
break;
case 3:
wl.dele();//删除
break;
case 4:
wl.sort();//排序
break;
case 5:
wl.search();//查找
break;
case 6:
wl.showworker();//显示
break;
case 7:
wl.save();//保存
break;
case 8:
wl.read ();//查看
break;
case 0:
exit(0);
cout<<"系统退出!!"<<endl;
exit(0);
default:
break;
}
cout<<"是否返回主菜单? Y/N"<<endl;
cin>>p;
if(p=="n"||p=="N")
{ cout<<"系统退出!!"<<endl;
exit(0);
}
getchar();
}
case 2:
cout<<"请输入密码:";
int b ;
for(b=0;b<10;b++)
{
before=getch();
if(before==13)
{
pa[b]='\0';
break;
}
if(before==8)
{
before=getchar();
}
else
{
pa[b]=before;
cout<<'*';
}
}
if(strcmp(pa,"123")==0||strcmp(pa,"456")==0)
{
cout << "\n登录成功,祝您工作顺利,心情愉快!"<<endl;
}
else
{
do
{
error++;
if(error==3)
{
cout<<endl;
cout<<"\n**************************************************"<<endl;
cout<<"** 密码错误,系统自动退出,请稍后重新登录 **"<<endl;
cout<<"**************************************************"<<endl;
for(abcd=1;abcd<=100000000;abcd++)
{
}
exit(1);
}
cout<<"\n密码错误!请重新输入"<<endl;
for(abcd=1;abcd<=100000000;abcd++)
{
}
login();
}
while(error<3);
}
while(1)
{
system("cls");
menu1();
cout<<"请选择数字编号0~1"<<endl;
int i1;
cin>>i1;
while(!(i1>=0&&i1<=7))
{
cout<<"输入有误,请重新输入:"<<endl;
cin>>i1;
}
switch(i1)
{
case 1:
wl.search();//查找
break;
case 0:
exit(0);
cout<<"系统退出!!"<<endl;
exit(0);
default:
break;
}
cout<<"是否返回主菜单? Y/N"<<endl;
cin>>p;
if(p=="n"||p=="N")
{ cout<<"系统退出!!"<<endl;
exit(0);
}
getchar();
}
}
}
void WorkerList::add()//职工信息添加函数实现
{
cout<<"请输入职工信息:"<<endl;
cout<<"工号\t姓名\t性别\t学历\t年龄\t工资\t地址\t电话"<<endl;
string num;
cin>>num;
for(int i=0;i<NUM;i++)
while(num==w[i].num)
{
cout<<"此职工编号已存在,请重新输入:"<<endl;
cin>>num;
}
w[NUM].num=num;
cin>>w[NUM].name>>w[NUM].sex>>w[NUM].edu>>w[NUM].age>>w[NUM].salary>>w[NUM].address>>w[NUM].tel;
++NUM;
count=NUM;
}
void worker::show()//显示职工信息函数实现
{
cout<<"工号\t姓名\t性别\t学历\t年龄\t工资\t地址\t电话"<<endl;
cout<<num<<'\t'<<name<<'\t'<<sex<<'\t'<<edu<<'\t'<<age<<'\t'<<salary<<'\t'<<address<<'\t'<<tel<<endl;
cout<<endl;
}
void WorkerList::modify()//职工信息修改函数实现
{
if(NUM<=0)
{
cout<<"没有职工信息存入,系统将返回主菜单"<<endl;
menu();
}
else
{ cout<<"职工信息如下:"<<endl;
cout<<"工号\t姓名\t性别\t学历\t年龄\t工资\t地址\t电话"<<endl;
for(int i=0;i<count;i++)
cout<<w[i].num<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age<<'\t'<<w[i].salary<<'\t'<<w[i].address<<'\t'<<w[i].tel<<endl;
}
cout<<"请输入需要修改信息职工的工号:"<<endl;
string num1;
cin>>num1;
int j=0,k;
int flag=1;
while(flag)
{
for(;j<count;j++)
{
if(num1==w[j].num)
{
flag=0;
k=j;
break;
}
}
if(flag)
{
cout<<"不存在此员工,请重新输入:"<<endl;
j=0;
cin>>num1;
}
}
cout<<"你选择的职工的信息为:"<<endl;
cout<<"工号\t姓名\t性别\t学历\t年龄\t工资\t地址\t电话"<<endl;
cout<<w[k].num<<'\t'<<w[k].name<<'\t'<<w[k].sex<<'\t'<<w[k].edu<<'\t'<<w[k].age<<'\t'<<w[k].salary<<'\t'<<w[k].address<<'\t'<<w[k].tel<<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<<"** 8.修改电话 **"<<endl;
cout<<"** 0.返回主菜单 **"<<endl;
cout<<"***********************************************"<<endl;
cout<<endl;
cout<<"请选择数字编号0~8"<<endl;
int i3;
cin>>i3;
while(i3<0||i3>8)
{
cout<<"输入有误,请重新输入:"<<endl;
cin>>i3;
}
switch(i3)
{
case 1:
cout<<"请输入新的职工工号:";
cin>>w[k].num;
cout<<"修改信息已保存,现返回主菜单:"<<endl;
menu();
break;
case 2:
cout<<"请输入新的职工姓名:";
cin>>w[k].name;
cout<<"修改信息已保存,现返回主菜单:"<<endl;
menu();
break;
case 3:
cout<<"请输入新的职工性别:";
cin>>w[k].sex;
cout<<"修改信息已保存,现返回主菜单:"<<endl;
menu();
break;
case 4:
cout<<"请输入新的职工学历:";
cin>>w[k].edu;
cout<<"修改信息已保存,现返回主菜单:"<<endl;
menu();
break;
case 5:
cout<<"请输入新的职工年龄:";
cin>>w[k].age;
cout<<"修改信息已保存,现返回主菜单:"<<endl;
menu();
break;
case 6:
cout<<"请输入新的职工工资:";
cin>>w[k].salary;
cout<<"修改信息已保存,现返回主菜单:"<<endl;
menu();
break;
case 7:
cout<<"请输入新的职工地址:";
cin>>w[k].address;
cout<<"修改信息已保存,现返回主菜单:"<<endl;
menu();
break;
case 8:
cout<<"请输入新的职工电话:";
cin>>w[k].tel;
cout<<"修改信息已保存,现返回主菜单:"<<endl;
menu();
break;
case 0:
menu();
default:
break;
}
}
void WorkerList::showworker()//职工信息显示函数实现
{
if(NUM<=0)
{
cout<<"没有职工信息存入,系统将返回主菜单"<<endl;
}
else
cout<<"已保存的职工信息如下:"<<endl;
cout<<"工号\t姓名\t性别\t学历\t年龄\t工资\t地址\t电话"<<endl;
for(int i=0;i<count;i++)
cout<<w[i].num<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age<<'\t'<<w[i].salary<<'\t'<<w[i].address<<'\t'<<w[i].tel<<endl;
cout<<"是否返回主菜单? Y/N"<<endl;
cin>>p;
while(1)
{
if(p=="y"||p=="Y")
{
menu();
}
else if(p=="n"||p=="N")
{
cout<<"系统退出!!"<<endl;
exit(0);
}
else
{
cout<<"输入有误,请重新输入:";
cin>>p;
}
}
}
void WorkerList::search()
{
if(NUM<=0)
{
cout<<"没有职工信息存入,系统将返回主菜单"<<endl;
}
else
cout<<"请选择查找方式:"<<endl;
cout<<"***********************************************"<<endl;
cout<<"** 1.按工号查找 **"<<endl;
cout<<"** 2.按姓名查找 **"<<endl;
cout<<"** 3.按工资查找 **"<<endl;
cout<<"** 4.按学历查找 **"<<endl;
cout<<"** 0.返回主菜单 **"<<endl;
cout<<"***********************************************"<<endl;
cout<<endl;
cout<<"请选择数字编号0~4"<<endl;
int i4;
cin>>i4;
while(i4<0||i4>4)
{
cout<<"输入有误,请重新输入:"<<endl;
cin>>i4;
}
if(i4==1)
{
string num2;
cout<<"请输入要查询的职工的工号:"<<endl;
cin>>num2;
int j=0,k;
int flag=1;
while(flag)
{
for(;j<count;j++)
{
if(num2==w[j].num)
{
flag=0;
k=j;
cout<<"查询的职工信息如下:"<<endl;
cout<<"工号\t姓名\t性别\t学历\t年龄\t工资\t地址\t电话"<<endl;
cout
展开阅读全文