职工信息管理系统课设报告材料.docx

上传人:b****5 文档编号:8308168 上传时间:2023-01-30 格式:DOCX 页数:34 大小:623.98KB
下载 相关 举报
职工信息管理系统课设报告材料.docx_第1页
第1页 / 共34页
职工信息管理系统课设报告材料.docx_第2页
第2页 / 共34页
职工信息管理系统课设报告材料.docx_第3页
第3页 / 共34页
职工信息管理系统课设报告材料.docx_第4页
第4页 / 共34页
职工信息管理系统课设报告材料.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

职工信息管理系统课设报告材料.docx

《职工信息管理系统课设报告材料.docx》由会员分享,可在线阅读,更多相关《职工信息管理系统课设报告材料.docx(34页珍藏版)》请在冰豆网上搜索。

职工信息管理系统课设报告材料.docx

职工信息管理系统课设报告材料

*******************

实践教学

*******************

 

计算机与通信学院

20年春季学期

 

C程序设计课程设计

 

题目:

职工信息管理系统

专业班级:

姓名:

学号:

指导教师:

成绩:

_______________

摘要

职工信息管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。

使用计算机对职工信息进行管理,具有手工管理所无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、性好、寿命长、成本低等。

这些优点能够极大地提高职工管理的效率,也是公司的科学化、正规化管理和与世界接轨的重要条件。

本系统利用C语言开发,实现了简单的职工基本信息的录入、追加、修改、查询、删除等操作,并且能利用文件系统长久地保留原始数据。

通过本系统的开发,我们熟悉了面向过程的程序设计的基本方法和步骤,对于C语言有了更深入的理解,并且较好地掌握了C语言的编程方法和技术。

关键字:

C语言;职工;信息管理系统;函数

一、需求分析

1.1问题描述

对单位的职工进行管理,包括插入、删除、查找、排序等功能。

1.2要求

职工对象包括(字符串)、性别(字符)、出生年月(数字)、工作年月(数字)、学历(字符串)、职务(字符串)、住址(字符串)、(字符串)等信息。

(1)新增一名职工:

将新增职工对象按以字典方式职工管理文件中。

(2)删除一名职工:

从职工管理文件中删除一名职工对象。

(3)查询:

从职工管理文件中查询符合某些条件的职工。

(4)修改:

检索某个职工对象,对其某些属性进行修改。

(5)排序:

按某种需要对职工对象文件进行排序。

1.3实现功能

(1)由键盘输入职工对象,以文件方式保存。

程序执行时先将文件读入存。

(2)对职工对象中的“”按字典顺序进行排序。

(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。

二、总体设计

根据需求分析,为了实现系统功能,我确定职工信息管理系统总体模块如图1所示。

图1工资管理系统功能模块图

三、详细设计

3.1数据定义

3.1.1定义表结点(typedefstructNode)

ypedefstructNode{

longintborn_time,work_time,tele_num;

charsex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX];

structNode*next;

}SLNode;

3.1.2定义职工信息(typedefstructDatatype)

typedefstruct{

longintborn_time,work_time,tele_num;

charname[ALLMAX],sex,degree[ALLMAX],job[ALLMAX],address[ALLMAX];

}DataType;

3.1.3初始化链表(ListInitiate(SLNode**head))

voidListInitiate(SLNode**head)//---------------------------------链表初始化

{

if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit

(1);//动态分配存储空间

(*head)->next=NULL;

}

3.2主函数设计

根据详细设计要求,可以得到主函数代码及其对应的程序流程图。

在主函数中,实现了友好的界面设计。

系统需要输入职工的基本信息:

、性别、出生年月、工作年月、学历、职务、住址、等。

这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有七种操作的调用:

新增职工信息:

SLNode*ListInsert(SLNode*head,DataTypex)

查询职工信息:

Listfind(SLNodehead)

删除职工信息:

ListDelete(SLNode*head)

修改职工信息:

ListModify(SLNode*head)

职工信息排序:

Listpaixu(SLNode*head)

保存职工信息:

put(SLNode*head,FILE*fp)

显示职工信息:

print(SLNode*head)

3.3算法流程图

3.3.1保存函数Save()的算法流程图如图2所示。

FILE*fp;

(fp=fopen(outfile,"wb"))==NULL

printf("\nSavingfile......\n");

printf("cannotopenfile\n");

p!

=NULL

fclose(fp);

fwrite(p,sizeof(SALARY),1,fp);

图2保存函数Save()的算法流程图

3.3.2主函数程序流程图如图3所示。

图3主函数程序流程图

3.3.3按查找的算法流程图如图4所示。

图4按查找的算法流程图

3.3.4排序算法流程图如图5所示。

图5排序算法流程图

四、编码

4.1总体框架

0,退出职工管理系统;

1,提示依次输入职工信息,录入完毕自动返回主界面;

2,提示输入删除的,成功正确返回,错误有提示无此员工信息;

3,会提示查询方式:

0.退出查询系统,回到主菜单1.对进行查询2.对出生年月进行查询3.对学历进行查询4.对工作年月进行查询,输入相应编号进行查询;

4,提示输入修改职工,然后进行依次修改职工所有信息;

5,提示:

0.退出排序系统,回到主菜单1.对性别进行排序2.对出生年月进行排序3.对工作年月进行排序4.对进行排序,输入进行查询。

(详细见附录)

4.2模块设计

模块

函数或数据结构

功能

链表数据类型

typedefstructNode

定义链表结点

typedefstructDatatype

定义职工信息

ListInitiate(SLNode*head)

初始化链表

系统处理模块

SLNode*ListInsert(SLNode*head,DataTypex)

插入职工信息

ListDelete(SLNode*head)

删除职工信息

ListModify(SLNode*head)

修改职工信息

put(SLNode*head,FILE*fp)

保存职工信息

Listfind(SLNodehead)

查询职工信息

Listpaixu(SLNode*head)

职工信息排序

输出模块

print(SLNode*head)

显示职工信息

五、测试

5.1职工管理系统主界面

在VisualC++6.0中运行本系统,可以得到图5所示的录入职工人数界面。

图7主菜单界面

在图5中输入0,进入图6所示的系统主菜单界面。

图6系统主菜单界面

5.2进入新增职工信息界面

在图6中输入1,进入图7所示的新增职工界面。

图7新增职工信息界面

5.3进入删除职工信息界面

在图7中输入2,进入图8所示的删除职工信息界面。

图8删除职工信息界面

5.4进入查询职工信息界面

在图8中输入3,进入图9所示的查询职工信息界面。

图9查询职工信息界面

在图9中输入1,进入图10所示的对查询界面。

图10对进行查询

5.5进入修改职工信息界面

在图10中先输入0返回图5所示的主菜单,再输入4,进入11图所示的修改职工信息界面。

图11修改职工信息系统界面

5.6进入职工信息排序界面

在图11中输入5,进入图12所示的职工信息排序界面。

图12职工信息排序界面

5.7退出系统

在图12中先输入0返回图5所示的主菜单,再输入0退出职工管理系统

图13退出职工管理系统

六、设计总结

本次课程设计是围绕数据结构进行。

根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。

但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。

把职工信息存储在一个单链表中,利用指针实现对职工信息的各项基本操作。

虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方。

那就是可以排序上面多设计几个算法。

实现多角度排序。

在这个系统中没有职工序号的信息,所以允许职工相同,在很大程度上面,可能是的职工信息重复。

经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的影响,及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。

当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。

因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。

此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。

致谢

通过一周的努力,我们顺利完成这一次的课程设计。

在这里,首先感谢指导老师x老师在知识和技术上的指导和帮助。

在x老师的帮助下,我们克服了许多技术上的难题,顺利地完成这次课程设计。

同时,也要感谢与我同做一个课题的xxx同学。

