程序设计基础课程设计报告c语言实现附源码员工工资管理系统模板.docx
- 文档编号:4477756
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:36
- 大小:205.43KB
程序设计基础课程设计报告c语言实现附源码员工工资管理系统模板.docx
《程序设计基础课程设计报告c语言实现附源码员工工资管理系统模板.docx》由会员分享,可在线阅读,更多相关《程序设计基础课程设计报告c语言实现附源码员工工资管理系统模板.docx(36页珍藏版)》请在冰豆网上搜索。
程序设计基础课程设计报告c语言实现附源码员工工资管理系统模板
程序设计基础课程设计报告c语言实现附源码员工工资管理系统
《程序设计基础》
课程设计报告
题目:
员工工资管理系统
院(系):
信息科学与工程学院
专业班级:
学生姓名:
学号:
指导教师:
2016年12月12日至2016年12月23日
武昌首义学院制
程序设计基础课程设计任务书
一、设计(调查报告/论文)题目
员工工资管理系统
二、设计(调查报告/论文)主要内容
1.员工工资管理系统
主要内容:
设计一个利用文件处理方式实现对员工工资(包括员工编号、员工姓名、应发、扣款和实发)进行管理,具有增加数据、更新数据、查询数据、删除数据、列表显示数据以及重组文件的功能。
员工工资管理系统由六大功能模块组成:
增加数据
该模块完成将输入的数据存入数据文件中,用户一次可输入多个员工的信息。
更新数据
该模块用于实现对记录的修改,首先用户输入员工的编号,然后查询该员工的信息,最后更新该员工的信息。
查询数据
该模块可选择按员工编号查询,或者按员工姓名进行查询,然后列出满足条件的且未作删除标记的员工信息。
删除数据
该模块用于删除指定编号的员工工资信息,为提高效率,只作删除标记,不在物理上删除信息,可称为逻辑删除。
显示数据
该模块用于以列表方式显示所有未作删除标记的员工信息。
重组文件
当逻辑删除的信息太多时,将会降低查询效率。
重组文件模块专门用于在物理上删除作有删除标记的信息,这样不但提高查询效率,同时也节约存储空间。
统计输出
输出实发工资最高的员工工资信息。
统计输出员工实发工资的平均工资。
统计输出超过实发平均工资的员工人数。
排序
该模块按员工实发工资由高到低的顺序排序输出所有员工信息。
要求本系统采用结构体等数据结构。
系统以菜单方式工作。
2.学生学籍管理系统
主要内容:
设计一个利用文件处理方式,实现对学生学籍信息(包括:
学号,姓名,性别,年龄,籍贯,系别,专业,班级)进行添加、修改、删除、查找、统计输出等操作。
学生学籍管理系统的功能要求如下:
增加数据
该模块完成将输入的数据存入数据文件中,用户一次可输入多个学生的学籍信息。
更新数据
该模块用于实现对记录的修改,首先用户输入学生的学号,然后查询该学生的学籍信息,最后更新该学生的学籍的信息。
查询数据
该模块可选择按学生的学号查询,或者按学生的姓名查询,再或者按学生的班级查询,然后列出满足条件的且未作删除标记的学生学籍信息。
删除数据
该模块用于删除指定编号的学生学籍信息,为提高效率,只作删除标记,不在物理上删除信息,可称为逻辑删除。
显示数据
该模块用于以列表方式显示所有未作删除标记的学生学籍信息。
重组文件
当逻辑删除的信息太多时,将会降低查询效率。
重组文件模块专门用于在物理上删除作有删除标记的信息,这样不但提高查询效率,同时也节约存储空间。
统计输出
1)按专业输出所有学生的学籍信息。
2)统计输出学生的平均年龄。
3)统计输出超过平均年龄的学生人数。
排序
该模块按学生学号由低到高的顺序排序输出所有学生学籍信息。
要求本系统采用结构体等数据结构。
系统以菜单方式工作。
3.班级成绩管理系统
主要内容:
对一个有N个学生的班级,每个学生有M门课程。
每个学生应当包括如下信息:
学号、姓名、M门课程名称。
该系统实现对班级成绩的添加、修改、删除、查找、统计输出等操作的管理。
功能要求如下:
增加数据
该模块完成将输入的数据存入数据文件中,用户一次可输入多个学生的基本信息。
更新数据
该模块用于实现对记录的修改,首先用户输入学生的学号,然后查询该学生的基本信息,最后更新该学生的基本信息。
查询数据
该模块可选择按学生的学号查询,或者按学生的姓名查询,然后列出满足条件的且未作删除标记的学生基本信息。
删除数据
该模块用于删除指定编号的学生基本信息,为提高效率,只作删除标记,不在物理上删除信息,可称为逻辑删除。
显示数据
该模块用于以列表方式显示所有未作删除标记的学生基本信息。
重组文件
当逻辑删除的信息太多时,将会降低查询效率。
重组文件模块专门用于在物理上删除作有删除标记的信息,这样不但提高查询效率,同时也节约存储空间。
统计输出
1)显示每门课程成绩最高的学生的基本信息。
2)显示每门课程的平均成绩。
3)显示超过某门课程平均成绩的学生人数。
排序
该模块按学生学号由低到高的顺序排序输出所有学生的基本信息。
要求本系统采用结构体等数据结构。
系统以菜单方式工作。
课程设计要求:
课程设计从第一、二和三道题中选一道题完成。
其中,学号尾数为0、2、4、8的做第一道题;学号尾数为1、3、7的做第二道题;学号尾数为5、6、9的做第三道题。
系统要求在MicrosoftVisualC++6.0编译平台上采用C语言编程实现。
课程设计报告(要求正规打印,A4幅面),内容包括:
●题目
●需求与总体设计(描述系统要实现什么功能;系统怎么实现,绘制系统功能模块结构图;数据结构的设计及用法说明)
●详细设计(描述系统包含的主函数和子函数;解释各个功能模块的软件功能;画系统的总体流程图,某种查询、插入、删除程序实现的子函数流程图,要求采用标准流程图图符至少画两个流程图)
●编码与实现(只能使用C语言,源程序编写格式要按照缩进方式,源程序要有详细的注释,使程序容易阅读。
源程序编写格式的规范和注释体现程序员的素质,必须从本课程设计开始培养。
)
●运行结果(包括输入数据的结果,查询、修改、删除的结果,能够将输出的结果以截屏方式呈现到课程设计报告中)
●总结(必须真实的说出自己在课程设计中的切身体会。
例如:
课程设计如何构思、如何设计、如何编程、如何调试、遇到的主要问题和解决方法,哪些地方使你”痛苦不堪”;创新之处;课程设计中存在的不足,需进一步改进的设想等等。
)
注:
每人以班级+学号+姓名创立目录,目录需包括课程设计报告电子文档和源程序以备检查。
然后由各班学习委员汇总到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数据结构
structuser//登陆者信息
{
charun[10];
charup[10];
}us[3]={"aaa","111","bbb","222","ccc","333"};
structyg//员工结构体
{
shortzt;//数据状态
longbh;//编号
charname[20];//名字
chartime[11];//时间
longmoney;//基本工资
longjj;//奖金
longkk;//扣款
longsf;//实发工资
};
整个程序只运用了结构体的数据结构,结构体运用于登陆者信息和员工信息,将员工信息封装在一个结构体里,再创立结构体数组,将多个员工信息储存在结构体数组中。
2详细设计
2.1系统功能设计
主函数和子函数:
系统包含一个主函数,和子函数,分别有登陆子函数,菜单子函数,增加数据子函数,更新数据子函数,查询数据子函数,删除数据子函数,统计数据子函数,重组文件子函数,排序数据子函数,最后两个分别是读取文件和写入文件子函数。
各个函数的功能:
主函数是一个入口程序从这里进入,再进入登陆函数,实现登陆操作。
登陆函数,只有拥有正确账号密码,正确的操作才能够进入菜单界面进行下一步的操作,而且输入错误三次后将会提示并强制退出。
菜单界面利用switch()函数将各个函数联系起来实现真正的菜单,输入正确的序号能够进行后续的各个操作。
读取函数,将特定文件中的信息,以特定的方式读取到正在运行的程序中,实现读写操作。
写入函数,在添加、更新、删除、重组操作过后进行写入操作,将变换后的数据重新写入文件中。
注:
每次写入都是将程序中的所有数据重新写入文件。
增加函数,能够新添员工,并将员工的数据输入,并利用写入函数,写入文件中。
在增加后会提示是否继续增加,提供了方便。
而且如果原数据中有相同编号的员工,会在输入编号后提示有相同的编号的员工,并重新输入编号。
增加了程序的健全性。
更新数据函数,以编号来确定更新的员工,更新将重新输入该编号员工的信息,并在更新后执行写入。
删除函数,执行该函数后,将有两种选择,按编号删除,或按名字删除,正确输入后将会将该编号或姓名的数据中的一项zt的值更改为1,使其在其它操作时不被识别,以达到不删除数据,但达到相同的效果的逻辑删除。
显示函数,有两种显示方式,按学号显示或按名字显示,学号显示为从小到大显示。
重组函数,将文件中逻辑删除的数据物理删除,用来节省储存空间,并能够加快运算速度。
统计数据,将文件中的数据统计、计算,并输出,给人以直观的方式显示数据。
排序函数,将数据以实发工资从大到小排序。
2.2系统流程设计
3编码实现
#defineMAX100
#include
#include
#include
structuser//登陆者信息
{
charun[10];
charup[10];
}us[3]={"aaa","111","bbb","222","ccc","333"};
structyg//员工结构体
{
shortzt;//数据状态
longbh;//编号
charname[20];//名字
chartime[11];//时间
longmoney;//基本工资
longjj;//奖金
longkk;//扣款
longsf;//实发工资
};
ygy[MAX];//定义数据体数组
intr=0;//全局变量,人数,包括逻辑删除人数
intp=0;//登陆的次数,用全局变量能在登陆三次失败时退出程序
voidread()//读取文件函数
{
FILE*fp;
charb;
inti;
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 fread(&y[i],sizeof(yg),1,fp); fclose(fp); } voidsave()//保存文件函数 { FILE*fp; inti; 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 fwrite(&y[i],sizeof(yg),1,fp); } fclose(fp); } voidzj_data()//增加数据函数 { ygyuangong; charb; inti; intk=0; yuangong.zt=0;//新建员工信息时,状态为0 do//用循环来寻找、避免相同编号的员工 { printf("编号: (例如: 123456)\n"); scanf("%d",&yuangong.bh); for(i=0;i if(y[i].bh==yuangong.bh&&y[i].zt==0) { printf("已有同编号员工无法添加! \n"); printf("请重新输入! \n"); k=1; break; } elseif(i==r-1) k=0; }while(k==1); printf("姓名: (例如: 张三(ortom))\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(); } voidgx_data()//更新数据 { ygyuangong; longnum; inti; printf("\n请输入要更新的员工的编号! \n"); scanf("%d",&num); for(i=0;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("姓名: (例如: 张三(ortom))\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; } elseif(i==r-1) printf("查无此人! \n"); } voidcz_data()//查询数据 { ygyuangong; inta,i; longnum; charna[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 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; } elseif(i==r-1) printf("查无此人! \n"); } elseif(a==2) { printf("请输入查询员工的姓名: "); scanf("%s",na); for(i=0;i if((strcmp(y[i].name,na)==0)&&y[i].zt==0) { yuangong=y[i]; printf("
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 课程设计 报告 语言 实现 源码 员工 工资管理 系统 模板
![提示](https://static.bdocx.com/images/bang_tan.gif)