也不知道哪里出了问题,最后有截图
#include <iostream>
#include<stdlib.h>
#include <fstream>
#include <cstdlib>
using namespace std;
struct sleep {
char name;//姓名
int id;//学号
int Math;//数学成绩
int Chinese;//语文成绩
int English;//英语成绩
int total;//总成绩
sleep* bed;
};
class Student {
public:
Student() {//构造函数
dream = new sleep;
dream->bed = NULL;
}
~Student(){//析构函数
sleep* hard;
while (dream) {
hard = dream;
dream = dream->bed;
delete hard;
}
dream = NULL;
}
void creat();
void add(char sname, int sid, int smath, int schinese, int senglish);
void edit(char sname, int sid, int smath, int schinese, int senglish);
void deleted(int sid);
sleep *find(int sid);
void count();
void copy(sleep* temp, sleep* p);//学生信息拷贝
void arrange(int mod);
void gradepage();
private:
sleep* dream;
};
void menuscreen()//程序开始的菜单界面
{
cout << "学生信息管理程序\n";
cout << "*****************\n";
cout<<"1--创建成绩单\n";
cout << "2--添加学生\n";
cout << "3--编辑学生\n" ;
cout << "4--删除学生\n";
cout << "5--查找学生\n";
cout << "6--统计成绩\n";
cout << "7--排序成绩\n";
cout << "8--显示成绩\n";
cout << "9--Quit\n";
}
void Student::creat()//创建成绩单
{
cout << "开始创建成绩单!\n";
int n;
sleep* p, * s;
p = dream;
cout << "please enter the number of the student:";
cin >> n;
for (int i = 0; i <= n; i++)
{
s = new sleep;
cout << "please enter student" << i + 1 << "'s Name:";
cin >> s->name;
cout << "please enter student" << i + 1 << "'s ID:";
cin >> s->id;
cout << "please enter student" << i + 1 << "'s Math Score:";
cin >> s->Math;
cout << "please enter student" << i + 1 << "'s Chinese Score:";
cin >> s->Chinese;
cout << "please enter student" << i + 1 << "'s English Score:";
cin >> s->English;
s->total = s->Math + s->Chinese + s->English;
s->bed = p->bed;//s的值赋给p
p->bed = s;
p = p->bed;
}
if (p == NULL) //判断成绩单是否创建成功
{
cout << "error!";
creat();
}
else cout << "创建成功!";
}
void Student::add(char sname, int sid,int smath, int schinese, int senglish)//在第一个位置插入学生
{
cout <<"开始添加学生!\n";
sleep* s, * p;
s = new sleep;
cout << "please enter name:"; cin >> sname;
cout << "please enter id:"; cin >> sid;
cout << "please enter math:"; cin >> smath;
cout << "please enter chinese:"; cin >> schinese;
cout << "please enter english:"; cin >> senglish;
s->name = sname;
s->id = sid;
s->Math = smath;
s->Chinese = schinese;
s->English = senglish;
s->total = s->Math + s->Chinese + s->Chinese;
p = dream;
s->bed = p->bed;
p->bed = s;
cout << "添加完成!";
}
void Student::edit(char sname, int sid, int smath, int schinese, int senglish)
{
cout << "开始编辑学生!\n";
sleep* a = find(sid); //调用查找函数
if (a != NULL)
{
a->name = sname;
a->id = sid;
a->Math = smath;
a->Chinese = schinese;
a->English = senglish;
a->total = a->Math + a->Chinese + a->English;
}
cout << "编辑完成!";
}
void Student::deleted(int sid)
{
cout << "开始删除学生!\n";
sleep* p, * ptemp;
p = dream;
ptemp = p;
while (p->bed && p->id != sid)//循环终止条件为p->bed不为空而且没有找到对应学号的学生
{
ptemp = p;
p = p->bed;
}
if (p->id == sid)
{
ptemp->bed = p->bed;
delete p;
cout << "删除完成!";
}
else
{
cout << "error!" << endl;
}
}
sleep *Student::find(int sid)
{
cout << "开始查找学生!\n";
sleep* p;
p = dream->bed;
while (p->bed && p->id != sid) //循环终止条件为p->bed不为空 而且没有找到相应学号的学生
{
p = p->bed;
}
if (p->id ==sid)
{
return p;//输出学生信息
}
else
{
cout << "未找到该学生信息!" << endl;
return NULL;
}
}
void Student::count()
{
cout << "开始统计成绩!\n";
int grade[3] = {};
sleep* p = dream->bed;
while (p != NULL)
{
if (p->Math>=90)
{
grade[0]++;
}
else if (p->Chinese>=90)
{
grade[1]++;
}
else if (p->English>=90)
{
grade[2]++;
}
p = p->bed;
}
cout << "数学优秀" << '\t' << "语文优秀" << '\t' << "英语优秀" << '\t' << endl;
for (int i = 0; i < 3; i++)
{
cout << grade[i] << '\t';
}
cout << endl;
}
void Student::copy(sleep *temp,sleep *p) {
if (p == NULL)
{
cout << "拷贝目标为空!";
}
else
{
temp->bed = p->bed;//将p的信息复制到temp中
}
}
void Student::arrange(int mod) {
cout << "开始排序成绩单!\n";
if (mod==1)//升序排列
{
for (sleep* p = dream->bed; p != NULL; p = p->bed)
{
for (sleep* q = dream->bed; q != NULL; q = q->bed)
{
if (p->total > q->total)
{
sleep* temp = new sleep;
copy(temp, p);
copy(p, q);
copy(q, temp);
}
}
}
}
else if (mod==2)//降序排列
{
for (sleep* p = dream->bed; p != NULL; p = p->bed)
{
for (sleep* q = dream->bed; q != NULL; q = q->bed)
{
if (p->total < q->total)
{
sleep* temp = new sleep;
copy(temp, p);
copy(p, q);
copy(q, temp);
}
}
}
}
else if (mod==3)//按学号排序
{
for (sleep* p = dream->bed; p != NULL; p = p->bed)
{
for (sleep* q = dream->bed; q != NULL; q = q->bed)
{
if (p->id < q->id)
{
sleep* temp = new sleep;
copy(temp, p);
copy(p, q);
copy(q, temp);
}
}
}
cout<<"排序完成!";
}
else
{
cout << "error!" << endl;
}
}
void Student::gradepage()//输出学生信息
{
cout<<"Gradepage!";
sleep* p;
cout << "姓名"<<'\t'<<"学号" << '\t' << "数学" << '\t' << "英语" << '\t' << "语文" << '\t' << "总分" << endl;
for (p = dream->bed; p != NULL; p = p->bed)
{
cout << p->name << '\t' << p->id << '\t' << p->Math << '\t' << p->Chinese << '\t' << p->English << '\t' << p->total << endl;
}
}
int main() {
char sname{};
int sid{}; int smath{}; int schinese{}; int senglish{}; int mod{};
for(;;){
int s;
Student tired;
menuscreen();
cout << "Please select a number:";//选择菜单编号
cin >> s;
switch (s)
{
case 1: tired.creat(); tired.gradepage(); break;
case 2: tired.add(sname,sid, smath,schinese,senglish); tired.gradepage(); break;
case 3: tired.edit(sname, sid, smath, schinese, senglish); tired.gradepage(); break;
case 4: tired.deleted(sid); tired.gradepage(); break;
case 5:tired.find(sid); break;
case 6: tired.count();
break;
case 7: tired.arrange(mod);
int mod;
cout << "你需要如何排序:\n";
cout << "1——按总成绩升序排列\n";
cout << "2——按总成绩降序排列\n";
cout << "3——按学号升序排列\n";
cin >> mod;
if (mod == 1 || mod == 2 || mod == 3)
{
tired.gradepage();
}
else
{
cout << "请输入正确选择!" << endl;
}
break;
case 8:tired.gradepage(); break;
case 9:goto end; break;//引用标签end,如果选择9,则退出
default:cout << "error!"; break;
}
system("pause");
end:system("pause");//end的定义
}
return 0;
}