应用面向对象技术分析一在职职工医疗保险管理系统,用来对职工的个人医保帐户进行管理,系统的需求为:
1. 每个职工有一个唯一的帐号,记录该职工的帐上余额。个人每月交纳的保险金额为工资的2%,单位为个人每月交纳的保险金额为工资的7%。
2. 每个职工有一个IC卡,有密码,并与职工的个人帐户相关联。每次就医后可凭卡支付医疗费用,IC卡可挂失、重发,如何时候都只有一张卡有效。
3. 系统要记录每次交纳医疗保险金的往来帐,并能查询打印这些信息。
4. 系统要记录每次支付医疗保险金的往来帐,并能查询打印这些信息。系统不能透支。
5. 不考虑对个人工资的管理、个人所属单位的管理。但要考虑入保和退保的处理。
系统分析设计与编程要求为:
1. 分析系统的对象集合,得出系统的类集合。
2. 完成系统所有类的属性的定义。
3. 完成系统所有类的服务定义。
4. 确定系统类之间的结构与连接关系。
5. 采用半展开方式进行主题划分。
6. 完成一个用例图的描述,以及一个类的编程实现。
#include <iostream>
#include <string>
using namespace std;
class ICcard //IC卡类
{
private:
long number;
char password[6];
bool state; //是否加入医保或挂失
public:
ICcard()
{
state=true;
number++;
}
void setPassword()
{
cout<<"please input your password length of 6"<<endl;
string str1,str2;
cin>>str1;
cout<<"please again"<<endl;
cin>>str2;
if(str1==str2)
{
for(int i=0;i<6;i++)
password[i]=str1[i];
}
else
cout<<"password error!"<<endl;
}
void retreat() //退出医保
{
state=false;
number--;
}
long getNumber() //获取IC卡卡号
{
return number;
}
void drop() //挂失
{
state=false;
}
void redistribute()
{
state=true;
}
float pay(float expend)
{
if(state=true)
return expend;
}
};
class Employee //职工类
{
private:
string name;
ICcard *iccard;
float salary;
float medicalSaving;
long id;
public:
Employee()
{
}
Employee(string name,float salary)
{
this->name=name;
this->salary=salary;
}
void join() //入保
{
iccard=new ICcard();
id=iccard->getNumber()+100000;
iccard->setPassword();
medicalSaving=salary*0.09;
}
void quit() //退保
{
cout<<"you have to drop out the system,we will call back the ICcard "<<endl;
iccard->retreat();
}
void consume(float expend)
{
medicalSaving-=iccard->pay(expend);
}
float getBalance()
{
return medicalSaving;
}
string getName()
{
return name;
}
~Employee()
{
delete iccard;
}
};
class Statistics //统计本
{
private:
Employee *person[3];
float expend[3];
public:
Statistics()
{
for(int i=0;i<3;i++)
{
string str;
float salary;
float expends;
cout<<"please input Employee "<<i<<" 's name and salary and consume amount"<<endl;
cin>>expends>>str>>salary;
expend[i]=expends;
person[i]=new Employee(str,salary);
person[i]->join();
person[i]->consume(expends);
}
}
void queryAndPrint()
{
cout<<"please input the person's name who you want to query"<<endl;
string str;
cin>>str;
for(int i=0;i<3;i++)
{
if(str==person[i]->getName())
{
cout<<"you got it at person["<<i<<"]"<<endl;
cout<<"his related information is as follows:"<<endl;
cout<<"his consume this time is "<<expend[i]<<endl;
cout<<"the balance is "<<person[i]->getBalance()<<endl;
}
}
}
};
int main()
{
Statistics s=Statistics();
s.queryAndPrint();
return 0;
}
测试结果: