1、程序设计基础课程设计报告c语言实现附源码员工工资管理系统模板程序设计基础课程设计报告c语言实现附源码员工工资管理系统程序设计基础课程设计报告题 目: 员工工资管理系统 院 ( 系) : 信息科学与工程学院 专业班级: 学生姓名: 学 号: 指导教师: 20 16 年 12 月 12 日至20 16 年 12 月 23 日武昌首义学院制 程序设计基础 课程设计任务书一、 设计( 调查报告/论文) 题目员工工资管理系统二、 设计( 调查报告/论文) 主要内容1.员工工资管理系统主要内容: 设计一个利用文件处理方式实现对员工工资( 包括员工编号、 员工姓名、 应发、 扣款和实发) 进行管理, 具有增
2、加数据、 更新数据、 查询数据、 删除数据、 列表显示数据以及重组文件的功能。员工工资管理系统由六大功能模块组成: 增加数据该模块完成将输入的数据存入数据文件中, 用户一次可输入多个员工的信息。更新数据该模块用于实现对记录的修改, 首先用户输入员工的编号, 然后查询该员工的信息, 最后更新该员工的信息。查询数据该模块可选择按员工编号查询, 或者按员工姓名进行查询, 然后列出满足条件的且未作删除标记的员工信息。删除数据该模块用于删除指定编号的员工工资信息, 为提高效率, 只作删除标记, 不在物理上删除信息, 可称为逻辑删除。显示数据该模块用于以列表方式显示所有未作删除标记的员工信息。重组文件当逻
3、辑删除的信息太多时, 将会降低查询效率。重组文件模块专门用于在物理上删除作有删除标记的信息, 这样不但提高查询效率, 同时也节约存储空间。统计输出输出实发工资最高的员工工资信息。统计输出员工实发工资的平均工资。统计输出超过实发平均工资的员工人数。排序该模块按员工实发工资由高到低的顺序排序输出所有员工信息。要求本系统采用结构体等数据结构。系统以菜单方式工作。2.学生学籍管理系统主要内容: 设计一个利用文件处理方式, 实现对学生学籍信息( 包括: 学号, 姓名, 性别, 年龄, 籍贯, 系别, 专业, 班级) 进行添加、 修改、 删除、 查找、 统计输出等操作。学生学籍管理系统的功能要求如下: 增
4、加数据该模块完成将输入的数据存入数据文件中, 用户一次可输入多个学生的学籍信息。更新数据该模块用于实现对记录的修改, 首先用户输入学生的学号, 然后查询该学生的学籍信息, 最后更新该学生的学籍的信息。查询数据该模块可选择按学生的学号查询, 或者按学生的姓名查询, 再或者按学生的班级查询, 然后列出满足条件的且未作删除标记的学生学籍信息。删除数据该模块用于删除指定编号的学生学籍信息, 为提高效率, 只作删除标记, 不在物理上删除信息, 可称为逻辑删除。显示数据该模块用于以列表方式显示所有未作删除标记的学生学籍信息。重组文件当逻辑删除的信息太多时, 将会降低查询效率。重组文件模块专门用于在物理上删
5、除作有删除标记的信息, 这样不但提高查询效率, 同时也节约存储空间。统计输出1) 按专业输出所有学生的学籍信息。2) 统计输出学生的平均年龄。3) 统计输出超过平均年龄的学生人数。排序该模块按学生学号由低到高的顺序排序输出所有学生学籍信息。要求本系统采用结构体等数据结构。系统以菜单方式工作。3.班级成绩管理系统主要内容: 对一个有N个学生的班级, 每个学生有M门课程。每个学生应当包括如下信息: 学号、 姓名、 M门课程名称。该系统实现对班级成绩的添加、 修改、 删除、 查找、 统计输出等操作的管理。功能要求如下: 增加数据该模块完成将输入的数据存入数据文件中, 用户一次可输入多个学生的基本信息
6、。更新数据该模块用于实现对记录的修改, 首先用户输入学生的学号, 然后查询该学生的基本信息, 最后更新该学生的基本信息。查询数据该模块可选择按学生的学号查询, 或者按学生的姓名查询, 然后列出满足条件的且未作删除标记的学生基本信息。删除数据该模块用于删除指定编号的学生基本信息, 为提高效率, 只作删除标记, 不在物理上删除信息, 可称为逻辑删除。显示数据该模块用于以列表方式显示所有未作删除标记的学生基本信息。重组文件当逻辑删除的信息太多时, 将会降低查询效率。重组文件模块专门用于在物理上删除作有删除标记的信息, 这样不但提高查询效率, 同时也节约存储空间。统计输出1) 显示每门课程成绩最高的学
7、生的基本信息。2) 显示每门课程的平均成绩。3) 显示超过某门课程平均成绩的学生人数。排序该模块按学生学号由低到高的顺序排序输出所有学生的基本信息。要求本系统采用结构体等数据结构。系统以菜单方式工作。课程设计要求: 课程设计从第一、 二和三道题中选一道题完成。其中, 学号尾数为0、 2、 4、 8的做第一道题; 学号尾数为1、 3、 7的做第二道题; 学号尾数为5、 6、 9的做第三道题。系统要求在Microsoft Visual C+ 6.0编译平台上采用C语言编程实现。 课程设计报告( 要求正规打印, A4幅面) , 内容包括: 题目 需求与总体设计( 描述系统要实现什么功能; 系统怎么实
8、现, 绘制系统功能模块结构图; 数据结构的设计及用法说明) 详细设计( 描述系统包含的主函数和子函数; 解释各个功能模块的软件功能; 画系统的总体流程图, 某种查询、 插入、 删除程序实现的子函数流程图, 要求采用标准流程图图符至少画两个流程图) 编码与实现( 只能使用C语言, 源程序编写格式要按照缩进方式, 源程序要有详细的注释, 使程序容易阅读。源程序编写格式的规范和注释体现程序员的素质, 必须从本课程设计开始培养。) 运行结果( 包括输入数据的结果, 查询、 修改、 删除的结果, 能够将输出的结果以截屏方式呈现到课程设计报告中) 总结( 必须真实的说出自己在课程设计中的切身体会。例如:
9、课程设计如何构思、 如何设计、 如何编程、 如何调试、 遇到的主要问题和解决方法, 哪些地方使你”痛苦不堪”; 创新之处; 课程设计中存在的不足, 需进一步改进的设想等等。) 注: 每人以班级+学号+姓名创立目录, 目录需包括课程设计报告电子文档和源程序以备检查。然后由各班学习委员汇总到U盘上统一提交。三、 原始资料1.游洪跃, 彭骏, 谭斌C语言程序设计实验与课程设计教程北京: 清华大学出版社, 2.孙承爱, 赵卫东程序设计基础基于C语言( 第2版) 科学出版社, 四、 要求的设计( 调查/论文) 成果1.课程设计报告2.课程设计软件五、 进程安排布置任务, 查找资料、 需求分析1天总体设计
10、1天详细设计1天编制源程序实现3天测试与修改1天撰写课程设计报告2天六、 主要参考资料1 谭浩强C程序设计第四版清华大学出版社, 2 苏小红C语言大学实用教程第2版电子工业出版社, 指导教师( 签名) : 年 月 日 1需求与总体设计12详细设计13编码实现44运行结果21总结241需求与总体设计1.1需求描述 设计一个利用文件处理方式实现对员工工资( 包括员工编号、 员工姓名、 年月、 岗位工资、 奖金、 扣款和实发) 进行管理, 具有增加数据、 更新数据、 查询数据、 删除数据、 列表显示数据以及重组文件的功能。1.2总体设计先以登陆函数登陆, 再进入主菜单, 菜单中显示各个要实现的操作,
11、 以菜单将各个函数联系起来, 对菜单操作以实现系统的目的。1.3数据结构struct user /登陆者信息 char un10; 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; /实发工资;整个程序只运用了结构体的数据结构, 结构体运用于登陆者信息和员工信息, 将员工信息封装在一个结构体里, 再创
12、立结构体数组, 将多个员工信息储存在结构体数组中。2详细设计2.1 系统功能设计主函数和子函数: 系统包含一个主函数, 和子函数, 分别有登陆子函数, 菜单子函数, 增加数据子函数, 更新数据子函数, 查询数据子函数, 删除数据子函数, 统计数据子函数, 重组文件子函数, 排序数据子函数, 最后两个分别是读取文件和写入文件子函数。各个函数的功能: 主函数是一个入口程序从这里进入, 再进入登陆函数, 实现登陆操作。登陆函数, 只有拥有正确账号密码, 正确的操作才能够进入菜单界面进行下一步的操作, 而且输入错误三次后将会提示并强制退出。菜单界面利用switch()函数将各个函数联系起来实现真正的菜
13、单, 输入正确的序号能够进行后续的各个操作。读取函数, 将特定文件中的信息, 以特定的方式读取到正在运行的程序中, 实现读写操作。写入函数, 在添加、 更新、 删除、 重组操作过后进行写入操作, 将变换后的数据重新写入文件中。注: 每次写入都是将程序中的所有数据重新写入文件。增加函数, 能够新添员工, 并将员工的数据输入, 并利用写入函数, 写入文件中。在增加后会提示是否继续增加, 提供了方便。而且如果原数据中有相同编号的员工, 会在输入编号后提示有相同的编号的员工, 并重新输入编号。增加了程序的健全性。更新数据函数, 以编号来确定更新的员工, 更新将重新输入该编号员工的信息, 并在更新后执行
14、写入。删除函数, 执行该函数后, 将有两种选择, 按编号删除, 或按名字删除, 正确输入后将会将该编号或姓名的数据中的一项zt的值更改为1, 使其在其它操作时不被识别, 以达到不删除数据, 但达到相同的效果的逻辑删除。显示函数, 有两种显示方式, 按学号显示或按名字显示, 学号显示为从小到大显示。重组函数, 将文件中逻辑删除的数据物理删除, 用来节省储存空间, 并能够加快运算速度。统计数据, 将文件中的数据统计、 计算, 并输出, 给人以直观的方式显示数据。排序函数, 将数据以实发工资从大到小排序。2.2 系统流程设计3编码实现#define MAX 100#include#include#i
15、ncludestruct user /登陆者信息 char un10; 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; /实发工资;yg yMAX; /定义数据体数组int r = 0; /全局变量, 人数, 包括逻辑删除人数int p = 0; /登陆的次数, 用全局变量能在登陆三次失败时退出程序
16、void read() /读取文件函数 FILE *fp; char b; int i; b = 0; printf(即将读取文件 员工信息.datn); if (fp = fopen(员工信息.dat, rb) = NULL) /读取文件 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) p
17、rintf(输入错误!请重新输入!n); b = getchar(); while (getchar() != n) if (b = Y | b = N) b += 32; if (b = y) if (fp = fopen(员工信息.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
18、; i r; i+) fread(&yi, sizeof(yg), 1, fp); fclose(fp);void save() /保存文件函数 FILE *fp; int i; if (fp = fopen(员工信息.dat, 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_da
19、ta() /增加数据函数 yg yuangong; char b; int i; int k = 0; yuangong.zt = 0; /新建员工信息时, 状态为0 do /用循环来寻找、 避免相同编号的员工 printf(编号:(例如:123456)n); scanf(%d, &yuangong.bh); for (i = 0; i r; i+) if (yi.bh = yuangong.bh&yi.zt=0) printf(已有同编号员工无法添加!n); printf(请重新输入!n); k = 1; break; else if (i = r - 1) k = 0; while (k
20、= 1); printf(姓名:(例如:张三(or tom)n); scanf(%s, yuangong.name); printf(年月:(例如: .11.11)n); scanf(%s, yuangong.time); printf(岗位工资:(例如:50000)n); scanf(%d, &yuangong.money); printf(奖金:(例如: )n); scanf(%d, &yuangong.jj); printf(扣款:(例如:100)n); scanf(%d, &yuangong.kk); printf(实发工资为:(岗位工资+奖金-扣款)n); yuangong.sf =
21、 yuangong.money + yuangong.jj - yuangong.kk; printf(%dn, yuangong.sf); yr = yuangong; r+; /新建员工信息时人数r+ 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 = get
22、char(); while (getchar() != n) if (b = Y | b = N) b += 32; if (b = y) zj_data();void gx_data() /更新数据 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,
23、yuangong.name); printf(年月:%sn, yuangong.time); printf(岗位工资:%dn, yuangong.money); printf(奖金:%dn, yuangong.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
24、(%s, yuangong.name); printf(年月:(例如: .11.11)n); scanf(%s, yuangong.time); printf(岗位工资:(例如:50000)n); scanf(%d, &yuangong.money); printf(奖金:(例如: )n); scanf(%d, &yuangong.jj); printf(扣款:(例如:100)n); scanf(%d, &yuangong.kk); printf(实发工资为:(岗位工资+奖金-扣款)n); yuangong.sf = yuangong.money + yuangong.jj - yuangon
25、g.kk; printf(%dn, yuangong.sf); yi = yuangong; save(); printf(更新成功!n); break; else if (i = 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
26、( *n); scanf(%d, &a); if (a = 1) printf(请输入查询员工的编号:); scanf(%d, &num); for (i = 0; i r; i+) /编号查询则循环r次, 查找状态为0且编号与所输入的数字相同的数据 if (yi.zt = 0 & yi.bh = num) yuangong = yi; printf(当前该员工信息为:n); printf(编号:%dn, yuangong.bh); printf(姓名:%sn, yuangong.name); printf(年月:%sn, yuangong.time); printf(岗位工资:%dn, yu
27、angong.money); printf(奖金:%dn, yuangong.jj); printf(扣款:%dn, yuangong.kk); printf(实发工资:%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(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1