论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

改编的C版职工治理系统

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:43:44


/*八、简单的职工治理系统
1.问题描述
  对单位的职工进行治理,包括插入、删除、查找、排序等功能。
2.要求
  职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。
(1)新增一名职工:将新增职工对象按姓名以字典方式职工治理文件中。
(2)删除一名职工:从职工治理文件中删除一名职工对象。
(3)查询:从职工治理文件中查询符合某些条件的职工。
(4)修改:检索某个职工对象,对其某些属性进行修改。
(5)排序:按某种需要对职工对象文件进行排序。
3.实现提示
  职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。
(1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。
(2)对职工对象中的"姓名"按字典顺序进行排序。
(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。
4.选做内容
  将职工对象按散列法存储,并设计解决冲突的方法。在此基础上实现增、删、查询、修改、排序等操作。
*/


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define N 100

typedef struct employee//职工基本情况
{
 int num;//工号
 int position;//职位1为董事长2为总经理3为副总经理等
 char name[8];//姓名
 char sex[2];//性别f为女m为男
 int age;//年龄
 int cult;//文化程度1为专家2为博士3为硕士4为学士5为其他
 int salary;//工资
 int state;//健康情况分为good,general,bad
 char day[10];//工作年月
}ro;
ro em[N];


typedef struct communication//职工通讯录
{
 char name[8];
 char officetel[13];
 char hometel[13];
 char handtel[13];
 char address[13];
 char time[13];
}el;
el empc[N];

void manage();
void query();
void communicate();
void input();
void display();
void change();
void del();
void add();
int changeposition();
int changecult();
int changesalary();
int changestate();
void inputcommunicate();
void querycommunicate();
void changecommunicate();
char *changetel1();
char *changetel2();
char *changetel3();

int total;
int p;

char password[10]="talentxch";

void main()
{
     int choice;
     char s[10];
     int flag=0;
     int n=3;
     do
  {
        printf("请你输入密码:\n");
        scanf("%s",s);
        if(!strcmp(s,password))//若密码正确
  {
            printf("恭喜你成功登陆了\n\n\n");
            flag=1;
            break;
  }
        else
  {
            printf("输入有错误请重新输入:\n");
            n--;
  }
  }while(n>0);
     if(!flag)
  {
        printf("你的输入次数已到再见\n");
  }
     do
  {
        printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
        printf("\t\t欢迎进入职工治理系统中文版\n");
        printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
        printf("\t\t请你选择操作类型:\n");
        printf("======================================================\n");
        printf("   \t\t1进入治理系统\n");
        printf("   \t\t2进入查询系统\n");
        printf("   \t\t3进入通讯录\n");
        printf("   \t\t0退出系统\n");
        printf("======================================================\n");
        scanf("%d",&choice);
        switch(choice)
  {
           case 1:manage();
           break;
           case 2:query();
           break;
           case 3:communicate();
           break;
           case 0:
      {
                    printf("谢谢使用再见\n");
                    exit(0);
      }
           default:
      {
                    printf("输入有错误请重新输入:\n");
                    return;
      }
  }
  }while(1);
}

void manage()
{
     int choicemanage;
     char choice='y';
     while(choice=='y'||choice=='Y')
  {
         printf("\t\t欢迎进入治理系统\n");
         printf("======================================================\n");
         printf("\t\t请你选择操作类型:\n");
         printf("\t\t1输入职工信息\n");
         printf("\t\t2显示职工信息\n");
         printf("\t\t3修改职工信息\n");
         printf("\t\t4追加一个职工信息\n");
         printf("\t\t5删除一个职工信息\n");
         printf("\t\t0返回\n");
         printf("======================================================\n");
         scanf("%d",&choicemanage);
         switch(choicemanage)
   {
             case 1: input();//输入职工信息
             break;
             case 2:display();//显示职工信息
             break;
             case 3:change();//修改职工信息
             break;
             case 4:add();//追加一个职工信息
             break;
             case 5:del();//删除一个职工信息
             break;
             case 0:
             printf("谢谢你的使用再见\n");
             return;
            default:printf("你的输入有错请重新输入\n");
   }
         printf("是否继续治理?(y/n)");
         scanf("%s",&choice);
  }
     if(toupper(choice)=='N'||(choice)=='n')
  {
         printf("输入完毕,任意键返回\n");
         getch();
         return;
  }
}


