工资管理系统C语言

Python012

工资管理系统C语言,第1张

代码还没有完善好,实在没时间了,最近太忙。先给你吧

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int addmenu()

int menu()

typedef struct teacher{

char name[32]

char unit[32]

float salary

float allowance

float tax

float total

struct teacher *next

}TEACHER//节点的结构体,包含数据和指针.

TEACHER *head//头节点

void init() //初始化头节点

{

head=(TEACHER *)malloc(sizeof(TEACHER))

head->next=NULL

}

void add(TEACHER *nod) //添加节点

{

if(head->next==NULL){

head=nod

}

else

{

nod->next=head->next

head->next=nod

}

}

TEACHER *search(char *s) //遍历整个链表并打印数据

{

TEACHER *nod=head

while(nod->next !=NULL)//!循环到最后一个节点,有问题。。

{

if((!strcmp(nod->name,s)) || (!strcmp(nod->unit,s))){

printf("姓名:%s\n单位:%s\n基本工资:%f\n津贴:%f\n扣税:%f\n总工资:%f\n",nod->name,nod->unit,nod->salary,nod->allowance,nod->tax,nod->tax)

return nod

}

nod++

}

printf("未找到数据\n")

return NULL

}

void modify(TEACHER *s)

{

char name[16],unit[16]

float salary,allowance,tax,total

gets(name)

strcpy(s->name,name)

gets(unit)

strcpy(s->unit,unit)

scanf("%f",&salary)

s->salary=salary

scanf("%f",&allowance)

s->allowance=allowance

scanf("%f",&tax)

s->tax=tax

scanf("%f",&total)

s->total=total

}

void del(char *s)

{

TEACHER *nod=head

while(nod->next !=NULL)

{

if((!strcmp(nod->next->name,s))||(!strcmp(nod->next->unit,s))){

nod->next=nod->next->next

nod->next=NULL

}

}

}

int addmenu()//添加教师信息子菜单

{

TEACHER *node

char command

float salary,allowance,tax,total

system("cls")

printf("****************************\n")

printf("*添加子菜单*\n")

printf("****************************\n")

printf("说明:4.返回主菜单 5.添加\n")

printf("请选择需要使用的功能:")

fflush(stdin)

while((command=getchar())!='4')

{

if(command==4)

break

printf("添加信息:\n")

node=(TEACHER *)malloc(sizeof(TEACHER))

fflush(stdin)

printf("姓名:")

fflush(stdin)

gets(node->name)

printf("单位:")

fflush(stdin)

gets(node->unit)

printf("基本工资:")

fflush(stdin)

scanf("%f",&salary)

node->salary=salary

printf("津贴:")

scanf("%f",&allowance)

node->allowance=allowance

fflush(stdin)

printf("扣税:")

scanf("%f",&tax)

node->tax=tax

fflush(stdin)

printf("总工资:")

scanf("%f",&total)

node->total=total

fflush(stdin)

add(node)

fflush(stdin)

printf("输入c退出,其他字符继续\n")

if((command=getchar())=='c')

break

}

return 0

}

int save()

{

TEACHER *nod=head

FILE *fp

if((fp=fopen("teacher.txt","w+")) == NULL)

{

printf("打开文件异常\n")

return 0

}

while(nod->next != NULL)

{

if(fwrite(nod,sizeof(TEACHER),1,fp)!=1){

printf("写入异常\n")

return 0

}

nod++

}

fclose(fp)

return 1

}

int searchmenu()

{

char name[16]

char command

system("cls")

printf("****************************\n")

printf("* 查询和修改子菜单*\n")

printf("****************************\n")

printf("说明:4.返回主菜单 5.通过姓名/查找 6.修改 \n")

fflush(stdin)

printf("请输出需要实现的操作:")

while((command=getchar()) !='4')

{

switch(command)

{

case '4': break

case '5':

printf("请输入需要查找的姓名:")

fflush(stdin)

gets(name)

search(name)

break

// case '6': modify()break

}

printf("请输出需要实现的操作:")

}

return 0

}

int menu()

{

char command

int i,j=10

system("cls")

printf("****************************\n")

printf("* 工资管理系统 *\n")

printf("****************************\n")

printf("----------------------------\n")

printf("说明:1.添加 2.查询/修改 3.保存 4.退出\n")

printf("----------------------------\n")

printf("请输出需要实现的操作:")

while((command=getchar())!='4'){

switch(command)

{

case '1': addmenu()break

case '2': searchmenu()break

case '3': i=save()if(i)printf("保存成功!\n")while(j--)break

}

fflush(stdin)

/*子函数退出后再次显示主界面*/

system("cls")

printf("****************************\n")

printf("* 工资管理系统 *\n")

printf("****************************\n")

printf("----------------------------\n")

printf("说明:1.添加 2.查询/修改 3.保存 4.退出\n")

printf("----------------------------\n")

printf("请输出需要实现的操作:")

}

printf("******感谢您使用本系统******\n")

return 0

}

