第2个回答 2011-08-22
printf(“========*** 主菜单 ***=========\n“); //这个打印控制台的。以下printf都是输出控制台内容
printf(“ 1. 输入职工记录\n“);
printf(“ 2. 查询职工记录\n“);
printf(“ 3. 修改职工记录\n“);
printf(“ 4. 删除职工记录\n“);
printf(“ 5. 输出职工记录\n“);
printf(“ 6. 调查工资情况\n“);
printf(“ 7. 追加职工记录\n“);
printf(“ 8. 结束使用\n“);
printf(“ 0. 退出系统\n“);
printf(“\n“);
printf(“*** 欢迎使用职工档案管理系统 ***\n“);
printf(“请选择(0-8):\n“);
scanf(“%d“,&x); //这个是接受用户输入的方法。%d是参数类型,&x输入值
switch(x) //这个是根据X选择的方法。也就是控制流语句
{
case 1: input();break; //当X=1的时候,则执行input方法。遇到break中断后面的case操作。以下的一样
case 2: search();break;
case 3: modi();break;
case 4: dele();break;
case 5: output();break;
case 6: stat();break;
case 7: run();break;
case 8: fun();break;
default:printf(“\n Wrong!“); //这个是当X不符合1-8的数字时候,输出的内容
}
if(x==0)break; //跟上面的case一样的
}
}
void input() //用户自定义的方法
{
FILE *fp; //声明指针
int n,i; //声明变量
//fopen函数用来打开一个文件,其调用的一般形式为:
//文件指针名=fopen(文件名,使用文件方式);
// 其中,
// “文件指针名”必须是被说明为FILE 类型的指针变量;
// “文件名”是被打开文件的文件名;
// “使用文件方式”是指文件的类型和操作要求。
// “文件名”是字符串常量或字符串数组。
if ((fp=fopen(“emp“,“wb“))==NULL) //这个函数是C里面内置的
{
printf(“不能建立emp文件\n“);
exit(1); //当不能建立文件是终止后续操作
}
printf(“输入职工人数:“);
scanf(“%d“,&n);
printf(“输入格式:职工号\t 姓名\t 性别\t 工龄\t 工资<Enter>\n“);
for(i=0;i<n;i++) /* 循环获取n个职工记录 */ //循环语句控制流。i是语句控制变量,i++在每循环一次后自动加1,i<n这个不用解释了吧
{
printf(“第%d个职工:“,i+1);
scanf(“%s%s%s%d%d“,emp[i].no,emp[i].name,emp[i].sex,
&emp[i].year,&emp[i].salar); //%s是字符串的格式 %d是整形的格式
}
for(i=0;i<n;i++) /*将n个职工记录写入文件*/
fwrite(&emp[i],sizeof(struct employee),1,fp); //写入文件内容,C内置的方法
fclose(fp); //关闭文件操作,也是C内置的
}
/*************************统计模块**********************/
void stat( ) //同样是个自定义方法
{
FILE *fp;
int n,num;
if((fp=fopen(“emp“,“rb“))==NULL)
{
printf(“不能打开emp文件\n“);
exit(1);
}
printf(“工资数:“);
scanf(“%d“,&num);
printf(“记录号 职工号\t 姓名\t 性别\t 工龄\t 工资\n“);
for(n=0;fread(&emp,sizeof(struct employee),1,fp);n++)
if(emp[n].salar>=num)
printf(“%6d%6s%9s%8s%8d%8d\n“,n+1,emp[n].no,emp[n].name,emp[n].sex,
emp[n].year,emp[n].salar);
fclose(fp);
}