void input()
{
    FILE *fp;
    int i=0;
    char choiceinput='y';
    if((fp=fopen("employee.txt","w"))==NULL)
    return;
    while(choiceinput=='y'||choiceinput=='Y')
 {
      i++;
   total++;
      printf("第%d个职工\n",i);
      printf("\n");
      printf("请你输入工号:\n");//输入工号
      scanf("%d",&em[i].num);
      printf("\n");
      printf("请你输入职位:\n");//输入职位
      printf("1董事长     2总经理    3副总经理\n");
      printf("4部门经理   5工程师    6秘书\n");
      printf("7技术员     8领班      9员工\n");
      scanf("%d",&em[i].position);
      printf("\n");
      printf("请你输入姓名:\n");//输入姓名
      scanf("%s",em[i].name);
      printf("\n");
      printf("请你输入性别以(m男f女):\n");//输入性别
      scanf("%s",em[i].sex);
      printf("\n");
      printf("请你输入文化程度:\n");//输入文化程度
      printf("1专家  2博士  3硕士  4学士  5其他\n");
      scanf("%d",&em[i].cult);
      printf("\n");
      printf("请你输入工资:\n");//输入工资
      scanf("%d",&em[i].salary);
      printf("\n");
      printf("请你输入身体情况:\n");//身体情况
      printf("1好  2一般  3差\n");
      scanf("%d",&em[i].state);
   printf("请你输入工作年月:\n");
   scanf("%s",em[i].day);
      printf("\n");
      printf("是否继续输入?(y/n)\n");
        scanf("%s",&choiceinput);
      fwrite(&em[i],sizeof(struct employee),1,fp);
 }
    if(toupper(choiceinput)=='N')  //字符大小写转换
       {
          fclose(fp);
          printf("输入完毕,任意键返回\n");
          getch();
          return;
       }
}


void display()//显示职工信息
{
   FILE *fp;
   int i;
   if((fp=fopen("employee. txt","r"))==NULL)
     return;
   printf("输出结果:\n");
   printf("工号  职位  姓名  性别  文化程度  工资  身体情况\n");
   printf("\n");
   for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
   { 
      printf("\n");
      printf("工号: %d\n",em[i].num);
      printf("职位: %d\n",em[i].position);
      printf("1董事长     2总经理    3副总经理\n");
      printf("4部门经理   5工程师    6秘书\n");
      printf("7技术员     8领班      9员工\n");
      printf("姓名: %s\n",em[i].name);
      printf("性别: %s\n",em[i].sex);
      printf("其中(m男f女)\n");
      printf("文化程度: %d\n",em[i].cult);
      printf("1专家  2博士  3硕士  4学士  5其他\n");
      printf("工资: %d\n",em[i].salary);
      printf("身体情况: %d\n",em[i].state);
      printf("1好  2一般  3差\n");
   printf("工作年月: %s",em[i].day);
      printf("\n");
   }
   printf("\n");
   printf("完毕按任意键返回\n");
   getch();                                         //文件里用
   fclose(fp);
    return;
}


