小型学院工资管理系统
工资管理的数据文件中存储有教工姓名、月工资、教工号、性别、年龄、电话号码,该程序可以录入和显示所有员工的相关资料。在录入所有教工后,系统会自动对教工按工资进行降序排列存入文件中。
主要功能实现代码
1. 用户登陆界面
先定义两个字符串,用于存取管理员的用户名及密码,在运用CompareNoCase函数对两个字符串进行比较,改函数在两个对象完全一致时返回0,运用此函数当两字符串为所定义的字符串即可登陆进入小型工资管理系统界面。
void CteachwageDlg::OnBnClickedButtonLgn()
{
CString sun, spwd;
GetDlgItemText(IDC_EDIT_UNAME, sun);
GetDlgItemText(IDC_EDIT_PWD, spwd);
if (!sun.CompareNoCase(_T("admin"))&& !spwd.CompareNoCase(_T("1234")))
//CompareNoCase当两个对象一致时返回0
{
ShowWindow(SW_HIDE);//登陆成功后隐藏登陆界面
SystemDlg dlg;
dlg.DoModal();
}
else
{
MessageBox(_T("用户名或密码不正确,请重新输入"), _T("登陆失败"));
}
}
2. 添加教工信息
void SystemDlg::OnBnClickedButton6()//添加按钮
{
PropertyDlg dlg;
dlg.DoModal();
int cout = m_list.GetItemCount();
m_list.InsertItem(cout, dlg.name);
m_list.SetItemText(cout, 1, dlg.num);
m_list.SetItemText(cout, 2, dlg.sex);
m_list.SetItemText(cout, 3, dlg.age);
m_list.SetItemText(cout, 4, dlg.tel);
m_list.SetItemText(cout, 5, dlg.wage);
}
3. 修改教工信息
void SystemDlg::OnBnClickedButton4()//修改按钮
{
for (int i = 0; i < m_list.GetItemCount(); i++)
{
BOOL state = m_list.GetCheck(i);
if (state)
{
PropertyDlg dlg;
dlg.DoModal();
m_list.SetItemText(i, 0, dlg.name);
m_list.SetItemText(i, 1, dlg.num);
m_list.SetItemText(i, 2, dlg.sex);
m_list.SetItemText(i, 3, dlg.age);
m_list.SetItemText(i, 4, dlg.tel);
m_list.SetItemText(i, 5, dlg.wage);
}
}
}
4. 删除教工信息
找到所选定的教工行数,然后用DeleteItem删除
void SystemDlg::OnBnClickedButton5()//删除按钮
{
for (int i = 0; i < m_list.GetItemCount(); i++)
{
BOOL state = m_list.GetCheck(i);
if (state)
{m_list.DeleteItem(i);
i--;
}
}
}
5. 按工资对教工信息进行降序排序
把字符串转换为浮点型,存进数组里,运用冒泡排序对工资进行降序排序,然后在将工资对应的教工信息进行交换。
void SystemDlg::OnBnClickedButton8()//排序按钮
{
double a[1000];
CString a1[1000], a2[1000], a3[1000], a4[1000], a5[1000];
CString cs, temp2, temp3, temp4, temp5;
int n;
double temp1;
n = m_list.GetItemCount();
for (int i = 0; i < n; i++)
{
a[i] = _ttof(m_list.GetItemText(i, 5));
a1[i] = m_list.GetItemText(i, 3);
a2[i] = m_list.GetItemText(i, 4);
a3[i] = m_list.GetItemText(i, 1);
a4[i] = m_list.GetItemText(i, 0);
a5[i] = m_list.GetItemText(i, 2);
}
for (int i = 0; i <n; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (a[j] < a[j + 1])
{
temp1 = a[j];
a[j] = a[j + 1];
a[j + 1] = temp1;
temp(a1 + j, a1 + j + 1);
temp(a2 + j, a2 + j + 1);
temp(a3 + j, a3 + j + 1);
temp(a4 + j, a4 + j + 1);
temp(a5 + j, a5 + j + 1);
}
}
}
for (int i = 0; i < m_list.GetItemCount(); i++)
{
cs.Format(_T("%0.4f"), a[i]);
m_list.SetItemText(i, 5, cs);
m_list.SetItemText(i, 4, a2[i]);
m_list.SetItemText(i, 3, a1[i]);
m_list.SetItemText(i, 1, a3[i]);
m_list.SetItemText(i, 0, a4[i]);
m_list.SetItemText(i, 2, a5[i]);
}
MessageBox(_T("排序完成!"), _T("提示"));
}
6. 读取教工信息
用一个空格字符进行格式控制
利用Find函数查找特定格式位置,把长度存入相应的变量,然后运用Left、Mid、Right函数读取该位置的字符串,插入管理系统的EDIT中
void SystemDlg::OnBnClickedButton9()//打开
{
CFileDialog fDlg(TRUE, ".txt", _T("savedata"), OFN_OVERWRITEPROMPT, _T("文本文档(*.txt)|*.txt|保存数据(*.dat)|*.dat|所有文件(*.*)|*.*||"), NULL);
if (fDlg.DoModal() == IDOK)
{
CStdioFile file(fDlg.GetPathName(), CFile::modeRead);
CString cs;
int x = 0;
int m, n, r, m1, n1, m2, n2, m3, n3;
while (file.ReadString(cs))
{
int x1 = cs.Find(" ");
int x2 = cs.Find(" ", x1 + 1);
int x3 = cs.Find(" ", x2 + 1);
int x4 = cs.Find(" ", x3 + 1);
int x5 = cs.Find(" ", x4 + 1);
m = x1 + 1;
n = x2 - x1 - 1;
r = cs.GetLength() - x5 - 1;
m1 = x2 + 1;
n1 = x3 - x2 - 1;
m2 = x3 + 1;
n2 = x4 - x3 - 1;
m3 = x4 + 1;
n3 = x5 - x4 - 1;
m_list.InsertItem(x, cs.Left(x1));
m_list.SetItemText(x, 1, cs.Mid(m, n));
m_list.SetItemText(x, 2, cs.Mid(m1, n1));
m_list.SetItemText(x, 3, cs.Mid(m2, n2));
m_list.SetItemText(x, 4, cs.Mid(m3, n3));
m_list.SetItemText(x, 5, cs.Right(r));
x++;
}
MessageBox(_T("写入完毕!"), _T("打开文件"));
}
}
6. 写入教工信息
运用CFileDialog类进行打开文件, 并进行保存,然后使用CStdioFile打开文件,用WriteString把字符串写入文件。
void SystemDlg::OnBnClickedButton3()//备份按钮
{
CFileDialog fDlg(FALSE, _T(".txt"), _T("save"), OFN_OVERWRITEPROMPT, _T("文本文档(*.txt)|*.txt|保存数据(*.dat)|*.dat|所有文件(*.*)|*.*||"), NULL);
if (fDlg.DoModal() == IDOK)
{
CStdioFile file(fDlg.GetPathName(), CFile::modeWrite | CFile::modeCreate);
CString cs = _T("教工姓名 教工号 性别 年龄 电话 年龄\n");
file.WriteString(cs);
for (int i = 0; i < m_list.GetItemCount(); i++)
{
cs = m_list.GetItemText(i, 0) + _T(" ");
cs += m_list.GetItemText(i, 1) + _T(" ");
cs += m_list.GetItemText(i, 2) + _T(" ");
cs += m_list.GetItemText(i, 3) + _T(" ");
cs += m_list.GetItemText(i, 4) + _T(" ");
cs += m_list.GetItemText(i, 5) + _T("\n");
file.WriteString(cs);
}
file.Close();
MessageBox(_T("写入文件成功!"), _T("备份"));
}
}
7.查找界面
创建一个查找窗口,顺序查找在查找串口输入的字符串是否与系统中的字符串相等,相等则建立一个标记变量并赋值,不相等则赋另一个值。根据标记变量的值输入弹出相应的窗口
void SystemDlg::OnBnClickedButton11()//查找按钮
{
SearchDlg dlg;
dlg.DoModal();
CString cs;
int i,s=0;
int cout = m_list.GetItemCount();
for (i = 0; i < cout; i++)
{
if (dlg.name == m_list.GetItemText(i, 0))
{
s = 1;
cs += "教工姓名:" + m_list.GetItemText(i, 0) + "\n";
cs += "姓名号:" + m_list.GetItemText(i, 1) + "\n";
cs += "性别:" + m_list.GetItemText(i, 2) + "\n";
cs += "年龄:" + m_list.GetItemText(i, 3) + "\n";
cs += "电话:" + m_list.GetItemText(i, 4) + "\n";
cs += "工资:" + m_list.GetItemText(i, 5) + "\n";
}
}
if (s == 1){MessageBox((cs), _T("查找成功!"));}
else{MessageBox(_T("查找失败!"), _T("查找"));}
}