在我们两人的共同努力下,终于顺利地完成了这次课程设计。

参考文献

1.姜灵芝,余健.C语言课程设计案例精编.:

清华大学,2008

2.王新,雷.C语言课程设计.:

清华大学,2009

3.游洪跃、彭骏、谭斌.C语言程序设计实验与课程设计教程.:

清华大学,2011

4.王连相.C/C++程序设计上机指导与测试.:

中国铁道,2006

5.C语言函数手册,机械工业,1999

附录

#include

#include

#include

#include

#defineALLMAX100//总共统计的职工的人数

typedefstructNode

{

longintborn_date,work_date,tele_num;

charsex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX];

structNode*next;

}SLNode;

typedefstruct{

longintborn_date,work_date,tele_num;

charname[ALLMAX],sex,degree[ALLMAX],job[ALLMAX],address[ALLMAX];

}DataType;

 

voidListInitiate(SLNode**head)//链表初始化

{

if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit

(1);//动态分配存储空间

(*head)->next=NULL;

}

SLNode*ListInsert(SLNode*head,DataTypex)//职工信息的插入并按照升序排列

{

SLNode*p,*q,*s;

p=head->next;

if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit

(1);//动态分配存储空间

q->born_date=x.born_date;

q->work_date=x.work_date;

q->tele_num=x.tele_num;

strcpy(q->name,x.name);

q->sex=x.sex;

strcpy(q->degree,x.degree);

strcpy(q->job,x.job);

strcpy(q->address,x.address);

if(head->next==NULL){//如果只有链表的头结点,没有其他的结点,直接插入在头结点后面

head->next=q;

head->next->next=NULL;

}

else{//链表非空

for(;p;p=p->next){

if(p->next!

=NULL){

if(strcmp(p->name,x.name)<0&&strcmp(p->next->name,x.name)>0){//位于两个结点之间

s=p->next;

p->next=q;

q->next=s;

break;

}

//elseif(strcmp(p->name,x.name)==0)break;//如果相同则不插入信息

}

elseif(strcmp(p->name,x.name)<0&&p->next==NULL){//链表非空,并且在排序中是最后一个

p->next=q;

q->next=NULL;

break;

}

if(strcmp(p->name,x.name)>0){//位于链表头结点之后的位置

s=head->next;

head->next=q;

q->next=s;

break;

}

}

}

returnhead;

}

 

voidListDelete(SLNode*head)//职工信息的删除

