c++作业

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

第一篇:c++作业

P179 5.9.2(11)

1.意图

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

2.动机

对一些类来说,只有一个实例是很重要的。虽然系统中可以有许多打印机,但却只应该有一个打印假脱机(printer spooler),只应该有一个文件系统和一个窗口管理器。一个数字滤波器只能有一个A / D转换器。一个会计系统只能专用于一个公司。

我们怎么样才能保证一个类只有一个实例并且这个实例易于被访问呢?一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象。一个更好的办法是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法。这就是Singleton模式。

3.适用性

在下面的情况下可以使用Singleton模式.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

4.结构

5.参与者

Singleton

定义一个GetInstance操作,允许客户访问它的唯一实例。GetInstance是一个类操作(即Smalltalk中的一个类方法和C++中的一个静态成员函数)。可能负责创建它自己的唯一实例。

6.协作

客户只能通过Singleton的GetInstance操作访问一个Singleton的实例。

7.效果

Singleton模式有许多优点:

1)对唯一实例的受控访问因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它。

2)缩小名空间Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名空间。

3)允许对操作和表示的精化Singleton类可以有子类,而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。

4)允许可变数目的实例这个模式使得你易于改变你的想法,并允许Singleton类的多个实例。此外,你可以用相同的方法来控制应用所使用的实例的数目。只有允许访问Singleton实例的操作需要改变。

5)比类操作更灵活另一种封装单件功能的方式是使用类操作(即C++中的静态成员函数或者是Smalltalk中的类方法)。但这两种语言技术都难以改变设计以允许一个类有多个实例。

此外,C++中的静态成员函数不是虚函数,因此子类不能多态的重定义它们。

8.实现

class Singleton

{

static std::auto_ptr m_pInstance;

protected:

//prevent user making our any instance by manually

//构造函数是保护类型的。

Singleton(){}

public:

~Singleton(){}

//Return this singleton class' instance pointer

static Singleton* Instance()

{

if(!m_pInstance.get())

{

m_pInstance = std::auto_ptr(new Singleton());

}

return m_pInstance.get();

}

};

怎样来使用它呢?不要试图从这个类派生你的单件子类,那样的结果是不妥当的,如果你需要多个单件子类,还是使用下面的宏定义更为妥当:

#define DEFINE_SINGLETON(cls)

private:

static std::auto_ptr m_pInstance;

protected:

cls(){}

public:

~cls(){}

static cls* Instance(){

if(!m_pInstance.get()){

m_pInstance = std::auto_ptr(new cls());

}

return m_pInstance.get();

}

#define IMPLEMENT_SINGLETON(cls)

std::auto_ptr cls::m_pInstance(NULL);

假定你需要实现一个单件类YY,这样书写:

class YY

{

DEFINE_SINGLETON(YY);

public:

//your interfaces here...};

在cpp文件中,书写:

IMPLEMENT_SINGLETON(YY);

需要引入这个类的实例的时候,使用这样的语句:

YY* pYY = YY::Instance();

这,就是全部。

如果需要定义其他的单件类,重复上面的定义,就可以了。

当想集中管理一个应用程序所需的所有配置时,可以声明一个CToolsOptions的类,其中包含配置属性集合。对于这个类的实例,显然是一个实例就够了;当编写绘图程序时,考虑绘制矩形,圆形等分别使用CGraphTool派生的工具类,每个派生类负责处理具体的绘制动作和相关的UI相应逻辑。这些工具类典型的在被用户选择工具栏的图元按钮时被选中。依照这种模式,你应该对所有的图元工具从事注册工作,使得绘图程序了解运行时刻可以使用那些图元工具。同样的,负责管理注册信息的这个管理器也只需

P2467.6.2(1)

必须把它作为类成员函数的运算符有:

(),[],->和任何赋值运算符,重载这些运算符时必须把操作符函数声明为类的成员函数

什么时候定义类成员操作符重载,什么时候定义非类成员操作符重载?

答:(1)如果一个重载操作符是类成员,那么只有当跟它一起使用的左操作数是该类对象时,它才会被调用,如果该操作符的左操作数必须是其他类型,那么重载操作符必须是非类成员操作符重载。

(2)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++大作业_职工信息管理系统源代码

#include #include #include using namespace std;

const N=5000;// 定义系统可录入的职工最大数值

string Ename[N];long Enum[N];char Esex[N];int Eage[N];

char Emarriage[N];int Edepart[N];int Eposition[N];int Edegree[N];int Eworktime[N];float Epay[N];

class Employee {

public:

string Employeename;

long Employeenum;

char Employeesex;

int Employeeage;

char Employeemarriage;

int Employeedepart;

int Employeeposition;

int Employeedegree;

int Employeeworktime;

float Employeepay;

static long EmployeeMaxNum;

static float EmployeeBasePay;

void NewInfo();

void ShowInfo();

void showall();

void showdepart(int depart);

void showdegree(int degree);

void showage(int min,int max);

void shownum(long number);

void RefreshInfo();

void DeleteInfo();

float Pay(int Employeegrade);

static int MaxNum();};

class DBOperate {

public:

string Employeename;

long Employeenum;

char Employeesex;

int Employeeage;

char Employeemarriage;

int Employeedepart;

int Employeeposition;

int Employeedegree;

int Employeeworktime;

float Employeepay;

static long EmployeeMaxNum;

static float EmployeeBasePay;

void WriteIn(int iflag);

void ReadOut();

void RefreshMaxNum(int iflag);//iflg=1 or-1 or 0 };

long Employee::EmployeeMaxNum = 1000;float Employee::EmployeeBasePay = 1500;

int Employee::MaxNum()//返回系统已经存储的人数

{

int MN = 0;

ifstream myf;

myf.open(“EmployeeMaxNum.txt”);

myf>>MN;

cout<

myf.close();

return MN;}

void Employee::NewInfo()//添加新职工函数

{

cout<<“新职工姓名: ”;

cin>>Employee::Employeename;

Employee::Employeenum = EmployeeMaxNum + Employee::MaxNum()+1;

cout<<“新职工性别(F为女性,M为男性): ”;

cin>>Employee::Employeesex;

cout<<“新职工年龄: ”;

cin>>Employee::Employeeage;

cout<<“新职工婚姻状况(Y为已婚,N为未婚): ”;

cin>>Employee::Employeemarriage;

cout<<“新职工学历,请输入相应学历的序号: ”<

cout<<“ [1:小学 2:初中 3:高中 4:本科 5:硕士 6:博士] ”;

cin>>Employee::Employeedegree;

while(Employee::Employeedegree!=1&&Employee::Employeedegree!=2&&Employee::Employeedegree!=3&&Employee::Employeedegree!=4&&Employee::Employeedegree!=5&&Employee::Employeedegree!=6)

{

cout<<“输入有误,请重新输入:”<

cout<<“ [1:小学 2:初中 3:高中 4:本科 5:硕士 6:博士] ”;

cin>>Employee::Employeedegree;

}

cout<<“新职工所在部门,请输入相应部门的序号:”<

cout<<“ [1:董事会 2:销售部 3:人事部 4:客服中心 5:财务部 6:技术研发部 7:安全监察部] ”;

cin>>Employee::Employeedepart;

while(Employee::Employeedepart!=1&&Employee::Employeedepart!=2&&Employee::Employeedepart!=3&&Employee::Employeedepart!=4&&Employee::Employeedepart!=5&&Employee::Employeedepart!=6&&Employee::Employeedepart!=7)

{

cout<<“输入有误,请重新输入:”<

cout<<“ [1:董事会 2:销售部 3:人事部 4:客服中心 5:财务部 6:技术研发部 7:安全监察部] ”;

cin>>Employee::Employeedepart;

}

cout<<“新职工职位, 请输入相应职位的序号: ”<

cout<<“ [1:临时职工 2: 正式职工 3:部门经理 4:主任 5:董事长] ”;

cin>>Employee::Employeeposition;

while(Employee::Employeeposition!=1&&Employee::Employeeposition!=2&&Employee::Employeeposition!=3&&Employee::Employeeposition!=4&&Employee::Employeeposition!=5)

{

cout<<“输入有误,请重新输入:”<

cout<<“ [1:临时职员 2: 正式职员 3:部门经理 4:主任 5:董事长] ”;

cin>>Employee::Employeeposition;

}

cout<<“新职工的工作时长(不需要输入单位): ”;

cin>>Employee::Employeeworktime;

Employee::Employeepay = Employee::Pay(Employee::Employeeposition);

DBOperate dbo;

dbo.ReadOut();

int MaxNum = Employee::MaxNum();

Enum[MaxNum] = Employee::Employeenum;

Ename[MaxNum] = Employee::Employeename;

Esex[MaxNum] = Employee::Employeesex;

Eage[MaxNum] = Employee::Employeeage;

Emarriage[MaxNum] = Employee::Employeemarriage;

Edegree[MaxNum] = Employee::Employeedegree;

Edepart[MaxNum] = Employee::Employeedepart;

Eposition[MaxNum] = Employee::Employeeposition;

Eworktime[MaxNum] = Employee::Employeeworktime;

Epay[MaxNum] = Employee::Employeepay;

dbo.WriteIn(1);

cout<<“ 添加新成员成功!”<

void Employee::ShowInfo()//程序主体 数据输出函数

{

int choice1,choice2,min,max;

long searchnum;

Employee e;

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

cout<<“-----------1.输出全体职工信息--------------”<

cout<<“-----------2.按职工部门输出----------------”<

cout<<“-----------3.按职工学历输出----------------”<

cout<<“-----------4.按职工年龄输出----------------”<

cout<<“-----------5.按职工编号输出----------------”<

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

cout<<“ 请选择查询方式:”;

cin>>choice1;

switch(choice1)

{

case 1: showall();break;

case 2: cout<<“请输入要查询职工的部门编号[1:董事会 2:销售部 3:人事部 4:客服中心 5:财务部 6:技术研发部 7:安全监察部] ”;

cin>>choice2;

e.showdepart(choice2);break;

case 3: cout<<“请输入要查询职工的学历编号: [1:小学 2:初中 3:高中 4:本科 5:硕士 6:博士] ”;

cin>>choice2;

e.showdegree(choice2);break;

case 4: cout<<“请输入要查询的年龄范围: ”;

cout<<“最小值: ”;

cin>>min;

cout<<“最大值: ”;

cin>>max;

e.showage(min,max);break;

case 5: cout<<“请输入要查询的职工编号: ”;

cin>>searchnum;

e.shownum(searchnum);break;

default: cout<<“出错啦!”<

} }

void Employee::showall()//全体职工输出函数

{ int i;

long number;

for(i=0;i

{

number = Enum[i];

shownum(number);

} }

void Employee::showdepart(int depart)//按职工所在部门输出函数

{

int i;

switch(depart)

{

case 1: cout<<“董事会的成员有: ”<

case 2: cout<<“销售部的成员有: ”<

case 3: cout<<“人事部的成员有: ”<

case 4: cout<<“客服中心的成员有: ”<

case 5: cout<<“财务部的成员有: ”<

case 6: cout<<“技术研发部的成员有: ”<

case 7: cout<<“安全监察部的成员有: ”<

default: cout<<“输入错误!>”<

}

for(i=0;i

{

if(Edepart[i] == depart)

{

long number = Enum[i];

shownum(number);

}

else continue;

} }

void Employee::showdegree(int degree)//按职工学历输出函数

{

int i;

switch(degree)

{

case 1:cout<<“初中学历的员工有:”<

case 2:cout<<“初中学历的员工有:”<

case 3:cout<<“高中学历的员工有:”<

case 4:cout<<“本科学历的员工有:”<

case 5:cout<<“硕士学位的员工有:”<

case 6:cout<<“博士学位的员工有:”<

}

for(i=0;i

{

if(Edegree[i] == degree)

{

long number = Enum[i];

shownum(number);

} else continue;

} }

void Employee::showage(int min,int max)//按职工年龄段输出函数

{

int i;

for(i=0;i

{

if(Eage[i]>=min&&Eage[i]<=max)

{

long number = Enum[i];

shownum(number);

}

else continue;

} }

void Employee::shownum(long number)//按职工编号输出函数

{

int i;

for(i=0;i

{

if(Enum[i] == number)

{

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

cout<<“职工编号:”<

cout<<“姓 名:”<

cout<<“性 别:”;

if(Esex[i]=='F')cout<<“女 ”<

else if(Esex[i]=='M')cout<<“男 ”<

cout<<“年 龄:”<

cout<<“婚姻情况:”;

if(Emarriage[i]=='Y')cout<<“已婚 ”<

else if(Emarriage[i]=='N')cout<<“未婚 ”<

cout<<“学 历:”;

switch(Edegree[i])

{

case 1:cout<<“小 学 ”<

case 2:cout<<“初 中 ”<

case 3:cout<<“高 中 ”<

case 4:cout<<“本 科 ”<

case 5:cout<<“硕 士 ”<

case 6:cout<<“博 士 ”<

}

cout<<“所在部门:”;

switch(Edepart[i])

{

case 1:cout<<“董事会 ”<

case 2:cout<<“销售部 ”<

case 3:cout<<“人事部 ”<

case 4:cout<<“客服中心 ”<

case 5:cout<<“财务部 ”<

case 6:cout<<“技术研发部 ”<

case 7:cout<<“安全监察部 ”<

}

cout<<“所任职务:”;

switch(Eposition[i])

{

case 1:cout<<“临时成员 ”<

case 2:cout<<“正式员工 ”<

case 3:cout<<“部门经理 ”<

case 4:cout<<“主任 ”<

case 5:cout<<“董事长 ”<

}

cout<<“工作时长:”<

cout<<“工资:”<

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

}

else continue;

} }

void Employee::RefreshInfo()//修改职工信息的函数 {

int cNum = 1000;

DBOperate dbo;

dbo.ReadOut();

void Employee::shownum(long number);

cout<<“请输入您要修改的职工编号:”;

cin>>cNum;

int MN;

MN = Employee::MaxNum();

for(int i=0;i

{

if(Enum[i] == cNum)

{

Employee::shownum(cNum);

cout<<“请输入该职工的新信息: ”<

cout<<“职工姓名: ”;//录入职工的新的数据,职工编号保持不变

cin>>Employee::Employeename;

Ename[i] = Employee::Employeename;

cout<<“职工性别(F为女性,M为男性): ”;

cin>>Employee::Employeesex;

Esex[i] = Employee::Employeesex;

cout<<“职工年龄: ”;

cin>>Employee::Employeeage;

Eage[i] = Employee::Employeeage;

cout<<“职工婚姻状况(Y为已婚,N为未婚): ”;

cin>>Employee::Employeemarriage;

Emarriage[i] = Employee::Employeemarriage;

cout<<“职工学历,请输入相应学历的序号:”<

cout<<“ [1:小学 2:初中 3:高中 4:本科 5:硕士 6:博士] ”;

cin>>Employee::Employeedegree;

while(Employee::Employeedegree!=1&&Employee::Employeedegree!=2&&Employee::Employeedegree!=3&&Employee::Employeedegree!=4&&Employee::Employeedegree!=5&&Employee::Employeedegree!=6)

{

cout<<“输入有误,请重新输入:”<

cout<<“ [1:小学 2:初中 3:高中 4:本科 5:硕士 6:博士] ”;

cin>>Employee::Employeedegree;

}

Edegree[i] = Employee::Employeedegree;

cout<<“职工所在部门,请输入相应部门的序号: ”<

cout<<“ [1:董事会 2:销售部 3:人事部 4:客服中心 5:财务部 6:技术研发部 7:安全监察部] ”;

cin>>Employee::Employeedepart;

while(Employee::Employeedepart!=1&&Employee::Employeedepart!=2&&Employee::Employeedepart!=3&&Employee::Employeedepart!=4&&Employee::Employeedepart!=5&&Employee::Employeedepart!=6&&Employee::Employeedepart!=7)

{

cout<<“输入有误,请重新输入:”<

cout<<“ [1:董事会 2:销售部 3:人事部 4:客服中心 5:财务部 6:技术研发部 7:安全监察部] ”;

cin>>Employee::Employeedepart;

}

Edepart[i] = Employee::Employeedepart;

cout<<“职工职位,请输入相应职位的序号:”<

cout<<“ [1:临时职员 2: 正式职员 3:部门经理 4:主任 5:董事长] ”;

cin>>Employee::Employeeposition;

while(Employee::Employeeposition!=1&&Employee::Employeeposition!=2&&Employee::Employeeposition!=3&&Employee::Employeeposition!=4&&Employee::Employeeposition!=5)

{

cout<<“输入有误,请重新输入:”<

cout<<“ [1:临时职员 2: 正式职员 3:部门经理 4:主任 5:董事长] ”;

cin>>Employee::Employeeposition;

}

Eposition[i] = Employee::Employeeposition;

cout<<“员工的工作时(不需要输入单位): ”;

cin>>Employee::Employeeworktime;

Eworktime[i] = Employee::Employeeworktime;

Epay[i] = Employee::Pay(Employee::Employeeposition);

break;

}

}

dbo.WriteIn(0);}

void Employee::DeleteInfo()//删除职工数据的函数

{

char tmp;

int cNum = 1000;

DBOperate dbo;

dbo.ReadOut();

void Employee::shownum(long number);

cout<<“请输入您要删除的职工编号>: ”;

cin>>cNum;

int MN;

MN = Employee::MaxNum();

for(int i=0;i

{

if(Enum[i] == cNum)

Employee::shownum(cNum);

}

cout<<“确认要删除该职工信息?(Y为确认,N为放弃): ”;

cin>>tmp;

if(tmp=='Y')

{

if(i==MN-1)

dbo.WriteIn(-1);

else

{

for(int j=i;j

{ Enum[j] = Enum[j+1];}

dbo.WriteIn(-1);

}

cout<<“ 删除操作成功!”<

} }

float Employee::Pay(int Employeeposition)//根据职工职位计算工资的函数

{

float tmpPay;

tmpPay = Employee::EmployeeBasePay + Employee::Employeeposition Employee::EmployeeBasePay;

*

return tmpPay;}

void DBOperate::WriteIn(int iflag)//数据操作函数—写入

{

DBOperate::RefreshMaxNum(iflag);

ofstream myf(“Employee.txt”);

Employee e;

int MN;

MN = e.MaxNum();

for(int i=0;i

{

myf<

}

myf.close();

return;}

void DBOperate::ReadOut()//数据操作函数—读出

{

ifstream myf(“Employee.txt”);

Employee e;

int MN;

MN = e.MaxNum();

for(int i=0;i

{

myf>>DBOperate::Employeenum>>DBOperate::Employeename>>DBOperate::Employeesex>>DBOperate::Employeeage>>DBOperate::Employeemarriage

>>DBOperate::Employeedegree>>DBOperate::Employeedepart>>DBOperate::Employeeposition>>DBOperate::Employeeworktime>>DBOperate::Employeepay;

Enum[i] = DBOperate::Employeenum;

Ename[i] = DBOperate::Employeename;

Esex[i] = DBOperate::Employeesex;

Eage[i] = DBOperate::Employeeage;

Emarriage[i] = DBOperate::Employeemarriage;

Edegree[i] = DBOperate::Employeedegree;

Edepart[i] = DBOperate::Employeedepart;

Eposition[i] = DBOperate::Employeeposition;

Eworktime[i] = DBOperate::Employeeworktime;

Epay[i] = DBOperate::Employeepay;

}

myf.close();}

void DBOperate::RefreshMaxNum(int iflag)//更新系统中员工计数文件的函数

{

int MaxNum = 0;

ifstream myif(“EmployeeMaxNum.txt”);

myif>>MaxNum;

myif.close();

MaxNum = MaxNum+iflag;

ofstream myof(“EmployeeMaxNum.txt”);

myof<

myof.close();}

int main()//主函数

{

system(“color B0”);//设置当前窗口的背景色和前景色

// 0 = 黑色

= 灰色

// 1 = 蓝色

= 淡蓝色

// 2 = 绿色

A = 淡绿色

// 3 = 浅绿色 B = 淡浅绿色

// 4 = 红色

C = 淡红色

// 5 = 紫色

D = 淡紫色

// 6 = 黄色

E = 淡黄色

// 7 = 白色

F = 亮白色

int select = 0;

while(select!=5)

{

cout<<“ ╭————————————————————————————╮”<

cout<<“ ∣

《主菜单》

∣”<

cout<<“ ├————————————————————————————┤”<

cout<<“ ∣

1.新建并录入职工信息

∣”<

cout<<“ ∣

2.按条件输出职工信息

∣”<

cout<<“ ∣

3.修改指定职工的信息

∣”<

cout<<“ ∣

4.删除职工信息

∣”<

cout<<“ ∣

5.退出系统

∣”<

cout<<“ ╰————————————————————————————╯”<

cout<<“ ——————————————————————————————”<

cout<<“ 请选择您需要功能的代号: ”;

cin>>select;

Employee e;

DBOperate dbo;

switch(select)

{

case 1:

e.NewInfo();break;

case 2:

dbo.ReadOut();

e.ShowInfo();break;

case 3:

e.RefreshInfo();break;

case 4:

e.DeleteInfo();break;

case 5: cout<<“ 退出成功”<

default: cout<<“命令错误!”<

}

if(select == 5)

break;

}

exit(1);

return 0;}

第四篇:潮流计算--电力系统大作业(C++编写)

程序设计所涉及二叉树解释

任意一棵树或一个森林都能唯一地对应一棵二叉树,由此而编写本程序。本程序采用类二叉树为整体结构,二叉树类下定义节点类,每一条支路均为树的一个节点,支路所有的参数均作为节点的属性,并给节点加入属性“支路编号”,并以支路编号为依据构建二叉树,这就要求提前根据二叉树结构给每一个支路编号。

支路编号原则:左子树上所有编号均小于其双亲的编号,右子树上所有编号均大于其双亲的编号,为了便于查看,本程序在节点较少时编号从1开始,逐个递加至支路数;当支路较多时,可不必拘泥于逐个递加,只要满足支路编号原则即可。

例如习题3-4:

123118kV113kV8.5+j20.5Wj2.82×10-4S1.22+j20.2Wj2.82×10-4SDST=0.17+j1.7MVA40+j30MVA20+j15MVA

程序二叉树结构示意图:

本二叉树中节点1即支路1为题目中节点1与节点2之间的部分; 本二叉树中节点2即支路2为题目中节点2与节点3之间的部分; 对于习题3-3:

程序二叉树结构示意图:

本二叉树中节点2即支路2为题目中节点1与节点2之间的部分; 本二叉树中节点1即支路1为题目中节点2与节点3之间的部分; 本二叉树中节点3即支路3为题目中节点2与节点4之间的部分.拓展:

如下多支路网络:

对于三节点网络需先进行以下网络处理转化为标准二叉树,而后进行计算;

图中三角形表明该项阻抗为零,为纯导线,并进行相应参数补充进行计算。

程序说明文档

******************************************************************************************************************************************************* 本程序测试使用方法:在E盘根目录下建立输入文件:

输入文件名:input.txt;

将所附算例对应输入文件内容复制粘贴至上述文件中,在VC++6.0环境下运行cpp文件得出结果。

输出文件在E盘根目录下

输出文件名为:data.txt;******************************************************************************************************************************************************* 程序功能说明:本程序可以计算任意长度线型开始网络潮流;

支持多电压等级下的计算;

可在除供电节点外任意节点引出负载;

*******************************************************************************************************************************************************

输入格式说明:以支路为基本单位,按潮流方向输入数据:

以下例示意:

//支路个数

1,110,118,8.5,20.5,0.000564,0,0,1,0,0

//线路等效的支路

2,11,110,1.22,20.2,0,40,30,10,0.17,1.7

//变压器等效的支路

.//按此方式知道输入所有的支路

.//输入从上到下的顺序为潮流在

.//线型开式网络中的流动方向

/*

第一行输入支路个数,回车

第二行至后输入各个支路参数,回车分隔不同支路;

各行输入的支路参数顺序是:

支路编号,末端电压,始端电压,线路等效电阻,线路等效感抗,线路等效容纳,末端输入有功,末端输入无功,变比,变压器有功励磁损耗,变压器无功励磁损耗

对于线路等效电路:变压器有功/无功损耗输入零,变比输入1;

对于变压器等效电路:所有的参数均归算至高压侧,Rt,Xt对应输入线路等效电阻/感抗的位置,线路等效容抗为零;

对于个节点的引出负荷:输入至以此节点为末节点的支路的末端输入有功/无功部分;

*/ ******************************************************************************************************************************************************** 输出文件格式说明:输出的内容包括

(1)支路信息:每个支路元件的始端有功、无功和末端有功、无功;有功损耗无功损耗;电压损耗;

(2)全网信息:全网的总电源有功、总负荷有功、有功损耗、网损率;

(3)迭代信息:每次完整迭代后的所有内容;

具体在输出文件中都明确标出。

********************************************************************************************************************************************************* 程序中变量定义说明:

类中定义的变量

class line_part{

//定义支路类

double U[2];

//支路电压降落:U[0]电压降落横分量,U[1]电压降落纵分量

double k;

//变压器变比

double val;

//支路排序

double U_end;

//支路末端电压

double U_begin;

//支路首段电压

double X[3];

//支路等效阻抗: X[0]电阻,X[1]感抗,X[2]容纳

double S_end[2];

//支路末端功率:S_end[0]有功,S_end[1]无功

double S_begin[2];

//支路首段功率:S_begin[0]有功,S_begin[1]无功

double S0[2];

//变压器励磁损耗:S0[0]有功,S0[1]无功

double S_org[2];

//支路末端负载:S_org[0]有功,S_org[1]无功

line_part *lchild,*rchild;

//支路的后继两个支路 }

class BinTree{

//定义树类

void PreOrder(){PreOrder(root);};

//树的先序遍历修改电压

void PostOrder(){PostOrder(root);};

//树的后序遍历修改潮流

void display(){display(root);};

//树的先序遍历显示数据

line_part *root;

//树的根,是一个支路类

};主函数中定义的数据

ofstream outfile;

//输出数据流定

ifstream infile;

//输入数据流定

const int M(a);

//支路个数常量

主程序(复制粘贴到C++就能用)

**************************************************************************************************************************************************************

#include #include #include

double p_cost_all=0;

double sqr(double x){

//平方计算函数 return x*x;};

class line_part{

//定义支路类 private:

double val;

//支路排序

double U_end;

//支路末端电压

double U_begin;

//支路首段电压

double X[3];

//支路等效阻抗: X[0]电阻,X[1]感抗,X[2]容纳

double S_end[2];

//支路末端功率:S_end[0]有功,S_end[1]无功

double S_begin[2];

//支路首段功率:S_begin[0]有功,S_begin[1]无功

double S0[2];

//变压器励磁损耗:S0[0]有功,S0[1]无功

double S_org[2];

//支路末端负载:S_org[0]有功,S_org[1]无功

line_part *lchild,*rchild;public:

double U[2];

//支路电压降落:U[0]电压降落横分量,U[1]电压降落纵分量

double k;

//变压器变比

public: line_part(){ val=0;U_end=0;U_begin=0;X[0]=0;X[1]=0;

X[2]=0;S_end[0]=S_org[0]=0;S_end[1]=S_org[1]=0;

S_begin[0]=0;S_begin[1]=0;k=1;

S0[0]=0;S0[1]=0;U[0]=0;U[1]=0;

lchild = rchild= NULL;}

line_part(double vall,double u_end=0,double u_begin=0,double r=0,double x=0,double b=0,double Pe=0,double Xe=0,double K=0,double P0=0,double Q0=0){

val=vall;

U_end=u_end;

U_begin=u_begin;

X[0]=r;

X[1]=x;

X[2]=b;

S_end[0]=S_org[0]=Pe;

S_end[1]=S_org[1]=Xe;

S_begin[0]=0;

S_begin[1]=0;

k=K;

S0[0]=P0;

S0[1]=Q0;

U[0]=0;

U[1]=0;

lchild = rchild= NULL;

};friend class BinTree;

friend void pass_U(line_part*a,line_part*b,line_part*c);

//电压传递函数

friend void pass_w(line_part*a,line_part*b,line_part*c);

//功率传递函数

friend void pass_U2(line_part*a,line_part*b);

//电压传递函数

friend void pass_w2(line_part*a,line_part*b);

//功率传递函数

void Sbegin(){

(U_end)*X[2]/2))/sqr(Uend);;-sqr(U_begin)*X[2]/2-sqr(U_end)*X[2]/2;};void Uend(){

double U_heng(0),U_zong(0);

X[2]/2-S0[1];1])/U_begin;

//U_heng即是△u2 0])/U_begin;

//U_zong即是δu2 sqr(U_zong))/k;

double get_val(){

};

//支路首段功率计算函数 double Uend,I2;Uend=k*U_end;I2=(sqr(S_end[0])+sqr(S_end[1]-sqrS_begin[0]=S_end[0]+I2*X[0]+S0[0]S_begin[1]=S_end[1]+I2*X[1]+S0[1]

//支路末端电压计算函数 double p_begin,q_begin;p_begin=S_begin[0]-S0[0];q_begin=S_begin[1]+sqr(U_begin)*U_heng=(p_begin*X[0]+q_begin*X[U_zong=(p_begin*X[1]-q_begin*X[U_end=sqrt(sqr(U_begin-U_heng)+U[0]=U_heng;U[1]=U_zong;};

//返回支路编号 if(this==0){return-1;}else{ if(val>0&&val<100){return val;} else return-1;}

double get_Uend(){

//返回支路末端电压

return U_end;};

double get_Ubegin(){

//返回支路首段电压

return U_begin;};

double get_Pbegin(){

//返回支路首段有功

return S_begin[0];};

double get_Pend(){

//返回支路末端有功

return S_end[0];};

double get_Qbegin(){

//返回支路首段无功

return S_begin[1];};

double get_Qend(){

//返回支路末端无功

return S_end[1];};

double get_Pcost(){

//返回支路有功损耗

return S_begin[0]-S_end[0];};

double get_Qcost(){

//返回支路无功损耗

return S_begin[1]-S_end[1];};line_part *get_lchild(){

//返回支路无功损耗

return lchild;};line_part *get_rchild(){

//返回支路无功损耗

return rchild;};};

void pass_U(line_part *a,line_part *b,line_part *c){(*c).U_begin=(*a).U_end;(*b).U_begin=(*a).U_end;};void pass_w(line_part *a,line_part *b,line_part *c){(*a).S_end[0]=(*b).S_begin[0]+(*c).S_begin[0]+(*a).S_org[0];(*a).S_end[1]=(*b).S_begin[1]+(*c).S_begin[1]+(*a).S_org[1];};void pass_U2(line_part *a,line_part *b){(*b).U_begin=(*a).U_end;};void pass_w2(line_part *a,line_part *b){(*a).S_end[0]=(*b).S_begin[0]+(*a).S_org[0];(*a).S_end[1]=(*b).S_begin[1]+(*a).S_org[1];};

class BinTree{ public:

friend void pass_U(line_part*,line_part*,line_part*);

//电压传递函数

pass_w(line_part*,line_part*,line_part*);

line_part(0,0,0,0,0,0,0,0,0,0,0);root = aa;}

vall,double u_end=0,double u_begin=0,double r=0, Pe=0,double Xe=0, P0=0,double Q0=0){ egin,r,x,b,Pe,Xe,K,P0,Q0);

private:

*&t,double vall,double u_end,double u_begin,double r, Pe,double Xe, Q0);

};

friend void //功率传递函数 BinTree(){line_part *aa=new line_part *Getroot(){return root;} void insertline_part(double

double x=0,double b=0,double

double K=0,double insertline_part(root,vall,u_end,u_b} void PreOrder(){PreOrder(root);};void PostOrder(){PostOrder(root);};void display(){display(root);};line_part *root;void insertline_part(line_part

double x,double b,double

double K,double P0,double void PreOrder(line_part *&t);void PostOrder(line_part *t);void display(line_part *&t);

void BinTree::insertline_part(line_part *&t, double vall,double u_end=0,double u_begin=0,double r=0,double x=0,double b=0,double Pe=0,double Xe=0,double K=0,double P0=0,double Q0=0){

//插入节点

double ass=t->get_val();if(t==0||t->get_val()<=0){

t=new line_part(vall,u_end,u_begin,r,x,b,Pe,Xe,K,P0,Q0);} else if(vallget_val()){

insertline_part(t->lchild, vall,u_end,u_begin,r,x,b,Pe,Xe,K,P0,Q0);} else {

insertline_part(t->rchild, vall,u_end,u_begin,r,x,b,Pe,Xe,K,P0,Q0);} };/////////////////////////////////////////////////////////////////////////////////////////////////////////////// void BinTree::display(line_part *&t){

if(t->get_val()>0&&t->get_val()<100){

display(t->lchild);

display(t->rchild);

ofstream outfile1;

outfile1.open(“e:data.txt”,ios::ate);

p_cost_all +=t->get_Pcost();

double U;

// 计算并存放各个节点的电压相角(始端为零)

U=atan2(t->U[1],(t->get_Ubegin()-t->U[0]))/3.1415926*180;

outfile1<<“支路”<get_val()<<“电压相角”<<“

”<

outfile1<<“

”<<“首端电压”<<“

”<get_Ubegin()<

outfile1<<“

”<<“末端电压”<<“

”<get_Uend()<

//计算并存放各个支double U_cost;

//计算并存放各个支路的电压损耗

U_cost=t->get_Ubegin()-t->get_Uend();

outfile1<<“

”<<“电压损耗”<<“

outfile1<<”

“<<”始端有功“<<” 首端电压

outfile1<<“

”<<“始端无功”<<“ 路的末端电压

outfile1<<”

“<<”末端有功“<<” 首端电压

outfile1<<“

”<<“末端无功”<<“ 路的末端电压

double P_cost;

的有功损耗

P_cost=t->get_Pcost();

outfile1<<”

“<<”有功损耗“<<”

double Q_cost;

的无功损耗

Q_cost=t->get_Qcost();

outfile1<<“

”<<“无功损耗”<<“

outfile1.close();

”<get_Pbegin()<get_Qbegin()<

//计算并存放各个支“<get_Pend()<get_Qend()<

//计算并存放各个支

//计算并存放各个支路 “<

//计算并存放各个支路 ”<

};/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void BinTree::PreOrder(line_part *&t){

//先序遍历二叉树修改电压

0)

get_lchild()->get_val()<100)

get_rchild()->get_val()<100)

get_rchild()->get_val()<100)

if(t->get_val()>0&&t->get_val()<10{ if(t->get_lchild()->get_val()>0&&t-> { if(t->get_rchild()->get_val()>0&&t->

{

t->Uend();

pass_U(t,t->lchild,t->rchild);

t->lchild->Uend();

t->rchild->Uend();

}

else{

t->Uend();

pass_U2(t,t->lchild);

t->lchild->Uend();} } else { if(t->get_rchild()->get_val()>0&&t->

{

t->Uend();

pass_U2(t,t->rchild);

t->rchild->Uend();

}

else{} }

PreOrder(t->lchild);PreOrder(t->rchild);

} };void BinTree::PostOrder(line_part *t){

//后序遍历二叉树修改潮流

if(t->get_val()>0&&t->get_val()<100)

get_lchild()->get_val()<100)

get_rchild()->get_val()<100)

get_rchild()->get_val()<100)

{ PostOrder(t->lchild);PostOrder(t->rchild);if(t->get_lchild()->get_val()>0&&t-> { if(t->get_rchild()->get_val()>0&&t->

{

t->lchild->Sbegin();

t->rchild->Sbegin();

pass_w(t,t->lchild,t->rchild);

t->Sbegin();

}

else{

t->lchild->Sbegin();

pass_w2(t,t->lchild);

t->Sbegin();} } else { if(t->get_rchild()->get_val()>0&&t->

{

t->rchild->Sbegin();

pass_w2(t,t->rchild);

t->Sbegin();

}

else{}

};

void main(){

ofstream outfile;

//输入数据流定义

infile>>a;

cout<<“节点个数

”<

const int M(a);

double *A=new double[10*M];支路数据数组

while(l<11*M){

}

}

//输出数据流定义 outfile.open(“e:data.txt”);outfile.clear();outfile.close();ifstream infile;infile.open(“e:input.txt”);

int a;int l(0);char b;

//支路节点数常

//输入流输入各

infile>>A[l];

infile.get(b);l++;};outfile.open(“e:data.txt”,ios::ate);outfile<<“节点个数

”<

i=0;i

*i+1],A[11*i+2],A[11*i+3],A[11*i+4],*i+8],A[11*i+9],A[11*i+10]);

如下“<

outfile.close();

BinTree elec;for(int

//添加节点

elec.insertline_part(A[11*i+0],A[11 A[11*i+5],A[11*i+6],A[11*i+7],A[11} for(i = 0;i<5;i++){ outfile.open(”e:data.txt“,ios::ate);outfile<

outfile<

elec.PostOrder();

elec.PreOrder();elec.display();

outfile.open(“e:data.txt”,ios::ate);

“<

”<

“<

”<

outfile<

line_part *ee=new line_part();ee=elec.Getroot();

double aa =ee->get_Pbegin();

outfile<<“全网的总电源有功

outfile.close();

outfile.open(”e:data.txt“,ios::ate);double bb;bb =aa-p_cost_all;

outfile<<”全网的总负荷有功

outfile<<“全网的总有功损耗

double cc;

cc = p_cost_all/aa*100;

outfile<<”全网的网损率

outfile.close();

p_cost_all=0.0;

}

};

**************************************************************************************************************************************************************习题3-3 input: 3 2,35,38.5,1.2,2.4,0,3,2,1,0,0 1,35,35,1,2,0,5,3,1,0,0 3,35,35,2,4,0,2,3,1,0,0

习题3-4 Input: 最大负荷 2 1,110,118,8.5,20.5,0.000564,0,0,1,0,0 2,11,110,1.22,20.2,0,40,30,10,0.17,1.7 最小负荷 2 1,110,113,8.5,20.5,0.000564,0,0,1,0,0 2,11,110,1.22,20.2,0,20,15,10,0.17,1.7

第五篇:西安交大C++程序设计第四章作业

西安交通大学实验报告

课程_计算机程序设计_实验名称_数组与结构体_

系 别____ ___________ 实 验 日 期 2014年 3 月 18 日

专业班级___ ___组别_____________ 实 验 报 告 日 期 2014年 3 月 22 日 姓 名__ __ __学号_ ___ 报 告 退 发(订正、重做)同 组 人_________________________________ 教 师 审 批 签 字

一、实验目的:

掌握数组与字符串的输入方法,包括一维数组、二位数组,不含空格的一个字符串以及含空格的多个字符串的输入以及处理。

二、实验内容:

1.第一题:编写一个程序将给出的矩阵转置。(1)源程序代码:

#include using namespace std;int main(){

} int jz[4][4]={{4,6,8,9},{2,7,4,5},{3,8,16,15},{1,5,7,11}};int zz[4][4];int i,j;for(i=0;i<4;i++){

} return 0;for(j=0;j<4;j++){

} cout<

/ 12

2.第二题:改写例4-5冒泡排序程序,由每轮挑选最小元素改为每轮挑选最大元素。(必做题)(1)源程序代码:

#include using namespace std;int main(){

const int COUNT=16;int list[COUNT]={503,87,512,61,908,170,897,275,653,426,154,509,612,677,765,703};for(int i=COUNT-1;i>=0;i--){

} cout<<“结果是:”<

/ 12

for(int j=0;j

} if(list[j+1]

} int tmp=list[j+1];list[j+1]=list[j];list[j]=tmp;} return 0;(2)实验结果:

3.第三题:编写程序:输入N(例如N为20)个整数,统计输出负数的个数、正整数的个数及0的个数;计算输出所有负数之和、所有正整数之和。(必做题)(1)源程序代码:

#include using namespace std;int main(){

const int m=20;cout<<“请输入个整数:n”;int num[m];for(int n=0;n>num[n];} int z=0,f=0,l=0,Sz=0,Sf=0;for(int i=0;i

if(num[i]>0){ z++;

/ 12

}

} } Sz=Sz+num[i];else {

} if(num[i]<0){

} else l++;f++;Sf=Sf+num[i];cout<<“正数的个数为:”<

4.第四题:加密。明文中小写字母用其后第3个小写字母代替,明文中大写字母用其后第3个大写字母代替。(必做题)(1)源程序代码:

#include using namespace std;int main(){

char in[200];cout<<“请输入您要加密的语句(不超过个单词):”;cin.get(in,200);

/ 12

} int i;for(i=0;in[i]!=0;i++){

} cout<<“加密结果是:”<='a'&&in[i]<='z'){

} if(in[i]>='A'&&in[i]<='Z'){

} if(in[i]>'W')in[i]=in[i]-23;in[i]=in[i]+3;else if(in[i]>'w')in[i]=in[i]-23;in[i]=in[i]+3;else(2)实验结果:

5.第五题:编写凯撒解密程序,即将第5题凯撒加密的密文解密成明文。(必做题)(1)源程序代码:

#include using namespace std;int main(){

/ 12

} char in[200];cout<<“请输入您要解密的语句:”;cin.get(in,200);int i;for(i=0;in[i]!=0;i++){

} cout<<“解密结果是:”<='a'&&in[i]<='z'){

} if(in[i]>='A'&&in[i]<='Z'){

} if(in[i]<'D')in[i]=in[i]+23;in[i]=in[i]-3;else if(in[i]<'d')in[i]=in[i]+23;in[i]=in[i]-3;else(2)实验结果:为了与上题对照以验证是否正确,故意将上题的结果代入:

/ 12

6.第六题:(必做题)编写程序完成如下功能: A)定义二维数组8 ×8; B)自动生成数组中每个数据元素值为(i+1)×(j+1),i和j分别为行列坐标,输出该数组所有元素; C)计算主对角线元素之和,计算次对角线元素之和,并输出; D)将主对角线元素之和加到第一行中每个元素中,然后输出第一行所有元素值。(1)源程序代码:

