go语言职工管理系统 go语言guan方文档

怎样用易语言做职工管理系统

使用数据库即可用易语言做职工管理系统。

为南海等地区用户提供了全套网页设计制作服务,及南海网站建设行业解决方案。主营业务为做网站、网站制作、南海网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

职工管理系统是科学、全面、高效进行人事管理的系统,其功能要求一般有可以创建存盘信息文件、能够根据身份证号查询某人信息、添加或删除某人信息、可以统计工时等。

编程题 职工信息管理系统 帮忙解决一下 很急 !!!!

我这个是我以前课程设计时做的,也是工资管理系统,功能貌似比你多,你自己删减下,我这里还有当时交的课程设计报告书,上面有详细说明,要的话给我邮箱发给你,记得采纳啊~~

#include "stdio.h"

#include "bios.h"

#include "dos.h"

#include "conio.h"

#include "stdlib.h"

#include "string.h"

#include "mem.h"

#include "ctype.h"

#include "alloc.h"

typedef struct z1

{

char no[11];

char name[15];

float jbgz;

float koukuan;

float yfgz;

float shuijin;

float sfgz;

struct z1 *prior;

struct z1 *next;

}SALARY;

struct z1 *First;

struct z1 *Last;

void init();

void create();

void calc();

void delete();

void search();

void change();

void save();

void load();

void insert();

void list();

void print(SALARY *p);

float fax(float x);

int menu_select();

main()

{

int i;

clrscr();

for(;;)

{

switch(menu_select())

{

case 1:create();clrscr();break;

case 2:calc();clrscr();break;

case 3:search();clrscr();break;

case 4:change();clrscr();break;

case 5:insert();clrscr();break;

case 6:delete();clrscr();break;

case 7:list();clrscr();break;

case 8:save();clrscr();break;

case 9:load();clrscr();break;

case 0:exit(0);

}

}

}

menu_select()

{

char *f[]= {

"********SalaryMangementSystem*********",

" 1. Enter list",

" 2. Calc the salary",

" 3. Search record by no",

" 4. Change record by no",

" 5. Insert record to list",

" 6. Delete a record",

" 7. List all ",

" 8. Save data to the file",

" 9. Load dta from the file",

" 0. Quit",

"**************************************",

"Please enter your choice:" };

int i;

int c=0;

for(i=0;i13;i++)

{

gotoxy(1,3+i);

cprintf("%s",f[i]);

}

scanf("%d",c);

return c;

}

void init()

{

First=NULL;

Last=NULL;

}

/*输入数据,创建双链表*/

void create()

