C语言是门经典的高级语言,只可惜大学学的不够好,工作后也没怎么用到,快把学的还给老师了,最近无聊之余,把C语言相关知识看了,编程还是在于多练和多思考,实践加学习才能领悟和找到解决问题的方法,下面是看了C语言视频后,自动动手做的一个职工信息管理系统。在C语言中读写文件,一般有一下步骤,首先用fopen函数打开文件,返回文件指针,然后用fwrite或者fread等函数进行读写,使用完后用fclose关闭。自己做该系统还是花了不少时间,主要是对结构体指针等操作以及C的一些函数不是很熟。需求如下:
源码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<math.h>
struct Birth
{
int Year;
int Month;
int Day;
};
typedef struct WorkerInfo
{
char WorkerNo[10];
char Xm[10];
char Sex[2];
struct Birth birth;
char Edu[18];
char Prof[20];
float Wage;
char Addr[30];
char Phone[13];
}WorkerInfo;
void ShowMain()
{
system("CLS");
printf("%50s\n","欢迎使用职工信息管理系统");
printf("%30s","1显示系统进入画面");
printf("%30s\n","2职工信息录入功能--输入");
printf("%30s","3职工信息浏览功能--输出");
printf("%20s\n","4职工信息查询");
printf("%30s","5职工信息删除");
printf("%20s","6职工信息修改");
printf("\n");
};
void InputInfo()
{
FILE *fp;
WorkerInfo *InputInfo;
fp=fopen("WorkerInfo.dat", "a");
if(fp==NULL)
{
printf("打开文件失败!");
}
else
{
InputInfo=(WorkerInfo *)malloc(sizeof(WorkerInfo));
printf("请输入职工号:\n");
scanf("%s",InputInfo->WorkerNo);
while(strcmp(InputInfo->WorkerNo,"9999")!=0)
{
printf("请输入:姓名 性别 出生年月 \n");
scanf("%s %s %4d %2d %2d",
InputInfo->Xm,InputInfo->Sex,&InputInfo->birth.Year,
&InputInfo->birth.Month,&InputInfo->birth.Day);
printf("请输入:学历 职务 工资 住址 电话\n");
scanf("%s %s %f %s %s",
InputInfo->Edu,InputInfo->Prof,&InputInfo->Wage,
InputInfo->Addr,InputInfo->Phone);
fwrite(InputInfo,sizeof(struct WorkerInfo),1,fp);
memset(InputInfo,0,sizeof(WorkerInfo));
printf("请输入职工号:\n");
scanf("%s",InputInfo->WorkerNo);
}
if(InputInfo!=NULL)
{
free(InputInfo);
InputInfo=NULL;
}
}
fclose(fp);
};
void DisPlayInfo()
{
FILE *fp;
WorkerInfo *CurInfo;
fp=fopen("WorkerInfo.dat", "r");
if(fp==NULL)
{
printf("没有相应的职工信息!");
}
else
{
CurInfo=(WorkerInfo *)malloc(sizeof(WorkerInfo ));
printf("职工号 姓名 性别 出生年月 学历 职务 工资 住址 电话\n");
while(!feof(fp))
{
memset(CurInfo,0,sizeof(WorkerInfo));
if(fread(CurInfo,sizeof(struct WorkerInfo),1,fp)!=0)
printf("%s %s %s %4d年%2d月%2d日 %s %s %.4f %s %s\n",
CurInfo->WorkerNo,CurInfo->Xm,CurInfo->Sex,
CurInfo->birth.Year,CurInfo->birth.Month,CurInfo->birth.Day,
CurInfo->Edu,CurInfo->Prof,CurInfo->Wage,CurInfo->Addr,CurInfo->Phone);
}
if(CurInfo!=NULL)
{
free(CurInfo);
CurInfo=NULL;
}
fclose(fp);
}
};
void FindResult(const int iType)
{
FILE *fp;
WorkerInfo *CurInfo;
float wage;
char Edu[18];
fp=fopen("WorkerInfo.dat", "r");
if(iType==1)
{
printf("请输入工资:\n");
scanf("%f",&wage);
}
else if (iType==2)
{
printf("请输入学历:\n");
scanf("%s",Edu);
}
if(fp==NULL)
{
printf("没有相应的职工信息!");
}
else
{
CurInfo=(WorkerInfo *)malloc(sizeof(WorkerInfo ));
printf("职工号 姓名 性别 出生年月 学历 职务 工资 住址 电话\n");
while(!feof(fp))
{
memset(CurInfo,0,sizeof(WorkerInfo));
if(fread(CurInfo,sizeof(struct WorkerInfo),1,fp)!=0)
{
if((iType==1)&&(fabs(CurInfo->Wage-wage)<0.0001))
{
printf("%s %s %s %4d年%2d月%2d日 %s %s %.4f %s %s\n",
CurInfo->WorkerNo,CurInfo->Xm,CurInfo->Sex,
CurInfo->birth.Year,CurInfo->birth.Month,CurInfo->birth.Day,
CurInfo->Edu,CurInfo->Prof,CurInfo->Wage,CurInfo->Addr,CurInfo->Phone);
}
else if((iType==2)&&(strcmp(CurInfo->Edu,Edu)==0))
{
printf("%s %s %s %4d年%2d月%2d日 %s %s %.4f %s %s\n",
CurInfo->WorkerNo,CurInfo->Xm,CurInfo->Sex,
CurInfo->birth.Year,CurInfo->birth.Month,CurInfo->birth.Day,
CurInfo->Edu,CurInfo->Prof,CurInfo->Wage,CurInfo->Addr,CurInfo->Phone);
}
}
}
if(CurInfo!=NULL)
{
free(CurInfo);
CurInfo=NULL;
}
fclose(fp);
}
}
void QueryInfo()
{
int i;
printf("请输入查询方式序号:\n");
printf("1按工资查询\n");
printf("2按学历查询\n");
scanf("%d",&i);
switch(i)
{
case 1:FindResult(1);break;
case 2:FindResult(2);break;
default:
printf("错误的查询序号\n");
}
};
void DeleteInfo()
{
char sno[10];
FILE *fp,*fp2;
WorkerInfo *CurInfo;
printf("请输入要删除的职工编号");
scanf("%s",sno);
fp=fopen("WorkerInfo.dat", "r");
fp2=fopen("WorkerInfo1.dat","w");
if(fp==NULL)
{
printf("没有相应的职工信息!");
}
else
{
CurInfo=(WorkerInfo *)malloc(sizeof(WorkerInfo ));
while(!feof(fp))
{
memset(CurInfo,0,sizeof(WorkerInfo));
if((fread(CurInfo,sizeof(struct WorkerInfo),1,fp)!=0)&&(strcmp(CurInfo->WorkerNo,sno)!=0))
{
fwrite(CurInfo,sizeof(struct WorkerInfo),1,fp2);
}
}
if(CurInfo!=NULL)
{
free(CurInfo);
CurInfo=NULL;
}
fclose(fp2);
fclose(fp);
}
remove("WorkerInfo.dat");
rename("WorkerInfo1.dat","WorkerInfo.dat");
};
void UpdateInfo()
{
char sno[10];
FILE *fp,*fp2;
WorkerInfo *CurInfo;
WorkerInfo InputInfo;
printf("请输入要修改的:职工号 姓名\n");
scanf("%s %s",InputInfo.WorkerNo,InputInfo.Xm);
printf("请输入:学历 职务 工资 住址 电话\n");
scanf("%s %s %f %s %s",
InputInfo.Edu,InputInfo.Prof,&InputInfo.Wage,
InputInfo.Addr,InputInfo.Phone);
fp=fopen("WorkerInfo.dat", "r");
fp2=fopen("WorkerInfo1.dat","w");
if(fp==NULL)
{
printf("没有相应的职工信息!");
}
else
{
CurInfo=(WorkerInfo *)malloc(sizeof(WorkerInfo ));
while(!feof(fp))
{
memset(CurInfo,0,sizeof(WorkerInfo));
if(fread(CurInfo,sizeof(struct WorkerInfo),1,fp)!=0)
{ if(strcmp(CurInfo->WorkerNo,InputInfo.WorkerNo)!=0)
fwrite(CurInfo,sizeof(struct WorkerInfo),1,fp2);
else
{
strcpy(CurInfo->Xm,InputInfo.Xm);
strcpy(CurInfo->Edu,InputInfo.Edu);
strcpy(CurInfo->Prof,InputInfo.Prof);
CurInfo->Wage=InputInfo.Wage;
strcpy(CurInfo->Addr,InputInfo.Addr);
strcpy(CurInfo->Phone,InputInfo.Phone);
fwrite(CurInfo,sizeof(struct WorkerInfo),1,fp2);
}
}
}
if(CurInfo!=NULL)
{
free(CurInfo);
CurInfo=NULL;
}
fclose(fp);
fclose(fp2);
}
remove("WorkerInfo.dat");
rename("WorkerInfo1.dat","WorkerInfo.dat");
};
void main(int argc,char *argv)
{
int i;
ShowMain();
printf("请输入功能序号");
scanf("%d",&i);
while(i!=10)
{
switch(i)
{
case 1:ShowMain();break;
case 2:InputInfo();break;
case 3:DisPlayInfo();break;
case 4:QueryInfo();break;
case 5:DeleteInfo();break;
case 6:UpdateInfo();break;
default:
printf("输入错误,请重新输入。\n");
}
system("PAUSE");
ShowMain();
printf("请输入功能序号");
scanf("%d",&i);
};
}
运行部分结果如下:
C语言我还是菜鸟,功能实现了,但肯定有不少问题,再慢慢折腾吧。希望有更多人指导。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)