下面是C++的源代码:

#include<iostream>

#include<fstream>
#include<string>
#include<conio.h>
using namespace std;


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~Student类~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
class Student
{
public:
char name[20];
char Id[20];
char grade1[4];
char class1[20];
int C;
int Math;
int English;
int PE;
int sum;
double ave;
char grade;
Student  * Next;
void Input()
{
cout << "\t\t请输入学生的姓名:"; cin >> name;
cout << "\t\t请输入学生的学号:"; cin >> Id;
cout << "\t\t请输入学生的年级:"; cin >> grade1;
cout << "\t\t请输入学生的班级:"; cin >> class1;
cout << "\t\t请输入C成绩:";      cin >> C;
cout << "\t\t请输入数学成绩:";   cin >> Math;
cout << "\t\t请输入英语成绩:";   cin >> English;
cout << "\t\t请输入体育成绩:";   cin >> PE;
sum = C + Math + English+PE;
ave = (C + Math + English+PE) / 4.0;


}


void ReadFile(istream & in)
{
in >> name >> Id >> grade1 >> class1 >> C >> Math >> English >> PE >> sum >> ave;
}
void Show()
{
cout << "姓名:" << name << endl << "学号:" << Id << endl << "年级:" << grade1 << endl << "班级:" 
<< class1 << endl << "C语言:" << C << endl<< "数学:" << Math << endl << "英语:" << English 
<< "\n体育:" << PE << endl << "总成绩:" << sum<< endl << "平均数:" << ave << endl << endl;
}
};






//~~~~~~~~~~~~~~~~~~~~~~~~~~~~Studentmassage类~~~~~~~~~~~~~~~~~~~~~ 
class Studentmassage
{
public:
Studentmassage();
double ave;
char grade;
~Studentmassage();
void Show();
void Find();
void Save();
void Modify();
void Remove();
void gra();
void Swap(Student *, Student *);
void Sort();
void del();
int List();
void Display()
{
for (Student *p = Head->Next; p != End; p = p->Next)
p->Show();
cout << "输入任意字符! 继续......";
_getch();
}
void AddItem()
{
End->Input();
End->Next = new Student;
End = End->Next;
cout << "添加成功!" << endl;
cout << "输入任意字符! 继续......"; \
_getch();


}
private:
Student * Head, *End;
ifstream in;
ofstream out;
Student *FindItem(char *name)
{
for (Student * p = Head; p->Next != End; p = p->Next)//匹配成功则返回上一个指针,不成功就返回空
if (!strcmp(p->Next->name, name)) return p;
return NULL;
}
Student *FindID(char *Id)
{
for (Student * p = Head; p->Next != End; p = p->Next) //匹配成功则返回上一个指针,不成功就返回空
if (!strcmp(p->Next->Id, Id)) return p;
return NULL;
}
Student *Findgrade1(char *grade1)
{
for (Student * p = Head; p->Next != End; p = p->Next)//匹配成功则返回上一个指针,不成功就返回空
if (!strcmp(p->Next->grade1, grade1)) return p;
return NULL;
}
Student *Findclss1(char *class1)
{
for (Student * p = Head; p->Next != End; p = p->Next)//匹配成功则返回上一个指针,不成功就返回空
if (!strcmp(p->Next->class1, class1)) return p;
return NULL;
}
};


//~~~~~~~~~~~~~~~~~~~~~~~~~构造函数~~~~~~~~~~~~~~~~~~~~~~~~~ 
Studentmassage::Studentmassage()
{
Head = new Student;
Head->Next = new Student;
End = Head->Next;
in.open("sort.txt");
if (!in)
cout << "这是一个新系统,无学生信息。请先输入。" << endl;
else
{
while (!in.eof())
{
End->ReadFile(in);
if (End->name[0] == '\0')break;
End->Next = new Student;
End = End->Next;
}
in.close();
cout << "\t\t读取学生信息成功!" << endl;
}


}


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~析构函数~~~~~~~~~~~~~~~~~~~~~~~~~


Studentmassage::~Studentmassage()
{
Save();
for (Student*temp; Head->Next != End;)
{
temp = Head->Next;
Head->Next = Head->Next->Next;
delete temp;
}
delete Head, End;
}


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~菜单~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
void Studentmassage::Show()
{
cout << "                                                         " << endl;
cout << "                                                    大 学 生 成 绩 管 理 系  统      " << endl;
cout << "                                                                                        " << endl;
cout << "                                                         1.增加学生成绩                " << endl;
cout << "                                                         2.显示学生成绩                 " << endl;
cout << "                                                         3.排序统计成绩                  " << endl;
cout << "                                                         4.查找学生成绩               " << endl;
cout << "                                                         5.删除学生成绩                 " << endl;
cout << "                                                         6.修改学生信息                     " << endl;
cout << "                                                         7.清空表中数据                    " << endl;
cout << "                                                         0.安全退出系统                   " << endl;
cout << "                                                (注意:  安全退出系统才能保存) " << endl;
cout << "\n\t\t\n\t\t请选择:";
}




//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~查找函数~~~~~~~~~~~~~~~~~~~~~~~~~~ 
void Studentmassage::Find()
{
char name[20], Id[10];
int x;
Student *p = NULL;
cout << "\n\t\t·················\n";
cout << "\t\t※ 1.按学生的姓名查找\n\t\t※ ···\n";
cout << "\t\t※ 2.按学生的学号查找\n\t\t※ ···\n";
cout << "\t\t················\n请选择:";
cin >> x;
switch (x)
{
case 1: 
{
cout << "\t\t请输入要查找的学生姓名:"; cin >> name;
if (p = FindItem(name))
{
p->Next->Show();
cout << "输入任意字符!继续……";
_getch();
break;
}
else
{
cout << "\t\t没有找到该姓名的学生!" << '\n' << endl;
cout << "输入任意字符!继续……";
_getch();
break;
}
}
case 2:
{
cout << "\t\t请输入要查找的学生的学号:"; cin >> Id;
if (p = FindID(Id))
{
p->Next->Show();
cout << "请输入任意字符!继续......";
_getch();
break;
}
else
{
cout << "\t\t没有找到该学号的学生!" << '\n' << endl;
cout << "输入任意字符!继续......";
_getch();
break;
}
}

}
}