void change()
{
 FILE *fp;
 int i;
 char chname[8];
 int choicechange;
 ro a[N];
 printf("请你输入要修改的人的姓名:\n");
 scanf("%s",&chname);
 if((fp=fopen("employee.txt","w+"))==NULL)
 {
  printf("不能够打开这个文件\n");
  return;
 }
 for(i=0;i<N;i++)
 {
  if(strcmp(chname,em[i].name)==0)
  {
   printf("这是你要修改的人的信息\n");
   printf("工号:%d 职位:%d 姓名:%s 性别:%s 文化程度:%d 工资:%d 身体:%d\n",em[i].num,em[i].position,em[i].name,em[i].sex,em[i].cult,em[i].salary,em[i].state);
   printf("--------------------------------------------------------\n");
   printf("请你输入要修改的部分:\n");
   printf("========================================================\n");
   printf("1修改职位\n");
   printf("2修改文化程度\n");
   printf("3修改工资\n");
   printf("4修改身体情况\n");
   printf("0退出系统\n");
   printf("========================================================\n");
   printf("请选择\n");
   scanf("%d",&choicechange);
   switch(choicechange)
   {
   case 1:
    em[i].position=changeposition();
    break;
   case 2:
    em[i].cult=changecult();
    break;
   case 3:
    em[i].salary=changesalary();
    break;
   case 4:
    em[i].state=changestate();
    break;
   case 0:
    return;
   default :
    printf("输入有错误");
   }
   a[i]=em[i];
  }
  else
  {
   a[i]=em[i];
  }
 }
 for(i=0;i<total;i++)
 {
  em[i]=a[i];
 }
 i=0;
 fwrite(&em[i],sizeof(struct employee),total,fp);
 fclose(fp);
 printf("操作完成按任意键返回\n");
 getch();
 return;
}


int changeposition()
{
 int newposition;
 printf("请你输入新职位:\n");
 printf("1董事长     2总经理    3副总经理\n");
 printf("4部门经理   5工程师    6秘书\n");
 printf("7技术员     8领班      9员工\n");
 scanf("%d",&newposition);
 return(newposition);
}


int changecult()
{
 int newcult;
 printf("请你输入新的文凭:\n");
 printf("1专家  2博士  3硕士  4学士  5其他\n");
 scanf("%d",&newcult);
 return(newcult);
}


int changesalary()
{
 int newsalary;
 printf("请你输入新的工资:\n");
 scanf("%d",&newsalary);
 return(newsalary);
}


int changestate()
{
 int newstate;
 printf("请你输入现在的身体情况:\n");
 printf("1好  2一般  3差\n");
 scanf("%d",&newstate);
 return(newstate);
}


void add()//追加一个职工信息
{
 struct employee emp;
 FILE *fp;
 int i=0;
 if((fp=fopen("employee.txt","ab+"))==NULL)
 {
  printf("不能够打开这个文件\n");
  getch();
  return;
 }
 printf("请你输入新人的内容:\n");
 printf("请你输入工号:\n");//输入工号
 scanf("%d",&emp.num);
 printf("请你输入职位:\n");//输入职位
 printf("1董事长     2总经理    3副总经理\n");
 printf("4部门经理   5工程师    6秘书\n");
 printf("7技术员     8领班      9员工\n");
 scanf("%d",&emp.position);
 printf("请你输入姓名:\n");//输入姓名
 scanf("%s",emp.name);
 printf("请你输入性别以(m男f女):\n");//输入性别
 scanf("%s",emp.sex);
 printf("请你输入文化程度:\n");//输入文化程度
 printf("1专家   2博士  3硕士  4学士  5其他\n");
 scanf("%d",&emp.cult);
 printf("请你输入工资:\n");//输入工资
 scanf("%d",&emp.salary);
 printf("请你输入身体情况:\n");//身体情况
 printf("1好  2一般  3差\n");
 scanf("%d",&emp.state);
 printf("请你输入工作年月:\n");
 scanf("%s",emp.day);
 fwrite(&emp,sizeof(struct employee),1,fp);
 rewind(fp);
 printf("插入完毕,按任意键返回\n");
 getch();
 total=total+1;
 fclose(fp);
 return;
}


