C语言课程设计小型企业人事管理系统

上传人:沈*** 文档编号:80113169 上传时间:2022-04-24 格式:DOC 页数:23 大小:131.04KB
收藏 版权申诉 举报 下载
C语言课程设计小型企业人事管理系统_第1页
第1页 / 共23页
C语言课程设计小型企业人事管理系统_第2页
第2页 / 共23页
C语言课程设计小型企业人事管理系统_第3页
第3页 / 共23页
资源描述:

《C语言课程设计小型企业人事管理系统》由会员分享,可在线阅读,更多相关《C语言课程设计小型企业人事管理系统(23页珍藏版)》请在装配图网上搜索。

1、唐山学院课程设计唐 山 学 院 C语言程序设计 课 程 设 计 题 目 小型企业人事管理管理系统 系 (部) 信息工程系 班 级 通信工程2班 姓 名 学 号 4070214218 指导教师 2009年 6 月 29 日至 7 月 3 日 共 1 周 2009年 7 月 3 日1 需求分析在对小型企业人事管理管理系统进行需求分析的过程中,需要确定系统的主要功能,对软件开发的主要目的、软件的使用领域和有关该软件开发的软硬件环境进行详细的分析。下面从系统功能、运行环境、功能模块描述等几个方面进行需求分析。1.1 系统概述小型企业人事管理系统是运行于Windows系统下的应用软件,主要用于对企业人员

2、基本管理,包括工人基本信息如工号、姓名以及职称、工资进行增加、删除、修改、查询、插入、排序、统计、存盘等基本操作。1.2 功能需求小型企业人事管理系统软件为企业的管理人员提供了一个对职工基本信息进行管理以及对应发工资、税率进行计算的平台,给用户提供了一个简单明了的用户接口,功能需求如下:1.2.1 输入用户根据提示输入职工的的工号、姓名、基本工资、奖金、职称,软件可自动计算出该职工的应发工资和税率,并自动与该职工的基本信息存在一起。该软件可一次性输入多条职工基本信息记录。1.2.2 添加可在原有职工基本信息文件的基础上增加新的职工基本信息记录。在增加新职工基本信息的过程中,系统提示用户输入工号

3、、姓名、职称、基本工资、奖金,最终税款和应发工资要求系统自动计算获得。1.2.3 删除 删除职工基本信息:提示用户输入要进行删除操作的工号,如果在文件中有该职工的信息存在,则将该工号所对应的姓名、工号、基本工资、职称等在对应文件中加以删除。1.2.4 修改 修改职工信息:提示用户输入要进行修改操作的工号,如果在文件中有该职工的信息存在,则将提示用户输入该工号对应的职工姓名、职称、基本工资等需要修改的选项。1.2.4 查询 查询职工信息:可根据姓名或工号查询两个具体需求,提示用户输入要查询职工信息的工号或姓名,如果在磁盘文件中有对应的职工信息,则提示用户已找到,并逐项列出对应职工的基本信息,方便

4、用户对职工管理。1.2.5 浏览逐条显示全部职工信息。1.2.6 排序该项需求要求根据职工的姓名、工号或职称进行排序,以便用户对职工基本状况有较为直观方便的了解。1.2.7 插入该项需求要求根据职工的工号确定插入位置,根据提示逐项输入职工的基本信息,工号不能重复,如有重复,系统要求重新入。1.2.8 存盘 该项需求要求将用户修改后的信息存入指定文件,以长期保存,以备以后使用。1.2.9 统计该项需求要求根据职称或工资对已存职工信息进行统计,最后显示统计出的各项职工的基本信息,并且算出总的条数。2 总体设计 进行总体设计的目标是用比较抽象概括的方式确定系统如何完成预定的任务,进而确定组成系统的每

5、个程序的结构。2.1 系统功能结构图职工信息管理输入职工信息删除职工信息修改职工信息浏览职工信息查询职工信息排序职工信息插入职工信息统计职工信息图1系统功能结构图2.2开发与设计的总体思想 本系统主要应用结构化的设计思想实现职工信息管理系统的增加、删除、修改、插入和查找等典型管理功能。各主要模块的数据均存储在文件中,因此包含对文件的读、写等基本操作。在软件开发过程中应用了高级语言程序设计中的基本控制结构,如选择、循环、顺序结构。 系统的设计方法是结构化设计方法,采用C语言进行开发。3 详细设计3.1 构体设计本程序中结构体包括职工基本信息,字符串的工号和姓名,字符的职称,浮点型的基本工资、奖金