//~~~~~~~~~~~~~~~~~~~~~~~~~~~~修改信息~~~~~~~~~~~~~~~~~~~~~~~~~~~
void Studentmassage::Modify()    //修改信息
{
char name[20];
Student  *  p = NULL;
cout << "\t\t请输入要修改的人的姓名:"; cin >> name;
if (p = FindItem(name))
{
cout << "\t\t已找到学生的信息,请输入新的信息!" << endl;
p->Next->Input();
cout << "修改成功!" << endl;
cout << "输入任意字符!继续.....";
_getch();
}
else
{
cout << "\t\t没有找到!" << endl;
cout << "输入任意字符!继续......";
_getch();
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~删除信息~~~~~~~~~~~~~~~~~~~~~~~
void Studentmassage::Remove()     //删除信息
{
char name[20];
Student  * p = NULL, *temp = NULL;
cout << "\t\t请输入要删除的学生的姓名:" << endl; cin >> name;
if (p = FindItem(name))
{
temp = p->Next;
p->Next = p->Next->Next;
delete temp;
cout << "\t\t删除成功!" << endl;
cout << "输入任意字符!继续.....";
_getch();
}
else
{
cout << "\t\t没有找到!" << endl;
cout << "输入任意字符!继续.....";
_getch();
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~排序副函数~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void Studentmassage::Swap(Student *p1, Student *p2)//交换两个combox变量的数据域
{
Student *temp = new Student;
strcpy_s(temp->name, p1->name);
strcpy_s(temp->Id, p1->Id);
strcpy_s(temp->grade1, p1->grade1);
strcpy_s(temp->class1, p1->class1);
temp->C = p1->C;
temp->Math = p1->Math;
temp->English = p1->English;
temp->PE = p1->PE;
temp->sum = p1->sum;
temp->ave = p1->ave;


strcpy_s(p1->name, p2->name);
strcpy_s(p1->Id, p2->Id);
strcpy_s(p1->grade1, p2->grade1);
strcpy_s(p1->class1, p2->class1);
p1->C = p2->C;
p1->Math = p2->Math;
p1->English = p2->English;
p1->PE = p2->PE;
p1->sum = p2->sum;
p1->ave = p2->ave;


strcpy_s(p2->name, temp->name);
strcpy_s(p2->Id, temp->Id);
strcpy_s(p2->grade1, temp->grade1);
strcpy_s(p2->class1, temp->class1);
p2->C = temp->C;
p2->Math = temp->Math;
p2->English = temp->English;
p2->PE = temp->PE;
p2->sum = temp->sum;
p2->ave = temp->ave;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int Studentmassage::List()//统计当前链表的记录总数,返回一个整数
{
if (!Head)
return 0;
int n = 0;
for (Student * p = Head->Next; p != End; p = p->Next)
{
n++;
}
return n;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~排序函数~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void Studentmassage::Sort()//对当前链表进行排序
{
cout << "排序中请稍后。。。。。。" << endl;
Student *p = NULL, *p1 = NULL, *k = NULL;
int n = Studentmassage::List();
if (n<2)
return;
for (p = Head->Next; p != End; p = p->Next)
for (k = p->Next; k != End; k = k->Next)
{
if (p->sum>k->sum)
{
Studentmassage::Swap(p, k);
}
}
cout << "排序完成!" << endl;
_getch();
return;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~成绩评定等级~~~~~~~~~~~~~~~~~~~~~~~~
void Studentmassage::gra()
{
int i;
i = ave;
switch (i / 10)
{
case 10:  grade = 'A'; break;
case 9:  grade = 'A';  break;
case 8:  grade = 'B';  break;
case 7:  grade = 'C';  break;
case 6:  grade = 'D';  break;
default:  grade = 'E';
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~清空数据~~~~~~~~~~~~~~~~~~~~~~~~~
void Studentmassage::del() //删除表中全部数据       


{
Student *p;
End = Head->Next;
while (End != NULL)
{
p = End->Next;
delete End;
End = p;
}
Head->Next = NULL;
End = Head;
cout << "                                         " << endl;
cout << "           表中内容全部清空              " << endl;
cout << "                                         " << endl;
cout << " "; system("pause");
}








//~~~~~~~~~~~~~~~~~~~~~~~~保存函数~~~~~~~~~~~~~~~~~~~~~~~~~~~~


void Studentmassage::Save()
{
out.open("sort.txt");
for (Student *p = Head->Next; p != End; p = p->Next)
out << p->name << "\t" << p->Id << "\t" << p->grade << "\t" << p->class1 << "\t" <<p->C++ << "\t"
<< p->Math << "\t" << p->English << "\t"  << p->PE << "\n" << p->sum << "\n" << p->ave << "\n";
out.close();
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~主函数~~~~~~~~~~~~~~~~~~~~~~~~
int main()
{
int x, i = 0;
bool quit = false;
cout << "========================================================================================================================" << endl;
for (i = 0; i<3; i++)
cout << "========================================================================================================================\n" << endl;
cout << "\t\t          ~~~~~~~~~~~~~~~~~~【  欢迎进入大学生成绩管理系统  】~~~~~~~~~~~~~~~~~~~~\n" << endl;
cout << "\t\t          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~制作人:~~~~~~~~~~~~~~~~~~~~~~~~~~\n" << endl;
cout << "\t\t          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~李心 高萌 谢佳佚~~~~~~~~~~~\n" << endl;
for (i = 0; i<3; i++)
cout << "========================================================================================================================\n" << endl;
cout << "========================================================================================================================\n" << endl;
Studentmassage Grade;
cout << "按任意键开始……";
_getch();
while (!quit)
{
system("cls");
Grade.Show();
cin >> x;
switch (x)
{
case 0:quit = true; break;
case 1:Grade.AddItem(); break;
case 2:Grade.Display(); break;
case 3:Grade.Sort(); break;
case 4:Grade.Find(); break;
case 5:Grade.Remove(); break;
case 6:Grade.Modify(); break;
case 7:Grade.del(); break;
}
}
return 0;

}

C++请问这个问题怎么改

相关文章: