教师工资管理系统程序代码.docx
《教师工资管理系统程序代码.docx》由会员分享,可在线阅读,更多相关《教师工资管理系统程序代码.docx(11页珍藏版)》请在冰豆网上搜索。
教师工资管理系统程序代码
1.实发工资=应发工资-扣款-税费。
根据应发工资,1000元以
内的不扣税,1000-2000扣税超出1000元部分的5%,2000-3000元再扣
超出2000元部分的10%,超过3000元的都扣除超出3000元部分的15%。
确定信息的数据结构:
structSalary_type
{charname[20];
charnum[10];
floatjbgz;
floatyfgz;
floatkoukuan;
floatshuifei;
floatsfgz;
structsalary*prior;
structsalary*next;
}Salary[N];
2.程序应具有以下基本功能:
添加:
添加一个或几个的记录,并可选择继续输入或退出。
查询:
可按姓名或工号查找记录,若找到,则显示其记录,否
则提示未找到,无论查找成功与否,应还可选择继续查找或退
出。
删除:
删除记录。
先查找需要删除的记录,如找到,则删除该
记录,可添加提示,选择确认后删除,否则可以取消该操作;
如果查找失败,则返回没有此记录。
修改:
修改记录。
输入姓名并查找,若找到,显示该姓名的所
有信息,并可进行修改;否则提示无此信息。
设计要求:
1.核心数据结构用到的结构体要采用动态内存分配和链表结构。
家庭住址也要求存储在动态分配的内存中,以节约内存。
内存的起始地
址存储在结构体的成员指针addr中。
2.使用文件进行存储和管理。
程序启动时可从文件中读取通信信息,
或从键盘输入通信信息;运行过程中如添加或删除记录时也可对文件进
行存取;退出前可选择将通信信息保存到文件中。
3.不同的功能使用不同的函数实现(模块化),对每个函数的功能和
调用接口要注释清楚。
对程序其它部分也进行必要的注释。
2011-4-222:
57最佳答案#include
#include
#include
typedefstructSalary_type
{
charname[20];
charnum[10];
//floatjbgz;
floatyfgz;//应发工资
floatkoukuan;//扣款
floatshuifei;//税费
floatsfgz;//实发工资
structSalary_type*prior;
structSalary_type*next;
}salary,*Salary;
floattaxpay(floatsalary)
{
floattaxpayment;
if(salary<=1000)
taxpayment=0;
else
if(salary<=2000)
taxpayment=(float)((salary-1000)*0.05);
else
if(salary<=3000)
taxpayment=(float)((salary-2000)*0.10+1000*0.05);
else
taxpayment=(float)((salary-3000)*0.15);
returntaxpayment;
}
Salaryinitlist()
{
SalaryS;
S=(Salary)malloc(sizeof(salary));
S->prior=NULL;
S->next=NULL;
returnS;
}
Salaryinsertlist(SalaryS)//添加:
添加一个或几个的记录,并可选择继续输入或退出。
{
Salaryp;
Salaryt;
charch;
p=(Salary)malloc(sizeof(salary));
printf("请输入一个字符,若输入c则继续输入记录,若输入e则退出输入");
scanf("%c",&ch);
fflush(stdin);
while(ch=='c'||ch=='C')
{
printf("请输入姓名:
\n");
scanf("%s",p->name);
fflush(stdin);
printf("请输入工号:
\n");
scanf("%s",p->num);
printf("请输入应发工资:
\n");
scanf("%f",&p->yfgz);
printf("请输入扣款:
\n");
scanf("%f",&p->koukuan);
fflush(stdin);
p->shuifei=taxpay(p->yfgz);
p->sfgz=p->yfgz-p->koukuan-p->shuifei;
for(t=S;t->next!
=NULL;t=t->next);
p->prior=t;
p->next=NULL;
t->next=p;
p=(Salary)malloc(sizeof(salary));
printf("请输入一个字符,若输入c则继续输入记录,若输入e则退出输入");
scanf("%c",&ch);
fflush(stdin);
}
returnS;
}
voidsearchlist(SalaryS)
//查询:
可按姓名或工号查找记录,若找到,则显示其记录,否则提示未找到,无论查找成功与否,应还可选择继续查找或退出。
{
Salaryp;
charch,*num;
num=(char*)malloc(sizeof(char)*10);
printf("请输入一个字符,若输入c则继续输入记录,若输入e则退出输入");
scanf("%c",&ch);
fflush(stdin);
while(ch=='c'||ch=='C')
{
printf("请输入要查找的工号:
\n");
scanf("%s",num);
fflush(stdin);
for(p=S->next;p!
=NULL;p=p->next)
{
if(strcmp(p->num,num)==0)
{
printf("姓名为:
\t%s\n",p->name);
printf("工号为:
\t%s\n",p->num);
printf("应发工资为:
\t%.2f\n",p->yfgz);
printf("扣款为:
\t%.2f\n",p->koukuan);
printf("税费为:
\t%.2f\n",p->shuifei);
printf("实际工资为:
\t%.2f\n",p->sfgz);
break;
}
}
printf("请输入一个字符,若输入c则继续输入记录,若输入e则退出输入");
scanf("%c",&ch);
fflush(stdin);
}
}
Salarydeletelist(SalaryS)
//删除:
删除记录。
先查找需要删除的记录,如找到,则删除该记录,可添加提示,选择确认后删除,否则可以取消该操作;如果查找失败,则返回没有此记录。
{
char*num;
charch;
Salaryp,pf;
num=(char*)malloc(sizeof(char)*10);
printf("请输入要查找的工号:
\n");
scanf("%s",num);
fflush(stdin);
for(p=S->next;p!
=NULL&&strcmp(p->num,num)!
=0;pf=p,p=p->next);
if(p==NULL)
printf("无该记录\n");
else
if(p!
=S->next)
{
printf("是否确认删除:
Y确认删除、N不删除\n");
ch=getchar();
fflush(stdin);
if(ch=='Y'||ch=='y')
{
pf->next=p->next;
p->next->prior=p->prior;
}
}
else
{
S->next=p->next;
p->next->prior=S->next;
}
returnS;
}
Salarymodifylist(SalaryS)
//修改:
修改记录。
输入姓名并查找,若找到,显示该姓名的所有信息,并可进行修改;否则提示无此信息。
{
charname[20];
Salaryp;
printf("请输入要修改记录的姓名:
\n");
scanf("%s",name);
fflush(stdin);
for(p=S->next;p!
=NULL&&strcmp(p->name,name)!
=0;p=p->next);
if(p==NULL)
printf("无此信息\n");
else
{
printf("姓名为:
\t%s\n",p->name);
printf("工号为:
\t%s\n",p->num);
printf("应发工资为:
\t%.2f\n",p->yfgz);
printf("扣款为:
\t%.2f\n",p->koukuan);
printf("税费为:
\t%.2f\n",p->shuifei);
printf("实际工资为:
\t%.2f\n",p->sfgz);
printf("请对每一项进行修改:
\n");
printf("姓名:
");
scanf("%s",p->name);
fflush(stdin);
printf("\n");
printf("工号:
");
scanf("%s",p->num);
printf("\n");
printf("应发工资:
");
scanf("%f",&p->yfgz);
printf("\n");
printf("扣款:
");
scanf("%f",&p->koukuan);
fflush(stdin);
printf("\n");
p->shuifei=taxpay(p->yfgz);
p->sfgz=p->yfgz-p->koukuan-p->shuifei;
}
returnS;
}
voidoutput(SalaryS)
{
Salaryp;
for(p=S->next;p!
=NULL;p=p->next)
{
printf("姓名为:
\t%s\n",p->name);
printf("工号为:
\t%s\n",p->num);
printf("应发工资为:
\t%.2f\n",p->yfgz);
printf("扣款为:
\t%.2f\n",p->koukuan);
printf("税费为:
\t%.2f\n",p->shuifei);
printf("实际工资为:
\t%.2f\n",p->sfgz);
}
}
voidfunctionselect(SalaryS)
{
charch;
loop:
printf("I表示插入记录、S表示查找记录、D表示删除记录、M表示修改记录、E表示退出,P表示输出记录\n");
printf("请输入一个字符:
\n");
scanf("%c",&ch);
fflush(stdin);
switch(ch)
{
case'I':
S=insertlist(S);gotoloop;
case'S':
searchlist(S);gotoloop;
case'D':
S=deletelist(S);gotoloop;
case'M':
S=modifylist(S);gotoloop;
case'P':
output(S);gotoloop;
case'E':
break;
}
}
voidmain()
{
SalaryS;
S=initlist();
functionselect(S);
}追问谢谢你啊。
你能帮我把gotoloop语句,改写成用while循环吗?
谢谢你啊,十分感谢啊回答voidfunctionselect(SalaryS)
{
charch;
while
(1)
{
printf("I表示插入记录、S表示查找记录、D表示删除记录、M表示修改记录、E表示退出,P表示输出记录\n");
printf("请输入一个字符:
\n");
scanf("%c",&ch);
fflush(stdin);
switch(ch)
{
case'I':
S=insertlist(S);break;
case'S':
searchlist(S);break;
case'D':
S=deletelist(S);break;
case'M':
S=modifylist(S);break;
case'P':
output(S);break;
case'E':
break;
}
if(ch=='E')
break;
}
}赞同
1|评论