⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.cpp

📁 学生成绩管理系统。实现学生的添加 删除和各科成绩管理。
💻 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 + -