void del()//删除一个职工信息
{
 int i=0;
 char delname[8];
 FILE *fp;
 if((fp=fopen("employee.txt","w"))==NULL)
 {
  printf("文件为空,不能够打开\n");
  printf("按任意键返回\n");
  getch();
  return;
 }
 printf("请你输入要删除的人的姓名:\n");//删除的职工的信息
 scanf("%s",delname);
 for(i=0;i<N;i++)
 {
  if(strcmp(em[i].name,delname)==0) 
  {
   total--;
   for(;i<N;i++)
   {
    em[i]=em[i+1];
   }
  }
 }
  i=0;
  fwrite(&em[i],sizeof(struct employee),total,fp);
  fclose(fp);
}

void query()
{
 FILE *fp;
 int i=0;
 char quename[8];
 if((fp=fopen("employee.txt","r"))==NULL)
 {
  printf("不能够打开文件,按任意键返回\n");
  getch();
  return;
 }
 printf("请你输入要查询的人的姓名\n");
 scanf("%s",quename);
 for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)
 {
      if(strcmp(em[i].name,quename)==0)  /*找到,并显示该职工记录*/
   {
          printf("\t\t\n查询到的职工号或姓名为的信息如下:\n");
          printf("以下是你要查询的人的信息\n");
          printf("工号: %d\n",em[i].num);
          printf("职位: %d\n",em[i].position);
          printf("1董事长      2总经理    3副总经理\n");
          printf("4部门经理    5工程师    6秘书\n");
          printf("7技术员      8领班      9员工\n");
          printf("姓名: %s\n",em[i].name);
          printf("性别: %s\n",em[i].sex);
          printf("其中(m男f女)\n");
          printf("文化程度: %d\n",em[i].cult);
          printf("1专家   2博士   3硕士   4学士   5其他\n");
          printf("工资: %d\n",em[i].salary);
          printf("身体情况: %d\n",em[i].state);
          printf("1好   2一般   3差\n");
          printf("工作年月: %s\n",em[i].day);
          printf("\n");
             prin tf("查询完毕,按任意键返回\n");
          getch();
          fclose(fp);
          return;
   }
 }
    printf("没有这样的人,按任意键返回\n");
    getch();
    fclose(fp);
    return;
}

void communicate()
{
    int choicecommunicate;
    printf("欢迎进入通讯录系统\n"); 
    printf("请你选择操作类型:\n");
    printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
    printf("1为输入通讯录信息\n");
    printf("2为查询通讯录信息\n");
    printf("3为修改通讯录信息\n");
    printf("0为退出通讯录系统\n");
    printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    scanf("%d",&choicecommunicate);
    switch(choicecommunicate)
    {
       case 1:inputcommunicate();
       break;
       case 2:querycommunicate();
       break;
       case 3:changecommunicate();
       break;
       case 0:
  {
            printf("谢谢使用再见\n");
            printf("按任意键返回\n");
            getch();
            return;
  }
       default:
       printf("输入有错\n");
 }      
}  

   
void inputcommunicate()
{
        FILE *fp;
        int choiceincom='y';
        int i=0;
        if((fp=fopen("empcom.txt","w"))==NULL)
  {
                  printf("不能够打开文件\n");
                  printf("任意键返回\n");
                  getch();
                  return;
  }
        printf("请你输入通讯录的信息:\n");
        while(choiceincom=='y'||choiceincom=='Y')
        {
               p++;
               i++;
               printf("第%d个职工\n",i);
               printf("请你输入姓名:\n");
               scanf("%s",empc[i].name);
               printf("请你输入生日:\n");
               scanf("%s",empc[i].time);
               printf("请你输入办公室电话号码:\n");
               scanf("%s",empc[i].officetel);
               printf("请你输入家庭电话号码:\n");
               scanf("%s",empc[i].hometel);
               printf("请你输入手机号码:\n");
               scanf("%s",empc[i].handtel);
               printf("请你输入地址:\n");
               scanf("%s",empc[i].address);
               printf("是否继续输入?(y/n)\n");
               choiceincom=getch();
               fwrite(&empc[i],sizeof(struct communication),1,fp);
          }
        if(toupper(choiceincom)=='N')
        {
             fclose(fp);
             printf("输入完毕,任意键返回\n");
             return;
  }         
}


