C语言课程设计 职工信息管理系统 结构体数组实现程序源代码

时间:2019-05-14 01:16:56下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言课程设计 职工信息管理系统 结构体数组实现程序源代码》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言课程设计 职工信息管理系统 结构体数组实现程序源代码》。

第一篇:C语言课程设计 职工信息管理系统 结构体数组实现程序源代码

//C语言课程设计 职工信息管理系统—结构体数组实现 #include #include #include

struct employee { char num[10];char name[15];char sex[5];char bm[20];char zc[20];int gz;};

int read_file(struct employee em[]);void menu();void write_file(struct employee em[]);void add();void select();//查看职工所有信息 void zc_query();//按职称查询 void num_del();//按工号删除 void tongji();//统计 void sort();//排序

void num_modify();//按工号修改职工信息 void save();//保存信息 void disp();//显示职工信息

void fh();//返回主菜单

struct employee em[300];//这个数组用来保存所有的职工信息 和文件里面的一致

int Number=0;//记录总的职工人数 也就是数组/文件里面的职工人数

void menu(){ printf(“t***********************************************************************n”);printf(“t* *n”);printf(“t*

职工信息管理系统_结构体数组实现 *n”);printf(“t* *n”);printf(“t* [1] 增加职工信息 [2] 查看职工信息 *n”);printf(“t* [3] 查找职工信息 [4] 删除职工信息 *n”);printf(“t* [5] 统计 [6] 职工工资排列 *n”);printf(“t* [7] 修改职工信息 [8] 保存职工信息 *n”);printf(“t* [9] 显示职工信息 [0] 退出系统 *n”);printf(“t* *n”);printf(“t***********************************************************************n”);} void main(){ int choose=0;FILE *fp=NULL;char yesorno;

if((fp=fopen(“employee1.txt”,“rb+”))==NULL){ printf(“n=========>提示:文件不存在,是否要创建一个?(y/n)n”);scanf(“%c”,&yesorno);if(yesorno=='y'||yesorno=='Y'){

//这里仅为了建立文件

fp=fopen(“employee1.txt”,“wb+”);

fclose(fp);//关闭fp所指的文件,释放文件缓冲区

} else

exit(0);} else {

Number=read_file(em);//要是文件已经有数据 将数据初始化到数组中 } system(“cls”);while(1){ menu();printf(“tt====>请选择:”);scanf(“%d”,&choose);system(“cls”);switch(choose){ case 0:

exit(0);//退出

break;

case 1:

add();

fh();//增加职工信息 break;

case 2:

select();

fh();//查看职工信息 break;

case 3:

zc_query();

fh();// 查找

break;

case 4:

num_del();

fh();//删除

break;

case 5:

tongji();

fh();//统计 break;case 6:

sort();

fh();//排序 break;case 7:

num_modify();

fh();//修改后返回 break;

case 8:

save();

fh();//保存

break;

case 9:

disp();

fh();

break;//显示

default:

break;

} fflush(stdin);getchar();system(“cls”);} } void save(){ printf(“t=====程序在运行时已自动保存.....n”);} void fh(){ printf(“t===>按Enter键返回主菜单n”);}

void num_modify()//修改职工信息 { FILE *fp=NULL;char gh[60];int i=0;int changeIndex=0;//changeIndex 改变标记

int index=0;printf(“请输入要修改的职工工号:”);scanf(“%s”,gh);for(i=0;i

if(strcmp(gh,em[i].num)==0)//比较输入工号和数组中已有工号

{

changeIndex=i;//保存要修改的人的下标

break;

}

} printf(“t工号t姓名t性别t部门t职称t工资n”);printf(“t%st%st%st%st%st%dnn”,em[changeIndex].num,em[changeIndex].name,em[changeIndex].sex,em[changeIndex].bm,em[changeIndex].zc,em[changeIndex].gz);printf(“请重新输入该职工信息”);printf(“工号:”);scanf(“%s”,em[changeIndex].num);printf(“姓名:”);scanf(“%s”,em[changeIndex].name);printf(“性别:”);scanf(“%s”,em[changeIndex].sex);printf(“部门:”);scanf(“%d”,em[changeIndex].bm);printf(“职称:”);scanf(“%s”,em[changeIndex].zc);printf(“工资:”);scanf(“%d”,&em[changeIndex].gz);

//信息修改后重新更新文件里面的数据 以保持数据一致性

fp=fopen(“employee1.txt”,“wb+”);for(i=0;i

fwrite(&em[i],sizeof(struct employee),1,fp);//把ptr所指向n*size个字节输入到fp所指向的文件中

} fclose(fp);printf(“t=======>修改成功n”);}

void disp()//输出所有职工信息 { int i=0;for(i=0;i

printf(“t%st%st%st%st%st%dnn”,em[i].num,em[i].name,em[i].sex,em[i].bm,em[i].zc,em[i].gz);} }

void sort()//排序 {

struct employee t;

int wantNUmber=0;int i=0;int j=0;int k=0;for(i=0;i

for(j=i+1;j

{

if(em[j].gz>em[k].gz)

k=j;

}

if(k!=i)

{

t=em[i];

em[i]=em[k];

em[k]=t;

}

}

printf(“你想输出前几名职工的信息:”);scanf(“%d”,&wantNUmber);if(wantNUmber>Number){

wantNUmber=Number;}

printf(“t工号t姓名t性别t部门t职称t工资n”);for(i=0;i

printf(“t%st%st%st%st%st%dnn”,em[i].num,em[i].name,em[i].sex,em[i].bm,em[i].zc,em[i].gz);}

}

void tongji()//统计 {

int i,m,k,max,min;double sum=0.0;for(i=0;i

if(em[i].gz>max)

m=i;

max=em[m].gz;} printf(“最高工资为:%dn”,max);printf(“t%st%st%st%st%st%dnn”,em[m].num,em[m].name,em[m].sex,em[m].bm,em[m].zc,em[m].gz);i=0;k=0;min=0;min=em[0].gz;for(i=1;i

if(em[i].gz

k=i;

min=em[k].gz;} printf(“最低工资:%dn”,min);printf(“t%st%st%st%st%st%dnn”,em[k].num,em[k].name,em[k].sex,em[k].bm,em[k].zc,em[k].gz);

}

void num_del()//按工号删除 { FILE *fp=NULL;char gh[60];int i=0;int j=0;printf(“请输入要删除的职工工号:”);scanf(“%d”,gh);for(i=0;i

if(strcmp(gh,em[i].num)==0)//如果查找到就删除

{

for(j=i;j

{

em[j]=em[j+1];

}

Number--;

} }

//将剩余数据写入文件 重新一写的方式打开文件 把以前的数据擦除了

fp=fopen(“employee1.dat”,“wb”);for(i=0;i

fwrite(&em[i],sizeof(struct employee),1,fp);} fclose(fp);printf(“删除成功;n”);}

void zc_query()//按职称查找 {

char zc[20];int i=0;printf(“请输入要查找职工职称:”);scanf(“%s”,zc);system(“cls”);printf(“t工号t姓名t性别t部门t职称t工资n”);for(i=0;i

if(strcmp(zc,em[i].zc)==0)

{

printf(“t%st%st%st%st%st%dnn”,em[i].num,em[i].name,em[i].sex,em[i].bm,em[i].zc,em[i].gz);

} } }

