程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统).docx

上传人:牧羊曲112 文档编号:1925241 上传时间:2022-12-26 格式:DOCX 页数:34 大小:153.99KB
返回 下载 相关 举报
程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统).docx_第1页
第1页 / 共34页
程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统).docx_第2页
第2页 / 共34页
程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统).docx_第3页
第3页 / 共34页
程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统).docx_第4页
第4页 / 共34页
程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统).docx_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统).docx》由会员分享,可在线阅读,更多相关《程序设计基础课程设计报告(c语言实现附源码)(员工工资管理系统).docx(34页珍藏版)》请在三一办公上搜索。

1、 程序设计基础程序设计基础 课程设计报告课程设计报告 题 目: 员工工资管理系统 院 (系) : 信息科学与工程学院 专业班级: 学生姓名: 学 号: 指导教师: 20 16 年 12 月 12 日至 20 16 年 12 月 23 日 武昌武昌首义学院首义学院制制 程序设计基础程序设计基础 课程设计任务书课程设计任务书 一、设计(调查报告一、设计(调查报告/ /论文)题目论文)题目 员工工资管理系统员工工资管理系统 二、设计(调查报告二、设计(调查报告/ /论文)主要内容论文)主要内容 1.1.员工工资管理系统员工工资管理系统 主要内容: 设计一个利用文件处理方式实现对员工工资(包括员工编号

2、、员工姓名、应发、扣款和实发)进行管理,具有增加数据、更新数据、查询数据、删除数据、列表显示数据以及重组文件的功能。员工工资管理系统由六大功能模块组成: 增加数据 该模块完成将输入的数据存入数据文件中,用户一次可输入多个员工的信息。 更新数据 该模块用于实现对记录的修改, 首先用户输入员工的编号, 然后查询该员工的信息,最后更新该员工的信息。 查询数据 该模块可选择按员工编号查询,或者按员工姓名进行查询,然后列出满足条件的且未作删除标记的员工信息。 删除数据 该模块用于删除指定编号的员工工资信息,为提高效率,只作删除标记,不在物理上删除信息,可称为逻辑删除。 显示数据 该模块用于以列表方式显示

3、所有未作删除标记的员工信息。 重组文件 当逻辑删除的信息太多时,将会降低查询效率。重组文件模块专门用于在物理上删除作有删除标记的信息,这样不但提高查询效率,同时也节约存储空间。 统计输出 输出实发工资最高的员工工资信息。 统计输出员工实发工资的平均工资。 统计输出超过实发平均工资的员工人数。 排序 该模块按员工实发工资由高到低的顺序排序输出所有员工信息。 要求本系统采用结构体等数据结构。系统以菜单方式工作。 2.学生学籍管理系统学生学籍管理系统 主要内容: 设计一个利用文件处理方式,实现对学生学籍信息(包括:学号,姓名,性别,年龄,籍贯,系别,专业,班级)进行添加、修改、删除、查找、统计输出等

4、操作。学生学籍管理系统的功能要求如下: 增加数据 该模块完成将输入的数据存入数据文件中,用户一次可输入多个学生的学籍信息。 更新数据 该模块用于实现对记录的修改,首先用户输入学生的学号,然后查询该学生的学籍信息,最后更新该学生的学籍的信息。 查询数据 该模块可选择按学生的学号查询,或者按学生的姓名查询,再或者按学生的班级查询,然后列出满足条件的且未作删除标记的学生学籍信息。 删除数据 该模块用于删除指定编号的学生学籍信息,为提高效率,只作删除标记,不在物理上删除信息,可称为逻辑删除。 显示数据 该模块用于以列表方式显示所有未作删除标记的学生学籍信息。 重组文件 当逻辑删除的信息太多时,将会降低

5、查询效率。重组文件模块专门用于在物理上删除作有删除标记的信息,这样不但提高查询效率,同时也节约存储空间。 统计输出 1)按专业输出所有学生的学籍信息。 2)统计输出学生的平均年龄。 3)统计输出超过平均年龄的学生人数。 排序 该模块按学生学号由低到高的顺序排序输出所有学生学籍信息。 要求本系统采用结构体等数据结构。系统以菜单方式工作。 3.3.班级成绩管理系统班级成绩管理系统 主要内容: 对一个有 N 个学生的班级,每个学生有M 门课程。每个学生应当包括如下信息:学号、 姓名、M 门课程名称。该系统实现对班级成绩的添加、修改、删除、查找、统计输出等操作的管理。功能要求如下: 增加数据 该模块完

