📄 task_deeds.cpp
字号:
#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 + -