#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")
}