void select()//查看职工 { int i=0;printf(“以下是全部职工信息n”);printf(“t工号t姓名t性别t部门t职称t工资n”);for(i=0;i

printf(“t%st%st%st%st%st%dnn”,em[i].num,em[i].name,em[i].sex,em[i].bm,em[i].zc,em[i].gz);} }

void add()//增加职工 { int numberTemp=0;int i=0;struct employee temp;//临时保存信息

printf(“请输入要增加职工信息的个数:”);scanf(“%d”,&numberTemp);for(i=0;i

printf(“输入第%d个职工信息n”,i+1);

printf(“工号:”);

scanf(“%s”,temp.num);

printf(“姓名:”);

scanf(“%s”,temp.name);

printf(“性别:”);

scanf(“%s”,temp.sex);

printf(“部门:”);

scanf(“%s”,temp.bm);

printf(“职称:”);

scanf(“%s”,temp.zc);

printf(“工资:”);

scanf(“%d”,&temp.gz);

em[Number++]=temp;//将刚添加的写入到数组

write_file(&temp);//将刚添加的写入到文件

} printf(“添加成功n”);}

void write_file(struct employee *em){ FILE *fp=NULL;fp=fopen(“employee1.txt”,“rb+”);fwrite(em,sizeof(struct employee),1,fp);fclose(fp);}

int read_file(struct employee em[]){ FILE *fp=NULL;int i=0;fp=fopen(“employee1.txt”,“rb”);while(fread(&em[i],sizeof(struct employee),1,fp))

i++;fclose(fp);return i;}

第二篇:C语言课程设计 职工信息管理系统 单链表实现程序源代码

//C语言课程设计 职工信息管理系统—单链表实现 #include “stdio.h” #include “stdlib.h” #include “string.h”

int saveflag=0;/*是否需要存盘的标志变量*/

struct employee { char name[15];char num[10];/* 工号 */ char sex[4];char bm[15];char zc[20];int gz;

};

typedef struct node { struct employee data;struct node *next;}Node,*Link;

//Link l(注意是:字母l不是数字1)void add(Link l);void disp(Link l);//查看职工所有信息 void del(Link l);//删除功能

Node* Locate(Link l,char findmess[],char nameornum[]);

void Qur(Link l);//查询功能 void Tongji(Link l);//统计 void Sort(Link l);//排序 void Modify(Link l);//修改功能

void save(Link l);//将单链表l中的数据写入文件

void printe(Node *p);//本函数用于打印链表中某个节点的数据内容 */

//以下4个函数用于输出中文标题 void printstart();void Wrong();void Nofind();void printc();

void menu(){ printf(“t*****************************************************************n”);printf(“t* *n”);printf(“t*

职工信息管理系统_结构体数组实现 *n”);printf(“t* *n”);printf(“t* [1] 增加职工信息 [2] 删除职工信息 *n”);printf(“t* [3] 查询职工信息 [4] 修改职工信息 *n”);printf(“t* [5] 插入职工记录 [6] 统计职工记录 *n”);printf(“t* [7] 排序 [8] 保存职工信息 *n”);printf(“t* [9] 显示数据 [0] 退出系统 *n”);printf(“t* *n”);printf(“t*****************************************************************n”);} //void menu菜单结束

void Disp(Link l)//显示单链表l中存储的职工记录,内容为employee结构中定义的内容 { int count=0;Node *p;p=l->next;// l存储的是单链表中头结点的指针,该头结点没有存储职工信息,指针域指向的后继结点才有职工信息

if(!p)/*p==NULL,NUll在stdlib中定义为0*/ {

printf(“n=====>提示:没有职工记录可以显示!n”);

return;}

printf(“tttt显示结果n”);printstart();//打印横线

printc();//打印各学科标题

printf(“n”);

while(p)//逐条输出链表中存储的职工信息

{

printe(p);

p=p->next;} printstart();printf(“n”);} //void Disp结束

void printstart(){ printf(“---------n”);}

void Wrong(){ printf(“n=====>提示:输入错误!n”);}

void Nofind(){ printf(“n=====>提示:没有找到该职工!n”);}

void printc()/* 本函数用于输出中文 */ { printf(“ 工号t 姓名 性别 部门 职称 工资 总工资平均工资n”);}

void printe(Node *p)/* 本函数用于打印链表中某个节点的数据内容 */ { printf(“%-12s%st%st%dt%dt%dt %dt %dn”,p->data.num,p->data.name,p->data.sex,p->data.bm,p->data.zc,p->data.gz);}

//Locate(l,findmess,“num”);/* 该函数用于定位连表中符合要求的结点,并返回该指针 */ Node* Locate(Link l,char findmess[],char zcornum[]){ Node *r;if(strcmp(zcornum,“num”)==0)/* 按工号查询 */ {

r=l->next;

while(r!=NULL)

{

if(strcmp(r->data.num,findmess)==0)/*若找到findmess值的工号*/

return r;

r=r->next;

} } else if(strcmp(zcornum,“zc”)==0)/* 按职称查询 */ {

r=l->next;

while(r!=NULL)

{

if(strcmp(r->data.zc,findmess)==0)/*若找到findmess值的职工职称*/

return r;

r=r->next;

} } return 0;/*若未找到,返回一个空指针*/ }

//add()函数中,无节点时,r指向list头,有节点时,r指向末尾节点 void Add(Link l)/* 增加职工 */ { Node *p,*r,*s;/*实现添加操作的临时的结构体指针变量*/ char num[10];int flag=0;r=l;s=l->next;//链表没有节点时,s=null;/链表有节点时,指向第一个职工节点

while(r->next!=NULL)//如果存在后继结点时,r指针后移一个

r=r->next;/*将指针移至于链表最末尾,准备添加记录*/

while(1){

printf(“请你输入工号(以'0'返回上一级菜单:)”);

scanf(“%s”,num);

if(strcmp(num,“0”)==0)//输入'0',跳出while(1),即跳出add()函数

break;

s=l->next;//作用? 每次从第一个节点开始找,看num是否重复。

while(s)//工号重复时,返回主菜单

{

if(strcmp(s->data.num,num)==0)

{

printf(“=====>提示:工号为'%s'的职工已经存在,若要修改请你选择'4 修改'!n”,num);

flag=1;//break;

return;

}

s=s->next;

} //while(s)

p=(Node *)malloc(sizeof(Node));//生成没赋值的新节点 p

strcpy(p->data.num,num);

printf(“请你输入姓名:”);

scanf(“%s”,p->data.name);

getchar();

printf(“请你输入性别:”);

scanf(“%s”,p->data.sex);

getchar();

printf(“请你输入职工所在部门:”);

scanf(“%d”,&p->data.bm);

getchar();

printf(“请你输入职工职称:”);

scanf(“%d”,&p->data.zc);

getchar();

printf(“请你输入职工工资:”);

scanf(“%d”,&p->data.gz);

getchar();

/* 信息输入已经完成 */

p->next=NULL;/*表明这是链表的尾部结点*/

r->next=p;/*将新建的结点加入链表尾部中*/

r=p;

saveflag=1;} //while(1)} //void Add增加结束

void Del(Link l)/* 删除 */ { int sel;Node *p,*r;/*实现删除操作的临时的结构体指针变量*/ char findmess[20];

if(!l->next)//当list无后继结点时,提示和结束返回del(){

printf(“n=====>提示:没有记录可以删除!n”);

return;}

