标签:
1 #include<iostream> 2 #include<fstream> 3 #include<string> 4 using namespace std; 5 #define maxlen 100 6 7 //---------------------------------基类------------------------------------- 8 class Teacher{//基类 9 public: 10 //Teacher(string name,string position); 11 virtual int CaleSalary() const = 0;//纯虚函数,计算教师工资 12 virtual void Show() const = 0;//纯虚函数,输出教师的姓名、职称、工资 13 string name;//姓名 14 string position;//职称 15 int Salary;//工资 16 }; 17 //---------------------------------基类------------------------------------- 18 19 20 //---------------------------------助教类----------------------------------- 21 //助教 22 class Assistant:public Teacher{ 23 public: 24 Assistant(string name,string position);//构造函数 25 virtual int CaleSalary()const ;//计算教师工资 26 virtual void Show()const;//输出教师的姓名、职称、工资 27 }; 28 29 //Assistant(助教)构造函数 30 Assistant::Assistant(string Name,string Position) 31 { 32 name = Name; 33 position = Position; 34 } 35 36 //Assistant(助教)//计算教师工资 37 int Assistant::CaleSalary()const 38 { 39 int temp; 40 if(position=="助教"){ 41 temp = 900; 42 }else if(position=="讲师"){ 43 temp = 1000; 44 }else if(position=="副教授"){ 45 temp = 1300; 46 }else if(position=="教授"){ 47 temp = 1600; 48 } 49 50 return temp; 51 52 } 53 54 55 //Assistant(助教)//输出显示 56 void Assistant::Show()const 57 { 58 cout<<"姓名: "<<name<<", 职称: "<<position<<", 工资: "<<Salary<<"元"<<endl; 59 } 60 61 62 //---------------------------------助教类----------------------------------- 63 64 65 66 //---------------------------------讲师类----------------------------------- 67 68 //讲师类 69 class Lecture:public Teacher{ 70 public: 71 Lecture(string name,string position);//构造函数 72 virtual int CaleSalary()const;//计算教师工资 73 virtual void Show()const;//输出教师的姓名、职称、工资 74 }; 75 76 //Lecture(讲师)构造函数 77 Lecture::Lecture(string Name,string Position) 78 { 79 name = Name; 80 position = Position; 81 } 82 83 //Lecture(讲师)//计算教师工资 84 int Lecture::CaleSalary()const 85 { 86 int temp; 87 if(position=="助教"){ 88 temp = 900; 89 }else if(position=="讲师"){ 90 temp = 1000; 91 }else if(position=="副教授"){ 92 temp = 1300; 93 }else if(position=="教授"){ 94 temp = 1600; 95 } 96 97 return temp;; 98 } 99 100 101 //Lecture(讲师):输出显示 102 void Lecture::Show()const 103 { 104 cout<<"姓名: "<<name<<", 职称: "<<position<<", 工资: "<<Salary<<"元"<<endl; 105 } 106 //---------------------------------讲师类----------------------------------- 107 108 109 110 111 //---------------------------------副教授类--------------------------------- 112 113 //副教授类(AssociateProfessor) 114 class AssociateProfessor:public Teacher{ 115 public: 116 AssociateProfessor(string name,string position);//构造函数 117 virtual int CaleSalary()const;//计算教师工资 118 virtual void Show()const;//输出教师的姓名、职称、工资 119 }; 120 121 //副教授类(AssociateProfessor)构造函数 122 AssociateProfessor::AssociateProfessor(string Name,string Position) 123 { 124 name = Name; 125 position = Position; 126 } 127 128 //副教授类(AssociateProfessor)//计算教师工资 129 int AssociateProfessor::CaleSalary()const 130 { 131 int temp; 132 if(position=="助教"){ 133 temp = 900; 134 }else if(position=="讲师"){ 135 temp = 1000; 136 }else if(position=="副教授"){ 137 temp = 1300; 138 }else if(position=="教授"){ 139 temp = 1600; 140 } 141 142 return temp; 143 } 144 145 146 //副教授类(AssociateProfessor)//输出显示 147 void AssociateProfessor::Show()const 148 { 149 cout<<"姓名: "<<name<<", 职称: "<<position<<", 工资: "<<Salary<<"元"<<endl; 150 } 151 //---------------------------------副教授类--------------------------------- 152 153 //---------------------------------教授类----------------------------------- 154 155 //Proffessor(教授类) 156 class Proffessor:public Teacher{ 157 public: 158 Proffessor(string name,string position);//构造函数 159 virtual int CaleSalary()const;//计算教师工资 160 virtual void Show()const;//输出教师的姓名、职称、工资 161 }; 162 163 //Proffessor(教授类)构造函数 164 Proffessor::Proffessor(string Name,string Position) 165 { 166 name = Name; 167 position = Position; 168 } 169 170 int Proffessor::CaleSalary()const 171 { 172 int temp; 173 if(position=="助教"){ 174 temp = 900; 175 }else if(position=="讲师"){ 176 temp = 1000; 177 }else if(position=="副教授"){ 178 temp = 1300; 179 }else if(position=="教授"){ 180 temp = 1600; 181 } 182 183 return temp; 184 } 185 186 187 //Proffessor(教授类)输出显示 188 void Proffessor::Show()const 189 { 190 cout<<"姓名: "<<name<<", 职称: "<<position<<", 工资: "<<Salary<<"元"<<endl; 191 } 192 //---------------------------------教授类----------------------------------- 193 194 struct Total 195 { 196 string name; 197 string position; 198 int salary; 199 }; 200 Total Data[maxlen]; 201 int num;//几组数据 202 203 void analyse(ifstream &in) 204 { 205 int i; 206 string s="";//初始字符串s为空 207 char ch;//字符 208 string str[maxlen];//存放字符串 209 int count = 0; 210 while(!in.eof())//当文件没读完 211 { 212 ch=in.get();//读入字符 213 if(ch!=‘\n‘&&ch!=‘ ‘)//当前字符不死空格或者换行符 214 { 215 s +=ch;//加入到字符串尾部 216 }else {//是空格或换行符 217 str[count] =s; 218 count++;//计数+1 219 s ="";//字符冲为空 220 } 221 } 222 223 num = 0;//统计行数 224 for(i=0;i<count;i=i+2) 225 { 226 Data[num].name = str[i];//姓名 227 Data[num].position = str[i+1];//职称 228 Data[num].salary = 0;//工资初始化为0 229 num++;//行数+1 230 } 231 } 232 233 234 int main() 235 { 236 int i; 237 ifstream in; 238 ofstream out; 239 /* 240 char a[30]; 241 cout<<"请输入文件名:"; 242 cin>>a; 243 in.open(a,ios::in); //打开文件 244 */ 245 in.open("D:/teacher.txt",ios::in); //打开文件 246 if(in.is_open()){ 247 analyse(in); 248 in.close(); 249 }else printf("文件操作出错!\n"); 250 251 out.open("D:/Teache.txt");//将某些关键词替换后的字符串存到文件中 252 if(out.is_open())//打开文件 253 { 254 for( i=0;i<num;i++) 255 { 256 if(Data[i].position=="助教") 257 { 258 Teacher *assistant = new Assistant(Data[i].name,Data[i].position); 259 assistant->Salary =assistant->CaleSalary(); 260 assistant->Show(); 261 out<<assistant->name; 262 out<<" "; 263 out<<assistant->position; 264 out<<" "; 265 out<<assistant->Salary; 266 out<<"\n"; 267 268 }else if(Data[i].position=="讲师") 269 { 270 Teacher *lecture = new Lecture(Data[i].name,Data[i].position); 271 272 lecture->Salary =lecture->CaleSalary(); 273 lecture->Show(); 274 out<<lecture->name; 275 out<<" "; 276 out<<lecture->position; 277 out<<" "; 278 out<<lecture->Salary; 279 out<<"\n"; 280 }else if(Data[i].position=="副教授") 281 { 282 Teacher *associateProfessor = new AssociateProfessor (Data[i].name,Data[i].position); 283 associateProfessor->Salary =associateProfessor->CaleSalary(); 284 associateProfessor->Show(); 285 out<<associateProfessor->name; 286 out<<" "; 287 out<<associateProfessor->position; 288 out<<" "; 289 out<<associateProfessor->Salary; 290 out<<"\n"; 291 292 }else if(Data[i].position=="教授") 293 { 294 Teacher *proffessor = new Proffessor (Data[i].name,Data[i].position); 295 proffessor->Salary =proffessor->CaleSalary(); 296 proffessor->Show(); 297 out<<proffessor->name; 298 out<<" "; 299 out<<proffessor->position; 300 out<<" "; 301 out<<proffessor->Salary; 302 out<<"\n"; 303 } 304 } 305 }else printf("文件操作出错!\n"); //文件带卡失败 306 return 0; 307 }
标签:
原文地址:http://www.cnblogs.com/minmsy/p/5093971.html