每个教师的信息为:教师号、姓名、性别、单位名称、家庭住址、联系电话、基本工资、津贴、生活补贴、应发工资、电话费、水电费、房租、所得税、卫生费、公积金、合计扣款、实发工资。注:应发工资=基本工资+津贴+生活补贴;合计扣款=电话费+水电费+房租+所得税+卫生费+公积金;实发工资=应发工资 - 合计扣款。
A、教师信息处理
(1) 输入教师信息
(2) 插入(修改)教师信息:
(3) 删除教师信息:
(4) 浏览教师信息:
提示:具体功能及操作参考题1。
(5)排序、查询功能
(6)退出系统功能
B、教师数据处理:
(1) 按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据。
(2) 教师实发工资、应发工资、合计扣款计算。
提示:计算规则如题目。
(3) 教师数据管理
提示:输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件
(4) 教师数据查询:
提示:输入教师号或其他信息,即读出所有数据信息,并显示出来。
(5) 教师综合信息输出
提示:输出教师信息到屏幕。
最后附一份实验报告
#include <iostream>
#include <fstream>
#include <iomanip>
#include <vector>
#include <algorithm>
using namespace std;
struct Teacher {
int teacherID;
string name;
string gender;
string unitName;
string address;
string contactNumber;
double basicSalary;
double allowance;
double livingAllowance;
double totalDeductions;
double netSalary;
};
vector<Teacher> teachers;
// 函数声明
void displayMenu();
void addTeacher();
void updateTeacher();
void deleteTeacher();
void browseTeachers();
void sortTeachers();
void searchTeacher();
void calculateSalary();
void saveDataToFile();
void readDataFromFile();
int main() {
readDataFromFile(); // 从文件读取数据
int choice;
do {
displayMenu();
cout << "请输入您的选择:";
cin >> choice;
cout << endl;
switch (choice) {
case 1:
addTeacher();
break;
case 2:
updateTeacher();
break;
case 3:
deleteTeacher();
break;
case 4:
browseTeachers();
break;
case 5:
sortTeachers();
break;
case 6:
searchTeacher();
break;
case 7:
calculateSalary();
break;
case 8:
saveDataToFile();
break;
case 9:
cout << "退出系统。" << endl;
break;
default:
cout << "无效的选择,请重新输入。" << endl;
}
cout << endl;
} while (choice != 9);
return 0;
}
// 显示菜单
void displayMenu() {
cout << "A、教师信息处理" << endl;
cout << " (1) 输入教师信息" << endl;
cout << " (2) 插入(修改)教师信息" << endl;
cout << " (3) 删除教师信息" << endl;
cout << " (4) 浏览教师信息" << endl;
cout << " (5) 排序、查询功能" << endl;
cout << " (6) 退出系统功能" << endl;
cout << "B、教师数据处理" << endl;
cout << " (7) 按教师号录入教师基本数据" << endl;
cout << " (8) 教师实发工资、应发工资、合计扣款计算" << endl;
cout << " (9) 教师数据管理" << endl;
cout << " (10) 教师数据查询" << endl;
cout << " (11) 教师综合信息输出" << endl;
}
// 输入教师信息
void addTeacher() {
Teacher teacher;
cout << "请输入教师号:";
cin >> teacher.teacherID;
cout << "请输入姓名:";
cin.ignore();
getline(cin, teacher.name);
cout << "请输入性别:";
cin >> teacher.gender;
cout << "请输入单位名称:";
cin.ignore();
getline(cin, teacher.unitName);
cout << "请输入家庭住址:";
getline(cin, teacher.address);
cout << "请输入联系电话:";
getline(cin, teacher.contactNumber);
teachers.push_back(teacher);
cout << "教师信息已添加。" << endl;
}
// 插入(修改)教师信息
void updateTeacher() {
int teacherID;
cout << "请输入要插入(修改)的教师号:";
cin >> teacherID;
bool found = false;
for (int i = 0; i < teachers.size(); i++) {
if (teachers[i].teacherID == teacherID) {
Teacher& teacher = teachers[i];
cout << "请输入姓名(原姓名:" << teacher.name << "):";
cin.ignore();
getline(cin, teacher.name);
cout << "请输入性别(原性别:" << teacher.gender << "):";
cin >> teacher.gender;
cout << "请输入单位名称(原单位名称:" << teacher.unitName << "):";
cin.ignore();
getline(cin, teacher.unitName);
cout << "请输入家庭住址(原家庭住址:" << teacher.address << "):";
getline(cin, teacher.address);
cout << "请输入联系电话(原联系电话:" << teacher.contactNumber << "):";
getline(cin, teacher.contactNumber);
found = true;
cout << "教师信息已插入(修改)。" << endl;
break;
}
}
if (!found) {
cout << "找不到该教师号对应的教师信息。" << endl;
}
}
// 删除教师信息
void deleteTeacher() {
int teacherID;
cout << "请输入要删除的教师号:";
cin >> teacherID;
bool found = false;
for (int i = 0; i < teachers.size(); i++) {
if (teachers[i].teacherID == teacherID) {
teachers.erase(teachers.begin() + i);
found = true;
cout << "教师信息已删除。" << endl;
break;
}
}
if (!found) {
cout << "找不到该教师号对应的教师信息。" << endl;
}
}
// 浏览教师信息
void browseTeachers() {
if (teachers.empty()) {
cout << "无教师信息。" << endl;
return;
}
cout << "教师信息如下:" << endl;
cout << setw(10) << "教师号" << setw(10) << "姓名" << setw(6) << "性别"
<< setw(20) << "单位名称" << setw(20) << "家庭住址"
<< setw(15) << "联系电话" << endl;
for (const Teacher& teacher : teachers) {
cout << setw(10) << teacher.teacherID << setw(10) << teacher.name
<< setw(6) << teacher.gender << setw(20) << teacher.unitName
<< setw(20) << teacher.address << setw(15) << teacher.contactNumber
<< endl;
}
}
// 排序、查询功能
void sortTeachers() {
if (teachers.empty()) {
cout << "无教师信息。" << endl;
return;
}
int choice;
do {
cout << "请选择排序方式:" << endl;
cout << " 1. 按教师号升序" << endl;
cout << " 2. 按姓名升序" << endl;
cout << " 3. 按单位名称升序" << endl;
cout << " 4. 退出排序功能" << endl;
cout << "请输入您的选择:";
cin >> choice;
cout << endl;
switch (choice) {
case 1:
sort(teachers.begin(), teachers.end(), [](const Teacher& a, const Teacher& b) {
return a.teacherID < b.teacherID;
});
break;
case 2:
sort(teachers.begin(), teachers.end(), [](const Teacher& a, const Teacher& b) {
return a.name < b.name;
});
break;
case 3:
sort(teachers.begin(), teachers.end(), [](const Teacher& a, const Teacher& b) {
return a.unitName < b.unitName;
});
break;
case 4:
cout << "退出排序功能。" << endl;
break;
default:
cout << "无效的选择,请重新输入。" << endl;
}
if (choice != 4) {
browseTeachers();
cout << endl;
}
} while (choice != 4);
}
// 搜索教师信息
void searchTeacher() {
if (teachers.empty()) {
cout << "无教师信息。" << endl;
return;
}
bool found = false;
int teacherID;
string otherInfo;
cout << "请输入要查询的教师号或其他信息:";
cin >> teacherID;
for (const Teacher& teacher : teachers) {
if (teacher.teacherID == teacherID ||
teacher.name == otherInfo ||
teacher.gender == otherInfo ||
teacher.unitName == otherInfo ||
teacher.address == otherInfo ||
teacher.contactNumber == otherInfo) {
cout << "教师信息如下:" << endl;
cout << setw(10) << "教师号" << setw(10) << "姓名" << setw(6) << "性别"
<< setw(20) << "单位名称" << setw(20) << "家庭住址"
<< setw(15) << "联系电话" << endl;
cout << setw(10) << teacher.teacherID << setw(10) << teacher.name
<< setw(6) << teacher.gender << setw(20) << teacher.unitName
<< setw(20) << teacher.address << setw(15) << teacher.contactNumber
<< endl;
found = true;
}
}
if (!found) {
cout << "找不到对应的教师信息。" << endl;
}
}
// 计算工资
void calculateSalary() {
if (teachers.empty()) {
cout << "无教师信息。" << endl;
return;
}
int teacherID;
cout << "请输入要计算工资的教师号:";
cin >> teacherID;
bool found = false;
for (Teacher& teacher : teachers) {
if (teacher.teacherID == teacherID) {
cout << "请输入基本工资:";
cin >> teacher.basicSalary;
cout << "请输入津贴:";
cin >> teacher.allowance;
cout << "请输入生活补贴:";
cin >> teacher.livingAllowance;
teacher.netSalary = teacher.basicSalary + teacher.allowance + teacher.livingAllowance;
teacher.totalDeductions = 0.0;
cout << "教师工资已计算。" << endl;
found = true;
break;
}
}
if (!found) {
cout << "找不到该教师号对应的教师信息。" << endl;
}
}
// 保存数据到文件
void saveDataToFile() {
ofstream outFile("teachers.txt");
for (const Teacher& teacher : teachers) {
outFile << teacher.teacherID << "," << teacher.name << ","
<< teacher.gender << "," << teacher.unitName << ","
<< teacher.address << "," << teacher.contactNumber << ","
<< teacher.basicSalary << "," << teacher.allowance << ","
<< teacher.livingAllowance << "," << teacher.netSalary << ","
<< teacher.totalDeductions << endl;
}
outFile.close();
cout << "教师信息已保存到文件。" << endl;
}
// 从文件读取数据
void readDataFromFile() {
ifstream inFile("teachers.txt");
if (inFile.is_open()) {
while (!inFile.eof()) {
Teacher teacher;
string line;
getline(inFile, line);
if (line.empty()) {
break;
}
// 使用逗号分割数据
size_t pos = line.find(',');
teacher.teacherID = stoi(line.substr(0, pos));
line.erase(0, pos + 1);
pos = line.find(',');
teacher.name = line.substr(0, pos);
line.erase(0, pos + 1);
pos = line.find(',');
teacher.gender = line.substr(0, pos);
line.erase(0, pos + 1);
pos = line.find(',');
teacher.unitName = line.substr(0, pos);
line.erase(0, pos + 1);
pos = line.find(',');
teacher.address = line.substr(0, pos);
line.erase(0, pos + 1);
pos = line.find(',');
teacher.contactNumber = line.substr(0, pos);
line.erase(0, pos + 1);
pos = line.find(',');
teacher.basicSalary = stod(line.substr(0, pos));
line.erase(0, pos + 1);
pos = line.find(',');
teacher.allowance = stod(line.substr(0, pos));
line.erase(0, pos + 1);
pos = line.find(',');
teacher.livingAllowance = stod(line.substr(0, pos));
line.erase(0, pos + 1);
pos = line.find(',');
teacher.netSalary = stod(line.substr(0, pos));
line.erase(0, pos + 1);
teacher.totalDeductions = stod(line);
teachers.push_back(teacher);
}
inFile.close();
cout << "已从文件读取教师信息。" << endl;
} else {
cout << "无法打开文件。" << endl;
}
}
请注意,代码中的教师信息是保存在一个vector<Teacher>
容器中的,而不是保存在文件。你可以根据需要修改代码,将数据保存到文件或从文件读取数据。此外,代码中的用户交互部分是基于控制台的,你也可以根据需要进行修改或添加图形界面。