6、成将输入的数据存入数据文件中,用户一次可输入多个学生的基本信息。 更新数据 该模块用于实现对记录的修改,首先用户输入学生的学号,然后查询该学生的基本信息,最后更新该学生的基本信息。 查询数据 该模块可选择按学生的学号查询,或者按学生的姓名查询,然后列出满足条件的且未作删除标记的学生基本信息。 删除数据 该模块用于删除指定编号的学生基本信息,为提高效率,只作删除标记,不在物理上删除信息,可称为逻辑删除。 显示数据 该模块用于以列表方式显示所有未作删除标记的学生基本信息。 重组文件 当逻辑删除的信息太多时,将会降低查询效率。重组文件模块专门用于在物理上删除作有删除标记的信息,这样不但提高查询效率,

7、同时也节约存储空间。 统计输出 1)显示每门课程成绩最高的学生的基本信息。 2)显示每门课程的平均成绩。 3)显示超过某门课程平均成绩的学生人数。 排序 该模块按学生学号由低到高的顺序排序输出所有学生的基本信息。 要求本系统采用结构体等数据结构。系统以菜单方式工作。 课程设计要求:课程设计要求: 课程设计从第一、二和三道题中选一道题选一道题完成。其中,学号尾数为学号尾数为 0 0、2 2、4 4、8 8 的的做第一道题;学号尾数为做第一道题;学号尾数为 1 1、3 3、7 7 的做第二道题;学号尾数为的做第二道题;学号尾数为 5 5、6 6、9 9 的做第三道题。的做第三道题。 系统要求在 M

8、icrosoft Visual C+ 6.0 编译平台上采用 C 语言编程实现。 课程设计报告课程设计报告(要求正规打印,A4 幅面) ,内容包括: 题目 需求与总体设计(描述系统要实现什么功能;系统怎么实现,绘制系统功能模块 结构图;数据结构的设计及用法说明) 详细设计(描述系统包含的主函数和子函数;解释各个功能模块的软件功能;画系统的总体流程图,某种查询、插入、删除程序实现的子函数流程图,要求采用标准流程图图符至少画两个流程图) 编码与实现(只能使用 C 语言,源程序编写格式要按照缩进方式,源程序要有详细的注释,使程序容易阅读。源程序编写格式的规范和注释体现程序员的素质,必须从本课程设计开

9、始培养。 ) 运行结果(包括输入数据的结果,查询、修改、删除的结果,可以将输出的结果以截屏方式呈现到课程设计报告中) 总结(必须真实的说出自己在课程设计中的切身体会。例如:课程设计如何构思、如何设计、如何编程、如何调试、遇到的主要问题和解决方法,哪些地方使你“痛苦不堪” ;创新之处;课程设计中存在的不足,需进一步改进的设想等等。 ) 注:每人以班级注:每人以班级+ +学号学号+ +姓名创建目录,目录需包括课程设计报告电子文档和源程序姓名创建目录,目录需包括课程设计报告电子文档和源程序以备检查。然后由各班学习委员汇总到以备检查。然后由各班学习委员汇总到 U U 盘上统一提交。盘上统一提交。 三、

10、原始资料三、原始资料 1.游洪跃,彭骏,谭斌C 语言程序设计实验与课程设计教程北京:清华大学出版社,2011 2.孙承爱,赵卫东程序设计基础基于 C 语言(第 2 版) 科学出版社,2010 四、要求的设计(调查四、要求的设计(调查/ /论文)成果论文)成果 1.课程设计报告 2.课程设计软件 五、进程安排五、进程安排 布置任务,查找资料、需求分析 1 天 总体设计 1 天 详细设计 1 天 编制源程序实现 3 天 测试与修改 1 天 撰写课程设计报告 2 天 六、主要参考资料六、主要参考资料 1 谭浩强C 程序设计第四版清华大学出版社,2010 2 苏小红C 语言大学实用教程第 2 版电子工

