c++课程设计心得体会

时间:2019-05-12 16:20:13下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《c++课程设计心得体会》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《c++课程设计心得体会》。

第一篇:c++课程设计心得体会

课程设计心得体会

学生成绩管理是高等学校教务管理的重要组成部分,其内容较多,要完成能够实现人员的信息录入、查询、修改、删除、统计、保存、显示等操作。系统具体实现的功能如下:

1.添加新的联系人

2.删除所有联系人

3.删除某个联系人

4.查询某个联系人

5.查询所有联系人

6.将电话本导出到文件

7.从文件导入电话本

8.查询并编辑某个联系人

9.全班同学的平均分

大概的算法分析

学生成绩管理软件的数据结构

学生成绩一般都是以每个成员为单位进行管理的,一个学生学号用一个结点来表示。考虑到添加、查询和删除的方便,这些以学号为单位的结点用链表方式组成一个主目录。每个结点有四个域:

(1)学生代号;

(2)课程情况;

(3)成绩信息管理情况;

各函数的功能和实现(学生成绩管理的相关功能由对应的函数来实现)(1)添加新的联系人

用代码实现输入及输出添加新的联系人的学号,姓名,性别,生日、语文成绩,数学成绩;完成添加工作。

(2)删除某个联系人

首先输入要删除的姓名,然后要在系统中查看是否有此记录,再用分支结构实现删除链表中此员工结点并修改学校员工链表及未找到这条记录;因为可能系统中不存在此记录。

(3)删除所有联系人

此功能要逐条删除联系人,则我们采用分支、循环结构实现首先遍历是否有给记录,输出读取记录或没有该记录;再到文件是否读完,若没读完则要循环继续读取,否则已删除了所有记录。

(4)查询某个联系人

因此功能会出现还没有任何记录、未找到这条记、输出该联系人信息三种情况,我们则选用简单的三分支结构;首先要请输入要查询联系人的姓名,输出有记录或还没有任何记录,有记录则遍历所有人,最后是未找到这条记录,输出该联系人信息。

(7)从电话本导入文件的流程图

首先查看是否有记录,输出没有任何记录或打开“Manager.txt”,历遍链表,将人员结点信息写入文件Manager.txt、关闭文件,最后成功保存到Manager.txt。

其余的函数功能实现相似则不重复。

心得体会

刚放假不久,我们组的积极分子们就张罗着要开始编写程序了,编写这个程序我们经历了讨论选题,编写代码,调试,写设计报告等。在这期间我们查阅了很多相关的资料,曾盯着课本发呆过,我们成员之间也曾进行过激烈的口舌论战。经过这个暑假来的实践学习,使我们对C++语言有了更进一步的认识和了解,要想学好它,则重在实践,要通过不断的上机操作及实例运用才能更好地深入体会它,当然通过实践,我们也发现我们的好多不足之处。就比如我们对C++语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,一些经常出现的错误也不能很好地处理。我们编写这个程序使用的是比较简单的函数及结构,由于我们的水平有限,还不能很好的使用一些效率高的方式来编写,所以也没有突出的创新点。在做题的时候我们都是分工合作。分工完成结构体、函数设计、算法分析等,这些过程中总是有很多错误出现,有好多的小问题都是我们粗心大意造成的,所以设计程序一定要仔细,不容一点的马虎。当然也有大问题,关于文件的操作,类的使用等等这些使用我们都琢磨了很久,在解决错误时我们有时几乎焦头烂额了。但是我们与队友之间都会不断的相互鼓励、支持,彼此都努力维护着将作业写完。虽然这设计有点枯燥无味,但是当最后我们大功告成时,回味起来还是美滋滋的。总的来说我们真的是在设计的过程中受益匪浅。

第二篇:c++课程设计总结

课程设计总结

经过一个学期对《C++程序设计》的学习,我学习到了基本的理论知识,了解到了C++语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打下了坚实的基础。在为期近两周的C++课程设计中,我体会颇多,学到了很多东西。我加强了对C++程序设计这门课程的认识,并且复习了自己以前学习到的知识。这些都使得我对计算机语言的学习有了更深入的认识!总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。像职工信息表这样的程序设计,经历了平时在课堂和考试中不会出现的问题和考验。而这些问题,这并不是我们平时只靠课本,就可以轻易解决的。所以,锻炼了我们挑战难题,学会用已掌握的知识去解决具体问题的能力,进一步培养了独立思考问题和解决问题的能力。特别是学会了在Visual C++中如何调试程序的方法。当然,老师的指导和同学的帮助也是不可忽视的,他们给了我许多提示和帮助,教会了我编译复杂程序的方法。

在老师和同学的帮助下,通过自己的努力,终于完成了这次职工信息表的简单课程设计。我经过这段时间的编程,对其中的艰辛,我是深有体会。从刚开始的选择程序、理解程序到后来的调试程序以及改进程序这个过程中,我遇到了各种各样的困难和挫折。但是我坚定信念,对自己充满了信心,想尽一切办法克服重重困难。

通过课程设计的训练,我进一步学习和掌握了对程序的设计和编写,从中体会到了面向对象程序设计的方便和巧妙。懂得了在进行编写一个程序之前,要有明确的目标和整体的设计思想。另外某些具体的细节内容也是相当的重要。这些宝贵的编程思想和从中摸索到的经验都是在编程的过程中获得的宝贵财富。这些经验对我以后的编程会有很大的帮助的,我要好好利用。

虽然这次课程设计是在参考程序的基础之上进行的,但是我觉得对自己是一个挑战和锻炼。我很欣慰自己能在程序中加入自己的想法和有关程序内容,也就是对它的程序改进了一番改进,并有创新。但是我感觉自己的创新还不够典型,总之还不是很满意。另外由于时间的紧迫和对知识的了解不够广泛,造成了系统中还存在许多不足,功能上还不够完善。以后我会继续努力,大胆创新,争取能编写出透射着自己思想的程序。这次课程设计让我充分认识到了自己的不足,认识到了动手能力的重要性。我会在以后的学习中更加努力锻炼自己,提高自己,让自己写出更好更完善的程序,为以后的编程打好基础!

总而言之,这次C++程序设计实践让我收获很大。

计算机科学与技术13-2班

2010年7月4日

第三篇:C++课程设计实验报告(范文)

C++课程设计报告

设计题目:

院: 专业班级: 学生姓名: 学生学号: 指导教师:

计算机技术与科学

3班 樊冠男 40912140 马军亮

提交时间:

2011/1/12 成绩:

目录

C++课程设计报告

第一章 引言

C++课程设计报告

第二章 概要设计

C++课程设计报告

第三章 软件实现

C++课程设计报告

第四章 结果与讨论

第四篇:C++课程设计电话簿管理

C++课程设计

————简单电话簿管理

报告内容: 一.程序功能简介 二.课程设计要求 三.课程设计说明 四.参考数据结构 五.具体功能及实现六.源程序及注释 七.感想与心得

学号:050930109 姓名:陈浩 指导老师:臧洌 日期:2010年6月20日

一.程序功能简介

一个基本的电话簿管理程序,具有插入、删除、显示、修改和查询联系人电话码的功能。主菜单如右图所示,每个菜单项功能如下:

1.增加记录菜单:请输入用户姓名,如果该用户已经存在则添加失败,否则,输入用户的电话号码,进行添加。

2.修改某条记录:请输入用户姓名,如果没有该用户显示“ 该用户不存在”信息,否则,输出原电话号码,然后输入新的电话号码,进行修改。3.删除记录:

输入用户姓名,进行删除(删除时要进行确认)。4.查询:输入用户姓名,进行查找。

5.排序:根据子菜单,选择不同的排序方式。6.显示:逐屏显示(每屏显示10条记录)。7.全删:进行全部删除(要确认)。

二.课程设计要求

请选择以下功能 1-增加记录 2-修改记录 3-删除记录

4-查找(按姓名)5-排序 6-显示记录

1.用汉化菜单实现。

2.提供按姓名查询电话号码的功能。

3.显示功能(提供逐屏显示的功能,每屏显示10条记录)。4.删除和修改时要进行确认。

5.将电话簿记录以文件的形式存在磁盘上;每次操作时将电话簿调出,操作完毕后存盘。

三.课程设计说明

1.程序采用数组数据结构实现。2.用类来实现数据的封装。

四.参考数据结构

1.“电话簿”称为用户信息表,用数组实现。用户信息表由若干用户信息构成,每个用户信息是一个数组元素。

2.“user.txt”是一个文件,用于保存“用户信息表”中的信息。当系统启动时,从该文件中读入信息,当退出系统时,将“用户信息表”中的信息写到该文件中。该文件中信息存放形式如下:

ZhangHong 5221369 LiLi 84891112

ZhaoQiang 5221498

其中 name(姓名)占20列 phone_num(电话号码)占12列

五.具体功能及实现

定义Fphone类,通过其私有成员数组name[20]和phone[12]分别记录用户姓名与电话号码,定义UserDatabase类记录用户信息,通过公有成员函数实现对数据的操作。

六.源程序及注释

#include #include #include #include #include #define M 20 #define N 12 #define MAX 100 class Fphone

//用户信息类的定义 {

char name[M];

// 姓名

char phone_num[N];

//电话号码 public: Fphone(char *na=“",char *ph=”“){ strcpy(name,na);

strcpy(phone_num,ph);} char*getname();

//获取姓名

char*getphone_num();

//获取电话号码

void setname(char*a);

//设置姓名

void setphone_num(char*a);//设置电话号码

void disp();

//显示用户信息 };char *Fphone::getname()

