1、 课程设计(论文) 题 目 名 称 简单的职工管理系统 课 程 名 称 数据结构课程设计 学 生 姓 名 学 号 系 、专 业 信息工程系、网络工程 指 导 教 师 2014年 12 月 16 日 摘 要 建立一个“简单的职工管理系统”,系统以菜单方式工作,编写存放有职工基本信息,包含职工工号,姓名,性别,
2、出生年月,学历,职务,工资,住址,电话等,并且要求录入职工号不重复;录入的职工号信息要求用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作,建立职工信息管理的文件。 关键词:职工信息管理;文件;浏览;查询;修改;插入;删除;排序 目 录 1 问题描述 2 2 需求分析 2 3 概要设计 3 3.1抽象数据类型定义 3 3.2模块划分 3 4 详细设计 4 4.1数据类型的定义 4 4.2主要模块的算法描述 6 5 测试分析 7 6 课程设计总结 12 参考文献 12 附录(源程序清单) 13 1 1 问题描述 1.对单位的职工进行管理,包
3、括插入、删除、查找、排序等功能。 2.要求 职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息. (1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。 (2)删除一名职工:从职工管理文件中删除一名职工对象。 (3)查询:从职工管理文件中查询符合某些条件的职工。 (4)修改:检索某个职工对象,对其某些属性进行修改. (5)排序:按某种需要对职工对象文件进行排序。 3。实现提示 职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换. (1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。 (2)对职工对象中的"姓名
4、按字典顺序进行排序。 (3)对排序后的职工对象进行增、删、查询、修改、排序等操作。 4.选做内容 将职工对象按散列法存储,并设计解决冲突的方法.在此基础上实现增、删、查询、修改、排序等操作。 2 需求分析 1. 该程序可用于对企业员工情况基本信息的存储、更新、查询、输出等操作,以实现对企业员工的管理。 2。 其中更新功能包括:添加信息、删除信息、修改信息、可根据需要添加一个或多个员工信息,也可对个别员工信息进行适当的删除或修改。以便随时更新员工信息。 3. 程序中设计的查询功能可根据需要从若干数据中查询某个员工信息,并且可根据两种不同的方法查询:按工作证号查询和按姓名查
5、询.以满足不同的需要。 2 3 概要设计 3.1抽象数据类型定义 struct employee //定义一个职工信息的结构体 { int num; char name[10]; char sex; int age; char xueli[30]; int wage; char addr[30]; char tel[20]; }em[100]; 3.2模块划分 各模块的功能和实现 1。菜单模块:显示职工管理系统的主菜单,供用户选择所需的功能,通过自己定义的void menu()函数来实现。 2.输入模块:输入
6、职工的工号、姓名以及其它的一些职工的相关信息,通过自己定义的void input()函数来实现。 3。保存模块:将内存中职工的信息输出到磁盘文件中,可以通过自己定义的void save(int)函数来实现。 4。浏览模块:浏览所有职工的相关信息,通过自己定义的void display()函数来实现. 5.删除模块:删除需要删除的职工的所有信息,通过自己定义的void del()函数来实现. 6。添加模块:添加需要添加的职工的相关信息,通过自己定义的void add()函数来实现。 7。按职工号查询模块:可以按职工号来查询职工的相关信息,通过自己定义的void search_num()
7、函数来实现。 8。按职工的的学历查询模块:可以按职工的学历来查询职工的相关信息,通过自己定义的void search_xuelil函数来实现。 9.按职工的电话号码查询模块:可以按职工的电话来查询职工的相关信息,通过自己定义的void search_tel函数来实现. 3 10。修改模块:可以修改需要修改的职工的相关信息,通过自己定义的void modify()函数 来实现。 11。退出系统模块:退出职工信息管理系统,通过头文件windows。h中的exit(0)函数来实现。 4 详细设计 4.1数据类型的定义 (1)职工管理系统类型 #include 〈string
8、〉
#include 9、ring m_Post;
string m_Department;
unsigned int m_Wage;
//链表节点的指针域—-—
struct Employee* Next;
};
//————-个人习惯:取别名--————-
4
typedef struct Employee Node;
typedef Node* Link;
//------—函数声明-——-----—————
Link Create(Link Head);
void Release(Link Head);
Link Add(Link Head);
bool 10、Search(Link Head);
Link Search_Unique(Link Head);
void Display_List(Link Head);
void Display_Node(Link pNode);
Link Modify(Link Head);
Link Del(Link Head);
void Save_ByFile(Link Head,fstream& ofile);
Link Sort(Link Head);
//—---—-—函数实现-—------—--—--——--——-—--——
Link Create(Link Hea 11、d)
{//创建一个带头节点的空链表。
Head=(Link)new Node;
if(!Head)
{ cout〈<”分配内存失败!"〈〈endl;
return NULL; }
Head->m_Code="”;
Head->m_Name="”;
Head->m_Year=0;
Head-〉m_Sex=””;
Head—>m_Post="";
Head—>m_Department=”";
Head-〉m_Wage=0;
Head—>Next=NULL;
return Head;
}
5
4.2主要模块的算法描述
菜单
12、 开始
根据菜单输入n的值选择程序
保存
结束
是否继续进行
N
Y YY
5
添加职工信息
6
修改职工信息
2
浏览职工信息
3
查询职工信息
4
删除职工信息
7
退出
1
录入职工信息
6
5 测试分析
1. 运行程序,进入职工信息管理系统的主菜单:
图1:进入主菜单界面
2.输入数字“1”进行录入职工信息:
图2:录入职工信息
3. 输入“y”返回主菜单(界面同图1)。
4. 输入“2”浏览职工信息:
图3:浏览职工信息
5. 输入“y”后继续,输入“3"进 13、行查询职工信息:
图4:按职工号及学历查询职工信息
8
图5:按电话号码查询职工信息
6. 进入主菜单,输入“4”进行删除职工信息:
图6:删除职工信息
7. 进入主菜单输入“5"进行添加职工信息:
图7:添加职工信息
10
8. 进入主菜单输入“6”进行修改职工信息:
图8:修改职工信息
9.进入主菜单输入”7”退出职工信息管理系统.
6 课程设计总结
通过这次课程设计,增加了我们对软件技术的了解,虽然还不明确软件技术包含的具体内容,但从学习数据结构这门课程开始,已发现程序设计的好处,它对我们的学习也有很大的帮助.在学习数据结构 14、的过程中也学到并巩固了许多计算机应用基础知识,对计算机的机体也有了一个较为详细的了解。在具体操作中对这学期所学的数据结构的理论知识得到巩固加强,达到实训的目的,也发现自己的不足之处,为我们以后的数据结构学习奠定了基础,同时体会到数据结构具有语句简洁,使用灵活,执行效率高等特点。发现上机操作的重要作用,特别是对数组和循环有了深刻的理解。通过黄老师的精心指导及我的实际操作,我学会 了数据结构程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。
在此我要非常感谢我的指导老师黄同成老师,感谢老师认真细心地为我解答我在数据结构中遇到的疑难问题,感谢老师为我指出我在实 15、际操作中出现的问题并及时帮我纠正过来。因为老师一直对我认真细心地辅导,使我对数据结构这门功课有了浓厚的兴趣并认真去学习它,所以我的这门功课有了很大的进步。
参考文献
[1] 黄同成,黄俊民,董建寅.数据结构[M].北京:中国电力出版社,2008
[2] 董建寅,黄俊民,黄同成.数据结构实验指导与题解[M].北京:中国电力出版社,2008
[3] 严蔚敏,吴伟民。 数据结构(C语言版)[M]。 北京:清华大学出版社,2002
[4] 刘振鹏,张晓莉,郝杰.数据结构[M].北京:中国铁道出版社,2003
11
附录(源程序清单)
#include 〈stdio.h>
#inclu 16、de 17、);
void search();
void search_num();
void search_xueli();
void search_tel();
void modify(); /*定义各函数*/
void main()
{ menu();
int n,flag;
char a;
do
{ printf(”请选择你需要操作的步骤(1-—7):\n”);
scanf(”%d”,&n);
if(n>=1&&n〈=7)
{flag=1;
break;}
else
13
{flag=0;
18、
printf("您输入有误,请重新选择!”);
}
}
while(flag==0);
while(flag==1)
{ switch(n)
{ case 1:printf(" ◆◆◆输入职工信息◆◆◆\n”);printf("\n”);input();break;
case 2:printf(” ◆◆◆浏览职工信息◆◆◆\n");printf("\n");display();break;
case 3:printf(" 19、 ◆◆◆按职工号查询职工信息◆◆◆\n”);printf("\n");search();break;
case 4:printf(” ◆◆◆删除职工信息◆◆◆\n”);printf("\n”);del();break;
case 5:printf(" ◆◆◆添加职工信息◆◆◆\n");printf(”\n");add();break;
case 6:printf(" ◆◆◆修改职工信息◆◆◆\n”);printf("\n");modify();break;
20、 case 7:exit(0);break;
default :break;}
getchar();
printf("\n”);
printf("是否继续进行(y or n):\n”);
scanf("%c”,&a);
if(a==’y’)
{ flag=1;
system("cls"); /*清屏*/
menu(); /*调用菜单函数*/
printf(”请再次选择你需要操作的步骤(1--7):\n");
scanf(”%d",&n);
printf("\n”);
21、 }
else
exit(0);
}
}
void menu() /*菜单函数*/
14
{printf(" ************欢迎进入职工信息管理系统**********\n”);
printf(" 1.录入职工信息");
printf(” 2.浏览职工信息\n”);
printf(" 3。查询职工信息");
printf(" 4.删除职工信息\n”);
printf(" 5.添加职工信息”);
printf(" 22、 6。修改职工信息\n");
printf(” 7。退出\n");
printf(" ********************谢谢使用******************\n”);
printf(”\n”);
printf(”\n");
}
void input() /*录入函数*/
{ int i,m;
printf(”请输入需要创建信息的职工人数(1—-100):\n”);
scanf("%d”,&m);
for (i=0;i 23、);
scanf("%d”,&em[i]。num);
printf("请输入姓名: ");
scanf("%s",em[i].name);
getchar();
printf("请输入性别(f--女 m——男): ");
scanf(”%c",&em[i].sex);
printf(”请输入年龄: ”);
scanf("%d",&em[i].age);
printf("请输入学历: ");
scanf(”%s",em[i]。xueli);
printf("请输入工资: " 24、
scanf(”%d",&em[i]。wage);
printf(”请输入住址: ");
scanf(”%s”,em[i].addr);
printf(”请输入电话: ");
scanf("%s",em[i]。tel);
printf(”\n");
}
15
printf(”\n创建完毕!\n”);
save(m);
}
void save(int m) /*保存文件函数*/
{int i;
FILE*fp;
if ((fp=fopen("employee_list”,"wb" 25、)==NULL)
{ printf (”cannot open file\n");
exit(0);
}
for (i=0;i〈m;i++) /*将内存中职工的信息输出到磁盘文件中去*/
if (fwrite(&em[i],sizeof(struct employee),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
int load() /*导入函数*/
{ FILE*fp;
int i=0;
if((fp=fopen(”employee_list",”rb”)) 26、NULL)
{ printf ("cannot open file\n");
exit(0);
}
else
{ do
{ fread(&em[i],sizeof(struct employee),1,fp);
i++;}
while(feof(fp)==0);
}
fclose(fp);
return(i-1);
}
void display() /*浏览函数*/
{int i;
int m=load();
printf(" 职工号\t姓名\t\t性别\t\t年龄 \n");
27、for(i=0;i〈m;i++) /*m为输入部分的职工人数*/
printf("\n%d\t\t%s\t%c\t\t%d\t\n",em[i].num,em[i].name,em[i]。sex,em[i].age);
16
printf("\n 学历\t\t工资\t\t住址\t\t电话 \n");
for(i=0;i 28、{int m=load();
int i,j,n,t,flag;
char name[20];
printf(”\n 原来的职工信息:\n”);
display();
printf("\n”);
printf(”请输入要删除的职工的姓名:\n");
scanf("%s",name);
for(flag=1,i=0;flag&&i 29、n");
printf(”\n %d\t\t%s\t%c\t\t%d\t\n”,em[i].num,em[i]。name,em[i]。sex,em[i]。age);
printf(”\n 学历\t\t工资\t\t住址\t\t电话 \n");
printf(”\n %s\t%d\t\t%s\t%s\n",em[i].xueli,em[i]。wage,em[i].addr,em[i].tel);
printf(”\n确实要删除此人信息请按1,不删除请按0\n”);
scanf(”%d",&n);
if(n==1) 30、
{for(j=i;j 31、ddr,em[j+1].addr);
strcpy(em[j]。tel,em[j+1].tel);
}
flag=0;
}
17
}
}
if(!flag)
m=m-1;
else
printf("\n对不起,查无此人!\n");
printf("\n 浏览删除后的所有职工信息:\n”);
save(m); /*调用保存函数*/
display(); /*调用浏览函数*/
printf("\n继续删除请按1,不再删除请按0\n");
scanf 32、%d",&t);
switch(t)
{ case 1:del();break;
case 0:break;
default :break;
}
}
void add()/*添加函数*/
{FILE*fp;
int n;
int count=0;
int i;
int m=load();
printf("\n 原来的职工信息:\n");
display();
printf("\n”);
fp=fopen("emploee_list",”a");
printf(”请 33、输入想增加的职工数:\n”);
scanf("%d",&n);
for (i=m;i〈(m+n);i++)
{printf("\n 请输入新增加职工的信息:\n");
printf(”请输入职工号: ");
scanf("%d”,&em[i].num);
printf("\n");
printf(”请输入姓名: ”);
scanf("%s”,em[i].name);
getchar();
printf("请输入性别(f—-女 m—-男): ");
18
scanf(”%c”,&em[i].sex);
34、
printf(”请输入年龄: ");
scanf(”%d",&em[i]。age);
printf(”请输入学历: ”);
scanf(”%s",em[i].xueli);
printf("请输入工资: ");
scanf("%d",&em[i]。wage);
printf("请输入住址: ");
scanf(”%s”,em[i].addr);
printf(”请输入电话: ");
scanf("%s”,em[i]。tel);
printf("\n");
count=count+1;
35、 printf(”已增加的人数:\n");
printf("%d\n",count);
}
printf(”\n添加完毕!\n");
m=m+count;
printf("\n浏览增加后的所有职工信息:\n”);
printf(”\n");
save(m);
display();
fclose(fp);
}
void search()/*查询函数*/
{ int t,flag;
do
{printf(”\n按职工号查询请按1; 按学历查询请按2; 按电话号码查询请按3; 进入主函数请按4\n 36、");
scanf("%d”,&t);
if(t〉=1&&t〈=4)
{flag=1;
break;
}
else
{
flag=0;
printf(”您输入有误,请重新选择!”);
19
}
}
while(flag==0);
while(flag==1)
{switch(t)
{ case 1:printf("按职工号查询\n”);search_num();break;
case 2:printf(”按学历查询\n”);search_xueli(); 37、break;
case 3:printf("按电话号码查询\n”);search_tel();break;
case 4:main();break;
default:break;
}
}
}
void search_num()
{ int num;
int i,t;
int m=load();
printf(”请输入要查找的职工号:\n");
scanf(”%d",&num);
for(i=0;i〈m;i++)
if(num==em[i]。num)
{ printf("\n已找到此人,其记录为:\ 38、n");
printf(” 职工号\t姓名\t\t性别\t\t年龄 \n");
printf("\n %d\t\t%s\t%c\t\t%d\t\n”,em[i].num,em[i]。name,em[i]。sex,em[i].age);
printf("\n 学历\t\t工资\t\t住址\t\t电话 \n");
printf(”\n %s\t%d\t\t%s\t%s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
break;
}
if(i==m)
p 39、rintf(”\n对不起,查无此人\n");
printf(”\n”);
printf(”返回查询函数请按1,继续查询职工号请按2\n”);
scanf(”%d",&t);
switch(t)
{ case 1:search();break;
case 2: break;
20
default:break;
}
}
void search_xueli()
{ char xueli[30];
int i,t;
int m=load();
printf("请输入要查找的学历:\n");
scanf(”% 40、s”,xueli);
for(i=0;i 41、t%s\t%s\n”,em[i]。xueli,em[i]。wage,em[i].addr,em[i].tel);
}
if(i==m)
printf(”\n对不起,查无此人\n");
printf(”\n”);
printf("返回查询函数请按1,继续查询学历请按2\n”);
scanf(”%d”,&t);
switch(t)
{ case 1:search();break;
case 2:break;
default :break;
}
}
void search_tel()
{ char tel[2 42、0];
int i, t;
int m=load();
printf(”请输入要查找的电话号码:\n");
scanf(”%s",tel);
for(i=0;i〈m;i++)
if(strcmp(tel,em[i].tel)==0)
21
{ printf(”\n已找到此人,其记录为:\n");
printf(" 职工号\t姓名\t\t性别\t\t年龄 \n”);
printf(”\n %d\t\t%s\t%c\t\t%d\t\n",em[i]。num,em[i]。name,em[i]。sex,em[i]。age); 43、
printf(”\n 学历\t\t工资\t\t住址\t\t电话 \n");
printf(”\n %s\t%d\t\t%s\t%s\n”,em[i]。xueli,em[i]。wage,em[i]。addr,em[i]。tel);
break;
}
if(i==m)
printf("\n对不起,查无此人\n”);
printf("\n");
printf("返回查询函数请按1,继续查询电话号码请按2\n");
scanf("%d”,&t);
switch(t)
{ case 1:search( 44、break;
case 2:break;
default :break;
}
}
void modify() /*修改函数*/
{ int num;
char name[20];
char sex;
int age;
char xueli[30];
int wage;
char addr[30];
char tel[20];
int b,c,i,n,t,flag;
int m=load();
printf("\n 原来的职工信息:\n”);
45、 display();
printf("\n");
printf(”请输入要修改的职工的姓名:\n”);
scanf(”%s”,name);
for(flag=1,i=0;flag&&i〈m;i++)
{ if(strcmp(em[i]。name,name)==0)
22
{ printf(”\n已找到此人,原始记录为:\n”);
printf(” 职工号\t姓名\t\t性别\t\t年龄 \n”);
printf(”\n %d\t\t%s\t%c\t\t%d\t\n",em[i]。num,em[i]。name, 46、em[i]。sex,em[i]。age);
printf("\n 学历\t\t工资\t\t住址\t\t电话 \n");
printf(”\n %s\t%d\t\t%s\t%s\n”,em[i].xueli,em[i].wage,em[i]。addr,em[i]。tel);
printf(”\n确实要修改此人信息请按1 ; 不修改请按0\n");
scanf("%d”,&n);
if(n==1)
{ printf(”\n需要进行修改的选项\n 1。职工号 2。姓名 3.性别 4.年龄 5。学历 6 47、工资 7.住址 8。电话\n");
printf("请输入你想修改的那一项序号:\n");
scanf(”%d”,&c);
if(c>8||c<1)
printf("\n选择错误,请重新选择!\n”);
}
flag=0;
}
}
if(flag==1)
printf("\n对不起,查无此人!\n”);
do
{switch(c) /*因为当找到第i个职工时,for语句后i自 48、加了1,所以下面的应该把改后的信息赋值给第i—1个人*/
{ case 1:printf(”职工号改为: ”);
scanf("%d”,&num);
em[i—1].num=num;
break;
case 2:printf(”姓名改为: ”);
scanf("%s”,name);
strcpy(em[i-1]。name,name);
break;
case 3:printf(”性别改为: ");
getchar 49、);
scanf(”%c",&sex);
em[i-1]。sex=sex;
23
break;
case 4:printf("年龄改为: ");
scanf("%d”,&age);
em[i—1].age=age;
break;
case 5:printf(”学历改为: ");
scanf(”%s”,xueli);
strcpy(em[i—1]。xueli,xueli);
bre 50、ak;
case 6:printf(”工资改为: ");
scanf(”%d”,wage);
break;
case 7:printf(”住址改为: ");
scanf("%s”,addr);
strcpy(em[i—1]。addr,addr);
break;
case 8:printf(”电话改为: ”);
scanf(”%s”,tel);
strcpy(em[i-1].tel,tel);






