2022年C语言课件教育设计报告—工资信息管理系统.pdf
C 语言程序设计学校:中国地址大学学院:工程学院班级序号:05507101学号:20071000226姓名:王雷指导老师:刘文中精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 10 页 - - - - - - - - - - C 语言程序设计编 程 实 践 是 学 习 C 语 言 程 序 设 计 的 一 重 要 环 节 ,为 提 高 学 生 程 序 设 计 能 力 ,通 过 课 堂和 上 机 实 践 练 习 使 学 生 的 程 序 设 计 能 力 上 一 台 阶 。 通 过 前 四 单 元 温 顾 而 知 新 、 庖 丁 解 牛 、举 一 反 三 、 熟 能 生 巧 等 过 程 的 练 习 设 计 下 面 一 个 完 整 的 程 序 。1、题目要求设 计 “工 资信 息 管 理系 统”要 求 :该 系 统 能 够 实 现 工 资 信 息 管 理 。 系 统 包 括 录 入 , 浏 览 , 查 询 , 统 计 等 功 能 。录 入 功 能 要 求 :能 够 添 加 新 的 工 资 信 息 到 文 件 ;浏 览 功 能 要 求 :能 够 按 照 工 资 卡 号 , 姓 名 分 类 浏 览 , 提 供 分 屏显 示 ; 有 排 序 功 能 , 排序 后 按 照 工 资 卡 号 升 序 或 实 发 工 资 降 序 输 出 ;查 询 功 能 要 求 :能 够 按 照 工 资卡 号 , 姓 名 查 询 ;统 计 功 能 要 求 :能 够 按 照 月 份 累 计 统 计 某 职 工 在 某 时 间 段 发 工 资 总 金 额 。职 工 数 据 如 下 :姓 名银 行 卡 号月 份应 发 工 资水 费电 费税 金实 发 工 资wanglei 05507101 6 5000.00 25.00 35.00 360.00 4580.00 wanglei 05507101 7 5100.00 20.00 40.00 370.00 4670.00 2、分析:根 据 题 目 要 求 , 应 当 把 职 工 工 资 信 息 用 结 构 体 形 式 输 入 , 再 定 义 一 个 全 局 变 量 和 文 件指 针 进 行 整 个 程 序 的 运 行 ,然 后 把 职 工 工 资 信 息 送 到 文 件 中 ,所 以 应 该 提 供 一 个 结 构 体 和文 件 的 输 入 输 出 等 操 作 ;在 程 序 中 需 实 现 职 工 工 资 浏 览 ,查 询 ,统 计 等 功 能 的 操 作 ,所 以需 要 建 立 相 应 的 模 块 来 实 现 ;另 外 还 需 提 供 键 盘 式 选 择 菜 单 实 现 功 能 ,在 运 行 时 达 到 所 要目 的 。3、总体设计:根 据 题 目 要 求 , 可 以 将 系 统 分 为 六 个 模 块 :1) 职 工 工 资 信 息 浏 览 模 块 ;2) 添 加 工 工 资 信 息 模 块 ;3) 统 计 职 工 工 资 总 合 模 块 ;4) 按 名 字 查 询 职 工 工 资 信 息 模 块;5) 按 卡 号 查 询 职 工 工 资 信 息 模 块;6) 功 能 选 择精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 10 页 - - - - - - - - - - 4、详细设计:#include #include #include #include/ 头函数名/*职员工资信息结构体 */ /* 包括职工的姓名、银行卡好、工作月份、应发工资、实发工资、水费、电费、税*/ struct staff/ 职员工资信息结构体 char Name10; char CardNumber10; int Month; float SPWages; 开始显示一系列功能选择输入 n,判断 m 是否是 0 到 4?根据 n 值调用各功能模块函数结束N 职 工工 资信 息浏 览模块添 加职 工资 信息 模块统 计职 工工 资总 合模块按 名字 查询 职工 工资 信息按 卡号 查询 职工 工资 信息功 能选择工 资 信 息 管 理 系 统精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 10 页 - - - - - - - - - - float APWages; float Water; float Electrical; float Tax; ; FILE *fp;/ 定义文件指针 =全局变量struct staff temp; void printf_face()/ 输出函数 printf(n 姓名银行卡号月份应发工资水费电费税 实发工资n ); printf(%s %s %d %.2f %.2f %.2f %.2f %.2fn,temp.Name,temp.CardNumber,temp.Month, temp.SPWages,temp.Water,temp.Electrical,temp.Tax,temp.APWages); 一、/*浏览职工工资信息 =模块*/ void PrintInformation()/浏览职工工资信息 struct staff temp; if(fp=fopen(wages,rb)=NULL) printf(cannot open the file!); exit(0); while(fread(&temp,sizeof(struct staff),1,fp)=1) printf_face(); fclose(fp); 开始定义结构体全局变量,打开文件阅读资料,判断是否是所查职工信息结束N 输出精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 10 页 - - - - - - - - - - 二、/*添加职工工资信息 =模块*/ void Increase()/ 添加职工工资信息 if(fp=fopen(wages,ab+)=NULL) printf(cannot open the file!); exit(0); printf(n 请输入要 =添加的工资信息: n); printf(n 姓名 银行卡号月份应发工资水费电费 n ); scanf(%s%s%d%f%f%f,temp.Name,temp.CardNumber, &temp.Month,&temp.SPWages,&temp.Water, &temp.Electrical); if(temp.SPWages800.0)&(temp.SPWages1400)temp.Tax=(temp.SPWages-1400)*0.1; temp.APWages=temp.SPWages-temp.Water-temp.Electrical-temp.Tax; fwrite(&temp,sizeof(struct staff),1,fp); fclose(fp); /* 计算税金并添加到文件相应结构体中*/ 三、/*统计某职工工资总合 =模块*/ void Statistics()/ 统计某职工工资总合 struct staff temp; char tempname10; float sum=0; int monthstart=0,monthover=0; printf(n 输入姓名起始月份终止月份n:); scanf(%s%d%d, tempname, &monthstart,&monthover); if(fp=fopen(wages,rb)=NULL) printf(cannot open the file!) exit(0); 开始判断工资等级?添加到职工信息中结束开始temp.Month=monthstart temp.Month=monthove ?sum+=temp.APWages结束N 输出Y temp.SPWages=800 temp.SPWages1400.temp.SPWages=800 temp.SPWages=monthstart&temp.Month=monthover) sum+=temp.APWages; printf(%d 月到%d 月的工资总和%f,monthstart,monthover,sum); fclose(fp); 四、/*按名字查询某职工工资信息=模块*/ void NameSearch()/ 按名字查询某职工工资信息 char tempname10; struct staff temp; printf(n 输入姓名 :); scanf(%s,tempname); if(fp=fopen(wages,rb)=NULL) printf(cannot open the file!); exit(0); while(fread(&temp,sizeof(struct staff),1,fp)=1) /*读文件中资料*/ if(strcmp(temp.Name,tempname)=0) /*判断是否是该姓名*/ printf_face(); fclose(fp); 五、/*按卡号查询某职工工资信息=模块*/ void CardNumberSearch()/ 按卡号查询某职工工资信息 char tempCardNumber10; struct staff temp; 开始判断是否和要查相符?结束N 开始判断是否和要查相符结束N 输入姓名Y 输出输入姓名Y 输出精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 10 页 - - - - - - - - - - printf(n 输入卡号 :); scanf(%s,tempCardNumber); if(fp=fopen(wages,rb)=NULL) printf(cannot open the file!); exit(0); while(fread(&temp,sizeof(struct staff),1,fp)=1) /*读文件中资料*/ if(strcmp(temp.CardNumber,tempCardNumber)=0) /*判断是否是该卡号*/ printf_face(); fclose(fp); 六、/*职工工资信息查询 =模块*/ int Search() int n; while(1) printf(n1. 按照卡号查询 : n ); printf(n2. 按照姓名查询 : n ); printf(n0. 返回上级目录 : n); scanf(%d,&n); switch(n) case 1:CardNumberSearch();break; case 2:NameSearch();break; case 0:return 0;break; 七、/*功能选择 =模块*/ void ShowMenu() int n; 开始按卡号查询判断 m 是否是 0 到 2 结束0 输入 n 2 1 按姓名查询输出精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 10 页 - - - - - - - - - - while(1) printf(1. 添加工资信息 : n); printf(2. 浏览工资信息 : n ); printf(3. 统计工资信息 : n ); printf(4. 查询工资信息 : n); printf(0. 退出系统 : ); scanf(%d,&n); switch(n) case 1:Increase();break; case 2:PrintInformation();break; case 3:Statistics();break; case 4:Search();break; case 0:exit(0);break; /*主函数 */ void main() ShowMenu(); 运行结果可以达到要求的目的。运行结果:1. 添加工资信息 : 2. 浏览工资信息 : 3. 统计工资信息 : 4. 查询工资信息 : 0. 退出系统 : 1 请输入要 =添加的工资信息: 姓名银行卡号月份应发工资水费电费wanglei 05507101 6 5000 25 35 1. 添加工资信息 : 2. 浏览工资信息 : 3. 统计工资信息 : 4. 查询工资信息 : 0. 退出系统 : 1 开始判断 m 是否是 0 到 4?根据 n 值调用各功能模块函数结束N 输入 n 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 10 页 - - - - - - - - - - 请输入要 =添加的工资信息: 姓名银行卡号月份应发工资水费电费wanglei 05507101 7 5100 20 40 1. 添加工资信息 : 2. 浏览工资信息 : 3. 统计工资信息 : 4. 查询工资信息 : 0. 退出系统 : 2 姓名银行卡号月份应发工资水费电费税实发工资wanglei 05507101 6 5000.00 25.00 35.00 360.00 4580.00 姓名银行卡号月份应发工资水费电费税实发工资wanglei 05507101 7 5100.00 20.00 40.00 370.00 4670.00 1. 添加工资信息 : 2. 浏览工资信息 : 3. 统计工资信息 : 4. 查询工资信息 : 0. 退出系统 : 3 输入姓名起始月份终止月份:wanglei 6 7 6 月到7 月的工资总和9250.0000001. 添加工资信息 : 2. 浏览工资信息 : 3. 统计工资信息 : 4. 查询工资信息 : 0. 退出系统 : 4 1. 按照卡号查询 : 2. 按照姓名查询 : 0. 返回上级目录 : 1 输入卡号 :05507101 姓名银行卡号月份应发工资水费电费税实发工资wanglei 05507101 6 5000.00 25.00 35.00 360.00 4580.00 姓名银行卡号月份应发工资水费电费税实发工资wanglei 05507101 7 5100.00 20.00 40.00 370.00 4670.00 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 10 页 - - - - - - - - - - 1. 按照卡号查询 : 2. 按照姓名查询 : 0. 返回上级目录 : 2 输入姓名 :wanglei 姓名银行卡号月份应发工资水费电费税实发工资wanglei 05507101 6 5000.00 25.00 35.00 360.00 4580.00 姓名银行卡号月份应发工资水费电费税实发工资wanglei 05507101 7 5100.00 20.00 40.00 370.00 4670.00 1. 按照卡号查询 : 2. 按照姓名查询 : 0. 返回上级目录 : 0 1. 添加工资信息 : 2. 浏览工资信息 : 3. 统计工资信息 : 4. 查询工资信息 : 0. 退出系统 : 0 Press any key to continue 刚开始运行时出现的错误:由于浏览和查询模块中多定义了局部变量,且与全局变量同名将全局变量屏蔽,以至于这些模块不能达到预期效果, 总是只输出最近一次的数据,经过修改后将其删除,达到了所要的效果。使程序得以执行。到目前程序中还有一小毛病,就是计算税金是实数双精度与单精度转换存在不足。做此 C 程序设计的体会:通过学习和练习C 程序的设计基础,了解了一些关于C 的知识。在设计过程中,好多处困惑、疑问,有是会很烦,甚至不想再做,但必须做好,所以耐着性子做好了。此时感觉有一点点成就感,也学到了一些知识。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 10 页 - - - - - - - - - -