基于net列车时刻查询系统课程设计报告.docx
- 文档编号:12765346
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:39
- 大小:113.91KB
基于net列车时刻查询系统课程设计报告.docx
《基于net列车时刻查询系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于net列车时刻查询系统课程设计报告.docx(39页珍藏版)》请在冰点文库上搜索。
基于net列车时刻查询系统课程设计报告
课程设计报告
课程设计题目:
列车时刻查询系统
一、课程设计题目、时间、地点……………………………3
二、系统分析…………………………………………………3
三、课程设计目的……………………………………………4
四、课程设计要求……………………………………………4
五、实现思路………………………………………………5
六、实验过程…………………………………………………13
七、课程设计总结……………………………………………31
八、心得体会…………………………………………………32
(一)课程设计题目、时间、地点:
列车时刻查询系统
2009-12-7
软件楼504
(二)系统分析:
随着人们生活水平的提高和信息化时代的到来,管理系统的作用已越来越重要,列车时刻查询系统是个小型管理系统,用C++语言实现。
所有数据都要利用文件系统保存,使用ofstream文件输入输出流保存文件信息,以备系统下次运行时使用。
主要功能包括:
录入列车信息:
该部分功能主要是用于系统管理员输入列车的各种信息,加强系统的可扩展性和延续性,使系统信息保持更新。
浏览列车信息:
浏览全部的列车信息,将所有的列车时刻信息都展示出来方便用户调用,此功能管理员和游客皆可调用。
查询列车信息:
查询列车时刻信息,以及相关资料,查询分两种方式,一种是按列车号查询,另一种是按终点站查询。
两种查询想辅助。
使用户更快捷的查询到有关信息。
删除列车信息:
删除列车时刻信息功能主要用于更新列车信息数据,对于不必要的信息和错误的过时的信息进行相关处理,有利于简化系统,对于系统的运行速度的提升有着良好的加速效果。
此功能是管理员专用功能,游客用户无权调用。
修改列车信息:
此功能用于修改列车信息,使用权限仅限于管理员。
进行列车信息的相关修改对于系统的正常运行有着显著的作用。
保存列车信息:
保存功能通过输入输出流来实现,将列车信息保存在DEBUG目录下,使用文本文档的形式保存相关信息。
关于列车时刻查询系统:
列车时刻查询系统的相关说明,以及使用规则及注意事项。
退出系统:
退出键,退出功能。
(三)课程设计目的:
在《面向对象程序设计》课程理论与实验教学的基础上,根据软件工程的方法与流程,在相对集中的实训教学时间内,通过一个功能较完整的小型应用系统,复习与深入掌握面向对象的程序设计思想与技术方法。
同时,作为整个实践教学体系一部分,系统培养学生采用面向对象的方法分析问题与解决问题的能力及团体组织与协作能力。
本次课程设计的主要目的是复习C++语言中学过的基本知识,综合运用所学的C++语言知识解决一个比较实际的简单问题,初步掌握开发一个小型实用系统的基本方法,侧重对类的定义和使用以及对数组、链表、函数、指针、结构体和文件等相关内容的综合应用,使我们能进一步熟悉掌握C++语言的基本语法,掌握C++语言中类的定义派生,以及各种结构的使用,还有函数设计方法、结构化设计思想和链表的使用方法以及该注意的地方,掌握规范的程序设计思想,掌握规范的程序编码的格式以及学会调试一个较长程序的基本方法。
进一步提升自己的编程能力并逐步培养编程思维,进而不断提高我们解决问题的能力,并为以后的语言学习打下良好的基础。
(四)实验要求:
从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:
1)根据实现的功能,划分出合理的对象类,明确对象类间的关系。
2)为每个对象类设计正确的域和方法,为每个方法设计合理的方法体。
同时,为对象类及内部的域和方法运用正确的修饰符,如访问控制符等。
3)编程简练,程序功能齐全,能正确运行。
4)说明书、流程图要清楚,规范(必须采用UML格式)
5)课题完成后必须按要求提交课程设计报告,格式规范,内容详实。
(五)实现思路:
合理地选择和实现系统的数据结构,对于此程序的编写非常重要。
列车时刻查询系统是一种复杂的对象,无法用简单数据类型来描述,显然要定义不同的类和结构体。
由于列车时刻信息很多,还需定义数组或者链表。
数组的特点是数据在内存中顺序存放,长度必须事先指定,而列车时刻信息的个数很难估计。
如果数组长度定得过大,会造成存储空间的浪费;如果数组长度得过小,又无法满足需求。
特别是进行插入、删除等操作时,代价较大而且又容易出错。
用链表管理列车时刻信息就显得较为妥当,首先它不用估计信息个数,其次进行插入、删除等操作时代价较小。
所以列车时刻信息用结构体定义,用链表作为临时数据处理,用文件来存储数据。
要注意数据定义的数据类型,用函数实现相应的功能,然后在主程序中进行调用。
程序运行的时候用菜单选择功能,菜单选择功能如下:
录入列车信息-----------按数字键1,
浏览列车信息-----------按数字键2,
查询列车信息-----------按数字键3,
删除列车信息-----------按数字键4,
修改列车信息-----------按数字键5,
保存列车信息-----------按数字键6,
关于列车时刻查询系统---按数字键7,
退出系统---------------按数字键0。
类:
将列车信息定义为一个类-train_infor并且将相关的函数进行定义,在类的定义中还要申明好几种数据的类型,局部变量和全局变量。
将列车相关的功能也定义为一个类-train_link,将它的相关信息也定义好。
结构体模块:
定义链表的关键在于为列车时刻信息定义结构体类型时应该定义一个next成员,该成员可以把列车时刻信息结点进行链接。
主模块:
结构体程序设计的基本思想是:
自顶向下,逐步细化,把功能进行分解,最终分解为一些较易实现的小模块。
模块是由函数实现的,函数之间形成明确的调用关系。
main函数就是程序的主模块,它控制整个程序的运行,具体功能主要在各个子模块中实现。
main函数不断循环调用主菜单函数,根据用户输入的命令,调用相关的功能函数,如果用户输入“退出”命令,则结束程序。
初始化模块:
该模块负责在用户进入系统时,调用保存在磁盘文件中的列车时刻信息。
列车时刻信息保存在DEBUG文件夹目录中,用ofstream文件输入输出流的方式打开。
调用ifstream功能从文件读入数据,动态分配内存空间,存放列车时刻信息,并且在读入数据时组织链表。
菜单模块:
系统与用户交互的界面是通过菜单实现的,用户根据菜单的提示输入命令,然后主模块调用相应的功能模块,实现用户所要求的操作。
菜单是在train_link类中由menu函数实现的,主要是通过显示一些文字,构建一个简单的字符界面。
为了便于操作,又定义一个字符串数组用来显示菜单的轮廓。
在menu函数中调用了库函数system(“cls”),它的功能是清屏。
添加模块:
列车时刻查询系统的添加的添加功能是由train_link:
:
input()函数来实现的。
添加的列车时刻信息插入在链表的尾部。
通过使用cin.fail(),cin.get(),cin.clear(),来实现对输入数据的正确性进行检索。
以防出现数据信息输入错误。
并通过train_infor:
:
input函数来导入保存的信息。
列车时刻查询系统通过使用train_infor:
:
output()函数,使用train_infor:
:
GetTime()函数来获得系统的当前时间。
并且调用系统时间函数与当前时间与列车发车时间进行对比以此判断列车是否出发。
使用下列语句Hour_start<0||Hour_start>24||Minute_start<0||Minute_start>60判断时间格式是否出错,小时不能小于0大于24,分钟不能小于0大于60。
通过使用train_infor:
:
output(ofstream&os)函数来实现数据的保存功能。
并且使用setw()来设置输出宽度。
删除模块:
列车时刻信息删除功能是通过train_link:
:
del()函数实现的,用户输入序号之后,删除相关列车信息。
删除算法较为复杂,关键是要把遇到的各种情况考虑清楚。
可能遇到的情况有:
链表为空,删除的是第一个结点,删除的是中间结点以及所删结点不存在等,这些都是要分别处理的。
通过调用clear()函数进行释放此信息所占的内存。
查询模块:
查询模块的功能是由train_link:
:
found()函数来实现的。
根据输入的数字进行调用函数,按1是按列车序号在链表中进行查找工作。
如果找到,则显示该列车信息;如果查无此信息,也给出提示信息。
按2是按终点站查询,方法同上。
通过调用train_link:
:
found()函数进行序号的比较,从而确定用户所要查找的信息。
显示模块:
显示模块的功能是由train_link:
:
show()函数实现的。
train_link:
:
show()函数从链表的第一个结点开始,将所有的列车时刻信息显示在屏幕上。
列车信息修改:
train_link:
:
mend()函数来实现修改功能,在修改中按提示输入相关操作按键进行修改。
存盘模块:
使用train_link:
:
save()函数来保存列车时刻信息存盘模块的功能是通过ofstream来实现的。
ifstream以追加方式打开文件。
如果没有文件,它会创建一个新的文件;如果已有文件,它会在此文件中继续添加信息。
调用ofstream将链表中的结点写入磁盘。
退出模块:
退出模块它的功能是结束并且退出系统。
UML图:
局部UML图1:
局部UML图2:
整体UML图:
(六)实验过程:
(一)详细设计:
按照概要设计列出的功能模块,设计出与这些模块一一对应的功能函数,以供主函数使用。
(1)类:
classtrain_infor
功能函数:
train_infor();
train_infor*next;
input();录入函数
input(ifstream&is); 读取函数
output(); 输出函数
output(ofstream&os); 写入函数
GetTime_start(); 获取发车时间函数
boolGetTime();判断当前班次状况函数
Get_train_order(){returntrain_order;} 返回班次号
Get_end()const; 返回终点站的字符串
classtrain_link
input(); 录入列车信息函数
mend(); 修改列车信息函数
del(); 删除列车信息函数
intfind(train_infor**p,intnum,char*pn);查找函数
found(); 查询列车信息函数
show(); 显示列车信息函数
save(); 保存列车信息函数
begin(); 初始化列车信息函数
clear(); 清除函数函数
about(); 关于列车信息函数
mainmenu(); 主菜单函数
voidsetkey(intk){key=k;} 设置系统修改标志
intgetkey(){returnkey;} 返回系统修改标志
(2)函数原型:
mainmenu()
函数功能:
主菜单。
用户通过菜单进行选择。
调用各功能函数
(3)函数原型:
input()
函数功能:
该函数是用来添加列车时刻信息。
当在主函数中输入1时,即进入添加列车时刻信息模块,即开始输入列车时刻信息,按照提示信息输入,每输入完一个数就按一下回车键,当输入最后一个数据时结束程序,然后选择继续还是返回主函数,按1继续添加,按0显示主菜单界面继续选择。
(4)函数原型:
del()
函数功能:
该函数的作用是删除指定列车时刻财信息。
首先根据提示信息输入要删除结点的列车号,输入后根据列车号顺序查找结点,如果没有找到,则输出没有找到的信息;否则,显示找到的信息,然后删除。
调用结束返回主函数,显示主菜单。
(5)函数原型:
found()
函数功能:
该函数的作用是查找指定的列车时刻记录。
两种查询方式,一种是按列车号查询,另一种是按终点站查询
根据提示信息输入要查找的结点,输入后根据条件查找,如果没有找到,则输出没有找到的信息;否则,显示找到的信息。
调用结束返回主函数,显示主菜单。
(6)函数原型:
show()
函数功能:
该函数的作用是将列车时刻信息记录全部显示在屏幕中。
(7)函数原型:
save()
函数功能:
该函数的作用是将个人理财记录保存到指定文件中。
在访问链表的过程中将记录写入文件。
(二)源程序如下:
#include
#include
#include
#include
#include
#include
usingnamespacestd;//命名空间
classtrain_infor
{
private:
staticinttrain_No;//静态数据成员,统计当前所有的train_infor对象的数目
charstart[20];//起点站
charend[20];//终点站
inttrain_order;//班次号
intHour_start,Minute_start;//发车时间
floatGoHour;//行车时间
public:
train_infor();
~train_infor();
train_infor*next;
voidinput();//录入函数
voidinput(ifstream&is);//读取函数
voidoutput();//输出函数
voidoutput(ofstream&os);//写入函数
voidGetTime_start();//获取发车时间函数
boolGetTime();//判断当前班次状况函数
intGet_train_order(){returntrain_order;}//返回班次号
stringGet_end()const;//返回终点站的字符串
};
inttrain_infor:
:
train_No=1;
train_infor:
:
train_infor()
{
train_No++;
}
train_infor:
:
~train_infor()
{
train_No--;
}
voidtrain_infor:
:
input()//车次信息输入
{
cout<<"\t\t\t按提示输入:
"< cout<<"请输入班次: "; while (1) { cin>>train_order; if(cin.fail())//判断输入的数据类型是否有错 { cout<<"\n班次输入错误,请重新输入: "; cin.clear();//cin.clear()方法很重要,如果不调用,则cin异常不会终止,那么程序就进入了死循环 cin.get();//一般情况下,cin自动跳过输入的空格,如果你要把键盘上输入的每个字符包括空格和回车键都作为一个输入字符给字符型变量时,必须使用函数cin.get() } else break; } GetTime_start(); cout<<"请输入行车时间: "; while (1) { cin>>GoHour; if(cin.fail())//判断输入的数据类型是否有错 { cout<<"\n行车时间输入错误,请重新输入: "; cin.clear(); cin.get(); } else break; } cout<<"请输入起始站与终点站(始发站/终点站): "; cin>>start;cin>>end; } voidtrain_infor: : input(ifstream&is) { is>>train_order>>Hour_start>>Minute_start>>start>>end>>GoHour; is.get(); } voidtrain_infor: : output() { cout<<""< if(Minute_start==0)//判断发车时的分钟时刻,若为分则在后面多显示个,以符合时间格式 { cout< "< } else { cout< "< } cout< if(! GetTime()) cout<<"\t此班列车已出发"< else cout<<"\t此班列车未出发"< } voidtrain_infor: : output(ofstream&os) { os< < < < < < < } voidtrain_infor: : GetTime_start() { cout<<"请输入始发时间(时/分): "; while (1) { cin>>Hour_start>>Minute_start; if(cin.fail())//判断输入的数据类型是否有错 { cout<<"\n时间输入错误,请重新输入: "; cin.clear(); cin.get(); } elseif(Hour_start<0||Hour_start>24||Minute_start<0||Minute_start>60) cout<<"\n时间格式出错,请重新输入: ";//判断时间格式是否出错,小时不能小于0大于24,分钟不能小于0大于60 else break; } } booltrain_infor: : GetTime() { structtm*local; time_tt; t=time(NULL); local=localtime(&t);//获取当前系统时间 if(local->tm_hour return1;//比较当前时间与发车时间,获得班次的当前状况,返回表示班次未出发 else return0;//返回表示班次已出发 } stringtrain_infor: : Get_end()const { strings=end; returns; } classtrain_link { public: train_link(){head=newtrain_infor;head->next=NULL;key=0;}//带参数的构造函数 ~train_link(){deletehead;}//析构函数 voidinput();//录入列车信息 voidmend();//修改列车信息 voiddel();//删除列车信息 intfind(train_infor**p,intnum,char*pn);//查找函数 voidfound();//查询列车信息 voidshow();//显示列车信息 voidsave();//保存列车信息 voidbegin();//初始化列车信息 voidclear();//清除函数 voidabout();//关于列车信息 charmainmenu();//主菜单函数 voidsetkey(intk){key=k;}//设置系统修改标志 intgetkey(){returnkey;}//返回系统修改标志 private: train_infor*head;//链表指针 intkey;//系统修改标志 intpassword;//管理员登陆标志 }; voidtrain_link: : input()//列车信息输入功能菜单控制 { if(password==1) { train_infor*p,*p2=NULL; p=head; intn=1;//intn; while(p->next) p=p->next; while(n) { p2=newtrain_infor; p2->input(); p->next=p2; p2->next=NULL; p=p->next; train_link: : setkey (1); cout<<"\t\t\t按1继续输入,按0返回菜单: "; cin>>n; if(! cin) throwstring("数据输入错误"); } } else cout<<"\n\t\t对不起,游客不能录入车票信息"< } voidtrain_link: : show()//浏览列车信息 { cout<<"列车基本信息如下: "< <<"|班次发车时间起点站终点站行车时间当前状况|"< train_infor*p; p=head; while(p->next) { (p->next)->output(); p=p->next; } } voidtrain_link: : found()//列车信息查询 { train_infor*p; intnu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 net 列车时刻 查询 系统 课程设计 报告