题目:职工信息系统
功能包括:
建立职工信息数据(职工编号,姓名,性别,年龄,电话,职务,工资和家庭成员信息)和信息简表(编号,姓名,电话) 根据职工编号查询职工信息(查询时需要身份确认。单位领导和人事秘书可以看到职工所有信息;财务处人员可以看到职工编号,姓名,性别,年龄,电话,工资;一般职工仅能查到信息简表) 增加新职工信息(由人事秘书完成,需要身份确认) 删除职工信息(由人事秘书完成,需要身份确认) 修改职工工资(由财务处人员完成,需要身份确认) 要求所有信息能够存储在文件中,并具有良好的用户界面
#include #include #include #include using namespace std; const char * file = \"staff.dat\"; const int LIM =8; int ct=0;int Admin;int na;
//ct用来储存文件中数据组数,Admin用来储存登陆后该用户的权限,
//na用来储存登录所输的编号,方便主菜单内使用其显示当前用户
void hline(int); inline void eatline(){while(cin.get()!=\'\\n\') continue;} cla staff {/*职工编号,姓名,性别,年龄,职务,电话,工资和家庭成员信息*/ public:
}; void staff::printf()
//输出的选择,判断其职务,选择调用哪个输出 { if(Admin==1||Admin==2)printf1(); else int num; char name[LIM],sex[3]; int age; char job[10],phone[15]; double wages; char home[20]; int admin; void printf(); void printf1(); void printf2(); void printf3();
}
if(Admin==3)printf2(); else printf3(); void staff::printf1()
//领导及人事秘书能见的输出 {
} void staff::printf2()
//财务人员能见的输出 {
} void staff::printf3()
//普通员工能见的输出 { cout
} hline(3); cout
//输出信息的头部 {
switch(n) { case 1:{cout
};break; case 2:{cout
};break; case 3:{cout
}
}
};break; void menu()
//主菜单 { cout
//二级菜单 { cout
//登陆的实现部分 { cout
int w=0; while(!(cin>>na)) { cin.clear(); while(cin.get()!=\'\\n\')continue;cout
for(int i=1;i
{
streampos place =(i-1) * sizeof stu; find.seekp(place); if (find.fail()) {
cerr
exit(EXIT_FAILURE);
} find.read((char *) &stu, sizeof stu); if(stu.num==na) { } w=1;Admin=stu.admin; }
if(w==0){cout
}
int stu_num()
//计算数据组数 {
} staff stu; ifstream stunum; stunum.open(file,ios_base::in|ios_base::binary); if(stunum.is_open()) {
} stunum.close(); return ct; stunum.seekg(0); while(stunum.read((char *)&stu,sizeof stu))ct++; system(\"pause\"); system(\"cls\"); void setadmin(staff &stu,char jobs[10])
//增加职工时根据职务设置权限 { char job1[10]=\"总经理\"; char job2[10]=\"副总经理\"; char job3[10]=\"人事秘书\"; char job4[10]=\"财务人员\";
}
void add()
// 输入数据的函数,增加职工 {
if(Admin==2) { staff stu; if((!strcmp(stu.job,job1))||(!strcmp(stu.job,job2)))stu.admin=1; else
if(!strcmp(stu.job,job3))stu.admin=2; else if(!strcmp(stu.job,job4))stu.admin=3;
ofstream fout(file, ios_base::out | ios_base::app | ios_base::binary);
if (!fout.is_open())
{
cerr
exit(EXIT_FAILURE);
}
cout
cin.get(stu.name, LIM);
while (stu.name[0] != \'\\0\')
{
cout
cin>>stu.num; cout >stu.age;
cout
cout
cin.get(stu.phone, 15);
cout >stu.wages;
cout
eatline();
cin.get(stu.home, 20); setadmin(stu,stu.job);
fout.write((char *) &stu, sizeof stu); cout
eatline(); cin.get(stu.name,LIM);
}
fout.close();
} else cout
void output()
//输出全部职工信息的函数 { staff stu;
} ifstream find; find.open(file,ios_base::in|ios_base::binary); hline(1); while(find.read((char *) &stu,sizeof stu)) { cout
//修改数据函数 {
if(Admin==3) {
fstream change;
int w=0; staff stu; streampos place;
change.open(file,ios_base::in|ios_base::out|ios_base::binary); if(change.eof()) change.clear();
//清除EOF cout>rec; eatline(); for(int i=0;i
place =i* sizeof stu; change.seekg(place); if (change.fail()) {
cerr
exit(EXIT_FAILURE);
} change.read((char *) &stu, sizeof stu); if(stu.num==rec) { } w=1;
cout
}
if(w==1) { cout > stu.wages) {
if(stu.wages100000)
{
cout
cin.clear();
while(cin.get()!=\'\\n\');
continue;
}
break; } change.seekp(place);
// 回到查找到的地点
change.write((char *) &stu, sizeof stu)
cerr
\\n\";
}
exit(EXIT_FAILURE); } change.close(); cout
void del()
//删除指定编号的职工信息 {
if(Admin==2) {
while(1) { eatline(); int delnum; cout
cin>>delnum; fstream in; in.open(\"staff.dat\",ios_base::in|ios_base::binary); if(!in) { cout
} in.close(); temp.close(); //修改完成,将原文件清空,并将临时文件内容q=0; if(stu.num==delnum) { } if(q==0)temp.write((char*)&stu,sizeof(stu)); in.read((char*)&stu,sizeof(stu)); q=1; 复制回原文件
中
} { out.write((char*)&stu,sizeof(stu)); temp.read((char*)&stu,sizeof(stu)); out.open(\"staff.dat\",ios_base::out|ios_base::trunc|ios_base::binary); temp.read((char*)&stu,sizeof(stu)); while(!temp.eof()) //将文件内容修改后临时寸到另一个文件
temp.open(\"temp.dat\",ios_base::in|ios_base::binary); if(!temp) { cout
cout>x; if(!(x==\'y\'||x==\'Y\'))break; } else cout
void find()
//查找职工的实现部分 {
while(1) { menu2(); //eatline(); int a; int w=0; cin>>a;int na;char sna[LIM]; fstream find; find.open(file,ios_base::in|ios_base::out|ios_base::binary); eatline(); staff stu; switch(a) { case 1:cout>na;break;
case 2:cout>sna;break; case 3:{w=1;
if(Admin==1||Admin==2)output(); else cout
}break; default:{
} for(int i=1;i
streampos place =(i-1) * sizeof stu; find.seekp(place); if (find.fail()) {
cout
cerr
exit(EXIT_FAILURE); } find.read((char *) &stu, sizeof stu); switch(a) { case 1:if(stu.num==na) {
w=1;
stu.printf(); };break; case 2:if(!strcmp(stu.name,sna))
{
w=1;
stu.printf();
};break; case 3:break; default:{
cout
cin.clear();
while(cin.get()!=\'\\n\');continue;
}
} }
\\n\";
} if(w==0)cout>x; if(!(x==\'y\'||x==\'Y\'))break; } /* 建立职工信息数据(职工编号,姓名,性别,年龄,电话,职务,工资和家庭成员信息)和信息简表 (编号,姓名,电话) 根据职工编号查询职工信息(查询时需要身份确认。单位领导和人事秘书可以看到
职工所有信息;财务处人员可以看到职工编号,姓名,性别,年龄,电话,工资;一般职工仅能查到信 息简表)
增加新职工信息(由人事秘书完成,需要身份确认)
删除职工信息(由人事秘书完成,需要身份确认)
修改职工工资(由财务处人员完成,需要身份确认)
要求所有信息能够存储在文件中,并具有良好的用户界面 */
int main() {
system(\"color 6F\"); ifstream fin; fin.open(file,ios_base::in|ios_base::binary); if(!fin.is_open()) { staff st[5]={ {10001,\"张三\",\"男\",35,\"总经理\",\"13800000001\",20000,\"父母,弟弟,姐姐\",1},
{10002,\"李四\",\"男\",32,\"副总经理\",\"13800000002\",12000,\"父母,兄长\",1},
{10003,\"
王
婷
\",\"
女
\",25,\"
人
事
秘
书\",\"13800000003\",10000,\"---略---\",2},
{10004,\"陈六\",\"女\",25,\"财务人员\",\"13800000004\",8000,\"---略---\",3},
{10005,\"Obama\",\"
男
\",23,\"
普
通
职
工\",\"138000000005\",7000,\"---略---\",0}}; ofstream fout(file,ios_base::out|ios_base::binary);
for(int i=0;i>n; switch(n) { case \'1\':eatline();find();break; case \'2\':add();break; case \'3\':del();break; case \'4\':change();break; case \'5\':exit(EXIT_FAILURE);
\\n \";
default:{
cout
cin.clear();
while(cin.get()!=\'\\n\');
continue; }
清除已经输入的内容,程序选择
}
system(\"pause\");
system(\"cls\");
cin.clear(); }
return 0; }
//如果选择错误,cin.clear等语句