{

int x; /*记录行坐标*/

int i; /*记录输入记录数*/

int flag=0; /*做结束标记*/

float temp; /*定义临时变量*/

SALARY *info,*p; /*定义临时变量*/

if(First!=NULL)

init();/*如果头指针不为空,调用初始化函数*/

p=First; /*从头指针开始*/

for(;;)

{

if(flag==1)

break; /*如果flag=1,结束输入*/

i=0;

x=0; /*确定移动的行坐标*/

clrscr(); /*清屏*/

gotoxy(1,3);

printf("*************gongziguanli*************");/*输出标题*/

gotoxy(1,4);

printf(" --Enter S end--");/*提示输入@结束*/

gotoxy(1,5);

printf("|------------------------------------|");/*输出表格的起始线*/

gotoxy(1,6);

printf("| no | name | jbgz |");/*输出字段标题,注意空格数*/

for(;;)

{

gotoxy(1,7+x);

printf("|----------|----------------|--------|");/*输出表格的水平线*/

info=(SALARY *)malloc(sizeof(SALARY));/*申请一个记录空间*/

if(!info)

{

printf("\nout of memory");/*如没有得到空间,输出内存溢出信息*/

exit(0);/*退出程序*/

}

info-next=NULL;/*新结点的后继为空*/

info-prior=NULL;/*新结点的前驱为空*/

gotoxy(1,8+x);printf("|"); /*输出数据间的分割线*/

gotoxy(12,8+x);printf("|");

gotoxy(29,8+x);printf("|");

gotoxy(38,8+x);printf("|");

gotoxy(2,8+x);/*光标到输入编号位置*/

inputs(info-no,10);/*输入编号,并验证长度不超过10*/

if(info-no[0]=='S'||info-no[0]=='s')

{

flag=1;

break;

} /*编号首字母为S结束输入*/

gotoxy(13,8+x); /*光标到输入姓名位置*/

inputs(info-name,14); /*输入姓名,并验证长度不超过14*/

gotoxy(30,8+x); /*光标到输入基本工资位置*/

scanf("%f",temp); /*输入基本工资到临时变量*/

info-jbgz=temp; /*基本工资赋值*/

info-koukuan=0; /*初始扣款为0,待计算工资时输入*/

info-sfgz=0; /*初始实发工资为0,待计算工资时计算*/

info-shuijin=0; /*初始税金为0,待计算工资时计算*/

info-yfgz=0; /*初始应发工资为0,待计算工资时计算*/

if(p==NULL)/*如果p为空,说明输入的是第一个结点*/

{

First=Last=info;/*头指针和尾指针*/

First-prior=NULL; /*头指针的前驱是空*/

Last-next=NULL; /*尾指针的后继是空*/

}

else /*插入的结点不是第一结点,则插入在头结点之前*/

{

info-next=p;/*新结点的后继指向原来的头结点*/

info-prior=p-prior;/*新结点的前驱指向原来的头结点的前驱*/

p-prior=info;/*原来结点的前驱指向新结点*/

}

p=info; /*新结点变为p结点,暂时的头结点*/

First=info; /*新结点变为头结点*/

x+=2; /*因为水平线,将光标下移两行*/

gotoxy(1,8+x);

i++; /*输入记录数加1*/

if(i%9==0)

break; /*输入9个记录,换一页输入*/

}

gotoxy(1,8+x);

}

printf("*****************end*****************");/*输出结尾水平线*/

}

/*字符串输入和验证函数*/

inputs(char *s, int count)

{

char p[255];

do{

scanf("%s",p);/*输入字符串*/

if(strlen(p)count)printf("\n too long! \n");/*进行长度校验,超过count值重输入*/

}while(strlen(p)count);

strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/

}

/*显示链表*/

void list()

{

int i=0,n; /*记录输出行数*/

SALARY *p; /*定义移动指针*/

clrscr(); /*清屏*/

p=First; /*从头指针开始*/

while(i%10==0p!=NULL) /*外循环控制换页*/

{

i=0; /*记录一页的输出行数*/

clrscr(); /*清屏*/

printf("\n\n\n"); /*换行三次*/

printf("*************************************SALARY***********************************\n"); /*输出大标题*/

printf("|nO | name | jbgz | koukuan | yfgz | shuijin | sfgz |\n"); /*输出字段标题*/

printf("|----------|---------------|---------|---------|---------|---------|---------|\n"); /*输出水平线*/

while(p!=NULL) /*当p不为空时*/

{

printf("|%-10s|%-15s|%9.2f|%9.2f|%9.2f|%9.2f|%9.2f|\n",

p-no,p-name,p-jbgz,p-koukuan,p-yfgz,p-shuijin,p-sfgz);

p=p-next; /*指针后移*/

i++; /*输出行数加1 */

if(i%10==0)

break; /*如果满10行,跳出内循环*/

}

printf("****************************************end***********************************\n"); /*输出本页的结束行*/

printf("Press any key congtinue...\n");

getch(); /*输出一页暂停一下,压任意键继续*/

} /*返回到外循环,准备下一页的输出*/

}

/*输出指针所指结点信息*/

void print(SALARY *p)

