📄 职工管理系统.cpp
字号:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<malloc.h>
#include"inputkeys.cpp"
#define L sizeof(employee)
#define HL sizeof(filehead)
#define BUG1(p) if(p->num==10)\
p->num=99999;
#define BUG2(p) if(p->num==99999)\
p->num=10;
FILE *fp;
FILE *tempfp;
char filename[20]; //文件名
char filenamepostfix[]=".dat"; //文件后缀名
char password_[20]; //确认密码
struct filehead //密码结构体
{
int on_off; //密码开启/禁用 0为默认值/禁用 1为开启密码
char password[20]; //密码 on_off为1时有效
}filehead_={0,""};
#pragma pack(1)
struct employee //职工信息结构体
{
int num; //职工号
char name[10]; //姓名
char sex[4]; //性别
int age; //年龄
char sclrec[6]; //学历
int pay; //工资
char address[40]; //地址
char phonenum[12]; //电话号码
};
#pragma pack()
void build()
{
employee *p;
int i;
again4:
system("cls");
printf(" ╔═══════════╗\n");
printf(" ║ 请输入职工信息 ║\n");
printf(" ╠═══════════╣\n");
printf(" ║各项数据之间用空格或者║\n");
printf(" ║ Tab(制表符)隔开 ║\n");
printf(" ╚═══════════╝\n");
printf("输入顺序:职工号-->>姓名-->>性别-->>年龄-->>学历-->>工资-->>地址-->>电话号码\n");
fflush(stdin);
p=(employee *)malloc(L);
scanf("%d%s%s%d%s%d%s%s",&p->num,p->name,p->sex,&p->age,p->sclrec,&p->pay,p->address,p->phonenum);
BUG1(p)////////////////////////////////////////////////////////////////////////////////
if(fp==NULL)
fp=fopen(filename,"a");
fwrite(p,L,1,fp);
free(p);
printf("\n\n\n\n");
printf(" ╔═════════════╗\n");
printf(" ║ 按 1 继续输入数据 ║\n");
printf(" ╠═════════════╣\n");
printf(" ║ 按 2 返回上一级 ║\n");
printf(" ╠═════════════╣\n");
printf(" ║ 按 3 退出程序 ║\n");
printf(" ╚═════════════╝\n");
again5:
fflush(stdin);
i=getch();
switch(i)
{
case 49:
goto again4;
case 50:
fclose(fp);
fp=NULL;
return;
case 51:
fclose(fp);
exit(0);
default:
goto again5;
}
}
void creat()
{
int i;
again3:
system("cls");
fflush(stdin);
printf("\n\n\t请输入路径及文件名: ");
scanf("%s",filename);
strcat(filename,filenamepostfix);
if((fp=fopen(filename,"w+"))==NULL)
{
printf("\n\t创建失败!");
printf("\n\t按任意键返回...");
fflush(stdin);
getch();
return;
}
fwrite(&filehead_,sizeof(filehead_),1,fp);
printf("\n\t创建成功!\n");
printf("\n\t按任意键继续...");
fflush(stdin);
getch();
again2:
system("cls");
printf("\n\n\n\n\n\n");
printf(" ╔════════════╗\n");
printf(" ║ 按 1 进入数据存放系统 ║\n");
printf(" ╠════════════╣\n");
printf(" ║ 按 2 重新建立一个文件 ║\n");
printf(" ╠════════════╣\n");
printf(" ║ 按 3 返回上一级 ║\n");
printf(" ╠════════════╣\n");
printf(" ║ 按 4 退出程序 ║\n");
printf(" ╚════════════╝\n");
fflush(stdin);
i=getch();
switch(i)
{
case 49:
build();
goto again2;
case 50:
if(fp!=NULL)
fclose(fp);
i=0;
goto again3;
case 51:
if(fp!=NULL)
fclose(fp);
return;
case 52:
if(fp!=NULL)
fclose(fp);
exit(0);
default:
goto again2;
}
}
void look()
{
employee *p;
int i;
fflush(stdin);
system("cls");
printf(" ╔════════════╗\n");
printf(" ║ 职工信息如下表 ║\n");
printf(" ╚════════════╝\n");
printf("职工号--姓名-----性别--年龄---学历---工资-----地址----------------电话号码------\n");
p=(employee *)malloc(L);
for(;fread(p,L,1,fp);)
{
BUG2(p)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
printf(" %-3d %-9s %-4s %-3d %-6s %-6d %-20s %-12s\n\n",p->num,p->name,p->sex,p->age,p->sclrec,p->pay,p->address,p->phonenum);
BUG1(p)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
free(p);
printf(" ╔════════════╗\n");
printf(" ║ 按 1 返回上一级 ║\n");
printf(" ╠════════════╣\n");
printf(" ║ 按 2 退出程序 ║\n");
printf(" ╚════════════╝\n");
again7:
fflush(stdin);
i=getch();
switch(i)
{
case 49:
return;
case 50:
fclose(fp);
exit(0);
default:
goto again7;
}
}
void reopen()
{
fclose(fp);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n打开文件错误,输入任意键退出程序!");
fflush(stdin);
getch();
exit(0);
}
fseek(fp,HL,SEEK_CUR);
}
void rewind_(FILE *fp_)
{
fseek(fp_,HL,SEEK_SET);
}
void search_1()
{
employee *p;
int i,j=0;
system("cls");
printf(" ╔═══════════╗\n");
printf(" ║ 以职工号搜索 ║\n");
printf(" ╚═══════════╝\n");
printf("请输入你要找的职工号:");
scanf("%d",&i);
p=(employee *)malloc(L);
rewind_(fp);
for(;fread(p,L,1,fp);)
{
BUG2(p)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(p->num==i)
{
j=1;
BUG1(p)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
break;
}
}
rewind_(fp);
if(j==1)
{
printf("以下为你要找的职工信息:\n\n");
printf("职工号--姓名-----性别--年龄---学历---工资-----地址----------------电话号码------\n");
BUG2(p)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
printf(" %-3d %-9s %-4s %-3d %-6s %-6d %-20s %-12s\n\n",p->num,p->name,p->sex,p->age,p->sclrec,p->pay,p->address,p->phonenum);
BUG1(p)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
else
printf("\n没有你要找的职工号!\n");
printf("\n按任意键返回上一级...");
fflush(stdin);
getch();
free(p);
}
void search_2()
{
employee *p;
char i[10];
int j=0;
system("cls");
printf(" ╔═══════════╗\n");
printf(" ║ 以职工姓名搜索 ║\n");
printf(" ╚═══════════╝\n");
printf("请输入你要找的姓名:");
fflush(stdin);
scanf("%s",i);
p=(employee *)malloc(L);
rewind_(fp);
for(;fread(p,L,1,fp);)
{
if(!strcmp(p->name,i))
{
j=1;
break;
}
}
rewind_(fp);
if(j==1)
{
printf("以下为你要找的职工信息:\n\n");
printf("职工号--姓名-----性别--年龄---学历---工资-----地址----------------电话号码------\n");
BUG2(p)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
printf(" %-3d %-9s %-4s %-3d %-6s %-6d %-20s %-12s\n\n",p->num,p->name,p->sex,p->age,p->sclrec,p->pay,p->address,p->phonenum);
BUG1(p)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
else
printf("\n没有你要找的姓名!\n");
printf("\n按任意键返回上一级...");
fflush(stdin);
getch();
free(p);
}
void search_3()
{
employee *p;
char i[40];
int j=0;
system("cls");
printf(" ╔═══════════╗\n");
printf(" ║ 以职工地址搜索 ║\n");
printf(" ╚═══════════╝\n");
printf("请输入你要找职工的地址:");
fflush(stdin);
scanf("%s",i);
p=(employee *)malloc(L);
rewind_(fp);
for(;fread(p,L,1,fp);)
{
if(!strcmp(p->address,i))
{
j=1;
break;
}
}
rewind_(fp);
if(j==1)
{
printf("以下为你要找的职工信息:\n\n");
printf("职工号--姓名-----性别--年龄---学历---工资-----地址----------------电话号码------\n");
BUG2(p)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
printf(" %-3d %-9s %-4s %-3d %-6s %-6d %-20s %-12s\n\n",p->num,p->name,p->sex,p->age,p->sclrec,p->pay,p->address,p->phonenum);
BUG1(p)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
else
printf("\n没有你要找的职工地址!\n");
printf("\n按任意键返回...");
fflush(stdin);
getch();
free(p);
}
void search_4()
{
employee *p;
char i[12];
int j=0;
system("cls");
printf(" ╔═══════════╗\n");
printf(" ║ 以电话号码搜索 ║\n");
printf(" ╚═══════════╝\n");
printf("请输入你要找职工的电话号码:");
fflush(stdin);
scanf("%s",i);
p=(employee *)malloc(L);
rewind_(fp);
for(;fread(p,L,1,fp);)
{
if(!strcmp(p->phonenum,i))
{
j=1;
break;
}
}
rewind_(fp);
if(j==1)
{
printf("\n以下为你要找的职工信息:\n\n");
printf("职工号--姓名-----性别--年龄---学历---工资-----地址----------------电话号码------\n");
BUG2(p)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
printf(" %-3d %-9s %-4s %-3d %-6s %-6d %-20s %-12s\n\n",p->num,p->name,p->sex,p->age,p->sclrec,p->pay,p->address,p->phonenum);
BUG1(p)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
else
printf("\n没有你要找的职工的电话号码!\n");
printf("\n按任意键返回...");
fflush(stdin);
getch();
free(p);
}
void search_()
{
int i;
again9:
system("cls");
printf("\n\n\n\n\n\n");
printf(" ╔════════════╗\n");
printf(" ║ 按 1 以职工号搜索 ║\n");
printf(" ╠════════════╣\n");
printf(" ║ 按 2 以名字搜索 ║\n");
printf(" ╠════════════╣\n");
printf(" ║ 按 3 以地址搜索 ║\n");
printf(" ╠════════════╣\n");
printf(" ║ 按 4 以电话号码搜索 ║\n");
printf(" ╠════════════╣\n");
printf(" ║ 按 5 返回上一级 ║\n");
printf(" ╠════════════╣\n");
printf(" ║ 按 6 退出程序 ║\n");
printf(" ╚════════════╝\n");
fflush(stdin);
i=getch();
switch(i)
{
case 49:
search_1();
reopen();
goto again9;
case 50:
search_2();
reopen();
goto again9;
case 51:
search_3();
reopen();
goto again9;
case 52:
search_4();
reopen();
goto again9;
case 53:
return;
case 54:
exit(0);
default:
goto again9;
}
}
void compositor_(int n)
{
employee *p1,*p2,*p;
int i,j,k;
rewind_(fp);
p=(employee *)malloc(L);
for(i=0;fread(p,L,1,fp);i++);
free(p);
for(j=0;j<i-1;j++)
{
rewind_(fp);
p1=(employee *)malloc(L);
p2=(employee *)malloc(L);
fread(p1,L,1,fp);
fread(p2,L,1,fp);
BUG2(p1)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BUG2(p2)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(k=0;k<i-1-j;k++)
{
switch(n)
{
case 1:
if((p2->num)<(p1->num))
{
BUG1(p1)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BUG1(p2)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
fseek(fp,-L,SEEK_CUR);
fwrite(p1,L,1,fp);
fseek(fp,-(L*2),SEEK_CUR);
fwrite(p2,L,1,fp);
fseek(fp,L,SEEK_CUR);
}
break;
case 2:
if((p2->num)>(p1->num))
{
BUG1(p1)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BUG1(p2)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
fseek(fp,-L,SEEK_CUR);
fwrite(p1,L,1,fp);
fseek(fp,-(L*2),SEEK_CUR);
fwrite(p2,L,1,fp);
fseek(fp,L,SEEK_CUR);
}
break;
case 3:
if((p2->age)<(p1->age))
{
BUG1(p1)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BUG1(p2)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
fseek(fp,-L,SEEK_CUR);
fwrite(p1,L,1,fp);
fseek(fp,-(L*2),SEEK_CUR);
fwrite(p2,L,1,fp);
fseek(fp,L,SEEK_CUR);
}
break;
case 4:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -