1、教工信息管理系统 学号: 课 程 设 计 报 告课程设计名称: 面向对象程序设计课程设计 题 目: 教工信息管理系统 学 生 姓 名: 专 业 班 级: 指 导 教 师: 完 成 时 间: 年 月 日 年 月 日成 绩: 一、系统的需求分析需求分析是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么。可以说,“需求分析”就是确定要计算机“做什么”。需求分析包括提炼,分析和仔细审查已收集到的需求,以确保所有的风险承担者都明其含义并找出其中的错误,遗憾或其它不足的地方。本次课程设计需要实现的是教工信息管理系统。主要实现的功能包括:教工信息的录入、
2、查询、修改、删除、排序、输出。教工信息可写入文件,也可从文件中读取。教工信息涉及的数据有教工号、姓名、出生年月、职务、工资、住址、电话等。按照需求分析所得,教工信息系统有以下几个功能模块 :1教工信息录入模块该模块主要录入教工的教工号、姓名、出生年月、职务、地址、电话号码和工资信息。2教工信息显示模块该模块主要显示教工的所有信息,有教工号、姓名、出生年月、职务、地址、电话号码和工资信息。3教工信息删除模块该模块先提示输入要删除的教工的教工号,然后查找与输入相同的教工号,查找到该教工后,删除该教工的所有信息。4教工信息排序模块选择排序后,该模块提示已经成功按照工资高低排序,如需查看排序后信息,选
3、择“教工信息显示”输出信息。5教工信息修改模块该模块先提示输入要修改的教工的教工号,按照输入的教工号查找到该教工,然后删除该教工信息。6教工信息查询模块该教工模块提示选择需要按教工号查询、按姓名查询还是按职务查询,然后通过选择查询的方式查找到该教工。由上述需求分析可得,系统的功能模块图如图1所示。图1 教工信息系统功能模块图二、 系统的设计与实现根据第一章的需求分析,接下来给出的是系统的设计与实现。1. 类的设计根据上述需求分析得出有以下教工类和链表类。(1)教工类教工类cteacher中有成员:教工号NUMSIZE,教工姓名NameSIZE,出生日期TimeSIZE,职务PostSIZE,住
4、址AddressSIZE ,电话号码Phone,工资Pay,标志flag 和构造函数cTeacher()。其中私有成员有NUMSIZE、NameSIZE、TimeSIZE、PostSIZE、AddressSIZE、Phone、Pay、flag,公有成员有cTeacher()。教工类的UML图如图2所示。 图2 教工类的UML图(2)链表类链表类tList中,有成员:构造函数tList(),创建链表Create(),判断链表是否为空的函数Empty() const,从尾部插入一个元素的函数Insert(const T e),返回第i个节点的函数GetcNode(int i),在链表中查询某个值的
5、函数bool Find(const T e),析构函数tList(),头节点head。链表类的UML图如图3所示。 图3 链表类的UML图 2. 界面设计(1)主界面的设计主界面中显示教工信息系统的信息,有教工信息录入、教工信息显示、教工信息保存、教工信息删除、按工资排序、教工信息修改、教工信息查询、退出系统。教工信息管理系统如图4所示。图4 教工信息管理系统(2)教工信息录入的设计 提示输入教工号、教工名、教工出生日期、教工职务、教工地址、教工电话号码和工资。教工信息录入如图5所示。图5 教工信息录入(3)教工信息的删除设计输入要删除的教工的教工号,先找到该教工的原始信息,然后显示并提示该教
6、工的信息删除成功。教工信息删除如图6所示。 图6 教工信息删除(4)教工信息的排序设计按照工资从小到大排序,选择排序后,提示输出按照工资从小到大排序成功。教工信息按照工资排序如图7所示。 图7 工资排序(5)教工信息的显示设计选择教工信息显示,显示出已存入的教工信息。教工信息的显示如图8所示。 图8 教工信息的显示(6)教工信息的修改设计选择要修改的教工的教工号,然后系统提示重新输入教工的教工号、教工名、教工出生日期、教工职务、教工地址、教工电话号码和工资。教工信息的修改如图9所示。 图9 教工信息的修改(7)教工信息的查询设计选择查询的方式,可以按教工号、教工名、教工职务查询。教工信息的查询
7、如图10所示。 图10 教工信息的查询3. 关键程序代码的分析(1) 系统的登录在主函数中,创建链表,输出教工信息系统的各功能提示。选择需要执行功能的序号,由switch判断、选择功能。选择1,执行教工基本信息的录入;选择2,执行教工基本信息的显示;选择3,执行教工基本信息的保存;选择4,执行教工基本信息的删除;选择5,执行教工工资按从高到低排序;选择6,执行教工基本信息的修改;选择7,执行教工基本信息的查询;选择8退出。 int main() tList tListMedic; tListMedic.Create(); /创建链表 ReadData(&tListMedic); while(1
8、) coutnn 教 工 管 理 系 统 nn; cout -nn; cout 1:教工信息录入nn; cout 2:教工信息显示nn; cout 3:教工信息保存nn; cout 4:教工信息删除nn; cout 5:按工资排序nn; cout 6:教工信息修改nn; cout 7:教工信息查询nn; cout 8:退 出 系 统 nn; coutchoose; switch(choose)/根据用户选择执行相关功能 case 1:AddTheTeacher(&tListMedic);/教工基本信息录入 break; case 2:Display(&tListMedic);/教工基本信息显示
9、 break; case 3:SaveData(&tListMedic); /教工基本信息保存 break; case 4:DeleteTheTeacher(&tListMedic);/教工基本信息删除 break; case 5:ArrangeData(&tListMedic); /教工按工资从小到大排序 break; case 6:ModifyTheTeacher(&tListMedic);/教工基本信息修改 break; case 7:FindTheTeacher(&tListMedic);/教工基本信息查询 break; case 8: exit(0);/退出 default:brea
10、k; return 0;(2) 信息的添加教工信息的添加,创建cTeacher类的tempTeacher对象,调用构造函数。提示输入“教工号”、“教工名”、“教工出生年月”、“教工职务”、“教工住址”、“教工电话号码”和“教工工资”,输入成功后显示“录入成功”。通过Insert函数录入教工的信息。void AddTheTeacher(tList *tListMedic)/录入教工函数 cTeacher tempTeacher; /定义临时教工 cout下面开始录入教工信息n; couttempTeacher.NUM;/读入教工号 couttempTeacher.Name;/读入教工名 cout
11、tempTeacher.Time;/读入出生日期 couttempTeacher.Post;/读入职务 couttempTeacher.Address;/读入住址 couttempTeacher.Phone;/读入电话号码 couttempTeacher.Pay;/读入工资 tempTeacher.flag=true; tListMedic-Insert(tempTeacher); cout录入成功!n; system(pause); system(cls);(3) 信息的删除删除教工信息,提示输入要删除的教工的教工号,定义一个指向链表第一个节点的指针p。如果指针创建成功,开始用while和i
12、f语句实现p指向的节点的教工号与存在的教工号的比较。如果相同,输出该教工的信息;如果没有相同的,提示没有所查询的教工。void DeleteTheTeacher(tList *tListMedic)/删除教工信息 char numSIZE; coutnum;/读取教工号 bool flag=false; int count=0; cNode *p; p=tListMedic-head-next; while(p) if(strcmp(p-data.NUM,num)=0 & p-data.flag) count+; flag=true; break; p=p-next; if(flag=fals
13、e) cout对不起,没有你所查询的教工!n;/如果找不到 else /如果找到了 count-; cout找到了,该教工的原始信息是:n; coutnn教工号:data).NUMt教工名:data).Namentt出生日期:data).Timentt职务:data).Post; coutntt住址:data).Addressntt电话号码:data).Phonentt工资data).Pay; coutdata).flag=false; cout该教工的信息删除成功!n; coutendl; system(pause); system(cls); return;(4) 信息的修改教工信息的修改
14、,提示输入要修改的教工的教工号,定义一个指向链表第一个节点的指针p。如果指针创建成功,开始用while和if语句实现p指向的节点的教工号与存在的教工号的比较。如果相同,提示重新输入教工的各个信息;如果没有相同的,提示没有所查询的教工。void ModifyTheTeacher(tList *tListMedic)/修改教工信息 char numSIZE; coutnum;/读取教工号 bool flag=false; cNode *p; p=tListMedic-head-next; while(p) if(strcmp(p-data.NUM,num)=0 & p-data.flag) fla
15、g=true; break; p=p-next; if(flag=false) cout对不起,没有你所查询的教工!n;/如果找不到 else /如果找到了 /显示屏幕 cout找到了,该教工的原始信息是:n; coutnn教工号:data).NUMt教工名:data).Namentt出生日期:data).Timentt职务:data).Post; coutntt住址:data).Addressntt电话号码:data).Phonentt工资data).Pay; coutn下面开始修改该教工的信息:n; cTeacher tempTeacher; /定义临时教工 couttempTeacher
16、.NUM;/读入教工号 couttempTeacher.Name;/读入教工名 couttempTeacher.Time;/读入出生日期 couttempTeacher.Post;/读入职务 couttempTeacher.Address;/读入住址 couttempTeacher.Phone;/读入电话号码 couttempTeacher.Pay;/读入工资 tempTeacher.flag=true; p-data=tempTeacher; cout修改成功!; coutendl; system(pause); system(cls); return;4. 系统的调试程序调试是将编制的程序
17、投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信息系统正确性的必不可少的步骤。编完计算机程序,必须送入计算机中测试。编程结束后,经Debug调试发现在以下程序段出现错误:void ArrangeData(tList *tListMedic)/按照工资从小到大排序cNode *p, *q; cTeacher tempTeacher; for (p = tListMedic-head-next; p != NULL; p = p-next) for (q = p; q != NULL; q = q-next) if (p-data.Pay q-data
18、.Pay) tempTeacher.flag=p-data.flag; strcpy(tempTeacher.Address, p-data.Address); strcpy(tempTeacher.NUM,p-data.NUM); strcpy(tempTeacher.Name, p-data.Name); strcpy(tempTeacher.Time,p-data.Time); strcpy(tempTeacher.Post, p-data.Post); tempTeacher.Phone = p-data.Phone; tempTeacher.Pay = p-data.Pay; p-d
19、ata.flag = q-data.flag; strcpy(p-data.Address, q-data.Address); strcpy(p-data.NUM, q-data.NUM); strcpy(p-data.Name, q-data.Name); strcpy(p-data.Time, q-data.Time); strcpy(p-data.Post, q-data.Post); p-data.Phone = q-data.Phone; p-data.Pay = q-data.Pay; q-data.flag=tempTeacher.flag; strcpy(q-data.Addr
20、ess, tempTeacher.Address); strcpy(q-data.NUM,tempTeacher.NUM); strcpy(q-data.Name, tempTeacher.Name); strcpy(q-data.Time,tempTeacher.Time); strcpy(q-data.Post, tempTeacher.Post); q-data.Phone = tempTeacher.Phone; q-data.Pay = tempTeacher.Pay; cout按照工资从小到大排序成功endl;经过仔细的查找,发现在程序中有两个for语句和一个if语句,在程序末尾少
21、了一个”,修改后程序运行正确。三、总结课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.通过短短四天时间的课程设计,在无形的压力下提高了我的办事速度,锻炼了我的工作效率。课程设计是与实际接轨的,我通过网络了解了需要完成的教工信息管理系统的相关数据。然后对需要实现的功能进行分析、设计、编程和测试。面向对象程序设计作为一门软件设计课程,常用来解决一些实际问题。此次设计加强了我灵活应用理论知识的能力,也锻炼了我理论联系实际的技能。在设计过程中,总会遇到这样或那样的问题,如标识符大小写的问题,函数体缺少“”,以及有些函数没有事先声明等问题。一个小问题会引起一连串的错误,需要做大量的工作,花大量的时间才能解决。自然而然,培养了我的耐心。也为以后的工作积累了经验,增强了信心。本次设计使我对C+有了更深的认识和理解,让我认识到一个好的程序会给解决实际问题带来很大的便利。编程过程有一个清晰的编程思路是很重要的。我们学习的知识是有限的,在以后的工作中我们肯定会遇到更多未知领域的问题,锻炼这方面的能力会使我们受益匪浅。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1