功能要求:设计一个职工类Employee。数据成员包括字符串型的name(姓名)、street(街道地址)、city(市)、province(省)、zipcode(邮政编码)。要求用成员函数实现以下功能:
(1)创建职工对象时,初始化职工信息。
(2)设置职工对象信息。
(3)在屏幕上输出职工信息。
(4)在主函数中创建能够容纳100个该类对象的数组,并通过数组元素访问对象的各方法。


#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
struct Employee
{
char name[20];
char street[20];
char city[20];
char province[20];
char zipCode[20];
}employee[105];
int n;//员工总数
void mainFrame();//主功能界面
void create();//新建职工对象
void scan();//浏览所有职工信息
void update();//修改职工信息
void get_n();//得到共有多少个员工
void create()
{
system("cls");
FILE *fp=fopen("E:\\职工信息.txt","a");
printf("请输入职工的 姓名 省 市 街道地址 邮政编码 (必须全部填写并用空格分开)\n");
scanf("%s %s %s %s %s",employee[n].name,employee[n].province,employee[n].city,employee[n].street,employee[n].zipCode);
if(employee[n].name==NULL||employee[n].province==NULL||employee[n].city==NULL||employee[n].street==NULL||employee[n].zipCode==NULL)
{
printf("添加错误!请重新添加\n");
create();
}
else
{
if(fwrite(&employee[n],sizeof(struct Employee),1,fp)==1)
{
printf("添加成功!\n");
n++;
}
else
{
printf("添加失败!\n");
}
fclose(fp);
printf("是否继续添加?(y或者n)\n");
char ch=getch();
if(ch=='y'||ch=='Y')
create();
else
mainFrame();
}

}
//修改职工信息的原理 先在文件中找到这个职工 记录下这个职工的编号
//然后删除这个文件 重新创建一个文件并写入修改后的信息
void update()
{
system("cls");
FILE *fp=fopen("E:\\职工信息.txt","r");
char name1[20];
int mark=-1;
printf("请输入你要修改的职工的姓名\n");
scanf("%s",name1);
for(int i=0;i<n;i++)
{
if(strcmp(employee[i].name,name1)==0)
mark=i;
}
if(mark==-1)
{
printf("找不到这个人,请重新输入\n");
update();
}
else
{
remove("E:\\职工信息.txt");
FILE *fp=fopen("E:\\职工信息.txt","w");
printf("找到了!请输入这个员工的 省 市 街道地址 邮政编码 (必须全部填写并用空格分开)\n");
scanf("%s %s %s %s",employee[mark].province,employee[mark].city,employee[mark].street,employee[mark].zipCode);
if(employee[mark].name==NULL||employee[mark].province==NULL||employee[mark].city==NULL||
employee[mark].street==NULL||employee[mark].zipCode==NULL)
{
printf("修改错误!请重新修改\n");
create();
}
else
{
for(int i=0;i<n;i++)
fwrite(&employee[i],sizeof(struct Employee),1,fp);
fclose(fp);
printf("是否继续修改?(y或者n)\n");
char ch=getch();
if(ch=='y'||ch=='Y')
update();
else
mainFrame();
}
}
}
void mainFrame()
{
int x;
system("cls");
printf("**********************************************\n");
printf("* 请输入序号执行对应的操作 *\n");
printf("* (1)创建职工对象。 *\n");
printf("* (2)设置职工对象信息。 *\n");
printf("* (3)在屏幕上输出职工信息。 *\n");
printf("* (4)退出程序。 *\n");
printf("**********************************************\n");
scanf("%d",&x);
if(x==1)
{
create();
}
else if(x==2)
{
update();
}
else if(x==3)
{
scan();
}
else
{
exit(0);
}
}
void get_n()
{
FILE *fp=fopen("E:\\职工信息.txt","r");
for(n=0;;n++)
{
if(fread(&employee[n],sizeof(struct Employee),1,fp)==1)
continue;
else
break;
}
fclose(fp);
}
void scan()
{
system("cls");
printf("姓名\t省\t市\t街道\t邮政编码\n");
for(int i=0;i<n;i++)
printf("%s\t%s\t%s\t%s\t%s\n",employee[i].name,employee[i].province,employee[i].city,employee[i].street,employee[i].zipCode);
printf("按任意键回到主界面\n");
getch();
mainFrame();
}
int main()
{
get_n();
mainFrame();
}