题目如下图(本人严格按照要求+简单)
说明一下用到的这几个函数:
fread(void *buffer, size_t size, size_t count, FILE * stream):buffer为接收数据的地址,size为一个单元的大小,count为单元个数,stream为文件流,读取后光标向后移动size*count个字节(就是到没读的位置);
fwrite(void *buffer, size_t size, size_t count, FILE * stream):同上;
feof(FILE * stream): 检测文件结尾,到结尾返回1;
atoi(str):ASCII to integer 的缩写;
atof:ASCII to float 的缩写;
代码:
//职工号 姓名 性别 年龄 学历 工资 住址 电话
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STF stf[i].num,stf[i].name,stf[i].sex,stf[i].age,stf[i].qua,stf[i].sal,stf[i].ads,stf[i].phone
#define LEN sizeof(struct staff)
struct staff{
int num;
char name[9];
char sex[3];
int age;
char qua[9];//qualification学历
float sal;//salary
char ads[99];//address
long phone;
}stf[99];
void menu();//菜单
void in();//录入
void browse();//浏览
void search();//查询
void _delete();//删除
void modify();//修改
int main()
{
int select;
system("color f0");//白底黑字
while(true)
{
system("cls");
menu();
scanf("%d",&select);
switch(select)
{
case 1:in();break;
case 2:browse();break;
case 3:search();break;
case 4:_delete();break;
case 5:modify();break;
case 0:exit(0);break;
}
}
return 0;
}
void menu()
{
puts("\t职工信息管理系统\n");
puts("\t1.信息录入");
puts("\t2.信息浏览");
puts("\t3.信息查询");
puts("\t4.信息删除");
puts("\t5.信息修改");
puts("\t0.退出");
}
void in()
{
FILE *fp;
int n=0;
if((fp=fopen("a.txt","a+"))==NULL){
puts("error");
return;
}
while(!feof(fp)){
if((fread(&stf[n],LEN,1,fp)))
n++;
}
puts("职工号:");
scanf("%d",&stf[n].num);
for(int i=0;i<n;i++){
if(stf[n].num==stf[i].num){
puts("存在");
fclose(fp);
return;
}
}
puts("姓名");
scanf("%s",stf[n].name);
puts("性别");
scanf("%s",stf[n].sex);
puts("年龄");
scanf("%d",&stf[n].age);
puts("学历");
scanf("%s",stf[n].qua);
puts("工资");
scanf("%f",&stf[n].sal);
puts("住址");
scanf("%s",stf[n].ads);
puts("电话");
scanf("%ld",&stf[n].phone);
fwrite(&stf[n],LEN,1,fp);
fclose(fp);
}
void browse()
{
FILE *fp;
int n=0;
if((fp=fopen("a.txt","r"))==NULL){
puts("error");
return;
}
while(!feof(fp)){
if((fread(&stf[n],LEN,1,fp)))
n++;
}
puts("职工号 姓名 性别 年龄 学历 工资 住址 电话");
if(n==0)
{
puts("无信息");
system("pause");
return;
}
for (int i=0;i<n;i++){
printf("%-9d %s %s %d %s %.2f %s %ld\n",STF);
}
system("pause");
}
void search()
{
FILE *fp;
int n=0;
if((fp=fopen("a.txt","r"))==NULL){
puts("error");
return;
}
while(!feof(fp)){
if((fread(&stf[n],LEN,1,fp)))
n++;
}
fclose(fp);
char dx[99];
puts("输入查找的职工号或者姓名:");
scanf("%s",dx);
for(int i=0;i<n;i++)
{
if(atoi(dx)==stf[i].num || strcmp(dx,stf[i].name)==0){
printf("%-9d %s %s %d %s %.2f %s %ld\n",STF);
system("pause");return;
}
}
puts("不存在");system("pause");
}
void _delete()
{
FILE *fp;
int n=0;
if((fp=fopen("a.txt","r"))==NULL){
puts("error");
return;
}
while(!feof(fp)){
if((fread(&stf[n],LEN,1,fp)))
n++;
}
fclose(fp);
char dx[99];
puts("输入删除的职工号或者姓名:");
scanf("%s",dx);
for(int i=0;i<n;i++)
{
if(atoi(dx)==stf[i].num || strcmp(dx,stf[i].name)==0){
for(int j=i;i<n-1;i++)
stf[i]=stf[i+1];
n--;
puts("ok");
}
}
if((fp=fopen("a.txt","w"))==NULL)
{
puts("error");
return;
}
for(int i=0;i<n;i++){
fwrite(&stf[i],LEN,1,fp);
}
fclose(fp);
system("pause");
}
void modify()
{
FILE *fp;
int n=0;
if((fp=fopen("a.txt","r"))==NULL){
puts("error");
return;
}
while(!feof(fp)){
if((fread(&stf[n],LEN,1,fp)))
n++;
}
fclose(fp);
char dx[99];
puts("输入修改的职工号:");
scanf("%s",dx);
getchar();
for(int i=0;i<n;i++)
{
if(atoi(dx)==stf[i].num){
puts("你要修改什么:");
puts("职工号 姓名 性别 年龄 学历 工资 住址 电话");
char d[9];
scanf("%s",d);
getchar();
if(strcmp(d,"职工号")==0)
scanf("%d",&stf[i].num);
else if(strcmp("姓名",d)==0)
scanf("%s",stf[i].name);
else if(strcmp("性别",d)==0)
scanf("%s",stf[i].sex);
else if(strcmp("年龄",d)==0)
scanf("%d",&stf[i].age);
else if(strcmp("学历",d)==0)
scanf("%s",stf[i].qua);
else if(strcmp("工资",d)==0)
scanf("%f",&stf[i].name);
else if(strcmp("住址",d)==0)
scanf("%s",stf[i].ads);
else if(strcmp("电话",d)==0)
scanf("%ld",&stf[i].phone);
else{
puts("输入错误");system("pause");return ;
}
}
}
if((fp=fopen("a.txt","w"))==NULL)
{
puts("error");
return;
}
for(int i=0;i<n;i++){
fwrite(&stf[i],LEN,1,fp);
}
fclose(fp);
system("pause");
}