📄 menu.cpp
字号:
#include "main.h"
extern int sortbase;
extern bool sorttype;
extern char currentfile[128];
extern int *filtersort, filterstucnt;
//================= Choose ====================
void choose(int showx, int showy, int choosex, int choosey, int& newshowx, int& newshowy)
{
showlist(showx,showy,choosex,choosey);
cout<<flush;
sleep(333);
if (choosex==-2 || choosex==-1)
{
if (choosey==-1) choosenumbernamehead(choosex); else choosenumbername(choosex,choosey);
}
else
{
if (choosey==-1) choosecoursehead(choosex); else continuouschange(choosex,choosey,newshowx,newshowy);
}
}
//================= ChooseCourseHead ====================
void choosecoursehead(int x)
{
bool relist=true;
int ch,xx;
while (relist)
{
if (x==s.GetCourseCount())
{
showheader();
cout<<" 您选择了 平均分/平均积点 栏。\n\n"
<<" 我想...\n"
<<" 按平均栏排升序 1\n"
<<" 按平均栏排降序 2\n"
<<" 绘制成绩分布图 3\n"
<<" 选择其他课程 Left\n"
<<" 返回 Esc\n\n"
<<flush;
ch=scankey(0,0,'1','2','3',KEY_LEFT,KEY_ESC,0);
if (ch==KEY_ESC) relist=false;
else if (ch=='1') { sortbase=x; sorttype=true; sortstudents(); relist=false; }
else if (ch=='2') { sortbase=x; sorttype=false; sortstudents(); relist=false; }
else if (ch=='3') { sortbase=x; showgraph(x); }
else if (ch==KEY_LEFT && s.GetCourseCount()>0) --x;
else;
}
else//if (x==s.GetCourseCount())
{
showheader();
cout<<" 您选择了 "<<s.GetCourseName(x,true)<<" 课程。\n"
<<" 这个课程的学分是 "<<s.GetCourseCoefficient(x,true)<<" 。\n\n"
<<" 我想...\n"
<<" 按该课程成绩排升序 1\n"
<<" 按该课程成绩排降序 2\n"
<<" 绘制成绩分布图 3\n"
<<" 更改该课程的名称... 4\n"
<<" 将该课程的学分改为... 5\n"
<<" 将该课程的位置移到... 6\n"
<<" 删除该课程... 9\n"
<<" 选择其他课程 Left/Right\n"
<<" 返回 Esc\n\n"
<<flush;
ch=scankey(0,0,'1','2','3','4','5','6','9',KEY_LEFT,KEY_RIGHT,KEY_ESC,0);
if (ch==KEY_ESC) relist=false;
else if (ch=='1') { sortbase=x; sorttype=true; sortstudents(); relist=false; }
else if (ch=='2') { sortbase=x; sorttype=false; sortstudents(); relist=false; }
else if (ch=='3') { sortbase=x; showgraph(x); }
else if (ch=='4') changecoursename(x);
else if (ch=='5') changecoursecoefficient(x);
else if (ch=='6') { xx=changecoursepos(x); if (xx!=-1) x=xx; }
else if (ch=='9') relist=(delcourse(x)==FRR_SKIP);
else if (ch==KEY_LEFT && x>0) --x;
else if (ch==KEY_RIGHT && x<s.GetCourseCount()) ++x;
else;
}//if !(x==s.GetCourseCount())
}//while relist
}
//================= ChooseNumberName ====================
void choosenumbername(int x,int y)
{
bool relist=true;
int i=0, wid=0, spc=0, *csort=s.CourseSort(), ex=x, ey=y, ch;
char* columnhead=(x==-2?"学号":"姓名");
for (i=-2; i<s.GetCourseCount(); i++)
{
if (wid<s.GetColumnWidth(i)) wid=s.GetColumnWidth(i);
}
spc=34-wid/2;
while (relist)
{
student* st=s.Stu(y,true);
showheader();
cout<<" 您选择了"<<columnhead<<"为 "<<(x==-2?st->num:st->name)<<" 的学生。\n\n"<<setiosflags(ios::left)
<<setw(spc)<<' '<<setw(wid)<<"学号"<<st->num<<'\n'
<<setw(spc)<<' '<<setw(wid)<<"姓名"<<st->name<<'\n';
for (i=0; i<s.GetCourseCount(); i++)
{
cout<<setw(spc)<<' '<<setw(wid)<<s.GetCourseName(i,true)
<<st->score[csort[i]].scorestr
<<" "<<st->score[csort[i]].pointstr<<'\n';
}
cout<<resetiosflags(ios::left)<<"\n 我想...\n"
<<" 修改该学生的"<<columnhead<<"... 1\n"
<<" 连续修改学生信息... 2\n"
<<" 删除该学生... 9\n"
<<" 选择其他学生 Up/Down\n"
<<" 返回 Esc\n\n"
<<flush;
ch=scankey(0,0,'1','2','9',KEY_UP,KEY_DOWN,KEY_ESC,KEY_PAGEUP,KEY_PAGEDOWN,0);
if (ch==KEY_ESC) relist=false;
else if (ch=='1') changenumbername(x,y);
else if (ch=='2') { continuouschange(x,y,ex,ey); relist=false; }
else if (ch=='9') relist=(delstudent(y)==FRR_SKIP);
else if ((ch==KEY_UP || ch==KEY_PAGEUP) && y>0) --y;
else if ((ch==KEY_DOWN || ch==KEY_PAGEDOWN) && y<s.GetStudentCount()) ++y;
else;
}
}
//================= ChooseNumberNameHead ====================
void choosenumbernamehead(int x)
{
char* columnhead=(x==-2?"学号":"姓名");
bool relist=true;
int ch;
while (relist)
{
showheader();
cout<<" 您选择了 "<<columnhead<<" 。\n\n\n"
<<" 我想...\n\n"
<<" 按"<<columnhead<<"排升序 1\n\n"
<<" 按"<<columnhead<<"排降序 2\n\n"
<<" 按照"<<columnhead<<"筛选... 3\n\n"
<<" 返回 Esc\n\n"
<<flush;
ch=scankey(0,0,'1','2','3',KEY_ESC,0);
relist=false;
if (ch=='1') { sortbase=x; sorttype=true; sortstudents(); }
else if (ch=='2') { sortbase=x; sorttype=false; sortstudents(); }
else if (ch=='3') relist=(filter(x)==FRR_SKIP);
}
}
//================= ChooseNumberNameHead ====================
FuncRunResult filter(int x)
{
char sstr[40]={0}, *str;
cout<<"请输入"<<(x==-2?"学号":"姓名")<<"的前几个字/字母/数字(直接回车为放弃):";
cin.getline(sstr,40);
if (0==sstr[0]) return FRR_SKIP;
str=sstr;
int i, lenstr=strlen(str), *orisort=s.StudentSort();
filtersort=new int[s.GetStudentCount()];
filterstucnt=0;
if (x==-2)
{
for (i=0; i<s.GetStudentCount(); ++i)
if (strncmp(str,s.GetStuNum(i,1),lenstr)==0) filtersort[filterstucnt++]=orisort[i];
}
else
{
for (i=0; i<s.GetStudentCount(); ++i)
if (strncmp(str,s.GetStuName(i,1),lenstr)==0) filtersort[filterstucnt++]=orisort[i];
}
if (filterstucnt==0)
{
cout<<"\n找不到任何"<<(x==-2?"学号":"姓名")<<"是以“"<<str<<"”开头的学生。"<<flush;
delete []filtersort; filtersort=NULL;
sleep(2500);
}
return FRR_SUCCEED;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -