南邮级软件设计资料分数统计想拿优秀的看过来.docx

上传人:b****3 文档编号:26621661 上传时间:2023-06-20 格式:DOCX 页数:25 大小:110.78KB
下载 相关 举报
南邮级软件设计资料分数统计想拿优秀的看过来.docx_第1页
第1页 / 共25页
南邮级软件设计资料分数统计想拿优秀的看过来.docx_第2页
第2页 / 共25页
南邮级软件设计资料分数统计想拿优秀的看过来.docx_第3页
第3页 / 共25页
南邮级软件设计资料分数统计想拿优秀的看过来.docx_第4页
第4页 / 共25页
南邮级软件设计资料分数统计想拿优秀的看过来.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

南邮级软件设计资料分数统计想拿优秀的看过来.docx

《南邮级软件设计资料分数统计想拿优秀的看过来.docx》由会员分享,可在线阅读,更多相关《南邮级软件设计资料分数统计想拿优秀的看过来.docx(25页珍藏版)》请在冰豆网上搜索。

南邮级软件设计资料分数统计想拿优秀的看过来.docx

南邮级软件设计资料分数统计想拿优秀的看过来

可以通过方向键和Enter键选择菜单

注释和命名都很明白

已测试基本没有什么Bug

我还封装了一个可以用方向键选择的菜单的类,可以很方便的使用

相应的代码和文件名列在下面,用visualc++添加到工程里即可运行

有什么问题请私信

一、ChoiceMenu.h

#ifndefCHOICEMENU

#defineCHOICEMENU

#include

#include

#include

#include"ConsoleTools.h"

usingnamespacestd;

#defineDEFAULT_MENUITEM_WIDTH40

structChoiceMenuStruct;

typedefstructChoiceMenuStructChoiceMenuStruct;

typedefvoid(*PMenuHandleFunction)(constChoiceMenuStruct*mainmenu);

//菜单项结构

typedefstructChoiceMenuItemInfo

{

stringcontent;

//选择菜单后发生的动作

PMenuHandleFunctionfunc;

//这项由程序处理,不需要填写

string_menuitems_content_for_show;

}ChoiceMenuItemInfo;

//菜单的结构及类型

structChoiceMenuStruct

{

vectormenuitems;

ChoiceMenuItemInfotitle;

unsignedintMenuItemWidth=DEFAULT_MENUITEM_WIDTH;//菜单项宽度(英文字符个数)

//标题风格

WORDTitleTextColor=FOREGROUND_RED;

WORDItemTextColorDefault;

WORDItemTextColorSelected;

//以下不需要填写

//表格间的分割线

string_MidSeperateLine;

string_TopSeperateLine;

string_BotSeperateLine;

string_BlankLine;

string_BlankLineWithSep;

};

voidShowChoiceMenu(ChoiceMenuStruct&mainmenu);

voidSelectPos(ChoiceMenuStruct&mainmenu,signedintindex,signedintlastindex);

#endif

二、ConsoleTools.h

#include

//字符缓冲区的默认大小

#defineBUFFERSIZE_SMALL10

#defineBUFFERSIZE_MID40

#defineBUFFERSIZE_BIG100

//控制台背景

#defineBLACK'0'

#defineBLUE'1'

#defineGREEN'2'

#defineLAKEBLUE'3'

#defineRED'4'

#definePURPLE'5'

#defineYELLO'6'

#defineWHITE'7'

#defineGRAY'8'

#defineLIGHTBLUE'9'

#defineLIGHTGREEN'A'

#defineLIGHTLIGHTGREEN'B'

#defineLIGHTRED'C'

#defineLIGHTPURPLE'D'

#defineLIGHTYELLOW'E'

#defineLIGHTWHITE'F'

typedefcharCOLORTYPE;

voidsetConsoleBackground(COLORTYPEcolor);

//控制台字体格式

#defineFOREGROUND_BLUE0x0001

#defineFOREGROUND_GREEN0x0002

#defineFOREGROUND_RED0x0004

#defineFOREGROUND_INTENSITY0x0008

#defineBACKGROUND_BLUE0x0010

#defineBACKGROUND_GREEN0x0020

#defineBACKGROUND_RED0x0040

#defineBACKGROUND_INTENSITY0x0080

#defineDEFAULT_BACK_FOR_GROUND0x0007

BOOLSetConsoleColor(WORDwAttributes);

BOOLSetCurPos(COORDpos);

//控制台大小信息

#defineCONSOLE_ROW_COUNT25

#defineCONSOLE_CLUM_COUNT80

三、menu.h

#include"ChoiceMenu.h"