6、、税款、应发工资,具体结构如下:typedef struct employee char num10; /*职工编号*/ char name15; /*职工姓名*/ char posit; /*职工职称*/ float jbgz; /*基本工资*/ float jj; /*奖金*/ float yfgz; /*应发工资*/ float sk; /*税款*/ float sfgz; /*实发工资*/ZGGZ;3.2 单界面设计菜单界面将程序的功能以直观清楚的展现在用户面前,菜单中的每项功能与各个函数相连,通过用户的选择调用与其相关的函数,以实现系统的功能。具体菜单设计如下: The Employ

7、ee Salary Management System *Menu* * 1 输入记录 2 删除记录 * * 3 查找记录 4 修改记录 * * 5 插入记录 6 统计记录 * * 7 排序记录 8 保存记录 * * 9 显示记录 0 退出系统 * * * * 3.3 主函数设计在主函数中打开文件,把文件中的每个结构体放在内存中的结构体数组中,各个函数都是对于内存中的这些数组的操作,最后再把内存中的数组存回文件中,以实现对职工的信息管理。主函数把各个输入、删除、查找等基本操作联系在一起,通过主函数对各个功能函数的调用,实现了整个系统的管理功能。3.4 功能函数设计3.4.1 输入函数设计输入函

8、数中调用了显示函数,先将文件中的职工信息显示出来,以方便用户将新的职工信息输入。此函数可提示用户将职工信息逐条输入,输入0表示输入结束,返回主函数。新输入的信息将放在以前信息的后面。 3.4.2 删除函数根据用户输入的工号或姓名找到被删除的元素,将此元素后面的每一个元素向前移,则被删除的元素被覆盖,实现删除功能。若没有找到被删除元素,则提示记录中没有要删除的项。3.4.3 查找函数提示用户输入查找方式,根据用户确定的查找方式和用户输入的职工信息,从结构体数组中找出相对应的项,并显示出来。如果没有找到,则提示记录中没有要查找的项。3.4.4 修改函数提示用户输入要修改项的工号,查找对应的项显示出

9、该项的职工信息,提示用户输入要修改的信息,将修改后的信息覆盖以前信息。如果没有找到对应工号,则提示记录中没有要修改的项。3.4.5 插入函数提示用户选择方式然后输入工号,根据工号确定插入位置,再提示用户输入要插入的职工信息,工号不能用与以前的职工工号重复,如果重复则提示重新输入工号。将数组中其他元素相应移动,实现插入功能。3.4.6 统计函数 提示用户输选择项目,然后输入统计条件,函数根据条件筛选,并显示出符合条件的各项,算出总的项数。3.4.7 排序函数 提示用户选择排序项目,函数根据用户排序的项目对数组重新排序,排序完毕提示注意存盘。3.4.8 保存函数当用户要退出系统时,提示用户是否要存

10、盘。如果存盘此函数则将数据写入文件中,以保存下次使用。3.4.9 显示函数此函数显示内存中的所有员工的信息。4 总结初见这个程序要求觉得有点难,因为要用的结构体数组或琏表,平时的小程序从来没用过这些,这些对我来说很是生疏,虽然程序的整体构架和各个函数的功能早已心里有数,但迟迟写不出代码。直到陈老师把一个程序的模板给我们,里面包括主函数和输入输出函数,整个程序是用的结构体数组,思想是在主函数中打开文件,把文件中的每个结构体放在内存中的结构体数组中,各个函数都是对于内存中的这些数组的操作,最后再把内存中的数组存回文件中。我一下子豁然开朗,对于我来说数组是相当熟悉的,查找、排序、修改、统计这些都不太