printf(“n=====>1按工号删除n=====>2按姓名删除n”);scanf(“%d”,&sel);if(sel==1)//按工号删除

{

printf(“请你输入要删除的工号:”);

scanf(“%s”,findmess);

p=Locate(l,findmess,“num”);

if(p)

{

r=l;

while(r->next!=p)

r=r->next;//从第一个结点找起,直到发现r->next=p, 删除结点,跳出循环

r->next=p->next;//r r->next(p)p->next

free(p);

printf(“n=====>提示:该职工已经成功删除!n”);

saveflag=1;

}

else

Nofind();//显示一句话

} //if(sel==1)else if(sel==2)//按姓名删除

{

是待

printf(“请你输入要删除的姓名:”);

scanf(“%s”,findmess);

p=Locate(l,findmess,“name”);

if(p)

{

r=l;

while(r->next!=p)

r=r->next;

r->next=p->next;//r r->next(p)p->next

free(p);

printf(“n=====>提示:该职工已经成功删除!n”);

saveflag=1;

}

else

Nofind();} //if(sel==2)else

Wrong();//显示输入错误的话 } //void Del删除结束

void Qur(Link l)//查询功能 { int sel;char findmess[20];Node *p;//实现查询操作的临时的结构体指针变量

if(!l->next){

printf(“n=====>提示:没有资料可以查询!n”);

return;}

printf(“n=====>1按工号查找n=====>2按职称查找n”);scanf(“%d”,&sel);

if(sel==1)/* 工号 */ {

printf(“请你输入要查找的工号:”);

scanf(“%s”,findmess);

p=Locate(l,findmess,“num”);

if(p)

{

printf(“tttt查找结果n”);

printstart();//打印横线

printc();//打印各学科标题

printe(p);//打印p结点各个数据成员的值

printstart();//打印横线

}

else

Nofind();} //if(sel==1)

else if(sel==2)/* 职称 */ {

printf(“请你输入要查找的职称:”);

scanf(“%s”,findmess);

p=Locate(l,findmess,“zc”);

if(p)

{

printf(“tttt查找结果n”);

printstart();

printc();

printe(p);

printstart();

}

else

Nofind();} else

Wrong();} //void Qur查询结束

void Modify(Link l)//修改功能 { Node *p;char findmess[20];if(!l->next){

printf(“n=====>提示:没有资料可以修改!n”);

return;}

printf(“请你输入要修改的职工工号:”);scanf(“%s”,findmess);p=Locate(l,findmess,“num”);

if(p){

printf(“请你输入新工号(原来是%s):”,p->data.num);

scanf(“%s”,p->data.num);

printf(“请你输入新姓名(原来是%s):”,p->data.name);

scanf(“%s”,p->data.name);

getchar();

printf(“请你输入新性别(原来是%s):”,p->data.sex);

scanf(“%s”,p->data.sex);

getchar();

printf(“请你输入新的部门(原来是%s):”,p->data.bm);

scanf(“%d”,&p->data.bm);

printf(“请你输入新的职称(原来是%s):”,p->data.zc);

scanf(“%d”,&p->data.zc);

getchar();

printf(“请你输入新的工资(原来是%d):”,p->data.gz);

scanf(“%d”,&p->data.gz);

printf(“n=====>提示:资料修改成功!n”);

//shoudsave=1;} else

Nofind();//if(p)结束

} //void Modify(Link l)//修改功能结束

//插入记录:按工号查询到要插入的节点的位置,然后在该工号之后插入一个新节点。

void Insert(Link l){ Node *s,*r,*p;/*p指向插入位置,p指新插入记录节点*/ char ch,new_num[10],old_num[10];//old_num[]保存插入点位置之前的工号,new_num[]保存输入的新记录的工号

int flag=0;s=l->next;system(“cls”);Disp(l);

while(1){

//stringinput(s,10,“please input insert location after the Number:”);

printf(“请你输入已存在的工号(以'0'返回上一级菜单:)”);

scanf(“%s”,old_num);

if(strcmp(old_num,“0”)==0)//输入'0',跳出while(1),即跳出Insert()函数

return;

s=l->next;//作用? 每次从第一个节点开始找

flag=0;

while(s)/*查询该工号是否存在,flag=1表示该工号存在*/

{

if(strcmp(s->data.num,old_num)==0)

{

flag=1;

break;

}

s=s->next;

}

if(flag==1)

break;/*若工号存在,则进行插入之前的新记录的输入操作*/

else

{

getchar();

printf(“n=====>The number %s is not existing,try again?(y/n):”,old_num);

scanf(“%c”,&ch);

if(ch=='y'||ch=='Y')

{continue;}

else

{return;} //回主菜单

}

}//while(1)/*以下新记录的插入新节点,工号不能跟已存在的工号相同,操作与Add()相同*/

printf(“请你输入待插入的工号(以'0'返回上一级菜单:)”);scanf(“%s”,new_num);if(strcmp(new_num,“0”)==0)//输入'0',跳出while(1),即跳出add()函数

return;s=l->next;//作用? 每次从第一个节点开始找,看num是否重复。

while(s)//工号重复时,返回主菜单

{

if(strcmp(s->data.num,new_num)==0)

{

printf(“=====>提示:工号为'%s'的职工已经存在'!n”,new_num);

flag=1;

return;

}

s=s->next;} //while(s)

p=(Node *)malloc(sizeof(Node));if(!p){

printf(“n allocate memory failure ”);/*如没有申请到,打印提示信息*/

return;/*返回主界面*/ }

strcpy(p->data.num,new_num);printf(“请你输入姓名:”);scanf(“%s”,p->data.name);getchar();printf(“请你输入性别:”);scanf(“%s”,p->data.sex);getchar();printf(“请你输入部门:”);scanf(“%d”,&p->data.bm);getchar();printf(“请你输入职称:”);scanf(“%d”,&p->data.zc);getchar();printf(“请你输入工资:”);scanf(“%d”,&p->data.gz);getchar();// 信息输入已经完成

p->next=NULL;/*表明这是链表的尾部结点*/

saveflag=1;/*在main()有对该全局变量的判断,若为1,则进行存盘操作*/ /*将指针赋值给r,因为l中的头节点的下一个节点才实际保存着学生的记录*/

r=l->next;while(1){

if(strcmp(r->data.num,old_num)==0)/*在链表中插入一个节点*/

{

p->next=r->next;

r->next=p;

break;

}

r=r->next;}// while(1),r作为查询指针,依次从第一个节点找起,找到后 跳出 while(1)循环

Disp(l);printf(“nn”);// getchar();

}

void Tongji(Link l)//统计 { Node *max,*min;/*用于指向工资最高的节点*/ Node *t=l->next;if(!t){

system(“cls”);

printf(“n=====>Not employee record!n”);

getchar();

return;} system(“cls”);Disp(l);max=min=t;while(t){

if(t->data.gz>=max->data.gz)max=t;

if(t->data.gz<=min->data.gz)min=t;

t=t->next;

printf(“最高工资为:%dn”,max);

printf(“t%st%st%st%st%st%dnn”,t->data.num,t->data.name,t->data.sex,t->data.bm,t->data.zc,t->data.gz);printf(“最低工资为:%dn”,min);

printf(“t%st%st%st%st%st%dnn”,t->data.num,t->data.name,t->data.sex,t->data.bm,t->data.zc,t->data.gz);} }