#include"StudentGradeInformation.h"

externChoiceMenuStructcms;

externintnowselect;

externStudentGradeInformationinfStu;

voidmenu_main();

四、StudentGradeInformation.h

#ifndefSTUDENTGRADEINFORMATION

#defineSTUDENTGRADEINFORMATION

#include

#include

usingnamespacestd;

#defineDEFAULT_DATA_FILENAME"default.dat"

typedefstructStudentInfo

{

stringname;

intscore;

}StudentInfo;

enumReadOperationType

{

OVERRIDE,//覆盖

APPEND_OVERRIDE,//添加,重复项覆盖

APPEND_PRESERVE//添加,重复项保留

};

enumReadError

{

NONE,

OPENFILEERROR,

BADDATA

};

#defineMAX_SCORE100

#defineMIN_SCORE0

#defineBAD_SCORE-1

classStudentGradeInformation

{

public:

StudentGradeInformation();

ReadErrorreadfromfile(stringpath=DEFAULT_DATA_FILENAME,ReadOperationTypetype=OVERRIDE);

voidsort();

voidclear();

boolsave();

voidadd(StudentInfodata);//调用之前需要排序

voidsetSortType(boolisReverse);//逆序排列

vector:

:

iteratorfind(stringname);

boolremove(stringname);

vector:

:

iteratorend();

vectordatas;

private:

boolreverse;

};

#endif

五、ChoiceMenu.cpp

#include"ChoiceMenu.h"

#include"ConsoleTools.h"

#include

#include

#include

stringExpandMenuItemContent(stringmenuitem,unsignedintwidth,boolwithvsep=true)

{

intn=menuitem.size();

intr=(width-n-4)/2;

intl=width-r-n-4;

if(withvsep)

{

returnstring("│")+string(r,'')+menuitem+string(l,'')+string("│");

}

else

{

returnstring(r+2,'')+menuitem+string(l+2,'');

}

}

stringRepeatUnicondeChar(stringstritem,unsignedintn)

