教师工资管理系统程序代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
1实发工资=应发工资—扣款—税费。
根据应发工资, 内的不扣税, 1000-2000 扣税超出 1000 元部分的 5%,
超出 2000 元部分的 10% ,超过 3000 元的都扣除超出 确定信息的数据结构:
struct Salary_type
{ char name[20];
char num[10];
float jbgz;
float yfgz;
float koukuan;
float shuifei;
float sfgz;
struct salary *prior;
struct salary *next;
} Salary [N];
2.程序应具有以下基本功能: 添加:添加一个或几个的记录,并可选择继续输入或退出。
查询:可按姓名或工号查找记录,若找到,则显示其记录,否 则提示未找
到,无论查找成功与否,应还可选择继续查找或退 出。
删除:删除记录。
先查找需要删除的记录,如找到,则删除该 记录,可添加提
示,选择确认后删除,否则可以取消该操作; 如果查找失败,则返回没有此记录。
修改:修改记录。
输入姓名并查找,若找到,显示该姓名的所 有信息,并可进行
修改;否则提示无此信息。
设计要求:
1.核心数据结构用到的结构体要采用动态内存分配和链表结构。
家庭住址也要求存储在动态分配的内存中, 以节约内存。
内存的起始地 址存储在结构体的成员指针 addr 中。
2.使用文件进行存储和管理。
程序启动时可从文件中读取通信信息,
或从键盘输入通信信息; 运行过程中如添加或删除记录时也可对文件进 行存取;退出前可选择将通信信息保存到文件中。
3.不同的功能使用不同的函数实现(模块化) ,对每个函数的功能和 调用接口要注释清楚。
对程序其它部分也进行必要的注释。
2011-4-2 22:57 最佳答案 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Salary_type
1000 元以
2000-3000 元再扣 3000 元部分的 15%。
char name[20];
char num[10];
// float jbgz;
float yfgz;// 应发工资float koukuan;// 扣款float shuifei;// 税费float sfgz;// 实发工资struct Salary_type *prior; struct Salary_type *next;
} salary,*Salary;
float taxpay(float salary)
{
float taxpayment; 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);
return taxpayment;
}
Salary initlist()
{
Salary S;
S=(Salary)malloc(sizeof(salary));
S->prior=NULL;
S->next=NULL;
return S;
}
Salary insertlist(Salary S)// 添加:添加一个或几个的记录,并可选择继续输入或退出。
{
Salary p;
Salary t;
char ch; 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);
}
return S;
}
void searchlist(Salary S)
//查询:可按姓名或工号查找记录,若找到,则显示其记录,否则提示未找到,无论查找成功与否,应还可选择继续查找或退出。
{
Salary p;
char ch,*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);
}
}
Salary deletelist(Salary S)
//删除:删除记录。
先查找需要删除的记录,如找到,则删除该记录,可添加提示,选择确认后删除,否则可以取消该操作;如果查找失败,则返回没有此记录。
{
char *num;
char ch;
Salary p,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;
}
return S;
}
Salary modifylist(Salary S)
//修改:修改记录。
输入姓名并查找,若找到,显示该姓名的所有信息,并可进行修改;否则提示无此信息。
{
char name[20];
Salary p;
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;
} return S;
}
void output(Salary S)
{
Salary p;
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);
}
}
void functionselect(Salary S)
{
char ch;
loop: printf("I 表示插入记录、S 表示查找记录、 D 表示删除记录、M 表示修改记录、 E 表示退出,P表示输出记录\n");
printf(" 请输入一个字符:\n");
scanf("%c",&ch);
fflush(stdin);
switch(ch)
{
case 'I':S=insertlist(S);goto loop;
case 'S':searchlist(S);goto loop;
case 'D':S=deletelist(S);goto loop;
case 'M':S=modifylist(S);goto loop;
case 'P':output(S);goto loop;
case 'E':break;
}
}
void main()
{
Salary S;
S=initlist();
functionselect(S);
} 追问谢谢你啊。
你能帮我把goto loop 语句,改写成用while 循环吗?谢谢你啊,十分感谢啊回答void functionselect(Salary S)
char ch;
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;
赞同。