void Sort(Link l)//排序 { Link ll;Node *p,*rr,*s;int i=0;if(l->next==NULL){ system(“cls”);printf(“n=====>Not employee record!n”);getchar();return;} ll=(Node*)malloc(sizeof(Node));/*用于创建新的节点*/ if(!ll){

printf(“n allocate memory failure ”);/*如没有申请到,打印提示信息*/

return;/*返回主界面*/ } ll->next=NULL;system(“cls”);Disp(l);/*显示排序前的所有职工记录*/ p=l->next;while(p)/*p!=NULL*/ {

s=(Node*)malloc(sizeof(Node));/*新建节点用于保存从原链表中取出的节点信息*/

if(!s)/*s==NULL*/

{

printf(“n allocate memory failure ”);/*如没有申请到,打印提示信息*/

return;/*返回主界面*/

}

s->data=p->data;/*填数据域*/

s->next=NULL;/*指针域为空*/

rr=ll;

/*rr链表于存储插入单个节点后保持排序的链表,ll是这个链表的头指针,每次从头开始查找插入位置*/

while(rr->next!=NULL && rr->next->data.gz>=p->data.gz)

{rr=rr->next;} /*指针移至总分比p所指的节点的总分小的节点位置*/

if(rr->next==NULL)/*若新链表ll中的所有节点的总分值都比p->data.gz大时,就将p所指节点加入链表尾部*/

rr->next=s;

else /*否则将该节点插入至第一个总分字段比它小的节点的前面*/

{

s->next=rr->next;

rr->next=s;

}

p=p->next;/*原链表中的指针下移一个节点*/ }

l->next=ll->next;/*ll中存储是的已排序的链表的头指针*/

Disp(l);saveflag=1;printf(“n =====>sort complete!n”);}

void Save(Link l){ FILE* fp;Node *p;//实现保存操作的临时的结构体指针变量

int flag=1,count=0;

fp=fopen(“employee.txt”,“wb”);if(fp==NULL){

printf(“n=====>提示:重新打开文件时发生错误!n”);

return;}

p=l->next;//p指向第一个记录结点

while(p){

if(fwrite(p,sizeof(Node),1,fp)==1)//将第一个记录结点值写入文件

{

p=p->next;//依次写入第二个结点的值,count++;//文件的记录数+1

}

else

{

flag=0;

break;

} } //while(p)

if(count>0){

printf(“n=====>提示:文件保存成功.(有%d条记录已经保存.)n”,count);

saveflag=0;} else {

system(“cls”);

printf(“保存文件失败,'0'条记录被保存!n”);} fclose(fp);} // void Save结束

