当前位置:文档之家› 公司员工管理系统(c语言)

公司员工管理系统(c语言)

#include
#include
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include
template //采用链表结构 此为链表结点
struct Node{
T *info; //DataType 为指向T类型的指针
Node* link;
~Node(){ //析构函数 结束时释放空间
delete info;
}
};
template // 链表类
class LinkList
{
public:
LinkList(){ //构造函数
llist=new Node;
llist->link=0;
}
~LinkList(){ //析构函数
Node*p=llist->link;
Node*q;
while(p!=0){
q=p;
p=p->link;
delete q;
}
delete llist;
}
public:
void insert(T* px){ //插入链表操作
Node *q=new Node;
Node *p=llist;
if(q==0){cout<<"Out of space!!!"<return;}
else {
q->info=px;
while(p->link!=0){
p=p->link;
}
p->link=q;
q->link=0;
}
}
void find_t(char app[],int i=1)//遍历链表查找符合条件的元素
{ // 并将符合条件元素指针放入
my_vc.clear(); // 容器my_vc中
Node *p=llist;
while(p->link!=0){
if(p->link->info->Equal(app,i)){
my_vc.push_back(p->link->info);
}
p=p->link;
}
}
void delete_t(char app[],int i=1)// 遍历链表查找符合条件的元素
{ // 并将符合条件元素删除
Node *p=llist;
Node *q;
while(p->link!=0){
if(p->link->info->Equal(app,i)){
q=p->link;
p->link=p->link->link;
delete q;
}
else{p=p->link; }
}
}
void Do(void (*p)(T *)) //对my_vc中的每个元素调用函数p
{
typename vector::iterator it;
for(it=my_vc.begin();it!=my_vc.end();++it){
p(*it);
}
}
void sort(int i) //对链表中的元素以某种方式排序
{
int j=1;
if(llist->link==0) return;
Node *p,*q;
T *temp;
p=llist;
p=p->link;
q=p;
while(q->link!=0)
{

while(p->link!=0)
{

if(q->info->Lessthan(*p->link->info,i))
p=p->link;
else{
temp=q->info;
q->info=p->link->info;
p->link->info=temp;
p=p->link;

}
}
q=q->link;
p=q;
}
}
void Do_something(void (*p)(T *)) //遍历链表对链表中每个元素调用函数p
{
Node *p1=llist;
while(p1->link!=0){
p(p1->link->info);
p1=p1->link;
}
}
private:
Node *llist; //指向链表表头的指针
vector my_vc; //可变大小的数组
};
typedef struct //存储员工信息的结构
{
char name[10]; //姓名
char sex[6]; //性别
char born_year[10]; //出生年月
char work_year[10]; //工作年月
char school_record[10]; //学历
char position[10]; //职务
char home[25]; //住址
char telephone[20]; //电话

} staff;
struct staff_Node //员工信息的外覆类 提供相应的方法
{
staff peo; //员工信息对象

bool Lessthan(staff_Node &node,int i)//小于操作 通过第二参数选择
{ //比较行为
switch(i)
{
case 1:
return strcmp(https://www.doczj.com/doc/127849326.html,,https://www.doczj.com/doc/127849326.html,)<0;break;
case 2:
return strcmp(peo.sex,node.peo.sex)<0;break;
case 3:
return strcmp(peo.born_year,node.peo.born_year)<0;break;
case 4:
return strcmp(peo.work_year,node.peo.work_year)<0;break;
case 5:
return strcmp(peo.school_record,node.peo.school_record)<0;break;
case 6:
return strcmp(peo.position,node.peo.position)<0;break;
case 7:
return strcmp(peo.home,node.peo.home)<0;break;
case 8:
return strcmp(peo.telephone,node.peo.telephone)<0;break;
default:
return false;
}
}
bool Equal(char app[],int i) //相等比较操作 通过第二参数选择
{ //比较行为
switch(i)
{
case 1:
return strcmp(app,https://www.doczj.com/doc/127849326.html,)==0;break;
case 2:
return strcmp(app,peo.sex)==0;break;
case 3:
return strcmp(app,peo.born_year)==0;break;
case 4:
return strcmp(app,peo.work_year)==0;break;
case 5:
return strcmp(app,peo.school_record)==0;break;
case 6:
return strcmp(app,peo.position)==0;break;
case 7:
return strcmp(app,peo.home)==0;break;
case 8:
return strcmp(app,peo.telephone)==0;break;
default:
return false;
}
}
};

void ReadIn(staff_Node *s)//从屏幕读入信息
{ //存入s所指向的结构
cout<<"\n请输入姓名:"<cin>>s->https://www.doczj.com/doc/127849326.html,;
cout<<"\n请输入性别:"<cin>>s->peo.sex;
cout<<"\n请输入出生年月:"<cin>>s->peo.born_year;
cout<<"\n请输入工作年月:"<cin>>s->peo.work_year;
cout<<"\n请输入学历:"<cin>>s->peo.school_record;
cou

t<<"\n请输入职务:"<cin>>s->peo.position;
cout<<"\n请输入住址:"<cin>>s->peo.home;
cout<<"\n请输入电话:"<cin>>s->peo.telephone;
}
void wwout(staff_Node *p)//将p所指向的信息输出到屏幕
{
cout<<"姓名:"<puts(p->https://www.doczj.com/doc/127849326.html,);
cout<<"性别:"<puts(p->peo.sex);
cout<<"出生年月:"<puts(p->peo.born_year);
cout<<"工作年月:"<puts(p->peo.work_year);
cout<<"学历:"<puts(p->peo.school_record);
cout<<"职务:"<puts(p->peo.position);
cout<<"家庭住址:"<puts(p->peo.home);
cout<<"电话号码:"<puts(p->peo.telephone);
}
void IIn(LinkList &mylist){// 创建一个新节点
staff_Node *p=new staff_Node; // 从屏幕上读入信息
ReadIn(p); //将此节点插入链表中
mylist.insert(p);
}
void find_m(LinkList &mylist){//查找符合某些条件的员工信息
cout<<"姓名查找输入 1 "<cout<<"性别查找输入 2 "<cout<<"出生年月查找 3 "<cout<<"工作年月查找输入 4 "<cout<<"学历查找输入 5"<cout<<"职务查找输入 6"<cout<<"家庭住址查找输入 7"<cout<<"电话查找输入 8"<int i;
char app[40];
cin>>i;
cout<<"查询信息:"<gets(app);
mylist.find_t(app,i);
mylist.Do(wwout);
}
void read_File(LinkList &mylist)//从文件中读入信息存入链表
{
ifstream infile("F:\\a.txt");
char buffer[200];
infile.getline(buffer,200);
while(infile)
{staff_Node *s=new staff_Node;
infile>>s->https://www.doczj.com/doc/127849326.html,;
if(strcmp(s->https://www.doczj.com/doc/127849326.html,,"")==0){
delete s;
return;
}
infile>>s->peo.sex;
infile>>s->peo.born_year;
infile>>s->peo.work_year;
infile>>s->peo.school_record;
infile>>s->peo.position;
infile>>s->peo.home;
infile>>s->peo.telephone;


cout<https://www.doczj.com/doc/127849326.html,<cout<peo.sex<cout<peo.born_year<cout<peo.work_year<cout<peo.school_record<cout<peo.position<cout<peo.home<cout<peo.telephone<cout<mylist.insert(s);


}
infile.close();
}
void write_File(staff_Node *s)//将s所指向的结点以固定格式
{ //写入文件
char app[110];
int i,j;

for(int index=0;index<109;index++)
{
app[index]=' ';
}
app[109]='\0';
for(i=0;i<10;++i){
app[i]=s->https://www.doczj.com/doc/127849326.html,[i];
if(app[i]=='\0'){
app[i]=' ';
i=10;
}
}
for(j=10;j<16;++j){
app[j]=s->peo.sex[j-10];
if

(app[j]=='\0')
{
app[j]=' ';
j=16;
}
}
for(j=16;j<26;++j){
app[j]=s->peo.born_year[j-16];
if(app[j]=='\0')
{
app[j]=' ';
j=26;
}
}
for(j=26;j<36;++j){
app[j]=s->peo.work_year[j-26];
if(app[j]=='\0')
{
app[j]=' ';
j=36;
}
}
for(j=36;j<46;++j){
app[j]=s->peo.school_record[j-36];
if(app[j]=='\0')
{
app[j]=' ';
j=46;
}

}
for(j=46;j<56;++j){
app[j]=s->peo.position[j-46];
if(app[j]=='\0')
{
app[j]=' ';
j=56;
}

}
for(j=56;j<81;++j){
app[j]=s->peo.home[j-56];
if(app[j]=='\0')
{
app[j]=' ';
j=81;
}

}
for(j=81;j<101;++j){
app[j]=s->peo.telephone[j-81];
if(app[j]=='\0')
{
app[j]=' ';
j=101;
}

}
ofstream outfile("F:\\a.txt",ios::app);
outfile<outfile.close();
}
void Dele(LinkList &mylist)//删除符合条件的员工信息
{
cout<<"姓名删除输入 1 "<cout<<"性别删除输入 2 "<cout<<"出生年月删除输入 3 "<cout<<"工作年月删除输入 4 "<cout<<"学历删除输入 5"<cout<<"职务删除输入 6"<cout<<"家庭住址删除输入 7"<cout<<"电话删除输入 8"<int i;
char app[40];
cin>>i;
cout<<"删除信息:"<gets(app);
mylist.delete_t(app,i);
}
void changeSingle(staff_Node *s){//修改s所指向员工的信息
char app[40];
int i;
while(true)
{
cout<<"姓名修改 1 "<cout<<"性别修改 2 "<cout<<"出生年月查找 3 "<cout<<"工作年月修改 4 "<cout<<"学历修改 5"<cout<<"职务修改 6"<cout<<"家庭住址修改 7"<cout<<"电话修改 8"<cout<<"退出! 9"<cin>>i;
if(i==9)return;
cout<<"修改内容:";
gets(app);
switch(i){
case 1:strcpy(s->https://www.doczj.com/doc/127849326.html,,app);break;
case 2:strcpy(s->peo.sex,app);break;
case 3:strcpy(s->peo.born_year,app);break;
case 4:strcpy(s->peo.work_year,app);break;
case 5:strcpy(s->peo.school_record,app);break;
case 6:strcpy(s->peo.position,app);break;
case 7:strcpy(s->peo.home,app);break;
case 8:strcpy(s->peo.telephone,app);break;
case 9:return;break;
default:break;
}
}
}
void Change(LinkList &mylist)//查找相应信息对应的员工并修改
{
cout<<"输入要修改信息的职工姓名: "<char app[20];
gets(app);
mylist.find_t(app,1);
mylist.Do(changeSingle);

}

void my_sort(LinkList &mylist)//选择某种方式排序链表中的元素
{
cout<<"姓名排序输入 1 "<cout<<"性别排序输入

2 "<cout<<"出生年月排序输入 3 "<cout<<"工作年月排序输入 4 "<cout<<"学历排序输入 5"<cout<<"职务排序输入 6"<cout<<"家庭住址排序输入 7"<cout<<"电话排序输入 8"<int i;
cin>>i;
mylist.sort(i);
cout<<"ddd";
mylist.Do_something(wwout);
}

int main(int argc, char *argv[])
{
int i;
LinkList mylist;
while(true)
{ cout<<"0 载入已有职工信息"<cout<<"1 新增职工"<cout<<"2 查找信息"<cout<<"3 删除信息"<cout<<"4 修改 "<cout<<"5 排序" <cout<<"6 退出" <cin>>i;
switch(i){
case 0:read_File(mylist);;break; //从文件读入
case 1:IIn(mylist);break; //从屏幕输入
case 2:find_m(mylist);break; //查找员工并输出到屏幕
case 3:Dele(mylist);break; //删除指定员工信息
case 4:Change(mylist);break; //改变员工信息
case 5:my_sort(mylist);break; //排序
case 6:{remove("F:\\a.txt"); //将内存中信息写入文件
char qq[]={"姓名 性别 出生年月 工作年月 学历 职务 住址 电话"};
ofstream outfile("F:\\a.txt",ios::app);
outfile<outfile.close();
mylist.Do_something(write_File);exit(0);break;
}
default:break;
}
}
return 0;
}

相关主题
文本预览
相关文档 最新文档