1. 首页 > 端游评测 >

工资信息管理系统课程设计 工资管理系统概要设计说明书

C语言课程设计 某企业职工工资管理系统

我这里有一份我当年坐课程设计的程序,你可以改改

工资信息管理系统课程设计 工资管理系统概要设计说明书工资信息管理系统课程设计 工资管理系统概要设计说明书


工资信息管理系统课程设计 工资管理系统概要设计说明书


# include

# include

# include

# include

# include

using namespace std;

struct worker_inf

{int month; //月份

int code; //工人编号

string name; //姓名

float get[4]; //基本工资,津贴,房帖,交通补贴

float pay[4]; //房租,储蓄,交通费,会费

float tax; //个人所得税

float theory_num; //应发书

float reduce_num; //应扣数

float pract_num; //实发数

worker_inf next;

};

/////////////////////////////////////////////////////////////////

class worker //定义职工类

{private:

worker_inf head;

void print(worker_inf ); //输出一条指定职工的工资记录,并返回该记录的指针

worker_inf find(int); //查找条例条件的记录,并返回该记录的指针

public:

worker(){head=NULL;}

worker_inf get_head(){return head;}

int listcount(); //统计当前链表的记录总数,并返回一个整数

void add(int month,int code,string name,float get[4],float pay[4]); //添加一条工资记录表尾

void remove(int); //删除一条指定职工的工资记录

int menu(); //修改某职工工资的菜单

void changemonth(); //修改月份

void change(int); //修改职工的工资信息

void list(); //输出当月全体职工的工资信息

void search(int); //输出指定编号职工的工资信息

float tax_num(); //计算职工个人所得税

float theorynumber(); //计算应发工资

float reducenumber(); //计算应扣工资

float practnumber(); //计算实发工资

};

//////////////////////////////////////////////////////////////////

int worker::listcount() //统计当前链表数,并返回一个整数

{if(!head)return 0;

worker_inf p=head;

int n=0;

while(p)

{n++;p=p->next;}

return n;

}//////////////////////////////////////////////////////////////////

void worker::add(int month,int code,string name,float get[4],float pay[4]) //添加一条工资记录到表尾

{if(!head)

{head=new worker_inf;

for(int i=0;i<4;i++)

{head->get[i]=get[i];

head->pay[i]=pay[i];

}head->code=code;

head->month=month;

head->name=name;

head->next=NULL;

return;

}worker_inf t=head;

while(t && t->code!=code)

t=t->next;

if(t)

{cout<<"作失败:编号为"<

return;

}worker_inf p=head;

while(p->next)p=p->next;

worker_inf p1=new worker_inf;

p1->code=code;

for(int i=0;i<4;i++)

{p1->get[i]=get[i];

p1->pay[i]=pay[i];

}p1->code=code;

p1->month=month;

p1->name=name;

p1->next=NULL;

p->next=p1;

return;

}////////////////////////////////////////////////////////////////////

void worker::remove(int code) //删除一条指定职工的工资记录

{worker_inf t=find(code);

if(!t)return;

worker_inf p=head;//如果要删除的记录位于表头

if(head==t)

{head=head->next;

delete p;

cout<<"成功删除编号为"<

return;

}while(p->next!=t)p=p->next;

worker_inf p1=p->next;

p->next=p1->next;

delete p1;

cout<<"成功删除编号为"<

return;

}////////////////////////////////////////////////////////////////

int worker::menu() //修改某一职工信息的菜单

{int select=-1;

cout<<"tttttt修改菜单"<

cout<<"1.基本工资"<

cout<<"2.津贴"<

cout<<"3.房帖"<

cout<<"4.交通补贴"<

cout<<"5.房租"<

cout<<"6.储蓄"<

cout<<"7.交通费"<

cout<<"8.会费"<

cout<<"0.退出修改系统"<

cout<<"[请选择(输入相应数字)]:";

cin>>select;

if(select<0||select>9)

{cout<<"对不起您输入错误!请重新输入【0-9】:"<

cin>>select;

}return select;

}/////////////////////////////////////////////////////////////////

int menu();

void worker::change(int code) //修改某职工部分工资信息