{

if(p) /*如果指针不为空,则显示信息*/

{

clrscr(); /*清屏*/

printf("\n\n\n"); /*换行*/

printf("************************************SALARY************************************\n"); /*输出标题信息*/

printf("|no | name | jbgz | koukuan| yfgz | shuijin | sfgz |\n"); /*输出字段标题*/

printf("|----------|---------------|---------|---------|---------|---------|---------|\n"); /*输出分割线*/

printf("|%-10s|%-15s|%9.2f|%9.2f|%9.2f|%9.2f|%9.2f|\n", p-no,p-name,

p-jbgz,p-koukuan,p-yfgz,p-shuijin,p-sfgz);/*输出结点信息*/

printf("***************************************end************************************\n"); /*输出结束标记*/

}

}

/*计算实发工资*/

void calc()

{

int x; /*行坐标*/

int i=0; /*记录数*/

float temp; /*临时变量扣款*/

SALARY *p; /*移动指针*/

clrscr(); /*清屏*/

p=First; /*从头指针开始*/

while(p!=NULL) /*当p不为空时,也就是有记录时,外循环控制换页*/

{

x=0;

clrscr();

gotoxy(1,3);

printf("***************************gongziguanli************************************"); /*输出标题*/

gotoxy(1,5);

printf("|--------------------------------------------------------------------------|");

gotoxy(1,6);/*下面输出字段标题*/

printf("| no | name | jbgz | koukuan | yfgz |shuijin | sfgz |");

while(p!=NULL) /*当p不为空时,也就是有记录时,内循环控制处理9条*/

{

gotoxy(1,7+x);

printf("|----------|----------------|--------|----------|--------|--------|--------|");

gotoxy(1,8+x);printf("|");

gotoxy(12,8+x);printf("|");

gotoxy(29,8+x);printf("|");

gotoxy(38,8+x);printf("|");

gotoxy(49,8+x);printf("|");

gotoxy(58,8+x);printf("|");

gotoxy(67,8+x);printf("|");

gotoxy(76,8+x);printf("|");

gotoxy(2,8+x);

printf("%-10s",p-no); /*输出编号*/

gotoxy(13,8+x);

printf("%-15s",p-name); /*输出姓名*/

gotoxy(30,8+x);

printf("%.2f",p-jbgz); /*输出基本工资*/

gotoxy(39,8+x);

scanf("%f",temp); /*输入扣款*/

p-koukuan=temp; /*扣款字段赋值*/

p-yfgz=p-jbgz-p-koukuan; /*计算应发工资=基本工资-扣款*/

gotoxy(50,8+x);

printf("%.2f",p-yfgz); /*输出应发工资*/

gotoxy(59,8+x);

p-shuijin=(p-yfgz-1000)*fax(p-yfgz); /*否则按税率计算税金*/

printf("%.2f",p-shuijin); /*输出税金*/

gotoxy(68,8+x);

p-sfgz=p-yfgz-p-shuijin; /*计算实发工资*/

printf("%-8.2f",p-sfgz); /*输出实发工资*/

x+=2; /*行坐标下移两行*/

i++; /*记录数加1*/

if(i%9==0)break; /*记录数超过9条,跳出内循环*/

p=p-next; /*指针后移,处理下一条*/

}

gotoxy(1,7+x);

printf("***************************************end***********************************\n"); /*输出结束行*/

printf("Press any key congtinue...\n");

getch();

}

}

/*根据应发工资,计算税率*/

float fax(float x)

{

float f1;

if(x1000)

return 0; /*小于1000,返回0*/

switch((int)(x/1000))

{

case 1:f1=0.05;break; /*1000~1999,返回0.05*/

case 2:f1=0.1;break; /*2000~2999,返回0.1*/

case 3:f1=0.15;break; /*3000~3999,返回0.15*/

case 4:f1=0.2;break; /*4000~4999,返回0.2*/

default:f1=0.3;break; /*5000以上,返回0.3*/

}

return f1;

}

/*按编号查找记录*/

SALARY *find(char *no)

