下面是程序实现的功能:
程序中将5门课程定为:语文、数学、英语、物理、化学
下面是程序的运行截图:
话不多说!直接上代码!!!
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#define MAX 1005
using namespace std;
class stud
{
private:
typedef struct Node
{
string numebr; //学号
string name; //姓名
string sex; //性别
int age; //年龄
double score[5]; //五门成绩,假定为语数英物化
double sum; //总成绩
struct Node *next;
}node,*list;
list head = new node;
int sum;
public:
stud()
{
sum = 0;
}
~stud() {}
//初始化
void Init()
{
head->next = NULL;
}
//创建链表
void Create()
{
list p = head;
ifstream read("student.txt");
if (!read)
{
cout << "文件打开失败!退出系统!\n";
exit(0);
}
while (!read.eof())
{
list s = new node;
read >> s->numebr >> s->name >> s->sex >> s->age;
if (s->age >= 0 && s->age <= 200)
{
sum++;
}
s->sum = 0;
for (int i = 0; i < 5; i++)
{
read >> s->score[i];
s->sum += s->score[i];
}
s->next = NULL;
p->next = s;
p = p->next;
}
read.close();
}
//满返回1
bool Full()
{
return (sum < MAX ? 0 : 1);
}
//空返回1
bool Empty()
{
return (sum == 0 ? 1 : 0);
}
//销毁
void Destroy()
{
list p = head->next, q = NULL;
while (p)
{
q = p->next;
delete p;
p = q;
}
if (head)
{
delete head;
head = NULL;
}
}
//保存到文本中
void write()
{
ofstream Str("student.txt", ios_base::trunc);
if (!Str)
{
printf("文件存入失败!\n");
return;
}
list p = head->next;
while (p)
{
Str << p->numebr << " " << p->name << " " << p->sex << " " << p->age<<" ";
for (int i = 0; i < 4; i++)
{
Str << p->score[i] << " ";
}
Str << p->score[4] ;
if (p->next)
{
Str << endl;
}
p = p->next;
}
Str.close();
}
//按学号查询
bool query(string n)
{
list p = head->next;
while (p)
{
if (p->numebr == n)
{
cout << "学号 姓名 性别 年龄 数学 语文 英语 物理 化学\n";
cout << setiosflags(ios::fixed) << setprecision(10) << p->numebr
<<" "<< setiosflags(ios::fixed) << setprecision(10) << p->name
<<" "<< setiosflags(ios::fixed) << setprecision(10) << p->sex
<<" "<< setiosflags(ios::fixed) << setprecision(6) << p->age
<<" "<< setiosflags(ios::fixed) << setprecision(2) << p->score[0]
<<" "<< setiosflags(ios::fixed) << setprecision(2) << p->score[1]
<<" "<< setiosflags(ios::fixed) << setprecision(2) << p->score[2]
<<" "<< setiosflags(ios::fixed) << setprecision(2) << p->score[3]
<<" "<< setiosflags(ios::fixed) << setprecision(2) << p->score[4] << endl;
return 1;
}
p = p->next;
}
return 0;
}
//添加信息
void add()
{
if (Full())
{
cout << "当前人数已达上限!\n";
return;
}
list s=new node;
string n;
cout << "请输入学号:";
cin >> n;
if (query(n))
{
cout << "该学号已存在!\n";
}
else
{
s->numebr = n;
cout << "请输入姓名:";
cin >> s->name;
cout << "请输入性别:";
cin >> s->sex;
cout << "请输入年龄:";
cin >> s->age;
cout << "请输入语数英物化:" << endl;
s->sum = 0;
for (int i = 0; i < 5; i++)
{
cin >> s->score[i];
s->sum += s->score[i];
}
cout << "添加成功!\n";
s->next = NULL;
list p = head;
while (p->next)
{
p = p->next;
}
p->next = s;
sum++;
}
}
//删除信息
void del()
{
if (Empty())
{
cout << "当前无学生信息,无法删除!\n";
return;
}
string n;
cout << "请输入学号:";
cin >> n;
list p =head,q;
bool flag=0;
while(p->next)
{
if (p->next->numebr == n&&p->next->next)
{
q = p->next;
p->next = p->next->next;
delete q;
flag = 1;
}
else if(p->next->numebr == n&& p->next->next==NULL)
{
q = p->next;
p->next = NULL;
delete q;
flag = 1;
break;
}
p = p->next;
}
if (flag)
{
sum--;
cout << "删除成功!\n";
}
else
{
cout << "该学号不存在!无法删除!\n";
}
}
//显示人数
void people()
{
cout << "当前学生人数:" << sum << "人" << endl;
}
//修改年龄
void modify()
{
string n;
cout << "请输入学号:";
cin >> n;
list p = head->next;
bool flag = 0;
while (p)
{
if (p->numebr == n)
{
cout << "请输入年龄:";
int ag;
cin >> ag;
p->age = ag;
flag = 1;
}
p = p->next;
}
if (flag)
{
cout << "修改成功!\n";
}
else
{
cout << "不存在该学号,无法修改!\n";
}
}
//男女人数
void pe()
{
int nan = 0, nv = 0;
list p = head->next;
while (p)
{
if (p->sex == "男") nan++;
else if (p->sex == "女") nv++;
p = p->next;
}
cout << "男生人数:" << nan << endl;
cout << "女生人数:" << nv << endl;
}
//按总成绩从小到大排序
void display()
{
if (Empty())
{
cout << "暂无学生信息!\n";
return;
}
list p = NULL;
list q = NULL;
list s = NULL;
while (head->next != s)
{
p = head;
q = head->next;
while (q->next != s)
{
if (q->sum > q->next->sum)
{
p->next = q->next;
q->next = q->next->next;
p->next->next = q;
q = p->next;
}
q = q->next;
p = p->next;
}
s = q;
}
cout << "学号 姓名 总分数\n";
p = head->next;
while (p)
{
cout << setiosflags(ios::fixed)<< p->numebr <<setw(7)
<< " " << setiosflags(ios::fixed) << p->name << setw(7)
<< " " << setiosflags(ios::fixed) << setprecision(2) << p->sum << endl;
p = p->next;
}
}
//显示学生信息
void show()
{
list p = head->next;
cout << "学号 姓名 数学 语文 英语 物理 化学 总分数 平均分\n";
while (p)
{
cout << setiosflags(ios::fixed) << setprecision(10) << p->numebr
<< " " << setiosflags(ios::fixed) << setprecision(10) << p->name
<< " " << setiosflags(ios::fixed) << setprecision(2) << p->score[0]
<< " " << setiosflags(ios::fixed) << setprecision(2) << p->score[1]
<< " " << setiosflags(ios::fixed) << setprecision(2) << p->score[2]
<< " " << setiosflags(ios::fixed) << setprecision(2) << p->score[3]
<< " " << setiosflags(ios::fixed) << setprecision(2) << p->score[4]
<< " " << setiosflags(ios::fixed) << setprecision(2) << p->sum
<< " " << setiosflags(ios::fixed) << setprecision(2) << p->sum/5 << endl;
p = p->next;
}
}
//某课的最高分
void high()
{
char select;
cout << "1、语文\n";
cout << "2、数学\n";
cout << "3、英语\n";
cout << "4、物理\n";
cout << "5、化学\n";
cout << "请选择\n";
cin >> select;
if (select > '5'&&select < '1')
{
cout << "选择错误!\n";
}
else
{
float max_score=0;
list p = head;
while (p)
{
if (p->score[select - '0' - 1] > max_score)
{
max_score = p->score[select - '0' - 1];
}
p = p->next;
}
p = head->next;
cout << "学号 姓名 分数\n";
while (p)
{
if (p->score[select - '0' - 1] == max_score)
{
cout << setiosflags(ios::fixed) << p->numebr << setw(7)
<< " " << setiosflags(ios::fixed) << p->name << setw(7)
<< " " << setiosflags(ios::fixed) << setprecision(2) << p->score[select - '0' - 1] << endl;
}
p = p->next;
}
}
}
//菜单
void menu()
{
char s;
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 << "0、退出系统\n";
cout << "请选择(0-8):";
cin >> s;
switch (s)
{
case '0':
cout << "欢迎下次使用!\n";
Destroy();
exit(0);
break;
case '1':
add();
write();
people();
break;
case '2':
del();
write();
people();
break;
case '3':
modify();
write();
break;
case '4':
{
cout << "请输入要查询的学号" << endl;
string n;
cin >> n;
if (query(n))
{
cout << "查询成功!\n";
}
else
{
cout << "该学号不存在!\n";
}
break;
}
case '5':
show();
break;
case '6':
high();
break;
case '7':
display();
break;
case '8':
pe();
break;
default:
cout << "选择错误!请重新选择!\n";
break;
}
system("pause");
system("cls");
}
};
int main()
{
stud st;
st.Init();
st.Create();
st.people();
cout << "欢迎使用!\n";
system("pause");
system("cls");
while (1)
{
st.menu();
}
return 0;
}