11、业出版社,2008 指导教师(签名) :指导教师(签名) : 年年 月月 日日 目 录 1 需求与总体设计1 2 详细设计1 3 编码实现4 4 运行结果21 总结24 1 1 需求与总体设计 1.1 需求描述 设计一个利用文件处理方式实现对员工工资(包括员工编号、员工姓名、年月、岗位工资、奖金、扣款和实发)进行管理,具有增加数据、更新数据、查询数据、删除数据、列表显示数据以及重组文件的功能。 1.2 总体设计 先以登陆函数登陆,再进入主菜单,菜单中显示各个要实现的操作,以菜单将各个函数联系起来,对菜单操作以实现系统的目的。 1.3 数据结构 struct user /登陆者信息 char u

12、n10; char up10; us3 = aaa,111,bbb,222,ccc,333 ; struct yg /员工结构体 short zt; /数据状态 long bh; /编号 char name20; /名字 char time11; /时间 long money; /基本工资 long jj; /奖金 long kk; /扣款 long sf; /实发工资 ; 整个程序只运用了结构体的数据结构,结构体运用于登陆者信息和员工信息,将员工信息封装在一个结构体里,再创建结构体数组,将多个员工信息储存在结构体数组中。 2 详细设计 2.1 系统功能设计 主函数和子函数: 系统包含一个主函

13、数,和子函数,分别有登陆子函数,菜单子函数,增加数据子函数,更新数据子函数,查询数据子函数,删除数据子函数,统计数据子函数,重组文件子函数,排序数据子函数,最后两个分别是读取文件和写入文件子函数。 2 各个函数的功能: 主函数是一个入口程序从这里进入,再进入登陆函数,实现登陆操作。 登陆函数,只有拥有正确账号密码,正确的操作才可以进入菜单界面进行下一步的操作,并且输入错误三次后将会提示并强制退出。 菜单界面利用 switch()函数将各个函数联系起来实现真正的菜单, 输入正确的序号可以进行后续的各个操作。 读取函数,将特定文件中的信息,以特定的方式读取到正在运行的程序中,实现读写操作。 写入函

14、数,在添加、更新、删除、重组操作过后进行写入操作,将变换后的数据重新写入文件中。注:每次写入都是将程序中的所有数据重新写入文件。 增加函数,可以新添员工,并将员工的数据输入,并利用写入函数,写入文件中。在增加后会提示是否继续增加,提供了方便。并且如果原数据中有相同编号的员工,会在输入编号后提示有相同的编号的员工,并重新输入编号。增加了程序的健全性。 更新数据函数,以编号来确定更新的员工,更新将重新输入该编号员工的信息,并在更新后执行写入。 删除函数,执行该函数后,将有两种选择,按编号删除,或按名字删除,正确输入后将会将该编号或姓名的数据中的一项 zt 的值更改为 1,使其在其他操作时不被识别,

15、以达到不删除数据,但达到相同的效果的逻辑删除。 显示函数,有两种显示方式,按学号显示或按名字显示,学号显示为从小到大显示。 重组函数,将文件中逻辑删除的数据物理删除,用来节省储存空间,并可以加快运算速度。 统计数据,将文件中的数据统计、计算,并输出,给人以直观的方式显示数据。 排序函数,将数据以实发工资从大到小排序。 3 2.2 系统流程设计 查询 输入查询方式 按编号查询 按名字查询 查询学生 输出当前学生数据 查无此人 查询函数的流程查询函数的流程图图 主函数 main(); 登陆函数 dl(); 菜单函数 cd(); 增加函数 zj_data(); 删除函数 sc_data() 更新函数

16、 gx_data(); 读取函数 read(); 查询函数 cz_data(); 显示函数 xs_data(); 重组数据 cz_data(); 统计数据 tj_data; 排序数据 px_data(); 系统的总体流系统的总体流程图程图 保存函数 save(); 4 3 编码实现 #define MAX 100 #include #include #include struct user /登陆者信息 char un10; char up10; us3 = aaa,111,bbb,222,ccc,333 ; struct yg /员工结构体 short zt; /数据状态 long bh;

17、/编号 char name20; /名字 char time11; /时间 long money; /基本工资 long jj; /奖金 long kk; /扣款 long sf; /实发工资 ; yg yMAX; /定义数据体数组 int r = 0; /全局变量,人数,包括逻辑删除人数 int p = 0; /登陆的次数,用全局变量能在登陆三次失败时退出程序 void read() /读取文件函数 FILE *fp; char b; int i; b = 0; printf(即将读取文件 员工信息.datn); if (fp = fopen(员工信息.dat, rb) = NULL) /读

18、取文件 5 printf(员工信息.dat 文件不存在n); printf(是否重新创建该文件?n); printf(创建(y) 员工信息.dat 或 退出(n)n); getchar(); b = getchar(); while (getchar() != n) if (b = Y | b = N) b += 32; while (b != y&b != n) printf(输入错误!请重新输入!n); b = getchar(); while (getchar() != n) if (b = Y | b = N) b += 32; if (b = y) if (fp = fopen(员工

19、信息.dat, wb) = NULL) /文件不存在则创建文件 printf(创建文件失败!n); printf(按下任意键以退出程序!n); getchar(); exit(1); if (b = 0) fread(&r, 4, 1, fp); printf(读取成功!n); else printf(创建文件成功!n); if (r != 0) for (i = 0; i r; i+) fread(&yi, sizeof(yg), 1, fp); 6 fclose(fp); void save() /保存文件函数 FILE *fp; int i; if (fp = fopen(员工信息.da

20、t, wb) = NULL) printf(保存文件失败!n); printf(按下任意键以退出程序!n); getchar(); exit(1); else fwrite(&r, 4, 1, fp); if (r != 0) for (i = 0; i r; i+) fwrite(&yi, sizeof(yg), 1, fp); fclose(fp); void zj_data() /增加数据函数 yg yuangong; char b; int i; int k = 0; yuangong.zt = 0; /新建员工信息时,状态为 0 do /用循环来寻找、避免相同编号的员工 printf

21、(编号:(例如:123456)n); scanf(%d, &yuangong.bh); for (i = 0; i r; i+) if (yi.bh = yuangong.bh&yi.zt=0) 7 printf(已有同编号员工无法添加!n); printf(请重新输入!n); k = 1; break; else if (i = r - 1) k = 0; while (k = 1); printf(姓名:(例如:张三(or tom)n); scanf(%s, yuangong.name); printf(年月:(例如:2015.11.11)n); scanf(%s, yuangong.ti

22、me); printf(岗位工资:(例如:50000)n); scanf(%d, &yuangong.money); printf(奖金:(例如:2000)n); scanf(%d, &yuangong.jj); printf(扣款:(例如:100)n); scanf(%d, &yuangong.kk); printf(实发工资为:(岗位工资+奖金-扣款)n); yuangong.sf = yuangong.money + yuangong.jj - yuangong.kk; printf(%dn, yuangong.sf); yr = yuangong; r+; /新建员工信息时人数 r+

23、save(); printf(添加成功!n); getchar(); /防止下面一个%c 读取到上一个的回车 printf(是否继续添加员工?(y/n)n); b = getchar(); while (getchar() != n); if (b = Y | b = N) b += 32; while (b != y&b != n) printf(输入错误!请重新输入!n); b = getchar(); while (getchar() != n) 8 if (b = Y | b = N) b += 32; if (b = y) zj_data(); void gx_data() /更新数

24、据 yg yuangong; long num; int i; printf(n 请输入要更新的员工的编号!n); scanf(%d, &num); for (i = 0; i r; i+) if (yi.bh = num&yi.zt = 0) yuangong = yi; printf(当前该员工信息为:n); printf(编号:%dn, yuangong.bh); printf(姓名:%sn, yuangong.name); printf(年月:%sn, yuangong.time); printf(岗位工资:%dn, yuangong.money); printf(奖金:%dn, yu

25、angong.jj); printf(扣款:%dn, yuangong.kk); printf(实发工资:%dn, yuangong.sf); printf(按下任意键输入更新后的信息!n); getchar(); getchar(); printf(编号:(例如:123456)n); scanf(%d, &yuangong.bh); printf(姓名:(例如:张三(or tom)n); scanf(%s, yuangong.name); printf(年月:(例如:2015.11.11)n); scanf(%s, yuangong.time); printf(岗位工资:(例如:50000)

26、n); scanf(%d, &yuangong.money); 9 printf(奖金:(例如:2000)n); scanf(%d, &yuangong.jj); printf(扣款:(例如:100)n); scanf(%d, &yuangong.kk); printf(实发工资为:(岗位工资+奖金-扣款)n); yuangong.sf = yuangong.money + yuangong.jj - yuangong.kk; printf(%dn, yuangong.sf); yi = yuangong; save(); printf(更新成功!n); break; else if (i =

27、 r - 1) printf(查无此人!n); void cz_data() /查询数据 yg yuangong; int a, i; long num; char na10; printf(n 请选择查询方式!n); /分为按编号查询和姓名查询 printf( *n); printf( * 1、编号查询 *n); printf( * 2、姓名查询 *n); printf( * 3、返回菜单 *n); printf( *n); scanf(%d, &a); if (a = 1) printf(请输入查询员工的编号:); scanf(%d, &num); for (i = 0; i r; i+)

28、 /编号查询则循环 r 次,查找状态为 0 且编号与所输入的数字相同的数据 if (yi.zt = 0 & yi.bh = num) 10 yuangong = yi; printf(当前该员工信息为:n); printf(编号:%dn, yuangong.bh); printf(姓名:%sn, yuangong.name); printf(年月:%sn, yuangong.time); printf(岗位工资:%dn, yuangong.money); printf(奖金:%dn, yuangong.jj); printf(扣款:%dn, yuangong.kk); printf(实发工资:

29、%dn, yuangong.sf); break; else if (i = r - 1) printf(查无此人!n); else if (a = 2) printf(请输入查询员工的姓名:); scanf(%s, na); for (i = 0; i r; i+) /姓名查询则循环 r 次,查找状态为 0 且编号与所输入的字符串相同的数据 if (strcmp(yi.name, na) = 0) & yi.zt = 0) yuangong = yi; printf(当前该员工信息为:n); printf(编号:%dn, yuangong.bh); printf(姓名:%sn, yuango

30、ng.name); printf(年月:%sn, yuangong.time); printf(岗位工资:%dn, yuangong.money); printf(奖金:%dn, yuangong.jj); printf(扣款:%dn, yuangong.kk); printf(实发工资:%dn, yuangong.sf); break; else if (i = r - 1) printf(查无此人!n); 11 else if (a = 3) else printf(输入错误!n); cz_data(); void sc_data() /删除数据 yg yuangong; long num

31、; int a, i, b; char na10; printf(n 请选择!n); /删除也按编号删除和姓名删除 printf( *n); printf( * 1、按编号删除 *n); printf( * 2、按姓名删除 *n); printf( * 3、返回主菜单 *n); printf( *n); scanf(%d, &a); if (a = 1) printf(请输入要删除员工的编号:); scanf(%d, &num); for (i = 0; i r; i+) if (yi.zt = 0 & yi.bh = num) yuangong = yi; printf(当前该员工信息为:n

32、); printf(编号:%dn, yuangong.bh); printf(姓名:%sn, yuangong.name); printf(年月:%sn, yuangong.time); printf(岗位工资:%dn, yuangong.money); 12 printf(奖金:%dn, yuangong.jj); printf(扣款:%dn, yuangong.kk); printf(实发工资:%dn, yuangong.sf); yi.zt = 1; save(); printf(删除成功!n); getchar(); /防止下面一个%c读取到上一个的回车 printf(是否继续删除员工

33、?(y/n)n); b = getchar(); while (getchar() != n); if (b = Y | b = N) b += 32; while (b != y&b != n) printf(输入错误!请重新输入!n); b = getchar(); while (getchar() != n) if (b = Y | b = N) b += 32; if (b = y) sc_data(); break; else if (i = r - 1) printf(查无此人,无法删除!n); else if (a = 2) printf(请输入删除员工的姓名:); scanf(

34、%s, na); for (i = 0; i r; i+) if (strcmp(yi.name, na) = 0) & yi.zt = 0) yuangong = yi; 13 printf(当前该员工信息为:n); printf(编号:%dn, yuangong.bh); printf(姓名:%sn, yuangong.name); printf(年月:%sn, yuangong.time); printf(岗位工资:%dn, yuangong.money); printf(奖金:%dn, yuangong.jj); printf(扣款:%dn, yuangong.kk); printf(

35、实发工资:%dn, yuangong.sf); yi.zt = 1; save(); printf(删除成功!n); getchar(); /防止下面一个%c读取到上一个的回车 printf(是否继续删除员工?(y/n)n); b = getchar(); while (getchar() != n); if (b = Y | b = N) b += 32; while (b != y&b != n) printf(输入错误!请重新输入!n); b = getchar(); while (getchar() != n) if (b = Y | b = N) b += 32; if (b = y

36、) sc_data(); break; else if (i = r - 1) printf(查无此人,无法删除!n); else if (a = 3) /输入为3 时不执行操作返回主菜单 14 else printf(输入错误!n); sc_data(); void xs_data() /显示数据 yg yuangongMAX, t; int a; int i, j; int k = 0; printf(n 请选择显示方式!n); printf( *n); printf( * 1、按编号显示 *n); printf( * 2、按姓名显示 *n); printf( * 3、返回主菜单 *n);