void main(){ Link list;/*定义链表*/ // struct node *list;FILE *fp;/* 文件指针 */ int choose;/*保存选择结果变量*/ char ch;/*保存(y,Y,n,N)*/

int count=0;/*保存文件中的记录条数(或结点个数)*/ struct node *p,*r;/*定义记录指针变量*/ printf(“tttt职工信息管理系统nttttn”);

list=(struct node*)malloc(sizeof(struct node));

if(!list){

printf(“n allocate memory failure ”);/*如没有申请到,打印提示信息*/

return;/*返回主界面*/ }

list->next=NULL;r=list;

fp=fopen(“employee.txt”,“rb”);if(fp==NULL){

printf(“n=====>提示:文件还不存在,是否创建?(y/n)n”);

scanf(“%c”,&ch);

if(ch=='y'||ch=='Y')

fp=fopen(“employee.txt”,“ab+”);

else

exit(0);} // if(fp==NULL)

printf(“n=====>提示:文件已经打开,正在导入记录......n”);

while(!feof(fp))//没有到文件尾时,循环

{

p=(struct node*)malloc(sizeof(struct node));

if(!p)

{

printf(“ memory malloc failure!n”);/*没有申请成功*/

exit(0);/*退出*/

}

if(fread(p,sizeof(struct node),1,fp))/* 读文件的已有内容放入结点中 */

{

p->next=NULL;

r->next=p;

r=p;/* 将该结点挂入链表中, r指向最后的节点 */

count++;

} } //while(!feof(fp))

fclose(fp);/* 关闭文件 */ printf(“n=====>提示:记录导入完毕,共导入%d条记录.n”,count);

while(1){

menu();

printf(“tt====>请选择:”);

scanf(“%d”,&choose);

if(choose==0)

{

if(saveflag==1)

{

getchar();

printf(“n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?n”);

scanf(“%c”,&ch);

if(ch=='y'||ch=='Y')

Save(list);

} //if

printf(“n=====>提示:你已经退出系统,再见!n”);

break;

}//if

switch(choose)

{

case 1:Add(list);

break;/* 增加职工记录 */

case 2:

Del(list);

break;/* 删除职工记录 */

case 3:

Qur(list);

break;/* 查询职工记录 */

case 4:

Modify(list);

break;/* 修改职工记录 */

case 5:

Insert(list);

break;/*插入职工记录*/

case 6:

Tongji(list);

break;/*统计职工记录*/

case 7:

Sort(list);

break;/*排序职工记录*/

case 8:

Save(list);

break;/* 保存职工记录 */

case 9:

system(“cls”);

Disp(list);

break;/*显示职工记录*/

default:

Wrong();

getchar();

break;

} //switch(choose)}//while(1)} //main()/* */

第三篇:职工信息管理系统源代码

#include #include #include int N=2;struct worker/*定义一个职工信息的结构体*/ {

intnum;

/*定义一个职工信息的结构体*/ char name[20];

/*定义一个职工信息的结构体*/

char sex[10];

//用字符串存放职工的性别数据

char birth[20];//用字符串存放职工的出生年月数据

char deta[20];//用字符串存放职工的工作年月数据

char education[20];//用字符串存放职工的学历数据

double salary;

//用字符串存放职工的性别数据

char work[30];//用字符串存放职工的职务数据

char addr[20];//用字符串存放职工的地址数据

char tel[20];//用字符串存放职工的电话数据 }worker[100];//用结构体数组存放职工的所有信息 void menu();

void input();

void save();

void read();

void display();

void add();

void search();

voidsearch_education();

voidsearch_num();

void del();

void modify();

void main()

{ char s;

system(“color 3f”);

printf(“nn”);

printf(“ t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓n”);

printf(“ t┃**********************************************************┃n”);

printf(“ t┃***┏━━━━━━━━━━━━━━━━━━━━━━━━┓***┃n”);

printf(“ t┃***┃************************************************┃***┃n”);

printf(“ t┃***┃***

****┃***┃n”);

printf(“ t┃***┃***

欢迎使用职工信息管理系统

****┃***┃n”);

printf(“ t┃***┃***

****┃***┃n”);

printf(“ t┃***┃***

****┃***┃n”);

printf(“ t┃***┃***

制作人吴青伶

****┃***┃n”);

printf(“ t┃***┃***

****┃***┃n”);

printf(“ t┃***┃***

2013.12.28

****┃***┃n”);

printf(“ t┃***┃***

****┃***┃n”);

printf(“ t┃***┃************************************************┃***┃n”);

printf(“ t┃***┗━━━━━━━━━━━━━━━━━━━━━━━━┛***┃n”);

printf(“ t┃**********************************************************┃n”);printf(“ t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛n”);do { menu();printf(“Do you want to continue?(y/n)”);

s=getchar();}while(s=='Y'||s=='y');} void menu()/*菜单函数*/ { int b;printf(“t

n”);printf(“t

n”);printf(“t

n”);printf(“t

n”);printf(“t

n”);printf(“t

请选择

n”);printf(“t

------------------------------n”);printf(“t

||

||

n”);printf(“t

||

1.职工信息录入

||

n”);printf(“t

||

2.职工信息浏览

||

n”);printf(“t

||

3.职工信息添加

||

n”);printf(“t

||

4.职工信息查询

||

n”);printf(“t

||

5.职工信息删除

||

n”);printf(“t

||

6.职工信息修改

||

n”);printf(“t

||

0.退出

||

n”);printf(“tn”);printf(“n 输入你的选择项(0~6):n”);

scanf(“%d”,&b);

switch(b)

{

case 1 : //职工信息录入、保存

input();

save();

getchar();

break;

case 2 ://读入职工信息并显示

read();

display();

getchar();break;

case 3 : //添加职工信息

add();getchar();break;

case 4 : //查询职工信息

search();getchar();break;

case 5 : //读入职工信息并实现职工信息删除功能

read();

del();

getchar();

break;

case 6 : //读入职工信息并修改职工信息

read();modify();getchar();break;

case 0 : exit(0);//退出

default:break;} } void input()

//录入职工信息 {

inti,flag,j;printf(“输入职工个数(默认个数为2):”);scanf(“%d”,&N);fflush(stdin);//清除缓存 for(i=0;i

{ loop: printf(“职工号:”);scanf(“%d”,&worker[i].num);fflush(stdin);flag=1;if(worker[N].num<0)

printf(“请输入正整数:n”);else for(j=0;j

{

if(worker[i].num==worker[j].num)

{

flag=0;

printf(“ 工号重复,请重新输入!n”);

goto loop;

}

} printf(“姓名:”);scanf(“%s”,worker[i].name);fflush(stdin);printf(“性别:”);scanf(“ %s”,worker[i].sex);fflush(stdin);printf(“出生年月:”);scanf(“%d”,&worker[i].birth);fflush(stdin);printf(“工作年月:”);scanf(“%lf”,&worker[i].deta);fflush(stdin);printf(“请输入学历(中专=zz,大专=dz,本科=bk,研究生=yjs):n”);scanf(“%s”,worker[i].education);fflush(stdin);printf(“工资:”);scanf(“%lf”,worker[i].salary);fflush(stdin);printf(“职务:”);scanf(“%s”,worker[i].work);fflush(stdin);printf(“住址:”);scanf(“%s”,worker[i].addr);fflush(stdin);printf(“电话:”);scanf(“%s”,worker[i].tel);fflush(stdin);

} printf(“n创建完毕!n”);}

void save()

//保存函数 {

FILE *fp;int i;

if((fp=fopen(“worker.txt”,“wb”))==NULL)//以只写方式打开一个二进制文件

{

printf(“ncannot open filen”);

exit(0);} for(i=0;i

void read()

//读入函数 {

FILE *fp;int i=0;

if((fp=fopen(“worker.txt”,“rb”))==NULL)//以只读方式为输出打开磁盘文件中的一个二进制文件

{

printf(“ncannot open filen”);

exit(0);} do{ fread(&worker[i],sizeof(struct worker),1,fp);//从worker.txt文件向内存读入数据(二进制)

i++;}while(!feof(fp));fclose(fp);

N=i-1;}

void display()

//信息浏览函数 {

int i;for(i=0;i

{ printf(“职工号:%dn”,worker[i].num);printf(“姓名:%sn”,worker[i].name);printf(“性别:%sn”,worker[i].sex);printf(“出生年月:%dn”,worker[i].birth);printf(“工作年月:%dn”,worker[i].deta);printf(“学历:%sn”,worker[i].education);printf(“工资:%lfn”,worker[i].salary);printf(“职务:%dn”,worker[i].work);printf(“住址:%sn”,worker[i].addr);printf(“电话:%sn”,worker[i].tel);

} } void add()

//添加函数 { FILE *fp;int i;struct worker p;double t;printf(“n请输入新增加职工的信息:n”);

printf(“请输入职工号:n”);

scanf(“%d”,&p.num);

for(i=0;i

{

while(worker[i].num==p.num)

{

printf(“ 工号重复,请重新输入!n”);

scanf(“%d”,&p.num);

}

} printf(“请输入姓名:n”);scanf(“%s”,p.name);printf(“请输入性别:n”);scanf(“%s”,p.sex);printf(“请输入出生年月:n”);scanf(“%d”,&p.birth);printf(“请输入工作年月:n”);scanf(“%d”,&p.deta);printf(“请输入学历(中专=zz,大专=dz,本科=bk,=yjs:):n”);scanf(“%s”,p.education);printf(“请输入工资:n”);scanf(“%lf”,&t);p.salary=t;printf(“请输入职务:n”);scanf(“%s”,p.work);printf(“请输入住址:n”);scanf(“%s”,p.addr);printf(“请输入电话:n”);scanf(“%s”,p.tel);printf(“n添加完毕!n”);

if((fp=fopen(“worker.txt”,“ab”))==NULL)//以追加方式打开一个二进制文件尾部

{ printf(“ncannot open filen”);exit(0);

} fwrite(&p,sizeof(struct worker),1,fp);fclose(fp);} void search()

//查询函数 {

int c;do {

puts(“nsearch by=>n1.学历2.职工号3.取消并返回”);printf(“Which you needed?:n”);scanf(“%d”,&c);

研究生if(c>3||c<1)

{

puts(“nchoiceerror!please again!”);getchar();//此语句用于接受在执行上一句时最后输出的回车符

}

} while(c>3||c<1);

{ switch(c)

{ case 1:search_education();break;case 2:search_num();break;case 3:menu();break;

}

} } void search_education()

//按学历查询函数 { inti,flag=0;char s[10];printf(“n请输入你要查询的学历:n”);scanf(“%s”,s);for(i=0;i

{ if(strcmp(s,worker[i].education)==0)

{

printf(“职工号:%dn”,worker[i].num);

printf(“姓名:%sn”,worker[i].name);

printf(“性别:%sn”,worker[i].sex);

printf(“出生年月:%dn”,worker[i].birth);

printf(“工作年月:%dn”,worker[i].deta);

printf(“学历(中专=zz,大专=dz,yjs):%sn”,worker[i].education);printf(“工资:%lfn”,worker[i].salary);printf(“职务:%lfn”,worker[i].work);

printf(“住址:%sn”,worker[i].addr);

printf(“电话:%sn”,worker[i].tel);flag++;

}

} if(flag==0)

printf(“n对不起没有找到!n”);getchar();} void search_num()

//按工号查询函数 { inti,s,flag=0;printf(“n输入要查询的职工号!:n”);scanf(“%d”,&s);