{ return name;} char *Fphone::getphone_num(){ return(phone_num);} void Fphone::setname(char *a){ strcpy(name,a);

} void Fphone::setphone_num(char*a){ strcpy(phone_num,a);} void Fphone::disp(){ cout<<”姓名:“<//用户信息表类的定义 { int nElem;

//用户信息表中的元素个数,即当前记录总数

int Maxu;

//最多的用户

Fphone *user;

//指向用户信息表的指针

public: UserDatabase()

//构造函数,初始化用户信息表,将user.txt文件中数据读到User[]中

{ nElem=0;

Maxu=50;

user=new Fphone[Maxu];

fstream in;

in.open(”user.txt“,ios::in|ios::nocreate);//打开文件

for(int i=0;(!in.eof());i++)

{ in>>user[i].getname();in>>user[i].getphone_num();

nElem++;

}

in.close();}

~UserDatabase()

//析构函数,将user[]写入user.txt文件中

{ fstream out;

Fphone *p=NULL;

p=user;

out.open(”user.txt“,ios::out,filebuf::sh_none);

for(int i=0;i

{ out<getname())<

<<((p+i)->getphone_num())<

}delete []user;

out.close();} void clear()

//删除所有用户信息

{ char ord;

cout<<”确定删除吗?(选择:[y]是;[n]否)aa“<

do

{ cin>>ord;

if(ord=='N'||ord=='n')return;

else if(ord=='Y'||ord=='y')

{ delete[Maxu]user;

} user=0;cout<<”删除成功啦!“<

user->setname(na);

user->setphone_num(ph_num);

} else if(nElem=0;i--)

{ if(strcmp((user+i)->getname(),na)>0)

{(user+i+1)->setname(((user+i)->getname()));

(user+i+1)->setphone_num(((user+i)->getphone_num()));

}

else break;

}

(user+i+1)->setname(na);

(user+i+1)->setphone_num(ph_num);

nElem++;} else cout <<”空间不足,无法添加!“<

//返回user指针 { return(user);} void delete_record(Fphone *p,int k)

//删除用户信息 { char con;cout<<”确认删除?(Y/N)“;cin>>con;if(con=='N'||con=='n')return;else if(con=='Y'||con=='y'){ for(int i=k;i

{ user[i]=user[i+1];}

nElem--;

cout<<”已删除!“<

return;} else

{ cout<<”输入错误!“<

system(”pause“);

return;} } void modify_record(Fphone *p,char*ph_num)//修改用户信息 { p->setphone_num(ph_num);} Fphone *query(char *na)

//按姓名查找 顺序查找,这里也可以用折半 { Fphone *p=user;

int i=0;

while(1)

{ if(strcmp(p->getname(),na)==0)

return p;

p++;

if(i++==nElem)

break;} return NULL;} void sorta_name()//按姓名升序排序 插入排序法 { Fphone temp;int i,j;for(i=1;i

for(j=i-1;j>=0&&(strcmp(temp.getname(),user[j].getname())<0);j--)

{ strcpy(user[j+1].getname(),user[j].getname());

strcpy(user[j+1].getphone_num(),user[j].getphone_num());

}

strcpy(user[j+1].getname(),temp.getname());

strcpy(user[j+1].getphone_num(),temp.getphone_num());} } void sorta_phonenum()//按电话号码升序排序 选择排序法 { int i,j,p;Fphone temp;for(i=0;i

for(j=i+1;j

if(strcmp(user[j].getphone_num(),user[p].getphone_num())<0)p=j;

if(p!=i)

{ strcpy(temp.getname(),user[p].getname());

strcpy(temp.getphone_num(),user[p].getphone_num());

strcpy(user[p].getname(),user[i].getname());

strcpy(user[p].getphone_num(),user[i].getphone_num());

strcpy(user[i].getname(),temp.getname());

strcpy(user[i].getphone_num(),temp.getphone_num());

} } } void sort_name()//按姓名降序排序,将排成升序的对象数组逆向放置 { Fphone temp;int i,m=(nElem+1)/2;for(i=0;i

strcpy(temp.getphone_num(),user[i].getphone_num());

strcpy(user[i].getname(),user[nElem-i-1].getname());

strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num());

strcpy(user[nElem-i-1].getname(),temp.getname());

strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());} } void sort_phonenum()//按电话号码降序排序 冒泡排序法 { Fphone temp;int i,m=(nElem+1)/2;for(i=0;i

strcpy(temp.getphone_num(),user[i].getphone_num());

strcpy(user[i].getname(),user[nElem-i-1].getname());

strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num());

strcpy(user[nElem-i-1].getname(),temp.getname());

strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());} } void disp(){ int i,n=0;cout<

cout<getname()

<getphone_num()<

n++;

if(n%10==0)

{ system(”pause“);

system(”cls“);

} }

cout<

请选择以下功能:“<

1-增加记录“<

2-修改记录“<

3-删除记录“<

4-查找(按姓名)“<

5-排序“<

6-显示记录“<

7-全删“<

0-退出“<

输入选择:“<

“<

“<

欢迎使用电话簿管理系统

“<

祝您使用愉快

“<

“<

system(”cls“);

menu();

int k;

cin>>k;

switch(k)

