C语言学习-结构体和文件操作

2023-05-16

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(使用前将#替换为@)

C语言学习-结构体和文件操作 的相关文章

  • excel 用一列数据生成图表/折线图

    问题描述 该教程适用于该列的长度很长 xff0c 数据量较大不适合鼠标拖动选中的情况 如果有更简单的方法也欢迎小伙伴们在评论区交流补充 操作步骤 1 点一下列上面的标号 即图中的B 2 按住ctrl xff0c 再点一下列的名称 即图中的a
  • ubuntu NVIDIA CC sanity check failed:

    ubuntu NVIDIA CC sanity check failed The C compiler does not appear to be able to create object files Please make sure y
  • Zeal -- 一款面向软件开发人员的离线文档浏览器

    简介 Zeal官网 就我而言 xff0c 经常忘记一些不常用的方法什么的 xff0c 难免需要查询API文档 xff0c 这时候有一个离线的文档浏览器还是很方便的 xff0c 可以集成多种语言文档 xff0c 便于查阅学习 对于 对于MAC
  • markdown-it 重定义渲染规则

    使用 markdown it 解析 markdown 代码 从这篇文章中了解到 markdown it 解析 markdown 代码的过程 xff0c 了解 token 和渲染规则 add target 61 34 blank 34 to
  • 马走日算法-回溯

    马走日算法 回溯 1 马走日走到目标节点最少的步数 include lt iostream gt include lt queue gt include lt functional gt include lt stack gt includ
  • MYSQL如何设置大小写敏感

    linux下mysql设置大小写不敏感 1 linux下mysql安装完后是默认 xff1a 区分表名的大小写 xff0c 不区分列名的大小写 xff1b 2 用root帐号登录后 xff0c 在 etc my cnf 中的 mysqld
  • Linux下几种图形化远程工具推荐

    好久没写文章了 xff0c 和大家聊聊最近在机器人调试中用到的几款远程桌面工具吧 在机器人调试过程中经常需要使用rviz之类的工具来查看机器人的运行状态 xff0c 图形化的远程工具必不可少 当然如果大家习惯用ssh或者没有图形化方面的需求
  • Win10x64-WDM设备驱动开发入门 - 第六章 VMware-Win10x64+WDK10+VS2015/2019环境搭建与双机调试

    VMware Win10x64 43 WDK10 43 VS2015 2019环境搭建与双机调试 1 驱动程序的开发语言选择调用约定运行时函数的调用 2 配置驱动开发环境1 vs2015 43 SDK 43 WDK10查看 win10 的版
  • 找出4*5矩阵中值最小和最大元素,并分别输出其值及所在的行号和列号 java

    package 矩阵 import java util Scanner public class 矩阵 public static void main String args TODO Auto generated method stub
  • 将python程序打包成exe可执行文件

    方法一 xff1a xff1a 打包完成后可以直接被他人使用 xff0c 他人不用安装python环境的 可以使用pyinstaller模块实现将python项目打包成exe执行文件 span class token triple quot
  • latex 如何在overleaf中插入算法伪代码

    问题描述 博主今天在用overleaf写论文 xff0c 急需插入伪代码 xff0c 将查阅结果记录在此以便后续参考 解决方案 overleaf有专门的说明文档来教大家如何正确插入伪代码 xff1a https www overleaf c
  • 手把手教你一整套R语言数据分析+建模流程

    手把手教你一整套R语言数据分析 43 建模流程 Intro项目背景前期准备数据描述数据清洗预分析及预处理数值型数据类别型数据 特征建模模型对比 Intro 近期在整理数据分析流程 xff0c 找到了之前写的一篇代码 xff0c 分享给大家
  • (工具技巧) —— Visual Studio Code页面放大缩小和字体的调整方式

    文章目录 Visual Studio Code页面放大缩小和字体的调整方式使用方式个人格言 Visual Studio Code页面放大缩小和字体的调整方式 使用方式 在日程的使用过程中 xff0c 有需要对Visual Studio Co
  • Centos7.8 安装 openldap+phpldapadmin 最详细步骤

    本文借助很多网上知识 做一个汇总 xff0c 并且自己手动一步步安装 很多openldap安装都是0几年的安装方式 xff0c 下面给大家演示我一步步安装的详细过程 xff0c CentOS7系统安装就不做演示了 xff0c 直接开肝 这里
  • Apache配置中文说明

    APACHE的配置 xff08 中文 xff09 基于 NCSA 服务的配置文件 这是Apache服务器主要配置文件 它包含服务器的影响服务器运行的配置指令 参见以取得关于这些指令的详细信息 不要只是简单的阅读这些指令信息而不去理解它 这里
  • ubunut 18.04安装xrdp及pulseaudio-module-xrdp

    1 桌面环境 sudo apt install xfce4 2 xrdp服务 sudo apt install xrdp 参考 xff1a xrdp 3 远程声音重定向 确认pulseaudio版本为11 1 pulseaudio vers
  • ios8 新的AlertView

    转自cocoachina OS 8的新特性之一就是让接口更有适应性 更灵活 xff0c 因此许多视图控制器的实现方式发生了巨大的变化 全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸变化
  • Debian 系统时间配置(NTP)

    系统时间NTP和RTC同步 xff0c Debian的时区配置 系统及架构 xff1a Linux Matrix 061001 5 10 42 yocto standard 1 Thu Jun 3 07 00 52 UTC 2021 arm
  • ubuntu之VScode

    文章目录 0 安装1 配置中文2 插件 xff08 推荐使用 xff09 3 conda4 matlab5 fira字体设置6 字符显示配置7 terminal自定义颜色配置8 环境变量 xff1a terminal runner问题9 复
  • PPT中一打开输入法后就卡死

    解决办法 C Program Files Common Files xff08 x86 xff09 Microsoft Shared OFFICE12 Office Setup Controller xff0c 把这个文件夹删除即可

随机推荐