第一题
题目:
为某高校的学籍和成绩管理设计一系统。要求建立的数据有:
(1)学生类,包含班级号、学号、姓名、专业等成员;
(2)学生成绩类,包含班级号、学号,课程名,成绩等成员。
完成下列功能:首先输入学生数据及成绩数据,再根据提示分别实现查找功能。其中:
函数 Xslr 负责学生数据录入;
函数 Cjlr 负责成绩数据录入;
函数 Look1 负责根据姓名查找学生的基本信息和成绩信息;
函数 Look2 负责根据班级列出学生的基本信息;
函数 Dayin1 负责依据班级输出满足条件的学生的基本情况;
函数 Dayin2 负责输出某一同学的成绩单。
预习报告一
student 类
int Cnum
int Snum
string Sname
string Smajor
public:
void Xslr1(int a, int b, string s1, string s2)
void out()
int getCnum()
int getSnum()
string getname()
string getmajor()
班级号
学号
学生姓名
学生专业
学生信息录入
输出学生信息
输出班级号
输出学号
输出姓名
输出专业
grade 类:public student
Node n
public:
void Cjlr(string s1, double a,int l)
void GLook1(string s1,int l)
void GLook2(int n)
void GDayin1(int Cnum, int Snum)
void Point()
Node 是储存课程和分数的链表
沿链表录入同一个学生的不同成绩
根据姓名查找成绩
根据学号查找信息
在班级里根据学号寻找学生
输出所有成绩和课程
SeqList 类:public grade
grade item[max]
int length
public:
void Xslr(int a,int b,string name,string major)
void Cjlr(string course, double point, int l)
void Look1(string name,int l)
void Look2(int Cnum)
void Dayin2(int Snum)
总人数,默认 100
记录现在录入的人数
信息录入
成绩录入
根据姓名查找信息
根据学号查找信息
根据学号输出成绩
总结:student 类用来储存学生的个人信息,grade 类是 student 类的派生,其中有链表结构存储不同课程的
成绩,最后利用顺序表,存储多个学生多个课程成绩。在主函数中用到了 getchar(),用于读取 enter 附
带的换行。
{
return Snum;
}
string student::getname()
{
return Sname;
}string student::getmajor()
{
return Smajor;
}
grade.h
#pragma once
#include "student.h"
#include
using namespace std;
class Node
{
public:
string course;
double point;
Node* pNext=NULL;
};
class grade :
public student
{
Node n;
public:
void Cjlr(string s1, double a,int l);
void GLook1(string s1,int l);
void GLook2(int n);
void GDayin1(int Cnum, int Snum);
void Point();
};
grade.cpp
#include "grade.h"
void grade::Cjlr(string s1, double a,int l)
{
if (l == 1)
;
else
for (int i = 0; i < l-1; i++)
n.pNext = n.pNext->pNext;
n.pNext = new Node[1];
Node* H = n.pNext->pNext;
}
void grade::GLook1(string s1,int l)
{
if (l != 2)
{
n.pNext = n.pNext->pNext;
if (getname() == s1)
{
out();
for (; ;)
{
cout << n.course << "
" << n.point << endl;
}
}
}
else
cout << "查无此人" << endl;
}
void grade::GLook2(int n)
{
while (getCnum() == n)
{
out();
cout << endl;
}
}
void grade::GDayin1(int Cnum, int Snum)
{
if (getCnum() == Cnum && getSnum() == Snum)
out();
}
void grade::Point()
{
while (n.pNext != NULL)
{
cout << n.course <
n.pNext = n.pNext->pNext;
}
}
SeqList.h
#pragma once
#include "grade.h"
const int Max = 100;
class SeqList :
public grade
{
grade item[Max];
int length=0;
public:
SeqList();
void Xslr(int a,int b,string name,string major);
void Cjlr(string course, double point, int l);
void Look1(string name,int l);
void Look2(int Cnum);
void Dayin2(int Snum);
};
SeqList.cpp
#include "SeqList.h"
SeqList::SeqList()
{
}
void SeqList::Xslr(int a, int b, string name, string major)
{
for (int i = 0; i < length; i++)
if (item[i].getSnum() == b)
cout << "学生信息已登记过" << endl;
item[length].Xslr1(a, b, name, major);
length++;
}
void SeqList::Cjlr(string course, double point,int l)
{
cout << "请输入要登记成绩学生的学号" << endl;
int num = 0;
cin >> num;
for (int i = 0; i < length; i++)
{
if (num == item[i].getSnum())
{
item[i].Cjlr(course, point,l);
break;
}
else if (i == length - 1 && item[i].getSnum() != num)
{
cout << "学生信息没有登记过,请先登记学生信息" << endl;
cout << "输入班级,学号,姓名,专业" << endl;
int a, b;
string name, major;
cin >> a >> b >> name >> major;
Xslr(a, b, name, major);
item[length].Cjlr(course, point,l);
}
}
}
void SeqList::Look1(string name,int l)
{
for (int i = 0; i < length; i++)
item[i].GLook1(name,l);
}
void SeqList::Look2(int Cnum)
{
for (int i = 0; i < length; i++)
item[i].GLook2(Cnum);
}
void SeqList::Dayin2(int Snum)
{
int i = 0;
for (; i < length; i++)
if (item[i].getSnum() == Snum)
item[i].Point();
}
Main.cpp
#include
#include"SeqList.h"
int main()
{
for (int i = 0; i < 36; i++)
cout << "*";
cout << "学生信息管理系统";
for (int i = 0; i < 36; i++)
cout << "*";
cout << endl;
SeqList a;
int choice = 0;
cout << "选择要进行的项目:" << endl;
cout << "1.学生数据录入" << endl;
cout << "2.学生成绩录入" << endl;
cout << "3.按姓名查找学生的基本信息和成绩信息" << endl;
cout << "4.按班级查找学生基本信息" << endl;
cout << "5.按班级输出要求学号的学生" << endl;
cout << "6.输出要求学号的学生信息" << endl;
cin >> choice;
int class1, stunum;
string name, major;
string course;
string search_name;
int search_cnum,search_snum,l;
double point1;
while (choice)
{
switch (choice)
{
case 1:
cout << "依次输入学生班级 学号 姓名 专业(中间用空格分隔)"<> class1 >> stunum >> name >> major;
a.Xslr(class1, stunum, name, major);
cout << "重新进行选择" << endl;
cin >> choice;
cout << endl;
break;
case 2:
cout << "输入课程和成绩以及这是此学生的第几门成绩" << endl;
cin >> course >> point1>>l;
a.Cjlr(course, point1,l);
cout << "重新进行选择" << endl;
cin >> choice;
cout << endl;
break;
case 3:
cout << "输入想搜索的学生姓名" << endl;
cin >> search_name;
a.Look1(search_name,l);
cout << "重新进行选择" << endl;