📄 student.cpp
字号:
// Student.cpp: implementation of the Student class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "学生管理系统.h"
#include "Student.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Student::Student()
{
head = NULL;
tail = NULL;
}
Student::~Student()
{
}
void Student::CreateStudent(char name1[],char id1[],char sex1[],char politic1[],char addr1[],char bir1[],float mark1,float mark2,float mark3,float mark4,float mark5)
{
StudentInfo * p;
StudentInfo * q = head;
while(q)
{
if(!strcmp(q->id,id1))
{
AfxMessageBox("该学号已存在");
return; //若学号已存在则显示提示信息并返回
}
q=q->next;
}
p = (StudentInfo *)malloc(sizeof(StudentInfo));
if(!p)
{
AfxMessageBox("内存分配失败!");
return;
}
strcpy(p->name,name1);
strcpy(p->id,id1);
strcpy(p->sex,sex1);
strcpy(p->address,addr1);
strcpy(p->birthday,bir1);
strcpy(p->politicalface,politic1);
p->mark[0] = mark1;
p->mark[1] = mark2;
p->mark[2] = mark3;
p->mark[3] = mark4;
p->mark[4] = mark5;
if(head==NULL) //将新建的学生置于双向链表的结尾
{
head=tail=p;
p->prior=p->next=NULL;
}
else
{
p->prior=tail;
tail->next=p;
tail=p;
tail->next=NULL;
}
}
void Student::DeleteStudent(char id1[])
{
StudentInfo * r = head;
while(r)
{
if(!strcmp(r->id,id1)) //找到该学号
{
if(r->prior)
{
if(r->next)
{
r->next->prior=r->prior; //不在表头和表尾时删除该结点
r->prior->next=r->next;
}
else
{
r->prior->next=NULL; //在表尾时的删除
tail=r->prior;
}
}
else
{
if(r->next)
{
r->next->prior=NULL; //在表头时的删除
head=r->next;
}
else
{
head=tail=NULL;
}
}
AfxMessageBox("删除成功!");
return;
}
r=r->next;
}
AfxMessageBox("该学号不存在!");
}
void Student::SaveData()
{
fstream file;
StudentInfo * p;
file.open("Student.bin",ios::out|ios::binary);
for(p = head;p != NULL;p = p->next)
{
file.write((char *)p,sizeof(StudentInfo));
}
file.close();
}
void Student::ReadFile()
{
StudentInfo * p;
head = NULL;
tail = NULL;
fstream file;
file.open("Student.bin",ios::in|ios::binary);
file.seekg(0,ios::end);
if(file.tellg == 0)
{
AfxMessageBox("学生信息记录为空!");
return;
}
long length1=file.tellg(); //获取文件长度
long length2=sizeof(StudentInfo); //结点长度
long length;
length=length1/length2; //帐号条数
file.seekg(0,ios::beg);
while(length>0) //按条读取账号
{
p = (StudentInfo *)malloc(sizeof(StudentInfo));
file.read((char *)p,sizeof(StudentInfo));
if(head==NULL)
{
head=p;
tail=p;
head->prior=NULL;
head->next=NULL;
}
else
{
tail->next=p;
p->prior=tail;
tail=p;
tail->next=NULL;
}
length--;
}
file.close();
}
void Student::ChangeInformation(char name1[],char id1[],char sex1[],char politic1[],char addr1[],char bir1[],float mark1,float mark2,float mark3,float mark4,float mark5)
{
StudentInfo * p = head;
while(p)
{
if(!strcmp(p->name,name1)&&!strcmp(p->id,id1)) //找到该学生
{
strcpy(p->name,name1);
strcpy(p->id,id1);
strcpy(p->sex,sex1);
strcpy(p->address,addr1);
strcpy(p->birthday,bir1);
strcpy(p->politicalface,politic1);
p->mark[0] = mark1;
p->mark[1] = mark2;
p->mark[2] = mark3;
p->mark[3] = mark4;
p->mark[4] = mark5;
return;
}
p = p->next;
}
AfxMessageBox("该学号不存在!");
}
void Student::ShowStudent(char id1[],CListCtrl * pListCtrl)
{
StudentInfo * p;
int row = 0;
CString mn[5];
pListCtrl->DeleteAllItems();
for(p = head;p != NULL;p = p->next)
{
if(strcmp(p->id,id1)==0)
{
pListCtrl->InsertItem(row,"asd");
pListCtrl->SetItemText(row,0,p->name);
pListCtrl->SetItemText(row,1,p->id);
pListCtrl->SetItemText(row,2,p->sex);
pListCtrl->SetItemText(row,3,p->birthday);
pListCtrl->SetItemText(row,4,p->politicalface);
pListCtrl->SetItemText(row,5,p->address);
mn[0].Format("%0.0f",p->mark[0]);
pListCtrl->SetItemText(row,6,mn[0]);
mn[1].Format("%0.0f",p->mark[1]);
pListCtrl->SetItemText(row,7,mn[1]);
mn[2].Format("%0.0f",p->mark[2]);
pListCtrl->SetItemText(row,8,mn[2]);
mn[3].Format("%0.0f",p->mark[3]);
pListCtrl->SetItemText(row,9,mn[3]);
mn[4].Format("%0.0f",p->mark[4]);
pListCtrl->SetItemText(row,10,mn[4]);
AfxMessageBox("找到该学号!");
return; //找到则返回
}
else
continue;
}
AfxMessageBox("该学号不存在!");
}
void Student::ShowAll(CListCtrl* pListCtrl)
{
StudentInfo * p;
int row = 0;
CString mn[5];
pListCtrl->DeleteAllItems();
for(p = head;p != NULL;p = p->next)
{
pListCtrl->InsertItem(row,"asd");
pListCtrl->SetItemText(row,0,p->name);
pListCtrl->SetItemText(row,1,p->id);
pListCtrl->SetItemText(row,2,p->sex);
pListCtrl->SetItemText(row,3,p->birthday);
pListCtrl->SetItemText(row,4,p->politicalface);
pListCtrl->SetItemText(row,5,p->address);
mn[0].Format("%0.0f",p->mark[0]);
pListCtrl->SetItemText(row,6,mn[0]);
mn[1].Format("%0.0f",p->mark[1]);
pListCtrl->SetItemText(row,7,mn[1]);
mn[2].Format("%0.0f",p->mark[2]);
pListCtrl->SetItemText(row,8,mn[2]);
mn[3].Format("%0.0f",p->mark[3]);
pListCtrl->SetItemText(row,9,mn[3]);
mn[4].Format("%0.0f",p->mark[4]);
pListCtrl->SetItemText(row,10,mn[4]);
row++;
}
}
void Student::Shaixuan(char politic1[],CListCtrl * pListCtrl)
{
StudentInfo * p = head;
int row = 0;
CString mn[5];
pListCtrl->DeleteAllItems();
for(p = head;p != NULL;p = p->next)
{
if(strcmp(p->politicalface,politic1)==0)
{
pListCtrl->InsertItem(row,"asd");
pListCtrl->SetItemText(row,0,p->name);
pListCtrl->SetItemText(row,1,p->id);
pListCtrl->SetItemText(row,2,p->sex);
pListCtrl->SetItemText(row,3,p->birthday);
pListCtrl->SetItemText(row,4,p->politicalface);
pListCtrl->SetItemText(row,5,p->address);
mn[0].Format("%0.0f",p->mark[0]);
pListCtrl->SetItemText(row,6,mn[0]);
mn[1].Format("%0.0f",p->mark[1]);
pListCtrl->SetItemText(row,7,mn[1]);
mn[2].Format("%0.0f",p->mark[2]);
pListCtrl->SetItemText(row,8,mn[2]);
mn[3].Format("%0.0f",p->mark[3]);
pListCtrl->SetItemText(row,9,mn[3]);
mn[4].Format("%0.0f",p->mark[4]);
pListCtrl->SetItemText(row,10,mn[4]);
continue;
}
else
continue;
row++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -