C++实现简单的学生管理系统
C++实现简单的学生管理系统
//Student.cpp
#include<iostream>
usingnamespacestd;
structStu
{
charno[10];
charname[16];
intmath;
intchi;
doubleave;
};
classStudent
{
public:
Stust;
Student*next;
public:
Student(){}
Student(Stus)
{
st=s;
next=NULL;
st.ave=(st.math+st.chi)/2.0;
}
voidsetst(Stus)
{
st=s;
st.ave=(st.math+st.chi)/2.0;
}
Stugetst()
{
returnst;
}
voidshow()
{
cout<<"----------------------------"<<endl;
cout<<"学号:"<<st.no<<endl;
cout<<"姓名:"<<st.name<<endl;
cout<<"数学成绩:"<<st.math<<endl;
cout<<"语文成绩:"<<st.chi<<endl;
cout<<"平均成绩:"<<st.ave<<endl;
cout<<"----------------------------"<<endl;
}
};
//main.cpp
#include<fstream>
#include"Student.cpp"
usingnamespacestd;
Student*create_List();
voidtraverse_List(Student*pHead);
boolis_empty(Student*pHead);
intlength_List(Student*pHead);
boolinsert_List(Student*pHead,intposition,Stust);
booldelete_List(Student*pHead,intposition,Stu*st);
voidsort_List(Student*pHead);
voidmenu_select();
voidhandle_menu(ints);
voidoutFile();
Student*inFile();
voiddelFile();
Student*pHead;
voidmain()
{
menu_select();
}
voidmenu_select()
{
ints;
cout<<"请输入您要操作的选项:"<<endl;
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<<endl;
cout<<"左边数字对应功能选择,请选择1-9:";
cin>>s;
handle_menu(s);
}
voidhandle_menu(ints)
{
switch(s)
{
case1:
{
system("cls");
pHead=create_List();
system("cls");
menu_select();
break;
}
case2:
{
if(NULL==pHead)
{
cout<<"记录总条数为零"<<endl;
getchar();
getchar();
system("cls");
menu_select();
}
system("cls");
sort_List(pHead);
traverse_List(pHead);
getchar();
getchar();
system("cls");
menu_select();
break;
}
case3:
{
if(pHead!=NULL)
{
system("cls");
outFile();
system("cls");
menu_select();
}
system("cls");
menu_select();
break;
}
case4:
{
system("cls");
pHead=inFile();
system("cls");
menu_select();
break;
}
case5:
{
system("cls");
delFile();
system("cls");
menu_select();
break;
}
case6:
{
if(NULL==pHead)
{
cout<<"记录总条数为零"<<endl;
getchar();
getchar();
system("cls");
menu_select();
}
system("cls");
intnum;
Stust;
traverse_List(pHead);
cout<<"您想在哪条记录后插入,请输入序号:";
cin>>num;
cout<<"编辑要插入的记录:"<<endl;
cout<<"学号:";
cin>>st.no;
cout<<"姓名:";
cin>>st.name;
cout<<"数学成绩:";
cin>>st.math;
cout<<"语文成绩:";
cin>>st.chi;
if(insert_List(pHead,num-1,st))
{
cout<<"插入成功!"<<endl;
}
else
{
cout<<"插入失败!"<<endl;
}
getchar();
getchar();
system("cls");
menu_select();
break;
}
case7:
{
if(NULL==pHead)
{
cout<<"记录总条数为零"<<endl;
getchar();
getchar();
system("cls");
menu_select();
}
intnum;
Stu*st=(Stu*)malloc(sizeof(Stu));
traverse_List(pHead);
cout<<endl<<"请输入您要删除的记录的序号:";
cin>>num;
if(delete_List(pHead,num,st))
{
cout<<endl<<"成功删除的记录如下:"<<endl;
cout<<"学号:"<<st->no<<endl<<"姓名:"<<st->name<<endl;
}
else
{
cout<<"删除失败!"<<endl;
}
getchar();
getchar();
system("cls");
menu_select();
break;
}
case8:
{
if(NULL!=pHead)
{
system("cls");
cout<<"记录总条数:"<<length_List(pHead)<<"条"<<endl;
getchar();
getchar();
system("cls");
menu_select();
}
else
{
cout<<"记录总条数为零"<<endl;
getchar();
getchar();
system("cls");
menu_select();
}
break;
}
case9:
{
system("cls");
cout<<"成功退出!"<<endl;
exit(0);
break;
}
}
}
voiddelFile()
{
ofstreamfileout;
fileout.open("c:\\kcsj.txt",ios_base::out);
fileout<<"";
fileout.close();
}
Student*inFile()
{
Student*pHead=(Student*)malloc(sizeof(Student));
if(NULL==pHead)
{
cout<<"分配失败,程序终止!"<<endl;
exit(0);
}
Student*pTail=pHead;
pTail->next=NULL;
ifstreamin("c:\\kcsj.txt");
if(!in.is_open())
{
cout<<"Erroropeningfile"<<endl;
exit(0);
}
while(!in.eof())
{
Stust;
in.read(reinterpret_cast<char*>(&st),sizeof(st));
if(in.fail())
{
break;
}
Student*pNew=newStudent();
if(NULL==pNew)
{
printf("分配失败,程序终止\n");
exit(0);
}
pNew->setst(st);
pTail->next=pNew;
pNew->next=NULL;
pTail=pNew;
}
in.close();
returnpHead;
}
voidoutFile()
{
ofstreamout;
out.open("c:\\kcsj.txt",ios_base::out|ios_base::app|ios::binary);
if(!out)
{
cout<<"文件不存在,退出时别忘记保存文件!"<<endl;
out.close();
out.open("stu.dat",ios_base::out|ios::binary);
}
else
{
out.close();
out.open("c:\\kcsj.txt",ios_base::out|ios_base::app|ios::binary);
}
Student*temp=pHead->next;
while(temp!=NULL)
{
Stust=temp->getst();
out.write(reinterpret_cast<char*>(&st),sizeof(st));
temp=temp->next;
}
out.close();
}
Student*create_List()
{
intlen;
Student*pHead=(Student*)malloc(sizeof(Student));
if(NULL==pHead)
{
cout<<"分配失败,程序终止!"<<endl;
exit(0);
}
Student*pTail=pHead;
pTail->next=NULL;
cout<<"请输入要存储的学生人数:";
cin>>len;
for(inti=0;i<len;i++)
{
Stust;
cout<<"请输入第"<<i+1<<"个学生的学号:";
cin>>st.no;
cout<<"请输入第"<<i+1<<"个学生的姓名:";
cin>>st.name;
cout<<"请输入第"<<i+1<<"个学生的数学成绩:";
cin>>st.math;
cout<<"请输入第"<<i+1<<"个学生的语文成绩:";
cin>>st.chi;
Student*pNew=newStudent();
if(NULL==pNew)
{
printf("分配失败,程序终止\n");
exit(0);
}
pNew->setst(st);
pTail->next=pNew;
pNew->next=NULL;
pTail=pNew;
}
returnpHead;
}
voidtraverse_List(Student*pHead)
{
inti=1;
Student*temp=pHead->next;
while(temp!=NULL)
{
cout<<endl<<"序号:"<<i<<endl;
temp->show();
temp=temp->next;
i++;
}
}
boolis_empty(Student*pHead)
{
if(NULL==pHead->next)
{
returntrue;
}
else
{
returnfalse;
}
}
intlength_List(Student*pHead)
{
intlen=0;
Student*temp=pHead->next;
while(temp)
{
len++;
temp=temp->next;
}
returnlen;
}
boolinsert_List(Student*pHead,intposition,Stust)
{
inti=0;
Student*p=pHead;
while(NULL!=p&&i<position-1)
{
p=p->next;
i++;
}
if(i>position-i||NULL==p)
{
returnfalse;
}
Student*pNew=(Student*)malloc(sizeof(Student));
if(NULL==pNew)
{
cout<<"分配失败,程序终止"<<endl;
exit(0);
}
pNew->setst(st);
pNew->next=p->next;
p->next=pNew;
returntrue;
}
booldelete_List(Student*pHead,intposition,Stu*st)
{
inti=0;
Student*p=pHead;
while(NULL!=p->next&&i<position-1)
{
p=p->next;
i++;
}
Student*q=p->next;
*st=q->getst();
p->next=p->next->next;
free(q);
q=NULL;
returntrue;
}
voidsort_List(Student*pHead)
{
Student*p,*q;
Stutemp;
inti,j;
intlen=length_List(pHead);
for(i=0,p=pHead->next;i<len-1;i++,p=p->next)
{
for(j=i+1,q=p->next;j<len;j++,q=q->next)
{
if(q->st.ave>p->st.ave)
{
temp=q->st;
q->st=p->st;
p->st=temp;
}
}
}
}
以上所述就是本文的全部内容了,希望大家能够喜欢。