C++实现简单的学生管理系统
//Student.cpp
#include<iostream>
using namespace std;
struct Stu
{
char no[10];
char name[16];
int math;
int chi;
double ave;
};
class Student
{
public:
Stu st;
Student * next;
public:
Student(){}
Student(Stu s)
{
st=s;
next=NULL;
st.ave=(st.math+st.chi)/2.0;
}
void setst(Stu s)
{
st=s;
st.ave=(st.math+st.chi)/2.0;
}
Stu getst()
{
return st;
}
void show()
{
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\"
using namespace std;
Student * create_List();
void traverse_List(Student * pHead);
bool is_empty(Student * pHead);
int length_List(Student * pHead);
bool insert_List(Student * pHead,int position,Stu st);
bool delete_List(Student * pHead,int position,Stu * st);
void sort_List(Student * pHead);
void menu_select();
void handle_menu(int s);
void outFile();
Student * inFile();
void delFile();
Student * pHead;
void main()
{
menu_select();
}
void menu_select()
{
int s;
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);
}
void handle_menu(int s)
{
switch (s)
{
case 1:
{
system(\"cls\");
pHead=create_List();
system(\"cls\");
menu_select();
break;
}
case 2:
{
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;
}
case 3:
{
if(pHead!=NULL)
{
system(\"cls\");
outFile();
system(\"cls\");
menu_select();
}
system(\"cls\");
menu_select();
break;
}
case 4:
{
system(\"cls\");
pHead=inFile();
system(\"cls\");
menu_select();
break;
}
case 5:
{
system(\"cls\");
delFile();
system(\"cls\");
menu_select();
break;
}
case 6:
{
if(NULL==pHead)
{
cout<<\"记录总条数为零\"<<endl;
getchar();
getchar();
system(\"cls\");
menu_select();
}
system(\"cls\");
int num;
Stu st;
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;
}
case 7:
{
if(NULL==pHead)
{
cout<<\"记录总条数为零\"<<endl;
getchar();
getchar();
system(\"cls\");
menu_select();
}
int num;
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;
}
case 8:
{
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;
}
case 9:
{
system(\"cls\");
cout<<\"成功退出!\"<<endl;
exit(0);
break;
}
}
}
void delFile()
{
ofstream fileout;
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;
ifstream in(\"c:\\\\kcsj.txt\");
if (!in.is_open())
{
cout << \"Error opening file\"<<endl;
exit(0);
}
while (!in.eof())
{
Stu st;
in.read(reinterpret_cast<char *>(&st), sizeof(st));
if (in.fail())
{
break;
}
Student * pNew=new Student();
if(NULL==pNew)
{
printf(\"分配失败,程序终止\\n\");
exit(0);
}
pNew->setst(st);
pTail->next=pNew;
pNew->next=NULL;
pTail=pNew;
}
in.close();
return pHead;
}
void outFile()
{
ofstream out;
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)
{
Stu st=temp->getst();
out.write(reinterpret_cast<char *>(&st), sizeof(st));
temp=temp->next;
}
out.close();
}
Student * create_List()
{
int len;
Student * pHead=(Student *)malloc(sizeof(Student));
if(NULL==pHead)
{
cout<<\"分配失败,程序终止!\"<<endl;
exit(0);
}
Student * pTail=pHead;
pTail->next=NULL;
cout<<\"请输入要存储的学生人数:\";
cin>>len;
for(int i=0;i<len;i++)
{
Stu st;
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=new Student();
if(NULL==pNew)
{
printf(\"分配失败,程序终止\\n\");
exit(0);
}
pNew->setst(st);
pTail->next=pNew;
pNew->next=NULL;
pTail=pNew;
}
return pHead;
}
void traverse_List(Student * pHead)
{
int i=1;
Student * temp=pHead->next;
while(temp!=NULL)
{
cout<<endl<<\"序号:\"<<i<<endl;
temp->show();
temp=temp->next;
i++;
}
}
bool is_empty(Student * pHead)
{
if(NULL==pHead->next)
{
return true;
}
else
{
return false;
}
}
int length_List(Student * pHead)
{
int len=0;
Student * temp=pHead->next;
while(temp)
{
len++;
temp=temp->next;
}
return len;
}
bool insert_List(Student * pHead,int position,Stu st)
{
int i=0;
Student * p=pHead;
while(NULL!=p&&i<position-1)
{
p=p->next;
i++;
}
if(i>position-i||NULL==p)
{
return false;
}
Student * pNew=(Student *)malloc(sizeof(Student));
if(NULL==pNew)
{
cout<<\"分配失败,程序终止\"<<endl;
exit(0);
}
pNew->setst(st);
pNew->next=p->next;
p->next=pNew;
return true;
}
bool delete_List(Student * pHead,int position,Stu * st)
{
int i=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;
return true;
}
void sort_List(Student * pHead)
{
Student * p,* q;
Stu temp;
int i,j;
int len=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;
}
}
}
}
以上所述就是本文的全部内容了,希望大家能够喜欢。
本文地址:https://www.stayed.cn/item/10060
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我