{

SALARY *p; /*定义移动指针*/

p=First; /*从头指针开始*/

while(p) /*当p不为空时*/

{

if(!strcmp(no,p-no))

return p; /*比较相等,查找成功,返回指针*/

p=p-next; /*不相等指针后移*/

}

printf("not found\n"); /*没有找到*/

return NULL; /*返回为空指针*/

}

/*删除结点*/

void delete()

{

SALARY *p; /*定义临时变量,p指向要删除的结点p*/

char s[11]; /*要删除结点的编号*/

clrscr(); /*清屏*/

printf("please deleted no\n"); /*提示输入信息*/

scanf("%s",s); /*输入要删除的职工编号*/

if((p=find(s))!=NULL) /*调用查找函数,如果找到做下面的处理*/

{

if(First==p) /*如果是第一个结点*/

{

First=p-next; /*将头指针指向其后继结点*/

if(First) /*如头指针不为空*/

First-prior=NULL; /*将头结点的前驱设为空*/

else

Last=NULL; /*否则头为空,尾也为空*/

}

else /*删除的不是第一个结点*/

{

p-prior-next=p-next; /*p的前驱的后继指向p原来的后继*/

if(p!=Last) /*如果p不是最后个结点*/

p-next-prior=p-prior; /*p后继的前驱指向p原来的前驱*/

else

Last=p-prior;/*如p是最后一个结点,修改尾指针为p的前驱*/

}

free(p); /*删除结点后,不要忘记释放空间*/

printf("\n Have deleted %s SALARY\n",s);

printf("Don't forget save\n");

getch();

}

}

/*按工号查找结点*/

void search()

{

SALARY *p; /*移动指针*/

char s[11]; /*保存工号*/

clrscr(); /*清屏*/

printf("please enter number for search\n"); /*提示输入*/

scanf("%s",s); /*输入要查找人的工号*/

p=First; /*移动指针从头指针开始*/

while(strcmp(p-no,s)p!=NULL) /*做比较判断*/

p=p-next; /*没找到,指针后移继续查找*/

if(p==NULL) /*指针为空,说明没有找到*/

printf("\nList no %s SALARY\n",s); /*显示没找到信息*/

else

{

printf("\n\n"); /*换行*/

print(p); /*查找成功,调用输出函数输出指针p所指记录*/

}

printf("Press any key congtinue...\n");

getch();

}

/*插入结点*/

void insert()

{

SALARY *p,*info; /* info为新结点,p为新结点的后继*/

char s[11]; /*保存查找的工号*/

float temp; /*临时变量*/

clrscr(); /*清屏*/

printf("please enter location before the no\n"); /*提示输入在哪个结点之前插入*/

scanf("%s",s); /*输入指定结点的编号*/

printf("\nInsert new record\n"); /*提示输入记录*/

clrscr();/*清屏*/

gotoxy(1,3); /*定位光标,按表格形式输入新结点信息*/

printf("**************gongziguanli************");

gotoxy(1,5);

printf("|------------------------------------|");

gotoxy(1,6);

printf("| no | name | jbgz | ");

gotoxy(1,7);

printf("|----------|----------------|--------|");

info=(SALARY *)malloc(sizeof(SALARY)); /*申请空间*/

if(!info)

{

printf("\nout of memory"); /*如没有得到空间,内存溢出*/

exit(0); /*退出程序*/

}

info-next=NULL; /*新结点的后继为空*/

info-prior=NULL; /*新结点的前驱为空*/

gotoxy(1,8);printf("|");

gotoxy(12,8);printf("|");

gotoxy(29,8);printf("|");

gotoxy(38,8);printf("|");

gotoxy(2,8);

inputs(info-no,10); /*输入新结点的编号,并校验*/

gotoxy(13,8);

inputs(info-name,14); /*输入新结点的姓名,并校验*/

gotoxy(30,8);

scanf("%f",temp); /*输入基本工资*/

info-jbgz=temp; /*给基本工资字段赋值*/

info-koukuan=0; /*扣款初始为0*/

info-yfgz=0; /*应发工资初始为0*/

info-shuijin=0; /*税金初始为0*/

info-sfgz=0; /*实发工资初始为0*/

printf("|----------|----------------|--------|");

p=First; /*移动指针从头指针开始*/

while(strcmp(p-no,s)p!=NULL) /*查找结点确定插入位置*/

p=p-next; /*指针后移,继续查找*/

if(p==NULL) /*如p为空*/

if(p==First) /*如p为头指针,说明链表为空*/

{

First=info; /*新结点为头指针*/

First-prior=NULL; /*头结点的前驱为空*/

Last=First; /*唯一结点,尾指针等于头指针*/

}

else /*新结点插在尾部*/

{

Last-next=info;

info-prior=Last;

Last=info; /*尾指针指向新结点*/

}

else

if(p==First) /*p不为空,但p为头指针,新结点插在第一个结点位置*/

{

info-prior=NULL; /*新结点的前驱为空*/

info-next=p; /*新结点的后继为p*/

p-prior=info; /*p的前驱是新结点*/

First=info; /*修改头指针指向新结点*/

}

else /*新结点插入在中间某一个位置p之前*/

{

info-next=p; /*新结点的后继是p*/

info-prior= p-prior; /*新结点的前驱是p的前驱*/

p-prior-next=info; /*p的前驱的后继是新结点*/

p-prior=info; /*p的前驱是新结点*/

}

printf("\n\n\n ----Have inserted %s SALARY----\n",info-name);

printf("\n---Don't forget save---\n"); /*提醒调用保存文件存盘*/

}

/*保存文件*/

void save()

{

FILE *fp; /*定义指向文件的指针*/

SALARY *p; /*定义移动指针*/

char outfile[10]; /*保存输出文件名*/

clrscr();/*清屏*/

printf("Enter outfile name,for example c:\\f1\\te.txt:\n");/*提示输入文件名格式信息*/

scanf("%s",outfile);

if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件*/

{

printf("can not open file\n");

return; /*返回*/

}

printf("\nSaving file......\n");

p=First; /*移动指针从头指针开始*/

while(p!=NULL) /*如p不为空*/

{

fwrite(p,sizeof(SALARY),1,fp); /*写入一条记录*/

p=p-next; /*指针后移,处理下一条记录*/

}

fclose(fp); /*关闭文件*/

printf("-----save success!!-----\n");/*显示保存成功*/

}

void load()

{

SALARY *p,*q=NULL; /*定义记录指针变量*/

FILE *fp; /* 定义指向文件的指针*/

char infile[10]; /*保存文件名*/

clrscr();/*清屏*/

printf("Enter infile name,for example c:\\f1\\te.txt:\n");/*输入文件名格式*/

scanf("%s",infile); /*输入文件名*/

if((fp=fopen(infile,"rb"))==NULL) /*打开一个二进制文件,为读方式*/

{

printf("can not open file\n"); /*如不能打开,则结束程序*/

return; /*返回*/

}

while(First) /*当表不为空时,清空链表*/

{

p=First; /*从头指针开始*/

First=First-next; /*删除头结点*/

free(p); /*释放空间*/

}

printf("\n -----Loading file!-----\n"); /*显示正在读文件*/

First=(SALARY *)malloc(sizeof(SALARY)); /*为头指针申请空间*/

if(!First) /*如果没有得到空间 显示内存溢出*/

{

printf("out of memory!\n");

return; /*返回*/

}

p=First; /*将头指针赋值给p*/

while(!feof(fp)) /*当文件不空时*/

{

if(1!=fread(p,sizeof(SALARY),1,fp))break; /*将记录读到p所指的结点*/

p-next=(SALARY *)malloc(sizeof(SALARY));/*为p的后继申请空间*/

if(!p-next) /*如果没有得到空间显示内存溢出*/

{

printf("out of memory!\n");

return; /*返回*/

}

p-prior=q; /*得到空间,则链接指针关系p的前驱为q*/

q=p; /*保存p做为新的p结点的前驱*/

p=p-next; /*p指针后移*/

}

q-next=NULL; /*q的后继为空*/

Last=q; /*尾指针为q*/

First-prior=NULL; /*头指针的前驱为空*/

fclose(fp); /*关闭文件*/

printf("---You have success read data from file!!!---\n"); /*显示成功读入记录*/

getch();

}

void change()

{

int x=0;

float temp;

SALARY *info,*p; /*移动指针*/

char s[11]; /*保存工号*/

clrscr(); /*清屏*/

printf("please enter number for change\n"); /*提示输入*/

scanf("%s",s); /*输入要更改的工号*/

p=First; /*移动指针从头指针开始*/

while(strcmp(p-no,s)p!=NULL) /*做比较判断*/

p=p-next; /*没找到,指针后移继续查找*/

if(p==NULL) /*指针为空,说明没有找到*/

printf("\nlist no %s SALARY\n",s); /*显示没找到信息*/

else

{

printf("please enter the new jbgz:");

scanf("%f",temp); /*输入基本工资到临时变量*/

p-jbgz=temp; /*基本工资赋值*/

printf("please enter the new koukuan:");

scanf("%f",temp);

p-koukuan=temp;

p-yfgz=p-jbgz-p-koukuan; /*计算应发工资=基本工资-扣款*/

p-shuijin=(p-yfgz-1000)*fax(p-yfgz); /*否则按税率计算税金*/

p-sfgz=p-yfgz-p-shuijin; /*计算实发工资*/

print(p);

printf("Changed successed!"); /*输出实发工资*/

}

printf("\n");

printf("Press any key congtinue...\n");

getch();

}

简单的职工管理系统

希望对你有帮助。

/**************************************************

内容及要求:

1注册新职工,添加新职工的详细信息,

如:职工号,姓名,出生年份,性别,职称,部门,工资等;

2按姓名,部门等条件进行查询;

3修改和删除职工信息;

4按工资高低进行排序;

5把各项纪录存储在文本文件中。

----ky kuaidh00, 2008/01/05.-------------------

评说:有删除和增加的操作,最好选取链表来做。

**************************************************/

#include string

#include iostream

#include fstream

#include iomanip

#include memory.h

#include stdio.h

#include conio.h

#include stdlib.h

using namespace std;

struct Employee

{//声明职工的结构作为链表节点。

//-----数据域-----

string m_Code;

string m_Name;

unsigned short int m_Year;

string m_Sex;

string m_Post;

string m_Department;

unsigned int m_Wage;

//链表节点的指针域---

struct Employee* Next;

};

//-----个人习惯:取别名-------

typedef struct Employee Node;

typedef Node* Link;

//-------函数声明-------------

Link Create(Link Head);

void Release(Link Head);

Link Add(Link Head);

bool Search(Link Head);

Link Search_Unique(Link Head);

void Display_List(Link Head);

void Display_Node(Link pNode);

Link Modify(Link Head);

Link Del(Link Head);

void Save_ByFile(Link Head,fstream ofile);

Link Sort(Link Head);

//-------函数实现--------------------------

Link Create(Link Head)

{//创建一个带头节点的空链表。

Head=(Link)new Node;

if(!Head)

{

cout"分配内存失败!"endl;

return NULL;

}

Head-m_Code="";

Head-m_Name="";

Head-m_Year=0;

Head-m_Sex="";

Head-m_Post="";

Head-m_Department="";

Head-m_Wage=0;

Head-Next=NULL;

return Head;

}

void Release(Link Head)

{//释放链表。

Link ptr;//声明一个操作用的指针。

while(Head!=NULL)

{

ptr=Head;

Head=Head-Next;

delete ptr;//释放节点资源。

}

}

Link Add(Link Head)

{//前插法添加数据。

Link pNew;// 声明一个新节点。

char again;

string code,name,sex,post,department;

unsigned short int year;

unsigned int wage;

do

{

pNew=(Link)new Node;

//数据域。

cout"请输入职工代码:";

cincode;

coutendl"请输入职工姓名:";

cinname;

coutendl"请输入职工出生年份:";

cinyear;

while(cin.fail())

{

cout"请输入正确的年份格式。"endl;

cin.clear();

fflush(stdin);

cinyear;

}

coutendl"请输入职工性别:";

cinsex;

coutendl"请输入职工职称:";

cinpost;

coutendl"请输入职工部门:";

cindepartment;

coutendl"请输入职工工资:";

cinwage;

while(cin.fail())

{

cout"请输入正确的工资数据。"endl;

cin.clear();

fflush(stdin);

cinwage;

}

coutendl;

pNew-m_Code=code;

pNew-m_Name=name;

pNew-m_Year=year;

pNew-m_Sex=sex;

pNew-m_Post=post;

pNew-m_Department=department;

pNew-m_Wage=wage;

//指针域。

pNew-Next=Head-Next;

Head-Next=pNew;

cout"数据添加成功!是否继续添加?(Y/N)"endl;

cinagain;

}while(again=='Y'||again=='y');

return Head;

}

bool Search(Link Head)

{//查询同时满足“姓名”和“部门”的职工信息。

Link ptr;

string department;

string name;

ptr=Head-Next;

cout"请输入部门:";

cindepartment;

coutendl"请输入姓名:";

cinname;

coutendl"----------------查询结果------------------"endl;

while(ptr)

{

if((ptr-m_Name==name)(ptr-m_Department==department))

{

Display_Node(ptr);//打印满足条件的节点。

return true;

}

ptr=ptr-Next;//查询下一节点。

}

cout"无此职工的信息。"endl;

return false;

}

Link Search_Unique_Front(Link Head)

{//查询满足“职工代码“的职工信息(职工代码必需唯一)。

Link ptr;

string code;

ptr=Head;

cout"请输入职工代码:";

cincode;

coutendl"----------------查询结果------------------"endl;

while(ptr-Next)

{

if(ptr-Next-m_Code==code)

//Display_Node(ptr);//打印满足条件的节点。

return ptr;//注意,是返回的查询到的节点的直接前趋节点。

ptr-Next=ptr-Next-Next;//查询下一节点。

}

return ptr;

}

void Display_List(Link Head)

{

Link ptr;

ptr=Head-Next;

cout"==================所有职工信息=================="endl;

while(ptr)

{

Display_Node(ptr);

ptr=ptr-Next;

}

}

void Display_Node(Link pNode)

{//在标准输出设备上输出。

coutsetw(10)leftpNode-m_Code

setw(10)leftpNode-m_Name

setw(10)leftpNode-m_Year

setw(10)leftpNode-m_Sex

setw(10)leftpNode-m_Post

setw(10)leftpNode-m_Department

setw(10)leftpNode-m_Wageendl;//setw(10)表示占10个字符位置。

}

Link Modify(Link Head)

{// 修改单一个节点。

Link ptr;

ptr=Search_Unique_Front(Head);

string code,name,sex,post,department;

unsigned short int year;

unsigned int wage;

if(ptr-Next)

{

cout"-------你现在可以修改此职工的信息了-------"endl;

//数据域。

cout"请输入职工代码:";

cincode;

coutendl"请输入职工姓名:";

cinname;

coutendl"请输入职工出生年份:";

cinyear;

while(cin.fail())

{

cout"请输入正确的年份格式。"endl;

cin.clear();

fflush(stdin);

cinyear;

}

coutendl"请输入职工性别:";

cinsex;

coutendl"请输入职工职称:";

cinpost;

coutendl"请输入职工部门:";

cindepartment;

coutendl"请输入职工工资:";

cinwage;

while(cin.fail())

{

cout"请输入正确的工资数据。"endl;

cin.clear();

fflush(stdin);

cinwage;

}

coutendl;

ptr-Next-m_Code=code;//因ptr是前趋节点,所以要用ptr-Next;

ptr-Next-m_Name=name;

ptr-Next-m_Year=year;

ptr-Next-m_Sex=sex;

ptr-Next-m_Post=post;

ptr-Next-m_Department=department;

ptr-Next-m_Wage=wage;

}

cout"没找到此职工的记录,无法修改。"endl;

return Head;

}

Link Del(Link Head)

{

Link ptr;

Link ptr_front;

ptr_front=Search_Unique_Front(Head);

ptr=ptr_front-Next;

if(ptr)

{

ptr_front-Next=ptr-Next;

delete ptr;//删除此节点。

}

cout"没找到此职工的记录,无法删除。"endl;

return Head;

}

void Save_ByFile(Link Head,fstream ofile)

{

Link pNode;

pNode=Head-Next;

ofile.clear();//清除文件结束状态。

while(pNode)

{

ofilesetw(10)leftpNode-m_Code

setw(10)leftpNode-m_Name

setw(10)leftpNode-m_Year

setw(10)leftpNode-m_Sex

setw(10)leftpNode-m_Post

setw(10)leftpNode-m_Department

setw(10)leftpNode-m_Wageendl;//setw(10)表示占10个字符位置。

pNode=pNode-Next;

}

cout"数据文件保存成功!"endl;

}

Link Sort(Link Head)

{//我创建的是带头节点的链表。用直接插入法。

if((Head-Next==NULL)||(Head-Next-Next==NULL))//此步条件判断非常有价值。

{

cout"数据节点数少于2个,不用排序!"endl;

return Head;

}

//-----------第二步;

Link ptr;

Link ptr_F;

Link ptr_N;

ptr=Head-Next-Next;

ptr_F=Head;

Head-Next-Next=NULL;//到此,分成了两个链表。

//第三步。

while(ptr)

{

ptr_N=ptr-Next;

ptr_F=Head;//ptr_F的归位。

while(ptr_F-Next)

{

if(ptr-m_Wageptr_F-Next-m_Wage)

{

ptr-Next=ptr_F-Next;

ptr_F-Next=ptr;

break;

}//if

else

{

ptr_F=ptr_F-Next;

}

}//while(ptr_F-Next)

if(ptr_F-Next==NULL)

{

ptr-Next=ptr_F-Next;

ptr_F-Next=ptr;//表示插到有序链表的最后面了。

}

ptr=ptr_N;//归位,准备下一次排序。

}//while(ptr)

cout"从高到低,排序成功!"endl;

return Head;

}

int main()

{

Link Head=0;

Head=Create(Head);

fstream iofile;

iofile.open("d:\\iofile.txt",ios_base::in|ios_base::out|ios_base::app);//文件以三种方式打开。

if(!iofile)

{

cout"打开文件失败!"endl;

return -1;

}

int menu;

while(1)

{

cout"*****************************************************"endl;

cout"*====================菜单选顶=======================*"endl;

cout"*===================================================*"endl;

cout"* 1.注册职工 2.修改信息 3.删除信息 4.信息查询 *"endl;

cout"* 5.保存文件 6.工资排行 7.信息显示 0.退出系统 *"endl;

cout"*****************************************************"endl;

coutendl"请选择相应操作菜单项:";

cinmenu;

while(cin.fail())

{

cout"请选择正确的菜单选项。"endl;

cin.clear();

fflush(stdin);

cinmenu;

}

switch(menu)

{

case 0:

cout"成功退出系统!"endl;

return 0;

case 1:

Head=Add(Head);

break;

case 2:

Head=Modify(Head);

break;

case 3:

Head=Del(Head);

break;

case 4:

Search(Head);

break;

case 5:

Save_ByFile(Head,iofile);

break;

case 6:

Sort(Head);

break;

case 7:

Display_List(Head);

break;

default:

cout"请选择正确的菜单项进行操作。多谢合作!"endl;

}

}

Release(Head);

iofile.close();

return 0;

}


网站名称:go语言职工管理系统 go语言guan方文档
URL分享:http://pwwzsj.com/article/dociedo.html