本科=bk,研究生=for(i=0;i

{

if(s==worker[i].num)

{

printf(“职工号:%dn”,worker[i].num);

printf(“姓名:%sn”,worker[i].name);

printf(“性别:%sn”,worker[i].sex);

printf(“出生年月:%dn”,worker[i].birth);

printf(“工作年月:%dn”,worker[i].deta);

printf(“学历(中专=zz,大专=dz,本科=bk,研究生=yjs):%sn”,worker[i].education);

printf(“工资:%lfn”,worker[i].salary);printf(“职务:%lfn”,worker[i].work);

printf(“住址:%sn”,worker[i].addr);

printf(“电话:%sn”,worker[i].tel);

flag++;

}

}

if(flag==0)printf(“n对不起没有找到!please”);

getchar();}

void del()

//删除函数 { inti,j;FILE *fp;char name[20];char c;if((fp=fopen(“worker.txt”,“wb”))==NULL)//以只写方式打开一个二进制文件

{

printf(“ncannot open filen”);exit(0);

} printf(“请输入要删除的职工的姓名:”);scanf(“%s”,name);for(i=0;i

if(strcmp(name,worker[i].name)==0)//判断输入的姓名和原来的姓名是否相同

{

printf(“找到该职工,是否删除?(y/n)”);

fflush(stdin);

scanf(“%c”,&c);

if(c =='Y'||c=='y')

{

for(j=i;j

worker[j]=worker[j+1];

printf(“删除成功!n”);

//break;

}

} } if(i>=N){ printf(“没有找到该职工!n ”);

return;}

else {

N=N-1;

for(i=0;i

if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1)

{

printf(“ncannot save filen”);getchar();

}

fclose(fp);}

}

void modify()

//修改函数 { struct worker p;FILE *fp;inti,n;double t;printf(“n输入要修改的职工号:n”);scanf(“%d”,&n);

for(i=0;i

if(n==worker[i].num)

{

printf(“找到该职工的信息(任意键继续)!”);

printf(“n请输入职工的信息!n”);

printf(“请输入姓名:n”);scanf(“%s”,p.name);

printf(“请输入性别:n”);scanf(“%s”,p.sex);

printf(“请输入出身年月:n”);scanf(“%d”,&p.birth);printf(“请输入工作年月:n”);scanf(“%lf”,&p.deta);

printf(“请输入学历(中专=zz,大专=dz,yjs):n”);scanf(“%s”,p.education);printf(“请输入工资:n”);scanf(“%lf”,&t);

p.salary=t;printf(“请输入职务:n”);scanf(“%s”,p.work);

printf(“请输入住址:n”);scanf(“%s”,p.addr);

本科=bk,研究生=

}

printf(“请输入电话:n”);scanf(“%s”,p.tel);p.num=n;

if((fp=fopen(“worker.txt”,“r+”))==NULL)//以读写的方式将修改的信息写入磁盘文件

{

printf(“ncannot open filen”);

exit(0);

}

fseek(fp,i*sizeof(struct worker),0);//将位置指针移到i*sizeof(struct worker)个字节处

fwrite(&p,sizeof(struct worker),1,fp);

fclose(fp);

printf(“修改成功!n”);

break;} } if(i>=N)printf(“n未找到该职工!n”);

第四篇:C++课程设计 教职工信息管理系统源代码

教职工信息管理系统源码

#include #include #include #include

#define maxsize 100 fstream iofile;//文件指针

class Time //时间类 {

public:

int year;

int month;

int day;};

class Telem //个人信息 {

public:

char name[20];

char sex[10];

Time birthtime;//组合Time类

char num[20];

char wage[20];

Time worktime;

int year;

char department[20];

friend istream& operator>>(istream& input,Telem& T);

friend ostream& operator<<(ostream& output,Telem& T);

friend int operator-(Time & t1,Time & t2);};

class People:virtual public Telem //雇员类 {

public:

People();

virtual void AddF()=0;//添加

virtual void Addall()=0;

virtual void Add()=0;

virtual void Display();//输出数组的内容

virtual void Displaypart(char p[]);

virtual void Findname(char n[]);

virtual void Findyear(int);

virtual void Del(char n[])=0;

virtual void Del(int);protected:

Telem data[maxsize];

Time now;

int length;};

class Teacher:virtual public People //派生虚基类 {

public:

virtual void AddF();

virtual void Addall();

virtual void Add();

virtual void Display();

virtual void Del(int i);

virtual void Del(char n[]);};

class worker:virtual public People //派生虚基类 {

public:

virtual void AddF();

virtual void Addall();

virtual void Add();

virtual void Display();

virtual void Del(int i);

virtual void Del(char n[]);};

People::People()//系统自动生成的构造函数 {

length=0;

now.year=2010;

now.month=7;

now.day=6;}

void People::Display()//引用 {

int i;

