员工管理系统
(1)建立wkrs职工数据结构,结构含有姓名、序号、性别和年龄信息。
(2)设计一个 readin函数,用问答式输入10个职工的信息并存入结构数组wk中,然后将数组wk的内容存入名为 workers的文件中。
(3)编写一个 display函数,要求使用结构指针作为参数,将文件 workers的内容次读入到结构数组wkd中,然后输出wkd中的内容。
(4)建立wkr职工简明数据结构,结构只含有姓名和年龄信息。
(5)编制一个srt函数:从读入的数组wkd中抽取职工姓名和年龄,建立简明结构数组wkshort并输出其信息。
(6)编制一个 de]wk函数,可以从结构数组 wkshort中删去指定的职工记录,如果文件里没有要删去的职工,则输出没有这个职工的信息。如果将内容全部删除,则给出一个已经删空的提示信息并退出该操作。
(7)将上述函数编制在一个文件里,共用一个头文件。
(8)用一个简单的菜单提供上述操作。
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<string.h>
struct wkrs{
char name[20];
int num;
char sex[10];
int age;
};
struct wkr
{
char name[20];
int age;
};
void readin()//输入信息
{
int n;
struct wkrs worker;
FILE *fp=fopen("workers.txt","a");
printf("请输入要录入的人数:");
scanf("%d",&n);
for(int i=0;i<n;i++){
printf("请输入姓名:"); scanf("%s",&worker.name); fprintf(fp,"%s ",worker.name);
printf("请输入编号:"); scanf("%d",&worker.num); fprintf(fp,"%d ",worker.num);
printf("请输入性别:"); scanf("%s",&worker.sex); fprintf(fp,"%s ",worker.sex);
printf("请输入年龄:"); scanf("%d",&worker.age); fprintf(fp,"%d\n",worker.age);
printf("\n---------------------------\n\n");
}
fclose(fp);
}
int display(struct wkrs wkd[])
{
FILE *fo=fopen("workers.txt","r");
assert(fo!=NULL);
int i=0;
while(fscanf(fo,"%s%d%s%d",wkd[i].name,&wkd[i].num,wkd[i].sex,&wkd[i].age)!=EOF){
printf("%s\t%d\t%s\t%d\n",wkd[i].name,wkd[i].num,wkd[i].sex,wkd[i].age);
i++;
}
fclose(fo);
return i;
}
struct wkr* srt(struct wkrs wkd[],int n)
{
struct wkr *wkshort=malloc(100);
printf("wkshort信息:\n");
for(int i=0;i<n;i++){
strcpy(wkshort[i].name,wkd[i].name);
wkshort[i].age=wkd[i].age;
printf("%s\t%d\n",wkd[i].name,wkd[i].age);
}
return wkshort;
}
int delwk(struct wkrs *wkd,int n)
{
if(n==0){
printf("员工信息已删空,无法删除!\n");
return n;
}
int x=0;
char name[20];
printf("请输入要删除的员工姓名:\n");
scanf("%s",name);
for(int i=0;i<n;i++){
if(!strcmp(name,wkd[i].name)){
x=1;
for(int j=i;j<n;j++){
wkd[j]=wkd[j+1];
}
}
}
if(x==0){
printf("员工%s不存在,无法删除!\n",name);
return n;
}
n=n-1;
FILE *fp=fopen("workers.txt","w");
for(int i=0;i<n;i++){
fprintf(fp,"%s ",wkd[i].name);
fprintf(fp,"%d ",wkd[i].num);
fprintf(fp,"%s ",wkd[i].sex);
fprintf(fp,"%d\n",wkd[i].age);
}
fclose(fp);
printf("员工%s删除成功!\n",name);
return n;
}
int main()
{
struct wkrs wkd[100];
struct wkr *wkshort;
int n,x;
while(1){
system("cls");
printf("--------员工信息管理-------\n\n");
printf("1-------录入员工信息\n");
printf("2-------查看员工信息\n");
printf("3-------查看简略信息\n");
printf("4-------删除员工信息\n");
printf("5-------退出管理系统\n");
printf("请选择:");
int x; scanf("%d",&x);
switch(x){
case 1:
readin();
break;
case 2:
system("cls");
n=display(wkd);
printf("按1返回");
while(1){
scanf("%d",&x);
if(x==1)
break;
}
x=0;
break;
case 3:
system("cls");
wkshort=srt(wkd,n);
printf("按1返回");
while(1){
scanf("%d",&x);
if(x==1)
break;
}
x=0;
break;
case 4:
system("cls");
n=delwk(wkd,n);
printf("按1返回");
while(1){
scanf("%d",&x);
if(x==1)
break;
}
x=0;
break;
case 5:
break;
default:
printf("输入错误,请重新输入!");
}
if(x==5){
break;
}
}
}