数据结构课程设计报告.docx
- 文档编号:23381258
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:38
- 大小:195.92KB
数据结构课程设计报告.docx
《数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告.docx(38页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告
课程设计报告
数据结构课程设计报告
题目:
简单员工管理系统
院(系):
计算机工程学院
专业:
计算机科学与技术
班级:
软件1093
学生:
徐玲林
指导教师:
寇海洲孙成富
邱军林殷路
2010年12月
目录
一、设计目的1
二、设计内容1
三、程序设计步骤2
四、调试分析5
五、测试结果6
六、课程设计小结8
一、设计目的
掌握编写一些在特定数据结构上的算法,并通过上机调试,更好地掌握各种数据结构及其特点。
经过本次课程设计,对于数据结构基本理论和存储结构及算法设计将有更加深入的理解,并提高在实际设计操作中系统分析、结构确定、算法选择、数学建模和信息加工的能力,提高C/C++语言程序设计能力,以及培养编写程序设计文档的能力。
二、设计内容
2.1问题描述
根据题目要求,由于职工信息是存放在文件中,所以应提供文件的输入、输出等操作;在程序中需要浏览职工的信息,应提供显示、查找、排序等操作;另外还应提供键盘式选择菜单实现功能选择。
2.2详细要求
(1)问题说明
设计一个简单的职工管理系统,按照课程设计的要求,实现对职工信息的新增、修改、插入、删除操作。
(2)输入要求
由系统管理员依次输入现有职工和新增职工的以下信息:
姓名(可以重复)、性别、出生年月、工作年月、学历、职务、地址、电话等信息,并且注意输入时姓名、学历、职务、地址为字符串形式,性别为字符,其余的为长整型数字。
(3)输出要求
系统管理员根据公司的人员流动情况,选择系统提供的各项功能进行操作,并输出相应的结果。
2.3问题分析
(1)具体要求
简单的职工管理系统主要实现以下功能:
新增一名职工:
将新增职工对象按姓名以字典方式职工管理文件中。
删除一名职工:
从职工管理文件中删除一名职工对象。
查询:
从职工管理文件中查询符合某些条件的职工。
修改:
检索某个职工对象,对其某些属性进行修改。
要求:
职工信息包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。
(2)实现提示:
职工对象进行增、删、查询、修改、排序等操作。
三、程序设计步骤
1)功能分析说明图:
2)采用主要的数据结构类型。
1.类的对象:
系统有两个类:
Employee:
对象是公司里的每一个员工,是系统中最重要的类。
DBOperate:
对象是系统的数据文件,完成对员工信息的保存和读取。
2.类的属性列
Employee:
员工编号:
ENum(long)
员工姓名:
EName(string)
员工性别:
Esex(char)
员工出生年月:
Eborndate(string)
员工工作年月:
EWorkdate(long)
员工学历:
Edegree(int)
员工职位:
Eposition(string)
员工住址:
Eaddress(string)
员工电话:
Ephone(string)
3.类的行为:
Employee:
添加新员工信息:
NewInfo();
员工信息输出:
ShowInfo();
员工信息修改:
RefreshInfo();
删除员工:
DeleteInfo();
DBOperate:
保存员工信息:
WriteIn(intiflag);
读取员工信息:
ReadOut();
更新员工总人数:
RefreshMaxNum(intiflag);
注释:
当iflag为1时,人数增大;为零时,人数不变,即是修改;为-1时,人数减少。
类DBOperate成员函数定义
A.数据写入操作函数
voidDBOperate:
:
WriteIn(intiflag){
DBOperate:
:
RefreshMaxNum(iflag);
ofstreammyf("Employee.txt");
Employeee;
intMN;
MN=e.MaxNum();
for(inti=0;i } myf.close(); return; } B.读出数据操作函数 voidDBOperate: : ReadOut(){ ifstreammyf("Employee.txt"); Employeee; intMN; MN=e.MaxNum(); for(inti=0;i : Employeenum>>DBOperate: : Employeename>>DBOperate: : Employeesex>>DBOperate: : Employeeborndate>>DBOperate: : Employeeworkdate>>DBOperate: : Employeedegree>>DBOperate: : Employeeposition>>DBOperate: : Employeeaddress>>DBOperate: : Employeephone; Enum[i]=DBOperate: : Employeenum; Ename[i]=DBOperate: : Employeename; Esex[i]=DBOperate: : Employeesex; Eborndate[i]=DBOperate: : Employeeborndate; Eworkdate[i]=DBOperate: : Employeeworkdate; Edegree[i]=DBOperate: : Employeedegree; Eposition[i]=DBOperate: : Employeeposition; Eaddress[i]=DBOperate: : Employeeaddress; Ephone[i]=DBOperate: : Employeephone; } myf.close(); } 数字判断函数 intshuzi(intsz){//输入数据并判断是否为数字 char*temp; temp=newchar;//临时指针,存放输入字符 intlen;//存储取字符的长度 sz=0;//清零 chars; do{ cin>>temp; len=strlen(temp);//取字符长度 for(inti=0;i s=*(temp+i); if(s<'0'||s>'9'){ cout<<"输入有误! \n\n"; cout<<"请重新输入: "; break; } } }while(s<'0'||s>'9'); for(inti=0;i intt=1; for(intj=1;j sz+=(*(temp+i)-48)*t; } returnsz; } 3)各软件模块之间的调用方式 该软件各个模块的调用主要是通过声明函数,和定义函数,再通过主函数调用实现的。 主函数: intmain(){ char*select; select=newchar; while(*select! ='5'){ do{ cout<<"\t===========================主菜单==========================="< cout<<"\t请选择功能"< cout<<"\t------------------------------------------------------------"< cout<<"\t1.新建并输入职工数据"< cout<<"\t2.按条件输出职工数据"< cout<<"\t3.修改指定职工的数据"< cout<<"\t4.删除数据"< cout<<"\t5.退出"< cout<<"\t============================================================"< cout<<"\t------------------------------------------------------------"< cout<<"请选择您要服务的类别: "; cin>>select; cout<<"\n===========================================\n"; Employeee; DBOperatedbo; switch(*select){ case'1': e.NewInfo();break; case'2': dbo.ReadOut(); e.ShowInfo();break; case'3': e.RefreshInfo();break; case'4': e.DeleteInfo();break; default: cout<<"输入错误,请重新输入! "< } cout< }while(*select<'1'||*select>'5'); } exit (1); return0; } 四、调试分析 测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别.其主要阶段包括单元测试、集成测试、确认测试和系统测试。 测试方法主要有白盒测试法和黑盒测试法;其中,白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作;黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。 在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。 黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。 职工信息有: 姓名、性别、出生年月、工作年月、学历、职务、住址、电话。 在数据输入中注意数据类型: 五、测试结果 运行主界面: 选择1: 添加新成员信息 选择2: 查询输出员工信息 选择3: 修改指定的员工信息 选择4: 删除指定的员工信息 选择5: 退出系统。 六、课程设计小结: 6.1该课程设计的特点 本次课程设计是围绕数据结构进行。 根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。 但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。 6.2存在的不足 虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不尽人意的地方。 只对编号排序,那就是可以再排序上面多设计几个算法。 实现多角度排序。 6.3心得体会 经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并对数据结构和算法的配合对于程序时间和空间性能的影响以及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。 当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。 因此此时就应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。 此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。 参考文献 【1】《C语言程序设计》谭浩强编著清华大学出版社 【2】《C++程序设计教程》钱能主编清华大学出版社 源代码: #include #include #include usingnamespacestd; constN=50; stringEname[N]; longEnum[N]; charEsex[N]; stringEborndate[N]; stringEworkdate[N]; intEdegree[N]; intEposition[N]; stringEaddress[N]; stringEphone[N]; intshuzi(intsz); classEmployee{ public: stringEmployeename; longEmployeenum; charEmployeesex; stringEmployeeborndate; stringEmployeeworkdate; intEmployeedegree; intEmployeeposition; stringEmployeeaddress; stringEmployeephone; staticlongEmployeeMaxNum; voidNewInfo(); voidShowInfo(); voidshowall(); voidshowdegree(intdegree); voidshownum(longnumber); voidRefreshInfo(); voidDeleteInfonum(intcNum); voidDeleteInfodegree(intdegree); voidDeleteInfoname(stringname); voidDeleteInfoall(); voidDeleteInfo(); staticintMaxNum(); }; classDBOperate{ public: stringEmployeename; longEmployeenum; charEmployeesex; stringEmployeeborndate; stringEmployeeworkdate; intEmployeedegree; intEmployeeposition; stringEmployeeaddress; stringEmployeephone; staticlongEmployeeMaxNum; voidWriteIn(intiflag); voidReadOut(); voidRefreshMaxNum(intiflag); }; longEmployee: : EmployeeMaxNum=00; intEmployee: : MaxNum(){ intmn=0; ifstreamEMN; EMN.open("EmployeeMaxNum.txt"); EMN>>mn; EMN.close(); returnmn; } voidEmployee: : NewInfo(){ DBOperatedbo; dbo.ReadOut(); cout<<"新员工姓名: "; cin>>Employee: : Employeename; if(Employee: : MaxNum()==0) Employee: : Employeenum=EmployeeMaxNum+Employee: : MaxNum()+1; elseEmployee: : Employeenum=dbo.Employeenum+1; do{ cout<<"新员工性别: [F为女性,M为男性]: "; char*tmp00=newchar; cin>>tmp00; Employee: : Employeesex=*tmp00; if(Employee: : Employeesex! ='f'&&Employee: : Employeesex! ='F'&&Employee: : Employeesex! ='m'&&Employee: : Employeesex! ='M') cout<<"输入错误,请重新输入! "< }while(Employee: : Employeesex! ='f'&&Employee: : Employeesex! ='F'&&Employee: : Employeesex! ='m'&&Employee: : Employeesex! ='M'); cout<<"新员工出生年月: "; cin>>Employee: : Employeeborndate; cout<<"新员工工作年月: "; cin>>Employee: : Employeeworkdate; cout<<"新员工学历,请输入相应学历的序号: "< cout<<"[1: 小学2: 初中3: 中专4: 高中5: 专科6: 本科7: 硕士8: 博士]"; Employee: : Employeedegree=shuzi(Employee: : Employeedegree); while(Employee: : Employeedegree! =1&&Employee: : Employeedegree! =2&&Employee: : Employeedegree! =3&&Employee: : Employeedegree! =4&&Employee: : Employeedegree! =5&&Employee: : Employeedegree! =6&&Employee: : Employeedegree! =7&&Employee: : Employeedegree! =8){ cout<<"输入有误,请重新输入: "< cout<<"[[1: 小学2: 初中3: 中专4: 高中5: 专科6: 本科7: 硕士8: 博士]"; Employee: : Employeedegree=shuzi(Employee: : Employeedegree); } cout<<"新员工职位,请输入相应职位的序号: "< cout<<"[1: 临时职员2: 正式职员3: 主任4: 部门经理5: 总经理6: 董事长]"; Employee: : Employeeposition=shuzi(Employee: : Employeeposition); while(Employee: : Employeeposition! =1&&Employee: : Employeeposition! =2&&Employee: : Employeeposition! =3&&Employee: : Employeeposition! =4&&Employee: : Employeeposition! =5&&Employee: : Employeeposition! =6){ cout<<"输入有误,请重新输入: "< cout<<"[1: 临时职员2: 正式职员3: 主任4: 部门经理5: 总经理6: 董事长]"; Employee: : Employeeposition=shuzi(Employee: : Employeeposition); } cout<<"新员工住址: "; cin>>Employee: : Employeeaddress; cout<<"新员工电话: "; cin>>Employee: : Employeephone; intMaxNum=Employee: : MaxNum(); Enum[MaxNum]=Employee: : Employeenum; Ename[MaxNum]=Employee: : Employeename; Esex[MaxNum]=Employee: : Employeesex; Eborndate[MaxNum]=Employee: : Employeeborndate; Eworkdate[MaxNum]=Employee: : Employeeworkdate; Edegree[MaxNum]=Employee: : Employeedegree; Eposition[MaxNum]=Employee: : Employeeposition; Eaddress[MaxNum]=Employee: : Employeeaddress; Ephone[MaxNum]=Employee: : Employeephone; dbo.WriteIn (1); cout<<"\n\t\t\t添加新成员成功! "< cout<<"==========================================="< } voidEmployee: : ShowInfo(){ char*choice1=newchar; intchoice2; longsearchnum; Employeee; cout<<"请选择查询方式: "< cout<<"\t==========================================="< cout<<"\t*输出全体职工信息---------------------1"< cout<<"\t*按职工学历输出-----------------------2"< cout<<"\t*按职工编号输出-----------------------3"< cout<<"\t*返回---------------------------------4"< cout<<"\t==========================================="< do{ cout<<"请选择: "; cin>>choice1; cout<<"===========================================\n"; switch(*choice1){ case'1': showall();break; case'2':
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告