int main()

{

init()

menu()

return 0

}

程序名称:工资管理系统

程序说明:

该系统在磁盘上储存了某单位上月全体员工的工资信息,对于每一位职工存储以下信息:

月份,职工编号,基本工资,津贴,岗贴,补贴,房贴,交通补贴,应发数,房租,储蓄,

会费,个人所得税,应扣数,实发数。

工资管理系统详细代码参考一下http://wenku.baidu.com/view/c9af1211cc7931b765ce15d3.html

#include<stdio.h>

#define NUM 100

void input()

void search()

void search_num()

void dele()

void dele_name()

void dele_num()

void modi()

void modi_num()

void output()

void stat()

void fun()

void run()

struct emploee /*职工数据结构*/

{

char no[5]

char name[8]

char sex[3]

int age

int salar

}emp[NUM],newemp

main()

{int x

printf("1. 输入职工记录\n")

printf("2. 查询职工记录\n")

printf("3. 修改职工记录\n")

printf("4. 删除职工记录\n")

printf("5. 打印职工记录\n")

printf("6. 调查工资情况\n")

printf("7. 追加职工记录\n")

printf("8. 结束使用\n")

printf("0. 退出系统\n")

printf("\n")

printf("*** 欢迎使用职工工资管理系统 ***\n")

printf("请选择(0-8):\n")

scanf("%d",&x)

switch(x)

{

case 1: input()break

case 2: search()break

case 3: modi()break

case 4: dele()break

case 5: output()break

case 6: stat()break

case 7: run()break

case 8: fun()break

default:printf("\n Wrong!")

}

if(x==0)break

}

}

void input()

{

FILE *fp

int n,i

if ((fp=fopen("emp","wb"))==NULL)

{

printf("不能建立emp文件\n")

exit(1)

}

printf("输入职工人数:")

scanf("%d",&n)

printf("输入格式:职工号 姓名 性别 年龄 工资<Enter>\n")

for(i=0i<ni++) /* 循环获取n个职工记录 */

{

printf("第%d个职工:",i+1)

scanf("%s%s%s%d%d",emp[i].no,emp[i].name,emp[i].sex,

&emp[i].age,&emp[i].salar)

}

for(i=0i<ni++) /*将n个职工记录写入文件*/

fwrite(&emp[i],sizeof(struct emploee),1,fp)

fclose(fp)

}

/*************************统计模块**********************/

void stat( )

{

FILE *fp

int n,num

if((fp=fopen("emp","rb"))==NULL)

{

printf("不能打开emp文件\n")

exit(1)

}

printf("工资数:")

scanf("%d",&num)

printf("记录号 职工号 姓名 性别 年龄 工资\n")

for(n=0fread(&emp,sizeof(struct emploee),1,fp)n++)

if(emp[n].salar>=num)

printf("%6d%6s%9s%4s%5d%6d\n",n+1,emp[n].no,emp[n].name,emp[n].sex,

emp[n].age,emp[n].salar)

fclose(fp)

}

/********************删除模块*******************/

void dele()

{

int x

while(1)

{

printf("\n\n\t\t删除子菜单\n")

printf("\t\t*********\n")

printf("\t\t 1.按职工号删除记录\n")

printf("\t\t 0.返回主菜单\n")

printf("\t\t*********\n")

printf("\t 请选择(0-1):")

scanf("%d",&x)

switch(x)

{case 1:dele_num()break

default:printf("\nWrong!")

}

if(x==0)break

}

}

void dele_num()

{

FILE *fp

int i,j,n

char num[5]

if((fp=fopen("emp","rb"))==NULL)

{

printf("不能打开emp文件\n")

exit(1)

}

printf("删除前:\n")

printf("记录号 职工号姓名 性别 年龄 工资\n")

for(n=0fread(&emp[n],sizeof(struct emploee),1,fp)n++)

printf("%6s%6s%9s%4s%5d%6d\n",n+1,emp[n].no,emp[n].name,emp[n].sex,

emp[n].age,emp[n].salar)/*n为emp文件中记录数*/

printf("要删除的职工号:")

scanf("%s",num)

for(i=0(strcmp(emp[i].no,num)!=0&&i<n)i++)

if(i>=n)

{

printf("\t没有%s职工号的职工\n",num)

exit(2)

}

fclose(fp)

fp=fopen("emp","w+")

if(n==1) /*一个记录已经删除了*/

{

fclose(fp)

exit(3)

}

for(j=0j<ij++)

fwrite(&emp[j],sizeof(struct emploee),1,fp)

for(j=i+1j<nj++)

fwrite(&emp[j],sizeof(struct emploee),1,fp)

printf("删除后:\n")

fseek(fp,0,SEEK_SET)

printf("记录号 职工号 姓名 性别 年龄 工资\n")

for(i=0fread(&emp[i],sizeof(struct emploee),1,fp)i++)

printf("%6s%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,

emp[i].age,emp[i].salar)

fclose(fp)

}

