员工信息管理系统数据结构复习课程.docx
《员工信息管理系统数据结构复习课程.docx》由会员分享,可在线阅读,更多相关《员工信息管理系统数据结构复习课程.docx(20页珍藏版)》请在冰豆网上搜索。
员工信息管理系统数据结构复习课程
员工信息管理系统(数据结构)
员工信息管理系统课程设计报告
系别:
计算机与信息工程系
班级:
B080501
姓名:
李海鹏
学号:
B08050128
指导教师:
张红霞
课设时间:
2010-6-21到2010-6-25
摘要
员工信息管理系统属于信息管理系统。
员工信息管理是每个公司不可缺少的。
系统用C程序开发,主要在于建立好一个合适的数据结构,并要求程序简洁实用。
本系统利用C语言简洁、灵活,数据结构丰富等特点,编写适合公司使用的系统。
整个系统使用起来也比较方便,入手简单,操作方便。
论文主要介绍了程序设计过程、设计方案以及测试过程,重点讲解了设计过程中的思想,技术解决方案等等。
关键字:
员工信息管理,C程序,数据结构
前言
本课程设计旨在理论学习和基础实验的基础上,开发规模较大的程序,掌握应用计算机编程解决实际问题的基本方法,熟悉C程序开发的全过程,掌握数据结构的使用方法,熟练应用各种数据结构。
本次任务是根据给定的数据和程序,应用单向链表处理一系列公司员工的信息。
通过整个程序开发的过程,提高综合应用C语言的能力、编程和调试能力,为进一步学习相关专业课程创建较扎实的理论基础和实践基础。
报告将分6个章节来详细讲述本次课设题目的开发过程。
第1章主要描述课设的题目及要求;
第2章来介绍程序开发运行环境;
第3章介绍程序主体设计,网络程序概要;
第4章是对程序进行详细分析,对各个函数进行详细描述,并阐述程序实现技术等信息;
第5章为测试过程,主要用测试过程中的图片来表述最终信息;
第6章也是最后一章,为本次实践活动的心得体会。
第1章课设题目
1.1课设题目
每个员工的信息包括:
编号、姓名、性别、出生年月、学历、职务、电话、住址等。
系统能够完成员工信息的查询、更新、插入、删除、排序等功能。
1.2基本要求
(1)每条记录内,包括员工的个人信息,有:
编号、姓名、性别、出生年月、学历、职务、电话、住址等;
(2)按不同关键字(如编号,姓名等),对所有员工的信息进行排序;
(3)按照指定条件查找某员工所有信息;
(4)按编号对某个员工的信息进行修改;
(5)加入新员工的信息,并实现排序;
(6)按编号删除已离职的员工的信息。
1.3其他需求
程序除需完成基本功能外,程序源代码还应具有良好的编程结构和适当的注释,运行界面清晰,提示内容明确,易于操作。
第2章开发运行环境及相关知识
2.1运行环境
软件环境:
Windows2000,WindowsXP和WindowsNT4.0。
2.2开发工具
微软公司的MicrosoftVisualC++6.0。
2.3开发工具简介
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000,WindowsXP和WindowsNT4.0。
所以实际中,更多的是以VisualC++6.0为平台。
VisualC++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。
第3章程序总体设计
3.1主要功能模块
依据程序的数据结构和功能,遵照“自顶向下”原则,描述该程序的层次结构,在总体上包括数据的录入、增加、删除、查找、更改和数据的排序等功能模块。
图3-1程序主体
3.2数据结构
依据给定的数据格式,个人信息由九个字段来组成,即编号、姓名、性别、生日、学历、职务、电话和住址,外加一个判断关键字。
本课程设计根据功能需求,使用线性结构来组织数据,因为数据占据空间比较大,要对表中某项数据进行操作,所以使用链表比较方便。
结构体定义:
typedefstructStuff
{
charnumber[10];//编号
charname[10];//姓名
charsex[8];//性别
charbirthday[10];//生日
chardegree[20];//学历
charbusiness[20];//职务
charphone[15];//电话
charplace[50];//住址
charcon[50];//判断关键字
structStuff*next;//指针域
}Stuff;
信息存储:
信息存储结构如图3-2
图3-2链式存储结构
第4章程序详细设计及实现
4.1输入函数
函数原型:
Stuff*App(Stuff*head);
函数功能:
通过输入各项数据给数据元素,来建立一个数据表。
算法要点:
(1)用循环控制输入记录;
(2)为每一结构体数据项输入数据;
(3)返回输入记录数。
4.2排序函数
函数原型:
voidSort(Stuff*head);
voidScpy(char*p,char*q);
intSel(charch,Stuff*p,Stuff*q);
函数功能:
按照指定关键字对员工信息进行排序。
算法要点:
(1)比较法对信息进行排序;
(2)使用交换函数,对每项信息进行交换。
4.3显示函数
函数原型:
voidShow(Stuff*head);
函数功能:
输出表中所有节点的信息。
算法要点:
使用循环输出所有信息。
程序清单:
4.4查找函数
函数原型:
Stuff*Search(Stuff*head);
函数功能:
按照指定关键字,对相应员工信息进行查找。
算法要点:
(1)输入字段和信息相应字段的比较;
(2)函数中调用删除和更改函数。
4.5更改函数
函数原型:
Stuff*Change(Stuff*head,charn[10]);
函数功能:
输入员工编号,查找到员工信息,对其信息进行更新。
算法要点:
(1)信息查找;
(2)信息重新录入及保存。
4.6删除函数
函数原型:
Stuff*Del(Stuff*head,charn[10]);
函数功能:
查找到要删除员工的相应信息,并将其从表中永久的删除。
算法要点:
(1)按关键字查找信息;
(2)链表中删除节点信息,并释放节点空间。
4.7主函数
主函数主要是调用以上的子函数,用开关语句进行选择性的调用。
大致程序如下:
switch(Menu())
{
case1:
调用函数语句;
break;
case2:
调用函数语句;
break;
……
case0:
退出程序语句;
default:
printf("输入错误,请重新输入!
\n");
}
4.8其他函数
其他函数主要起到辅助功能,如菜单函数,主要起到引导作用;释放空间函数,主要用于释放已经删除节点的信息,或者释放整个链表的节点信息。
菜单函数原型:
charMenu();
释放函数原型:
voidFre(Stuff*head);
第5章系统功能测试
5.1系统主界面
图5-1系统主界面
5.2输入数据
(1)输入操作字符1;
(2)输入员工信息;
(3)输入“#”字符结束输入。
图5-2输入操作
5.3显示数据
图5-3显示信息
5.4信息排序
图5-4信息排序
5.5更改信息
图5-5更正信息
5.6删除信息
图5-6删除信息
第6章课设总结
如何才能真正的去掌握编程的方法,如何才能真正的去理解书上的理论信息,理论知识用于实践才是最终的目的。
通过本次数据结构课程设计,我对数据结构的理论知识有了更为直接的认识,从实际中获得了很多宝贵的经验,这些对我以后做程序开发将是一笔很宝贵的财富。
我有以下两点感触:
(1)没有解决不了的问题。
这个程序在课设前一周就开始着手编写,中间遇到了不少的问题,由于以前写过类似的程序,所以对其中的一些错误很是敏感,也通过不少的途径来解决了问题。
比如,通过和网上的一些程序代码的对比,解决了自己程序中输出乱码的问题。
(2)注重团队协作。
虽然此次课设是完全个人完成的,但是我还是要强调团队的重要性,因为我们以后走项的程序开发的道路上,没有单枪匹马的,都是一个团队协作完成的,所以今后的程序开发过程中,尽可能的和他人合作。
万事开头难,学好编程,我还有很长的路要走。
第7章程序清单
#include"stdio.h"
#include"stdlib.h"
#include"windows.h"//清屏函数头文件
#include"string.h"
typedefstructStuff
{
charnumber[10];//编号
charname[10];//姓名
charsex[8];//性别
charbirthday[10];//生日
chardegree[20];//学历
charbusiness[20];//职务
charphone[15];//电话
charplace[50];//住址
charcon[50];//判断关键字
structStuff*next;
}Stuff;
charMenu();//菜单函数
Stuff*App(Stuff*head);//添加函数
voidSort(Stuff*head);//排序函数
Stuff*Search(Stuff*head);//查找函数
Stuff*Change(Stuff*head,charn[10]);//更改函数
voidScpy(char*p,char*q);//排序中用于交换员工信息
Stuff*Del(Stuff*head,charn[10]);//删除函数
intSel(charch,Stuff*p,Stuff*q);//判断排序及关键字专用函数
voidShow(Stuff*head);//输出函数
voidFre(Stuff*head);//释放函数
intn=1;//定义全局变量,实现人数统计
//菜单函数
charMenu(void)
{
intch;
printf("---------------------------菜单-------------------------\n");
printf("1.添加员工信息\n");
printf("2.员工信息排序\n");
printf("3.查找员工信息\n");
printf("4.输出员工信息\n");
printf("5.更改员工信息\n");
printf("6.删除员工信息\n");
printf("0.退出\n");
printf("--------------------------------------------------------\n");
printf(“请选择你的操作:
”);
scanf("%d",&ch);
returnch;
}
//添加成员函数
Stuff*App(Stuff*head)
{
Stuff*p=NULL,*q=head;
while(n)
{
p=(Stuff*)malloc(sizeof(Stuff));//申请结构体空间
if(p==NULL)
{
printf("空间不足,自动退出系统!
\n");
exit(0);
}
p->next=NULL;//指针域为空
printf("请输入第%d名员工:
\n",n);
printf("编号|姓名|性别|出生年月|学历|职务|电话|住址:
\n");
getchar();
scanf("%s",p->number);
if(strcmp(p->number,"#"))
{
++n;
scanf("%s%s%s%s%s%s%s",p->name,p->sex,p->birthday,p->degree,p->business,p->phone,p->place);
p->con[0]='\0';//防止后面判断出现随机值
if(head==NULL)
head=p;
else
{
while(q->next!
=NULL)
q=q->next;
q->next=p;
}
q=p;//尾插法
}
if(!
strcmp(p->number,"#"))
{
free(p);//完成添加,释放多余空间
break;
}
}
returnhead;
}
//排序函数
voidSort(Stuff*head)
{
charch;
Stuff*p,*q,*r;
while
(1)
{
printf("请选择排序条件:
1.编号|2.姓名|0.退出\n");
getchar();
scanf("%c",&ch);
if(ch=='0')
break;
if(ch<'1'||ch>'2')
{
printf("输入错误,请重新输入!
\n");
continue;
}
p=head;
while(p->next!
=NULL)//选择排序
{
q=p->next;
r=p;
while(q!
=NULL)
{
if(Sel(ch,r,q))//调用判断函数
r=q;
q=q->next;
}
if(r!
=p)//交换信息
{
Scpy(r->number,p->number);
Scpy(r->name,p->name);
Scpy(r->sex,p->sex);
Scpy(r->birthday,p->birthday);
Scpy(r->degree,p->degree);
Scpy(r->business,p->business);
Scpy(r->phone,p->phone);
Scpy(r->place,p->place);
}
p=p->next;
}
Show(head);//输出
}
}
//交换函数
voidScpy(char*p,char*q)
{
charc[50];
strcpy(c,p);
strcpy(p,q);
strcpy(q,c);
}
//判断函数
intSel(charch,Stuff*p,Stuff*q)
{
switch(ch)//实现各个关键字查找
{
case'1':
returnstrcmp(q->number,p->number)<0||strcmp(q->con,p->number)==0;case'2':
returnstrcmp(q->name,p->name)<0||strcmp(q->con,p->name)==0;
default:
exit(0);
}
}
//查找函数
Stuff*Search(Stuff*head)
{
Stuff*p=NULL,*q;
intflag;//查找判断
charch,sh;//两个控制变量
q=&a;
while
(1)
{
printf("请输入要查找的条件:
1.编号2.姓名0.退出\n");
scanf("%c",&ch);
if(ch=='0')
break;
if(ch<'1'||ch>'2')
{
printf("输入错误,请重新输入!
\n");
continue;
}
getchar();
printf("请输入:
");
gets(q->con);
p=head;//指向表头
flag=0;
while(p!
=NULL)
{
if(strcmp(q->con,p->number)==0||strcmp(q->con,p->name)==0)
{
printf("员工信息如下:
\n");
printf("编号|姓名|性别|出生年月|学历|职务|电话|住址\n%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->sex,p->birthday,p->degree,p->business,p->phone,p->place);
printf("是否需要:
1.更改2.删除3.继续\n");
scanf("%c",&sh);
if(sh=='1')
Change(head,p->number);//调用更改函数
elseif(sh=='2')
head=Del(head,p->number);//调用删除函数flag=1;
break;
}
p=p->next;
}
if(flag==0)
printf("没有找到该员工信息!
\n");
}
returnhead;
}
//更改函数
Stuff*Change(Stuff*head,charn[10])
{
Stuff*p=head;
intflag=0;
if(head==NULL)
printf("信息表为空,请先建立信息表!
\n");
else
{
while(p!
=NULL)
{
if(!
strcmp(p->number,n))
{
printf("找到员工,请输入新的信息:
\n编号|姓名|性别|出生年月|学历|职务|电话|住址\n");
scanf("%s%s%s%s%s%s%s%s",p->number,p->name,p->sex,p->birthday,p->degree,p->business,p->phone,p->place);
printf("员工信息如下:
\n");
flag=1;
}
p=p->next;
}
if(flag==0)
printf("未找到该员工信息!
\n");
}
Show(head);
returnhead;
}
//删除函数
Stuff*Del(Stuff*head,charn[10])
{
Stuff*p,*pr;
intflag;
flag=0;
p=head,pr=head;
if(head==NULL)
printf("未找到员工信息!
\n");
else
{
while(strcmp(p->number,n)&&p->next!
=NULL)
{
pr=p;
p=p->next;
}
if(!
strcmp(p->number,n))
{
if(p==head)
head=p->next;
else
pr->next=p->next;
free(p);
printf("删除成功!
\n");
n--;
}
else
printf("未找到员工信息!
\n");
}
Show(head);
returnhead;
}
//输出函数
voidShow(Stuff*head)
{
Stuff*p=head;
inti=1;
if(head!
=NULL)
{
printf("员工信息如下:
\n");
while(p!
=NULL)
{
printf("%d.%s%s%s%s%s%s%s%s\n"
i++,p->number,p->name,p->sex,p->birthday,p->degree,p->business,p->phone,p->place);
p=p->next;
}
}
else
{
printf("信息为空!
\n");
}
}
//释放函数
voidFre(Stuff*head)
{
Stuff*p;
while(head!
=NULL)
{
p=head;
head=head->next;
free(p);
}
}
voidmain()
{
charIndex[10];
Stuff*head=NULL;//链表头指针定义
printf("---------------欢迎使用《员工信息管理系统》-------------\n");
Sleep(1000);
while
(1)
{
switch(Menu())
{
case1:
printf("请输入员工信息,直接输入'#'结束\n");
head=App(head);
break;
case2:
Sort(head);
break;
case3:
head=Search(head);
break;
case4:
Show(head);
break;
case5:
printf("请输入员工编号:
");
scanf("%s",Index);
Change(head,Index);
break;
case6:
printf("请输入员工编号:
");
scanf("%s",n);
head=Del(head,Index);
break;
case0:
printf("-------------------欢迎下次光临!
-----------------\n");
Sleep(2000);
exit(0);
break;
default:
printf("输入错误,请重新输入!
\n");
}
pri