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

📄 task_deeds.cpp

📁 学生成绩管理。 Win32(dos)字符界面。可实现读入、简单计算、统计、输出等操作
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "student.h"
#include "deeds.h"
#include "filework.h"

void Delay(short i)
{
	double x;
	while (i)
	{
		i--;
		for (int j=0;j<2000;j++)
			x=log(exp(log(exp(log(exp(log(pow(1.2123,2.2324)+pow(1.3243,2.324))))))));
	}
}

void PrintMenu()
{
	cout<<"********************************************************************"<<endl
		<<" 1. 从文件中读入数据以初始化"<<endl
		<<" 2. 输入课程名称或删除课程"<<endl
		<<" 3. 输入或查询某门课程的成绩"<<endl
		<<" 4. 增加或删除学生记录"<<endl
		<<" 5. 按姓名或学号查找某个学生的成绩"<<endl
		<<" 6. 对学生成绩按照姓名、学号或某门成绩排序"<<endl
		<<" 7. 计算某个学生的平均绩点"<<endl
		<<" 8. 统计某门课程成绩在100-90,89-80,79-70,69-60,60以下各分数段的人数"<<endl
		<<" 0. 退出或帮助"<<endl
		<<"********************************************************************"
		<<endl;
}

void EditCourses(student *&headOfStudent,courselist *&headOfCourse)
{
	short i;
	cout<<" 1. 输入课程    2. 删除课程    0. 返回上一级菜单\n"
		<<"请选择:";
	cin>>i;
	while (cin.fail() || (i<0 || i>2))
	{
		cout<<char(7);
		cout<<"\n输入错误!输入 0-2 即可\n"
			<<"请重新输入:";
		cin.clear();
		cin.ignore(100,'\n');
		cin>>i;
	}
	switch (i)
	{
		case 1: InputCourses(headOfStudent,headOfCourse);break;

		case 2: DeleteCourses(headOfStudent,headOfCourse);break;

		case 0: return;
	}
}

void InputCourses(student *&headOfStudent,courselist *&headOfCourse)
{
	courselist *temp=NULL,*endv=headOfCourse;
	if (endv)
	{
		cout<<"\n您已输入的课程有:"<<endl;
		cout<<setw(20)<<setiosflags(ios::left)<<endv->courseName<<' '<<endv->credits<<"学分"<<endl;
		while (endv->next)
		{
			endv=endv->next;
			cout<<setw(20)<<endv->courseName<<' '<<endv->credits<<"学分"<<endl;
		}
	}
	char s[20];
	cout<<"\n请输入课程名称和该课程的学分,输入所有的课程后,再输入一个 * "<<endl
		<<"请输入:";
	bool flag=true;
	while (flag)
	{
		cin>>s;
		if (s[0]=='*') break;
		temp=headOfCourse;
		while (temp)
		{
			if (strcmp(temp->courseName,s)==0)
			{
				cout<<char(7);
				cout<<"\n输入的课程名重复!请重新输入!"<<endl;
				break;
			}
			temp=temp->next;
		}
		if (temp!=NULL)
			continue;
		temp=new courselist;
		if (temp==NULL)
		{
			cout<<char(7);
			cout<<"\n申请内存空间失败!"
				<<"课程"<<s<<"输入失败!"<<endl;
			return;
		}
		strcpy(temp->courseName,s);
		temp->next=NULL;
		cin>>temp->credits;
		while (cin.fail())
		{
			cout<<char(7);
			cout<<"\n输入错误! 课程学分是一个整型数!"<<endl
				<<"请重新输入";
			if (endv)
				cout<<' '<<endv->courseName<<" 后的课程: ";
			else
				cout<<":  ";
			cin.clear();
			cin.ignore(100,'\n');
			cin>>temp->courseName;
			if (temp->courseName[0]=='*')
			{
				flag=false;
				break;
			}
			cin>>temp->credits;
		}
		if (flag)
		{
			if (headOfCourse==NULL)
			{
				headOfCourse=temp;
				endv=temp;
			}
			else
			{
				endv->next=temp;
				endv=temp;
			}
		}
	}
	cout<<"\n您输入的课程有:"<<endl;
	temp=headOfCourse;
	while (temp)
	{
		cout<<setw(20)<<setiosflags(ios::left)<<temp->courseName<<' '<<temp->credits<<"学分"<<endl;
		temp=temp->next;
	}

	if (headOfStudent)
		AddCourses(headOfStudent,headOfCourse);
}

void DeleteCourses(student *&headOfStudent,courselist *&headOfCourse)
{
	courselist *temp=headOfCourse;
	if (temp)
	{
		cout<<"\n已经输入的课程有:"<<endl;
		while (temp)
		{
			cout<<temp->courseName<<' ';
			temp=temp->next;
		}
		cout<<endl;
	}
	else
	{
		cout<<char(7);
		cout<<"\n还未输入任何课程信息!不能进行删除操作!"<<endl;
		return;
	}
	cout<<"\n请输入要删除的课程名称,退出请输入 * \n"
		<<"请输入:";
	char coursename[20];
	short place=0;
	while (cin>>coursename)
	{
		if (coursename[0]=='*')
			return;
		temp=headOfCourse;
		place=0;
		while (temp)
		{
			place++;
			if (strcmp(temp->courseName,coursename)==0)
				break;
			temp=temp->next;
		}
		if (temp==NULL)
		{
			cout<<char(7);
			cout<<"\n输入课程名不存在!\n"
				<<"\n已输入的课程有:"<<endl;
			temp=headOfCourse;
			while (temp)
			{
				cout<<temp->courseName<<' ';
				temp=temp->next;
			}
			cout<<endl;
			cout<<"\n请重新输入,退出请输入 * "<<endl;
		}
		else
			break;
	}

	if (temp==headOfCourse)
	{
		headOfCourse=headOfCourse->next;
	}
	else
	{
		courselist *p=headOfCourse;
		while (p->next!=temp)
			p=p->next;
		p->next=temp->next;
		delete temp;
	}

	if (headOfStudent)
		DeleteCourseOfStudent(headOfStudent,place);

	cout<<"\n "<<coursename<<" 的所有信息已删除!"<<endl;
}

void DeleteCourseOfStudent(student *&headOfStudent,short place)
{
	if (headOfStudent->pNameLc)
		DeleteCourseOfStudent(headOfStudent->pNameLc,place);

	short i=place;
	courseOfStudent *temp=headOfStudent->courses,*p;
	while (i>2)
	{
		temp=temp->next;
		i--;
	}
	if (place==1)
	{
		p=headOfStudent->courses;
		headOfStudent->courses=headOfStudent->courses->next;
		delete p;
	}
	else
	{
		p=temp->next;
		temp->next=temp->next->next;
		delete p;
	}

	if (headOfStudent->pNameRc)
		DeleteCourseOfStudent(headOfStudent->pNameRc,place);
}

void ScoresOfCourse(student *&headOfStudent,courselist *&headOfCourse)
{
	cout<<" 1. 输入某门课程的成绩 \n"
		<<" 2. 查询某门课程的成绩 \n"
		<<" 0. 返回上一级菜单\n"
		<<"请选择:";
	short i;
	cin>>i;
	while (cin.fail() || (i!=1 && i!=2 && i!=0))
	{
		cout<<char(7);
		cout<<"\n输入错误!输入 0-2 即可!\n"
			<<"请重新输入:";
		cin.clear();
		cin.ignore(100,'\n');
		cin>>i;
	}
	switch (i)
	{
		case 1: InputScoresOfCourse(headOfStudent,headOfCourse);break;

		case 2: SearchOfCourse(headOfStudent,headOfCourse);break;

		case 0:return;
	}
}

void SearchOfCourse(student *&headOfStudent,courselist *&headOfCourse)
{
	char coursename[20];
	courselist *temp=headOfCourse;
	if (temp==NULL)
	{
		cout<<char(7);
		cout<<"\n未输入任何课程信息!查询失败!"<<endl;
		return;
	}
	else
	{
		cout<<"\n已输入的课程有:"<<endl;
		while (temp)
		{
			cout<<temp->courseName<<' ';
			temp=temp->next;
		}
		cout<<endl;
		cout<<"\n请输入要查询的课程名称:";
		cin>>coursename;
		temp=headOfCourse;
		short place=0;
		while (temp)
		{
			if (strcmp(temp->courseName,coursename)==0)
				break;
			temp=temp->next;
			place++;
		}
		if (temp==NULL)
		{
			cout<<char(7);
			cout<<"\n输入课程不存在!要添加课程信息请返回上一级菜单!"<<endl;
			return;
		}

		bool flag=false;
		if (headOfStudent) 
		{
			if (headOfStudent->pNameLc)
				Tree(headOfStudent->pNameLc,headOfStudent,temp->courseName,Sort_Score);
			if (headOfStudent->pNameRc)
				Tree(headOfStudent->pNameRc,headOfStudent,temp->courseName,Sort_Score);

			PrintScoresOfCourse(headOfStudent,place,flag);
		}
		else
		{
			cout<<char(7);
			cout<<"\n还未录入任何学生信息!查询失败!"<<endl;
			return;
		}
		if (!flag)
		{
			cout<<char(7);
			cout<<"\n该门课程还未录入成绩!"<<endl;
		}
	}
}