{worker_inf p=find(code);

if(!p){cout<<"不存在职工编号为"<

int select;

while(1)

{float m;

select=menu();

if(select==0){("cls");break;}

cout<<"请输入修改后的值";

cin>>m;

int n;

if(select<=4){

n=select-1;

p->get[n]=m;}

else{

n=select-5;

p->pay[n]=m;}

tax_num();

theorynumber();

reducenumber();

practnumber();

cout<<"修改成功"<

}}

////////////////////////////////////////////////////////////////////

void worker::changemonth() //修改月份

{worker_inf p=head;

while(p)

{if(p->month==12)p->month=1;

else

p->month++;

p=p->next;

}}

//////////////////////////////////////////////////////////////////////

void worker::print(worker_inf p)//输出worker_inf制定的记录

{cout.precision(0);

cout<

month<<" ";

cout<

code<<" ";

cout<

name<<"t";

for(int i=0;i<4;i++)

{cout<get[i]<<"t";}

for(int j=0;j<4;j++)

{cout<

pay[j]<<"t";}

cout<

tax<<"t";

cout<

theory_num<<"t";

cout<

reduce_num<<"t";

cout<

pract_num<

return;

}///////////////////////////////////////////////////////////////////////

void worker::list() //列出当前链表中的所有记录

{if(listcount==0)

{cout<<"错误:当前的列表为空!"<

return;

}worker_inf p=head;

cout<<"共有记录:"<

cout<<"月份t编号t姓名t基本工资t津贴t房帖t交通补贴t房租t储蓄t交通费t会费t个人所得税t应发工资t应扣工资t实际工资"<

while(p)

{print(p);

p=p->next;

}cout<

return;

}/////////////////////////////////////////////////////////////////////////

void worker::search(int code) //在当前链表查找指定记录并输出

{cout<<"searching....."<

worker_inf p=find(code);

if(p)

{cout<<"月份t编号t姓名t基本工资t津贴t房帖t交通补贴t房租t储蓄t交通费t会费t个人所得税t应发工资t应扣工资t实际工资"<

print(p);

}cout<

}//////////////////////////////////////////////////////////////////////////

worker_inf worker::find(int code) //查找条例条件的记录,并返回该指针

{if(listcount==0)

{cout<<"错误:当前列表为空!"<

return NULL;

}worker_inf p=head;

while(p)

{if(p->code==code)break;

p=p->next;

}if(!p)

{cout<<"错误:找不到该记录!n";

return NULL;

}return p;

}//////////////////////////////////////////////////////////////////////////

float worker::theorynumber() //计算应发数

{int i;

if(listcount()==0)

{cout<<"错误:当前的列表为空!"<

return -1;

}float sum;

worker_inf p=head;

while(p)

{sum=0;

for(i=0;i<4;i++)

sum+=p->get[i];

p->theory_num=sum;

p=p->next;

}return 0;

}//////////////////////////////////////////////////////////////////

float worker::tax_num() //计算个人所得税

{if(listcount==0)

{cout<<"错误:当前的列表为空!"<

return -1;

}worker_inf p=head;

while(p)

{float s;

s=p->theory_num;

if(s<=800)

p->theory_num=0;

else if(s<=2000) p->theory_num=(s-800)0.05;

else if(s<=5000)

p->theory_num=(s-2000)0.1+60;

else p->theory_num=(s-5000)0.2+360;

p=p->next;

}return 0;

}///////////////////////////////////////////////////////////////////////

float worker::reducenumber() //计算应扣数

{int i;

if(listcount==0)

{cout<<"错误:当前的列表为空!"<

}float sum;

worker_inf p=head;

while(p)

{sum=0;

for(i=0;i<4;i++)

sum+=p->pay[i];

p->reduce_num=p->tax+sum;

p=p->next;

}return 0;

}/////////////////////////////////////////////////////////////////////////

float worker::practnumber() //计算实发数

{if(listcount()==0)

{cout<<"错误:当前的列表为空!"<

return -1;

}worker_inf p=head;

while(p)

{float a,b;

a=p->theory_num;

b=p->reduce_num;

p->pract_num=a-b;

p=p->next;

}return 0;

}////////////////////////////////////////////////////////////////////////////

worker worker; //定义全局变量

int menu()

{int select=-1;

cout<<"主菜单"<

cout<<"1.添加职工信息;"<

cout<<"2.删除职工信息;"<

cout<<"3.修改职工的工资信息;"<

cout<<"4.按职工编号查找记录;"<

cout<<"5.列出所有记录;"<

cout<<"6.从数据文件导入当月工资信息;"<

cout<<"7.将当月工资信息导出到磁盘文件;"<

cout<<"0.安全退出系统;"<

cout<<"[请选择(输入相应的数字)]:";

cin>>select;

return select;

}/////////////////////////////////////////////////////////////////////////////

char exit()

{char s;

cout<<"确定要退出程序吗?[Y/N]:";

cin>>s;

return s;

}//////////////////////////////////////////////////////////////////////////////

void input(int month,intcode,string name,float get[4],float pay[4]) //输入职工信息

{cout<<"请输入月份 编号 姓名 基本工资 津贴 房帖 交通补贴 房租 储蓄 交通费 会费:"<

cin>>month;

cin>>code;

if(code==-1)return;

cin>>name>>get[0]>>get[1]>>get[2]>>get[3]>>pay[0]>>pay[1]>>pay[2]>>pay[3];

return;

}///////////////////////////////////////////////////////////////////////////////

void addnew() //增加记录

{int month=0,code=0;float get[4]={0},pay[4]={0};

string name="";

cout<

input(&month,&code,&name,get,pay);

while(code!=-1)

{worker.add(month,code,name,get,pay);

worker.tax_num();

worker.theorynumber();

worker.reducenumber();

worker.practnumber();

input(&month,&code,&name,get,pay);

}return;

}////////////////////////////////////////////////////////////////////////////////

void dofind() //按职工编号查找

{int code;

cout<

do

{cout<<"请输入要查找的职工的编号:";

cin>>code;

if(code==-1)continue;

worker.search(code);

}while(code!=-1);

return;

}/////////////////////////////////////////////////////////////////////////////////

void dodelete() //删除职工信息

{cout<

int code;

do

{cout<<"请输入要删除的职工的编号:";

cin>>code;

if(code==-1)continue;

worker.remove(code);

}while(code!=-1);

return;

}///////////////////////////////////////////////////////////////////////////////////

void domodify() //修改职工信息

{int code;

cout<<"当输入职工编号为-1时表示结束修改"<

while(1){

cout<<"请输入所需修改职工编号";

cin>>code;

if(code==-1)return;

else

worker.change(code);

}return;

}///////////////////////////////////////////////////////////////////////////////////

void SeFili()//将当月工资信息写入文件

{worker_inf p;

char name[20];

fstream iofile;

int i=0;

iofile.open("Worker_5th.dat",ios::out|ios::binary);

if(!iofile)

{cerr<<"open error!"<

abort();

}p=worker.get_head();

while(p)

{p->name.copy(name,20,0);

name[p->name.length()]=0;

iofile.write((char ) &p->code,sizeof(int));

iofile.write((char ) &p->month,sizeof(int));

iofile.write((char ) name,20);

for(int i=0;i<4;i++)

{iofile.write((char ) &p->get[i],sizeof(float));

}for(int j=0;j<4;j++)

{iofile.write((char ) &p->pay[j],sizeof(float));

}p=p->next;

}iofile.close();

cout<<"成功将工资信息存入文件"<

}////////////////////////////////////////////////////////////////////////

void Loadfili() //读取当月全体职工的工资信息文件

{int month,code;

char name[20]="";

float get[4],pay[4];

fstream iofile;

int i=0;

iofile.open("Worker_5th.dat",ios::in|ios::binary);

if(!iofile)

{cout<<"数据文件不存在,请先建立该文件"<

return;

}if(iofile.eof())

{cout<<"数据库为空,请先添加数据"<

iofile.close();

}else

{while(iofile.peek()!=EOF)//peek()是取文件当前指针,EOF是文件尾标符

{iofile.read((char ) &code,sizeof(int));

iofile.read((char ) &month,sizeof(int));

iofile.read((char ) name,20);

for(int i=0;i<4;i++)

{iofile.read((char ) &get[i],sizeof(float));

} for(int j=0;j<4;j++)

{iofile.read((char ) &pay[j],sizeof(float));

}worker.add(code,month,name,get,pay);

}worker.tax_num();

worker.theorynumber();

worker.reducenumber();

worker.practnumber();

iofile.close();

cout<<"成功导入工资信息"<

}}

/////////////////////////////////////////////////////////////////////////

void list()

{worker.list();

}/////////////////////////////////////////////////////////////////////////

int main()

{cout<<"欢迎进入职工工资管理系统"<

int select;

char s;

while(1)

{select=menu();

switch(select)

{case 0: //退出程序

s=exit();

if(s=='y'||s=='Y') return 0;

break;

case 1: //增加新记录

addnew();

break;

case 2: //删除记录

dodelete();

break;

case 3: //修改记录

domodify();

break;

case 4: //按条件查找

dofind();

break;

case 5: //列出全部记录

list();

break;

case 6: //导入当月职工记录

Loadfili();

break;

case 7: //将职工记录存入磁盘

SeFili();

break;

default:

cout<<"此输入无效!"<

}}

return 0;

}

求一份C语言课程设计的 " 工资管理系统",注意看要求

//C语言课程设计 职工信息管理系统—单链表实现

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

int seflag=0; /是否需要存盘的标志变量/

struct employee

{char name[15];

char num[10];/ 工号 /

char [4];

char bm[15];

char zc[20];

int gz;

};

typedef struct node

{struct employee data;

struct node next;

}Node,Link;

//Link l (注意是:字母l不是数字1)

void add(Link l);

void disp(Link l); //查看职工所有信息

void del(Link l); //删除功能

Node Locate(Link l,char findmess[],char nameornum[]);

void Qur(Link l); //查询功能

void Tongji(Link l); //统计

void Sort(Link l); //排序

void Modify(Link l); //修改功能

void se(Link l); //将单链表l中的数据写入文件

void printe(Node p); //本函数用于打印链表中某个的数据内容 /

//以下4个函数用于输出中文标题

void printstart();

void Wrong();

void Nofind();

void printc();

void menu()

{printf("tn");

printf("t n");

printf("t 职工信息管理系统_结构体数组实现 n");

printf("t n");

printf("t [1] 增加职工信息 [2] 删除职工信息 n");

printf("t [3] 查询职工信息 [4] 修改职工信息 n");

printf("t [5] 插入职工记录 [6] 统计职工记录 n");

printf("t [7] 排序 [8] 保存职工信息 n");

printf("t [9] 显示数据 [0] 退出系统 n");

printf("t n");

printf("tn");

} //void menu菜单结束

void Disp(Link l) //显示单链表l中存储的职工记录,内容为employee结构中定义的内容

{int count=0;

Node p;

p=l->next; // l存储的是单链表中头结点的指针,该头结点没有存储职工信息,指针域指向的后继结点才有职工信息

if(!p) /p==NULL,NUll在stdlib中定义为0/

{printf("n=====>提示:没有职工记录可以显示!n");

return;

}printf("tttt显示结果n");

printstart(); //打印横线

printc(); //打印各学科标题

printf("n");

while(p) //逐条输出链表中存储的职工信息

{printe(p);

p=p->next;

}printstart();

printf("n");

} //void Disp结束

void printstart()

{printf("-----------------------------------------------------------------------n");

}void Wrong()

{printf("n=====>提示:输入错误!n");

}void Nofind()

{printf("n=====>提示:没有找到该职工!n");

}void printc() / 本函数用于输出中文 /

{printf(" 工号t 姓名 性别 部门 职称 工资 总工资 平均工资n");

}void printe(Node p)/ 本函数用于打印链表中某个的数据内容 /

{printf("%-12s%st%st%dt%dt%dt %dt %dn",

p->data.num,p->data.name,p->data.,p->data.bm,p->data.zc,p->data.gz);

}//Locate(l,findmess,"num");

/ 该函数用于定位连表中符合要求的结点,并返回该指针 /

Node Locate(Link l,char findmess[],char zcornum[])

{Node r;

if(strcmp(zcornum,"num")==0) / 按工号查询 /

{r=l->next;

while(r!=NULL)

{if(strcmp(r->data.num,findmess)==0) /若找到findmess值的工号/

return r;

r=r->next;

}}

else if(strcmp(zcornum,"zc")==0) / 按职称查询 /

{r=l->next;

while(r!=NULL)

{if(strcmp(r->data.zc,findmess)==0) /若找到findmess值的职工职称/

return r;

r=r->next;

}}

return 0; /若未找到,返回一个空指针/

}//add()函数中,无时,r指向list头,有时,r指向末尾

void Add(Link l) / 增加职工 /

{Node p,r,s; /实现添加作的临时的结构体指针变量/

char num[10];

int flag=0;

r=l;

s=l->next; //链表没有时,s=null;/链表有时,指向个职工

while(r->next!=NULL) //如果存在后继结点时,r指针后移一个

r=r->next; /将指针移至于链表最末尾,准备添加记录/

while(1)

{printf("请你输入工号(以'0'返回上一级菜单:)");

scanf("%s",num);

if(strcmp(num,"0")==0) //输入'0',跳出while(1),即跳出add()函数

break;

s=l->next; //作用? 每次从个开始找,看num是否重复。

while(s) //工号重复时,返回主菜单

{if(strcmp(s->data.num,num)==0)

{printf("=====>提示:工号为'%s'的职工已经存在,若要修改请你选择'4 修改'!n",num);

flag=1;

//break;

return ;

}s=s->next;

} //while(s)

p=(Node )malloc(sizeof(Node)); //生成没赋值的新 p

strcpy(p->data.num,num);

printf("请你输入姓名:");

scanf("%s",p->data.name);

getchar();

printf("请你输入性别:");

scanf("%s",p->data.);

getchar();

printf("请你输入职工所在部门:");

scanf("%d",&p->data.bm);

getchar();

printf("请你输入职工职称:");

scanf("%d",&p->data.zc);

getchar();

printf("请你输入职工工资:");

scanf("%d",&p->data.gz);

getchar();

/ 信息输入已经完成 /

p->next=NULL; /表明这是链表的尾部结点/

r->next=p; /将新建的结点加入链表尾部中/

r=p;

seflag=1;

} //while(1)

} //void Add增加结束

void Del(Link l) / 删除 /

{int sel;

Node p,r; /实现删除作的临时的结构体指针变量/

char findmess[20];

if(!l->next) //当list无后继结点时,提示和结束返回del()

{printf("n=====>提示:没有记录可以删除!n");

return;

}printf("n=====>1按工号删除n=====>2按姓名删除n");

scanf("%d",&sel);

if(sel==1) //按工号删除

{printf("请你输入要删除的工号:");

scanf("%s",findmess);

p=Locate(l,findmess,"num");

if(p)

{r=l;

while(r->next!=p)

r=r->next; //从个结点找起,直到发现r->next=p, 是待删除结点,跳出循环

r->next=p->next; //r r->next(p) p->next

free(p);

printf("n=====>提示:该职工已经成功删除!n");

seflag=1;

}else

Nofind(); //显示一句话

} //if(sel==1)

else if(sel==2) //按姓名删除

{printf("请你输入要删除的姓名:");

scanf("%s",findmess);

p=Locate(l,findmess,"name");

if(p)

{r=l;

while(r->next!=p)

r=r->next;

r->next=p->next; //r r->next(p) p->next

free(p);

printf("n=====>提示:该职工已经成功删除!n");

seflag=1;

}else

Nofind();

} //if(sel==2)

else

Wrong(); //显示输入错误的话

} //void Del删除结束

void Qur(Link l) //查询功能

{int sel;

char findmess[20];

Node p; //实现查询作的临时的结构体指针变量

if(!l->next)

{printf("n=====>提示:没有资料可以查询!n");

return;

}printf("n=====>1按工号查找n=====>2按职称查找n");

scanf("%d",&sel);

if(sel==1)/ 工号 /

{printf("请你输入要查找的工号:");

scanf("%s",findmess);

p=Locate(l,findmess,"num");

if(p)

{printf("tttt查找结果n");

printstart(); //打印横线

printc(); //打印各学科标题

printe(p); //打印p结点各个数据成员的值

printstart(); //打印横线

}else

Nofind();

} //if(sel==1)

else if(sel==2) / 职称 /

{printf("请你输入要查找的职称:");

scanf("%s",findmess);

p=Locate(l,findmess,"zc");

if(p)

{printf("tttt查找结果n");

printstart();

printc();

printe(p);

printstart();

}else

Nofind();

}else

Wrong();

} //void Qur查询结束

void Modify(Link l) //修改功能

{Node p;

char findmess[20];

if(!l->next)

{printf("n=====>提示:没有资料可以修改!n");

return;

}printf("请你输入要修改的职工工号:");

scanf("%s",findmess);

p=Locate(l,findmess,"num");

if(p)

{printf("请你输入新工号(原来是%s):",p->data.num);

scanf("%s",p->data.num);

printf("请你输入新姓名(原来是%s):",p->data.name);

scanf("%s",p->data.name);

getchar();

printf("请你输入新性别(原来是%s):",p->data.);

scanf("%s",p->data.);

getchar();

printf("请你输入新的部门(原来是%s):",p->data.bm);

scanf("%d",&p->data.bm);

printf("请你输入新的职称(原来是%s):",p->data.zc);

scanf("%d",&p->data.zc);

getchar();

printf("请你输入新的工资(原来是%d):",p->data.gz);

scanf("%d",&p->data.gz);

printf("n=====>提示:资料修改成功!n");

//shoudse=1;

}else

Nofind(); //if(p)结束

} //void Modify(Link l) //修改功能结束

//插入记录:按工号查询到要插入的的位置,然后在该工号之后插入一个新。

void Insert(Link l)

{Node s,r,p; /p指向插入位置,p指新插入记录/

char ch,new_num[10],old_num[10];

//old_num[]保存插入点位置之前的工号,new_num[]保存输入的新记录的工号

int flag=0;

s=l->next;

("cls");

Disp(l);

while(1)

{//stringinput(s,10,"please input insert location after the Number:");

printf("请你输入已存在的工号(以'0'返回上一级菜单:)");

scanf("%s",old_num);

if(strcmp(old_num,"0")==0) //输入'0',跳出while(1),即跳出Insert()函数

return;

s=l->next; //作用? 每次从个开始找

flag=0;

while(s) /查询该工号是否存在,flag=1表示该工号存在/

{if(strcmp(s->data.num,old_num)==0)

{flag=1;

break;

}s=s->next;

}if(flag==1)

break; /若工号存在,则进行插入之前的新记录的输入作/

else

{getchar();

printf("n=====>The number %s is not existing,try again?(y/n):",old_num);

scanf("%c",&ch);

if(ch=='y'||ch=='Y')

{continue;}

else

{return;} //回主菜单

}}//while(1)

/以下新记录的插入新,工号不能跟已存在的工号相同,作与Add()相同/

printf("请你输入待插入的工号(以'0'返回上一级菜单:)");

scanf("%s",new_num);

if(strcmp(new_num,"0")==0) //输入'0',跳出while(1),即跳出add()函数

return;

s=l->next; //作用? 每次从个开始找,看num是否重复。

while(s) //工号重复时,返回主菜单

{if(strcmp(s->data.num,new_num)==0)

{printf("=====>提示:工号为'%s'的职工已经存在'!n",new_num);

flag=1;

return ;

}s=s->next;

} //while(s)

p=(Node )malloc(sizeof(Node));

if(!p)

{printf("n allocate memory failure "); /如没有申请到,打印提示信息/

return ; /返回主界面/

}strcpy(p->data.num,new_num);

printf("请你输入姓名:");

scanf("%s",p->data.name);

getchar();

printf("请你输入性别:");

scanf("%s",p->data.);

getchar();

printf("请你输入部门:");

scanf("%d",&p->data.bm);

getchar();

printf("请你输入职称:");

scanf("%d",&p->data.zc);

getchar();

printf("请你输入工资:");

scanf("%d",&p->data.gz);

getchar();

// 信息输入已经完成

p->next=NULL; /表明这是链表的尾部结点/

seflag=1; /在main()有对该全局变量的判断,若为1,则进行存盘作/

/将指针赋值给r,因为l中的头的下一个才实际保存着学生的记录/

r=l->next;

while(1)

{if(strcmp(r->data.num,old_num)==0) /在链表中插入一个/

{p->next=r->next;

r->next=p;

break;

}r=r->next;

}// while(1) , r作为查询指针,依次从个找起,找到后 跳出 while(1)循环

Disp(l);

printf("nn");

// getchar();

}void Tongji(Link l) //统计

{Node max,min;/用于指向工资的/

Node t=l->next;

if(!t)

{("cls");

printf("n=====>Not employee record!n");

getchar();

return;

}("cls");

Disp(l);

max=min=t;

while(t)

{if(t->data.gz>=max->data.gz) max=t;

if(t->data.gz<=min->data.gz) min=t;

t=t->next;

printf("工资为:%dn",max);

printf("t%st%st%st%st%st%dnn",t->data.num,t->data.name,t->data.,t->data.bm,t->data.zc,t->data.gz);

printf("工资为:%dn",min);

printf("t%st%st%st%st%st%dnn",t->data.num,t->data.name,t->data.,t->data.bm,t->data.zc,t->data.gz);

}}

void Sort(Link l) //排序

{Link ll;

Node p,rr,s;

int i=0;

if(l->next==NULL)

{ ("cls");

printf("n=====>Not employee record!n");

getchar();

return ;

}ll=(Node)malloc(sizeof(Node)); /用于创建新的/

if(!ll)

{printf("n allocate memory failure "); /如没有申请到,打印提示信息/

return ; /返回主界面/

}ll->next=NULL;

("cls");

Disp(l); /显示排序前的所有职工记录/

p=l->next;

while(p) /p!=NULL/

{s=(Node)malloc(sizeof(Node)); /新建用于保存从原链表中取出的信息/

if(!s) /s==NULL/

{printf("n allocate memory failure "); /如没有申请到,打印提示信息/

return ; /返回主界面/

}s->data=p->data; /填数据域/

s->next=NULL; /指针域为空/

rr=ll;

/rr链表于存储插入单个后保持排序的链表,ll是这个链表的头指针,每次从头开始查找插入位置/

while(rr->next!=NULL && rr->next->data.gz>=p->data.gz)

{rr=rr->next;} /指针移至总分比p所指的的总分小的位置/

if(rr->next==NULL)/若新链表ll中的所有的总分值都比p->data.gz大时,就将p所指加入链表尾部/

rr->next=s;

else /否则将该插入至个总分字段比它小的的前面/

{s->next=rr->next;

rr->next=s;

}p=p->next; /原链表中的指针下移一个/

}l->next=ll->next; /ll中存储是的已排序的链表的头指针/

Disp(l);

seflag=1;

printf("n =====>sort complete!n");

}void Se(Link l)

{FILE fp;

Node p; //实现保存作的临时的结构体指针变量

int flag=1,count=0;

fp=fopen("employee.txt","wb");

if(fp==NULL)

{printf("n=====>提示:重新打开文件时发生错误!n");

return;

}p=l->next; //p指向个记录结点

while(p)

{if(fwrite(p,sizeof(Node),1,fp)==1) //将个记录结点值写入文件

{p=p->next; //依次写入第二个结点的值,

count++; //文件的记录数+1

}else

{flag=0;

break;

}} //while(p)

if(count>0)

{printf("n=====>提示:文件保存成功.(有%d条记录已经保存.)n",count);

seflag=0;

}else

{("cls");

printf("保存文件失败,'0'条记录被保存!n");

}fclose(fp);

} // void Se结束

void main()

{Link list; /定义链表/ // struct node list;

FILE fp; / 文件指针 /

int choose; /保存选择结果变量/

char ch; /保存(y,Y,n,N)/

int count=0; /保存文件中的记录条数(或结点个数)/

struct node p,r; /定义记录指针变量/

printf("tttt职工信息管理系统nttttn");

list=(struct node)malloc(sizeof(struct node));

if(!list)

{printf("n allocate memory failure "); /如没有申请到,打印提示信息/

return ; /返回主界面/

}list->next=NULL;

r=list;

fp=fopen("employee.txt","rb");

if(fp==NULL)

{printf("n=====>提示:文件还不存在,是否创建?(y/n)n");

scanf("%c",&ch);

if(ch=='y'||ch=='Y')

fp=fopen("employee .txt","ab+");

else

exit(0);

} // if(fp==NULL)

printf("n=====>提示:文件已经打开,正在导入记录......n");

while(!feof(fp)) //没有到文件尾时,循环

{p=(struct node)malloc(sizeof(struct node));

if(!p)

{printf(" memory malloc failure!n"); /没有申请成功/

exit(0); /退出/

}if(fread(p,sizeof(struct node),1,fp)) / 读文件的已有内容放入结点中 /

{p->next=NULL;

r->next=p;

r=p; / 将该结点挂入链表中, r指向的 /

count++;

}} //while(!feof(fp))

fclose(fp); / 关闭文件 /

printf("n=====>提示:记录导入完毕,共导入%d条记录.n",count);

while(1)

{menu();

printf("tt====>请选择:");

scanf("%d",&choose);

if(choose==0)

{if(seflag==1)

{getchar();

printf("n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?n");

scanf("%c",&ch);

if(ch=='y'||ch=='Y')

Se(list);

} //if

printf("n=====>提示:你已经退出系统,再见!n");

break;

}//if

switch(choose)

{case 1:Add(list);

break; / 增加职工记录 /

case 2:

Del(list);

break;/ 删除职工记录 /

case 3:

Qur(list);

break;/ 查询职工记录 /

case 4:

Modify(list);

break;/ 修改职工记录 /

case 5:

Insert(list);

break;/插入职工记录/

case 6:

Tongji(list);

break;/统计职工记录/

case 7:

Sort(list);

break;/排序职工记录/

case 8:

Se(list);

break;/ 保存职工记录 /

case 9:

("cls");

Disp(list);

break; /显示职工记录/

default:

Wrong();

getchar();

break;

} //switch(choose)

}//while(1)

} //main()

我认为中心应该是:

(在市场经济的大环境下,越来越多的人士逐渐认识到用计算机技术进行各类管理,交流的便捷,其中最突出的要算企事业单位的人事工资管理了,为了提高人事工资管理效率,减轻劳动强度,提高信息处理速度和准确性,在对其组成结构和系统功能进行了全面地分析,提出了人事工资管理系统的实现和解决方案,该方案利用计算机支持高效率地完事工资管理的日常事务,是适应现代企事业单位制度要求、推动企事业单位人事工资管理走向科学化、规范化的必要条件。)

设计的思路:

应该以Visual Basic6.0为开发语言和ACCESS2000为数据库以及其他第三方控件等软件作为设计工具,以工资为对象,开发的一个能够满足企事业单位的工资管理的要求的“人事工资管理系统”。

要求本系统具有完成单位人员工资管理的全过程,包括用户管理,员工管理,维护不同职务,职称,其他工资的工资标准以及浏览与结算和查询等。

:工资管理系统; VB; ACCESS

用C语言课程设计—职工工资管理系统(分别用结构体数组和链表编写程序)

class Fuck()

{private:

string shop;

int num;

string name;

float base_salary;

float t_salary;

float bonus;

float deal_salary;

float fund;

float tax;

float fact_salary;

void fact_salary(float mbase,float mt,float mbonus,float mdeal,float mfund,float mtax);

public:

void input(string mname,string mshop,int mnum,string mname,float mbase,float mt,float mbonus,float mdeal,float mfund,float mtax);

void renew(float mbase,float mt,float mbonus,float mdeal,float mfund,float mtax);

void sort(Fuck & sth);

void show();

}

可以借助百度Hi示意我们

有机会可以解决你的问题

不多的要求也可以示意我们

ES:4585565364520EFB271548EFDCF4815A

比较麻烦

/add.c:添加员工工资信息记录/

#include "stdio.h"

void AddRecord()

{FILE fp = NULL; /定义指向文件的指针/

yuangong TmpS; /定义进行作时的临时结构体变量/

char DataFile[40] = ""; /存储员工工资信息的文件名/

int count = 1; /计算可输入数据的范围/

/====输入要添加员工工资信息的文件名====/

printf("n please input the file name which you will add recored to.");

printf("n Not:Name of file can't exceed 8 characters.suffix can't exceed 3 characters,part of exceed will be discarded.n");

gets(DataFile);

/如用户没有输入,则循环提示用户输入/

while(DataFile == ('0'))

{printf("n please input new file name to store data,end with enter.");

printf("n Not:Name of file can't exceed 8 characters,suffix can't exceed 3 characters.part of exceed will be discarded.n");

gets(DataFile);

}fp = fopen(DataFile,"a+");/a+:当文件存在时,追加,当文件不存在时,创建/

/如果当前文件不存在,提示打开文件失败/

if (fp == NULL)

{printf("n Open file %s fail!End with any key.n",DataFile);

perror("Open file fail");

getch();

exit(1);

}/如果成功打开或创建文件,则提示输入员工序号、姓名、工资构成等相关信息/

printf("input number,name and salary.number is 0 means input is end.n");

printf("Number is not exceed 9 figures,Name is not exceed 20 characters,range of grade:0.00~1000.00n");

/循环从键盘上读取用户输入的序号、姓名、工资构成等相关信息/

while(count <= SIZE)

{/输入序号,如为0则停止输入/

printf("n input 'number =0' means end input.n");

printf("number=");

scanf("%ld",&TmpS.Number);

if (TmpS.Number == 0 )

break;

/提示输入员工姓名/

printf("name=");

scanf("%s",TmpS.Name);

/提示输入员工工资/

printf("gongzi=");

scanf("%f",&TmpS.gongzi);

/提示输入员工奖金/

printf("jiangjin=");

scanf("%f",&TmpS.jiangjin);

/提示输入员工保险/

printf("baoxian=");

scanf("%f",&TmpS.baoxian);

/提示输入员工税金/

printf("shuijin=");

scanf("%f",&TmpS.shuijin);

/用公式自动计算员工实发工资即合计/

TmpS.heji=TmpS.gongzi+TmpS.jiangjin-TmpS.baoxian-TmpS.shuijin;

printf("n");

/如遇无法写入文件的异常,则加以提示/

if(fwrite(&TmpS,sizeof(yuangong),1,fp)!=1)

{printf("nwrite file %s fail!End with any keyn",DataFile);

perror("Write file fail ");

getch();

exit(1);

}count++;

}/如果输入的数据量超过允许的范围,则提示数据不能录入/

if (count>SIZE)

printf("nsorry,number of data can not exceed%dn",SIZE);

fclose(fp);

/====在屏幕上显示文件内容====/

/ clrscr();/

printf("The data you input is store successful %s in file.n",DataFile);

printf("Content as follow:n");

fp=fopen(DataFile,"rb");

if (fp == NULL)

{printf("nOpen file%sfail!End with any key n",DataFile);

perror("Open file fail");

getch();

exit(1);

}printf("nNumberttNametgongzitjiangjintbaoxiantshuijinthejin");

while(fread(&TmpS,sizeof(yuangong),1,fp) != (int)NULL)

{printf("n%ldt%st%5.2ft%5.2ft%5.2ft%5.2ft%5.2fn",TmpS.Number,TmpS.Name,TmpS.gongzi,TmpS.jiangjin,TmpS.baoxian,TmpS.shuijin,TmpS.heji);

}fclose(fp);

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息