37、 printf( *n); scanf(%d, &a); for (i = 0; i r; i+) yuangongi = yi; if (yi.zt = 1) k+; if (k = r) printf(无员工信息!n); a = 3; if (a = 1) /按编号显示时用冒泡排序从大到小排序 for (i = 1; i = r; i+) for (j = 0; j yuangongj + 1.bh) t = yuangongj; yuangongj = yuangongj + 1; yuangongj + 1 = t; printf(按编号排列如下:n); printf(%-10s%-1

38、0s%-10s%-10s%-10s%-10s%-10sn, 编号, 姓名, 年月, 岗位工资, 奖金, 扣款, 实发工资); for (i = 0; ir; i+) if (yuangongi.zt = 0) printf(%-10d%-10s%-10s%-10d%-10d%-10d%-10dn, yuangongi.bh, yuangongi.name, yuangongi.time, yuangongi.money, yuangongi.jj, yuangongi.kk, yuangongi.sf); printf(显示完毕!n); else if (a = 2) /按名字显示时用冒泡排序

39、从大到小排序,用 strcmp 来比较字符串的大小 for (i = 1; i = r; i+) for (j = 0; j 0) t = yuangongj; yuangongj = yuangongj + 1; yuangongj + 1 = t; printf(按姓名排列如下:n); printf(%-10s%-10s%-10s%-10s%-10s%-10s%-10sn, 编号, 姓名, 年月, 岗位工资, 奖金, 扣款, 实发工资); for (i = 0; ir; i+) if (yuangongi.zt = 0) printf(%-10d%-10s%-10s%-10d%-10d%-

40、10d%-10dn, yuangongi.bh, yuangongi.name, yuangongi.time, yuangongi.money, yuangongi.jj, yuangongi.kk, yuangongi.sf); printf(显示完毕!n); 16 else if (a = 3) else printf(输入错误!n); cz_data(); void chongz_data() /重组文件 int i, j; int k = 0; for (i = 0; i r; i+) /循环r 次,将状态为 1 的数据剔除,并将剔除数据的个数记录 if (yi.zt = 1) fo

41、r (j = i; j r; j+) yj = yj + 1; k+; r -= k; /将人数r 重新计算 save(); printf(重组成功!n); void tj_data() /统计数据 yg yuangongMAX; int max, m, k = 0; double ave = 0; int n = 0; int i; for (i = 0; i r; i+) /计算文件中逻辑删除的数据个数 k 17 yuangongi = yi; if (yuangongi.zt = 1) k+; for (i = 0; i r; i+) /将数组中第一个状态为 0的数据的实发工资赋给 ma

42、x,并记录是第几位,跳出循环 if (yuangongi.zt = 0) max = yuangongi.sf; m = i; break; if (yuangong0.zt = 0) /第一个数据是否逻辑删除?否,将实发工资赋给 ave 未计算的平均值 ave = yuangong0.sf; for (i = 1; i r; i+) /循环找出最大值,并将所有正常数据加入未计算的 ave 中 if (max yuangongi.sf) & (yuangongi.zt = 0) m = i; if (yuangongi.zt = 0) ave += yuangongi.sf; ave = av

