您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 教师工资管理系统程序代码
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最佳答案#includestdio.h#includestdlib.h#includestring.htypedefstructSalary_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;elseif(salary=2000)taxpayment=(float)((salary-1000)*0.05);elseif(salary=3000)taxpayment=(float)((salary-2000)*0.10+1000*0.05);elsetaxpayment=(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);elseif(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|评论
本文标题:教师工资管理系统程序代码
链接地址:https://www.777doc.com/doc-1019385 .html