void PrintScoresOfCourse(student *&headOfStudent,short place,bool &flag)
{
	if (headOfStudent->pScoreRc)
		PrintScoresOfCourse(headOfStudent->pScoreRc,place,flag);

	short i=place;
	courseOfStudent *temp=headOfStudent->courses;
	while (i)
	{
		temp=temp->next;
		i--;
	}
	if (temp->score>=0)
	{
		if (!flag)
		{
			cout<<endl<<" <"<<temp->courseName<<"> "<<endl;
			flag=true;
		}
		cout<<setw(10)<<setiosflags(ios::left)<<headOfStudent->studentName
			<<setiosflags(ios::fixed)<<setprecision(2)<<temp->score<<endl;
	}

	if (headOfStudent->pScoreLc)
		PrintScoresOfCourse(headOfStudent->pScoreLc,place,flag);

	headOfStudent->pScoreLc=NULL;
	headOfStudent->pScoreRc=NULL;
}

void InputScoresOfCourse(student *&headOfStudent,courselist *&headOfCourse)
{
	courselist *temp=headOfCourse,*p;
	short i;
	char s[20];
	bool flag;
	if (temp)
	{
		cout<<"\n已经输入的课程有:"<<endl;
		while (temp)
		{
			cout<<temp->courseName<<' ';
			temp=temp->next;
		}
		cout<<endl;
	}
	do
	{
		cout<<"\n请输入您要输入成绩的课程名称,如果课程输入结束,请输入一个 * "<<endl
			<<"请输入课程名称:";
		cin>>s;
		if (s[0]=='*') break;
		flag=false;
		temp=headOfCourse;
		while (temp)
		{
			if (strcmp(temp->courseName,s)==0)
			{
				flag=true;
				break;
			}
			else
				if (temp->next)
					temp=temp->next;
				else
					break;
		}
		if (!flag)
		{
			cout<<"\n您输入的课程名称不在当前课程列表中,是否要加入课程列表?"<<endl
				<<" 1. 是       2. 否   "<<endl
				<<"请选择:";
			cin>>i;
			while (cin.fail() || (i!=2 && i!=1))
			{
				cout<<char(7);
				cout<<"\n输入错误 !"<<endl
					<<"输入菜单中您要选择的项目前的序号即可,即 1 或 2 "<<endl
					<<"请选择: ";
				cin.clear();
				cin.ignore(100,'\n');
				cin>>i;
			}
			switch (i)
			{
				case 1: p=new courselist;
						if (p)
						{
							if (temp)
							{
								temp->next=p;
								temp=p;
							}
							else
							{
								headOfCourse=p;
								temp=p;
							}
							flag=true;
							strcpy(temp->courseName,s);
							p->next=NULL;
							cout<<"请输入"<<temp->courseName<<"的学分:";
							cin>>temp->credits;
							while (cin.fail())
							{
								cout<<char(7);
								cout<<"\n输入错误! 课程学分是一个整型数!"<<endl
									<<"请重新输入:";
								cin.clear();
								cin.ignore(100,'\n');
								cin>>temp->credits;
							}
						}
						else
						{
							cout<<char(7);
							cout<<"\n申请内存空间失败,不能再添加新的课程!"<<endl;
						}
						break;

				case 2: cout<<char(7);
						cout<<"\n输入课程名称不存在,输入成绩失败!"<<endl;
						break;
			}
		}
		if (flag)
		{
			if (headOfStudent==NULL)
			{
				cout<<char(7);
				cout<<"\n还没有输入任何学生信息,请先添加学生记录!"<<endl;
				break;
			}
			InputScoresOfCourse_(headOfStudent,s);
		}
	}while (1);
}

void InputScoresOfCourse_(student *&head,char coursename[20])
{
	if (head->pNameLc)
		InputScoresOfCourse_(head->pNameLc,coursename);

	cout<<"请输入"<<head->studentName<<"的"<<coursename<<"的成绩:";
	courseOfStudent *temp=head->courses;
	while (temp)
	{
		if (strcmp(temp->courseName,coursename)==0)
			break;
		if (temp->next)
			temp=temp->next;
		else
			break;
	}
	if (temp)
	{
		if (strcmp(temp->courseName,coursename)!=0)
		{
			temp->next=new courseOfStudent;
			if (temp->next==NULL)
			{
				cout<<char(7);
				cout<<"\n申请内存空间失败,输入数据失败!"<<endl;
				return;
			}
			temp=temp->next;
		}
	}
	else
	{
		temp=new courseOfStudent;
		if (temp==NULL)
		{
			cout<<char(7);
			cout<<"\n申请内存空间失败,输入数据失败!"<<endl;
			return;
		}
	}
	strcpy(temp->courseName,coursename);
	temp->next=NULL;
	cin>>temp->score;
	while (cin.fail())
	{
		cout<<char(7);
		cout<<"\n输入成绩错误!"<<endl
			<<"请输入一个100以内的整型数或实型数!"<<endl;
		cin.clear();
		cin.ignore(100,'\n');
		cin>>temp->score;
	}

	if (head->pNameRc)
		InputScoresOfCourse_(head->pNameRc,coursename);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -