题目概述
美国某大学共有200名教师,校方与教师工会刚刚签订一项协议。按照协议,所有年工资超过$26000含$26000的教师工资将保持不变,年工资少于$26000的教师将增加工资,所增加的工资数按下述方法计算:给每个由此教师所赡养的人(包括教师本人)每年补助$100,此外,教师有一年工龄每年再多补助$50,但是,增加后的年工资总额不能多于$26000。 教师的工资档案储存在行政办公室的光盘上,档案中有目前的年工资、赡养人数、雇用日期等信息。需要写一个程序计算并印出每名教师的原有工资和调整后的新工资。
设计教师工资调整程序
数据流图
需求分析
1、任务概述
对于年工资未超过$26000的教师涨工资,即每赡养一人补助$100,每有一年工龄补助$50,涨工资的上限为$26000。
2、数据描述
数据库采用教师工资表。
3、功能需求
(1)获取教师当前工资、获取赡养人数、获取工龄、更新教师信息。 (2)计算工资、根据限额确定工资。 (3)排序、查询 (4)打印报表打印工资对照单。
算法设计
搜索工资档案数据,找出年工资少于$26000的人,计算新工资,校核是否超过$26000,储存新工资,印出新旧工资对照表。
针对算法设计作出HIPO图
程序源码分析及运行结果展示
python程序源码分析
import pandas as pd
from datetime import datetime
def sal():
df = pd.read_excel('C:/Users/admin/Desktop/teacherSal.xlsx', index_col = 0)
print(df)
df1 = pd.DataFrame(columns = ['原教师年工资'] + ['现教师年工资'])
for i in range(1,201):
if df.loc[i, '教师年工资'] >= 26000:
sal = df.loc[i, '教师年工资']
else:
working_age = int((datetime.now() - df.loc[i, '雇佣日期']).days / 365.0)
sal = df.loc[i, '教师年工资'] + df.loc[i, '赡养人数'] * 100 + working_age * 50
if sal > 26000:
sal = 26000
df1.loc[i, '原教师年工资'] = df.loc[i, '教师年工资']
df1.loc[i, '现教师年工资'] = sal
df1.to_excel('C:/Users/admin/Desktop/adjustSal.xlsx')
df1 = pd.read_excel('C:/Users/admin/Desktop/adjustSal.xlsx', index_col = 0)
print(df1)
if __name__ == '__main__':
sal()
运行结果展示
总结
1、学会了使用python内的pandas库来读取excel表格内的数据 2、我们可以使用pd.read_excel(‘excel-path’)来读取教师工资表(PS:excel-path指的是excel表存放的路径),另外还能在pd.read_excel()内添加参数index_col = 0来指定第一列为行索引,也即为pd.read_excel(‘file-path’, index-col = 0) 3、学会了使用pd.DataFrame()来创建一个表,如:df = pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None) 参数data:表示要传入的数据,包括ndarray,series,map,lists,dict,constant和另一个DataFrame。 参数index:行索引,若不手动赋值,将默认从0开始分配。格式为[’ x1’, ‘x2 ‘] 参数columns:列索引,若不手动赋值,将默认从0开始分配。格式为[’ x1’, 'x2 '] 参数dtype:每列的类型。 参数copy:可以写false或者true。从input输入中拷贝数据,默认是false,不拷贝。 如果想要创建一个空表,可以只写行索引和列索引,或者只写列索引。 4、获取表格中某行某列的元素值: df.iloc[i, j]:i表示行序,j表示列序。按序值返回元素。 df.loc[行索引,列索引]:按索引返回元素。 5、python中的datetime库中的datetime.now()表示系统本地时间 6、把数据写入到表格中:使用data.to_excel(‘excel-path’)。
|