#include using namespace std;int main(){ const int M=8;int a[M][M];int i,j;cout<<“矩阵的各个元素为:n”;for(i=0;i

for(j=0;j

{

a[i][j]=(i+1)*(j+1);

if(a[i][j]>9)

cout<

else

cout<

}

cout<

zhu=zhu+a[i][i];

fu=fu+a[i][M-i];} cout<<“主对角线元素之和为:”<

} } cout<<“a[”<

7.第七题:(必做题)编写程序产生 ISBN 号的校验位。任何新出版的图书都配有 ISBN 号,2007 年以前是由 10 位数字加上3个连字符组成的 ISBN,其中最后一位为校验位,校验位产生的具体算法如下:

假设某国际标准书号号码前 9 位是: 7-309-04547 ;计算加权和 S : S = 7 × 10+ 3 × 9+ 0 × 8+ 9 × 7+ 0 × 6+ 4 × 5+ 5 × 4+ 4 × 3+ 7 × 2 = 226 ;计算 S ÷ 11 的余数 M : M = 226 mod 11 = 6 ;计算 11-M 的差 N : N = 11 − 6 = 5 如果 N = 10,校验码是字母“ X ”;如果 N = 11,校验码是数字“ 0 ”;如果 N 为其他数字,校验码是数字 N。所以,本书的校验码是 5,故该

/ 12

国际标准书号为 ISBN 7-309-04547-5。

程序总体要求:先输入 11 位字符组成 ISBN 字符串,如: 7-309-04547,然后计算产生校验码(位)5,最后输出完整的 ISBN 字符串 7-309-04547-5 下面是三本书的 ISBN,以便测试程序: 7-302-09831-X 7-302-13294-1 7-5053-8405-8(1)源程序代码:

//7-302-09831-X //7-302-13294-1 //7-5053-8405-8 #include using namespace std;int main(){ char num[20];cout<<“请输入书号的前部分:”<>num;int i,j;int num_[20];int sum;cout<<“完整的书号是:”<

if(num[i]>='0'&&num[i]<='9')

{

num_[i]=num[i]-'0';

cout<

sum=sum+num_[i]*j;

j--;

}

else

cout<

} int M=sum%11;if(11-M==10){ if(11-M==11)

} return 0;cout<<“-0”<

(2)实验结果:

八.第八题:两个有序数列(由小到大排列)存放在两个数组中,将两数列归并为一个有序数列,即归并后的结果数列放在第三个数组中。例如: int a[5] = {1,4,10,13,16};//已知数列 int b[8] = {3,6,9,12,15,18,21,24};//已知数列 int c[13] = {1,3,4,6,10,12,13,15,16,18,21,24};//归并后的结果数列(选做题)

(1)源程序代码:

/ 12

#include using namespace std;int main(){ const int M=10;const int P=2;int a[P][M];int a2[2*M];int i;cout<<“请按顺序输入数列一的各个元素:”<>a[0][i];cout<<“请按顺序输入数列二的各个元素:”<

cin>>a[1][i-M];for(i=0;i<2*M;i++){

if(i

{

a2[i]=a[0][i];

}

if(i>=M)

{

a2[i]=a[1][i-M];

} } for(i=2*M-1;i>=0;i--){

for(int j=0;j

{

if(a2[j+1]

{

int tmp=a2[j+1];

a2[j+1]=a2[j];

a2[j]=tmp;

}

} } cout<<“合并后数列为:”<

(2)实验结果: / 12

下载c++作业word格式文档
下载c++作业.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


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

相关范文推荐

    华中科技大学c++第3次上机作业

    华中科技大学 《计算机基础与程序设计(C++)》 实验报告 实验名称:第三次上机实验实验学时:4 姓名:学号:班级:电气 实验日期:2017/3/27 教师批阅签字: 一、实验目的     掌握三种循环......

    C++常用填空题

    一、单项选择题(共20题,每题1分,共20分) 6、对重载函数形参的描述中,错误的是 D A. 参数的个数可能不同 B. 参数的类型可能不同 C. 参数的顺序可能不同 D. 参数的个数、类型、顺......

    C++实验

    上机实验: 1、 回文是指正读,反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文,试用STACK类编写该程序。 #include #include #include int IsPalind......

    C++实验报告

    姓名:XX 学院:XXX 班级:XXX 学号:XXX - 1 i++; } while(i......

    c++学习方法

    学习C++应该看的书 初级:语法/语意(C++) 《Essential C++ 中文版》 ,侯俊杰 译,282页 《C++大学教程(第二版)》,邱仲潘等 译,816页 《C++ Primer 中文版》,侯俊杰 译, 《标准C++宝......

    什么是c++(本站推荐)

    什么是c++? C++ C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种......

    c++学习心得

    c++学习心得 2008-03-12 16:24 为初学者指路 首先声明,我可不是什么高手,也就是刚脱贫。因为运气很好,买到了几本好书,在学习过程中几乎没走什么弯路,没费什么劲就入门了,现在一般......

    C++学习心得

    C++学习心得 在计算机课程中,C++程序设计是计算机专业的一门必修基础课,该语言以其高效而又实用的特性:既可以进行过程化程序设计,又可进行面向对象的程序设计,是进行软件开发的......