/********************修改模块*******************/

void modi()

{

int x

while(1)

{

printf("\n\n\t\t修改子菜单\n")

printf("\t\t*********************\n")

printf("\t\t1. 按职工号修改\n")

printf("\t\t0. 返回主菜单\n")

printf("\t\t*********************\n")

printf("\t请选择(0-1):")

scanf("%d",&x)

switch(x)

{

case 1:modi_num()break

default:printf("\n输错误!")

}

if(x==0)break

}

}

void modi_num()

{

FILE *fp

int i,j

char num[5]

if((fp=fopen("emp","rb+"))==NULL)

{

printf("不能 打开emp文件\n")

exit(1)

}

printf("要修改的职工号:")

scanf("%s",num)

for(i=0fread(&emp[i],sizeof(struct emploee),1,fp)i++)

if(!strcmp(emp[i].no,num))break

if(feof(fp))

{

printf("\t没有%s职工号的职工\n",num)

exit(2)

}

printf("记录号 职工号 姓名 性别 年龄 工资\n")

printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,

emp[i].age,emp[i].salar)

printf("输入格式:职工号 姓名 性别 年龄 工资<Enter>\n")

printf("第%d个记录:",i+1)

scanf("%s%s%s%d%d",newemp.no,newemp.name,newemp.sex,&newemp.age,

&newemp.salar)/*获取新的职工记录*/

fseek(fp,-(long)sizeof(struct emploee),SEEK_CUR)

/*文件指针指向该修改的记录开头*/

fwrite(&newemp,sizeof(struct emploee),1,fp)/*用newemp覆盖当前记录*/

printf(" 修改后:\n")

fseek(fp,0,SEEK_SET)/*显示修改后的文件数据*/

printf("记录号 职工号 姓名 性别 年龄 工资\n")

for(i=0fread(&emp[i],sizeof(struct emploee),1,fp)!=0i++)

printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,

emp[i].age,emp[i].salar)

fclose(fp)

}

/*************************查询模块***********************/

void search( )

{

int x

while(1)

{

printf("\n\n\t\t查子菜单\n")

printf("\t\t********************\n")

printf("\t\t 1.按职工号查询\n")

printf("\t\t 0.返回主菜单\n")

printf("\t\t********************\n")

printf("\t请选择(0-1):")

scanf("%d",&x)

switch(x)

{

case 1:search_num()break

default :printf("\n Wrong!")

}

if(x==0) break

}

}

void search_num()

{

FILE *fp

int i

char num

if((fp=fopen("emp","rb"))==NULL)

{

printf("不能打开emp文件\n")

exit(1)

}

printf("要查询的职工号:")

scanf("%s",num)

for(i=0fread(&emp[i],sizeof(struct emploee),1,fp)i++)

if(!strcmp(emp[i].no,num)) break

if(feof(fp))

{

printf("\t查无此人\n")

exit(2)

}

printf("记录号 职工号 姓名 性别 年龄 工资\n")

printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,

emp[i].age,emp[i].salar)

fclose(fp)

}

/*******************输出模块********************/

void output()

{int i

FILE *fp

if((fp=fopen("emp","r"))==NULL)

{printf("不能打开emp文件\n")

exit(0)

}

printf("记录号 职工号 姓名 性别 年龄 工资\n")

for(i=0fread(&emp[i],sizeof(struct emploee),1,fp)!=0i++)

{

printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,

emp[i].age,emp[i].salar)

}

fclose(fp)

}

/******************追加模块*******************/

void run()

{

FILE *fp

int n,i,j

if((fp=fopen("emp","ab+"))==NULL)

{printf("不能打开emp文件\n")

exit(0)

}

printf("要追加的职工人数:")

scanf("%d",&n)

for(i=0i<ni++)

{ printf("输入格式:职工号 姓名 性别 年龄 工资<enter>\n")

printf("职工记录:")

scanf("%s%s%s%d%d",newemp.no,newemp.name,newemp.sex,&newemp.age,

&newemp.salar)

/*获取一个职工记录*/

fwrite(&newemp,sizeof(struct emploee),1,fp)

/*将该职工记录写入文件*/

}

fclose(fp)

}

/*******************显示模块****************/

void fun()

{printf("\t\t******************************************\n")

printf("\t\t* *\n")

printf("\t\t* *\n")

printf("\t\t* 谢 谢 使 用 ! *\n")

printf("\t\t* *\n")

printf("\t\t* *\n")

printf("\t\t******************************************\n")

}