输入2,运行结果如下:
输入6,排序,显示选择界面,用户可根据需求选择科目和升降序,这里我是按语文成绩降序排序。
6
输入7,成绩统计,用户自行输入要统计的科目和分数段进行统计。这里我统计的是英语成绩在60—90的学生。
4、源程序代码
#include
#define HEADER1 \ -----------------------------学生成绩----------------------------\\n\
#define HEADER2 \姓名 | 学号 | 数学 | 语文 | 英语 | 总分 |\\n\#define HEADER3 \|----------|----------|----------|----------|----------|----------|\\n\
class Student //定义学生类 {
public:
char name[20] ; char id[20] ; int math ; int chinese ;
7
int english ; int sum ;
Student *next ; void input() ;
void ReadFile(istream & in) ; void show() ; } ;
void Student::input() //输入学生信息函数 {
cout<<\请输入:\ cout<<\姓名:\ cin>>name ;
cout<<\学号:\ cin>>id ;
cout<<\数学成绩:\ cin>>math ;
cout<<\语文成绩:\ cin>>chinese ;
cout<<\英语成绩:\ cin>>english ;
sum = math + chinese + english ; }
void Student::ReadFile(istream & in) //读取文件 {
in>>name>>id>>math>>chinese>>english>>sum ; }
void Student::show() //输出学生信息 {
cout<<\ |\ |\|\ |\|\ cout<<\
|----------|----------|----------|----------|----------|----------|\\n\}
class StudentMassage //定义学生信息类,包含各项处理功能 {
public:
StudentMassage() ; ~StudentMassage() ;
8
void ShowMenu() ; void Display() ; void AddItem() ; void Find() ; void save() ;
void ModifyItem() ; void RemoveItem() ;
void Swap(Student *p1 , Student *p2) ; void Sort() ; int ListCount() ; int Count() ; private:
Student *Head , *End ; ifstream in ; ofstream out ;
Student *FindItem(char *name) ; Student *FindId(char *id) ; } ;
Student *StudentMassage::FindItem(char *name) {
Student *p ;
for(p = Head ; p->next != End ; p = p->next) if(!strcmp(p->next->name , name)) return p ; return NULL ; }
Student *StudentMassage::FindId(char *id) {
Student *p ;
for(p = Head ; p->next != End ; p = p->next) if(!strcmp(p->next->id , id)) return p ; return NULL ; }
StudentMassage::StudentMassage() //构造函数 {
Head = new Student ;
Head->next = new Student ; End = Head->next ; in.open(\ if(!in)
9
cout<<\这是一个新系统,无学生信息,请先输入。\ else {
while(!in.eof()) {
End->ReadFile(in) ; if(End->name[0]=='\\0') break ;
End->next = new Student ; End = End->next ; }
in.close() ;
cout<<\读取学生信息成功!\ } }
StudentMassage::~StudentMassage() //析构函数 {
Student *temp ; save() ;
for(temp ; Head->next != End ; ) {
temp = Head->next ;
Head -> next = Head ->next->next ; delete temp ; }
delete Head , End ; }
void StudentMassage::ShowMenu() //显示菜单 {
cout<<\主菜单\
cout<<\; cout<<\、增加学生信息 2、删除学生信息\; cout<<\、修改学生信息 4、显示学生信息\; cout<<\、信息查询 6、排序\ cout<<\、成绩统计 0、安全退出\ cout<<\ cout<<\请选择:\} void StudentMassage::Display() //显示学生信息 { 10