// ConsoleApplication5.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<string.h>
using namespace std;
class Stu {
public:
char *m_name;
int m_ID;
float m_score;
int m_rank;
~Stu() {
delete[] m_name;
}
Stu()
{
m_name = new char[5];
strcpy_s(m_name, 5, "null");
m_ID = 0;
m_score = 0;
m_rank = 0;
}
Stu(const char *name, int ID, float score, int rank) :m_ID(ID), m_score(score), m_rank(rank)//此处需考虑name是否为空指针,如果为空指针,可抛出异常,我就不写了 太麻烦
{
m_name = new char[strlen(name) + 1];
strcpy_s(m_name, strlen(name) + 1, name);
}
Stu(const Stu& stu)
{
m_name = new char[strlen(stu.m_name) + 1];
strcpy_s(m_name, strlen(stu.m_name) + 1, stu.m_name);
m_ID = stu.m_ID;
m_score = stu.m_score;
m_rank = stu.m_rank;
}
Stu& operator=(const Stu& stu)
{
if (this == &stu)
{
return *this;
}
m_name = new char[strlen(stu.m_name) + 1];
strcpy_s(m_name, strlen(stu.m_name) + 1, stu.m_name);
m_ID = stu.m_ID;
m_score = stu.m_score;
m_rank = stu.m_rank;
return *this;
}
};
struct node {
int data;
Stu *stu;
node *next;
node(const char *name,int ID,float score,int rank) {
stu = new Stu(name, ID, score, rank);
next = NULL;
}
};
class list {
private:
node * m_list;
int count;
public:
list() {
m_list = NULL;
count = 0;
}
void creatList(int n);
void output();
void sort();
void add();
bool del(int m);
};
void list::creatList(int n)
{
const char *s = "null";
node *temp = new node(s,0,0,0);
node *temp1 = temp;
for (int i = 0;i<n;i++)
{
cout << "请输入第" << i + 1 << "个学生的信息\n";
char name[100];
cout << "请输入姓名\n";
cin >> name;
int ID;
cout << "请输入学号\n";
cin >> ID;
float score;
cout << "请输入分数\n";
cin >> score;
cout << "请输入排名\n";
int rank;
cin >> rank;
node *m = new node(name,ID,score,rank);
temp->next = m;
temp = temp->next;
}
temp->next = NULL;
m_list = temp1->next;
delete temp1;
count = n;
}
void list::output()
{
node *temp = m_list;
cout << "**********************************************************************\n";
cout << "姓名" << "\t" << "学号" << "\t" << "成绩" << "\t" << "排名" << endl;
while (temp != NULL)
{
cout << temp->stu->m_name << "\t"<<temp->stu->m_ID<<"\t"<<temp->stu->m_score<<"\t"<<temp->stu->m_rank<<endl;
temp = temp->next;
}
cout << endl;
cout << "**********************************************************************\n";
}
void list::sort()
{
node *s1 = m_list;
while (s1->next != NULL)
{
node *s2 = s1->next;
while (s2 != NULL)
{
if (s2->stu->m_score>s1->stu->m_score)
{
Stu *temp = s2->stu;
s2->stu = s1->stu;
s1->stu = temp;
}
s2 = s2->next;
}
s1 = s1->next;
}
node *s2 = m_list;
int i = 1;
while (s2 != NULL)
{
s2->stu->m_rank = i;
s2 = s2->next;
i++;
}
cout << "已排名" << endl;
}
void list::add()
{
node *s = m_list;
while (s->next != NULL)
{
s = s->next;
}
char name[100];
cout << "请输入姓名\n";
cin >> name;
int ID;
cout << "请输入学号\n";
cin >> ID;
float score;
cout << "请输入分数\n";
cin >> score;
cout << "请输入排名\n";
int rank;
cin >> rank;
node *temp = new node(name, ID, score, rank);
s->next = temp;
count++;
}
bool list::del(int ID)
{
if (m_list->stu->m_ID == ID)
{
node *temp = m_list->next;
delete m_list;
m_list = temp;
cout << "删除" << m_list->stu->m_ID << endl;
count--;
return true;
}
else {
node *temp1 = m_list;
while (temp1->next != NULL)
{
if (temp1->next->stu->m_ID == ID)
{
node *temp2 = temp1->next->next;
delete temp1->next;
temp1->next = temp2;
}
}
count--;
return true;
}
cout << "无此学号" << endl;
return false;
}
int main()
{
list l;
l.creatList(4);
l.output();
int m = 9999;
while (m != 0)
{
cout << "******************************" << endl;
cout << "1.显示列表" << endl;
cout << "2.排名" << endl;
cout << "3.删除" << endl;
cout << "4.插入" << endl;
cout << "******************************" << endl;
cout << "请选择功能\n";
cin >> m;
switch (m)
{
case 1:
{
l.output();
break;
}
case 2:
{
l.sort();
l.output();
break;
}
case 3:
{
int num;
cout << "请输入要删除学生的学号\n";
cin >> num;
if (l.del(num))
{
cout << "删除成功\n";
}
else
{
cout << "删除失败\n";
}
break;
}
case 4:
{
l.add();
cout << "添加成功" << endl;
l.output();
break;
}
default:
break;
}
}
return 0;
}