公司员工管理系统(c语言)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#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
Node
while(p!=0){
q=p;
p=p->link;
delete q;
}
delete llist;
}
public:
void insert(T* px){ //插入链表操作
Node
Node
if(q==0){cout<<"Out of space!!!"<
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
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
Node
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
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
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
while(p1->link!=0){
p(p1->link->info);
p1=p1->link;
}
}
private:
Node
vector
};
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(,)<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,)==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请输入姓名:"<
cout<<"\n请输入性别:"<
cout<<"\n请输入出生年月:"<
cout<<"\n请输入工作年月:"<
cout<<"\n请输入学历:"<
cou
t<<"\n请输入职务:"<
cout<<"\n请输入住址:"<
cout<<"\n请输入电话:"<
}
void wwout(staff_Node *p)//将p所指向的信息输出到屏幕
{
cout<<"姓名:"<
cout<<"性别:"<
cout<<"出生年月:"<
cout<<"工作年月:"<
cout<<"学历:"<
cout<<"职务:"<
cout<<"家庭住址:"<
cout<<"电话号码:"<
}
void IIn(LinkList
staff_Node *p=new staff_Node; // 从屏幕上读入信息
ReadIn(p); //将此节点插入链表中
mylist.insert(p);
}
void find_m(LinkList
cout<<"姓名查找输入 1 "<
char app[40];
cin>>i;
cout<<"查询信息:"<
mylist.find_t(app,i);
mylist.Do(wwout);
}
void read_File(LinkList
{
ifstream infile("F:\\a.txt");
char buffer[200];
infile.getline(buffer,200);
while(infile)
{staff_Node *s=new staff_Node;
infile>>s->;
if(strcmp(s->,"")==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<
}
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->[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<
}
void Dele(LinkList
{
cout<<"姓名删除输入 1 "<
char app[40];
cin>>i;
cout<<"删除信息:"<
mylist.delete_t(app,i);
}
void changeSingle(staff_Node *s){//修改s所指向员工的信息
char app[40];
int i;
while(true)
{
cout<<"姓名修改 1 "<
if(i==9)return;
cout<<"修改内容:";
gets(app);
switch(i){
case 1:strcpy(s->,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
{
cout<<"输入要修改信息的职工姓名: "<
gets(app);
mylist.find_t(app,1);
mylist.Do(changeSingle);
}
void my_sort(LinkList
{
cout<<"姓名排序输入 1 "<
2 "<
cin>>i;
mylist.sort(i);
cout<<"ddd";
mylist.Do_something(wwout);
}
int main(int argc, char *argv[])
{
int i;
LinkList
while(true)
{ cout<<"0 载入已有职工信息"<
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<
mylist.Do_something(write_File);exit(0);break;
}
default:break;
}
}
return 0;
}