#include<iostream>
#include<fstream>
#include<string>
using namespace std;
struct Node
{
char name[20];
int num,chi,math,eng,id;
Node *next;
};
class Student
{
private:
Node *head;
public:
Student();
~Student();
void LinkList(); //建立链表
void Find(); //查找
void Insert(char *na,int i,int ch,int ma,int en); //插入
void Delete(); //删除
void Modify(); //修改
void Sort(); //排序,按总成绩按从小到大排序
void Copy(Node *temp,Node *p); //拷贝
void Print(); //显示
void Read(); //读入
void Save(); //保存
};
Student::Student()
{
head = new Node;
head->next = NULL;
}
Student::~Student()
{
Node *p;
while(head)
{
p = head;
head = head->next;
delete p;
}
head = NULL;
}
void Student::LinkList()
{
int i,n;
Node *p,*q;
cout<<"输入学生人数:";
cin>>n;
i=0;
q=head;
cout<<"输入学生信息:姓名 学号 语文、数学、英语成绩:"<<endl;
for(i=0;i<n;i++)
{
char na[20];
int x,ch,ma,en;
cin>>na>>x>>ch>>ma>>en;
Node *a;
a = head;
while(a->next && a->id!=x)
{a = a->next;}
if(a->id==x) {cout<<"该学号已存在"<<endl; return ;} //判断学号是否重复
else
{
p = new Node;
strcpy(p->name,na);
p->chi=ch;
p->id=x;
p->math=ma;
p->eng=en;
p->num=p->chi+p->math+p->eng;
p->next=q->next;
q->next=p;
p = p->next;
}
}
}
void Student::Find()
{
cout<<"请输入要查找学生的学号:";int i;
cin>>i;
Node *p;
p = head->next;
while(p->next && p->id!=i)
{p = p->next;}
if(p->id==i)
{
cout<<"学生信息:姓名:"<<p->name<<" 语文:"<<p->chi<<" 数学:"<<p->math<<" 英语:"<<p->eng<<" 总成绩:"<<p->num<<endl;
}
else cout<<"未找到该学生信息!"<<endl;
}
void Student::Insert(char *na,int i,int ch,int ma,int en)
{
Node *p,*q;
p = new Node;
strcpy(p->name,na);
p->id = i;
p->chi = ch;
p->math = ma;
p->eng = en;
p->num=ch+ma+en;
q = head;
p->next=q->next;
q->next = p;
}
void Student::Delete()
{
cout<<"请输入要查找学生的学号:";int i;
cin>>i;
Node *p,*temp;
p = head->next;
while(p->next && p->id!=i)
{p = p->next;}
if(p->id==i)
{
temp = p->next;
p->next = temp->next;
delete temp;
}
else
{
cout<<"未找到该学生信息!"<<endl;
}
}
void Student::Modify()
{
cout<<"请输入需要修改学生信息的学号:";int i;
cin>>i;
Node *p;
p = head->next;
while(p->next && p->id!=i)
{p = p->next;}
if(p->id==i)
{
char na[20];
int ch,ma,en;
cout<<"请输入新的姓名、语文成绩、数学成绩、英语成绩:";
cin>>na>>ch>>ma>>en;
strcpy(p->name,na);
p->chi = ch;
p->math = ma;
p->eng = en;
p->num=ch+ma+en;
}
else
{
cout<<"未找到该学号!"<<endl;
}
}
void Student::Copy(Node *temp,Node *p)
{
if(p == NULL)
{
cout<<"拷贝目标为空!"<<endl;
}
else
{
strcpy(temp->name,p->name);
temp->num = p->num;
temp->chi = p->chi;
temp->math = p->math;
temp->eng = p->eng;
temp->id = p->id;
}
}
void Student::Sort()
{
for(Node *p = head->next; p!=NULL; p=p->next)
for(Node *q = head->next; q!=NULL; q=q->next)
{
Node *temp = new Node;
Copy(temp,p);
Copy(p,q);
Copy(q,temp);
}
}
void Student::Print()
{
Node *p;
for(p = head->next; p!=NULL; p = p->next)
{
cout<<"姓名:"<<p->name<<" 学号:"<<p->id<<" 语文:"<<p->chi<<" 数学:"<<p->math<<" 英语:"<<p->eng<<" 总成绩:"<<p->num<<endl;
}
}
void Student::Read()
{
Node *p;
p = head;
ifstream in("Student.txt");
if(!in)
{
cout<<"文件是空的。\n";
return ;
}
char na[20];
while(in>>na)
{
int i,chi,ma,en;
in>>i>>chi>>ma>>en;
Insert(na,i,chi,ma,en);
}
in.close();
}
void Student::Save()
{
Node *p;
p = head->next;
ofstream out("Student.txt");
if (!out)
{
cout<<"无法打开文件。\n";
return ;
}
while(p != NULL)
{
out<<p->name<<" "<<p->id<<" "<<p->chi<<" "<<p->math<<" "<<p->eng<<'\n';
p = p->next;
}
out.close();
}
void menu()
{
cout<<"******************* 1.录入学生信息 *******************"<<endl;
cout<<"******************* 2.插入学生信息 *******************"<<endl;
cout<<"******************* 3.修改学生信息 *******************"<<endl;
cout<<"******************* 4.删除学生信息 *******************"<<endl;
cout<<"******************* 5.查找学生信息 *******************"<<endl;
cout<<"******************* 6.输出学生信息 *******************"<<endl;
cout<<"******************* 7.按成绩排序 *******************"<<endl;
cout<<"******************* 8.文件读入学生信息 *******************"<<endl;
cout<<"******************* 9.保存学生信息 *******************"<<endl;
cout<<"******************* 0.安全退出 *******************"<<endl;
}
int main()
{
Student s;
int choice;
while(choice!=0)
{
menu();
cout<<"请输入选项:";
cin>>choice;
if(choice>=0 && choice<=8)
switch(choice)
{
case 0:s.Save(); break;
case 1:s.LinkList();break;
case 2:
cout<<"请输入要插入学生的姓名、学号、语文成绩、数学成绩、英语成绩:";
char na[20];
int i, ch, ma, en;
cin>>na>>i>>ch>>ma>>en;
s.Insert(na,i,ch,ma,en);
break;
case 3:s.Modify(); break;
case 4:s.Delete(); break;
case 5:s.Find(); break;
case 6:s.Print(); break;
case 7:s.Sort(); break;
case 8:
s.Read();
cout << "读入学生信息表:" << endl;
s.Print(); break;
case 9:s.Save(); break;
}
}
return 0;
}
课程设计:题目0学生档案管理系统
最新推荐文章于 2022-10-18 08:00:00 发布