void main() { GOODS goods[MAX]; int choice, sum; sum = read_file(goods); if (sum == 0) { printf ("Key in the goods information~********\n"); getchar(); sum = input (goods); } do { clrscr(); printf ("\n\n **********the managed system of supermarket***********"); printf (" 1.Append the goods information \n\n"); printf (" 2.Modify the goods information \n\n"); printf (" 3.Delete the goods information \n\n"); printf (" 4.Print the informationof stock goods \n\n"); printf (" 5.Inquire the goods information \n\n"); printf (" 6.Count the goods information \n\n"); printf (" 7.Sort the goods information \n\n"); printf (" 0.Exit the system of goods information \n\n"); printf (" Please choose that you want(0~7):"); scanf ("%d", &choice); switch (choice) { case 1:append(); break; case 2:modify(goods, sum); break; case 3:delete(); break; case 4:output(goods, sum); break; case 5:inquire(); break; case 6:count(); break; case 7:sort(goods, sum); break; case 0:break; } }while (choice != 0); save_file(goods, sum); }
void Triangles::MakeQuadrangles(double costheta) { if (verbosity>2) cout << " -- MakeQuadrangles costheta = " << costheta << endl; if (verbosity>5) cout << " (in) Nb of Quadrilaterals = " << NbOfQuad << " Nb Of Triangles = " << nbt-NbOutT- NbOfQuad*2 << " Nb of outside triangles = " << NbOutT << endl; if (costheta >1) { if (verbosity>5) cout << " do nothing costheta >1 "<< endl; return;} Int4 nbqq = (nbt*3)/2; DoubleAndInt4 *qq = new DoubleAndInt4[nbqq]; Int4 i,ij; int j; Int4 k=0; for (i=0;i<nbt;i++) for (j=0;j<3;j++) if ((qq[k].q=triangles[i].QualityQuad(j))>=costheta) qq[k++].i3j=i*3+j; // sort qq HeapSort(qq,k); Int4 kk=0; for (ij=0;ij<k;ij++) { // cout << qq[ij].q << " " << endl; i=qq[ij].i3j/3; j=(int) (qq[ij].i3j%3); // optisamition no float computation if (triangles[i].QualityQuad(j,0) >=costheta) triangles[i].SetHidden(j),kk++; } NbOfQuad = kk; if (verbosity>2) { cout << " (out) Nb of Quadrilaterals = " << NbOfQuad << " Nb Of Triangles = " << nbt-NbOutT- NbOfQuad*2 << " Nb of outside triangles = " << NbOutT << endl; } delete [] qq; #ifdef DRAWING2 Draw(); inquire(); #endif }
void QueryBook() /*查询图书信息*/ { char id[10]; /*结果集中的行数*/ char *sql; char dest[100] ={" "}; if(!mysql_real_connect(&mysql,"127.0.0.1","root","111","db_books",0,NULL,0)) { printf("\t 不能连接数据库!\n"); } else { printf("\t 请输入您想要查询的图书编号:"); scanf("%s",id); /*输入图书编号*/ sql = "select * from tb_book where id="; strcat(dest,sql); strcat(dest,id); /*将图书编号追加到sql语句后面*/ if(mysql_query(&mysql,dest)) { //如果查询失败 printf("\n 查询 tb_book 数据表失败!\n"); } else { result=mysql_store_result(&mysql); //获得结果集 if(mysql_num_rows(result)!=NULL) { //有记录的情况,只有有记录取数据才有意义 printf("\t ════════════════════════════ \n"); printf("\t 显示图书信息 \n"); printf("\t ════════════════════════════ \n"); printf("\t图书编号 图书名 作者 出版社 \n"); printf("\t -------------------------------------------------------- \n"); while((row=mysql_fetch_row(result))) { //取出结果集中记录 fprintf(stdout,"\t %s %s %s %s \n",row[0],row[1],row[2],row[3]); //输出这行记录 } printf("\t ════════════════════════════ \n"); } else { printf("\t 没有发现要查询的信息!\n"); } mysql_free_result(result); //释放结果集 } mysql_close(&mysql); //释放连接 } inquire(); /*询问是否显示主菜单*/ }
void ShowAll() /*调用显示所有图书数据的过程*/ { /*连接数据库*/ if(!mysql_real_connect(&mysql,"127.0.0.1","root","111","db_books",0,NULL,0)) { printf("\n\t 不能连接数据库!\n"); } else { /*数据库连接成功*/ if(mysql_query(&mysql,"select * from tb_book")) { //如果查询失败 printf("\n\t 查询 tb_book 数据表失败!\n"); } else { result=mysql_store_result(&mysql); //获得结果集 if(mysql_num_rows(result)!=NULL) { //有记录的情况,只有有记录取数据才有意义 printf("\t ════════════════════════════ \n"); printf("\t 显 示 所 有 图 书 信 息 \n"); printf("\t ════════════════════════════ \n"); printf("\t图书编号 图书名 作者 出版社 \n"); printf("\t -------------------------------------------------------- \n"); while((row=mysql_fetch_row(result))) { //取出结果集中记录 fprintf(stdout,"\t %s %s %s %s \n",row[0],row[1],row[2],row[3]); //输出这行记录 } printf("\t ════════════════════════════ \n"); } else { printf("\n\t 没有记录信息 !\n"); } mysql_free_result(result); //释放结果集 } mysql_close(&mysql); //释放连接 } inquire(); /*询问是否显示主菜单*/ }
EinspurDynamikRealtime::~EinspurDynamikRealtime() { if (coVRMSController::instance()->isMaster()) { RT_TASK_INFO info; inquire(info); if (info.status & T_STARTED) { runTask = false; while (!taskFinished) { usleep(100000); } } delete steerWheel; delete steerCon; delete motPlat; } }
void DeleteBook() { char id[10]; char *sql; char dest[100]={" "}; char dest1[100]={" "}; //only if the user is 'root' and password is right, you can access database if(!mysql_real_connect(&mysql,"127.0.0.1","root","1201","db_books",0,NULL,0)) { printf("\n\t cannot connect database!\n"); } else { printf("\t please input the id of the book you'd like to delete:\n"); scanf("%s",id); sql="select * from tb_book where id="; strcat(dest,sql); strcat(dest,id); if(mysql_query(&mysql,dest)) { printf("\n query tb_book failed!\n"); } else { result=mysql_store_result(&mysql); if(mysql_num_rows(result)!='\0') { printf("\t find record information, show it?(y/n)\n"); scanf("%s",ch); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) { printf("\t==============================================\n"); printf("\t Show Book's Information \n"); printf("\t==============================================\n"); printf("\t ID Bookname Author Bookconcern \n"); printf("\t==============================================\n"); while(row=mysql_fetch_row(result)) { fprintf(stdout,"\t %s %s %s %s \n",row[0],row[1],row[2],row[3]); } printf("\t==============================================\n"); printf("\tDelete?(y/n)\n"); scanf("%s",ch); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) { sql="delete from tb_book where ID= "; printf("%s",dest1); strcat(dest1,sql); strcat(dest1,id); printf("%s",dest1); if(mysql_query(&mysql,dest1)!=0) fprintf(stderr,"\t cannot delete record! Error: %s",mysql_error(&mysql)); else printf("delete sucessfully\n"); } } } else printf("No modifying info!\n"); } mysql_free_result(result); } mysql_close(&mysql); inquire(); }
/* Triangles::BThBoundary(Edge e,Real 8) const { // pointeur of the background must be on // Edge be = e.on; } */ int Triangles::SplitElement(int choice) { Direction NoDirOfSearch; const int withBackground = &BTh != this && &BTh; if (verbosity>2) cout << " -- SplitElement " << (choice? " Q->4Q and T->4T " : " Q->4Q or T->3Q " ) << endl;; if (verbosity>5) cout << endl << " (in) Nb of Quadrilaterals = " << NbOfQuad << " Nb Of Triangles = " << nbt-NbOutT- NbOfQuad*2 << " Nb of outside triangles = " << NbOutT << endl; ReNumberingTheTriangleBySubDomain(); #ifdef DRAWING2 Draw(); inquire(); #endif int nswap =0; const Int4 nfortria( choice ? 4 : 6); if(withBackground) { BTh.SetVertexFieldOn(); SetVertexFieldOnBTh(); } else BTh.SetVertexFieldOn(); Int4 newnbt=0,newnbv=0; Int4 * kedge = 0; Int4 newNbOfQuad=NbOfQuad; Int4 * ksplit= 0, * ksplitarray=0; Int4 kkk=0; int ret =0; if (nbvx<nbv+nbe) return 1;// Triangles * OCurrentTh= CurrentTh; CurrentTh = this; // 1) create the new points by spliting the internal edges // set the Int4 nbvold = nbv; Int4 nbtold = nbt; Int4 NbOutTold = NbOutT; Int4 NbEdgeOnGeom=0; Int4 i; nbt = nbt - NbOutT; // remove all the the ouside triangles Int4 nbtsave = nbt; Triangle * lastT = triangles + nbt; for (i=0;i<nbe;i++) if(edges[i].on) NbEdgeOnGeom++; Int4 newnbe=nbe+nbe; // Int4 newNbVerticesOnGeomVertex=NbVerticesOnGeomVertex; Int4 newNbVerticesOnGeomEdge=NbVerticesOnGeomEdge+NbEdgeOnGeom; // Int4 newNbVertexOnBThVertex=NbVertexOnBThVertex; Int4 newNbVertexOnBThEdge=withBackground ? NbVertexOnBThEdge+NbEdgeOnGeom:0; // do allocation for pointeur to the geometry and background VertexOnGeom * newVerticesOnGeomEdge = new VertexOnGeom[newNbVerticesOnGeomEdge]; VertexOnEdge *newVertexOnBThEdge = newNbVertexOnBThEdge ? new VertexOnEdge[newNbVertexOnBThEdge]:0; if (NbVerticesOnGeomEdge) memcpy(newVerticesOnGeomEdge,VerticesOnGeomEdge,sizeof(VertexOnGeom)*NbVerticesOnGeomEdge); if (NbVertexOnBThEdge) memcpy(newVertexOnBThEdge,VertexOnBThEdge,sizeof(VertexOnEdge)*NbVertexOnBThEdge); Edge *newedges = new Edge [newnbe]; // memcpy(newedges,edges,sizeof(Edge)*nbe); SetOfEdges4 * edge4= new SetOfEdges4(nbe,nbv); #ifdef DEBUG for (i=0;i<nbt;i++) triangles[i].check(); #endif #ifdef DRAWING2 reffecran(); #endif Int4 k=nbv; Int4 kk=0; Int4 kvb = NbVertexOnBThEdge; Int4 kvg = NbVerticesOnGeomEdge; Int4 ie =0; Edge ** edgesGtoB=0; if (withBackground) edgesGtoB= BTh.MakeGeometricalEdgeToEdge(); Int4 kerr=0,ferr=0; for (i=0;i<nbe;i++) newedges[ie].on=0; for (i=0;i<nbe;i++) { GeometricalEdge *ong = edges[i].on; newedges[ie]=edges[i]; newedges[ie].adj[0]=newedges+(edges[i].adj[0]-edges) ; newedges[ie].adj[1]=newedges + ie +1; R2 A = edges[i][0],B = edges[i][1]; // cout << " ie = " << ie <<" v0 = " << Number(newedges[ie][0]) << endl; kk += (i == edge4->addtrie(Number(edges[i][0]),Number(edges[i][1]))); if (ong) // a geometrical edges { if (withBackground) { // walk on back ground mesh // newVertexOnBThEdge[ibe++] = VertexOnEdge(vertices[k],bedge,absicsseonBedge); // a faire -- difficile // the first PB is to now a background edge between the 2 vertices assert(edgesGtoB); // cout << " ie = " << ie <<" v0 = " << Number(newedges[ie][0]) << endl; ong= ProjectOnCurve(*edgesGtoB[Gh.Number(edges[i].on)], edges[i][0],edges[i][1],0.5,vertices[k], newVertexOnBThEdge[kvb], newVerticesOnGeomEdge[kvg++]); vertices[k].ReferenceNumber= edges[i].ref; vertices[k].DirOfSearch = NoDirOfSearch; ; // get the Info on background mesh Real8 s = newVertexOnBThEdge[kvb]; Vertex & bv0 = newVertexOnBThEdge[kvb][0]; Vertex & bv1 = newVertexOnBThEdge[kvb][1]; // compute the metrix of the new points vertices[k].m = Metric(1-s,bv0,s,bv1); kvb++; // cout << " ie = " << ie <<" v0 = " << Number(newedges[ie][0]) << endl; } else { ong=Gh.ProjectOnCurve(edges[i], 0.5,vertices[k],newVerticesOnGeomEdge[kvg++]); // vertices[k].i = toI2( vertices[k].r); vertices[k].ReferenceNumber = edges[i].ref; vertices[k].DirOfSearch = NoDirOfSearch; vertices[k].m = Metric(0.5,edges[i][0],0.5,edges[i][1]); } } else // straigth line edge --- { vertices[k].r = ((R2) edges[i][0] + (R2) edges[i][1] )*0.5; vertices[k].m = Metric(0.5,edges[i][0],0.5,edges[i][1]); vertices[k].on = 0; } //vertices[k].i = toI2( vertices[k].r); R2 AB = vertices[k].r; R2 AA = (A+AB)*0.5; R2 BB = (AB+B)*0.5; vertices[k].ReferenceNumber = edges[i].ref; vertices[k].DirOfSearch = NoDirOfSearch; newedges[ie].on = Gh.Contening(AA,ong); newedges[ie++].v[1]=vertices+k; newedges[ie]=edges[i]; newedges[ie].adj[0]=newedges + ie -1; newedges[ie].adj[1]=newedges+(edges[i].adj[1]-edges) ; newedges[ie].on = Gh.Contening(BB,ong); newedges[ie++].v[0]=vertices+k; // cout << " ie = " << ie-2 << " vm " << k << " v0 = " << Number(newedges[ie-2][0]) // << " v1 = " << Number(newedges[ie-1][1]) // << " ong =" << ong-Gh.edges // << " on 0 =" << newedges[ie-2].on -Gh.edges << AA // << " on 1 =" << newedges[ie-1].on -Gh.edges << BB // << endl; k++; } #ifdef DEBUG assert(kvb == newNbVertexOnBThEdge); // verif edge { Vertex *v0 = vertices, *v1 = vertices+ k; for (Int4 i=0;i<ie;i++) { assert( &newedges[i][0] >= v0 && &newedges[i][0] < v1); assert( &newedges[i][1] >= v0 && &newedges[i][1] < v1); } } #endif if (edgesGtoB) delete [] edgesGtoB; edgesGtoB=0; newnbv=k; newNbVerticesOnGeomEdge=kvg; if (newnbv> nbvx) goto Error;// bug nbv = k; kedge = new Int4[3*nbt+1]; ksplitarray = new Int4[nbt+1]; ksplit = ksplitarray +1; // because ksplit[-1] == ksplitarray[0] for (i=0;i<3*nbt;i++) kedge[i]=-1; // for (i=0;i<nbt;i++) { Triangle & t = triangles[i]; assert(t.link); for(int j=0;j<3;j++) { const TriangleAdjacent ta = t.Adj(j); const Triangle & tt = ta; if (&tt >= lastT) t.SetAdj2(j,0,0);// unset adj const Vertex & v0 = t[VerticesOfTriangularEdge[j][0]]; const Vertex & v1 = t[VerticesOfTriangularEdge[j][1]]; Int4 ke =edge4->findtrie(Number(v0),Number(v1)); if (ke>0) { Int4 ii = Number(tt); int jj = ta; Int4 ks = ke + nbvold; kedge[3*i+j] = ks; if (ii<nbt) // good triangle kedge[3*ii+jj] = ks; Vertex &A=vertices[ks]; Real8 aa,bb,cc,dd; if ((dd=Area2(v0.r,v1.r,A.r)) >=0) { // warning PB roundoff error if (t.link && ( (aa=Area2( A.r , t[1].r , t[2].r )) < 0.0 || (bb=Area2( t[0].r , A.r , t[2].r )) < 0.0 || (cc=Area2( t[0].r , t[1].r , A.r )) < 0.0)) ferr++, cerr << " Error : " << ke + nbvold << " not in triangle " << i << " In=" << !!t.link << " " << aa << " " << bb << " " << cc << " " << dd << endl; } else { if (tt.link && ( (aa=Area2( A.r , tt[1].r , tt[2].r )) < 0 || (bb=Area2( tt[0].r , A.r , tt[2].r )) < 0 || (cc=Area2( tt[0].r , tt[1].r , A.r )) < 0)) ferr++, cerr << " Warning : " << ke + nbvold << " not in triangle " << ii << " In=" << !!tt.link << " " << aa << " " << bb << " " << cc << " " << dd << endl; } } } } if(ferr) { cerr << " Number of triangles with P2 interpolation Probleme " << ferr << endl;; MeshError(9); } for (i=0;i<nbt;i++) { ksplit[i]=1; // no split by default const Triangle & t = triangles[ i]; // cout << " Triangle " << i << " " << t << !!t.link << ":: " ; int nbsplitedge =0; int nbinvisible =0; int invisibleedge=0; int kkk[3]; for (int j=0;j<3;j++) { if (t.Hidden(j)) invisibleedge=j,nbinvisible++; const TriangleAdjacent ta = t.Adj(j); const Triangle & tt = ta; const Vertex & v0 = t[VerticesOfTriangularEdge[j][0]]; const Vertex & v1 = t[VerticesOfTriangularEdge[j][1]]; // cout << " ke = " << kedge[3*i+j] << " " << Number(v0) << " " << Number(v1) << "/ "; if ( kedge[3*i+j] < 0) { Int4 ke =edge4->findtrie(Number(v0),Number(v1)); // cout << ":" << ke << "," << !!t.link << " " << &tt ; if (ke<0) // new { if (&tt) // internal triangles all the boundary { // new internal edges Int4 ii = Number(tt); int jj = ta; kedge[3*i+j]=k;// save the vertex number kedge[3*ii+jj]=k; if (k<nbvx) { vertices[k].r = ((R2) v0+(R2) v1 )/2; //vertices[k].i = toI2( vertices[k].r); vertices[k].ReferenceNumber=0; vertices[k].DirOfSearch =NoDirOfSearch; vertices[k].m = Metric(0.5,v0,0.5,v1); } k++; kkk[nbsplitedge++]=j; } // tt else cerr <<endl << " Bug " <<i<< " " << j << " t=" << t << endl; } // ke<0 else { // ke >=0 kedge[3*i+j]=nbvold+ke; kkk[nbsplitedge++]=j;// previously splited } } else kkk[nbsplitedge++]=j;// previously splited } assert (nbinvisible<2); // cout << " " << nbinvisible << " " << nbsplitedge << endl; switch (nbsplitedge) { case 0: ksplit[i]=10; newnbt++; break; // nosplit case 1: ksplit[i]=20+kkk[0];newnbt += 2; break; // split in 2 case 2: ksplit[i]=30+3-kkk[0]-kkk[1];newnbt += 3; break; // split in 3 case 3: if (nbinvisible) ksplit[i]=40+invisibleedge,newnbt += 4; else ksplit[i]=10*nfortria,newnbt+=nfortria; break; } assert(ksplit[i]>=40); } // now do the element split newNbOfQuad = 4*NbOfQuad; nbv = k; #ifdef DRAWING2 inquire(); #endif // cout << " Nbv = " << nbv << endl; kkk = nbt; ksplit[-1] = nbt; // look on old true triangles for (i=0;i<nbtsave;i++) { // cout << "Triangle " << i << " " << ksplit[i] << ":" << triangles[i] // << " ----------------------------------------------- " <<endl; Triangle * tc=0; int nbmkadj=0; Int4 mkadj [100]; mkadj[0]=i; Int4 kk=ksplit[i]/10; int ke=(int) (ksplit[i]%10); assert(kk<7 && kk >0); // def the numbering k (edge) i vertex int k0 = ke; int k1 = NextEdge[k0]; int k2 = PreviousEdge[k0]; int i0 = OppositeVertex[k0]; int i1 = OppositeVertex[k1]; int i2 = OppositeVertex[k2]; Triangle &t0=triangles[i]; Vertex * v0=t0(i0); Vertex * v1=t0(i1); Vertex * v2=t0(i2); // cout << "nbmkadj " << nbmkadj << " it=" << i <<endl; assert(nbmkadj< 10); // -------------------------- TriangleAdjacent ta0(t0.Adj(i0)),ta1(t0.Adj(i1)),ta2(t0.Adj(i2)); // save the flag Hidden int hid[]={t0.Hidden(0),t0.Hidden(1),t0.Hidden(2)}; // un set all adj -- save Hidden flag -- t0.SetAdj2(0,0,hid[0]); t0.SetAdj2(1,0,hid[1]); t0.SetAdj2(2,0,hid[2]); // -- remake switch (kk) { case 1: break;// nothing case 2: // { Triangle &t1=triangles[kkk++]; t1=t0; assert (kedge[3*i+i0]>=0); Vertex * v3 = vertices + kedge[3*i+k0]; t0(i2) = v3; t1(i1) = v3; t0.SetAllFlag(k2,0); t1.SetAllFlag(k1,0); } break; case 3: // { Triangle &t1=triangles[kkk++]; Triangle &t2=triangles[kkk++]; t2=t1=t0; assert (kedge[3*i+k1]>=0); assert (kedge[3*i+k2]>=0); Vertex * v01 = vertices + kedge[3*i+k2]; Vertex * v02 = vertices + kedge[3*i+k1]; t0(i1) = v01; t0(i2) = v02; t1(i2) = v02; t1(i0) = v01; t2(i0) = v02; t0.SetAllFlag(k0,0); t1.SetAllFlag(k1,0); t1.SetAllFlag(k0,0); t2.SetAllFlag(k2,0); } break; case 4: // case 6: // split in 4 { Triangle &t1=triangles[kkk++]; Triangle &t2=triangles[kkk++]; Triangle &t3=triangles[kkk++]; t3=t2=t1=t0; assert(kedge[3*i+k0] >=0 && kedge[3*i+k1] >=0 && kedge[3*i+k2] >=0); Vertex * v12 = vertices + kedge[3*i+k0]; Vertex * v02 = vertices + kedge[3*i+k1]; Vertex * v01 = vertices + kedge[3*i+k2]; // cout << Number(t0(i0)) << " " << Number(t0(i1)) // << " " << Number(t0(i2)) // << " " << kedge[3*i+k0] // << " " << kedge[3*i+k1] // << " " << kedge[3*i+k2] << endl; t0(i1) = v01; t0(i2) = v02; t0.SetAllFlag(k0,hid[k0]); t1(i0) = v01; t1(i2) = v12; t0.SetAllFlag(k1,hid[k1]); t2(i0) = v02; t2(i1) = v12; t2.SetAllFlag(k2,hid[k2]); t3(i0) = v12; t3(i1) = v02; t3(i2) = v01; t3.SetAllFlag(0,hid[0]); t3.SetAllFlag(1,hid[1]); t3.SetAllFlag(2,hid[2]); if ( kk == 6) { Triangle &t4=triangles[kkk++]; Triangle &t5=triangles[kkk++]; t4 = t3; t5 = t3; t0.SetHidden(k0); t1.SetHidden(k1); t2.SetHidden(k2); t3.SetHidden(0); t4.SetHidden(1); t5.SetHidden(2); if (nbv < nbvx ) { vertices[nbv].r = ((R2) *v01 + (R2) *v12 + (R2) *v02 ) / 3.0; vertices[nbv].ReferenceNumber =0; vertices[nbv].DirOfSearch =NoDirOfSearch; //vertices[nbv].i = toI2(vertices[nbv].r); Real8 a3[]={1./3.,1./3.,1./3.}; vertices[nbv].m = Metric(a3,v0->m,v1->m,v2->m); Vertex * vc = vertices +nbv++; t3(i0) = vc; t4(i1) = vc; t5(i2) = vc; } else goto Error; } } break; } // cout << " -- " << i << " " << nbmkadj << " " << kkk << " " << tc << endl; // t0.SetDetf(); // save all the new triangles mkadj[nbmkadj++]=i; Int4 jj; if (t0.link) for (jj=nbt;jj<kkk;jj++) { triangles[jj].link=t0.link; t0.link= triangles+jj; mkadj[nbmkadj++]=jj; // triangles[jj].SetDet(); } // cout << " -- " << i << " " << nbmkadj << endl; assert(nbmkadj<=13);// 13 = 6 + 4 + 3 if (kk==6) newNbOfQuad+=3; // triangles[i].Draw(); for (jj=ksplit[i-1];jj<kkk;jj++) // triangles[jj].SetDet(); // triangles[jj].Draw(); nbt = kkk; ksplit[i]= nbt; // save last adresse of the new triangles kkk = nbt; } // cout << " nv = " << nbv << " nbt = " << nbt << endl; for (i=0;i<nbv;i++) vertices[i].m = vertices[i].m*2.; // if(withBackground) for (i=0;i<BTh.nbv;i++) BTh.vertices[i].m = BTh.vertices[i].m*2.; #ifdef DRAWING2 Draw(); inquire(); #endif ret = 2; if (nbt>= nbtx) goto Error; // bug if (nbv>= nbvx) goto Error; // bug // generation of the new triangles SetIntCoor("In SplitElement"); ReMakeTriangleContainingTheVertex(); if(withBackground) BTh.ReMakeTriangleContainingTheVertex(); delete [] edges; edges = newedges; nbe = newnbe; NbOfQuad = newNbOfQuad; for (i=0;i<NbSubDomains;i++) { Int4 k = subdomains[i].edge- edges; subdomains[i].edge = edges+2*k; // spilt all edge in 2 } if (ksplitarray) delete [] ksplitarray; if (kedge) delete [] kedge; if (edge4) delete edge4; if (VerticesOnGeomEdge) delete [] VerticesOnGeomEdge; VerticesOnGeomEdge= newVerticesOnGeomEdge; if(VertexOnBThEdge) delete [] VertexOnBThEdge; VertexOnBThEdge = newVertexOnBThEdge; NbVerticesOnGeomEdge = newNbVerticesOnGeomEdge; NbVertexOnBThEdge=newNbVertexOnBThEdge; // ReMakeTriangleContainingTheVertex(); FillHoleInMesh(); #ifdef DEBUG for (i=0;i<nbt;i++) triangles[i].check(); #endif if (verbosity>2) cout << " (out) Nb of Quadrilaterals = " << NbOfQuad << " Nb Of Triangles = " << nbt-NbOutT- NbOfQuad*2 << " Nb of outside triangles = " << NbOutT << endl; CurrentTh=OCurrentTh; return 0; //ok Error: nbv = nbvold; nbt = nbtold; NbOutT = NbOutTold; // cleaning memory --- delete newedges; if (ksplitarray) delete [] ksplitarray; if (kedge) delete [] kedge; if (newVerticesOnGeomEdge) delete [] newVerticesOnGeomEdge; if (edge4) delete edge4; if(newVertexOnBThEdge) delete [] newVertexOnBThEdge; CurrentTh= OCurrentTh; return ret; // ok }
int main(int argc, char *argv[]){ int procid = atoi(argv[2]); char *msg; char *recv_id; char *to; char msgSelected[255]; int recvid = 0; char *recv_state; char *lamporttime; char *recv_msg; char send_msg[255]; h = kh_init(16); void *context = zmq_ctx_new(); void *publisher = zmq_socket(context, ZMQ_PUB); void *lamport_pub = zmq_socket(context, ZMQ_PUB); char routeraddr[30]; int rc; int rc2; if(procid == 2){ rc = zmq_bind(publisher, "tcp://127.0.0.1:5555"); rc = zmq_bind(publisher, "tcp://127.0.0.1:5556"); rc2 = zmq_bind(lamport_pub, "tcp://127.0.0.1:5566"); rc2 = zmq_bind(lamport_pub, "tcp://127.0.0.1:5567"); rc2 = zmq_bind(lamport_pub, "tcp://127.0.0.1:5568"); } if(procid == 3){ rc = zmq_bind(publisher, "tcp://127.0.0.1:5557"); rc = zmq_bind(publisher, "tcp://127.0.0.1:5558"); rc2 = zmq_bind(lamport_pub, "tcp://127.0.0.1:5569"); rc2 = zmq_bind(lamport_pub, "tcp://127.0.0.1:5570"); rc2 = zmq_bind(lamport_pub, "tcp://127.0.0.1:5571"); } if(procid == 4){ rc = zmq_bind(publisher, "tcp://127.0.0.1:5559"); rc = zmq_bind(publisher, "tcp://127.0.0.1:5560"); rc2 = zmq_bind(lamport_pub, "tcp://127.0.0.1:5572"); rc2 = zmq_bind(lamport_pub, "tcp://127.0.0.1:5573"); rc2 = zmq_bind(lamport_pub, "tcp://127.0.0.1:5574"); } if(procid == 5){ rc = zmq_bind(publisher, "tcp://127.0.0.1:5561"); rc = zmq_bind(publisher, "tcp://127.0.0.1:5562"); rc2 = zmq_bind(lamport_pub, "tcp://127.0.0.1:5575"); rc2 = zmq_bind(lamport_pub, "tcp://127.0.0.1:5576"); rc2 = zmq_bind(lamport_pub, "tcp://127.0.0.1:5577"); } assert(rc == 0); assert(rc2 == 0); void *subscriber = zmq_socket(context, ZMQ_SUB); void *lamport_sub = zmq_socket(context, ZMQ_SUB); char addr[30]; char *filter = (argc > 1)? argv [1]: "10001 "; char *filter2 = (argc > 1)? argv[1]: "10001" ; rc = zmq_setsockopt (subscriber, ZMQ_SUBSCRIBE, filter, strlen(filter)); rc2 = zmq_setsockopt(lamport_sub, ZMQ_SUBSCRIBE, filter2, strlen(filter2)); if(procid == 2){ zmq_connect(subscriber, "tcp://127.0.0.1:5557"); zmq_connect(subscriber, "tcp://127.0.0.1:5559"); zmq_connect(lamport_sub, "tcp://127.0.0.1:5569"); zmq_connect(lamport_sub, "tcp://127.0.0.1:5572"); zmq_connect(lamport_sub, "tcp://127.0.0.1:5575"); } if(procid == 3){ zmq_connect(subscriber, "tcp://127.0.0.1:5555"); zmq_connect(subscriber, "tcp://127.0.0.1:5561"); zmq_connect(lamport_sub, "tcp://127.0.0.1:5566"); zmq_connect(lamport_sub, "tcp://127.0.0.1:5573"); zmq_connect(lamport_sub, "tcp://127.0.0.1:5576"); } if(procid == 4){ zmq_connect(subscriber, "tcp://127.0.0.1:5556"); zmq_connect(subscriber, "tcp://127.0.0.1:5562"); zmq_connect(lamport_sub, "tcp://127.0.0.1:5567"); zmq_connect(lamport_sub, "tcp://127.0.0.1:5570"); zmq_connect(lamport_sub, "tcp://127.0.0.1:5577"); } if(procid == 5){ zmq_connect(subscriber, "tcp://127.0.0.1:5560"); zmq_connect(subscriber, "tcp://127.0.0.1:5558"); zmq_connect(lamport_sub, "tcp://127.0.0.1:5568"); zmq_connect(lamport_sub, "tcp://127.0.0.1:5571"); zmq_connect(lamport_sub, "tcp://127.0.0.1:5574"); } assert (rc == 0); int counter = 0; char *dummy; char *recv_lamport; char send_lamport[255]; srand(time(NULL)); while(1){ recv_msg = s_recv_without_block(subscriber); recv_lamport = s_recv_without_block(lamport_sub); sleep(2); fprintf(stderr, "Received %s.\n", recv_msg); if(recv_lamport != NULL){ myStamp = atoi(recv_lamport)+myStamp+1; } if(recv_msg != NULL){ msg = strtok(recv_msg, ", "); dummy = msg; printf("Received %s \n", recv_msg); msg = strtok(NULL, ", "); lamporttime = msg; printf("lamporttime: %s \n", lamporttime); msg = strtok(NULL, ", "); recv_id = msg; printf("recv_id: %s \n", recv_id); msg = strtok(NULL, ", "); to = msg; printf("to: %s \n", to); msg = strtok(NULL, "."); recv_state = msg; printf("recv_state: %s \n", recv_state); if(strcmp(recv_state, " RELEASE") == 0 || strcmp(state, "RELEASED") == 0){ sprintf(send_msg, "1, %s, %d, ", lamporttime, procid); strcat(send_msg, release(procid)); printf ("\nPreparing to send data…\n"); sleep(2); s_send(publisher, send_msg); printf("Data was send.\n"); } if(strcmp(recv_state, " RELINGUISH") == 0 && atoi(to) == procid){ sprintf(send_msg, "1, %s, %d, ", lamporttime, procid); strcat(send_msg, relinguished(procid)); printf ("\nPreparing to send data…\n"); sleep(2); s_send(publisher, send_msg); printf("Data was send.\n"); } if(strcmp(recv_state, " LOCKED") == 0 && atoi(to) == procid ){ votes++; if(votes == 3){ state = "LOCKED"; sprintf(send_msg, "1, %s, %d, all, ", lamporttime, procid); strcat(send_msg, enterCriticalPart(procid)); printf ("\nPreparing to send data…\n"); sleep(2); s_send(publisher, send_msg); printf("Data was send.\n"); } } if(strcmp(recv_state, " REQUEST") == 0){ if(candidateLamport == 0){ sprintf(send_msg, "1, %s, %d, %s, ", lamporttime, procid, recv_id); } else{ sprintf(send_msg, "1, %d, %d, %s, ", candidateLamport, procid, recv_id); } strcat(send_msg, request(procid, atoi(recv_id), atoi(lamporttime))); printf ("\nPreparing to send data…\n"); sleep(2); s_send(publisher, send_msg); printf("Request was send.\n"); } if(strcmp(recv_state, " INQUIRE") == 0 && atoi(to) == procid){ sprintf(send_msg, "1, %s, %d, %s, ", lamporttime, procid, recv_id); char *inq = inquire(procid, atoi(recv_id), atoi(lamporttime) ); strcat(send_msg, inq); if(strcmp(inq, "") == 0){ votes++; if(votes == 3){ state = "LOCKED"; sprintf(send_msg, "1, %s, %d, all, ", lamporttime, procid); strcat(send_msg, enterCriticalPart(procid)); printf ("\nPreparing to send data…\n"); sleep(2); s_send(publisher, send_msg); printf("Data was send.\n"); } } else{ printf ("\nPreparing to send data…\n"); sleep(2); s_send(publisher, send_msg); printf("Data was send.\n"); } } if(strcmp(recv_state, " FAIL") == 0){ voted--; state = "FAILED"; } } fprintf(stderr, "%d\n", procid); if(!selected && (rand()%20 == 0)){ voted = true; votes++; candidateLamport = myStamp; candidateID = procid; prepareEntry(procid); int ret; khiter_t k= kh_put(16, h, procid, &ret); kh_value(h, k) = myStamp; sprintf(send_lamport, "%i", myStamp); sleep(2); s_send(lamport_pub, send_lamport); sprintf(send_msg, "1, %i, %i, all, ", myStamp, procid); strcat(send_msg, "REQUEST."); printf ("\nPreparing to send data…\n"); sleep(2); s_send(publisher, send_msg); printf("Data was send.\n"); } counter++; } return 0; }
void DeleteBook() /*删除图书信息*/ { char id[10]; /*结果集中的行数*/ char *sql; char dest[100] ={" "}; char dest1[100] ={" "}; if(!mysql_real_connect(&mysql,"127.0.0.1","root","111","db_books",0,NULL,0)) { printf("\t 不能连接数据库!\n"); } else { printf("\t 请输入您想要删除的图书编号. "); scanf("%s",id); /*输入图书编号*/ sql = "select * from tb_book where id="; strcat(dest,sql); strcat(dest,id); /*将图书编号追加到sql语句后面*/ //printf("%s\n",dest); /*查询该图书信息是否存在*/ if(mysql_query(&mysql,dest)) { //如果查询失败 printf("\n 查询 tb_book 数据表失败! \n"); } else { result=mysql_store_result(&mysql); //获得结果集 if(mysql_num_rows(result)!=NULL) { //有记录的情况,只有有记录取数据才有意义 printf("\t 发现记录信息,是否显示?(y/n) "); scanf("%s",ch); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要显示查找到的信息*/ { printf("\t ════════════════════════════ \n"); printf("\t ***** 显示图书信息 ***** \n"); printf("\t ════════════════════════════ \n"); printf("\t图书编号 图书名 作者 出版社 \n"); printf("\t -------------------------------------------------------- \n"); while((row=mysql_fetch_row(result))) { //取出结果集中记录 fprintf(stdout,"\t %s %s %s %s \n",row[0],row[1],row[2],row[3]); //输出这行记录 } printf("\t ════════════════════════════ \n"); } printf("\t 是否删除?(y/n) "); scanf("%s",ch); if (strcmp(ch,"Y")==0||strcmp(ch,"y")==0) /*判断是否需要录入*/ { sql = "delete from tb_book where ID= "; printf("%s",dest1); strcat(dest1,sql); strcat(dest1,id); // printf("%s",dest1); if(mysql_query(&mysql,dest1)!=0) { fprintf(stderr,"\t 不能删除记录! \n",mysql_error(&mysql)); } else { printf("\t 删除成功!\n"); } } } else { printf("\t 没有发现要删除的信息!\n"); } } mysql_free_result(result); //释放结果集 } mysql_close(&mysql); inquire(); /*询问是否显示主菜单*/ }
void ModifyBook() /*修改图书信息*/ { char id[10]; /*结果集中的行数*/ char *sql; char dest[500] ={" "}; char dest1[500] ={" "}; char *bookname; char *author; char *bookconcern; if (!mysql_real_connect(&mysql,"127.0.0.1","root","111","db_books",0,NULL,0)) { printf("\t 不能连接数据库!\n"); } else { /*数据库连接成功*/ // printf("连接成功"); printf("\t 请输入您想要修改的图书编号."); scanf("%s",id); /*输入图书编号*/ sql = "select * from tb_book where id="; strcat(dest,sql); strcat(dest,id); /*将图书编号追加到sql语句后面*/ //printf("%s\n",dest); /*查询该图书信息是否存在*/ if(mysql_query(&mysql,dest)) { //如果查询失败 printf("\n 查询 tb_book 数据表失败! \n"); } else { result=mysql_store_result(&mysql); //获得结果集 if(mysql_num_rows(result)!=NULL) { //有记录的情况,只有有记录取数据才有意义 printf("\t 发现记录信息,是否显示?(y/n) "); scanf("%s",ch); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要显示查找到的信息*/ { printf("\t ════════════════════════════ \n"); printf("\t ***** 显示图书信息 ***** \n"); printf("\t ════════════════════════════ \n"); printf("\t图书编号 图书名 作者 出版社 \n"); printf("\t -------------------------------------------------------- \n"); while((row=mysql_fetch_row(result))) { //取出结果集中记录 fprintf(stdout,"\t %s %s %s %s \n",row[0],row[1],row[2],row[3]); //输出这行记录 } printf("\t ════════════════════════════ \n"); } printf("\t Modify?(y/n)"); scanf("%s",ch); if (strcmp(ch,"Y")==0||strcmp(ch,"y")==0) /*判断是否需要录入*/ { sql = "update tb_book set bookname= '"; strcat(dest1,sql); // printf("%s",sql); bookname = (char*)malloc(20); author = (char*)malloc(20); bookconcern = (char*)malloc(20); printf("\t 图书名:"); scanf("%s",bookname); /*输入图书名*/ strcat(dest1,bookname); // printf("%s",&bookname); printf("\t 作者:"); scanf("%s",author); /*输入作者*/ strcat(dest1,"', author= '"); strcat(dest1,author); /*追加sql语句*/ printf("\t 出版社:"); scanf("%s",bookconcern); /*输入出版社*/ strcat(dest1,"', bookconcern = '"); strcat(dest1,bookconcern); /*追加sql语句*/ strcat(dest1,"' where id= "); strcat(dest1,id); //printf("%s",dest1); if(mysql_query(&mysql,dest1)!=0) { fprintf(stderr,"\t 不能修改记录!\n",mysql_error(&mysql)); } else { printf("\t 修改成功!\n"); } } } else { printf("\t 没有发现要修改的信息!\n"); } } mysql_free_result(result); //释放结果集 } mysql_close(&mysql); //释放连接 inquire(); /*询问是否显示主菜单*/ }
void AddBook() /*添加图书信息*/ { int rowcount; /*结果集中的行数*/ char id[10]; /*编号*/ char *bookname; char *author; char *bookconcern; char *sql; char dest[500] ={" "}; /*连接数据库*/ if(!mysql_real_connect(&mysql,"127.0.0.1","root","111","db_books",0,NULL,0)) { printf("\n\t 不能连接数据库!\n"); } else { /*数据库连接成功,插入数据*/ printf("\t ════════════════════════════ \n"); printf("\t 添 加 图 书 信 息 \n"); printf("\t ════════════════════════════ \n"); if(mysql_query(&mysql,"select * from tb_book")) { //如果查询失败 printf("\n\t 查询 tb_book 数据表失败!\n"); } else { result=mysql_store_result(&mysql); //获得结果集 rowcount=mysql_num_rows(result) ; //获得行数 row=mysql_fetch_row(result); //获取结果集的行 printf("\t 图书编号:"); scanf("%s",id); /*输入图书编号*/ sql="insert into tb_book (ID,bookname,author,bookconcern) values ("; strcat(dest,sql); strcat(dest,"'"); strcat(dest,id); strcat(dest,"', '"); if(mysql_num_rows(result)!=NULL) { /*判断输入的编号是否存在*/ do { //存在相同编号 if(!strcmp(id,row[0])) { // printf("%s",row[0]); printf("\n\t 记录存在,按任意键继续!\n"); getch(); mysql_free_result(result); /*释放结果集*/ mysql_close(&mysql); /*释放连接*/ inquire(); /*询问是否显示主菜单*/ return; } }while(row=mysql_fetch_row(result)); } bookname = (char*)malloc(50); author = (char*)malloc(50); bookconcern = (char*)malloc(50); //不存在相同的编号 printf("\t 图书名:"); scanf("%s",bookname); /*输入图书名*/ strcat(dest,bookname); /*将图书编号追加到sql语句后面*/ printf("\t 作者:"); scanf("%s",author); /*输入作者*/ strcat(dest,"', '"); strcat(dest,author); printf("\t 出版社:"); scanf("%s",bookconcern); /*输入出版社*/ strcat(dest,"', '"); strcat(dest,bookconcern); strcat(dest,"')"); //printf("%s",dest); if ( mysql_query(&mysql,dest)!=0) { fprintf(stderr,"\t 不能插入记录!",mysql_error(&mysql)); } else { printf("\t 插入成功!\n"); } mysql_free_result(result); //释放结果集 } mysql_close(&mysql); //释放连接 } inquire(); /*询问是否显示主菜单*/ }