职工管理 家谱 数据结构课程设计电子版报告Word文档下载推荐.docx
《职工管理 家谱 数据结构课程设计电子版报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《职工管理 家谱 数据结构课程设计电子版报告Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。
![职工管理 家谱 数据结构课程设计电子版报告Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-10/28/c2d436a4-aede-4b80-8158-90cbb8890bc8/c2d436a4-aede-4b80-8158-90cbb8890bc81.gif)
任务序号
任务名称
起止页码
1
实验14—1设计一个职工文件程序
3——11
2
实验14—2设计一个用二叉树表示一个家谱关系的程序
12——22
设计任务
(1)
任务
名称
班级
08级1班
指导
教师
许海成
地点
红河学院
成绩
学年
2009-2010
开始
日期
2009-12-20
结束
2010-2-25
组员
设计目的及要求:
目的:
(1)加深对单链表类型定义,表示,存储的理解,并能够熟悉的掌握它的应用,以及它在程序设计中的使用方法。
(2)熟悉各种排序在程序设计中的运用。
(3)掌握软件设计的基本内容和设计方法,并能培养进行规范化软件设计能力。
要求:
(1)分析题目,查阅相关资料进行辅助设计。
(2)确定程序函数功能模块,清晰的设计出整个程序的思路。
(3)按题目要求编写出完整的程序。
(4)规范程序,调式运行程序,并写出运行结果及分析结果。
设计内容及基本要求:
内容:
有一个结构为:
职工号,姓名,部门号,工资,职工号指针,部门号指针及工资指针的职工文件。
设计一个程序,从该职工文件中读取记录到一个单链表中,并完成相应的操作功能。
基本要求:
(1)要求实现增加,删除,输出职工记录。
(2)要求能实现按职工号,按部门号,按工资进行排序。
(3)能够按其对应的排序输出职工记录。
(4)要给出整个设计的框架说明,及程序的各个函数功能的描述。
(5)要求能全面的测试所设计程序的各项功能;
同时给出程序的测试情况,并分析运行结果。
(6)要求程序清单中应有充分的注释语句。
(7)书写整洁规范。
采用的设计方法、设计技术路线:
(包括本任务的总体安排和进度、采用的设计方法和步骤以及任务流程图、可能遇到的问题和解决的方法)
设计方法及步骤:
(1)定义头文件及宏定义命令,再定义一个含7个数据项的职工文件类型的结构体,且结构体变量为EmpType;
(2)根据题目要求实现的功能,编写各个函数功能模块。
包括增加,删除,输出职工记录及排序等。
(3)在调用职工文件内的各数据项都需考虑是否为空,为空则return;
否则,进行参与运算。
(4)进行排序及输出设计时,按照定义结构体的变量来引用结构体信息进行比较并输出。
(5)定义主函数。
主函数中包括:
打印程序能实现的各功能的菜单选项;
调用各函数功能模块;
结束程序运行的语句。
任务总体安排:
2009-12-20~2010-3-1完成课程设计所要求的全部任务。
进度安排:
2009-12-20~2009-12-31:
图书馆查阅及上网搜索相关资料,并温习阅读课本上的相关知识。
2010-01-01~2010-01-20:
对问题进行抽象分析,确定描述编写程序的算法,并编写出程序。
2010-01-25~2010-02-10:
设计完整的程序进行调式及运行演示。
2010-02-17~2010-02-20:
对设计好的程序进行总结分析。
2010-02-20~2010-02-25:
填写课程设计报告,并提交指导教师。
任务流程图:
定义头文件--------定义职工文件结构体---------各函数功能模块---------主函数--------运行程序。
可能遇到的问题:
(1)由于参考资料有限,知识面不全,学的程度较浅,自身思维考虑局限,程序逻辑结构混乱,程序中对某些方面的定义不符合。
(2)程序中的算法结构单一,考虑不全,可能不能处理一些特殊、复杂的问题且不能处理乱字符。
解决的方法:
(1)多看程序设计方面的书籍,多研究经典例题,多进行练习,掌握其算法及运用。
,
(2)认真学好离散数学相关知识,加强自身逻辑思维的训练锻炼。
设计成果及总结分析:
(设计成果包括程序清单、测试数据、指定的功能模块说明、设计说明,程序清单可打印)
函数功能模块说明:
该程序主要由以下函数构成:
(1)DelAll():
删除职工文件中的全部记录
(2)InputEmp():
增加一个职工记录
(3)outputFile():
输出全部职工记录
(4)sortno():
按职工号排序
(5)Dispno():
按职工号排序输出
(6)sortdepno():
按部门号排序
(7)Dispdep():
按部门号排序输出
(8)sortsalary():
按工资排序
(9)Dispsalary():
按工资排序输出
(0)SaveFile():
将单链表中的全部结点存储到职工文件中
程序清单:
#include<
iostream.h>
stdlib.h>
stdio.h>
string.h>
#defineMaxSize100
typedefstructnode
{
intno;
/*职工号*/
charname[10];
/*姓名*/
intdepno;
/*部门号*/
floatsalary;
/*工资数*/
intpno;
/*职工号指针*/
intpdepno;
/*部门号指针*/
intpsalary;
/*工资数指针*/
}EmpType;
/*职工类型*/
voidDelAll(EmpTypeemp[],int&
n)/*清除职工文件全部记录*/
{FILE*fp;
if((fp=fopen("
emp.dat"
"
wb"
))==NULL)
{printf("
不能打开职工文件\n"
);
return;
}
emp[0].pno=emp[0].pdepno=emp[0].psalary=-1;
/*初始化*/
n=0;
printf("
已删除全部职工文件记录!
\n"
fclose(fp);
voidReadFile(EmpTypeemp[],int&
n)/*读数据文件存入emp数组中*/
{FILE*fp;
longlen;
inti;
rb"
{n=0;
fseek(fp,0,2);
len=ftell(fp);
rewind(fp);
n=len/sizeof(EmpType);
if(n!
=0)
n--;
else
emp[0].pno=emp[0].psalary=-1;
for(i=0;
i<
=n;
i++)
fread(&
emp[i],sizeof(EmpType),1,fp);
voidSaveFile(EmpTypeemp[],intn)
{inti;
FILE*fp;
if((fp=fopen("
>
数据不能打开\n"
return;
if(n>
1)
for(i=0;
fwrite(&
printf("
已将单链表中全部结点存储到职工文件中!
fclose(fp);
voidInputEmp(EmpTypeemp[],int&
n)
输入职工号,姓名,部门号,工资:
n++;
scanf("
%d%s%d%f"
&
emp[n].no,&
emp[n].name,&
emp[n].depno,&
emp[n].salary);
emp[n].pno=emp[n].pdepno=emp[n].psalary=0;
voidOutputFile(EmpTypeemp[],intn)
if(n<
没有任何记录\n"
全部职工记录为:
for(i=1;
%3d%7s%7d%7g\n"
emp[i].no,emp[i].name,emp[i].depno,emp[i].salary);
voidSortno(EmpTypeemp[],intn)
{inti=2,j;
没有职工记录,不能按职工号排序\n"
emp[0].pno=1;
emp[1].pno=-1;
while(i<
=n)
{j=0;
while(emp[j].pno!
=-1&
&
emp[emp[j].pno].no<
emp[i].no)
j=emp[j].pno;
emp[i].pno=emp[j].pno;
emp[j].pno=i;
i++;
}printf("
按职工号排序完成!
voidDispno(EmpTypeemp[],intn)
{inti=emp[0].pno;
if(i==-1)
尚未按职工号排序\n"
按职工号排序为:
while(i!
=-1)
i=emp[i].pno;
voidSortdepno(EmpTypeemp[],intn)
if(n<
>
没有职工记录,不能按部门号排序\n"
emp[0].pdepno=1;
emp[1].pdepno=-1;
while(emp[j].pdepno!
emp[emp[j].pdepno].pdepno<
emp[i].pdepno)
j=emp[j].pdepno;
emp[i].pdepno=emp[j].pdepno;
emp[j].pdepno=i;
i++;
按部门号排序完成!
voidDispdepno(EmpTypeemp[],intn)
{inti=emp[0].pdepno;
尚未按部门号排序\n"
按部门号排序为:
emp[i].no,emp[i].name,emp[i].depno,emp[i].salary)