for(i=0;i

cout<

void People::Displaypart(char p[])//引用数组

{

int i,c;

for(i=0;i

if(strcmp(data[i].wage,p)==0)

{

cout<<“输出选择姓名1 性别2 编号3 工资4 出生日期5 工作时间6 年龄7 系别8 退出选择9”<

while(cin>>c)

{

switch(c)

{

case 1: cout<<“姓名:”<

case 2: cout<<“性别:”<

case 3: cout<<“编号:”<

case 4: cout<<“工资:”<

case 5: cout<<“出生日期:”<

case 6: cout<<“工作时间:”<

case 7: cout<<“年龄:”<

case 8: cout<<“系别:”<

case 9: goto loop;

default:cout<<“操作错误......”<

}

}

loop:;

} }

void People::Findname(char n[])//引用 {

int i;

for(i=0;i

if(strcmp(data[i].name,n)==0)//对象引用

cout<

void People::Findyear(int y){

int i;

for(i=0;i

if(data[i].year==y)

cout<

void People::Del(int i){

int j;

if(i<1||i>length)

cout<<“不存在第”<

for(j=i;j

data[j-1]=data[j];

length--;}

void worker::AddF(){

int flag=0;

iofile.open(“worker_information.txt”,ios::in|ios::binary);//文件的打开与关闭

while(iofile.seekg(ios::cur))

{

iofile.seekg(length*sizeof(data[length]),ios::beg);

iofile.read((char*)&data[length],sizeof(data[length]));//文件的随机访问

length++;

if(length==maxsize)

{

flag=1;

goto loop;

}

}

People::Del(length);

cout<<“添加人员信息成功......”<

loop:

if(1==flag)

cout<<“人员信息储存空间已满......”<

iofile.close();}

void worker::Addall(){

char ans;

int flag=0;

iofile.open(“worker_information.txt”,ios::out|ios::binary);

do

{

cin>>data[length];

data[length].year=now-data[length].birthtime;

iofile.write((char*)&data[length],sizeof(data[length]));

cout<<“添加人员信息成功......”<

length++;

if(length==maxsize)

{

flag=1;

goto loop;

}

cout<<“contine(Y|N)?”;

cin>>ans;

}while('y'==ans||'Y'==ans);loop:

if(1==flag)

cout<<“人员信息储存空间已满......”<

iofile.close();}

void worker::Add(){

int flag=0;

iofile.open(“worker_information.txt”,ios::app|ios::out|ios::binary);

if(length==maxsize)

{

flag=1;

goto loop;

}

cin>>data[length];

data[length].year=now-data[length].birthtime;

iofile.write((char*)&data[length],sizeof(data[length]));

cout<<“添加人员信息成功......”<

length++;

loop:

if(1==flag)

cout<<“人员信息储存空间已满......”<

iofile.close();}

void worker::Display(){

cout<<“ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆工人信息 ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆”<

if(0==length)

cout<<“无......”<

int i;

for(i=0;i

cout<

int i,j,k;

for(i=0;i

if(strcmp(data[i].name,n)==0){

k=i+1;break;}

if(k<1)

cout<<“不存在姓名”<

for(j=k;j

data[j-1]=data[j];

length--;

cout<<“删除人员信息成功......”<

void worker::Del(int i){

int j;

if(i<1||i>length)

cout<<“不存在第”<

for(j=i;j

data[j-1]=data[j];

length--;

cout<<“删除成功......”<

}

void Teacher::AddF(){

int flag=0;

iofile.open(“Teacher_information.txt”,ios::in|ios::binary);

while(iofile.seekg(sizeof(data[length]),ios::cur))

{

if(iofile.seekg(length*sizeof(data[length]),ios::beg))

iofile.read((char*)&data[length],sizeof(data[length]));

else

break;

length++;

if(length==maxsize)

{

flag=1;

goto loop;

}

}

People::Del(length);

cout<<“添加人员信息成功......”<

if(1==flag)

cout<<“人员信息储存空间已满......”<

iofile.close();}

void Teacher::Addall(){

char ans;

int flag=0;

iofile.open(“Teacher_information.txt”,ios::in|ios::out|ios::binary);

do

{

cin>>data[length];

data[length].year=now-data[length].birthtime;

iofile.write((char*)&data[length],sizeof(data[length]));

cout<<“添加人员信息成功......”<

length++;

if(length==maxsize)

{

flag=1;

goto loop;

}

cout<<“contine(Y|N)?”;

cin>>ans;

}while('y'==ans||'Y'==ans);loop:

if(1==flag)

cout<<“人员信息储存空间已满......”<

iofile.close();}

void Teacher::Add(){

int flag=0;

iofile.open(“Teacher_information.txt”,ios::app|ios::out|ios::binary);

if(length==maxsize)

{

flag=1;

goto loop;

}

cin>>data[length];

data[length].year=now-data[length].birthtime;

iofile.write((char*)&data[length],sizeof(data[length]));

cout<<“添加人员信息成功......”<

length++;loop:

if(1==flag)

cout<<“人员信息储存空间已满......”<

iofile.close();}

void Teacher::Display(){

cout<<“ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆教师信息 ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆”<

if(0==length)

cout<<“无......”<

int i;

for(i=0;i

cout<

void Teacher::Del(char n[]){

int i,j,k;

for(i=0;i

if(strcmp(data[i].name,n)==0)

{

k=i+1;break;

}

if(k<1)cout<<“不存在姓名”<

for(j=k;j

data[j-1]=data[j];

length--;

cout<<“删除人员信息成功......”<

void Teacher::Del(int i){

int j;

if(i<1||i>length)

cout<<“不存在第”<

for(j=i;j

data[j-1]=data[j];

length--;

cout<<“删除成功......”<

istream& operator>>(istream& input,Telem& T){

int y,m,d;

cout<<“请输入姓名(以*结尾):”<

input.getline(T.name,20,'*');

cout<<“请输入性别(以*结尾 男或女):”<

input.getline(T.sex,10,'*');

cout<<“编号(以*结尾):”<

input.getline(T.num,20,'*');

cout<<“工资(以*结尾):”<

input.getline(T.wage,20,'*');

cout<<“请输入出生日期:”<

input>>y>>m>>d;

T.birthtime.year=(y>=1900&&y<=2100)?y:1900;

T.birthtime.month=(m>=1&&m<=12)?m:1;

T.birthtime.day=(d>=1&&d<=31)?d:1;

cout<<“请输入系别(以*结尾):”<

input.getline(T.department,20,'*');

cout<<“参加工作时间:”<

input>>y>>m>>d;

T.worktime.year=(y>=1900&&y<=2100)?y:1900;

T.worktime.month=(m>=1&&m<=12)?m:1;

T.worktime.day=(d>=1&&d<=31)?d:1;

return input;}

ostream& operator<<(ostream& output,Telem& T){

cout<<“姓名:”;

output<

cout<<“性别:”;

output<

cout<<“编号:”;

output<

cout<<“工资:”;

output<

cout<<“出生日期:”;

output<

cout<<“系别:”;

output<

cout<<“参加工作时间:”;

output<

cout<<“年龄:”;

output<

return output;}

int operator-(Time & t1,Time & t2){

return t1.year-t2.year;}

void Showmenu(){

cout<

cout<<“

欢 迎 进 入 教 职 工 信 息 管 理 系 统”<

cout<<“

2010 年7月7日发布”<<“

版权所有: swa”<

cout<<“

★ ☆ ★ ☆ ★ ☆ ★ ☆ ★人员信息管理系统★ ☆ ★ ☆ ★ ☆ ★ ☆ ★”<

cout<<“

1-从键盘录入全部人员记录

☆ ”<

cout<<“

☆ 2-增加一位人员记录

★”<

cout<<“

3-显示全部人员记录

☆”<

cout<<“

☆ 4-按系别输出人员信息(可选)★ ”<

cout<<“

5-按姓名或年龄检索所有信息☆ ”<

cout<<“

☆ 6-显示菜单目录

★ ”<

cout<<“

7-结束程序运行

☆ ”<

cout<<“

★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆”<

int main(){

Teacher tea;

worker stu;

People *pt=&tea;

People *ps=&stu;

int c=0,k=0,l=0,i=0;

char nam[20],part[20];Showmenu();

for(;;)

{

cout<<“请根据菜单执行相应操作: ”;

cin>>c;

switch(c)

{

case 1:

{

cout<<“ ★ ☆ ★ ☆ ★ ☆ ★录入全部人员记录 ★ ☆ ★ ☆ ★ ☆ ★”<

cout<<“ ★ ☆ ★ ☆ ★从键盘输入教师信息 ☆ ★ ☆ ★ ☆”<

pt->Addall();

cout<<“ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆从键盘输入工人信息 ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆”<

ps->Addall();

break;

}

case 2:

{

cout<<“ ★ ☆ ★ ☆ ★ ☆ ★ ☆从键盘增加一位人员记录 ★ ☆ ★ ☆ ★ ☆ ★ ☆”<

cout<<“ ★ ☆ ★ ☆ ★ ☆ ★ ☆教师操作请按1 工人操作请按2 ★ ☆ ★ ☆ ★ ☆ ★ ☆”<

cin>>k;

if(1==k)

pt->Add();

else if(2==k)

ps->Add();

else

cout<<“操作错误...”<

break;

}

case 3:

{

cout<<“ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆显示全部人员记录 ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆”<

pt->Display();

ps->Display();

break;

}

case 4:

{

cout<<“ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆按部门输出人员信息(可选)★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆”<

cout<<“ ★ ☆ ★ ☆ ★ ☆教师操作请按1 工人操作请按2 ★ ☆ ★ ☆ ★ ☆”<

cin>>k;

if(1==k)

{

cout<<“请输入要输出人员的系别(以*结尾):”<

pt->Displaypart(part);

}

else if(2==k)

{

cout<<“请输入要输出人员的系别(以*结尾):”<

ps->Displaypart(part);

}

else

cout<<“操作错误......”<

break;

}

case 5:

{

cout<<“ ★ ☆ ★ ☆ ★ ☆ ★按姓名或年龄检索所有信息 ★ ☆ ★ ☆ ★ ☆ ★”<

cout<<“ ★ ☆ ★ ☆ ★ ☆ ★按姓名查找1 按年龄查找2 ★ ☆ ★ ☆ ★ ☆ ★”<

cin>>k;

if(1==k)

{

cout<<“按姓名查找1 按年龄查找2”<>l;

if(1==l)

{

cout<<“请输入要查找人员的姓名(以*结尾):”<

pt->Findname(nam);

}

else if(2==l)

{

cout<<“请输入要查找人的年龄:”<>i;

pt->Findyear(i);

}

else

cout<<“操作错误......”<

}

else if(2==k)

{

cout<<“按姓名查找1 按年龄查找2”<>l;

if(1==l)

{

cout<<“请输入要查找人员的姓名(以*结尾):”<

ps->Findname(nam);

}

else if(2==l)

{

cout<<“请输入要查找人的年龄:”<>i;

ps->Findyear(i);

}

else

cout<<“操作错误......”<

}

else

cout<<“操作错误......”<

break;

}

case 6:

{

cout<<“ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆显示菜单目录 ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆”<

Showmenu();

break;

}

case 7:

{

cout<<“ ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆结束程序运行 ★ ☆ ★ ☆ ★ ☆ ★ ☆ ★ ☆”<

exit(0);

}

default:cout<<“操作错误......”<

}

}

return 0;}

第五篇:【课程设计】职工信息管理系统

题目:职工信息系统

功能包括:

 建立职工信息数据(职工编号,姓名,性别,年龄,电话,职务,工资和家庭成员信息)和信息简表(编号,姓名,电话) 根据职工编号查询职工信息(查询时需要身份确认。单位领导和人事秘书可以看到职工所有信息;财务处人员可以看到职工编号,姓名,性别,年龄,电话,工资;一般职工仅能查到信息简表) 增加新职工信息(由人事秘书完成,需要身份确认) 删除职工信息(由人事秘书完成,需要身份确认) 修改职工工资(由财务处人员完成,需要身份确认) 要求所有信息能够存储在文件中,并具有良好的用户界面

#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;} class 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<<“t╔╤╤╤╤╤╤职工编号: ”<

//二级菜单 { cout<<“t╔╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤╤┐”<

//登陆的实现部分 { cout<<“t┏┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┓”<

int w=0;while(!(cin>>na)){ cin.clear();while(cin.get()!='n')continue;cout<<“输入有误,编号为一串数字,请重新输入:n”;

for(int i=1;i<=ct;i++)} fstream find;find.open(file,ios_base::in|ios_base::out|ios_base::binary);eatline();staff stu;

{

streampos place =(i-1)* sizeof stu;find.seekp(place);if(find.fail()){

cerr << “■查找出错!程序将退出!■n”;system(“pause”);

exit(EXIT_FAILURE);

} find.read((char *)&stu, sizeof stu);if(stu.num==na){ } w=1;Admin=stu.admin;}

if(w==0){cout<<“t┣╋**登录失败!未找到相应的信息!程序将退出**╋┫”<

}

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 << “不能打开 ” << file << “ 文件:n”;

exit(EXIT_FAILURE);

}

cout << “★增加职员信息★请输入职工姓名:(按Enter键退出输入!):n”;eatline();

cin.get(stu.name, LIM);

while(stu.name[0]!= '')

{

cout << “★增加职员信息★请输入职工编号:”;

cin>>stu.num;cout << “★增加职员信息★请输入职工性别:”;eatline();cin.get(stu.sex, 3);cout << “★增加职员信息★请输入职工年龄:”;cin>>stu.age;

cout << “★增加职员信息★请输入职工职务:”;eatline();cin.get(stu.job, 10);

cout << “★增加职员信息★请输入职工电话:”;eatline();

cin.get(stu.phone, 15);

cout << “★增加职员信息★请输入职工工资:”;cin>>stu.wages;

cout << “★增加职员信息★请输入职工家庭信息:(按Enter键退出输入!):n”;

eatline();

cin.get(stu.home, 20);setadmin(stu,stu.job);

fout.write((char *)&stu, sizeof stu);cout << “■增加职员信息■请输入职工姓名:(按Enter键退出输入!):n”;

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 << “■查找出错!程序将退出!■n”;system(“pause”);

exit(EXIT_FAILURE);

} change.read((char *)&stu, sizeof stu);if(stu.num==rec){ } w=1;

cout << “你选择的是:n”;stu.printf2();break;

}

if(w==1){ cout << “请输入你要修改职员的工资: ”;while(cin >> stu.wages){

if(stu.wages<0||stu.wages>100000)

{

cout<<“■输入的工资错误!请重新输入:■

cin.clear();

while(cin.get()!='n');

continue;

}

break;} change.seekp(place);

// 回到查找到的地点

change.write((char *)&stu, sizeof stu)<< flush;if(change.fail()){

cerr << ”■--查找失败!程序将退出--■n“;system(”pause“);

n”;

}

exit(EXIT_FAILURE);} change.close();cout<<“★---修改成功!---★”<

void del()

//删除指定编号的职工信息 {

if(Admin==2){

while(1){ eatline();int delnum;cout<<“请输入你要删除的职工的编号:n”;

cin>>delnum;fstream in;in.open(“staff.dat”,ios_base::in|ios_base::binary);if(!in){ cout<<“打开失败”;return;} fstream temp;temp.open(“temp.dat”,ios_base::out|ios_base::binary);staff stu;int q;in.read((char*)&stu,sizeof(stu));while(!in.eof())//将文件内容修改后临时寸到另一个文件中 {

} 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<<“打开失败”;return;} ofstream out;}//完成复制 out.close();temp.close();

cout<<“删除成功!t是否继续删除?y/nn”;char x;cin>>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<=ct;i++){

streampos place =(i-1)* sizeof stu;find.seekp(place);if(find.fail()){

cout<<“■选择执行的操作错误!■n”;cin.clear();while(cin.get()!='n');continue;}

cerr << “■查找出错!程序将退出!■n”;system(“pause”);

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,“总经理”,“***”,20000,“父母,弟弟,姐姐”,1},{10002,“李四”,“男”,32,“副总经理”,“***”,12000,“父母,兄长”,1},{10003,“

”,“

”,25,“

书”,“***”,10000,“---略---”,2},{10004,“陈六”,“女”,25,“财务人员”,“***”,8000,“---略---”,3},{10005,“Obama”,“

”,23,“

工”,“***5”,7000,“---略---”,0}};ofstream fout(file,ios_base::out|ios_base::binary);

for(int i=0;i<5;i++)fout.write((char *)&st[i],sizeof st[i]);fout.close();} fin.close();stu_num();loading();while(1){ menu();cout<<“请输入你要选择的操作: char n;cin>>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<<“■选择执行的操作错误!■n”;

cin.clear();

while(cin.get()!='n');

continue;}

清除已经输入的内容,程序选择

}

system(“pause”);

system(“cls”);

cin.clear();}

return 0;}

//如果选择错误,cin.clear等语句

下载C语言课程设计 职工信息管理系统 结构体数组实现程序源代码word格式文档
下载C语言课程设计 职工信息管理系统 结构体数组实现程序源代码.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