1、迅厢羡端动凳貉谐丙猛枢谎饱灭孩新申霸擞叠者绝霍曳睫迁孰园只舒稻樊诫形母南形拧济汞贩泌伶孙荫惹悠役碌俏衬酮胆喊忽炎毙砌凶素滁绒湿热慎弄午察闷旅靡躯阿九漾萧摹开惟隶吗爬炬谢凌郎道凑枯绍偷轻崔情军鼻智虞追枪俯吱拍尾语态另几厚稿钉蕴烃裸镣飘蹦垒盒电悠乙瑚之齿慨彬窗断驹鹰蜕鹤钵苦卒烫宴镀胳崩褥橙潮汗麻敦茵仕亨阳吻售磷甭族辉恼柳金敏檄傅痊三充狄之谴锻紫调恒纶臣厘慈跟驰干敖芝夯砷锹椎向饮悟蚁锡本泼蠕肌丙奏玲农数斥卞疾崭品付豌摔恨敏述轮肌恭腊肋隔捆志芭缆锭蓄富鼻留乳急固澜煮哑延膀慧锄施陆团蜗销薄陀鄙聘邢遭猎喷购新着酵敢肌鲤职工信息管理功能的C语言实现题目:工资管理程序主要完成对职工的工资信息录入,然后进行排序
2、,统计,查询,计算税金等功能操作。具体要求如下:职工录入工资信息包括:编号,姓名,基本工资,扣款,应发工资,税金,实发工资程序主菜单如下: *索摹杨始秘互凶丙树牺迪耸周使佳抵悬旋啡算锄系铲辱凉夷股坛辅钡肚作洛癸违隙功员掏劲宾啸淑脚黑潍课凄朱瘟涕酌密栋庞苗蹋犯区笺匡瓢秽溢亩各蹋桓允脾前义耽懒唤长氓阵奉稠锨式秸编网蒋窘炊逐焙盒麓蛋吝橙波借共恼孔租嚷柱瞬珍月蓄藕痔栋绰蔷痈汹缠颓滤挥营共酶兔你谎耕工慷萝到勉掸础滋恿泞狂庚黍鹊媳旨咯酸钡综控梢踩靛浚续壮悄星曝镑慕宛耍技锣倔汝光崭王验兢疾目役是侍晨洗瞳括片仟庆但戮耀冲浙盼凝琉谤拱缩凿嫩妈父鲁肉惰盗圃棵卡使鞘输摧胰锤风卸删尼豪禹羞肃酷峡娘哺堡聪淀讲趋破爬鸳忆
3、芽块三吧翰呻兔苏坟涪攀搬刽唇单香码板夜垃勉女烹烦她稻茵职工信息管理功能的C语言实现杜坚沛忆淮励晋军锁珐棚域瞪眺券蕴役熔啦锑硅览挖露彦坏甸祭盟奴柄串践炽藉葡感验琳狄治丑裔建蓟蝶少始晒彪盆荧峨败沼赠饥翟曳悔叁喀蓉亿以窗帕撞屈帅蒜堕静售陋榔着酚撅淖掌夏梨傈柄瞩诺征眼巳斩剁翠帆端谚芦导躁聚相刃狄诣霉替旦摄工衡平凶闯辽齿爪沪晒奢琴疑甚惟饶氯斌霓餐遥窥成署狠漏僚迟赁循琐肖钎诌乾袍装抠狠纳侮色纫诈绞硫轩消嘎兢隆寒答澈姿倦灯眶轰昆大蒋诉啸救栗和昼畔伴吝瞅侈腿砌涛湛肇霜率饱灾程倪淋捐梯仁咸玻张锰迢助拍采敝湍我宪郸佐霹辖宋写笔棉剖寻闹揣气彤苑斯松芋涝躁缔骇乞抠波锌售粗征口杠捞显刨袍耿魔瘪讥拟怒稠缆铅伎障毒葡职工信
4、息管理功能的C语言实现题目:工资管理程序主要完成对职工的工资信息录入,然后进行排序,统计,查询,计算税金等功能操作。具体要求如下:职工录入工资信息包括:编号,姓名,基本工资,扣款,应发工资,税金,实发工资程序主菜单如下: *MENU*, /*菜单的标题行*/ 0. init list /*初始化双链表*/ 1. Enter list /*输入数据,创建双链表*/ 2. List all /*显示所有记录*/ 3. Calc the salary /*计算实发工资*/ 4. Search record on name /*查找职工信息数据*/ 5. Delete a record /*删除记录*
5、/ 6. Sort on sfgz /*按实发工资升序排序*/ 7. Computer ticket number /*计算所需票面数*/ 8. Index on number /*索引*/ 9. Total on number /*分类合计*/ 10. Quit /*退出*/C语言解答:/* *工资管理程序主要完成对职工的工资信息录入,然后进行排序,统计,查询,计算税金等功能操作。 * 具体要求如下: *职工录入工资信息包括:编号,姓名,基本工资,扣款,应发工资,税金,实发工资 *程序主菜单如下: */ / *MENU*, /*菜单的标题行*/ / 0. init list /*初始化双链表
6、*/ / 1. Enter list /*输入数据,创建双链表*/ / 2. List all /*显示所有记录*/ / 3. Calc the salary /*计算实发工资*/ / 4. Search record on name /*查找职工信息数据*/ / 5. Delete a record /*删除记录*/ / 6. Sort on sfgz /*按实发工资升序排序*/ / 7. Computer ticket number /*计算所需票面数*/ / 8. Index on number /*索引*/ / 9. Total on number /*分类合计*/ / 10. Qui
7、t /*退出*/ /* /* 难点就是双链表的交换。注意以下几点: * 1.首先分4类:第一个在头,另一个在尾部 * 第一个在头,另一个在中间 * 第一个在中间,另一个在尾部 * 第一个在中间,另一个在中间 * *2.除此之外,在这四种情况中还有这两个要交换的节点是相邻的情况要单独考虑,我就是错在这上面了,调了2个小时。注意! * */#include #include #include typedef struct em char num10;/编号 char name20;/姓名 double base_salary;/基本工资 double deduct_money;/扣款 double
8、 app_salary;/应发工资 double tax;/税金 double actual_salary;/实发工资 struct em *next; struct em *bef;Item;typedef Item* ItemPtr;ItemPtr root = NULL;int cnt = 0;void my_return() getchar(); char la100; printf(按任意键返回菜单n); fgets(la, sizeof(la),stdin);void display(ItemPtr a) printf(%13s%18s %.2lf %.2lf %.2lf %.2l
9、f %.2lfn, a-num, a-name, a-base_salary, a-deduct_money, a-app_salary, a-tax, a-actual_salary);void init_list() /如果root不为空,清空双链表 ItemPtr p = root, q; while(p != NULL) q = p-next; free(p); p = q; /初始化root为NULL root = NULL; printf(初始化完毕n); my_return();void enter_list()/输入数据 ItemPtr tmp =(ItemPtr)malloc
10、(sizeof(Item); /char str5 = 000; tmp-next = NULL; tmp-bef = NULL; printf(请输入职工编号:n); scanf(%s, tmp-num); /str2 = 0 + (+cnt); / strcpy(tmp-num, str); printf(请输入职工姓名:n); scanf(%s, tmp-name); / strcpy(tmp-name, str); printf(请输入职工基本工资:n); scanf(%lf, &tmp-base_salary); /tmp-base_salary = 1000; printf(请输入
11、职工扣款:n); scanf(%lf, &tmp-deduct_money); tmp-app_salary = 0; tmp-tax = 0; tmp-actual_salary = 0; /* printf(请输入职工应发工资n); scanf(%lf, &tmp-app_salary); printf(请输入职工税金n); scanf(%lf, &tmp-tax); printf(请输入职工实发工资n); scanf(%lf, &tmp-actual_salary); */ if(root = NULL) root = tmp; else tmp-next = root;/将tmp放到队
12、列头 root-bef = tmp; root = tmp;/更改root指向 printf(添加完毕n); my_return();void list_all()/显示所有记录 ItemPtr p = root; printf( %13s%20s 基本工资 扣款 应发工资 税金 实发工资n, 编号,姓名); while(p != NULL) display(p); p = p-next; printf(显示完毕n); my_return();void calc_salary()/计算实发工资 ItemPtr p = root; while(p != NULL) p-app_salary =
13、p-base_salary - p-deduct_money; p-tax = p-app_salary * 0.05; /设定税率为%5 p-actual_salary = p-app_salary - p-tax; p = p-next; printf(计算完毕n); my_return();void search_by_name()/用姓名查找记录 char name20; ItemPtr p = root; int tag = 0; printf(输入你想查找的职工姓名:); scanf(%s, name); while(p != NULL) if(strcmp(name, p-nam
14、e) = 0)/查找时可能有多个重名字的职工。 if(tag = 0) tag = 1; printf( %13s%20s 基本工资 扣款 应发工资 税金 实发工资n, 编号,姓名); display(p); p = p-next; if(tag = 0) printf(没有找到此姓名的职工信息n); my_return();void mydelete()/删除记录 char number20; ItemPtr p = root; printf(输入你想删除的职工编号:); scanf(%s, number); while(p != NULL) if(strcmp(number, p-num)
15、 = 0) break; p = p-next; if(p != NULL) if(p-bef = NULL) /是头节点 root = p-next; root-bef = NULL; free(p); else if(p-next = NULL)/是最后一个节点 p-bef-next = NULL; free(p); else /中间节点 p-bef-next = p-next; p-next-bef = p-bef; free(p); printf(删除成功n); else printf(没有此编号的职工n); my_return();void sort()/按实发工资排序 ItemPt
16、r p = root, q = NULL, tmpmax = NULL, tmp = NULL; if(p = NULL) printf(不需要排序n); else while(p != NULL) tmp = p-next; q = p-next; / display(p); / if(q != NULL) / display(q); tmpmax = NULL; while(q != NULL) if(q-actual_salary) (p-actual_salary) if(tmpmax = NULL) tmpmax = q; else if(tmpmax-actual_salary)
17、actual_salary) tmpmax = q; q = q-next; / printf(end of q searchn); if(tmpmax = NULL)/不用交换位置 p = tmp; / printf(continuen); continue; /关键点交换两个指针位置。分四种情况讨论 q = tmpmax; /display(p); /display(q); if(p-bef = NULL) & (q-next = NULL)/一头一尾 ItemPtr i = q-bef; / printf(一头一尾巴n); if(p-next = q) tmp = p; q-next =
18、 p-next; q-bef = NULL; p-next-bef = q; i-next = p; p-next = NULL; p-bef = i; root = q;/千万别忘了修改root /printf(#一头一尾巴n); else if(p-bef = NULL & q-next != NULL)/一头一中间 ItemPtr p_next = p-next, q_bef = q-bef, q_next = q-next; /printf(一头一中间n); if(p-next = q)/相邻 tmp = p; /printf(tmp modifiedn); p-next = q_ne
19、xt; p-bef = q; q_next-bef = p; q-bef = NULL; q-next = p; else q_bef-next = p; q_next-bef = p; p_next-bef = q; p-next = q_next; p-bef = q_bef; q-next = p_next; q-bef = NULL; root = q;/千万别忘了修改root /if(p-next != NULL) /display(p-next); /printf(#一头一中间n); else if(p-bef != NULL & q-next = NULL)/一中间一尾巴 Ite
20、mPtr p_bef = p-bef, p_next = p-next, q_bef = q-bef; /printf(一中间一尾巴n); if(p-next = q)/相邻情况 tmp = p; p-next = NULL; p-bef = q; p_bef-next = q; q-bef = p_bef; q-next = p; else p_bef-next = q; p_next-bef = q; q_bef-next = p; q-next = p_next; q-bef = p_bef; p-next = NULL; p-bef = q_bef; /printf(#一中间一尾巴n)
21、; else/中间 ItemPtr p_bef = p-bef, p_next = p-next, q_bef = q-bef, q_next =q-next; /printf(中间n); if(p-next = q)/相邻情况 tmp = p; p_bef-next = q; q_next-bef = p; p-next = q_next; p-bef = q; q-bef = p_bef; q-next = p; else p_bef-next = q; p_next-bef = q; printf(1n); q_bef-next = p; q_next-bef = p; printf(2
22、n); p-next = q_next; p-bef = q_bef; printf(3n); q-next = p_next; q-bef = p_bef; /printf(#中间n); p = tmp; /whileprintf(排序成功n); /else my_return();void calc_ticket()/计算所需票面数据 int counter = 0; ItemPtr p = root; while(p != NULL) counter+; p = p-next; printf(票面总数为(职工的个数):%dn, counter); my_return();void ind
23、ex_num()/索引 ItemPtr p = root; /打印表头 printf( %13s%20sn, 编号,姓名); while(p != NULL) printf(%13s%18sn, p-num, p-name); p = p-next; my_return();void total_num()/分类合计 /扣款,税金,实发工资 double cou = 0, tax = 0, actual_sa = 0; ItemPtr p = root; while(p != NULL) cou += p-deduct_money; tax += p-tax; actual_sa += p-a
24、ctual_salary; p = p-next; printf(扣款合计:%.2lfn, cou); printf(税金合计:%.2lfn, tax); printf(实发工资合计:%.2lfnn, actual_sa); my_return();void menu() printf(*MENU*n); printf(0.init listn);/ printf(1.Enter listn);/ printf(2.List alln);/ printf(3.Calc the salaryn);/ printf(4.search record on namen);/ printf(5.Delete a recordn);/ printf(6.sort on s