首页 > 代码库 > 学生信息管理系统(cocos2d引擎)——数据结构课程设计
学生信息管理系统(cocos2d引擎)——数据结构课程设计
老师手把手教了两天半,看了一下模式,加了几个功能就大功告成了!!!
给我的感想就是全都是指针!
添加图片精灵:
CCSprite* spBG = CCSprite::create("");
this->addChild(spBG); //添加到当前层
spGB->setPosition(ccp(x,y)); //设置坐标
spGB->setScale(0.5); //缩放
文字按钮:
CCMenuItemFont* pItem = CCMenuItemFont::create("wenzi",this,menu_selector(回调函数));
再将文字按钮添加到菜单中
CCMenu* menu = CCMen::create(pItem,NULL);
this->addChild(menu);
menu->setPosition(ccp(x,y));
//创建文本
CCLabelTTF* ttf = CCLabelTTF::create("wenben","字体",48.0f);
this->addChild(ttf);
ttf->setPosition(cco(x,y));
//创建输入框(1、九点图,2、输入框)
CCScale9Sprite* input = CCScale9Sprite::create("");
accountBox = CCEditBox::create(CCSizeMake(r,c),input);
this->addChild(accounBox);
accountBox->setPosition(ccp(x,y));
accountBox->setInputFlag(kEditBoxInputFlagPassword); //输入模式为密码输入
按钮回调函数,看输入框accountBox的内容是否是密码;
不是密码:
弹出输入框 CCMessageBox("","");
是密码切换场景
CCDirector* director = CCDirector::sharedDirector();
director->replaceScene(ListViewLayer::scene()); //另一个头文件,里面的一个场景;
接下来,和之前的一样了;无非就是一些按钮,文本,输入框。
在init()里面画好面板;
各种按钮里面的回调函数。
然后中文转码utf-8老师已经写好了;
贴上自己写的东西,其他的老师已经写好了
1 #ifndef _Students_H_ 2 #define _Students_H_ 3 #include <iostream> 4 using namespace std; 5 class Students 6 { 7 public: 8 int m_iNumber; 9 char m_strName[32];10 char m_sex;11 public:12 Students(int iNumber, char* strName,char sex);13 };14 #endif
1 #include "Students.h"2 3 4 Students::Students(int iNumber, char* strName,char sex)5 {6 m_iNumber = iNumber;7 strcpy(m_strName, strName);8 m_sex = sex;9 }
1 #ifndef _Manager_H_ 2 #define _Manager_H_ 3 #include <iostream> 4 using namespace std; 5 #include <vector> 6 #include "Students.h" 7 class Manager 8 { 9 private:10 Manager();11 public:12 static Manager* m_pStance;13 static Manager* getInstance();14 15 // 管理学生容器16 vector<Students*> _vStudent;17 };18 19 #endif
1 #include "Manager.h" 2 3 Manager* Manager::m_pStance = NULL; 4 Manager* Manager::getInstance() 5 { 6 if(m_pStance == NULL) 7 { 8 m_pStance = new Manager; 9 }10 return m_pStance;11 }12 13 Manager::Manager()14 {15 Students* s = new Students(1000,"TreeDream",‘F‘);16 _vStudent.push_back(s);17 s = new Students(1001,"马里奥", ‘M‘);18 _vStudent.push_back(s);19 }
1 #ifndef __TABLEVIEWTESTSCENE_H__ 2 #define __TABLEVIEWTESTSCENE_H__ 3 4 #include "cocos2d.h" 5 #include "cocos-ext.h" 6 USING_NS_CC; 7 USING_NS_CC_EXT; 8 9 #include "ChineseString.h"10 #include "Manager.h"11 12 //需要实现CCTabelViewDelegate和CCTabelViewDataSource这两个接口13 class ListViewLayer : public CCLayer, 14 public CCTableViewDataSource, 15 public CCTableViewDelegate16 {17 private:18 CCTableView* pTableView;19 vector<Students*>::iterator it;20 21 CCLabelTTF* ttf; //提示信息22 23 // 添加对话框需要的UI24 CCLayerColor* layerBg;25 CCEditBox* edit_id;26 CCEditBox* edit_name;27 CCEditBox* edit_sex;28 CCMenu* menu_add_done;29 // 添加按钮回调函数30 void AddCallBack(CCObject* obj);31 // 添加按钮回调函数32 void AddDoneCallBack(CCObject* obj);33 // 添加按钮回调函数34 void AddDel(CCObject* obj);35 void DelDoneCallBack(CCObject* obj);36 37 void Oride(CCObject* obj);38 void OrideCallBack(CCObject* obj);39 void OrideInf(CCObject* obj);40 41 42 void Searchs(CCObject* obj);43 void searchsInf(CCObject* obj);44 45 void MySort ();46 47 public:48 static cocos2d::CCScene* scene();49 // 初始化层50 virtual bool init();51 52 /*因为CCTableView继承自CCScrollView所以要实现这俩个方法,里边一般都不写东西*/53 virtual void scrollViewDidScroll(CCScrollView* view);54 virtual void scrollViewDidZoom(CCScrollView* view);55 56 /*CCTabelViewDelegate类的虚函数*/57 //处理触摸点击事件58 virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell);59 60 /*CCTabelViewDataSource类的虚函数*/61 //每一项的宽度和高度62 virtual CCSize cellSizeForTable(CCTableView *table);63 //生成列表每一项的内容64 virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx);65 //一共多少项66 virtual unsigned int numberOfCellsInTableView(CCTableView *table);67 68 // 创建层69 CREATE_FUNC(ListViewLayer);70 };71 72 #endif
1 #include "ListViewLayer.h" 2 3 CCScene* ListViewLayer::scene() 4 { 5 CCScene *scene = CCScene::create(); 6 ListViewLayer *layer = ListViewLayer::create(); 7 scene->addChild(layer); 8 return scene; 9 } 10 11 bool ListViewLayer::init() 12 { 13 // 添加背景 14 CCSprite* spBg = CCSprite::create("HelloWorld.jpg"); 15 this->addChild(spBg); 16 spBg->setPosition(ccp(1240/2, 640/2)); 17 // 放大 18 spBg->setScale(1.5f); 19 20 bool bRet = false; 21 do 22 { 23 CC_BREAK_IF( !CCLayer::init() ); 24 25 // 创建对话框(参数:窗口大小) 26 pTableView = CCTableView::create(this, CCSizeMake(960, 600)); 27 // 设置表格方向(垂直) 28 pTableView->setDirection(kCCScrollViewDirectionVertical); 29 // 设置坐标 30 pTableView->setPosition(CCPointZero); 31 // 设置delegate代理 32 pTableView->setDelegate(this); 33 // 设置起点(从上往下) 34 pTableView->setVerticalFillOrder(kCCTableViewFillTopDown); 35 // 添加到当前层 36 this->addChild(pTableView); 37 // 必须加,意思是用现有的配置去刷新所有的cell 38 pTableView->reloadData(); 39 40 41 bRet = true; 42 }while(0); 43 44 // 添加按钮 45 CCMenuItemImage* item_add = CCMenuItemImage::create( 46 "CloseNormal.png", 47 "CloseSelected.png", 48 this, 49 menu_selector(ListViewLayer::AddCallBack)); 50 // 添加菜单 51 52 CCMenuItemImage* item_del = CCMenuItemImage::create( 53 "del.png", 54 "CloseSelected.png", 55 this, 56 menu_selector(ListViewLayer::AddDel)); 57 58 CCMenuItemImage*item_oride = CCMenuItemImage::create( 59 "oride.png", 60 "CloseSelected.png", 61 this, 62 menu_selector(ListViewLayer::Oride)); 63 64 CCMenuItemImage* item_search = CCMenuItemImage::create( 65 "search.png", 66 "search.png", 67 this, 68 menu_selector(ListViewLayer::Searchs)); 69 70 CCMenu* menu_add = CCMenu::create(item_add,item_del,item_oride,item_search,NULL); 71 item_del->setPositionY(50); 72 item_oride->setPositionY(100); 73 item_search->setPositionY(150); 74 this->addChild(menu_add); 75 menu_add->setPosition(ccp(700,300)); 76 77 return true; 78 } 79 80 void ListViewLayer::Searchs(CCObject* obj) { 81 82 // 添加半透明的背景 83 layerBg = CCLayerColor::create(ccc4(0,0,0,127)); 84 this->addChild(layerBg); 85 86 // 1. 创建点9图 87 CCScale9Sprite* input = CCScale9Sprite::create("input.png"); 88 // 2. 创建输入框 89 edit_id = CCEditBox::create( 90 CCSizeMake(220,40), 91 input); 92 // 3.添加当前层 93 this->addChild(edit_id); 94 // 4.设置坐标 95 edit_id->setPosition(ccp(450,300)); 96 edit_id->setPlaceHolder(ChineseString::GBKToUTF8("请输入姓名:")); 97 98 // 完成添加菜单项 99 CCMenuItemFont* item_add_done = CCMenuItemFont::create(100 ChineseString::GBKToUTF8("查询"),101 this,102 menu_selector(ListViewLayer::searchsInf));103 menu_add_done = CCMenu::create(item_add_done,NULL);104 this->addChild(menu_add_done);105 menu_add_done->setPosition(ccp(450,50));106 107 }108 109 void ListViewLayer::searchsInf(CCObject* obj) {110 111 112 char* name = (char*)ChineseString::UTF8ToGBK(edit_id->getText());113 114 this->removeChild(ttf);115 this->removeChild(edit_id);116 this->removeChild(layerBg);117 this->removeChild(menu_add_done);118 119 bool flag = false;120 Students* sTemp;121 for(it = Manager::getInstance()->_vStudent.begin();it!=Manager::getInstance()->_vStudent.end();it++) {122 sTemp = *it;123 if(strcmp(name,sTemp->m_strName)==0) {124 // 显示详细内容125 ttf = CCLabelTTF::create(126 ChineseString::GBKToUTF8(CCString::createWithFormat127 ("%d %s %c",128 sTemp->m_iNumber,129 sTemp->m_strName,130 sTemp->m_sex)->getCString()),131 "Arial",132 24);133 this->addChild(ttf);134 ttf->setPosition(ccp(100,100));135 flag = true;136 break;137 }138 }139 if(flag==false) {140 // 显示详细内容141 this->removeChild(ttf);142 ttf = CCLabelTTF::create(143 ChineseString::GBKToUTF8(CCString::createWithFormat144 ("%s %s",name,"不存在")->getCString()),145 "Arial",146 24);147 this->addChild(ttf);148 ttf->setPosition(ccp(100,100));149 }150 }151 152 //产生学号检查153 void ListViewLayer::Oride(CCObject* obj) {154 155 // 添加半透明的背景156 layerBg = CCLayerColor::create(ccc4(0,0,0,127));157 this->addChild(layerBg);158 159 // 1. 创建点9图160 CCScale9Sprite* input = CCScale9Sprite::create("input.png");161 // 2. 创建输入框162 edit_id = CCEditBox::create(163 CCSizeMake(220,40),164 input);165 // 3.添加当前层166 this->addChild(edit_id);167 // 4.设置坐标168 edit_id->setPosition(ccp(450,300));169 edit_id->setPlaceHolder(ChineseString::GBKToUTF8("请输入学号:"));170 171 // 完成添加菜单项172 CCMenuItemFont* item_add_done = CCMenuItemFont::create(173 ChineseString::GBKToUTF8("修改"),174 this,175 menu_selector(ListViewLayer::OrideCallBack));176 menu_add_done = CCMenu::create(item_add_done,NULL);177 this->addChild(menu_add_done);178 menu_add_done->setPosition(ccp(450,50));179 180 }181 182 //产生更替信息183 void ListViewLayer::OrideCallBack(CCObject* obj) {184 185 this->removeChild(edit_id);186 this->removeChild(menu_add_done);187 this->removeChild(layerBg);188 189 190 bool flag = false;191 192 int id = ChineseString::StringToInt(edit_id->getText());193 for(it = Manager::getInstance()->_vStudent.begin();it!=Manager::getInstance()->_vStudent.end();it++) {194 Students* sTemp = *it;195 if(id==sTemp->m_iNumber) {196 flag = true;197 break;198 }199 }200 if(flag==true) {201 // 添加半透明的背景202 layerBg = CCLayerColor::create(ccc4(0,0,0,127));203 this->addChild(layerBg);204 205 206 // 1. 创建点9图207 CCScale9Sprite* input = CCScale9Sprite::create("input.png");208 // 2. 创建输入框209 edit_id210 = CCEditBox::create(211 CCSizeMake(220,40),212 input);213 // 3.添加当前层214 this->addChild(edit_id);215 // 4.设置坐标216 edit_id->setPosition(ccp(450,300));217 edit_id->setPlaceHolder(ChineseString::GBKToUTF8("请输入学号:"));218 219 input = CCScale9Sprite::create("input.png");220 // 2. 创建输入框221 edit_name = CCEditBox::create(222 CCSizeMake(220,40),223 input);224 edit_name->setPlaceHolder(ChineseString::GBKToUTF8("请输入姓名:"));225 // 3.添加当前层226 this->addChild(edit_name);227 // 4.设置坐标228 edit_name->setPosition(ccp(450,200));229 230 input = CCScale9Sprite::create("input.png");231 // 2. 创建输入框232 edit_sex = CCEditBox::create(233 CCSizeMake(220,40),234 input);235 edit_sex->setPlaceHolder(ChineseString::GBKToUTF8("请输入性别:"));236 // 3.添加当前层237 this->addChild(edit_sex);238 // 4.设置坐标239 edit_sex->setPosition(ccp(450,100));240 241 // 完成添加菜单项242 CCMenuItemFont* item_add_done = CCMenuItemFont::create(243 ChineseString::GBKToUTF8("修改"),244 this,245 menu_selector(ListViewLayer::OrideInf));246 menu_add_done = CCMenu::create(item_add_done,NULL);247 this->addChild(menu_add_done);248 menu_add_done->setPosition(ccp(450,50));249 }250 else {251 // 显示详细内容252 253 ttf = CCLabelTTF::create(254 ChineseString::GBKToUTF8(CCString::createWithFormat255 ("%d %s",id,"这个ID不存在")->getCString()),256 "Arial",257 24);258 this->addChild(ttf);259 ttf->setPosition(ccp(100,100));260 }261 }262 263 void ListViewLayer::OrideInf(CCObject* obj) {264 265 int id2 = ChineseString::StringToInt(edit_id->getText());266 char* name = (char*)ChineseString::UTF8ToGBK(edit_name->getText());267 char sex = ‘M‘;268 Students* s = new Students(id2,name,sex);269 *it = s;270 271 this->removeChild(ttf);272 this->removeChild(edit_id);273 this->removeChild(edit_name);274 this->removeChild(edit_sex);275 this->removeChild(menu_add_done);276 this->removeChild(layerBg);277 278 MySort();279 pTableView->reloadData();280 }281 282 // 添加按钮回调函数283 void ListViewLayer::AddCallBack(CCObject* obj)284 {285 // 添加半透明的背景286 layerBg = CCLayerColor::create(ccc4(0,0,0,127));287 this->addChild(layerBg);288 289 290 // 1. 创建点9图291 CCScale9Sprite* input = CCScale9Sprite::create("input.png");292 // 2. 创建输入框293 edit_id = CCEditBox::create(294 CCSizeMake(220,40),295 input);296 // 3.添加当前层297 this->addChild(edit_id);298 // 4.设置坐标299 edit_id->setPosition(ccp(450,300));300 edit_id->setPlaceHolder(ChineseString::GBKToUTF8("请输入学号:"));301 302 input = CCScale9Sprite::create("input.png");303 // 2. 创建输入框304 edit_name = CCEditBox::create(305 CCSizeMake(220,40),306 input);307 edit_name->setPlaceHolder(ChineseString::GBKToUTF8("请输入姓名:"));308 // 3.添加当前层309 this->addChild(edit_name);310 // 4.设置坐标311 edit_name->setPosition(ccp(450,200));312 313 input = CCScale9Sprite::create("input.png");314 // 2. 创建输入框315 edit_sex = CCEditBox::create(316 CCSizeMake(220,40),317 input);318 edit_sex->setPlaceHolder(ChineseString::GBKToUTF8("请输入性别:"));319 // 3.添加当前层320 this->addChild(edit_sex);321 // 4.设置坐标322 edit_sex->setPosition(ccp(450,100));323 324 // 完成添加菜单项325 CCMenuItemFont* item_add_done = CCMenuItemFont::create(326 ChineseString::GBKToUTF8("添加"),327 this,328 menu_selector(ListViewLayer::AddDoneCallBack));329 menu_add_done = CCMenu::create(item_add_done,NULL);330 this->addChild(menu_add_done);331 menu_add_done->setPosition(ccp(450,50));332 }333 334 // 添加按钮回调函数(字符添加)335 void ListViewLayer::AddDoneCallBack(CCObject* obj)336 {337 this->removeChild(ttf);338 // 处理添加信息339 340 int id = ChineseString::StringToInt(edit_id->getText());341 char* name = (char*)ChineseString::UTF8ToGBK(edit_name->getText());342 343 char sex = edit_sex->getText()[0];344 Students* s = new Students(id,name,sex);345 Manager::getInstance()->_vStudent.push_back(s);346 // 关闭对话框347 this->removeChild(edit_id);348 this->removeChild(edit_name);349 this->removeChild(edit_sex);350 this->removeChild(menu_add_done);351 this->removeChild(layerBg);352 // 刷新列表353 354 MySort();355 356 pTableView->reloadData();357 }358 359 360 void ListViewLayer::AddDel(CCObject* obj) {361 // 添加半透明的背景362 layerBg = CCLayerColor::create(ccc4(0,0,0,127));363 this->addChild(layerBg);364 365 // 1. 创建点9图366 CCScale9Sprite* input = CCScale9Sprite::create("input.png");367 // 2. 创建输入框368 edit_id = CCEditBox::create(369 CCSizeMake(220,40),370 input);371 // 3.添加当前层372 this->addChild(edit_id);373 // 4.设置坐标374 edit_id->setPosition(ccp(450,300));375 edit_id->setPlaceHolder(ChineseString::GBKToUTF8("请输入学号:"));376 377 // 完成添加菜单项378 CCMenuItemFont* item_add_done = CCMenuItemFont::create(379 ChineseString::GBKToUTF8("删除"),380 this,381 menu_selector(ListViewLayer::DelDoneCallBack));382 menu_add_done = CCMenu::create(item_add_done,NULL);383 this->addChild(menu_add_done);384 menu_add_done->setPosition(ccp(450,50));385 386 }387 388 void ListViewLayer::DelDoneCallBack(CCObject* obj) {389 int id = ChineseString::StringToInt(edit_id->getText());390 391 bool flag = false;392 393 vector<Students*>::iterator it;394 for(it=Manager::getInstance()->_vStudent.begin();395 it!=Manager::getInstance()->_vStudent.end();it++) {396 Students* sTemp = *it; 397 if (id==sTemp->m_iNumber)398 {399 // 删除元素400 Manager::getInstance()->_vStudent.erase(it);401 flag = true;402 break;403 }404 }405 406 if(flag==false) {407 this->removeChild(ttf);408 ttf = CCLabelTTF::create(409 ChineseString::GBKToUTF8(CCString::createWithFormat410 ("%d %s",id,"这个ID不存在")->getCString()),411 "Arial",412 24);413 this->addChild(ttf);414 ttf->setPosition(ccp(100,100));415 }416 417 //关闭418 this->removeChild(edit_id);419 this->removeChild(menu_add_done);420 this->removeChild(layerBg);421 422 MySort();423 pTableView->reloadData();424 425 }426 427 bool cmpById(Students* a,Students *b) {428 if(a->m_iNumber<b->m_iNumber)429 return true;430 return false;431 }432 433 void ListViewLayer::MySort () {434 std::sort(Manager::getInstance()->_vStudent.begin(),Manager::getInstance()->_vStudent.end(),cmpById);435 }436 437 438 // cell被点击后的回调函数439 void ListViewLayer::tableCellTouched(CCTableView* table, CCTableViewCell* cell)440 {441 pTableView->reloadData();442 }443 444 //这里设置每个cell的大小445 CCSize ListViewLayer::cellSizeForTable(CCTableView *table)446 {447 return CCSizeMake(600, 60);448 }449 450 CCTableViewCell* ListViewLayer::tableCellAtIndex(CCTableView *table, unsigned int idx)451 {452 /* 453 获得一个可用的cell,因为在我们滑动cell的时候有些cell是显示的,454 有些不是显示出来的,把没有渲染的cell拿过来,这样就不用重新new出一个cell了,455 可以减小内存的开销456 */457 Students* sTmep = Manager::getInstance()->_vStudent[idx];458 CCString *pString = CCString::createWithFormat(459 "%d %s %c", sTmep->m_iNumber , 460 sTmep->m_strName, sTmep->m_sex);461 CCTableViewCell *pCell = table->dequeueCell();462 if (!pCell) {463 pCell = new CCTableViewCell();464 pCell->autorelease();465 // 单个选项背景466 CCSprite *pSprite = CCSprite::create("listitem.png");467 pSprite->setAnchorPoint(CCPointZero);468 pSprite->setPosition(CCPointZero);469 pCell->addChild(pSprite);470 pSprite->setScale(0.5f);471 472 CCLabelTTF *pLabel = CCLabelTTF::create(ChineseString::GBKToUTF8(pString->getCString()), "楷体", 20.0);473 pLabel->setColor(ccc3(255, 255, 0));474 pLabel->setFontSize(48);475 pLabel->setPosition(ccp(20,20));476 pLabel->setAnchorPoint(CCPointZero);477 pLabel->setTag(123);478 pCell->addChild(pLabel);479 }480 else//获得是没有渲染出来的cell,cell中原有的内容还存在481 {482 CCLabelTTF *pLabel = (CCLabelTTF*)pCell->getChildByTag(123);483 pLabel->setString(ChineseString::GBKToUTF8(pString->getCString()));484 }485 return pCell;486 }487 488 // 这里设置一共有多少个cell489 unsigned int ListViewLayer::numberOfCellsInTableView(CCTableView *table)490 {491 // 返回容器的大小492 return Manager::getInstance()->_vStudent.size();493 }494 495 void ListViewLayer::scrollViewDidScroll(CCScrollView *view)496 {497 }498 499 void ListViewLayer::scrollViewDidZoom(CCScrollView *view)500 {501 }
学生信息管理系统(cocos2d引擎)——数据结构课程设计