#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 300
struct date
{
char year[6];
char month[4];
char day[4];
};
struct st
{
char num[13];
char name[15];
int age;
char work[20];
char sex[6];
char add[30];
char phone[20];
struct date hiredate;
};
void lr()
{
FILE *p;
struct st s1;
char ans='y';
p=fopen("staff.dat","a");
if(p==NULL)
{
printf("file open error!\n");
exit(-1);
}
while(ans=='y'||ans=='Y')
{
printf("请输入工号:");
scanf("%s",s1.num);
printf("请输入姓名:");
scanf("%s",s1.name);
printf("请输入年龄:");
scanf("%d",&s1.age);
printf("请输入性别:");
scanf("%s",s1.sex);
printf("请输入工作:");
scanf("%s",s1.work);
printf("请输入地址:");
scanf("%s",s1.add);
printf("请输入电话:");
scanf("%s",s1.phone);
printf("请输入入职时间(年月日):");
scanf("%s%s%s",s1.hiredate.year,s1.hiredate.month,s1.hiredate.day);
fwrite(&s1,sizeof(struct st),1,p);
getchar();
printf("继续输入吗?(y/n)");
scanf("%c",&ans);
}
fclose(p);
}
void gx()
{
FILE *p;
struct st s[N];
int i=0,c,flag;
p=fopen("staff.dat","rb");
if(p==NULL)
{
printf("文件不存在!\n");
exit(-1);
}
while(fread(&s[i], sizeof(struct st),1,p)==1)
{
i++;
}
fclose(p);
over:
system("cls");
printf("请选择功能:\n");
printf("**----------------按1:追加员工信息-----------------**\n");
printf("**----------------按2:删除员工信息-----------------**\n");
printf("**----------------按3:修改员工信息-----------------**\n");
printf("**-----------------按0:返回主菜单------------------**\n");
fflush(stdout);rewind(stdin);
scanf("%d",&c);
switch(c)
{
case 1:
flag=0;
printf("请输入追加员工人数:");
int zj,n;
scanf("%d",&zj);
getchar();
for(i=n; i<n+zj; i++)
{
printf("请输入第%d人的信息:\n",i-n+1);
printf("请输入工号:\n");
scanf("%s",s[i].num);
printf("请输入姓名:\n");
scanf("%s",s[i].name);
printf("请输入年龄:\n");
scanf("%s",s[i].age);
//getchar();
printf("请输入职位:\n");
scanf("%s",s[i].work);
printf("请输入性别:\n");
scanf("%s",s[i].sex);
printf("请输入地址:\n");
scanf("%s",s[i].add);
printf("请输入电话:\n");
scanf("%s",s[i].phone);
printf("请输入入职时间(年月日):");
scanf("%s%s%s",s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);
}
n=n+zj;
printf("追加成功 按回车继续······");
getchar();
break;
case 2:
flag=0;
printf("请输入删除员工人数:");
int sc,j,k;
scanf("%d",&sc);
getchar();
char gh[13];
for(i=0; i<sc; i++)
{
printf("请输入删除的员工工号:");
scanf("%d",&gh);
for(j=0; j<n; j++)
{
if(strcmp(gh,s[j].num)==0)
{
if(j==n-1)
{
flag=1;
n=n-1;
}
else
{
flag=1;
for(k=j; k<n; k++)
{
s[k]=s[k+1];
}
n=n-1;
}
}
}
}
if(flag==0)
{
printf("查无此人 请重新选择!\n按回车继续······");
getchar();
getchar();
goto over;
}
printf("删除成功 按回车继续······");
getchar();
break;
case 3:
flag=0;
printf("请输入要修改员工的工号:");
char gh1[13];
getchar();
scanf("%s",&gh1);
for(i=0; i<n; i++)
{
if(strcmp(gh1,s[i].num)==0)
{
printf("请输入工号:\n");
scanf("%s",s[i].num);
printf("请输入姓名:\n");
scanf("%s",s[i].name);
printf("请输入年龄:\n");
scanf("%s",s[i].age);
getchar();
printf("请输入职位:\n");
scanf("%s",s[i].work);
printf("请输入性别:\n");
scanf("%s",s[i].sex);
printf("请输入地址:\n");
scanf("%s",s[i].add);
printf("请输入电话:\n");
scanf("%s",s[i].phone);
printf("请输入入职时间(年月日):");
scanf("%s%s%s",s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);
flag=1;
}
}
if(flag==0)
{
printf("查无此人 请重新选择!\n按回车继续······");
getchar();
}
break;
case 0:
FILE *fp;
printf("正在保存至staff.dat");
if((fp=fopen("staff.dat", "wb"))==NULL)
{
printf("文件无法打开...\n");
}
fwrite(s, sizeof(struct st),n,p);
fclose(fp);
printf("数据成功写入文件...\n");
printf("请按回车键继续······");
getchar();
default:
printf("输入出错 请重新输入!!\n按回车继续······");
}
goto over;
system("pause");
}
void cx()
{
FILE *p;
struct st s[N];
char num[13];
char name[15];
char phone[20];
int i,w,c,n=0,m=1;
p=fopen("staff.dat","rb");
if(p==NULL)
{
printf("file open error.\n");
exit(-1);
}
while(fread(&s[n],sizeof(struct st),1,p)==1)
n++;
fclose(p);
do{
system("cls");
printf("\n");
printf("****************************************************\n");
printf("**-----------------按1 按工号查询-----------------**\n");
printf("**-----------------按2 按姓名查询-----------------**\n");
printf("**-----------------按3 按电话查询-----------------**\n");
printf("**-----------------按0 退出系统 -----------------**\n");
printf("****************************************************\n");
printf("\n请输入你的选择:");
fflush(stdout);rewind(stdin);
scanf("%d",&c);
switch(c)
{
case 1:
printf("\n请输入要查询的员工工号:");
fflush(stdout);rewind(stdin);
scanf("%s",num);
for(i=0;i<n;i++)
{
if(strcmp(num,s[i].num)==0) break;
}
if(i>=n)
{
printf("\n不存在该工号!\n");
}
else
{
printf("\n按工号查询:\n");
printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");
printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[i].num,s[i].name,s[i].age,s[i].sex,s[i].work,s[i].add,s[i].phone,s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);
printf("----------------------------------------------------------------------------------------------------------\n");
}
system("pause");
break;
case 2:
printf("\n请输入要查询的员工姓名:");
fflush(stdout);rewind(stdin);
scanf("%s",name);
for(i=0;i<n;i++)
{
if(strcmp(name,s[i].name)==0) break;
}
if(i>=n)
{
printf("\n不存在该姓名!\n");
}
else
{
printf("\n按姓名查询:\n");
printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");
printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[i].num,s[i].name,s[i].age,s[i].sex,s[i].work,s[i].add,s[i].phone,s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);
printf("----------------------------------------------------------------------------------------------------------\n");
}
system("pause");
break;
case 3:
printf("\n请输入要查询的员工电话:");
fflush(stdout);rewind(stdin);
scanf("%s",phone);
for(i=0;i<n;i++)
{
if(strcmp(phone,s[i].phone)==0) break;
}
if(i>=n)
{
printf("\n不存在该电话!\n");
}
else
{
printf("\n按电话查询:\n");
printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");
printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[i].num,s[i].name,s[i].age,s[i].sex,s[i].work,s[i].add,s[i].phone,s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);
printf("----------------------------------------------------------------------------------------------------------\n");
}
system("pause");
break;
case 0:
return;
default:
printf("输入有误 请重新输入!\n");
getchar();
}
}while(c!=0);
}
void pl()
{
system("cls");
struct st s[N],t;
FILE *p;
int i,j,n=0;
p=fopen("staff.dat","r");
if(p==NULL)
{
printf("file open error.\n");
exit(-1);
}
while(fread(&s[n],sizeof(struct st),1,p)==1)
n++;
fclose(p);
for(i=0;i<n-1;i++)
for(j=0;j<n-1;j++)
{
if(s[j].age>s[i+1].age)
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
printf("\n按照年龄从小到大排序:\n");
printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");
printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");
for(i=0;i<n;i++)
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[i].num,s[i].name,s[i].age,s[i].sex,s[i].work,s[i].add,s[i].phone,s[i].hiredate.year,s[i].hiredate.month,s[i].hiredate.day);
printf("----------------------------------------------------------------------------------------------------------\n");
system("pause");
}
void tj()
{
FILE *fp;
struct st s[N];
int i=0,choice,flag;
if((fp=fopen("staff.dat", "rb"))==NULL)
{
printf("文件不存在!\n");
}
while(fread(&s[i], sizeof(struct st),1,fp))
{
i++;
}
fclose(fp);
int a;
char sex[6],work[20];
sa:
system("cls");
printf("***********************************************************\n");
printf("**-----------------按1:按照员工年龄统计-----------------**\n");
printf("**-----------------按2:按照员工性别统计-----------------**\n");
printf("**-----------------按3:按照员工工作统计-----------------**\n");
printf("**-----------------按0: 退出统计 -----------------**\n");
printf("***********************************************************\n");
printf("\n请输入你的选择:");
scanf("%d",&a);
getchar();
switch(a)
{
case 1:
flag=0;
int sui;
printf("\n请输入要统计的员工年龄:");
scanf("%d",&sui);
getchar();
int n;
for(int n=0; n<i; n++)
{
if(s[n].age==sui)
{
flag++;
if(flag==1)
{
printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");
printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");
}
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[n].num,s[n].name,s[n].age,s[n].sex,s[n].work,s[n].add,s[n].phone,s[n].hiredate.year,s[n].hiredate.month,s[n].hiredate.day);
}
}
printf("----------------------------------------------------------------------------------------------------------\n");
if(flag==0)
{
printf("\n统计方式无对应人员信息\n");
}
printf("\n按回车键继续");
getchar();
break;
case 2:
flag=0;
printf("\n请输入要统计的员工性别:");
gets(sex);
for(int n=0; n<i; n++)
{
if(strcmp(sex,s[n].sex)==0)
{
flag++;
if(flag==1)
{
printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");
printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");
}
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[n].num,s[n].name,s[n].age,s[n].sex,s[n].work,s[n].add,s[n].phone,s[n].hiredate.year,s[n].hiredate.month,s[n].hiredate.day);
}
}
printf("----------------------------------------------------------------------------------------------------------\n");
if(flag==0)
{
printf("\n统计方式无对应人员信息\n");
}
printf("\n按回车键继续");
getchar();
break;
case 3:
flag=0;
printf("\n请输入要统计的员工工作:");
gets(work);
for(int n=0; n<i; n++)
{
if(strcmp(work,s[n].work)==0)
{
flag++;
if(flag==1)
{
printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");
printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");
}
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t%s.%s.%s\n",s[n].num,s[n].name,s[n].age,s[n].sex,s[n].work,s[n].add,s[n].phone,s[n].hiredate.year,s[n].hiredate.month,s[n].hiredate.day);
}
}
printf("----------------------------------------------------------------------------------------------------------\n");
if(flag==0)
{
printf("\n统计方式无对应人员信息\n");
}
printf("\n按回车键继续");
getchar();
break;
case 0:
return;
default:
printf("输入有误 请重新输入!\n按回车键继续");
getchar();
}
goto sa;
system("pause");
}
void sc()
{
system("cls");
FILE *p;
struct st s1;
p=fopen("staff.dat","r");
if(p==NULL)
{
printf("file open error.\n");
exit(-1);
}
printf("\n---------------------------------------------员工信息-----------------------------------------------------\n");
printf("工号\t姓名\t年龄\t性别\t工作\t地址\t\t电话\t\t\t入职时间\n");
while(fread(&s1, sizeof(struct st),1, p)==1)
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t\t %s.%s.%s\n",s1.num,s1.name,s1.age,s1.sex,s1.work,s1.add,s1.phone,s1.hiredate.year,s1.hiredate.month,s1.hiredate.day);
printf("----------------------------------------------------------------------------------------------------------\n");
printf("\n");
fclose(p);
system("pause");
}
int main()
{
system("color F0");
int choice;
printf("\n");
while(1)
{
system("cls");
printf("*************************************************************\n");
printf("**------------------欢迎进入企业员工管理系统---------------**\n");
printf("**--------------------按1,录入员工信息--------------------**\n");
printf("**--------------------按2,更新员工信息--------------------**\n");
printf("**--------------------按3,查询员工信息--------------------**\n");
printf("**--------------------按4,排列员工信息--------------------**\n");
printf("**--------------------按5,统计员工信息--------------------**\n");
printf("**--------------------按6,输出员工信息--------------------**\n");
printf("**--------------------按0,退出系统------------------------**\n");
printf("**----------------------------------制作者:食品2003班3组--**\n");
printf("*************************************************************\n");
printf("\n请输入你的选项:");
scanf("%d",&choice);
switch(choice)
{
case 0:printf("\n运行结束,谢谢使用!\n");system("pause");return 0;
case 1:lr();break;
case 2:gx();break;
case 3:cx();break;
case 4:pl();break;
case 5:tj();break;
case 6:sc();break;
default:printf("\n输入错误,请重新选择!\n");
system("pause");
}
}
system("pause");
return 0;
}
int zj,n;
scanf("%d",&zj);
getchar();
for(i=n; i<n+zj; i++)
===在你更新函数中,并没有给n输入值啊, 就开始循环了,崩溃是必然的
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps: 问答会员【8折】购 ,仅需→¥23.2,即可享受5次/月 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m