![]() |
#2
天使梦魔2013-05-04 21:23
|

/*题目:
给年工资低于26000的教师加工作,超过的不变,
低于26000的教师按赡养的人100/人*年,加上工龄*50,,工资加后不能超过26000
*/
#include <iostream>
#include <fstream>
using namespace std;
#include "wages.h"//因为第一种算法的时候这没出错,加上了代码太长,所以没法
int comp(const void *a,const void *b)
{
return *(double *)a-*(double *)b;
}
int main()
{
int i=0;
int more=0;
int a,e,c,d;
char b[10];
wages teacher [10];//第一种算法:(理想运行)
ifstream fin("教师工资表.txt");//定义ifstream类的成员变量 fin并打开文件
cout<<"编号 姓名 旧工资 新工资 工龄 家庭人数"<<endl;
while (!fin.eof())
{
cout<<""<<endl;
fin>>a;
fin>>b;
fin>>c;
fin>>d;
fin>>e;
teacher[i].get(a,b,c,d,e);
if(c<26000)//工资少于26000的进行加薪计算
teacher[i].add();//加薪计算的成员函数
teacher[i].shownew();//输出的成员函数
i++;
}
ifstream fin1("教师工资表.txt");
cout<<"算法 二:"<<endl;//第二种算法:先按从低到高的工资顺序进行排序,对工资低于26000的人进行计算,并打印结果
i=0;
cout<<"编号 姓名 旧工资 新工资 工龄 家庭人数"<<endl;
while (!fin1.eof())
{
fin1>>a;
fin1>>b;
fin1>>c;
fin1>>d;
fin1>>e;
teacher[i].get(a,b,c,d,e);
i++;
}
int n=i;
int y;
double *z;
z=new double [i];
for(int i=0;i<n;i++)
z[i]=teacher[i].Old_wages()+i/10.00;//+i/10.0用来储存他在成员对象数组里是那个位子,如16000.i表示teacher[i]的教师旧工资为16000
qsort(z,n,sizeof(double),comp);//将工资进行从低到高的排序
i=0;
while(z[i]<26000)
{
y=(int)z[i];
z[i]=(z[i]-y)*10;//得到排序后的工资的顺序,比如z[i]=1,表示teacher[i]的工资是第二低的;
i++;
}
while(i<n)
{
z[i]-=(int)z[i];
z[i]*=10;//同上
i++;
}
int j;
for(int i=0;i<n;i++)
{
j=z[i];//出错地方
cout<<z[i]<<endl;
cout<<j<<endl;
teacher[j].add();//数据处理
teacher[j].shownew();//输出
}
system("pause");
return 0;
}
给年工资低于26000的教师加工作,超过的不变,
低于26000的教师按赡养的人100/人*年,加上工龄*50,,工资加后不能超过26000
*/
#include <iostream>
#include <fstream>
using namespace std;
#include "wages.h"//因为第一种算法的时候这没出错,加上了代码太长,所以没法
int comp(const void *a,const void *b)
{
return *(double *)a-*(double *)b;
}
int main()
{
int i=0;
int more=0;
int a,e,c,d;
char b[10];
wages teacher [10];//第一种算法:(理想运行)
ifstream fin("教师工资表.txt");//定义ifstream类的成员变量 fin并打开文件
cout<<"编号 姓名 旧工资 新工资 工龄 家庭人数"<<endl;
while (!fin.eof())
{
cout<<""<<endl;
fin>>a;
fin>>b;
fin>>c;
fin>>d;
fin>>e;
teacher[i].get(a,b,c,d,e);
if(c<26000)//工资少于26000的进行加薪计算
teacher[i].add();//加薪计算的成员函数
teacher[i].shownew();//输出的成员函数
i++;
}
ifstream fin1("教师工资表.txt");
cout<<"算法 二:"<<endl;//第二种算法:先按从低到高的工资顺序进行排序,对工资低于26000的人进行计算,并打印结果
i=0;
cout<<"编号 姓名 旧工资 新工资 工龄 家庭人数"<<endl;
while (!fin1.eof())
{
fin1>>a;
fin1>>b;
fin1>>c;
fin1>>d;
fin1>>e;
teacher[i].get(a,b,c,d,e);
i++;
}
int n=i;
int y;
double *z;
z=new double [i];
for(int i=0;i<n;i++)
z[i]=teacher[i].Old_wages()+i/10.00;//+i/10.0用来储存他在成员对象数组里是那个位子,如16000.i表示teacher[i]的教师旧工资为16000
qsort(z,n,sizeof(double),comp);//将工资进行从低到高的排序
i=0;
while(z[i]<26000)
{
y=(int)z[i];
z[i]=(z[i]-y)*10;//得到排序后的工资的顺序,比如z[i]=1,表示teacher[i]的工资是第二低的;
i++;
}
while(i<n)
{
z[i]-=(int)z[i];
z[i]*=10;//同上
i++;
}
int j;
for(int i=0;i<n;i++)
{
j=z[i];//出错地方
cout<<z[i]<<endl;
cout<<j<<endl;
teacher[j].add();//数据处理
teacher[j].shownew();//输出
}
system("pause");
return 0;
}
不知道为什么,j输出的值和z[i]输出的值是不一样的,z的值分别是0,2,3,1
j的值是0 3 3 0.
TXT文本的数据是
家庭 工
人数 龄
001 张三 16000 4 10
002 王五 27000 4 5
003 周二 25000 10 20
004 李四 17000 4 5
[ 本帖最后由 a99875984 于 2013-5-3 23:59 编辑 ]