{

stringresult;

for(unsignedinti=0;i

{

result+=stritem;

}

returnresult;

}

//水平居中

voidShowInHCenter(stringstr,WORDtextColor=DEFAULT_BACK_FOR_GROUND)

{

size_tn=str.size();

cout<

SetConsoleColor(textColor);

cout<

SetConsoleColor(DEFAULT_BACK_FOR_GROUND);

}

voidShowChoiceMenu(ChoiceMenuStruct&mainmenu)

{

system("cls");

if(mainmenu._BotSeperateLine.empty())

{

mainmenu.title._menuitems_content_for_show=

ExpandMenuItemContent(mainmenu.title.content,mainmenu.MenuItemWidth,false);

for(size_ti=0;i

{

mainmenu.menuitems[i]._menuitems_content_for_show=

ExpandMenuItemContent(mainmenu.menuitems[i].content,mainmenu.MenuItemWidth,false);

}

mainmenu._TopSeperateLine=

string("┌")+RepeatUnicondeChar(string("─"),mainmenu.MenuItemWidth/2-2)+string("┐");

mainmenu._MidSeperateLine=

string("├")+RepeatUnicondeChar(string("─"),mainmenu.MenuItemWidth/2-2)+string("┤");

mainmenu._BotSeperateLine=

string("└")+RepeatUnicondeChar(string("─"),mainmenu.MenuItemWidth/2-2)+string("┘");

mainmenu._BlankLine=ExpandMenuItemContent(string(""),mainmenu.MenuItemWidth,false);

mainmenu._BlankLineWithSep=ExpandMenuItemContent(string(""),mainmenu.MenuItemWidth);

}

//显示在窗口正中央

cout<

//ShowInHCenter(mainmenu._TopSeperateLine);

ShowInHCenter(mainmenu._BlankLine,mainmenu.TitleTextColor);

ShowInHCenter(mainmenu.title._menuitems_content_for_show,mainmenu.TitleTextColor);

ShowInHCenter(mainmenu._BlankLine,mainmenu.TitleTextColor);

for(size_ti=0;i

{

ShowInHCenter(mainmenu._BlankLine,mainmenu.ItemTextColorDefault);

ShowInHCenter(mainmenu.menuitems[i]._menuitems_content_for_show,mainmenu.ItemTextColorDefault);

}

ShowInHCenter(mainmenu._BlankLine,mainmenu.ItemTextColorDefault);

}

voidSelectPos(ChoiceMenuStruct&mainmenu,signedintindex,signedintlastindex)

{

intpos=(CONSOLE_ROW_COUNT-(mainmenu.menuitems.size()*2+4))/2+2+index*2;

intlastpos=(CONSOLE_ROW_COUNT-(mainmenu.menuitems.size()*2+4))/2+2+lastindex*2;

SetCurPos(COORD{0,lastpos});

//ShowInHCenter(mainmenu._BlankLine,mainmenu.ItemTextColorSelected);

ShowInHCenter(mainmenu.menuitems[lastindex-1]._menuitems_content_for_show,mainmenu.ItemTextColorDefault);

//ShowInHCenter(mainmenu._BlankLine,mainmenu.ItemTextColorSelected);

SetCurPos(COORD{0,pos});

//ShowInHCenter(mainmenu._BlankLine,mainmenu.ItemTextColorSelected);

ShowInHCenter(mainmenu.menuitems[index-1]._menuitems_content_for_show,mainmenu.ItemTextColorSelected);

//ShowInHCenter(mainmenu._BlankLine,mainmenu.ItemTextColorSelected);

SetCurPos(COORD{0,CONSOLE_ROW_COUNT});

}

六、ConsoleTools.cpp

#include"ConsoleTools.h"

#include

#include

//设置控制台背景

voidsetConsoleBackground(COLORTYPEcolor)

{

charbuffer[BUFFERSIZE_SMALL];

sprintf(buffer,"color%c0",color);

system(buffer);

}

//设置颜色

BOOLSetConsoleColor(WORDwAttributes)

{

HANDLEhConsole=GetStdHandle(STD_OUTPUT_HANDLE);

if(hConsole==INVALID_HANDLE_VALUE)

returnfalse;

returnSetConsoleTextAttribute(hConsole,wAttributes);

}

//设置光标位置

BOOLSetCurPos(COORDpos)

{

HANDLEhConsole=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(hConsole,pos);

returntrue;

}

七、main.cpp

#include

#include"ChoiceMenu.h"

#include"menus.h"

intmain()

{

menu_main();

return0;

}

八、menus.cpp

#include"menus.h"

#include

#include

#include"StudentGradeInformation.h"

#include

#include

ChoiceMenuStructcms;

intnowselect;

StudentGradeInformationinfStu;

 

voidEvent_quit(constChoiceMenuStruct*mainmenu);

voidEvent_add(constChoiceMenuStruct*mainmenu);

voidEvent_view(constChoiceMenuStruct*mainmenu);

voidEvent_remove(constChoiceMenuStruct*mainmenu);

voidEvent_save(constChoiceMenuStruct*mainmenu);

voidEvent_import(constChoiceMenuStruct*mainmenu);

voidmenu_main()

{

nowselect=1;

cms.TitleTextColor=BACKGROUND_BLUE|BACKGROUND_GREEN;

cms.ItemTextColorDefault=BACKGROUND_INTENSITY;

cms.ItemTextColorSelected=BACKGROUND_BLUE|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED;

cms.title.content="欢迎使用学生成绩管理系统";

cms.menuitems.push_back(ChoiceMenuItemInfo{"1.添加纪录",Event_add});

cms.menuitems.push_back(ChoiceMenuItemInfo{"2.查看排名",Event_view});

cms.menuitems.push_back(ChoiceMenuItemInfo{"3.删除记录",Event_remove});

//cms.menuitems.push_back(ChoiceMenuItemInfo{"4.导入记录",NULL});

cms.menuitems.push_back(ChoiceMenuItemInfo{"4.保存记录",Event_save});

cms.menuitems.push_back(ChoiceMenuItemInfo{"5.退出程序",Event_quit});

ShowChoiceMenu(cms);

SelectPos(cms,1,1);

intlastselect=nowselect;

//处理键盘

while(true)

{

chara=_getch();

//数字键

if(a>'0'&&a<='9'&&(int)(a-'0')>=1&&(size_t)(a-'0')<=cms.menuitems.size())

{

lastselect=nowselect;

nowselect=a-'0';

SelectPos(cms,nowselect,lastselect);

cms.menuitems[nowselect-1].func(&cms);

continue;

}

//方向键

if(a==-32)

{

charb=_getch();

switch(b)

{

case72:

lastselect=nowselect;

if(lastselect>1)nowselect--;

elsenowselect=(int)cms.menuitems.size();

SelectPos(cms,nowselect,lastselect);

break;

case80:

lastselect=nowselect;

if(lastselect<(int)cms.menuitems.size())nowselect++;

elsenowselect=1;

SelectPos(cms,nowselect,lastselect);

break;

}

continue;

}

//回车键

if(a==13)

{

cms.menuitems[nowselect-1].fun

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1