教工信息管理系统.docx
- 文档编号:6403956
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:16
- 大小:150.27KB
教工信息管理系统.docx
《教工信息管理系统.docx》由会员分享,可在线阅读,更多相关《教工信息管理系统.docx(16页珍藏版)》请在冰豆网上搜索。
教工信息管理系统
学号:
课程设计报告
课程设计名称:
面向对象程序设计课程设计
题目:
教工信息管理系统
学生姓名:
专业班级:
指导教师:
完成时间:
年月日年月日
成绩:
一、系统的需求分析
需求分析是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么。
可以说,“需求分析”就是确定要计算机“做什么”。
需求分析包括提炼,分析和仔细审查已收集到的需求,以确保所有的风险承担者都明其含义并找出其中的错误,遗憾或其它不足的地方。
本次课程设计需要实现的是——教工信息管理系统。
主要实现的功能包括:
教工信息的录入、查询、修改、删除、排序、输出。
教工信息可写入文件,也可从文件中读取。
教工信息涉及的数据有教工号、姓名、出生年月、职务、工资、住址、电话等。
按照需求分析所得,教工信息系统有以下几个功能模块:
1.教工信息录入模块
该模块主要录入教工的教工号、姓名、出生年月、职务、地址、电话号码和工资信息。
2.教工信息显示模块
该模块主要显示教工的所有信息,有教工号、姓名、出生年月、职务、地址、电话号码和工资信息。
3.教工信息删除模块
该模块先提示输入要删除的教工的教工号,然后查找与输入相同的教工号,查找到该教工后,删除该教工的所有信息。
4.教工信息排序模块
选择排序后,该模块提示已经成功按照工资高低排序,如需查看排序后信息,选择“教工信息显示”输出信息。
5.教工信息修改模块
该模块先提示输入要修改的教工的教工号,按照输入的教工号查找到该教工,然后删除该教工信息。
6.教工信息查询模块
该教工模块提示选择需要按教工号查询、按姓名查询还是按职务查询,然后通过选择查询的方式查找到该教工。
由上述需求分析可得,系统的功能模块图如图1所示。
图1教工信息系统功能模块图
二、系统的设计与实现
根据第一章的需求分析,接下来给出的是系统的设计与实现。
1.类的设计
根据上述需求分析得出有以下教工类和链表类。
(1)教工类
教工类cteacher中有成员:
教工号NUM[SIZE],教工姓名Name[SIZE],出生日期Time[SIZE],职务Post[SIZE],住址Address[SIZE],电话号码Phone,工资Pay,标志flag和构造函数cTeacher()。
其中私有成员有NUM[SIZE]、Name[SIZE]、Time[SIZE]、Post[SIZE]、Address[SIZE]、Phone、Pay、flag,公有成员有cTeacher()。
教工类的UML图如图2所示。
图2教工类的UML图
(2)链表类
链表类tList中,有成员:
构造函数tList(),创建链表Create(),判断链表是否为空的函数Empty()const,从尾部插入一个元素的函数Insert(constTe),返回第i个节点的函数GetcNode(inti),在链表中查询某个值的函数boolFind(constTe),析构函数~tList(),头节点head。
链表类的UML图如图3所示。
图3链表类的UML图
2.界面设计
(1)主界面的设计
主界面中显示教工信息系统的信息,有教工信息录入、教工信息显示、教工信息保存、教工信息删除、按工资排序、教工信息修改、教工信息查询、退出系统。
教工信息管理系统如图4所示。
图4教工信息管理系统
(2)教工信息录入的设计
提示输入教工号、教工名、教工出生日期、教工职务、教工地址、教工电话号码和工资。
教工信息录入如图5所示。
图5教工信息录入
(3)教工信息的删除设计
输入要删除的教工的教工号,先找到该教工的原始信息,然后显示并提示该教工的信息删除成功。
教工信息删除如图6所示。
图6教工信息删除
(4)教工信息的排序设计
按照工资从小到大排序,选择排序后,提示输出按照工资从小到大排序成功。
教工信息按照工资排序如图7所示。
图7工资排序
(5)教工信息的显示设计
选择教工信息显示,显示出已存入的教工信息。
教工信息的显示如图8所示。
图8教工信息的显示
(6)教工信息的修改设计
选择要修改的教工的教工号,然后系统提示重新输入教工的教工号、教工名、教工出生日期、教工职务、教工地址、教工电话号码和工资。
教工信息的修改如图9所示。
图9教工信息的修改
(7)教工信息的查询设计
选择查询的方式,可以按教工号、教工名、教工职务查询。
教工信息的查询如图10所示。
图10教工信息的查询
3.关键程序代码的分析
(1)系统的登录
在主函数中,创建链表,输出教工信息系统的各功能提示。
选择需要执行功能的序号,由switch判断、选择功能。
选择1,执行教工基本信息的录入;选择2,执行教工基本信息的显示;选择3,执行教工基本信息的保存;选择4,执行教工基本信息的删除;选择5,执行教工工资按从高到低排序;选择6,执行教工基本信息的修改;选择7,执行教工基本信息的查询;选择8退出。
intmain()
{
tList
tListMedic.Create();//创建链表
ReadData(&tListMedic);
while
(1)
{
cout<<"\n\n教工管理系统\n\n";
cout<<"-----------------------------\n\n";
cout<<"1:
教工信息录入\n\n";
cout<<"2:
教工信息显示\n\n";
cout<<"3:
教工信息保存\n\n";
cout<<"4:
教工信息删除\n\n";
cout<<"5:
按工资排序\n\n";
cout<<"6:
教工信息修改\n\n";
cout<<"7:
教工信息查询\n\n";
cout<<"8:
退出系统\n\n";
cout<<"请你选择所需操作的序号(1~8):
";
intchoose=0;
cin>>choose;
switch(choose)//根据用户选择执行相关功能
{
case1:
AddTheTeacher(&tListMedic);//教工基本信息录入
break;
case2:
Display(&tListMedic);//教工基本信息显示
break;
case3:
SaveData(&tListMedic);//教工基本信息保存
break;
case4:
DeleteTheTeacher(&tListMedic);//教工基本信息删除
break;
case5:
ArrangeData(&tListMedic);//教工按工资从小到大排序
break;
case6:
ModifyTheTeacher(&tListMedic);//教工基本信息修改
break;
case7:
FindTheTeacher(&tListMedic);//教工基本信息查询
break;
case8:
exit(0);//退出
default:
break;
}
}
return0;
}
(2)信息的添加
教工信息的添加,创建cTeacher类的tempTeacher对象,调用构造函数。
提示输入“教工号”、“教工名”、“教工出生年月”、“教工职务”、“教工住址”、“教工电话号码”和“教工工资”,输入成功后显示“录入成功”。
通过Insert函数录入教工的信息。
voidAddTheTeacher(tList
{
cTeachertempTeacher;//定义临时教工
cout<<"下面开始录入教工信息\n";
cout<<"请输入教工号:
";
cin>>tempTeacher.NUM;//读入教工号
cout<<"请输入教工名:
";
cin>>tempTeacher.Name;//读入教工名
cout<<"请输入教工出生日期:
";
cin>>tempTeacher.Time;//读入出生日期
cout<<"请输入教工职务:
";
cin>>tempTeacher.Post;//读入职务
cout<<"请输入教工住址:
";
cin>>tempTeacher.Address;//读入住址
cout<<"请输入教工电话号码:
";
cin>>tempTeacher.Phone;//读入电话号码
cout<<"请输入工资";
cin>>tempTeacher.Pay;//读入工资
tempTeacher.flag=true;
tListMedic->Insert(tempTeacher);
cout<<"录入成功!
\n";
system("pause");
system("cls");
}
(3)信息的删除
删除教工信息,提示输入要删除的教工的教工号,定义一个指向链表第一个节点的指针p。
如果指针创建成功,开始用while和if语句实现p指向的节点的教工号与存在的教工号的比较。
如果相同,输出该教工的信息;如果没有相同的,提示没有所查询的教工。
voidDeleteTheTeacher(tList
{
charnum[SIZE];
cout<<"\n请输入你要删除教工的教工号:
";
cin>>num;//读取教工号
boolflag=false;
intcount=0;
cNode
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==false)cout<<"对不起,没有你所查询的教工!
\n";//如果找不到
else//如果找到了
{
count--;
cout<<"找到了,该教工的原始信息是:
\n";
cout<<"\n\n教工号:
"<<(p->data).NUM<<"\t教工名:
"<<(p->data).Name<<"\n\t\t出生日期:
"<<(p->data).Time<<"\n\t\t职务:
"<<(p->data).Post;
cout<<"\n\t\t住址:
"<<(p->data).Address<<"\n\t\t电话号码:
"<<(p->data).Phone<<"\n\t\t工资"<<(p->data).Pay;
cout< (p->data).flag=false; cout<<"该教工的信息删除成功! \n"; } cout< system("pause"); system("cls"); return; } (4)信息的修改 教工信息的修改,提示输入要修改的教工的教工号,定义一个指向链表第一个节点的指针p。 如果指针创建成功,开始用while和if语句实现p指向的节点的教工号与存在的教工号的比较。 如果相同,提示重新输入教工的各个信息;如果没有相同的,提示没有所查询的教工。 voidModifyTheTeacher(tList { charnum[SIZE]; cout<<"\n请输入你要修改的教工的教工号: "; cin>>num;//读取教工号 boolflag=false; cNode p=tListMedic->head->next; while(p) { if(strcmp(p->data.NUM,num)==0&&p->data.flag) { flag=true; break; } p=p->next; } if(flag==false)cout<<"对不起,没有你所查询的教工! \n";//如果找不到 else//如果找到了 {//显示屏幕 cout<<"找到了,该教工的原始信息是: \n"; cout<<"\n\n教工号: "<<(p->data).NUM<<"\t教工名: "<<(p->data).Name<<"\n\t\t出生日期: "<<(p->data).Time<<"\n\t\t职务: "<<(p->data).Post; cout<<"\n\t\t住址: "<<(p->data).Address<<"\n\t\t电话号码: "<<(p->data).Phone<<"\n\t\t工资"<<(p->data).Pay; cout<<"\n下面开始修改该教工的信息: \n"; cTeachertempTeacher;//定义临时教工 cout<<"请输入教工号: "; cin>>tempTeacher.NUM;//读入教工号 cout<<"请输入教工名: "; cin>>tempTeacher.Name;//读入教工名 cout<<"请输入出生日期: "; cin>>tempTeacher.Time;//读入出生日期 cout<<"请输入教工职务: "; cin>>tempTeacher.Post;//读入职务 cout<<"请输入教工住址: "; cin>>tempTeacher.Address;//读入住址 cout<<"请输入教工电话号码: "; cin>>tempTeacher.Phone;//读入电话号码 cout<<"请输入工资: "; cin>>tempTeacher.Pay;//读入工资 tempTeacher.flag=true; p->data=tempTeacher; cout<<"修改成功! "; } cout< system("pause"); system("cls"); return; } 4.系统的调试 程序调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。 这是保证计算机信息系统正确性的必不可少的步骤。 编完计算机程序,必须送入计算机中测试。 编程结束后,经Debug调试发现在以下程序段出现错误: voidArrangeData(tList { cNode cTeachertempTeacher; for(p=tListMedic->head->next;p! =NULL;p=p->next) { for(q=p;q! =NULL;q=q->next) { if(p->data.Pay>q->data.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->data.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.Address,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<<"按照工资从小到大排序成功"< } 经过仔细的查找,发现在程序中有两个for语句和一个if语句,在程序末尾少了一个”}”,修改后程序运行正确。 三、总结 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程. 通过短短四天时间的课程设计,在无形的压力下提高了我的办事速度,锻炼了我的工作效率。 课程设计是与实际接轨的,我通过网络了解了需要完成的教工信息管理系统的相关数据。 然后对需要实现的功能进行分析、设计、编程和测试。 面向对象程序设计作为一门软件设计课程,常用来解决一些实际问题。 此次设计加强了我灵活应用理论知识的能力,也锻炼了我理论联系实际的技能。 在设计过程中,总会遇到这样或那样的问题,如标识符大小写的问题,函数体缺少“}”,以及有些函数没有事先声明等问题。 一个小问题会引起一连串的错误,需要做大量的工作,花大量的时间才能解决。 自然而然,培养了我的耐心。 也为以后的工作积累了经验,增强了信心。 本次设计使我对C++有了更深的认识和理解,让我认识到一个好的程序会给解决实际问题带来很大的便利。 编程过程有一个清晰的编程思路是很重要的。 我们学习的知识是有限的,在以后的工作中我们肯定会遇到更多未知领域的问题,锻炼这方面的能力会使我们受益匪浅。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教工 信息管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)