43、e / (r - k); /计算 ave for (i = 0; i ave) & (yuangongi.zt = 0) n+; printf(n 最高实发工资员工信息为:n); /输出结果 printf(%-10s%-10s%-10s%-10s%-10s%-10s%-10sn, 编号, 姓名, 年月, 岗位工资, 奖金, 扣款, 实发工资); printf(%-10d%-10s%-10s%-10d%-10d%-10d%-10dn, yuangongm.bh, yuangongm.name, yuangongm.time, yuangongm.money, yuangongm.jj, yuan

44、gongm.kk, yuangongm.sf); printf(平均工资为:%.2fn, ave); printf(超过平均工资人数为:%dnn, n); 18 void px_data() /排序数据 yg yuangongMAX, t; int num = 0; int i, j; for (i = 0; i r; i+) yuangongi = yi; for (i = 1; i = r; i+) /冒泡排序排序所有数据 for (j = 0; j r - i; j+) if (yuangongj.sfyuangongj + 1.sf) t = yuangongj; yuangongj

45、= yuangongj + 1; yuangongj + 1 = t; printf(n 所有员工信息为:n); printf(%-10s%-10s%-10s%-10s%-10s%-10s%-10sn, 编号, 姓名, 年月, 岗位工资, 奖金, 扣款, 实发工资); for (i = 0; ir; i+) if (yuangongi.zt = 0) printf(%-10d%-10s%-10s%-10d%-10d%-10d%-10dn, yuangongi.bh, yuangongi.name, yuangongi.time, yuangongi.money, yuangongi.jj, y

46、uangongi.kk, yuangongi.sf); void cd() /菜单函数 int l; do printf(欢迎进入员工工资管理系统菜单!n); printf( _n); printf( *| 1.增加数据 |*n); printf( *| 2.更新数据 |*n); printf( *| 3.查询数据 |*n); printf( *| 4.删除数据 |*n); 19 printf( *| 5.显示数据 |*n); printf( *| 6.重组数据 |*n); printf( *| 7.统计输出 |*n); printf( *| 8.排序数据 |*n); printf( *| 9

47、.退出 |*n); printf( *|其它输入为退出|*n); printf( *|_|*nn); printf(请输入你的选择:n); scanf(%d, &l); switch (l) case 1:zj_data(); printf(即将返回主菜单n); system(PAUSE); break; /system 用于返回主菜单时等待一下 case 2:gx_data(); printf(即将返回主菜单n); system(PAUSE); break; case 3:cz_data(); printf(即将返回主菜单n); system(PAUSE); break; case 4:sc

48、_data(); printf(即将返回主菜单n); system(PAUSE); break; case 5:xs_data(); printf(即将返回主菜单n); system(PAUSE); break; case 6:chongz_data(); printf(即将返回主菜单n); system(PAUSE); break; case 7:tj_data(); printf(即将返回主菜单n); system(PAUSE); break; case 8:px_data(); printf(即将返回主菜单n); system(PAUSE); break; case 9:break; w

49、hile (l != 9 & (l = 1 | l = 2 | l = 3 | l = 4 | l = 5 | l = 6 | l = 7 | l = 8); void dl() /登陆函数 int i; char a10, b10; 20 printf(请输入用户名:n); scanf(%s, a); printf(请输入密码:n); scanf(%s, b); for (i = 0; i= 3) printf(登录失败超过 3 次,系统将强制退出!n); printf(按下任意键以退出程序!n); getchar(); getchar(); exit(1); else dl(); int

50、main() /主函数 dl(); return 0; 21 4 运行结果 输入三次登陆失败输出: 登陆成功读取文件,无文件时: 创建文件成功后进入菜单界面: 增加数据输入界面: 22 当输入数据中原本就有的员工编号时: 所有数据输入完成后,显示所有数据:有两种显示方式 将其中一人的数据执行更新操作: 编号错误时: 正确时: 23 查询:两种方式 删除数据:两种方式 重组完成: 数据处理完成后,显示所有数据: 24 统计数据: 以实发工资高到低排序数据: 总结 拿到课设题目时,以为很简单,只是将一些函数堆叠在一起就行了,写的时候也没觉得很难,但在调试程序时,各种各样的 bug 眼花缭乱,如何找

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号