{

SLNode*p,*s;

charx[20];

s=head;

p=head->next;

if(head->next==NULL){//链表为空,输出:

中无职工信息,无须删除!

printf("中无此职工信息,无须删除!

\n");

return;

}

printf("请输入要删除职工的:

\n");//输入要删除的人的

scanf("%s",x);

for(p;p;p=p->next){//在链表中从头到尾查找输入的人的

if(strcmp(p->name,x)==0){//如果存在,则删除,否则输出:

中无职工信息,无须删除!

s->next=p->next;

free(p);

printf("删除成功!

请继续操作!

\n");

break;

}

s=p;

}

if(p==NULL){//链表本身为空

printf("中无此职工信息,无须删除!

\n");

}

}

 

voidListModify(SLNode*head)//职工信息的修改

{

DataTypex;

SLNode*p;

p=head->next;

if(p==NULL){//链表本身为空

printf("职工无职工信息,无须修改!

\n");

return;

}

printf("请输入要修改的职工:

\n");

scanf("%s",x.name);

for(;p;p=p->next)

{

if(strcmp(x.name,p->name)==0){//查找到了该职工的信息

printf("依次写入该职工的新信息:

\n");

printf("请输入职工信息:

\n、性别、出生年月、工作年月、学历、职务、住址、\n");

scanf("%s%c%d%d%s%s%s%d",p->name,&p->sex,&p->born_date,&p->work_date,p->degree,p->job,p->address,&p->tele_num);

printf("修改成功!

请继续操作!

\n");

break;

}

}

if(p==NULL)//如果链表为空

printf("此职工不存在,无法修改其信息!

\n");

}

 

voidput(SLNode*head,FILE*fp)//职工信息的保存

{

SLNode*p;

if((fp=fopen("Employee.txt","w"))==NULL){//

printf("无法打开'Employee.txt'!

\n");

exit(0);

}

for(p=head->next;p;p=p->next)

{

fprintf(fp,"%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);

}

if(fclose(fp)){

printf("无法关闭'Employee.txt'!

\n");exit(0);

}

}

 

voidListfind(SLNodehead)//职工信息的查找

{

inti,j;

SLNode*p;

DataTypex;

if(head.next==NULL){//链表为空

printf("中无职工信息,查询失败!

\n");

return;

}

//返回主菜单

printf("\n");

printf("\t*********************************\n");

printf("\t*职工信息查询操作*\n");

printf("\t**\n");

printf("\t*0.退出查询系统,回到主菜单\t\t1.对进行查询\t*\n\t*2.对出生年月进行查询\t\t3.对学历进行查询\t*\n\t*4.对工作年月进行查询\t\t5.对职务进行查询\t*\n\t*6.对住址进行查询\t\t7.对进行查询\t*\n");

printf("\t*********************************\n");

while

(1)

{

printf("请输入您要选择的操作:

");

scanf("%d",&i);

if(i==0)//输入0,退出查询系统,回到主菜单

break;

elseif(i==1){//输入1,对进行查询

p=head.next;

printf("请输入:

");

scanf("%s",x.name);

j=0;

for(p;p;p=p->next){

if(strcmp(p->name,x.name)==0){//如果存在这个人,那么j自加

++j;

printf("\n、性别、出生年月、工作年月、学历、职务、住址、\n");

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);

}

}

if(j==0)//表示没有找到输入的信息

printf("职工中不存在此人!

\n");

elseprintf("查询成功!

继续操作!

\n");

}

elseif(i==2){//输入2,对出生年月进行查询

p=head.next;

printf("请输入出生年月:

");

scanf("%d",&x.born_date);

j=0;

for(p;p;p=p->next){

if(p->born_date==x.born_date){//输入的出生年月在链表中存在

++j;//如果存在这个人,那么j自加

printf("\n、性别、出生年月、工作年月、学历、职务、住址、\n");

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);

}

}

if(j==0)//表示没有找到输入的信息

printf("职工中没有这个时间出生的!

\n");

elseprintf("查询成功!

请继续操作!

\n");

}

elseif(i==4){//输入4,对工作年月进行查询

p=head.next;

printf("请输入工作年月:

");

scanf("%d",&x.work_date);

j=0;

for(p;p;p=p->next){

if(p->work_date==x.work_date){

++j;//如果存在这个人,那么j自加

printf("\n、性别、出生年月、工作年月、学历、职务、住址、\n");

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);

}

}

if(j==0)//表示没有找到输入的信息

printf("职工中没有这个时间工作的!

\n");

elseprintf("查询成功!

请继续操作!

\n");

}

elseif(i==3){//输入3,对学历进行查询

p=head.next;

printf("请输入学历:

");

scanf("%s",x.degree);

j=0;

for(p;p;p=p->next){

if(strcmp(p->degree,x.degree)==0){

++j;//如果存在这个人,那么j自加

printf("\n、性别、出生年月、工作年月、学历、职务、住址、\n");

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);

}

}

if(j==0)//表示没有找到输入的信息

printf("职工中没有这种学历的!

\n");

elseprintf("查询成功!

请继续操作!

\n");

}

elseif(i==5){//输入5,对职务进行查询

p=head.next;

printf("请输入职务:

");

scanf("%s",x.job);

j=0;

for(p;p;p=p->next){

if(strcmp(p->job,x.job)==0){

++j;//如果存在这个人,那么j自加

printf("\n、性别、出生年月、工作年月、学历、职务、住址、\n");

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->born_date,p->work_date,p->

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1