欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOC文档下载  

    程序的设计基础课程设计报告c语言实现附源码员工工资管理系统方案.doc

    • 资源ID:24034       资源大小:295.29KB        全文页数:30页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    程序的设计基础课程设计报告c语言实现附源码员工工资管理系统方案.doc

    程序设计基础课程设计任务书一、设计调查报告/论文题目员工工资管理系统二、设计调查报告/论文主要内容1.员工工资管理系统主要内容:设计一个利用文件处理方式实现对员工工资包括员工编号、员工XX、应发、扣款和实发进行管理,具有增加数据、更新数据、查询数据、删除数据、列表显示数据以及重组文件的功能。员工工资管理系统由六大功能模块组成:增加数据该模块完成将输入的数据存入数据文件中,用户一次可输入多个员工的信息。更新数据该模块用于实现对记录的修改,首先用户输入员工的编号,然后查询该员工的信息,最后更新该员工的信息。查询数据该模块可选择按员工编号查询,或者按员工XX进行查询,然后列出满足条件的且未作删除标记的员工信息。删除数据该模块用于删除指定编号的员工工资信息,为提高效率,只作删除标记,不在物理上删除信息,可称为逻辑删除。显示数据该模块用于以列表方式显示所有未作删除标记的员工信息。重组文件当逻辑删除的信息太多时,将会降低查询效率。重组文件模块专门用于在物理上删除作有删除标记的信息,这样不但提高查询效率,同时也节约存储空间。统计输出输出实发工资最高的员工工资信息。统计输出员工实发工资的平均工资。统计输出超过实发平均工资的员工人数。排序该模块按员工实发工资由高到低的顺序排序输出所有员工信息。要求本系统采用结构体等数据结构。系统以菜单方式工作。2.学生学籍管理系统主要内容:设计一个利用文件处理方式,实现对学生学籍信息包括:学号,XX,性别,年龄,籍贯,系别,专业,班级进行添加、修改、删除、查找、统计输出等操作。学生学籍管理系统的功能要求如下:增加数据该模块完成将输入的数据存入数据文件中,用户一次可输入多个学生的学籍信息。更新数据该模块用于实现对记录的修改,首先用户输入学生的学号,然后查询该学生的学籍信息,最后更新该学生的学籍的信息。查询数据该模块可选择按学生的学号查询,或者按学生的XX查询,再或者按学生的班级查询,然后列出满足条件的且未作删除标记的学生学籍信息。删除数据该模块用于删除指定编号的学生学籍信息,为提高效率,只作删除标记,不在物理上删除信息,可称为逻辑删除。显示数据该模块用于以列表方式显示所有未作删除标记的学生学籍信息。重组文件当逻辑删除的信息太多时,将会降低查询效率。重组文件模块专门用于在物理上删除作有删除标记的信息,这样不但提高查询效率,同时也节约存储空间。统计输出1按专业输出所有学生的学籍信息。2统计输出学生的平均年龄。3统计输出超过平均年龄的学生人数。排序该模块按学生学号由低到高的顺序排序输出所有学生学籍信息。要求本系统采用结构体等数据结构。系统以菜单方式工作。3.班级成绩管理系统主要内容:对一个有N个学生的班级,每个学生有M门课程。每个学生应当包括如下信息:学号、XX、M门课程名称。该系统实现对班级成绩的添加、修改、删除、查找、统计输出等操作的管理。功能要求如下: 增加数据该模块完成将输入的数据存入数据文件中,用户一次可输入多个学生的基本信息。更新数据该模块用于实现对记录的修改,首先用户输入学生的学号,然后查询该学生的基本信息,最后更新该学生的基本信息。查询数据该模块可选择按学生的学号查询,或者按学生的XX查询,然后列出满足条件的且未作删除标记的学生基本信息。删除数据该模块用于删除指定编号的学生基本信息,为提高效率,只作删除标记,不在物理上删除信息,可称为逻辑删除。显示数据该模块用于以列表方式显示所有未作删除标记的学生基本信息。重组文件当逻辑删除的信息太多时,将会降低查询效率。重组文件模块专门用于在物理上删除作有删除标记的信息,这样不但提高查询效率,同时也节约存储空间。统计输出1显示每门课程成绩最高的学生的基本信息。2显示每门课程的平均成绩。3显示超过某门课程平均成绩的学生人数。排序该模块按学生学号由低到高的顺序排序输出所有学生的基本信息。要求本系统采用结构体等数据结构。系统以菜单方式工作。课程设计要求:课程设计从第一、二和三道题中选一道题完成。其中,学号尾数为0、2、4、8的做第一道题;学号尾数为1、3、7的做第二道题;学号尾数为5、6、9的做第三道题。系统要求在Microsoft Visual C+ 6.0编译平台上采用C语言编程实现。课程设计报告要求正规打印,A4幅面,内容包括:l 题目l 需求与总体设计描述系统要实现什么功能;系统怎么实现,绘制系统功能模块结构图;数据结构的设计及用法说明l 详细设计描述系统包含的主函数和子函数;解释各个功能模块的软件功能;画系统的总体流程图,某种查询、插入、删除程序实现的子函数流程图,要求采用标准流程图图符至少画两个流程图l 编码与实现只能使用C语言,源程序编写格式要按照缩进方式,源程序要有详细的注释,使程序容易阅读。源程序编写格式的规范和注释体现程序员的素质,必须从本课程设计开始培养。l 运行结果包括输入数据的结果,查询、修改、删除的结果,可以将输出的结果以截屏方式呈现到课程设计报告中l 总结必须真实的说出自己在课程设计中的切身体会。例如:课程设计如何构思、如何设计、如何编程、如何调试、遇到的主要问题和解决方法,哪些地方使你"痛苦不堪";创新之处;课程设计中存在的不足,需进一步改进的设想等等。注:每人以班级+学号+XX创建目录,目录需包括课程设计报告电子文档和源程序以备检查。然后由各班学习委员汇总到U盘上统一提交。三、原始资料1.游洪跃,彭骏,谭斌C语言程序设计实验与课程设计教程:清华大学,20112.孙承爱,赵卫东程序设计基础基于C语言第2版科学,2010四、要求的设计调查/论文成果1.课程设计报告2.课程设计软件五、进程安排布置任务,查找资料、需求分析1天总体设计1天详细设计1天编制源程序实现3天测试与修改1天撰写课程设计报告2天六、主要参考资料1谭浩强C程序设计第四版清华大学,20102 苏小红C语言大学实用教程第2版电子工业,2008指导教师签名:年 月 日目录1需求与总体设计12详细设计13编码实现44运行结果21总结241需求与总体设计1.1需求描述设计一个利用文件处理方式实现对员工工资包括员工编号、员工XX、年月、岗位工资、奖金、扣款和实发进行管理,具有增加数据、更新数据、查询数据、删除数据、列表显示数据以及重组文件的功能。1.2总体设计先以登陆函数登陆,再进入主菜单,菜单中显示各个要实现的操作,以菜单将各个函数联系起来,对菜单操作以实现系统的目的。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; /实发工资;整个程序只运用了结构体的数据结构,结构体运用于登陆者信息和员工信息,将员工信息封装在一个结构体里,再创建结构体数组,将多个员工信息储存在结构体数组中。2详细设计2.1 系统功能设计主函数和子函数:系统包含一个主函数,和子函数,分别有登陆子函数,菜单子函数,增加数据子函数,更新数据子函数,查询数据子函数,删除数据子函数,统计数据子函数,重组文件子函数,排序数据子函数,最后两个分别是读取文件和写入文件子函数。各个函数的功能:主函数是一个入口程序从这里进入,再进入登陆函数,实现登陆操作。登陆函数,只有拥有正确账号密码,正确的操作才可以进入菜单界面进行下一步的操作,并且输入错误三次后将会提示并强制退出。菜单界面利用switch<>函数将各个函数联系起来实现真正的菜单,输入正确的序号可以进行后续的各个操作。读取函数,将特定文件中的信息,以特定的方式读取到正在运行的程序中,实现读写操作。写入函数,在添加、更新、删除、重组操作过后进行写入操作,将变换后的数据重新写入文件中。注:每次写入都是将程序中的所有数据重新写入文件。增加函数,可以新添员工,并将员工的数据输入,并利用写入函数,写入文件中。在增加后会提示是否继续增加,提供了方便。并且如果原数据中有相同编号的员工,会在输入编号后提示有相同的编号的员工,并重新输入编号。增加了程序的健全性。更新数据函数,以编号来确定更新的员工,更新将重新输入该编号员工的信息,并在更新后执行写入。删除函数,执行该函数后,将有两种选择,按编号删除,或按名字删除,正确输入后将会将该编号或XX的数据中的一项zt的值更改为1,使其在其他操作时不被识别,以达到不删除数据,但达到相同的效果的逻辑删除。显示函数,有两种显示方式,按学号显示或按名字显示,学号显示为从小到大显示。重组函数,将文件中逻辑删除的数据物理删除,用来节省储存空间,并可以加快运算速度。统计数据,将文件中的数据统计、计算,并输出,给人以直观的方式显示数据。排序函数,将数据以实发工资从大到小排序。2.2 系统流程设计主函数main<>登陆函数dl<>菜单函数cd<>增加函数zj_data<>删除函数sc_data<>更新函数gx_data<>读取函数read<>查询函数cz_data<>显示函数xs_data<>重组数据cz_data<>统计数据tj_data;排序数据px_data<>系统的总体流程图保存函数save<>查询输入查询方式按编号查询按名字查询查询学生输出当前学生数据查无此人查询函数的流程图3编码实现#define MAX 100#include<stdio.h>#include<string.h>#include<stdlib.h>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; /实发工资;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> /读取文件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<"员工信息.dat", "wb">> = NULL> /文件不存在则创建文件printf<"创建文件失败!n">printf<"按下任意键以退出程序!n">getchar<>exit<1>if <b = '0'>fread<&r, 4, 1, fp>printf<"读取成功!n">elseprintf<"创建文件成功!n">if <r != 0>for <i = 0; 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>elsefwrite<&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; /新建员工信息时,状态为0do /用循环来寻找、避免相同编号的员工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 = 1>printf<"XX:<例如:张三<or tom>>n">scanf<"%s", yuangong.name>printf<"年月:<例如:2015.11.11>n">scanf<"%s", yuangong.time>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+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'>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<"XX:%sn", 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<"XX:<例如:张三<or tom>>n">scanf<"%s", yuangong.name>printf<"年月:<例如:2015.11.11>n">scanf<"%s", yuangong.time>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>yi = yuangong;save<>printf<"更新成功!n">break;elseif <i = r - 1>printf<"查无此人!n">void cz_data<> /查询数据yg yuangong;int a, i;long num;char na10;printf<"n请选择查询方式!n"> /分为按编号查询和XX查询printf<" *n">printf<" * 1、编号查询 *n">printf<" * 2、XX查询 *n">printf<" * 3、返回菜单 *n">printf<" *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<"XX:%sn", yuangong.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">else if <a = 2>printf<"请输入查询员工的XX:">scanf<"%s", na>for <i = 0; i < r; i+> /XX查询则循环r次,查找状态为0且编号与所输入的字符串相同的数据if <<strcmp<yi.name, na> = 0> && yi.zt = 0>yuangong = yi;printf<"当前该员工信息为:n">printf<"编号:%dn", yuangong.bh>printf<"XX:%sn", yuangong.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">else if <a = 3>elseprintf<"输入错误!n">cz_data<>void sc_data<> /删除数据yg yuangong;long num;int a, i, b;char na10;printf<"n请选择!n"> /删除也按编号删除和XX删除printf<" *n">printf<" * 1、按编号删除 *n">printf<" * 2、按XX删除 *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">printf<"编号:%dn", yuangong.bh>printf<"XX:%sn", yuangong.name>printf<"年月:%sn", yuangong.time>printf<"岗位工资:%dn", yuangong.money>printf<"奖金:%dn", yuangong.jj>printf<"扣款:%dn", yuangong.kk>printf<"实发工资:%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'>sc_data<>break;else if <i = r - 1>printf<"查无此人,无法删除!n">else if <a = 2>printf<"请输入删除员工的XX:">scanf<"%s", na>for <i = 0; i < r; i+>if <<strcmp<yi.name, na> = 0> && yi.zt = 0>yuangong = yi;printf<"当前该员工信息为:n">printf<"编号:%dn", yuangong.bh>printf<"XX:%sn", yuangong.name>printf<"年月:%sn", yuangong.time>printf<"岗位工资:%dn", yuangong.money>printf<"奖金:%dn", yuangong.jj>printf<"扣款:%dn", yuangong.kk>printf<"实发工资:%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'>sc_data<>break;else if <i = r - 1>printf<"查无此人,无法删除!n">else if <a = 3> /输入为3时不执行操作返回主菜单elseprintf<"输入错误!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、按XX显示 *n">printf<" * 3、返回主菜单 *n">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<r - i; j+>if <yuangongj.bh > yuangongj + 1.bh>t = yuangongj;yuangongj = yuangongj + 1;yuangongj + 1 = t;printf<"按编号排列如下:n">printf<"%-10s%-10s%-10s%-10s%-10s%-10s%-10sn", "编号", "XX", "年月", "岗位工资", "奖金", "扣款", "实发工资">for <i = 0; i<r; 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> /按名字显示时用冒泡排序从大到小排序,用strcmp来比较字符串的大小for <i = 1; i <= r; i+>for <j = 0; j<r - i; j+>if <strcmp<yuangongj.name, yuangongj + 1.name> > 0>t = yuangongj;yuangongj = yuangongj + 1;yuangongj + 1 = t;printf<"按XX排列如下:n">printf

    注意事项

    本文(程序的设计基础课程设计报告c语言实现附源码员工工资管理系统方案.doc)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开