职工信息管理系统(C语言)

职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。试设计一职工信息管理系统,使之能提供以下功能:1、系统以菜单方式工作2、职工信息录入功能(职工信息用文件保存)--输入3、职工信息浏览功能--输出4、职工信息查询功能--算法查询方式 按学历查询等按职工号查询等5、职工信息删除、修改功能

这是偶然翻出来的好久之前写的课程设计,这是我第一次写的比较完整的项目,有点生涩。想着整理一下分享出来

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct worker{
    char ID[10];//工号
    char name[15];//姓名
    char sex[3];//性别
    char age[3];//年龄
    char education[20];//学历
    char wage[10];//工资 
    char addr[30];//地址
     char phone[20];//电话 
}work[1000]; 
int n; 
void read()//从文件读入数据
{
    FILE *fp;//定义结构指针,实现对文件的操作 
    int i=0;
    if((fp=fopen("d:\\date.txt","r"))==NULL)//判断文件是否存在,r打开文件进行只读
    {
        printf("请在d盘新建一个名为date的文件!\n");
        return ;
     } 
     fscanf(fp,"%d\n",&n);
     while(i<n){
         fscanf(fp,"%s\n%s\n%s\n%s\n",work[i].ID,work[i].name,work[i].sex,work[i].age);
         fscanf(fp,"%s\n%s\n%s\n%s\n",work[i].education,work[i].wage,work[i].addr,work[i].phone);
         i++;
     }//读入文件 
     fclose(fp);//关闭文件 
 } 
 void write()//向文件中写入数据 
 {
     FILE *fp;
     int i=0;
     if((fp=fopen("d:\\date.txt","w"))==NULL)//w只写 
     {
         printf("无法打开文件!\n");
     }
     fprintf(fp,"%d\n",n);
     while(i<n)
     {
         fprintf(fp,"%s  %s    %s   %s   ",work[i].ID,work[i].name,work[i].sex,work[i].age);
         fprintf(fp,"%s  %s  %s  %s\n",work[i].education,work[i].wage,work[i].addr,work[i].phone);
         i++;
     }
     fclose(fp);
  } 
  void input()//输入
  {
      int i,flag;//flag标记工号是否存在
      char c;
      read();//将原有数据读入
      do{
          flag=0;
          printf("请输入职工工号:       \n");
          scanf("%s",work[n].ID);
          for(i=0;i<n;i++)
          {
              if(strcmp(work[i].ID,work[n].ID)==0){
              flag=1;
              break;
              }
            } 
            if(flag==1)
            {
                printf("该工号已存在\n");
                printf("是否继续输入?(Y/N):\n");
                scanf("%s",&c);
                if(c=='N'||c=='n')
                break;
                continue;
            }
            printf("请输入职工姓名:      \n");
            scanf("%s",work[n].name);
            printf("请输入职工性别:      \n");
            scanf("%s",work[n].sex);
            printf("请输入职工年龄:       \n");
            scanf("%s",work[n].age);
            printf("请输入职工学历:        \n");
            scanf("%s",work[n].education);
            printf("请输入职工工资:        \n");
            scanf("%s",work[n].wage);
            printf("请输入职工住址:         \n");
            scanf("%s",work[n].addr);
            printf("请输入职工电话:         \n");
            scanf("%s",work[n].phone);
            printf("\t\t是否继续输入?(Y/N):");
            scanf("%s",&c);
            n++;
      } while(c!='N'&&c!='n');
      write();
      printf("\n数据已保存\n");
     } 
     void output_infor(int k)//信息输出 
     {
         printf("\t\t工号:%s\n",work[k].ID);
            printf("\t\t姓名:%s\n",work[k].name);
            printf("\t\t性别:%s\n",work[k].sex);
            printf("\t\t年龄:%s\n",work[k].age);
            printf("\t\t学历:%s\n",work[k].education);
            printf("\t\t工资:%s\n",work[k].wage);
            printf("\t\t地址:%s\n",work[k].addr);
            printf("\t\t电话:%s\n",work[k].phone);
            printf("\n\n\n");
     }
     void show()//信息浏览
     {
         int i;
         read();
         if(n==0)
         printf("无记录!\n");
         else
         for(i=0;i<n;i++){
             output_infor(i);
         }
      } 
      void que()//查询信息 
       {
           char num;
           int flag=0,i;
           char q_ID[20];//要查询的工号 
           char q_education[20];//要查询的学历 
           char c;
           read();
           while(1)
           {
               printf("1.按工号查询,2.按学历查询。请输入1或2:");
               scanf("%s",&num);
               if(num<'1'||num>'2')
               {
                   printf("输入错误!\n");
                   continue;
                } 
            if(num=='1')
            {
                printf("请输入所查询工号:\n");
                scanf("%s",q_ID);
                for(i=0;i<n;i++){
                    if(strcmp(work[i].ID,q_ID)==0)
                    {
            output_infor(i);
            flag=1;
            break;
                    }
                }
            }
            else if(num=='2')
            {
                printf("请输入要查询学历:  \n");
                scanf("%s",q_education);
                for(i=0;i<n;i++){
                    if(strcmp(work[i].education,q_education)==0)
                    {
                        output_infor(i);
                        flag=1;
                    }
                }
            }
            if(flag==0)
            printf("无该员工信息!\n");
           printf("是否继续查询(Y/N):");
           scanf("%s",&c);
           if(c=='n'||c=='N')
           break;
           }
        } 
        void del()//删除职工信息 
        {
            char delete_ID[20];
            int i,j,flag;
            char c;
            read();
            while(1){
                flag=0;
                printf("请输入需要删除职工工号: \n");
                scanf("%s",delete_ID);
                for(i=0;i<n;i++)
                {
                    if(strcmp(work[i].ID,delete_ID)==0)
                    {
                        n--;
                        flag=1;
                        for(j=i;j<n;j++){
                            work[j]=work[j+1];}
                    break;
                    }
                 } 
                if(!flag)
                printf("无此员工信息!\n");
                else 
                printf("删除成功!\n");
                printf("是否继续删除(Y/N):\n");
                scanf("%s",&c);
                if(c=='n'||c=='N')
                break; 
                }
                write();
        }
        void mod()//修改信息
        {
            char change_ID[20];
            int number;//员工在数据中的位置 
            char num;
            char message[100];//修改的信息 
            char c;//指令Y?N 
             int i,flag=0;  
            read(); //读出
         while(1) 
      {  
    printf("请输入需修改的职工的工号:\n"); 
    scanf("%s",change_ID); 
    for(i=0;i<n;i++) 
    { 
      if(strcmp(work[i].ID,change_ID)==0)
      { 
        number=i; 
        flag=1; 
        break; 
      } 
    } 
    if(flag==0) 
    { 
      printf("无此员工信息!!\n"); 
      printf("是否继续修改(Y/N):"); 
      scanf("%s",&c); 
      if(c=='N'||c=='n') 
      break; 
      continue; 
    } 
    printf("1.修改电话  2.修改工资 3.修改学历 4.修改年龄 \n");  
    printf("请输入(1-4):"); 
    scanf("%s",&num); 
    if(num<'1'||num>'4') 
    { 
      printf("输入错误!\n"); 
      continue; 
    } 
    printf("请输入修改后的信息:"); 
    scanf("%s",message); 
    switch(num) 
    { 
      case '1':strcpy(work[number].phone,message); break; 
      case '2':strcpy(work[number].wage,message); break; 
      case '3':strcpy(work[number].education,message);break;
      case '4':strcpy(work[number].age,message);break;
      }
    printf("\n\n是否继续修改(Y/N):"); 
    scanf("%s",&c); 
    if(c=='N'||c=='n') break; 
  } 
  write(); 
} 
 
 void menu()//菜单 
{ 
  printf("\t\t************职工信息管理系统菜单**********\n"); 
  printf("\t\t*                    *\n"); 
  printf("\t\t*       1.录入职工信息      *\n"); 
  printf("\t\t*                    *\n"); 
  printf("\t\t*       2.显示职工信息      *\n"); 
  printf("\t\t*                    *\n"); 
  printf("\t\t*       3.查询职工信息      *\n"); 
  printf("\t\t*                    *\n"); 
  printf("\t\t*       4.删除职工信息      *\n"); 
  printf("\t\t*                    *\n"); 
  printf("\t\t*       5.修改职工信息      *\n"); 
  printf("\t\t*                    *\n"); 
  printf("\t\t*       0.退出          *\n"); 
  printf("\t\t*                    *\n"); 
  printf("\t\t******************************************\n"); 
  printf("\t\t请输入指令(1-5): "); 
} 
 int main() 
{ 
  int num; 
  n=0; 
  while(1) 
  { 
    menu(); 
    scanf("%d",&num); 
    switch(num) 
    { 
      case 1: input(); break; 
      case 2: show(); break; 
      case 3: que();  break; 
      case 4: del();  break; 
      case 5: mod();  break; 
      case 0: printf("谢谢使用!\n\n"); return 0; 
      default :printf("\n--->无效的指令!\n\n\n"); 
    } }} 

百度网盘(上面的代码)

链接:https://pan.baidu.com/s/1g4eLmSe8VLJ37BjSRH0w6w?pwd=kayq

提取码:kayq

  • 10
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值