#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
}
#include<iostream.h>#include<stdlib.h>
#include<string.h>
#include<iomanip.h>
using namespace std
#define OK 1
#define ERROR 0
typedef struct LNode{
char num[20]
char name[20]
double basic
double reward
double total
struct LNode *next
}LNode,*LinkListint initlist(LinkList &L)
{ L=(LinkList)malloc(sizeof(LNode))
L->next=NULL
return OK
} int DisplayInfo(LinkList L)
{
LinkList p=L->next
if(!p)
{
cout<<"当前无记录!"<<endl
return ERROR
}
cout<<"编号"<<setw(12)<<"姓名"<<setw(12)<<"基本工资"<<setw(9)<<"奖金"<<setw(12)<<"工资总额"<<endlwhile(p!=NULL)
{
cout<<p->num<<setw(9)<<p->name<<setw(8)<<p->basic<<setw(12)<<p->reward<<setw(12)<<p->total<<endl
p=p->next
}
cout<<'\n'<<'\n'
return OK
} int InputInfo(LinkList &L)
{
LinkList pp=(LinkList)malloc(sizeof(LNode))
cout<<"请输入职工工资信息:(格式如:2001001 james 1980 600 )"<<endl
cin>>p->num
cin>>p->name
cin>>p->basic
cin>>p->reward
p->total=p->basic+p->reward
p->next=L->next
L->next=preturn OK
}int DeleteByCode(LinkList &L,char key[])
{
LinkList p=L,q
while(p->next!=NULL)
{
if(strcmp(p->next->num,key)==0)
{
q=p->next
p->next=q->next
free(q)
return OK
}
p=p->next
}
return ERROR} int Search(LinkList L,int tag)
{
LinkList p=L->next
if(tag==1)
{
char num[20]
cout<<"请输入要查找职工编号号:"<<endl
cin>>num
while(p)
{
if(strcmp(p->num,num)==0)
{
cout<<"编号"<<setw(12)<<"姓名"<<setw(12)<<"基本工资"<<setw(9)<<"奖金"<<setw(12)<<"工资总额"<<endl
cout<<p->num<<setw(9)<<p->name<<setw(8)<<p->basic<<setw(12)<<p->reward<<setw(12)<<p->total<<endl
cout<<'\n'
return OK
}
p=p->next
}
}
else if(tag==2)
{
char name[20]
cout<<"请输入要查找的姓名:"<<endl
cin>>name
while(p)
{
if(strcmp(p->name,name)==0)
{
cout<<"编号"<<setw(12)<<"姓名"<<setw(12)<<"基本工资"<<setw(9)<<"奖金"<<setw(12)<<"工资总额"<<endl
cout<<p->num<<setw(9)<<p->name<<setw(8)<<p->basic<<setw(12)<<p->reward<<setw(12)<<p->total<<endl
cout<<'\n'
return OK
}
p=p->next
}
}
else
cout<<"输入错误!"<<endl
return ERROR}
int Sort(LinkList &L)
{
LinkList p
LinkList q,min,w=L
for(p=L->nextp->nextp=p->next)
{
min=p
for(q=p->nextqq=q->next)if(min->total>q->total)
min=q if(min!=p)
{strcpy(w->num,p->num)
strcpy(w->name,p->name)
w->basic=p->basic
w->reward=p->reward
w->total=p->total
strcpy(p->num,min->num)
strcpy(p->name,min->name)
p->basic=min->basic
p->reward=min->reward
p->total=min->total
strcpy(min->num,w->num)
strcpy(min->name,w->name)
min->basic=w->basic
min->reward=w->reward
min->total=w->total }
}
return OK
}
int change(LinkList &L)
{
LinkList p=L->next
char q[20]
cout<<"请输入要修改的职工编号号:"<<endl
cin>>q
while(p)
{
if(strcmp(p->num,q)==0)
{
cout<<"编号"<<setw(12)<<"姓名"<<setw(12)<<"基本工资"<<setw(9)<<"奖金"<<setw(12)<<"工资总额"<<endl
cout<<p->num<<setw(9)<<p->name<<setw(8)<<p->basic<<setw(12)<<p->reward<<setw(12)<<p->total<<endl
cout<<"请重新输入该职工的工资信息:"<<endl
cin>>p->basic
cin>>p->reward
cout<<'\n'
return OK
}
p=p->next
}
}
int Menu(LinkList &S)
{
int sign=1
while(sign)
{
int i
cout<<"请选择要进行的操作:1:插入 2:删除 3:输出 4:查找 5:排序 6:修改 0:退出"<<endl
cin>>i
if(i==1)
{ if(InputInfo(S))
cout<<"操作成功!"<<endl
cout<<'\n'
}
else if(i==2)
{
char num[20]
cout<<"请输入要删除的职工编号:"<<endl
cin>>num if(DeleteByCode(S,num))
cout<<"操作成功!"<<endl else
{
cout<<"此编号不存在!"<<endl
cout<<'\n'
}
}
else if(i==3)
DisplayInfo(S)
else if(i==4)
{
int tag
cout<<"1:按编号查找 2:按姓名查找 "<<endl
cin>>tag
if(!Search(S,tag))
cout<<"未找到!"<<endl
cout<<'\n' }
else if(i==5)
{
if(Sort(S))
cout<<"操作成功!"<<endl
cout<<'\n'
}
else if(i==6)
{
if(change(S))
cout<<"修改成功!"<<endl
} else if(i==0)
sign=0
else
cout<<"输入有误,请重新输入!"<<endl
cout<<'\n'
}
return OK
}
int main()
{
LinkList S
initlist(S)
Menu(S)
return OK} 已经调试无bug 有问题的话联系我。
程序名称:工资管理系统程序说明:
该系统在磁盘上储存了某单位上月全体员工的工资信息,对于每一位职工存储以下信息:
月份,职工编号,基本工资,津贴,岗贴,补贴,房贴,交通补贴,应发数,房租,储蓄,
会费,个人所得税,应扣数,实发数。
工资管理系统详细代码参考一下http://wenku.baidu.com/view/c9af1211cc7931b765ce15d3.html