11、难,不就是对数组的一些基本处理吗?我一下子信心倍增,全身心开始自己写程序。刚写出来的程序不免有很多错误,经过一番改正,改正完语法错误,编译总算通过了,但是在程序运行中还有不少逻辑错误,但在陈老师的帮助和我的努力终于也都改正了。举个小例子:在输入函数中,有一个字符型的职称输入,但每次运行时都无法输入,调用显示函数显示的信息中都没有职称,经过仔细检查输入函数,scanf(%c,&(tpn.posit);终于发现在输入职称前不可避免的摁了一下换行键,scanf将换行符放在职称中了。针对这种现象我在scanf前面放了getchar,这样换行符就放在了getchar中,csanf就接收到换行符后面的表示

12、职称的字符。再举个例子:在查找函数中,如果找到对应项则显示出来,但是每次显示闪一下就回到主函数,根本就来不及看清楚,于是我在查找函数的return前面加了两个getchar();这样只有显示完让用户看清记录后再输入两个字符才能返回主函数,使系统更加实用方便。这样的例子很多,每一次改正都是一次进步,都有一些收获,还有一点启发。通过每次的一点一点地完善,终于把整个系统做完了,看着自己做的系统真的能实现那么多功能,心理有说不出的高兴和开心。但我的能力还是有限的,这个职工管理系统还有很多不足。一方面这个程序是将文件中所有结构体复制到内存的数组中,这将占用大量内存空间,同时内存中的数组是个数限制的,如果

13、文件中的内容过多,数组将够用。另一方面,用数组实现插入或删除等功能很是不方便,插入或删除一个元素需要移动很多数组中的内容,程序代码长,运行时间长。总得来的说这次c语言课程设计让我更深刻认识了c语言,同时也培养了我综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力。这也是对我们实际工作能力的具体训练和考察过程。参考文献1 谭浩强,张基温C语言程序设计教程(第3版)M北京:高等教育出版社,20062 吕凤煮C语言基础教程基础理论与案例M北京:清华大学出版社,20053 黄明、梁旭、万洪莉C语言课程设计M北京:电子工业出版社,20064 郭宁,郑小玲管理信息系统M北京:人民邮电出版社,2

14、0065 赵池龙,杨林,陈伟实用软件工程M北京:电子工业出版社,2006附录程序清单:#include stdio.h /*标准输入输出函数库*/#include stdlib.h /*标准函数库*/#include string.h /*字符串函数库*/#include conio.h /*屏幕操作函数库*/#define FORMAT %-8s%-10s%-6c%-10.2f%-8.2f%-10.2f%-10.2f%-8.2fn#define DATA p-num,p-name,p-posit,p-jbgz,p-jj,p-yfgz,p-sk,p-sfgz#define N 60#defin

15、e Head printf(工号 姓名 职称 基本工资 奖金 应发工资 税款 实发工资 n)int saveflag=0; /*是否需要存盘的标志变量*/char sss15;typedef struct employee char num10; /*职工编号*/ char name15; /*职工姓名*/ char posit; float jbgz; /*基本工资*/ float jj; /*奖金*/ float yfgz; /*应发工资*/ float sk; /*税款*/ float sfgz; /*实发工资*/ZGGZ;int f1(ZGGZ tp,int count);void f

16、2(ZGGZ tp,int count);void f3(ZGGZ tp,int count);void f5(ZGGZ tp,int count);void f6(ZGGZ tp,int count);int Insert(ZGGZ tp,int count);void ArrDisp(ZGGZ tp,int n);int EleAdd(ZGGZ tp,int n);void Save(ZGGZ tp,int n);void menu(void);void Wrong(void);void main(void) ZGGZ gzN; /*定义ZGGZ结构体*/ FILE *fp; /*文件指针

17、*/ int select; /*保存选择结果变量*/ char ch; /*保存(y,Y,n,N)*/ int count=0; /*保存文件中的记录条数(或元素个数)*/ fp=fopen(C:zggz,ab+); /*以追加方式打开二进制文件c:zggz,可读可写,若此文件不存在,会创建此文件*/ if(fp=NULL) printf(n文件打开失败!n); exit(0); while(!feof(fp) if(fread(&gzcount,sizeof(ZGGZ),1,fp)=1) /*一次从文件中读取一条职工工资记录*/ count+; fclose(fp); /*关闭文件*/ w

18、hile(1) menu(); printf(n 输入您的选择(09):); /*显示提示信息*/ scanf(%d,&select); if(select=0) if(saveflag=1) /*若对数组的数据有修改且未进行存盘操作,则此标志为1*/ getchar(); printf(n是否保存文件?(y/n):); scanf(%c,&ch); if(ch=y|ch=Y) Save(gz,count); printf(n 谢谢使用!); getchar(); break; switch(select) case 1:count=EleAdd(gz,count);break; case 2

19、:count=f1(gz,count);break; case 3:f2(gz,count);break; case 4:f3(gz,count);break; case 5:count=Insert(gz,count);break; case 6:f5(gz,count);break; case 7:f6(gz,count);break; case 8:Save(gz,count);break; case 9:system(cls);ArrDisp(gz,count);break; default: Wrong();getchar();break; void menu(void) /*主菜单

20、*/ system(cls); /*调用DOS命令,清屏.与clrscr()功能相同*/ printf( The Employee Salary Management System n); printf( *Menu*n); printf( * 1 输入记录 2 删除记录 *n); printf( * 3 查找记录 4 修改记录 *n); printf( * 5 插入记录 6 统计记录 *n); printf( * 7 排序记录 8 保存记录 *n); printf( * 9 显示记录 0 退出系统 *n); printf( *n);void ArrDisp(ZGGZ tp,int n) /*

21、显示函数*/ ZGGZ *p; int i; if(n=0) /*表示没有职工工资记录*/ printf(n没有记录!n); getchar(); return; printf(nn); Head; i=0; while(in) /*逐条输出数组中存储的职工信息*/ p=&tpi; printf(FORMAT,DATA); i+; getchar(); getchar();void Wrong(void) printf(n 输入错误,按任意键继续!n); getchar(); getchar();int EleAdd(ZGGZ tp,int n) /*输入函数*/ char ch; int i

22、,flag=0; system(cls); ArrDisp(tp,n); /*先打印出已有的职工工资信息*/ while(1) /*一次可输入多条记录,直至输入职工编号为0的记录才结束添加操作*/ while(1) /*输入职工编号,保证该编号没有被使用, 若输入编号为0,则退出添加记录操作*/ printf(输入工号(0返回):); scanf(%s,sss); flag=0; if(strcmp(sss,0)=0) /*输入为0,则退出添加操作,返回主界面*/ return n; i=0; while(iopen file error!n); getchar(); return ; for

23、(i=0;i0) getchar(); printf(nnn文件保存成功!记录总数为:%dn,i); getchar(); saveflag=0; else system(cls); printf(没有记录!n); getchar(); fclose(fp); /*关闭此文件*/int f1(ZGGZ tp, int count)/*删除函数*/ int i,old=count,flage=0;char del20;printf(原有纪录如下:n);ArrDisp(tp,count);printf(请输入要删除的工号或姓名:n); scanf(%s,del);for(i=0;icount;i+

24、)if(strcmp(tpi.num,del)=0|strcmp(tpi.name,del)=0)count-; flage=1;break;if(flage=0) printf( 记录中没有要删除的项!n);getchar();getchar();return count;for(;iold;i+)tpi=tpi+1;printf( 注意存盘! n);printf(任意键返回主菜单);getchar();getchar();return count;void f2(ZGGZ tp,int count) /*查找函数*/int i,choice,flage=0;char numb10,nam1

25、5;ZGGZ *p;printf(原有纪录如下:n);ArrDisp(tp,count);printf(请输入要查找的项n);printf( 1 姓名 n); printf( 2 工号 n);scanf(%d,&choice);switch(choice)case 1: printf(请输入要查找的姓名n);scanf(%s,nam);for(i=0;icount;i+)if(strcmp(tpi.name,nam)=0)p=&tpi;flage=1;Head;printf(FORMAT,DATA);if(flage=0) printf( 没有记录 n);getchar();getchar()

26、;break;case 2:printf(请输入要查找的工号n);scanf(%s,numb); for(i=0;icount;i+)if(strcmp(tpi.num,numb)=0) p=&tpi; flage=1; Head;printf(FORMAT,DATA); if(flage=0)printf( 没有记录 n);getchar(); getchar();break; default: Wrong();getchar();break;printf(任意键返回主菜单);void f3(ZGGZ tp,int count) /*修改函数*/int change,flage=0,i,fl

27、a=0;char pos;ZGGZ *p;float jb,jjj;printf(原有记录如下:n);ArrDisp(tp,count);printf(请输入要修改的工号n);scanf(%s,sss);for(i=0;iposit=pos; printf(修改成功,请注意存盘!n); break; case 3: printf(请输入修改后的基本工资n); scanf(%f,&jb); p-jbgz=jb; printf(修改成功,请注意存盘!n); break;case 4: printf(请输入修改后的奖金n); scanf(%f,&jjj); p-jj=jjj; printf(修改成功

28、,请注意存盘!n); break;default :Wrong();tpi.yfgz=tpi.jbgz+tpi.jj; /*计算应发工资*/ tpi.sk=(float)(tpi.yfgz*0.12); /*计算税金,这里取应发工资的百分之一十二*/ tpi.sfgz=tpi.yfgz-tpi.sk;getchar();getchar();printf(任意键返回主菜单);void f5(ZGGZ tp,int count) /*统计函数*/char pomax,pomin;float jbmax,jbmin;float yfmax,yfmin;int t,n=0,i;ZGGZ *p;prin

29、tf(请选择要统计的项n);printf(1职称 2基本工资 3应发工资 n);scanf(%d,&t);switch(t)case 1:getchar();printf(请输入统计的上限职称n); scanf(%c,&pomax); getchar();printf(请输入统计的下限职称n);scanf(%c,&pomin);for(i=0;i=pomax&tpi.posit=pomin) p=&tpi; n+; printf(FORMAT,DATA);printf(统计完毕,共有%d个记录!n,n); getchar();getchar();break;case 2:printf(请输入统

30、计的最高基本工资n);scanf(%f,&jbmax);printf(请输入统计的最低基本工资n);scanf(%f,&jbmin);for(i=0;i=jbmin&tpi.jbgz=jbmax) p=&tpi; n+; printf(FORMAT,DATA);printf(统计完毕,共有%d个记录!n,n);break;case 3:printf(请输入统计的最高应发工资n);scanf(%f,&yfmax);printf(请输入统计的最低应发工资n);scanf(%f,&yfmin);for(i=0;i=yfmin&tpi.yfgz=yfmax) p=&tpi; n+; printf(FO

31、RMAT,DATA);printf(统计完毕,共有%d个记录!n,n);break;default :Wrong(); getchar();getchar();printf(任意键返回主菜单);void f6(ZGGZ tp,int count) /*排序函数*/int px,i,j;ZGGZ tmp;printf(原有纪录如下:n);ArrDisp(tp,count);printf(请输入要排序的项n);printf(1工号 2姓名 3职称n);scanf(%d,&px);switch(px)case 1:for(i=0;icount-1;i+)for(j=i+1;j0) tmp=tpi;t

32、pi=tpj;tpj=tmp;break;case 2: for(i=0;icount-1;i+) for(j=i+1;j0) tmp=tpi; tpi=tpj; tpj=tmp; ;break;case 3: for(i=0;icount-1;i+) for(j=i+1;jtpj.posit) tmp=tpi; tpi=tpj; tpj=tmp; ;break;default:Wrong();printf(排序完毕,请注意存盘,任意键返回);getchar(); getchar();int Insert(ZGGZ tp,int count)/*插入函数*/int cr,i,j,fla=0,f

33、lage=0,q; ZGGZ tmp;char numb10;printf(原有纪录如下n);ArrDisp(tp,count); printf(请选择插入方式n);printf(1插在某项之前 2插在某项之后n);scanf(%d,&cr);switch(cr)case 1: printf(请输入插入项的前一项的工号或姓名n);scanf(%s,sss);for(i=0;icount;i+)if(strcmp(tpi.name,sss)=0|strcmp(tpi.num,sss)=0)tmp=tpi;q=i;flage=1;printf(以确定插入位置n); while(1)printf(输

34、入工号:); scanf(%s,numb);for(i=0;iq+1;j-)tpj=tpj-1;tpq+1=tmp;count+;printf(插入成功,注意存盘!); if(flage=0)printf(没有找到插入位置!n);break;case 2:printf(请输入插入项的后一项的工号或姓名n);scanf(%s,sss);for(i=0;icount;i+)if(strcmp(tpi.name,sss)=0|strcmp(tpi.num,sss)=0)tmp=tpi+1;q=i;flage=1;printf(以确定插入位置n); while(1)printf(输入工号:); scanf(%s,numb);for(i=0;iq+2;j-)tpj=tpj-1;tpq+2=tmp;count+;printf(插入成功,注意存盘!); if(flage=0)printf(没有找到插入位置!n);break;default: Wrong();getchar();getchar();return count;22

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!