提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
学生成绩管理系统,每个学生是一个记录,包括学号,姓名,性别,3 门课程成 绩。系统要求实现以下功能:
1、信息录入:录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等);
2、信息查询:输入学号,查询学生各门课程的成绩,并显示。
3、排序:排序:按各门课程的成绩平均分进行排序,并显示。
4、信息删除与修改——输入学号,删除该学生的成绩信息
一、系统需求分析
本系统是针对高校学生的课程成绩而设计,通过本系统高校教师可以很方便地进行成绩管理。主要的问题描述是(功能要求):录入和删除学生成绩信息,输入学号,查询学生各门课程的成绩并按各门课程的成绩平均分进行排序
1)系统主要功能
① 成绩信息录入功能:能根据提示将学生成绩的相关信息进行输入并保存;
② 成绩信息浏览功能:能将已经录入并保存的各科成绩进行浏览;
③ 查询功能:可根据学生学号查询;
2)系统流程图
3)输入输出要求
系统以菜单方式工作。用户根据每一个功能模块输入相应内容,然后进行相应的操作。如需进行其他操作,可返回主菜单。输出的内容要有一个良好的界面,使用户看清楚明白。
二、总体设计
1.系统功能分析
本系统主要由一个Student类及其10个成员函数组成。课题所要求的功能由各个函数分别得以实现。首先,在Student类内定义了一些public成员变量:用来保存学号,姓名,科目成绩,总分,平均分,名次等信息,如图所示:
然后定义成员函数如下:
input(Student *head); //输入学生的信息
output(Student *head); //输出学生的信息
del(Student *head); //删除学生的信息
add(Student *head); //添加学生的信息
change(Student *head); //修改学生的信息
find(Student *head); //查找学生的信息
rank(Student *head);//学生成绩排序
save(Student *head); //保存学生的信息
load(Student *head);//加载学生的信息
然后,在类外,通过作用域运算符将类内声明的成员函数定义,以及进行相应的操作,以实现相应的功能。主要功能包括学生信息输入和输出,添加学生成绩信息,按学号查询成绩、对学生成绩排序等。
最后,在主函数中设置目录显示。用switch瓜分不同的功能选项。系统根据用户输入的符号,调用相应的成员函数,完成功能的实现。
2.模块关系图
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
三、详细设计
1. 数据库需求分析
该程序主要包含一个Student类和一个main函数。其中Student类有Input(),OutPut(),Del(),Add (),change (),Find(),Rank()等函数来实现各功能。另外有一个保存学生信息的成员函数save,需要将学生的成绩信息保存在文本文件中,save函数使用了c++面向对象设计中的文件的输入和输出等方面的知识,ofstream file;file.open (“example.bin”, ios::out | ios::app | ios::binary);ofstream类是系统提供给用户处理输入和输出的文件流的ofstream类从ostream类公有派生产生。
系统的数据可保存到文件中,亦可以从文件中进行数据的读入操作,其中都使用了c++中的文件和流相关知识。
2. 类层次图
3. 功能模块的实现
(1)学生成绩信息输入输出与保存的实现
在Student()类中定义input(Student *head)与output(Student *head)函数,分别用于学生成绩信息的输入和显示输出;
在类外进行input(Student *head)和output(Student *head)的具体实现算法:
1)input(Student *head):
在该函数中,首先定义一个N用来表示要写入的学生数目,然后通过for循环进行学生信息的录入,先定义一个student类指针p1并指向头结点,通过for循环根据提示分别输入p1->num,p1->name ,p1->sex,p1->Java,p1->data,p1->Cpp,分别表示学号,姓名,性别,java基础成绩,数据结构成绩,面向对象成绩。对于总分和平均分,通过p1->sum=p1->Java+p1->data+p1->Cpp求得总分,通过p1->average=(p1->sum)/3求得平均分
输入界面如下图:
(输入“1”,根据提示输入学生信息:)
2)output(Student *head):
首先,创建一个头指针p1,判断p1是否为空,若非空,则输出p1->num,p1->name ,p1->sex,p1->Java,p1->data,p1->Cpp,p1指向下一个结点:p1=p1->next进行while循环。
(2)学生成绩信息的添加和删除
在Student()类中定义del(Student *head);和add(Student *head)函数,分别用于学生成绩信息的添加和删除;
1)del(Student *head):
该函数首先创建了用户需输入的学号stunum,通过指针p1和p2来进行循环检索用户输入的学号和系统保存的信息中是否相等,如果p1->num和用户输入的stunum相等,那么删除p1结点,删除成功后,系统提示删除成功。操作界面图如下:
2)add(Student *head):
此功能和input功能类似界面设计操作图如下
下面的就不再赘述
void Student::find(Student *head)//查找学生的信息
{
system("cls");
Student *p1;
int i=0;
int stunum;
p1=head->next;
int r=1;
cout<<"请输入要查找的学号 "<<endl;
cin>>stunum;
while(p1!=NULL)
{
if(stunum==p1->num)
{
cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"性别"<<"\t"<<"Java基础"
<<"\t"<<"数据结构"<<"\t"<<"面向对象"<<"\t"<<"平均分"<<"\t"<<"总分"
<<endl;
cout<<p1->num<<"\t"<<p1->name<<"\t"<<p1->sex<<"\t"<<p1->Java<<"\t\t"
<<p1->data<<"\t\t"<<p1->Cpp<<"\t\t"<<p1->average<<"\t"<<p1->sum<<endl;
}
else
{
r++;
}
p1=p1->next;
}
}
void Student::rank(Student *head)//排序
{
Student *p1;
Student *p2;
p1=head;
int n=0;
int a=0;
char b[20];
int i,j;
while(p1->next)
{
p1=p1->next ;
n++;
}
for(i=0;i<n-1;i++)
{
p2=head->next;
p1=p2->next;
for(j=0;j<n-i-1;j++)
{
if(p1->average >p2->average )
{
strcpy(b,p2->name);
strcpy(p2->name ,p1->name );
strcpy(p1->name,b);
strcpy(b,p2->sex);
strcpy(p2->sex ,p1->sex);
strcpy(p1->sex,b);
a=p2->num ;
p2->num =p1->num ;
p1->num =a;
a=p2->Java;
p2->Java=p1->Java;
p1->Java=a;
a=p2->data ;
p2->data =p1->data ;
p1->data =a;
a=p2->Cpp ;
p2->Cpp =p1->Cpp ;
p1->Cpp =a;
a=p2->average;
p2->average =p1->average ;
p1->average =a;
a=p2->sum ;
p2->sum =p1->sum ;
p1->sum =a;
}
p1=p1->next;
p2=p2->next;
}
}
cout<<"YES!排序成功 "<<endl;
}
void Student::save(Student *head) //保存学生的信息
{
Student *p;
ofstream os;
os.open("sco.txt");
os<<"学号"<<"\t"<<"姓名"<<"\t"<<"性别"<<"\t"<<"Java基础"
<<"\t"<<"数据结构"<<"\t"<<"面向对象"<<"\t"<<"平均分"<<"\t"<<"总分"
<<endl;
p=head->next ;
while(p)
{
os<<p->num<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->Java<<"\t"<<p->data
<<"\t"<<p->Cpp<<"\t"<<p->average<<"\t"<<p->sum<<endl;
p=p->next;
os<<endl;
}
cout<<"YES!保存成功 "<<endl;
os.close();
}
总结
获取整体代码请留言