C语言职工工资管理系统

这是大一刚学完C语言时写的,文本模式界面,有点像TC,除了界面部分的代码是自己照着网上的资料修改的外其它部分代码都是自己独立完成的。这个程序主要是分部门,分职位管理职工的工资,还有增加删除职工,排序和搜索统计等功能,由于当时对链表不是很熟,有些功能存在bug。


/**由于时间关系,模糊查询只写了姓名查找***/
/***模糊查询可能建链表有问题,还有填写工资单也可能有一点问题**/
#include <dos.h>
#include <bios.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define  R 8
#define T 60                               /****addlist有问题******************************************************************************************/
#define LEFT 0x4b00  /*左*/
#define RIGHT 0x4d00 /*右*/
#define DOWN 0x5000 /*下*/
#define UP 0x4800 /*上*/
#define SPACE 0x3920 /*空格*/
#define ESC 0x011b /* ESC键*/
#define ENTER 0x1c0d /*回车键*/
#define Backspace 0xe08 /*擦除键*/
#define ALT_B 12288 /*组合键ALT_B */
#define ALT_M 12800/*组合键ALT_M */
#define ALT_H 8960/*组合键ALT_H */
#define N 10
#define M 20
int clst,tvst;  /*清洁费&&闭路电视费*/
int or=1;/*-1做了更改,1未做更改*/
char zhws[N][M],zhchs[N][M],departs[N][M];     /*存储职务名&&技术职称名&&部门名*/
char months[][5]={"0","Jan","Feb","Mar","Apr","May","Jun","July","Arg","Sep","Oct","Nov","Dec"};/*月份名,1月对应1*/
char sexs[][7]={"male","female"};
int zhwsp[N],zhchsp[N];  /*职务工资&&职称(基本)工资*/
FILE *fp;
typedef struct _paylist
 {
   int cardnum;  /*工资卡号*/
   char name[M];
   int month;  /*月份,进行选择*/
   int jbsalary;  /*基本工资*/
   int zhwsalary; /*职务工资*/
   int addition;  /*补助*/
   int ysalary;  /*应发工资*/
   int praise;    /*特别奖励*/
   int tax;       /*税金*/
   int water;     /*水费*/
   int elec;      /*电费*/
   int clean;     /*清洁费*/
   int tv;        /*电视费*/
   int salary;    /*实发工资*/
   struct _paylist *left,*right;
 }  PAYLIST;
typedef struct _worker
 {
   char name[M];
   int sex;     /*0男1女*/
   char idnum[M];  /*身份证号*/
   int cardnum;   /*工资卡号*/
   int age;
   int wkage;    /*工龄*/
   int depart;   /*选择,部门*/
   int zhw;     /*选择,职务*/
   int zhch;     /*选择,职称*/
   long zhchnum; /*职称编号*/
   long homeph;   /*家庭电话*/
   char mobile[M]; /*手机*/
   int paymons;    /*已经记录n个月的工资单*/
   struct _worker *front,*down;
   PAYLIST *right;
 }  WORKER;
typedef struct _depart
 {
   int name;   /*选择,部门名*/
   char path[M];  /*存储路径名*/
   int wknum;     /*该部门职工人数*/
   struct _depart *left,*right;
   WORKER *down;
 } DEPART;
 typedef struct _tjw
 {
  WORKER *wp;
  struct _tjw *next;
 }TJW; 
DEPART *headd,*dep;
WORKER *zhp,*wwp;/*起指向作用,不要随便更改;    起流动作用*********/
TJW *head1;        /**头指针**/
void load(void);      /*从文件中导入部门,职工及工资单信息*/
void start(void);                 /*读取基本数据*/
void readdep(DEPART **pp,FILE *fp);      /*从文件中读取部门信息*/
void writedep(DEPART *p,FILE *fp);           /*逐个将部门信息写入文件*/
void shchx(WORKER *wp);    /*详细输出*/
void readw(WORKER **wp,FILE *fp);                /*从文件中读取职工信息*/
PAYLIST * whtailp(WORKER *wp);      /*查找职工------链尾,返回链尾*/
void xianshw(void);  /************显示第n个部门的职工信息********/
PAYLIST * insertp(WORKER *wp,PAYLIST *p,PAYLIST *tail);     /*插入新职工,返回链尾*/
void addnew(DEPART *dep);                          /*增加新职工*/
PAYLIST * whtailp(WORKER *wp);      /*查找职工------链尾,返回链尾*/
void changeshuju(void);                           /*更改基本工资等固定信息*/
PAYLIST * rulup(WORKER *wp);              /*录入工资单信息*/
void addlist(WORKER *zhp);                          /*增加新职工*/
void Dzhg(void); /*****确定某一个具体职工****/
void xiansh2(DEPART *dep);
void insertdep(void);         /****添加新的部门***/
void addzh(void);            /***添加职务和职称***/
void savedep(void);             /*保存部门信息*/
void savew(void);                /*保存职工信息和工资信息***/
void day1(void);   /***直接打印职工信息**/
void day2(void);  /****将统计结果打印出来**/
void delall(DEPART *dep);       /**删除整个部门**/
void delone(DEPART *dep,WORKER *p);             /*删除一个职工及其工资信息*/
void changew(WORKER *p);                           /*修改职工基本信息*/
WORKER * search1();                  /*通过身分证号查询*/
void search3(void);                  /*通过姓名查询*/
void mhsearch();                     /*模糊查询*/
WORKER * search0();                  /*通过职称编号查询*/
void jqsearch(void);                     /*精确查询*/
void Ashuijin();           /*统计税金总额及排出前十名**/
void changep(WORKER *p);                 /*修改工资单信息*/
WORKER * search2();                    /*通过工资卡号查找*/
int key;/*按键变量*/
int textx,texty;/*光标坐标,x行,y列*/
struct menustruct/*菜单用的结构体*/
{
   char name[10];/*主菜单名*/
   char str[10][20];/*选项*/
   int n;/*选项数*/
}ml[R];/*使用了R个,可根据需要增删*/

char save[4096],savee[4096];/*保存文本区域空间*/
/*char sav1[4096];*/
char c[4096];/*清屏专用空间*/
int i,j;/*常用变量*/
void Menu();/*初始化界面*/
void Selectitem();/*定义菜单*/
void DrawSelectitem();/*显示主菜单*/
void BlackText(int x,int y,char *z);/*选中菜单*/
void RedText(int x,int y,char *z);/*正常菜单*/
void Run();/*具体操作过程*/
void DrawMl(int n);/*显示下拉菜单*/
void MoveMl(int n,int x);/*菜单选项的控制*/
void Enter(int m,int n);/*菜单选项的具体功能*/
void ClrScr();/*自定义清屏函数*/
void DingWei(void);
void DrawFrame(int left,int up,int right,int down,int textcolor,int backgroundcolor);/*画边框*/
/***主函数****/
void loadmenu(void)
{
   Menu();/*初始化界面*/
   Run();/*具体操作过程*/
}
/*初始化界面*/
void Menu()
{  int a;
   system("cls"); /*调用系统的清屏命令*/
   textbackground(GREEN);/*将背景设置为蓝色*/
   window(1,1,25,80);
   clrscr();
   textx=3;/*光标初始化位置*/
   texty=2;
   gotoxy(1,2);
   printf("%c",218);/*画左上角*/
   for(i=0;i<78;i++)
   printf("%c",196); /*画水平直线*/
   printf("%c",191);/*画右上角*/
   for(i=3;i<=23;i++)
   {
      gotoxy(1,i);
      printf("%c",179); /*画垂直线*/
      gotoxy(80,i);
      printf("%c",179);
   }
   printf("%c",192); /*画左下角*/
   for(i=0;i<78;i++)
      printf("%c",196);
   printf("%c",217); /*画右下角*/
   gotoxy(1,1);
   textcolor(7); /*设置灰色*/
   for(i=0;i<80;i++)
      cprintf("%c",219);/*用符号实现画主菜单的灰色背景区*/
   for(a=3;a<=23;a++)
   {gotoxy(T,a);cprintf("%c",179);}                            /********************************************************************/
   DingWei();
   Selectitem();  /*调用选项函数*/
   DrawSelectitem(); /*画选项*/
   gettext(2,3,78,23,c); /*保存当前文本区域*/
}
/*定义菜单*/
void Selectitem()
{
   strcpy(ml[0].name,"FILE");/*下面的具体选项补空格是为了各菜单黑色背景相同*/    /**************************************************************************/
   strcpy(ml[0].str[0],"Load     ");/*导入某一部门职工信息*/
   strcpy(ml[0].str[1],"Shemi    ");/*设置密码*/
   strcpy(ml[0].str[2],"Gaimi    ");/*修改密码*/
   strcpy(ml[0].str[3],"Print    ");/*打印*/
   strcpy(ml[0].str[4],"Save     ");/*保存*/
   strcpy(ml[0].str[5],"Exit     ");/*退出系统*/
   ml[0].n=6; /*保存菜单的项数*/
   strcpy(ml[1].name,"INSERT");
   strcpy(ml[1].str[0],"Newers   ");/*插入新职工*/
   strcpy(ml[1].str[1],"Paylist  ");/*填写工资单*/
   strcpy(ml[1].str[2],"Depart   ");/*新增部门*/
   strcpy(ml[1].str[3],"Zhchs    ");   /*新增职称*/
   strcpy(ml[1].str[4],"Zhws     ");    /*新增职务*/
   ml[1].n=5;
   strcpy(ml[2].name,"EDIT");/*编辑修改*/
   strcpy(ml[2].str[0],"Imfor    ");  /*职工信息*/
   strcpy(ml[2].str[1],"Paylist  "); /*工资单*/
   strcpy(ml[2].str[2],"Tongshu  ");/*修改基本工资等固定数据*/
   ml[2].n=3;
   strcpy(ml[3].name,"SEARCH");    /*查询*/
   strcpy(ml[3].str[0],"Jingque  "); /*精确查询*/
   strcpy(ml[3].str[1],"Mohu     ");    /*模糊查询*/
   ml[3].n=2;
   strcpy(ml[4].name,"TONGJI");    /*统计*/
   strcpy(ml[4].str[0],"Paixu    ");     /*排序*/
   strcpy(ml[4].str[1],"Agongzi  ");   /*各类工资总额*/
   strcpy(ml[4].str[2],"Ashuijin ");  /*税金总额(月/年) */
   strcpy(ml[4].str[3],"Gzhjigz  ");  /*各工种总数及平均工资*/
   ml[4].n=4;
   strcpy(ml[5].name,"DEL");
   strcpy(ml[5].str[0],"One      ");
   strcpy(ml[5].str[1],"All      ");
   ml[5].n=2;
   strcpy(ml[6].name,"HELP");
   strcpy(ml[6].str[0],"About    ");
   ml[6].n=1;
}
/*显示主单名*/
void DrawSelectitem()
{
   for(i=0;i<R;i++)
   RedText(i,1,ml[i].name); /*显示主菜单名,且首字母为红色*/
}
/*正常显示菜单*/
void RedText(int x,int y,char *z)
{
   textbackground(7); /*设置背景颜色为浅灰色*/
   gotoxy(3+x*10,y);
   for(j=0;z[j];j++)
   {
      if(j==0)
     textcolor(RED);/*第一个字母显示红色*/
      else
     textcolor(BLACK); /*设置黑色*/
      cprintf("%c",z[j]); /*输出菜单名*/
   }
}
/*显示选中菜单*/
void BlackText(int x,int y,char *z)
{
   textbackground(0); /*设置背景颜色为黑色*/
   textcolor(15); /*设置文本颜色为白色*/
   gotoxy(3+10*x,y);/*定位坐标*/
   cputs(z); /*输出菜单名字符串*/
}
/*按键操作过程*/
void Run()
{  gettext(1,1,80,25,savee);
   while(1)
   {
      gotoxy(texty,textx);
      key=bioskey(0);/*接收按键*/
      switch(key)
      {
     case ALT_B:
     case ESC: DrawMl(0);break; /*显示下拉菜单1*/
     case ALT_M: DrawMl(1);break;/*显示下拉菜单2*/
     case ALT_H: DrawMl(2);/*显示下拉菜单3*/
     case UP:  /*上光标键的操作控制*/
        {
           if(textx==3)
          textx=23;
           textx--;
           gotoxy(texty,textx);
         }break;
     case DOWN:  /*下光标键的操作控制*/
        {
           if(textx==23)
          textx=3;
           textx++;
           gotoxy(texty,textx);

        }break;
     case LEFT: /*左光标键的操作控制*/
        {
           if(texty==2)
          texty=T-1;
           texty--;
           gotoxy(texty,textx);
        }break;
     case Backspace: /*擦除键的设置*/
        {
           if(texty==2&&textx==3)
          continue;
           else
           {
          if(texty!=2)
             texty--; /*擦除键的细节问题,先擦去东西,然后光标还要往后退一格*/
          else
             if(texty==2)
             {
            texty=78;
            textx--;
             }
             gotoxy(texty,textx);
             printf(" ");
             gotoxy(texty,textx);
          }
           }break;/*end case 0xe08*/
     case RIGHT: /*右光标键的操作控制*/
        {
           if(texty==T-1)
          texty=2;
           texty++;
           gotoxy(texty,textx);
        }break;
     case SPACE: /*空格键的操作*/
        {
           if(texty==79)
          continue;
           else
           {
          gotoxy(texty,textx); /*空格的细节操作*/
          printf(" ");
          texty++;
          goto
  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值