{ case 1:

{ system(”cls“)

cout<<”*****************************************“<

cout<<”

增加记录

“<

Fphone *t=NULL;

char w;

do

{ cout<<”请输入您要增加的用户的姓名“;

cin>>na;

t=(s.query(na));

if(t)

{ cout<<”用户已经存在,添加失败!!“<

else

{ cout<<”请输入用户的电话号码“;

cin>>ph_num;

s.add_record(na,ph_num);cout<<”您添加的信息为:“;cout<<”姓名:“<cout<<”成功添加“<

}

cout<<”是否继续?(Y or N)“<

cin>>w;} while(w=='Y');break;}

case 2: { system(”cls“);

cout<<”***************************************“<

修改记录

“<

char na[M],ph_num[N];

Fphone *t=NULL;

char w;

do

{ cout<<”请输入您要修改的用户的姓名“;

cin>>na;

t=s.query(na);

if(!t)

cout<<”没有该用户!“<

else

{ cout<<”该用户原号码为:“<getphone_num()<

cout<<”请输入新的电话号码“;

cin>>ph_num;

s.modify_record(t,ph_num);

cout<<”成功修改“<

}

cout<<”是否继续?(Y or N)“<

cin>>w;

}

while(w=='Y');

break;} case 3: { system(”cls“);

cout<<”********************************************“<

删除记录

“<

cout<<”************** ***************************“<

char w;

char na[M];

int k;

Fphone *p;

do

{ cout<<”请输入您要删除的用户的姓名“;

cin>>na;

p=s.query(na);

if(p==0)

cout<<”没有该用户!“<

else

{(*p).disp();

k=p-s.getuser();

s.delete_record(p,k);

}

cout<<”是否继续?(Y or N)“<

cin>>w;

}

while(w=='Y');

break;} case 4: { system(”cls“);

cout<<”*********************************“<

cout<<”

查询记录

“<

cout<<”**********************************“<

char na[M];int p=1;

Fphone *t=NULL;

char w;

do

{ cout<<”请输入您要查询的用户的姓名“;

cin>>na;

t=s.query(na);

if(t)

{

cout<<”姓名:“<getname()<

cout<<”电话号码:“<getphone_num()<

}

else

cout<<”对不起,没有此人信息!“<

cout<<”是否继续?(Y or N)“<

cin>>w;}

} case 5: { while(w=='Y');break;system(”cls“);

cout<<”

请选择排序方式

“<

cout<<”

1.按姓名(升序)

“<

cout<<”

2.按电话号码(升序)

“<

cout<<”

3.按姓名(降序)

“<

cout<<”

4.按电话号码(降序)

“<

cout<<”

请输入你的选择:

“<

int k;

cin>>k;

switch(k)

{ case 1:

s.sorta_name();

cout<<”排序完成“<

system(”cls“);

break;

case 2:

s.sorta_phonenum();

cout<<”排序完成“<

system(”cls“);

break;

case 3:

s.sort_name();

cout<<”排序完成“<

system(”cls“);

break;

case 4:

s.sort_phonenum();

cout<<”排序完成“<

system(”cls“);

break;

} }

case 6: { system(”cls“);

cout<<”*****************************************“<

cout<<”

显示记录

“<

cout<<”*****************************************“<

s.disp();

system(”pause“);break;

}

} } case 7: { system(”cls“);

cout<<”您确定要删除所有记录吗?(Y or N)“<

char q;

cin>>q;

if(q=='Y'||q=='y')

{ cout<<”*********************************“<

cout<<”

全部删除记录

“<

cout<<”*********************************“<

s.clear();

}

else break;

system(”pause“);

break;} case 0: { system(”cls“);

cout<<”谢谢使用,再见!“<

exit(0);} default:

cout<<”不存在该选择,请重新输入要进行的操作:“<

system(”pause");

break;} 七.感想与心得

1.电话簿管理程序较长,算法比较复杂,调试的过程中遇到了各种各样的问题。各种各样的小错误寻找起来十分困难。在今后编写程序时应当随编随找错。

2.课设让我们把这一学期所学的C++知识得到了很好的应用,开拓了我们的思路,所谓温故而而知新,这次课设也让我们对以前的知识有了一个全面的回顾,加深了对已学知识的理解。

3.课设过程艰辛,花费时间很长,需要很强的耐力和信心。而这也是对我们的一次考验,养成了坚持不懈和吃苦耐劳的精神。总之,C++课设让我们学到了很多,也收获了很多,这必将成为我人生中的一个深刻的回忆。

第五篇:C++数据结构 大作业课程设计

C++/数据结构 大作业/课程设计——【校园导游咨询】【停车场管理】娃娃们可以收着以后用 绝对纯手工打造 内含类模块/一维指针数组(谨以此程序供大家参考。运行结果后面有贴图)

目录

【1】校园导游咨询 程序设计源代码 及 截图 【2】停车场管理——方案一 程序设计源代码 及 截图 【3】停车场管理——方案二 程序设计源代码 及 截图

【1】【【校园导游咨询】】

######

(ps:该校园导游咨询系统没有输入值,所有信息是都在class MGraph的构造函数中传输的,且校园景点信息皆为【【上海电力学院】】景点信息。请大家注意,直接从文章copy到visual stutio中会出现中文字符,注意删除,推荐大家在一行语句的分号后面,点出光标,按一下delete键,然后按一下enter键,完成visual stutio的自动对齐,这样程序看起来一目了然,更易于操作和更改)【问题描述】

