# include <iostream>
# include <fstream>
# include <string.h>
#include <conio.h>//用getch();
using namespace std;
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Student
{//8
public:
char name[20];
char Id[20];
char age[20];
char xb[2];
char csny[20];
char dz[100];
char dh[15];
char mail[20];
Student * Next;
void Input()
{//20
printf("\t\t请输入学生的姓名:");
scanf("%s",&name);
printf("\t\t请输入学生的学号:");
scanf("%s",&Id);
printf("\t\t请输入学生的年龄:");
scanf("%s",&age);
printf("\t\t请输入学生的性别:"); scanf("%s",&xb);
printf("\t\t请输入学生的出生年月:");
scanf("%s",&csny);
printf("\t\t请输入学生的家庭地址:"); scanf("%s",&dz);
printf("\t\t请输入学生的电话:"); scanf("%s",&dh);
printf("\t\t请输入学生的E-mail:"); scanf("%s",&mail);
}
void ReadFile(istream & in)
{
in>>name>>Id>>age>>xb>>csny>>dz>>dh>>mail;
}
void Show()
{
printf("姓名:");printf("%s\n",name);
printf("学号:");printf("%s\n",Id);
printf("年龄:");printf("%s\n",age);
printf("性别:");printf("%s\n",xb);
printf("出生年月:"); printf("%s\n",csny);//40
printf("家庭地址:");printf("%s\n",dz);
printf("电话:");printf("%s\n",dh);
printf("E-mail:");printf("%s\n",mail);
}
};
//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Studentmassage
{
public:
Studentmassage();
~Studentmassage();
void ShowMenu();
void Find();
void Save();
void ModifyItem();
void RemoveItem();
void Sort();
//void Unpass();//60
int ListCount();
//void Average();
void Display()
{
for(Student * p=Head->Next;p!=End;p=p->Next)
p->Show();
printf("输入任意字符!继续……");
getch();
}
void AddItem()
{
End->Input();
End->Next=new Student;
End=End->Next;
printf("添加成功!\n");
printf("输入任意字符!继续……");
getch();
}
private:
Student * Head,* End;//80
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;
}
};
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::Studentmassage()
{
Head=new Student;//100
Head->Next=new Student;
End=Head->Next;
in.open("sort.txt");
if(!in)
printf("这是一个新系统,无学生信息。请先输入。\n");
else
{
while(!in.eof())
{
End->ReadFile(in);
if(End->name[0]=='\0')break;
End->Next=new Student;
End=End->Next;
}
in.close();
printf("\t\t读取学生信息成功!");
}
}
//120
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::~Studentmassage()
{
Save();
for(Student * temp;Head->Next!=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
delete temp;
}
delete Head,End;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ShowMenu()
{
printf("********************************************************************************\n");
printf("〓〓〓〓〓〓〓〓〓
☆
学 生 基 本 信 息 管 理 系 统
☆
〓〓〓〓〓〓〓〓〓\n");
printf("〓〓〓〓〓〓〓★★★★★
★★★★★★★
★★★★★〓〓〓〓〓〓〓\n");//140
printf("〓〓〓〓〓〓〓〓〓★
☆
1.增加学生信息
☆
★〓〓〓〓〓〓〓〓〓\n");
printf("〓〓〓〓〓〓〓〓〓★
☆
2.查看学生信息
☆
★〓〓〓〓〓〓〓〓〓\n");
printf("〓〓〓〓〓〓〓〓〓★
☆
3.排序统计学生信息
☆
★〓〓〓〓〓〓〓〓〓\n");
printf("〓〓〓〓〓〓〓〓〓★
☆
4.查寻学生信息
☆
★〓〓〓〓〓〓〓〓〓\n");
printf("〓〓〓〓〓〓〓〓〓★
☆
5.删除学生信息
☆
★〓〓〓〓〓〓〓〓〓\n");
printf("〓〓〓〓〓〓〓〓〓★
☆
6.修改学生信息
☆
★〓〓〓〓〓〓〓〓〓\n");
printf("〓〓〓〓〓〓〓〓〓★
☆
0.安全退出系统
☆
★〓〓〓〓〓〓〓〓〓\n");
printf("\n\t\t\n\t\t请选择:");
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Find()
{
char name[20] ,Id[20];
int x;
Student * p=NULL;
printf("\n\t\t*********************************\n");
printf("\t\t※ 1.按学生的姓名查找\n\t\t※ 2.按学生学号查找");
printf("\n\t\t*********************************\n请选择:");//160
scanf("%d",&x);
switch(x)
{
case 1:{printf("\t\t请输入要查找的学生的姓名:");scanf("%s",&name);
if(p=FindItem(name))
{
p->Next->Show();
printf("输入任意字符!继续……");
getch();
}
else
{
printf("\t\t没有找到该姓名的学生!\n\n");
printf("输入任意字符!继续……");
getch();
}
}break;
case 2:
{
printf("\t\t请输入要查找的学生的学号:");scanf("%s",&Id);//180
if(p=FindID(Id))
{
p->Next->Show();
printf("输入任意字符!继续……");
getch();
}
else
{
printf("\t\t没有找到该学号的学生!\n\n");
printf("输入任意字符!继续……");
getch();
}
}break;
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ModifyItem()
//修改信息
{//200
char name[20];
Student * p=NULL;
printf("\t\t请输入要修改的人的姓名:");scanf("%s",&name);
if(p=FindItem(name))
{
printf("\t\t已找到学生的信息,请输入新的信息!\n");
p->Next->Input();
printf("修改成功!\n");
printf("输入任意字符!继续……");
getch();
}
else
{
printf("\t\t没有找到!\n");
printf("输入任意字符!继续……");
getch();
}
}
//220﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::RemoveItem()
// 删除信息
{
char name[20];
Student * p=NULL,*temp=NULL;
printf("\t\t请输入要删除的学生的姓名:\n");scanf("%s",&name);
if(p=FindItem(name))
{
temp=p->Next;
p->Next=p->Next->Next;
delete temp;
printf("\t\t删除成功!\n");
printf("输入任意字符!继续……");
getch();
}
else
{
printf("\t\t没有找到!\n");
printf("输入任意字符!继续……");
getch();
}//240
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int Studentmassage::ListCount()//统计当前链表的记录总数,返回一个整数
{
if( Head)
return 0;
int n=0;
for(Student * p=Head->Next;p!=End;p=p->Next)
{
n++;
}
return n;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Sort()//对当前链表进行排序
{
printf("Sorting...\n");
Student *p=NULL,*p1=NULL,*k=NULL;
int n=Studentmassage::ListCount();
if(n<2)
return;
for(p=Head->Next;p!=End;p=p->Next)
for(k=p->Next;k!=End;k=k->Next)
{
if(p->Id>k->Id)
{
}
}
printf("排序完成!\n");
getch();
return;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
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->age<<"\t"
<<p->xb<<"\t"<<p->csny<<"\t"<<p->dz<<p->dh<<p->mail<<'\n';
out.close();
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int main()
{
int x,i=0;
bool quit=false;
printf("\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§§\n");
for(i=0;i<3;i++)
printf("\t\t◎\t\t\t\t\t\t
◎\n");
printf("\t\t◎★★★★【 欢迎进入学生基本信息管理系统 】★★★★◎\n");
for(i=0;i<3;i++)
printf("\t\t◎\t\t\t\t\t\t
◎\n");
printf("\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§§\n");;
Studentmassage Grade;
printf("按任意键开始……");
getch();
while(!quit)
{
system("cls");
Grade.ShowMenu();
scanf("%d",&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.RemoveItem();break;
case 6:Grade.ModifyItem();break;
}
}
return 0;
}