收藏 分销(赏)

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

上传人:二*** 文档编号:4571834 上传时间:2024-09-30 格式:DOC 页数:43 大小:223.04KB 下载积分:5 金币
下载 相关 举报
程序设计基础课程设计报告c语言实现附源码员工工资管理系统样本.doc_第1页
第1页 / 共43页
本文档共43页,全文阅读请下载到手机保存,查看更方便
资源描述
《程序设计基本》 课程设计报告 题 目: 员工工资管理系统 院 (系): 信息科学与工程学院 专业班级: 学生姓名: 学 号: 指引教师: 20 16 年 12 月 12 日至20 16 年 12 月 23 日 武昌首义学院制 程序设计基本 课程设计任务书 一、设计(调查报告/论文)题目 员工工资管理系统 二、设计(调查报告/论文)重要内容 1.员工工资管理系统 重要内容: 设计一种运用文献解决方式实现对员工工资(涉及员工编号、员工姓名、应发、扣款和实发)进行管理,具备增长数据、更新数据、查询数据、删除数据、列表显示数据以及重组文献功能。员工工资管理系统由六大功能模块构成: ①增长数据 该模块完毕将输入数据存入数据文献中,顾客一次可输入各种员工信息。 ②更新数据 该模块用于实现对记录修改,一方面顾客输入员工编号,然后查询该员工信息,最后更新该员工信息。 ③查询数据 该模块可选取按员工编号查询,或者按员工姓名进行查询,然后列出满足条件且未作删除标记员工信息。 ④删除数据 该模块用于删除指定编号员工工资信息,为提高效率,只作删除标记,不在物理上删除信息,可称为逻辑删除。 ⑤显示数据 该模块用于以列表方式显示所有未作删除标记员工信息。 ⑥重组文献 当逻辑删除信息太多时,将会减少查询效率。重组文献模块专门用于在物理上删除作有删除标记信息,这样不但提高查询效率,同步也节约存储空间。 ⑦记录输出 输出实发工资最高员工工资信息。 记录输出员工实发工资平均工资。 记录输出超过实发平均工资员工人数。 ⑧ 排序 该模块按员工实发工资由高到低顺序排序输出所有员工信息。 ⑨规定本系统采用构造体等数据构造。系统以菜单方式工作。 2.学生学籍管理系统 重要内容: 设计一种运用文献解决方式,实现对学生学籍信息(涉及:学号,姓名,性别,年龄,籍贯,系别,专业,班级)进行添加、修改、删除、查找、记录输出等操作。学生学籍管理系统功能规定如下: ①增长数据 该模块完毕将输入数据存入数据文献中,顾客一次可输入各种学生学籍信息。 ②更新数据 该模块用于实现对记录修改,一方面顾客输入学生学号,然后查询该学生学籍信息,最后更新该学生学籍信息。 ③查询数据 该模块可选取按学生学号查询,或者按学生姓名查询,再或者按学生班级查询,然后列出满足条件且未作删除标记学生学籍信息。 ④删除数据 该模块用于删除指定编号学生学籍信息,为提高效率,只作删除标记,不在物理上删除信息,可称为逻辑删除。 ⑤显示数据 该模块用于以列表方式显示所有未作删除标记学生学籍信息。 ⑥重组文献 当逻辑删除信息太多时,将会减少查询效率。重组文献模块专门用于在物理上删除作有删除标记信息,这样不但提高查询效率,同步也节约存储空间。 ⑦记录输出 1)按专业输出所有学生学籍信息。 2)记录输出学生平均年龄。 3)记录输出超过平均年龄学生人数。 ⑧ 排序 该模块按学生学号由低到高顺序排序输出所有学生学籍信息。 ⑨规定本系统采用构造体等数据构造。系统以菜单方式工作。 3.班级成绩管理系统 重要内容: 对一种有N个学生班级,每个学生有M门课程。每个学生应当涉及如下信息:学号、姓名、M门课程名称。该系统实现对班级成绩添加、修改、删除、查找、记录输出等操作管理。功能规定如下:  ①增长数据 该模块完毕将输入数据存入数据文献中,顾客一次可输入各种学生基本信息。 ②更新数据 该模块用于实现对记录修改,一方面顾客输入学生学号,然后查询该学生基本信息,最后更新该学生基本信息。 ③查询数据 该模块可选取按学生学号查询,或者按学生姓名查询,然后列出满足条件且未作删除标记学生基本信息。 ④删除数据 该模块用于删除指定编号学生基本信息,为提高效率,只作删除标记,不在物理上删除信息,可称为逻辑删除。 ⑤显示数据 该模块用于以列表方式显示所有未作删除标记学生基本信息。 ⑥重组文献 当逻辑删除信息太多时,将会减少查询效率。重组文献模块专门用于在物理上删除作有删除标记信息,这样不但提高查询效率,同步也节约存储空间。 ⑦记录输出 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 总结(必要真实说出自己在课程设计中切身体会。例如:课程设计如何构思、如何设计、如何编程、如何调试、遇到重要问题和解决办法,哪些地方使你“痛苦不堪”;创新之处;课程设计中存在局限性,需进一步改进设想等等。) 注:每人以班级+学号+姓名创立目录,目录需涉及课程设计报告电子文档和源程序以备检查。然后由各班学习委员汇总到U盘上统一提交。 三、原始资料 1.游洪跃,彭骏,谭斌.C语言程序设计实验与课程设计教程.北京:清华大学出版社,. 2.孙承爱,赵卫东.程序设计基本—基于C语言(第2版).科学出版社,. 四、规定设计(调查/论文)成果 1.课程设计报告 2.课程设计软件 五、进程安排 布置任务,查找资料、需求分析1天 总体设计1天 详细设计1天 编制源程序实现3天 测试与修改1天 撰写课程设计报告2天 六、重要参照资料 [1] 谭浩强.C程序设计.第四版.清华大学出版社,. [2] 苏小红.C语言大学实用教程.第2版.电子工业出版社,. 指引教师(签名): 年 月 日 目 录 1需求与总体设计………………………………………………………………………1 2详细设计………………………………………………………………………1 3编码实现………………………………………………………………………4 4运营成果………………………………………………………………………21 总结…………………………………………………………………………………24 1需求与总体设计 1.1需求描述 设计一种运用文献解决方式实现对员工工资(涉及员工编号、员工姓名、年月、岗位工资、奖金、扣款和实发)进行管理,具备增长数据、更新数据、查询数据、删除数据、列表显示数据以及重组文献功能。 1.2总体设计 先以登陆函数登陆,再进入主菜单,菜单中显示各个要实现操作,以菜单将各个函数联系起来,对菜单操作以实现系统目。 1.3数据构造 struct user //登陆者信息 { char un[10]; char up[10]; }us[3] = { "aaa","111","bbb","222","ccc","333" }; struct yg //员工构造体 { short zt; //数据状态 long bh; //编号 char name[20];//名字 char time[11];//时间 long money; //基本工资 long jj; //奖金 long kk; //扣款 long sf; //实发工资 }; 整个程序只运用了构造体数据构造,构造体运用于登陆者信息和员工信息,将员工信息封装在一种构造体里,再创立构造体数组,将各种员工信息储存在构造体数组中。 2详细设计 2.1 系统功能设计 主函数和子函数: 系统包括一种主函数,和子函数,分别有登陆子函数,菜单子函数,增长数据子函数,更新数据子函数,查询数据子函数,删除数据子函数,记录数据子函数,重组文献子函数,排序数据子函数,最后两个分别是读取文献和写入文献子函数。 各个函数功能: 主函数是一种入口程序从这里进入,再进入登陆函数,实现登陆操作。 登陆函数,只有拥有对的账号密码,对的操作才可以进入菜单界面进行下一步操作,并且输入错误三次后将会提示并强制退出。 菜单界面运用switch()函数将各个函数联系起来实现真正菜单,输入对的序号可以进行后续各个操作。 读取函数,将特定文献中信息,以特定方式读取到正在运营程序中,实现读写操作。 写入函数,在添加、更新、删除、重组操作过后进行写入操作,将变换后数据重新写入文献中。注:每次写入都是将程序中所有数据重新写入文献。 增长函数,可以新添员工,并将员工数据输入,并运用写入函数,写入文献中。在增长后会提示与否继续增长,提供了以便。并且如果原数据中有相似编号员工,会在输入编号后提示有相似编号员工,并重新输入编号。增长了程序健全性。 更新数据函数,以编号来拟定更新员工,更新将重新输入该编号员工信息,并在更新后执行写入。 删除函数,执行该函数后,将有两种选取,按编号删除,或按名字删除,对的输入后将会将该编号或姓名数据中一项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 un[10]; char up[10]; }us[3] = { "aaa","111","bbb","222","ccc","333" }; struct yg //员工构造体 { short zt; //数据状态 long bh; //编号 char name[20];//名字 char time[11];//时间 long money; //基本工资 long jj; //奖金 long kk; //扣款 long sf; //实发工资 }; yg y[MAX]; //定义数据体数组 int r = 0; //全局变量,人数,涉及逻辑删除人数 int p = 0; //登陆次数,用全局变量能在登陆三次失败时退出程序 void read() //读取文献函数 { FILE *fp; char b; int i; b = '0'; printf("即将读取文献 员工信息.dat\n"); 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"); } else printf("创立文献成功!\n"); if (r != 0) for (i = 0;i < r;i++) fread(&y[i],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(&y[i],sizeof(yg),1,fp); } fclose(fp); } void zj_data() //增长数据函数 { 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 (y[i].bh == yuangong.bh&&y[i].zt==0) { 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("年月:(例如:.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 - yuangong.kk; printf("%d\n",yuangong.sf); y[r] = 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 (y[i].bh == num&&y[i].zt == 0) { yuangong = y[i]; printf("当前该员工信息为:\n"); printf("编号:%d\n",yuangong.bh); printf("姓名:%s\n",yuangong.name); printf("年月:%s\n",yuangong.time); printf("岗位工资:%d\n",yuangong.money); printf("奖金:%d\n",yuangong.jj); printf("扣款:%d\n",yuangong.kk); printf("实发工资:%d\n",yuangong.sf); printf("按下任意键输入更新后信息!\n"); getchar(); getchar(); printf("编号:(例如:123456)\n"); scanf("%d",&yuangong.bh); 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 = yuangong.money + yuangong.jj - yuangong.kk; printf("%d\n",yuangong.sf); y[i] = yuangong; save(); printf("更新成功!\n"); break; } else if (i == r - 1) printf("查无此人!\n"); } void cz_data() //查询数据 { yg yuangong; int a,i; long num; char na[10]; 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++) //编号查询则循环r次,查找状态为0且编号与所输入数字相似数据 if (y[i].zt == 0 && y[i].bh == num) { yuangong = y[i]; printf("当前该员工信息为:\n"); printf("编号:%d\n",yuangong.bh); printf("姓名:%s\n",yuangong.name); printf("年月:%s\n",yuangong.time); printf("岗位工资:%d\n",yuangong.money); printf("奖金:%d\n",yuangong.jj); printf("扣款:%d\n",yuangong.kk); printf("实发工资:%d\n",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(y[i].name,na) == 0) && y[i].zt == 0) { yuangong = y[i]; printf("当前该员工信息为:\n"); printf("编号:%d\n",yuangong.bh); printf("姓名:%s\n",yuangong.name); printf("年月:%s\n",yuangong.time); printf("岗位工资:%d\n",yuangong.money); printf("奖金:%d\n",yuangong.jj); printf("扣款:%d\n",yuangong.kk); printf("实发工资:%d\n",yuangong.sf); break; } else if (i == r - 1) printf("查无此人!\n"); } else if (a == 3) { } else { printf("输入错误!\n"); cz_data(); } } void sc_data() //删除数据 { yg yuangong; long num; int a,i,b; char na[10]; 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 (y[i].zt == 0 && y[i].bh == num) { yuangong = y[i]; printf("当前该员工信息为:\n"); printf("编号:%d\n",yuangong.bh); printf("姓名:%s\n",yuangong.name); printf("年月:%s\n",yuangong.time); printf("岗位工资:%d\n",yuangong.money); printf("奖金:%d\n",yuangong.jj); printf("扣款:%d\n",yuangong.kk); printf("实发工资:%d\n",yuangong.sf); y[i].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("请输入删除员工姓名:"); scanf("%s",na); for (i = 0;i < r;i++) if ((strcmp(y[i].name,na) == 0) && y[i].zt == 0) { yuangong = y[i]; printf("当前该员工信息为:\n"); printf("编号:%d\n",yuangong.bh); printf("姓名:%s\n",yuangong.name); printf("年月:%s\n",yuangong.time); printf("岗位工资:%d\n",yuangong.money); printf("奖金:%d\n",yuangong.jj); printf("扣款:%d\n",yuangong.kk); printf("实发工资:%d\n",yuangong.sf); y[i].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时不执行操作返回主菜单 { } else { printf("输入错误!\n"); sc_data(); } } void xs_data() //显示数据 { yg yuangong[MAX],t; int a; int i,j; int k = 0; printf("\n请选取显示方式!\n"); printf(" *********************\n"); printf(" * 1、按编号显示 *\n"); printf(" * 2、按姓名显示 *\n"); printf(" * 3、返回主菜单 *\n"); printf(" *********************\n"); scanf("%d",&a); for (i = 0;i < r;i++) { yuangong[i] = y[i]; if (y[i].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 (yuangong[j].bh > yuangong[j + 1].bh) { t = yuangong[j]; yuangong[j] = yuangong[j + 1]; yuangong[j + 1] = t; } printf("按编号排列如下:\n"); printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","编号","姓名","年月","岗位工资","奖金","扣款","实发工资"); for (i = 0;i<r;i++) if (yuangong[i].zt == 0) printf("%-10d%-10s%-10s%-10d%-10d%-10d%-10d\n",yuangong[i].bh,yuangong[i].name,yuangong[i].time,yuangong[i].money,yuangong[i].jj,yuangong[i].kk,yuangong[i].sf); printf("显示完毕!\n"); } else if (a == 2) //按名字显示时用冒泡排序从大到小排序,用strcmp来比较字符串大小 { for (i = 1;i <= r;i++) for (j = 0;j<r - i;j++) if (strcmp(yuangong[j].name,yuangong[j + 1].name) > 0) { t = yuangong[j];
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服