设计一个校园导游程序,为来访的客人提供各种信息查询服务。【基本要求】

(1)设计你所在学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2)为来访客人提供图中任意景点相关信息的查询。

(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一个最短的简单路径。【选作内容】

(6)扩充每个景点的邻接景点的方向等信息,使得路径查询结果能提供详尽的导向信息。**************************【以下为类的定义】******************************** #include #include using namespace std;const int MaxSize=18;const int INFINITY=65535;//最大值无穷

class direction;template class MGraph;template class VertexNode//定义头结点

{ friend class MGraph;public: int vex;//顶点名称 T vexname;//顶点名称 T vexinf;//顶点信息

direction dir;//存放顶点方位信息的direction类的dir。};

class direction { public: int ln;//存放在方向图中的横坐标,表示东西 int col;//存放在方向图中的纵坐标,表示南北 };template class MGraph//定义无向图的邻接矩阵

{ public: MGraph();

//构造函数,初始化具有n个顶点的图

void printvexname();//显示所有景点及景点代号

void printvexinf(int i);//显示代号为i景点的名称及信息

void printroad(int i,int j);//显示景点i~j的最短路径方案信息

void printdir(int i,int j);//显示景点i到j的方向信息,如“向东100m,向南200m” VertexNode adjlist[MaxSize];//存放景点全部信息的 景点类数组 int vertexNum,arcNum;//图的顶点数和边数

void Root(int p,int q);//递归寻找pq间的最短路径

int Path[MaxSize][MaxSize],Dist[MaxSize][MaxSize];//创建Path和Dist分别存放两点间最短路径的前驱节点,两点间最短路径长度

int Line[MaxSize];//Line存放路径 int kkk;//Line[]数组的标记

private: T vertex[MaxSize];//存放图中顶点的数组

int arc[MaxSize][MaxSize];//存放图中边的数组 };*************************【以下为类的实现 即类函数的定义】*********************************** template MGraph::MGraph()//a[]为景点代号,b[]为景点名称,c[]为景点信息,d[]为景点方位信息的横坐标,e[]为景点方位信息的纵坐标

//s[]为存放景点邻接矩阵信息的一维数组,根据其对称性可以用公式赋值给二维数组arc[][] { int s[]={0, 1,0, 0,2,0, 0,0,2,0, 0,0,2,3,0, 0,0,0,4,2,0, 0,0,0,0,2,3,0, 0,0,0,0,2,3,1,0, 0,0,2,0,2,0,0,2,0, 4,0,2,0,0,0,0,0,1,0, 0,0,0,0,0,0,0,0,0,2,0, 1,0,0,0,0,0,0,0,0,0,2,0, 0,0,0,0,0,0,0,0,0,3,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,2,0};int a[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};char* b[]={“南门”,“实验楼”,“南图”,“大活”,“睿思楼”,“大礼堂”, “南4教”,“知行楼”,“国交楼”,“南3教”,“南2教”,“南1教”, “北图”,“北3教”,“北4教”,“北2教”,“北1教”,“北门”};char* c[]={“南校区正门”,“物理实验楼”,“南校区图书馆”,“大学生活动中心”, “教师办公楼、医务室及留学生公寓”,“大礼堂,用于举办各种文艺演出”,“南校区第4教学楼”,“实习基地,计算机房等”, “国际交流中心,教职工餐厅”,“南校区第3教学楼”,“南校区第2教学楼”,“南校区第1教学楼”, “北校区图书馆”,“北校区第3教学楼”,“北校区第4教学楼”,“北校区第2教学楼”, “北校区第1教学楼”,“北校区正门”};int d[]={8,6,4,4,1,0,0,1,3,4,6,8,4,3,2,3,5,8};int e[]={8,8,8,10,8,10,7,6,6,6,6,6,3,1,0,0,0,2};int i,j;vertexNum=18;arcNum=30;

for(i=0;i

for(j=0;j void MGraph::printvexname(){ int i;for(i=0;i

template void MGraph::printvexinf(int i){ cout< void MGraph::printdir(int i,int j){ int dx,nb;//临时存放i与j之间的南北东西关系 j在i的哪边?? dx=adjlist[j].dir.col-adjlist[i].dir.col;nb=adjlist[j].dir.ln-adjlist[i].dir.ln;if(dx>0)//即j在i的东边

cout<<“向东”<0)//即j在i的南边

cout<<“向南”< void MGraph::Root(int p,int q){

if(Path[p][q]>0){

Root(p,Path[p][q]);Root(Path[p][q],q);} else {

Line[kkk]=q;kkk++;} }

template void MGraph::printroad(int i,int j){ int p,q,m,k,item1,item2;for(p=0;p0)

for(q=0;q0)if(((Dist[p][q]>Dist[p][k]+Dist[k][q])||(Dist[p][q]==0))&&(p!=q)){

Dist[p][q]=Dist[p][k]+Dist[k][q];Path[p][q]=k;}

cout<<“n=======n”;cout<<“从”<”;printdir(i,item2);cout<<“-->”<”;printdir(item1-1,item1);cout<<“-->”<

{ int choice;cout<<“================”<>choice;return choice;} void main(){ MGraph mg;int funcchoice();int fc;while(1){ fc=funcchoice();if(fc==1){ int i;for(i=0;i>i;mg.printvexinf(i);} else if(fc==3){ int i,j;mg.printvexname();cout<<“请输入两景点代号(我们将把最短路线反馈予您):”;cin>>i>>j;mg.printroad(i,j);} else if(fc==4)break;else cout<<“输入有误,请重新输入!”<

【2】【停车场管理系统【方案一 程序】】

######

(ps:该程序有漏洞,若将要离开的车辆是停于便道上的,则对该车进行驶离操作时程序内部有错误数据,虽然做了函数完成这一功能,但因时间有限,没能及时查找更正,现在懒得改了。。大家将就看吧。不过运行是可以的)【问题描述】

设停车场是一个可停放n辆汽车的 长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车信放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场院,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。【基本要求】

以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。【测试数据】

设n=2,输入数据为:(A,1,5),(A,2,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到达(Arrival);D表示离去(Departure);E表示输入结束(End)。**************************【以下为类的定义】************************************* #include using namespace std;const int Max=2;//车库最大容量

const double price=30;//每小时的费用 //思想:(报告第四页)

//我的系统界面,输入信息为:(到达/离开/退出);车牌号;时刻 //因此,我的停车场类分成车辆到达和车辆离开两个主要的函数实现。//车辆到达,有入栈和入队。车辆离开有出栈,出队和入栈操作。

//因此我又编写入栈的类,队的类。与parkingmanagement进行友元。

//**************************************类定义*********************************************** class car//车的信息类

{ public: double time;//计费时间 int number;//车牌号

car *next;//存放car类型元素的数组初始地址 };class carstack//栈(停车场)的类

{ friend class parkingmanagement;//parkingmanagement能访问carstack类中所有成员 public: carstack();//构造函数,栈的初始化 int empty();//判断栈是否为空 int full();//判断栈是否为满

car *s;//存放car类型栈元素的数组初始地址 int top;//栈顶指针 };class carqueue//队列(便道)的类

{ friend class parkingmanagement;//parkingmanagement能访问carstack类中所有成员 public: carqueue();//构造函数,队列的初始化 int full();//判断队列是否为满 car *front,*rear;//存放car类型队列元素的数组初始地址 };class parkingmanagement { public: int pushstack(carstack &cs,int cnum,double ctime);//入栈,cs栈内进行调整,返回栈内位置 void popstack(carstack &cs,int cnum);//出栈,cs栈内进行调整,//根据车牌号把车弹出栈,将出栈car的number赋值给int popstacknumber()//将出栈car的time赋值给double popstacktime(),无返回值!

int pushqueue(carqueue &cq,int cnum,double ctime);//入队,队内进行调整,返回队内位置 int popqueue(carqueue &cq);//出队,队内进行调整,返回汽车车牌号

void arrival(carstack &cs,carqueue &cq,int cnum,double ctime);//车辆到达,//根据输入的车牌号、到达时间,变更函数参数;并cout车位信息

void leave(carstack &cs,carqueue &cq,int cnum,double ctime);//车辆离开,//根据输入的车牌号找到汽车,并进行出栈操作、出队操作和入栈操作; //并cout停留时间和收费情况

void deletequeue(carqueue &cq,int i);//删除cq过道中第i辆车 int popstacknumber;//专门存放出栈的时候返回的车牌号 double popstacktime;//专门存放出栈的时候返回的时刻

};**********************************【以下为类的实现】************************************ carstack::carstack()//构造函数,栈的初始化 { top=-1;s=new car[Max];//创建car类型栈元素的数组 if(s==NULL){ cout<<“栈空间分配不成功!”<

cs.top++;(cs.s[cs.top]).number=cnum;//将cnum赋给栈顶位置的车的车牌号,s是car类型栈元素的数组(cs.s[cs.top]).time=ctime;//将ctime赋给栈顶位置的车的入栈时间,s是car类型栈元素的数组 return(cs.top+1);//返回栈内位置加1,即停车场内车位从1号开始 } } void parkingmanagement::popstack(carstack &cs,int cnum)//出栈,cs栈内进行调整,//根据车牌号把车弹出栈,将出栈car的number赋值给int popstacknumber //将出栈car的time赋值给double popstacktime,无返回值!{ int i;car p;carstack stemp;//定义一个carstack类型的临时存放出栈元素的栈

for(i=0;i<=cs.top;i++)if((cs.s[i]).number==cnum)break;//当要出栈的车的车牌号=栈内的车牌号元素时,跳出循环 p=cs.s[i];//将要出栈的元素赋给car类型的p存放

while(cs.top>i)stemp.s[++(stemp.top)]=cs.s[(cs.top)--];//出栈的元素数组逐个赋给临时栈 popstacknumber=p.number;//将这个车牌号信息传给int popstacknumber()popstacktime=p.time;//将该车的时间信息传给double popstacktime()cs.top--;//栈顶指针回到原来位置

while(stemp.top>=0)cs.s[++(cs.top)]=stemp.s[(stemp.top)--];//临时栈出栈的元素逐个赋给原栈,完成先退再进的工作 } int parkingmanagement::pushqueue(carqueue &cq,int cnum,double ctime)//入队,队内进行调整,返回队内位置 { car *p,*countp;int count(1);//count用于记录车在过道上的位置信息,因队列为链式的,所以进行循环累加 p=new car;//创建一个car类型的指针

p->number=cnum;p->time=ctime;p->next=NULL;//首先将指向存放car类型元素的数组初始地址置空 if(cq.front==NULL)//第一次入队要判断头结点是否为空 { cq.front=cq.rear=p;} else

{//尾插法插入元素 p->next=(cq.rear)->next;(cq.rear)->next=p;cq.rear=(cq.rear)->next;} countp=(cq.front)->next;while(countp!=NULL){ count++;countp=countp->next;}//count即车在过道上的位置,【从1开始计!!】 return count;} int parkingmanagement::popqueue(carqueue &cq)//出队,队内进行调整,返回汽车车牌号

{ car p;p.number=((cq.front)->next)->number;//cq队里,从cq.front开始指向下一个元素的车牌号赋给car类型的车信息 p.time=((cq.front)->next)->time;//cq队里,从cq.front开始指向下一个元素的时刻 //赋给car类型的车信息

p.next=((cq.front)->next)->next;//cq队里,从cq.front开始指向下一个元素的指针 //赋给car类型的车信息的下一个元素的指针 return p.number;cq.front=(cq.front)->next;} void parkingmanagement::arrival(carstack &cs,carqueue &cq,int cnum,double ctime)//车辆到达,根据输入的车牌号、到达时间,变更函数参数;并cout车位信息 { int pos;if(!(cs.full()))//如果栈未满,车辆停入停车场 { int fl(0),i;//定义一个从0开始的标记fl for(i=0;i<=cs.top;i++){ if(cs.s[i].number==cnum)//如果到达的车的车牌号=栈内已有车辆的车牌号 { fl=1;//fl记1 break;} } if(fl==1)//如果到达的车的车牌号!=栈内已有车辆的车牌号 cout<<“输入错误!请重新输入!”<

cout<<“该停车场还有空位,请到”<

{ pos=pushqueue(cq,cnum,ctime);//入队,返回车位信息

cout<<“该停车场已满,请将车停到便道”<

{ popstack(cs,cnum);//出栈操作

hour=ctime-popstacktime;//时间计算

outcarnum=popqueue(cq);//将便道上的第一辆车出队,入栈。并将其车牌号赋给outcarnum pstack=pushstack(cs,outcarnum,ctime);//将便道上的第一辆车,入栈

cout<<“该车在本停车场内停留时间为”<

{ p=cq.front;while(p!=NULL){ count++;//如果在过道中找到该车,则该车的位置为过道中的第count位置(count从1开始)p=p->next;if(p->number==cnum)//在过道中找到要出去的车,则在队列中删除该car。//后面的车辆依然顺序排列,补足空位

{ deletequeue(cq,count);if(count>Max){ cout<<“您的车在便道上的位置为”<

car *p,*q;int j(0);p=cq.front;while(p && jnext;j++;}//找到第i个节点(i从1开始)if(!p ||!p->next)cout<<“i不合法”;else { q=p->next;p->next=q->next;delete q;} } *******************************【以下是主程序】************************************ void print(){ cout<<“= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =”<>acc>>carnum>>cartime;if(acc=='A')park.arrival(cars,carq,carnum,cartime);else if(acc=='D')park.leave(cars,carq,carnum,cartime);else if(acc=='E')break;else cout<<“您的输入有误,请重新输入!”<

######【3】【停车场管理系统【方案二 程序】】

(ps:本方案与方案一有同样的问题,就是在对 便道上的车 进行驶离操作时,数据错误,同样的理由,没有改正。如果有细心娃娃帮忙指点改正,在此感激啦~)

*************************【以下为类定义】************************************ #include using namespace std;const int MaxSize=2;//停车场内最多能停2辆车 template class carStack;// template //定义模板类

struct Node//过道停车的队列所需链式结点 { T carnum;//定义车牌号类型

Node *next;//此处也可以省略 };template class carinfo {

friend class carStack;public: T carnum;//车号

int cartime;//停车时间 };

template class carQueue { friend class carStack;public: carQueue();//构造函数,初始化一个空的链队列

int EnQueue(T cnum);//将元素x入队,并返回其在队内的位置(从1开始)T DeQueue();//将队头链式结点出队,并返回汽车车牌号

void deletequeue(int i);//将队内低i个元素删除,即便道上i位置的汽车驶离 bool Empty();//判断链队列是否为空 Node *front, *rear;};template class carStack { friend class carinfo;public: carStack();//构造函数,栈的初始化,停车场容量为【size】 void Pushcar(T cnum,int ctime);//有车停入停车场

int Popcar(T outcnum,int outctime);//将第cnum辆车出栈,并返回其停车时间(hour)bool full();//判断栈是否为满?满则返回1 carinfo *S;//?? int top;};******************************【以下为类的实现】**************************************** template //初始化队列 carQueue::carQueue(){ front=rear=NULL;} template int carQueue::EnQueue(T cnum)//车子进入便道 { int i(0);Node *s,*p;//??

s=new Node;s->carnum=cnum;s->next=NULL;if(front==NULL)//空队列,【【【新结点既是队头,又是队尾】】】关键是!front指向第一个结点 {

front=rear=s;} else {

rear->next=s;//将结点s插入到队尾 rear=s;} p=front;while(p!=NULL){ i++;p=p->next;}//i即车在过道上的位置,【从1开始计!!】 return i;}

template T carQueue::DeQueue(){ Node *p;if(front==NULL)cout<<“便道上没车”;else { p=front;

front=front->next;//将队头元素所在结点摘链 } return p->carnum;delete p;//将出队进栈的车从队列里删除 }

template bool carQueue::Empty()//判断是否为空,为空则返回1,不为空则返回0 { return front==NULL;}

template carStack::carStack()//构造栈算法

:top(-1){//建立一个最大尺寸为size的空栈

S=new carinfo[MaxSize];//创建存储栈的数组 if(S==NULL)//分配不成功

{ cerr<<“动态存储失败!”<

template void carStack::Pushcar(T cnum,int ctime){ if(top==MaxSize-1)cout<<“车场内已停满汽车”;else { S[++top].carnum=cnum;S[top].cartime=ctime;} }

template int carStack::Popcar(T outcnum,int outctime){ int i,hour;carStack Stemp;//建一个临时模拟停车场 int Stop=-1;for(i=0;i<=top;i++)if(outcnum==S[i].carnum)break;while(top>i)Stemp.S[++Stop]=S[top--];hour=outctime-S[top].cartime;return hour;top--;while(Stop>=0)S[++top]=Stemp.S[Stop--];} template bool carStack::full(){ return top==MaxSize-1;} template void carQueue::deletequeue(int i){ Node *p,*q;int j(1);p=front;while(p && jnext;j++;}//找到第i-1个结点(结点位置从1开始)if(!p||!p->next)cout<<“i不合法!”<next;p->next=q->next;delete q;} } ******************************【以下为主函数】***************************************

void outputpark()//系统功能选择页面,输入泊车信息

{ cout<<“========================”< cs;carQueue cq;while(1){ outputpark();cin>>arrive>>carnum>>cartime;if(arrive=='A'){ if(cs.top!=MaxSize-1)//停车场内有空位可以驶入

{ cs.Pushcar(carnum,cartime);cout<<“请驶入停车场的”<

Node *p;p=cq.front;while(p!=NULL){ if(p->carnum==carnum){ flagde=1;break;} pos++;p=p->next;} if(flagde){ cout<<“您的车停在便道上”<

下载c++课程设计心得体会word格式文档
下载c++课程设计心得体会.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    《C++语言课程设计》任务书_2012

    《C++语言课程设计》任务书 专业 班级 学号 姓名 一、实践目的 通过本课程设计教学,为学生提供一个综合运用所学知识,解决实际问题的机会,增强其实践动手能力和工程实践能力,锻......

    C++语言课程设计题目

    《C++语言课程设计》题目 课程大纲: 一、教学目标和基本要求 本课程全面系统的学习面向对象程序设计的基本概念,基本语法和编程方法。正确理解掌握C++面向对象程序设计的基本......

    测绘程序设计与C++编程课程设计心得体会

    测绘程序设计与C++编程课程设计 心得体会 学院: 班级: 学号:姓名: 课程设计心得体会 时间过的真快,一晃眼的功夫,C++实习就要结束了,虽然只是短短的10天,但带给我的却很多。 首先,我......

    C++心得体会

    C++学习心得体会 通过一学期对C++的学习,我感觉学习C++是有一定难度却又是非常有趣 的科目。也是很有帮助的。 深刻感受到如果真的想要学好这么课,或者说是从这门课学到点......

    C++课程设计公司人事管理系统

    C++程序设计实践教学环节任务书 承接的项目额(10%)提成,业务经理既拿固定月薪(2000元)也领取提成,财务人员固定工资(2000元),文秘为固定工资(1500元)。 (4) 可按姓名显示、查找、......

    C++课程设计实训报告

    大连科技学院 C++课程设计报告 题目稿件管理数据系统 小组成员吕荣兴 学生姓名 吕荣兴 专业班级信管10-1班所在系部 信息科学系指导教师 曾维佳 职称 讲师目 录 一 题目 .......

    ATM自动取款机C++课程设计

    C++课程设计 学校: 惠州学院 题目: 设计ATM自动取款机系统 系别: 电子科学系 班级: 11电信2班 学号: 110703229 姓名: 王志勇2014年4月21日 一、课程设计目的及要求 1.1设计目的 1......

    C++课程设计(简单图书管理系统)

    课 程 设 计 课程名称C++课程设计 题目名称图书管理系统 2016 年6 月 29 日目录 一.设计内容与要求 .......................................................................