数据结构与算法课程设计论文Word格式文档下载.docx
- 文档编号:20644853
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:17
- 大小:210.21KB
数据结构与算法课程设计论文Word格式文档下载.docx
《数据结构与算法课程设计论文Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构与算法课程设计论文Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
(3)修改模块
修改模块的功能是修改某职工的部分工资信息。
(4)查找模块
查找模块的功能就是:
输出指定编号职工的工资信息;
输出姓名和部门联合查询的职工工资信息。
(5)统计模块
统计模块的功能是:
统计全企业总人数及各部门的人数;
统计企业的平均工资及部门的平均工资。
(6)排序模块
排序的模块的功能是:
对全企业的信息表按受教育年限及工资进行递增排序。
(7)列表模块
列表模块的功能是输出全体职工的工资信息。
程序具体功能介绍:
2.1.1功能介绍
现在,需要存储这些人员的人事档案信息:
员工编号,员工姓名,年龄,性别,部门,职务,受教育年限,工资,缺勤(天),罚金,个税,实发数。
其中,人员编号唯一,不能重复。
添加删除功能:
能根据学企业人事的变动情况,添加删除记录;
查询功能:
能根据编号及姓名和部门的复合查询进行查询;
编辑功能(高级):
根据查询对相应的记录进行修改,并存储;
统计功能:
能根据多种参数进行人员的统计及平均工资,统计要求同时显示被统计者的信息;
排序功能:
按照受教育年限、工资进行排序;
保存功能:
能对输入的数据进行相应的存储;
2.2系统框图
系统框架图在本设计中,将主要实现以下功能:
增加记录功能,修改记录功能,删除记录功能,以及筛选记录功能等。
图1系统框架图
2.2开发环境
本系统是在VisualC++6.0平台上运行的,主要运行C及C++等语言。
3详细设计
具体系统设计
3.1结构体及类的设计与分析
3.1.1:
员工结构体的建立
structWorker_pay
{
intnum;
//员工编号
stringname;
//员工姓名
intage;
//年龄
stringsex;
//性别
stringdepartment;
//部门
stringtitle;
//职务
inteduage;
//学历(年)
floatwage;
//工资
intday;
//缺勤天数
floatallowance;
//扣发工资
floattax;
//个人所得税
floatreal_wage;
//实发数
Worker_pay*next;
//链表结点的指针域
};
3.1.2:
员工类的建立
classWorker
protected:
Worker_pay*head;
//链表的头结点指针
public:
Worker(){head=NULL;
}//构造函数
voidDisplay(Worker_pay*);
//输出函数
Worker_pay*Find(int);
//查找函数
intListCount();
//统计员工人数函数
voidAddItem(int,string,int,string,string,string,float,float);
//创建链表并链表的插入
voidRemoveItem(int);
//删除函数
voidReplaceItem(int);
//修改函数
voidListL();
//遍历函数
voidSearch(int);
//查找并输出某个员工信息函数
voidReal_wage(float,float);
//计算函数
voidRecordinfo(int,string,int,string,string,string,float,float,float,float);
//存储函数
3.1.3:
相关的成员函数
表1Worker类说明表
名称
属性
说明
head
数据成员
链表头结点指针
Worker()
成员函数
缺省的构造函数,缺省值为head=NULL
voidDisplay(Worker_pay*)
输出函数
Worker_pay*Find(int)
查找函数
intListCount()
统计员工人数函数
voidAddItem(int,·
·
float,float)
创建链表并链表的插入
voidRemoveItem(int)
删除函数
voidReplaceItem(int)
修改函数
voidListL()
遍历函数
voidListavg(string)
部门查询及统计的函数
voidload()
读取文件
voidsort_data();
对员工信息进行整理的函数
voidsearch(sting,string)
复合查找并输出员工信息的函数
voidSearch(int)
查找并输出某个员工信息函数
voidReal_wage()
计算函数
voidRecoreinfo(int,·
float,float)
存储函数
3.1.4非成员函数的设计与分析
表2非成员函数说明表
intMenu()
用于显示主菜单
charExit()
用于退出程序
voidInput(int*num,·
float*allowance)
用于输入员工工资信息
voidAddNew()
用于调用成员函数AddItem(int,·
float,float)Real_wage()和Recoreinfo(int,·
voidDoFind()
用于调用成员函数Search(int)
voidDoDelete()
用于调用成员函数RemoveItem(int)
voidDoMotify()
用于调用成员函数ReplaceItem(int)
voidList()
用于调用成员函数ListL()
intmain()
主函数
voidfindtavg()
用于调用成员函数voidListavg(string)
3.2:
各功能模块设计:
(1)、新建数据文件模块:
<
1>
、数据结构;
看各个数据信息,员工编号(int),员工姓名(sting),年龄(int),性别(string),部门(string),职务(string),受教育年限(int),工资(string),缺勤(天)(int),罚金(int),个税(int),实发数(int),在文件中以文本形式存放,每条记录对应一个人员的信息,可以方便信息的管理;
而数据读进内存中时,可以以结构体的形式,每一个结构体包含了一个人员的全部信息,多的人员的信息组成了一个结构体数组。
定义见结构体及类的设计与分析
(2)、追加模块:
〈1〉[需求分析]
该模块的功能是拥护需要增加新的员工记录,从键盘输入并逐条写入到原来的文件中去,其中输入号码是要防止号码重复,重复时报告错误,重新输入。
为方便用户管理和查看,该模块采用的方式是用先把原来文件中的数据读入内存,保存在内存中,然后在内存中的数据后面增加新的数据,操作完成后用写的方式打开文件,用覆盖的方式写入。
〈2〉流程图:
略;
〈3〉对应程序:
voidAddNew()
(3)修改模块:
[需求分析:
]
该模块的功能是显示所有信息,考虑到记录较多,采用分屏显示,显示完所有的记录后,由用户输入需要修改的人员的号码,查找成功后,显示查找结果,并询问拥护修改人员的哪部分记录,根据用户选择修改相应的信息,然后保存修改后的结果;
2>
流程图:
YYN
YN
3>
对应的函数:
voidDoMotify();
(4)删除模块:
〈1〉[需求分析]:
该模块的运行方式与修改模块类似,首先分屏显示所有人员的记录,显示完所有的记录后,由用户输入要删除的人员的号码,根据号码查找相应的记录并将结果显示出来,经用户确认后删除,删除的方法是将文件中的数据读入内存,赋给相应的结构体,并将结构体数组中将删除的后面的数据赋给前一个结构体,然后将相应数据写入文件并保存;
类似添加的流程
对应函数:
voidDoDelete();
(5)、按编号搜索:
该模块的功能是按照输入的人员的编号查找对应的记录,并将其显示,查找成功以后,增加删除和修改等功能,其中删除和修改功能可以通过调用相应的函数来实现。
〈2〉流程图;
(6)按姓名和部门搜索。
需求分析:
该模块的功能是按照输入的人员的姓名和部门查找对应的记录,并将其显示,查找成功以后,增加删除和修改等功能,其中删除和修改功能可以通过调用相应的函数来实现。
该模块的结构与按号码查询的结构基本相同;
voidDoFindbumen();
(7)输出模块;
该模块的功能是显示所有保存在文件中的记录。
〈2〉、流程图;
略
voidList();
(8)、排序模块;
〈1〉、[需求分析];
该模块的功能是要求将记录按照年龄或者来院时间进行排序,总体结构是先用n=load()函数将文件中的数据调入内存,然后按照选择法排序,并将结果显示出来,然后将排序后的结果保存。
<
流程图;
略。
voidsort_data()
(9)、统计模块
该模块的功能是按照用户的要求统计出满足符合条件的所有记录的个数,并将满足条件的记录显示出来。
该模块是在其他模块进行的同时进行的,没有单独列出,没有涉及到文件的保存。
无;
〈3〉对应函数:
包含在其他函数内
4所遇到的问题和分析解决
(1)设计初期,先完成初步构思,写出主函数。
然后对主函数所涉及的各个模块进行编程,将各个模块利用指针和链表联系起来。
在环境中进行调试,应一边编译,一边调试,并且要一个模块一个模块的调试。
直至此模块完全没有错误时,在进入下一模块的调试。
不能直接输入全部的代码一次性调,这样错误会很多,并且不易找出和修改。
在完成程序的编译链接后,要用多组数据进行审查,确保做到系统无误。
设计过程中,不应忽视环境提示的警告,有时程序运行不正确与警告也有很大的关系。
这次设计中遇到很多问题都是提示类型不匹配,这时就要认真检查前面的代码,及时改正并且认真仔细,杜绝此类错再次发生。
编写代码时应该少用全局变量,全局变量在编写试看似定义次数少,很方便。
但全局变量出错几率较大,且不易修改,每次修改时都要全面考虑,所以应避免用到。
程序调试中碰到的错误可以使自己学到知识。
养成良好的编程习惯,可以节省很多时间,避免很多不必要的错误。
(2)在编辑完整个程序后,进行调试阶段总是会数显head无定义。
解决办法:
再类的定义是忘记声明指针Worker_pay*head;
。
(3)在写读入函数时,总是不能读入数据,经同学检查发现没有申请新的空间存放数据。
解决办法:
在读入txt文件时,q=newWorker_pay;
q->
next=NULL。
5系统特色及关键技术
5.1:
Worker类中的成员函数voidAddItem(int,·
(1)功能:
创建存储职工工资信息的存储系统以及添加某职工的工资信息。
算法思路:
先定义一个结构体Worker_pay,通过从表尾插入的方法来建立链表。
首先要先设立一个头指针(head)来存放链表的首地址,然后,不断用new运算符生成一个新的结点,将这个结点链入已有的链表尾部;
如果链表中还没有结点,则这个新结点将是首结点,否则,将新结点的地址赋给原有链表的尾结点的next指针。
流程图:
(3)代码:
voidWorker:
:
AddItem(intnum1,stringname1,……)
if(!
head)
{
head=newWorker_pay;
head->
num=num1;
……
next=NULL;
return;
}
Worker_pay*t=head;
while(t&
&
t->
num!
=num1)
t=t->
next;
if(t)
cout<
"
操作失败;
员工编号为"
num1<
的信息已经存在"
endl;
Worker_pay*p=head;
while(p->
next)
p=p->
Worker_pay*p1=newWorker_pay;
return;
}
5.2:
Worker类中的成员函数voidsort_data()
运用算法课本上的直接选择排序的算法,与课本的不同之处在于,本程序是用指针进行排序的,课本使用的数组。
直接选择排序的比较次数与文件初始状态无关,在第i趟排序中选出最小的记录,需做n-i次比较,因此总的次数为:
O(N*N),文件初始状态为正序时,移动0;
最坏情况每趟排序都要交换操作,总的移动次数是3(n-1)。
直接选择排序的平均时间复杂度为O(n平方)。
算法中增加了一个辅助空间temp,因此辅助空间为S(n)=O
(1)。
直接选择排序是不稳定的。
主要代码:
Worker_pay*p,*q,*small,*temp;
temp=newWorker_pay;
for(p=head;
p->
next!
=NULL;
p=p->
{
small=p;
for(q=p->
next;
q!
q=q->
if(q->
eduage<
small->
eduage)
small=q;
if(small!
=p)
{
temp->
eduage=p->
eduage;
p->
eduage=small->
small->
eduage=temp->
……………………
}
cout<
员工编号员工姓名年龄性别部门职务学历工资缺勤(天)罚金个税实发数"
while(head!
=NULL)
{Display(head);
head=head->
6用户手册及测试结果
6.1用户手册
运行程序时,界面刚开始出现一个主菜单及提示信息,用户通过在键盘上输入来选择某个功能。
当用户选择了某个功能,系统将跳转到所选择的功能界面,用户将可以根据提示信息来使用该功能,当用户通过键盘输入编号为-1时,系统将返回主界面。
6.2测试结果
1,主菜单
2,输入,添加,删除,修改,查询:
统计
排序
7.总结:
成功之处:
此系统程序虽然简单,却集结了基本的管理功能。
删除,存储,统计等功能还是较为成功的。
特别是人事档案的统计管理功能,使烦琐的工作变得简单轻松。
不足之处:
由于我们水平和时间有限,难免有不足和差强人意的地方。
尤其是对于系统应该配以保密性的设置,可是由于我知识积累不够,做不出来。
还请迟老师海涵。
两周的数据结构与算法课程设计结束了,在这几天的时间里,我自己独立完成了一个程序从构思结构,到编写代码,然后上机调试运行的过程,感觉自己收获很大。
通过解决一个又一个的问题,熟悉了C++语言的应用。
在设计过程中,在编程时条理清晰是至关重要的。
主函数,函数,成员函数之间的层次关系,调用关系一定要有一个全面的把握,尤其要体会类的封装性。
另外很重要的一点就是一定要对链表的五种操作熟练的掌握。
我理解了对于一个较大的程序,不可能一次编写出一个较大的系统,通常要采取自顶向下的设计思想,先设计主函数,再通过完善一个个的功能模块来完成程序的设计过程,在设计过程中要充分理解整个程序的设计思路,采用逐步细化的方式来完成整个程序。
在编译,链接,调试的过程中一定要有耐心。
因为一个程序中会有很多小的错误,甚至有的问题要几个小时才能解决。
遇到问题,一定要全面分析,有时候还要向同学请教。
总得来说,编程时极需要耐心的。
参考文献
C语言大学实用教程电子工业出版社
2、C++程序设计教程(第二版)高等教育出版社
3、C语言程序设计教程北京大学出版社
4、C语言程序设计实例精粹电子工业出版社
5、
6、陈天华编.面向对象程序设计与VisualC++6.0教程[M].北京:
清华大学出版社,2006
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 课程设计 论文