void querycommunicate()
{
       FILE *fp;
       int i=0;
       char qcname[8];
       if((fp=fopen("empcom.txt","r"))==NULL)
       {
          printf("不能够打开文件,按任意键返回\n");
          getch();
          return;
       }
       printf("请你输入要查询的人的姓名:\n");
          scanf("%s",qcname);
       for(i=0;fread(&empc[i],sizeof(struct communication),1,fp)!=0;i++)
    {
           if(strcmp(empc[i].name,qcname)==0)
           {
               printf("以下为您所要求的信息:\n");
               printf("姓名: %s\n",empc[i].name);
               printf("生日: %s\n",empc[i].time);
               printf("办公室电话号码: %s\n",empc[i].officetel);
               printf("家庭电话号码: %s\n",empc[i].hometel);
               printf("手机号码: %s\n",empc[i].handtel);
               printf("家庭地址: %s\n",empc[i].address);
               printf("查询完毕,按任意键返回\n");
               getch();
               fclose(fp);
               return;
     }
    }
       printf("没有这样的人,按任意键返回\n");
       getch();
       fclose(fp);
       return;
}


void changecommunicate()
{
      FILE *fp;
      int i=0;
      char chcname[8];
      int choicecom;
   el b[N];
      if((fp=fopen("empcom.txt","w+"))==NULL)
      {
          printf("打不开文件按任意键返回\n");
          getch();
          return;
   }
      printf("请你输入你要修改的人的姓名:\n");
        scanf("%s",chcname);
        for(i=0;i<p;i++)
        {
            if(strcmp(empc[i].name,chcname)==0)
            {
                printf("以下为您所要修改的人的信息:\n");
                printf("姓名:%s\n",empc[i].name);
                printf("生日: %s\n",empc[i].time);
                printf("办公室电话号码: %s\n",empc[i].officetel);
                printf("家庭电话号码: %s\n",empc[i].hometel);
                printf("手机号码: %s\n",empc[i].handtel);
                printf("家庭地址: %s\n",empc[i].address);
                printf("请你选择要修改的东西:\n");
                printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
                printf("1修改办公室电话号码\n");
                printf("2修改家庭电话号码\n");
                printf("3修改手机电话号码\n");
                printf("0退出系统\n");
                printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
                scanf("%d",&choicecom);
                switch(choicecom)
    {
                    case 1:strcpy(empc[i].officetel,changetel1());
                    break;
                    case 2:strcpy(empc[i].hometel,changetel2());   
                    break;
                    case 3:strcpy(empc[i].handtel,changetel3());   
                    break;
                    case 0:
                    return;
                    default:
                    printf("输入有错\n");
    }
    b[i]=empc[i];
   }
   else
   {
    b[i]=empc[i];
   }
  }
  for(i=0;i<p;i++)
  {
   empc[i]=b[i];
  }
  i=0;
  fwrite(&empc[i],sizeof(struct communication),p,fp);
  fclose(fp);
        printf("操作完成按任意键返回\n");
        getch();
  return;
}


char *changetel1()
{
 char newofficetel[13];
 printf("请你输入新办公室电话号码:\n");
 scanf("%s",newofficetel);
 return(newofficetel);
}

char *changetel2()
{
 char newhometel[13];
 printf("请你输入新家庭电话号码:\n");
 scanf("%s",newhometel);
 return(newhometel);
}

char *changetel3()
{
 char newhandtel[13];
 printf("请你输入新手机电话号码:\n");
 scanf("%s",newhandtel);
 return(newhandtel);
}

上一篇:{实例}求最大数 人气:6551
下一篇:{实例}九九乘法表的几种不同外形 人气:5327
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058