#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define N 100
struct employee//職工基本情況
{
int num;//工號
int position;//職位1爲董事長2爲總經理3爲副總經理等
char name[8];//姓名
char sex[2];//性別f爲女m爲男
int age;//年齡
int cult;//文化程度1爲專家2爲博士3爲碩士4爲學士5爲其他
int salary;//工資
int state;//健康情況分爲good,general,bad
}em[N];
struct communication//職工通訊錄
{
char name[8];
char officetel[13];
char hometel[13];
char handtel[13];
char address[13];
}empc[N];
struct empsalary//職工工資與姓名的文件
{
char name[8];
int salary;
}emps[N];
void manage();
void query();
void communicate();
void input();
void display();
void change();
void del();
void add();
void count();
int changeposition();
int changecult();
int changesalary();
int changestate();
void querysalary();
void creat();
void inputcommunicate();
void querycommunicate();
void changecommunicate();
void changetel1();
void changetel2();
void changetel3();
char password[7]="123456";
void main()
{
int choice;
char s[7];
int flag=0;
int n=3;
do
{
printf("請你輸入密碼:/n");
scanf("%s",s);
if(!strcmp(s,password))//若密碼正確
{
printf("恭喜你成功登陸了/n/n/n");
flag=1;
break;
}
else
{
printf("輸入有錯誤請重新輸入:/n");
n--;
}
}while(n>0);
if(!flag)
{
printf("你的輸入次數已到再見/n");
}
do
{
printf("~~~~~~~~~~/t/t/t~~~~~~~~~~~~/n");
printf("/t/t歡迎進入職工管理系統中文版/n");
printf("製作人:李華詩/t班級:計034班/t學號:2003041150/n");
printf("聯繫地址:廣西工學院/n");
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%/n");
printf("/t/t請你選擇操作類型:/n");
printf("==============/t/t==============/n");
printf("/t/t1進入管理系統/n");
printf("/t/t2進入查詢系統/n");
printf("/t/t3進入通訊錄/n");
printf("/t/t0退出系統/n");
printf("==============/t/t==============/n");
printf("說明:版權歸作者所有違者必究/n/n/n/n");
scanf("%d",&choice);
switch(choice)
{
case 1:
manage();
break;
case 2:
query();
break;
case 3:
communicate();
break;
case 0:
{
printf("謝謝使用再見/n");
exit(0);
}
default:
{
printf("輸入有錯誤請重新輸入:/n");
return;
}
}
}while(1);
}
void manage()
{
int choicemanage;
char choice='y';
while(choice=='y'||choice=='Y')
{
printf("/t/t歡迎進入管理系統/n");
printf("===================/n");
printf("/t/t請你選擇操作類型:/n");
printf("/t/t1輸入職工信息/n");
printf("/t/t2顯示職工信息/n");
printf("/t/t3修改職工信息/n");
printf("/t/t4追加一個職工信息/n");
printf("/t/t5刪除一個職工信息/n");
printf("/t/t6統計職工信息/n");
printf("/t/t0返回/n");
printf("=====================/n");
scanf("%d",&choicemanage);
switch(choicemanage)
{
case 1:
input();//輸入職工信息
break;
case 2:
display();//顯示職工信息
break;
case 3:
change();//修改職工信息
break;
case 4:
add();//追加一個職工信息
break;
case 5:
del();//刪除一個職工信息
break;
case 6:
count();//統計職工信息
break;
case 0:
printf("謝謝你的使用再見/n");
return;
default:
printf("你的輸入有錯請重新輸入/n");
}
printf("是否繼續管理?(y/n)");
scanf("%s",&choice);
}
if(toupper(choice)=='N'||(choice)=='n')
{
printf("輸入完畢,任意鍵返回/n");
getch();
return;
}
}
void input()
{
FILE *fp;
int i=0;
char choiceinput='y';
if((fp=fopen("employee.txt","w"))==NULL)
return;
while(choiceinput=='y'||choiceinput=='Y')
{
i++;
printf("第%d個職工/n",i);
printf("/n");
printf("請你輸入工號:/n");//輸入工號
scanf("%d",&em[i].num);
printf("/n");
printf("請你輸入職位:/n");//輸入職位
printf("1爲董事長2爲總經理3爲副總經理/n");
printf("4爲經理5爲副經理6爲祕書/n");
printf("7爲技術員8爲領班9爲員工/n");
scanf("%d",&em[i].position);
printf("/n");
printf("請你輸入姓名:/n");//輸入姓名
scanf("%s",em[i].name);
printf("/n");
printf("請你輸入性別以m爲男f爲女:/n");//輸入性別
scanf("%s",em[i].sex);
printf("/n");
printf("請你輸入文化程度:/n");//輸入文化程度
printf("1爲專家2爲博士3爲碩士4爲學士5爲其他/n");
scanf("%d",&em[i].cult);
printf("/n");
printf("請你輸入工資:/n");//輸入工資
scanf("%d",&em[i].salary);
printf("/n");
printf("請你輸入身體情況:/n");//身體情況
printf("1好2爲一般3爲差/n");
scanf("%d",&em[i].state);
printf("/n");
printf("是否繼續輸入?(y/n)/n");
scanf("%s",&choiceinput);
fwrite(&em[i],sizeof(struct employee),1,fp);
}
if(toupper(choiceinput)=='N')
{
fclose(fp);
printf("輸入完畢,任意鍵返回/n");
getch();
return;
}
}
void display()//顯示職工信息
{
FILE *fp;
int i;
if((fp=fopen("employee.txt","r"))==NULL)
return;
printf("輸出結果:/n");
printf("工號 職位 姓名 性別 文化程度 工資 身體情況/n");
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
{
printf("工號%d/n",em[i].num);
printf("職位爲%d/n",em[i].position);
printf("1爲董事長2爲總經理3爲副總經理/n");
printf("4爲經理5爲副經理6爲祕書/n");
printf("7爲技術員8爲領班9爲員工/n");
printf("姓名爲%s/n",em[i].name);
printf("性別爲%s/n",em[i].sex);
printf("其中m爲男f爲女/n");
printf("文化程度爲%d/n",em[i].cult);
printf("1爲專家2爲博士3爲碩士4爲學士5爲其他/n");
printf("工資爲%d/n",em[i].salary);
printf("身體情況爲%d/n",em[i].state);
printf("1好2爲一般3爲差/n");
}
printf("完畢按任意鍵返回/n");
getch();
fclose(fp);
return;
}
void change()
{
FILE *fp;
int i;
char chname[8];
int choicechange;
printf("請你輸入要修改的人的姓名:/n");
scanf("%s",&chname);
if((fp=fopen("employee.txt","w+"))==NULL)
{
printf("不能夠打開這個文件/n");
return;
}
for(i=0;i<N;i++)
{
if(strcmp(chname,em[i].name)==0)
{
printf("這是你要修改的人的信息/n");
printf("工號爲%d職位爲%d姓名爲%s性別爲%s文化程度爲%d工資爲%d身體爲%d/n",em[i].num,em[i].position,em[i].name,em[i].sex,em[i].cult,em[i].salary,em[i].state);
printf("------------------------------------------------------------/n");
printf("請你輸入要修改的部分:/n");
printf("======================/n");
printf("1修改職位/n");
printf("2修改文化程度/n");
printf("3修改工資/n");
printf("4修改身體情況/n");
printf("0退出系統/n");
printf("======================/n");
printf("請選擇/n");
scanf("%d",&choicechange);
switch(choicechange)
{
case 1:
em[i].position=changeposition();
break;
case 2:
em[i].cult=changecult();
break;
case 3:
em[i].salary=changesalary();
break;
case 4:
em[i].state=changestate();
break;
case 0:
return;
default :
printf("輸入有錯誤");
}
fwrite(&em[i],sizeof(struct employee),1,fp);
}
}
fclose(fp);
printf("操作完成按任意鍵返回/n");
getch();
return;
}
int changeposition()
{
int newposition;
printf("請你輸入新職位:/n");
printf("1爲董事長2爲總經理3爲副總經理/n");
printf("4爲經理5爲副經理6爲祕書/n");
printf("7爲技術員8爲領班9爲員工/n");
scanf("%d",&newposition);
return(newposition);
}
int changecult()
{
int newcult;
printf("請你輸入新的文憑:/n");
printf("1爲專家2爲博士3爲碩士4爲學士5爲其他/n");
scanf("%d",&newcult);
return(newcult);
}
int changesalary()
{
int newsalary;
printf("請你輸入新的工資:/n");
scanf("%d",&newsalary);
return(newsalary);
}
int changestate()
{
int newstate;
printf("請你輸入現在的身體情況:/n");
printf("1好2爲一般3爲差/n");
scanf("%d",&newstate);
return(newstate);
}
void add()//追加一個職工信息
{
struct employee emp;
FILE *fp;
int i=0;
if((fp=fopen("employee.txt","ab+"))==NULL)
{
printf("不能夠打開這個文件/n");
getch();
return;
}
printf("請你輸入新人的內容:/n");
printf("請你輸入工號:/n");//輸入工號
scanf("%d",&emp.num);
printf("請你輸入職位:/n");//輸入職位
printf("1爲董事長2爲總經理3爲副總經理/n");
printf("4爲經理5爲副經理6爲祕書/n");
printf("7爲技術員8爲領班9爲員工/n");
scanf("%d",&emp.position);
printf("請你輸入姓名:/n");//輸入姓名
scanf("%s",emp.name);
printf("請你輸入性別以m爲男f爲女:/n");//輸入性別
scanf("%s",emp.sex);
printf("請你輸入文化程度:/n");//輸入文化程度
printf("1爲專家2爲博士3爲碩士4爲學士5爲其他/n");
scanf("%d",&emp.cult);
printf("請你輸入工資:/n");//輸入工資
scanf("%d",&emp.salary);
printf("請你輸入身體情況:/n");//身體情況
printf("1好2爲一般3爲差/n");
scanf("%d",&emp.state);
fwrite(&emp,sizeof(struct employee),1,fp);
rewind(fp);
printf("插入完畢,按任意鍵返回/n");
getch();
fclose(fp);
return;
}
void del()//刪除一個職工信息
{
int i=0;
char delname[8];
FILE *fp;
if((fp=fopen("employee.txt","w"))==NULL)
{
printf("文件爲空,不能夠打開/n");
printf("按任意鍵返回/n");
getch();
return;
}
printf("請你輸入要刪除的人的姓名:/n");//刪除的職工的信息
scanf("%s",delname);
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
{
if(strcmp(em[i].name,delname)!=0)
fwrite(&em[i],sizeof(struct employee),1,fp);
}
fclose(fp);
if((fp=fopen("employee.txt","r"))==NULL)//顯示新的職工的信息
return;
printf("新的職工的信息爲:/n");
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
{
printf("工號%d",em[i].num);
printf("職位爲%d",em[i].position);
printf("1爲董事長2爲總經理3爲副總經理/n");
printf("4爲經理5爲副經理6爲祕書/n");
printf("7爲技術員8爲領班9爲員工/n");
printf("姓名爲%s",em[i].name[8]);
printf("性別爲%s",em[i].sex[2]);
printf("其中m爲男f爲女");
printf("文化程度爲%d",em[i].cult);
printf("1爲專家2爲博士3爲碩士4爲學士5爲其他/n");
printf("工資爲%d",em[i].salary);
printf("身體情況爲%d",em[i].state);
printf("1好2爲一般3爲差/n");
fclose(fp);
}
}
void count()
{
FILE *fp;
int i=0;
int num=0;//總人數統計
int mnum=0,fnum=0;//性別人數統計
int expernum=0,doctornum=0,masternum=0,bechelornum=0,othernum=0;//學位人數統計
int dsznum=0,zglnum=0,fzglnum=0,glnum=0,fglnum=0;//職位人數統計
int mishunum=0,jsynum=0,lbnum=0,ygnum=0;
if((fp=fopen("employee.txt","r"))==NULL)
{
printf("不能夠打開這個文件/n");
printf("按任意鍵繼續/n");
getch();
return;
}
do
{
fread(&em[i],sizeof(struct employee),1,fp);
if(feof(fp))
break;
num++;
if(strcmp(em[i].sex,"m")==0)
mnum++;
if(strcmp(em[i].sex,"f")==0)
fnum++;
if(em[i].cult==1)
expernum++;
if(em[i].cult==2)
doctornum++;
if(em[i].cult==3)
masternum++;
if(em[i].cult=4)
bechelornum++;
if(em[i].cult=5)
othernum++;
if(em[i].position==1)//職位統計
dsznum++;
if(em[i].position==2)
zglnum++;
if(em[i].position==3)
fzglnum++;
if(em[i].position==4)
glnum++;
if(em[i].position==5)
fglnum++;
if(em[i].position==6)
mishunum++;
if(em[i].position==7)
jsynum++;
if(em[i].position==8)
lbnum++;
if(em[i].position==9)
ygnum++;
i++;
}while(1);
printf("總人數爲%d/n",num);
printf("====性別分類=====/n");
printf("男人數爲%d/n",mnum);
printf("女人數爲%d/n",fnum);
printf("=====文憑分類=====/n");
printf("專家數爲%d/n",expernum);
printf("博士數爲%d/n",doctornum);
printf("碩士數爲%d/n",masternum);
printf("學士數爲%d/n",bechelornum);
printf("其他的數爲%d/n",othernum);
printf("=====職位分類========/n");
printf("董事長數爲%d/n",dsznum);
printf("總經理數爲%d/n",zglnum);
printf("副總經理數爲%d",fzglnum);
printf("經理數爲%d",glnum);
printf("副經理數爲%d",fglnum);
printf("祕書數爲%d",mishunum);
printf("技術員數爲%d",jsynum);
printf("領班人數爲%d",lbnum);
printf("員工數爲%d",ygnum);
fclose(fp);
return;
}
void query()
{
FILE *fp;
int i=0;
char quename[8];
if((fp=fopen("employee.txt","r"))==NULL)
{
printf("不能夠打開文件,按任意鍵返回/n");
getch();
return;
}
printf("請你輸入要查詢的人的姓名/n");
scanf("%s",quename);
for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
{
if(strcmp(em[i].name,quename)==0) /*找到,並顯示該職工記錄*/
{
printf("/t/t/n查詢到的職工號或姓名爲的信息如下:/n");
printf("以下是你要查詢的人的信息/n");
printf("工號%d",em[i].num);
printf("職位爲%d",em[i].position);
printf("/t1爲董事長2爲總經理3爲副總經理/n");
printf("/t4爲經理5爲副經理6爲祕書/n");
printf("/t7爲技術員8爲領班9爲員工/n");
printf("姓名爲%s",em[i].name);
printf("性別爲%s",em[i].sex);
printf("/t其中m爲男f爲女");
printf("文化程度爲%d",em[i].cult);
printf("/t1爲專家2爲博士3爲碩士4爲學士5爲其他/n");
printf("工資爲%d",em[i].salary);
printf("身體情況爲%d",em[i].state);
printf("/n");
printf("查詢完畢,按任意鍵返回/n");
getch();
fclose(fp);
return;
}
}
printf("沒有這樣的人,按任意鍵返回/n");
getch();
fclose(fp);
return;
}
void querysalary()
{
int i;
FILE *fp1,*fp2;
creat();
if((fp1=fopen("employee.txt","w+"))==NULL)
return;
for(i=0;fread(&em[i],sizeof(struct employee),1,fp1)!=0;i++)
{
printf("輸出結果爲:/n");
printf("工號%d",em[i].num);
printf("職位爲%d",em[i].position);
printf("1爲董事長2爲總經理3爲副總經理/n");
printf("4爲經理5爲副經理6爲祕書/n");
printf("7爲技術員8爲領班9爲員工/n");
printf("姓名爲%s",em[i].name[8]);
printf("性別爲%s",em[i].sex[2]);
printf("其中m爲男f爲女");
printf("文化程度爲%d",em[i].cult);
printf("1爲專家2爲博士3爲碩士4爲學士5爲其他/n");
printf("工資爲%d",em[i].salary);
printf("身體情況爲%d",em[i].state);
printf("1好2爲一般3爲差/n");
strcpy(emps[i].name,em[i].name);
emps[i].salary=em[i].salary;
}
if((fp2=fopen("empsalary.txt","w"))==NULL)
return;
for(i=0;i<N;i++)
fwrite(&emps[i],sizeof(struct empsalary),1,fp2);
fclose(fp1);
fclose(fp2);
}
void creat()
{
FILE *fp;
if((fp=fopen("employee.txt","w+"))==NULL)
return;
input();
fclose(fp);
}
void communicate()
{
int choicecommunicate;
printf("歡迎進入通訊錄系統/n");
printf("請你選擇操作類型:/n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^/n");
printf("1爲輸入通訊錄信息/n");
printf("2爲查詢通訊錄信息/n");
printf("3爲修改通訊錄信息/n");
printf("0爲退出通訊錄系統/n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/n");
scanf("%d",&choicecommunicate);
switch(choicecommunicate)
{
case 1:
inputcommunicate();
break;
case 2:
querycommunicate();
break;
case 3:
changecommunicate();
break;
case 0:
{
printf("謝謝使用再見/n");
printf("按任意鍵返回/n");
getch();
return;
}
default:
printf("輸入有錯/n");
}
}
void inputcommunicate()
{
FILE *fp;
int choiceincom='y';
int i=0;
if((fp=fopen("empcom.txt","w"))==NULL)
{
printf("不能夠打開文件/n");
printf("任意鍵返回/n");
getch();
return;
}
printf("請你輸入通訊錄的信息:/n");
while(choiceincom=='y'||choiceincom=='Y')
{
i++;
printf("第%d個職工/n",i);
printf("請你輸入姓名:/n");
scanf("%s",empc[i].name);
printf("請你輸入辦公室電話號碼:/n");
scanf("%s",empc[i].officetel);
printf("請你輸入家庭電話號碼:/n");
scanf("%s",empc[i].hometel);
printf("請你輸入手機號碼:/n");
scanf("%s",empc[i].handtel);
printf("請你輸入地址:/n");
scanf("%s",empc[i].address);
printf("是否繼續輸入?(y/n)/n");
choiceincom=getch();
fwrite(&empc[i],sizeof(struct communication),1,fp);
}
if(toupper(choiceincom)=='N')
{
fclose(fp);
printf("輸入完畢,任意鍵返回/n");
return;
}
}
void querycommunicate()
{
FILE *fp;
int i=0;
char qcname[8];
if((fp=fopen("empcom.txt","r"))==NULL)
{
printf("不能夠打開文件,按任意鍵返回/n");
getch();
return;
}
printf("請你輸入要查詢的人的姓名:/n");
scanf("%s",qcname);
for(i=0;fread(&empc[i],sizeof(struct communication),1,fp)!=0;i++)
{
if(strcmp(empc[i].name,qcname)==0)
{
printf("以下爲您所要求的信息:/n");
printf("姓名爲%s/n",empc[i].name);
printf("辦公室電話號碼爲%s/n",empc[i].officetel);
printf("家庭電話號碼爲%s/n",empc[i].hometel);
printf("手機號碼爲%s/n",empc[i].handtel);
printf("家庭地址爲%s/n",empc[i].address);
printf("查詢完畢,按任意鍵返回/n");
getch();
fclose(fp);
return;
}
}
printf("沒有這樣的人,按任意鍵返回/n");
getch();
fclose(fp);
return;
}
void changecommunicate()
{
FILE *fp;
int i=0;
char chcname[8];
int choicecom;
if((fp=fopen("empcom.txt","w+"))==NULL)
{
printf("打不開文件按任意鍵返回/n");
getch();
return;
}
printf("請你輸入你要修改的人的姓名:/n");
scanf("%s",chcname);
for(i=0;fread(&empc[i],sizeof(struct communication),1,fp)!=0;i++)
{
if(strcmp(empc[i].name,chcname)==0)
{
printf("以下爲您所要修改的人的信息:/n");
printf("姓名爲%s/n",empc[i].name);
printf("辦公室電話號碼爲%s/n",empc[i].officetel);
printf("家庭電話號碼爲%s/n",empc[i].hometel);
printf("手機號碼爲%s/n",empc[i].handtel);
printf("家庭地址爲%s/n",empc[i].address);
printf("請你選擇要修改的東西:/n");
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$/n");
printf("1修改辦公室電話號碼/n");
printf("2修改家庭電話號碼/n");
printf("3修改手機電話號碼/n");
printf("0退出系統/n");
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$/n");
scanf("%d",&choicecom);
switch(choicecom)
{
case 1:
changetel1();
break;
case 2:
changetel2();
break;
case 3:
changetel3();
break;
case 0:
return;
default:
printf("輸入有錯/n");
}
}
}
}
void changetel1()
{
printf("參照上面有時間再編/n");
}
void changetel2()
{
printf("參照上面有時間再編/n");
}
void changetel3()
{
printf("參照上面有時間再編/n");
}