学生信息管理系统

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
#define infile "data.txt"
struct student
{
char num[9];
int age;
char name[20];
char sex[8];
char nation[10];
char home[20];
}stud[1000],exchange,ins;
void init(),update(),delet(),query(),insert(),stat(),show(),disp(int);
void main()
{
char op;
int exp=1;
cout<<"******这里是一个学生信息管理系统,欢迎您的光临!******";
while(exp)
{
cout<<"\n\n***************************************";
cout<<"\n******      1.初始系统信息       ******";    
cout<<"\n******      2.显示学生信息       ******";    
cout<<"\n******      3.插入学生信息       ******";    
cout<<"\n******      4.删除学生信息       ******";    
cout<<"\n******      5.查找学生信息       ******";    
cout<<"\n******      6.修改学生信息       ******";    
cout<<"\n******      7.学生信息统计       ******";    
cout<<"\n******      8.退出查询系统       ******"; 
cout<<"\n\n***************************************";   
cout<<"\n根据职上提示,请选择你要进行的项目:";
cin>>op;
switch(op)
{
case '1':init();break;
case '2':show();break;
case '3':insert();break;
case '4':delet();break;
case '5':query();break;
case '6':update();break;
case '7':stat();break;
case '8':exp=0;
 cout<<"欢迎您的光临,再见!\n";
 break;
default:
cout<<"输入错误,请重新输入!\n";
}
}
}
void disp(int n)
{
cout<<"      学号 姓名    年龄   性别   民族  籍贯\n";
for(int i=0;i<n;i++)
{
cout<<setw(8)<<stud[i].num<<setw(8)<<stud[i].name<<setw(8)<<stud[i].age<<setw(8)<<
stud[i].sex<<setw(8)<<stud[i].nation<<setw(8)<<stud[i].home<<endl;
}
}
void writefile(int n)
{
ofstream out(infile,ios::binary);
if(!out)
{
cout<<"打开文件错误!";
exit(0);
}
out.clear();
for(int i=0;i<n;i++)
out.write((char*)&stud[i],sizeof(student));
out.close();
}
int readfile()
{
int n=0;
ifstream in(infile,ios::binary);
if(!in)
{
cout<<"打开文件错误!";
exit(0);
}
while(!in.eof())
{
in.read((char*)&stud[n],sizeof(student));
//in.ignore();
n++;
}
in.close();
return n-1;
}
void init()
{
int i,N;
cout<<"请输入您想要进行管理的学生的数目:";
cin>>N;
for(i=0;i<N;i++)
{
cout<<"\n请输入第"<<i+1<<"个学生的信息:\n";
cout<<"学号:";
cin>>stud[i].num;
cout<<"姓名:";
cin>>stud[i].name;
cout<<"年龄:";
cin>>stud[i].age;
cout<<"性别:";
cin>>stud[i].sex;
cout<<"民族:";
cin>>stud[i].nation;
cout<<"籍贯:";
cin>>stud[i].home;
}
writefile(N);
}
void show()
{
int i,j,n=readfile();
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(stud[i].num,stud[j].num)>0)
{
exchange=stud[i];
stud[i]=stud[j];
stud[j]=exchange;
}
}
}
cout<<"\n您想要查询的学生信息如下:\n";
disp(n);
}
void insert()
{
ofstream out;
int i,n=readfile();
cout<<"\n请输入您所插入的学生的信息:\n";
cout<<"学号:";
cin>>ins.num;
cout<<"姓名:";
cin>>ins.name;
cout<<"年龄:";
cin>>ins.age;
cout<<"性别:";
cin>>ins.sex;
cout<<"民族:";
cin>>ins.nation;
cout<<"籍贯:";
cin>>ins.home;
out.open(infile,ios::binary);
out.clear();
out.write((char*)&ins,sizeof(student));
for(i=0;i<n;i++)
out.write((char*)&stud[i],sizeof(student));
n++;
out.close();
cout<<"插入以后的信息为:\n";
n=readfile();
disp(n);
}
void delet()
{
int i,j,flag,n=readfile();
char na[8];
cout<<"请输入待删除的学生的姓名:";
cin>>na;
for(flag=1,i=0;flag&&i<n;i++)
{
if(strcmp(na,stud[i].name)==0)
{
for(j=i;j<n-1;j++)
stud[j]=stud[j+1];
flag=0;
}
}
if(!flag)
{
n-=1;
cout<<"\n删除后的学生信息如下:\n";
disp(n);
ofstream out(infile,ios::binary);
for(i=0;i<n;i++)
out.write((char*)&stud[i],sizeof(student));
out.close();
}
else 
cout<<"没有您要查询的信息!";
}
void query()
{
int i,flag,n=readfile();
char na[8];
cout<<"请输入待查询学生的姓名:";
cin>>na;
for(flag=1,i=0;flag&&i<n;i++)
{
if(strcmp(na,stud[i].name)==0)
{
flag=0;
break;
}
}
if(!flag)
{
n-=1;
cout<<"      学号 姓名    年龄   性别   民族  籍贯\n";
cout<<setw(8)<<stud[i].num<<setw(8)<<stud[i].name<<setw(8)<<stud[i].age<<setw(8)<<
stud[i].sex<<setw(8)<<stud[i].nation<<setw(8)<<stud[i].home<<endl;
}
else 
cout<<"没有您要查询的信息!";
}
void update()
{
int i,flag,n=readfile(),temp=-1;
char na[8];
cout<<"请输入待修学生的姓名:";
cin>>na;
for(flag=1,i=0;flag&&i<n;i++)
{
if(strcmp(na,stud[i].name)==0)
{
temp=i;
flag=0;
}
}
if(flag==1)
{
cout<<endl<<"没有您要修改的信息"<<endl;
return;
}
else
{
cout<<"请输入该学生的年龄:";
cin>>stud[temp].age;
cout<<"请输入该学生的性别:";
cin>>stud[temp].sex;
cout<<"请输入该学生的民族:";
cin>>stud[temp].nation;
cout<<"请输入该学生的籍贯:";
cin>>stud[temp].home;
}
cout<<"\n此次修改后的学生信息如下:\n";
cout<<"      学号 姓名    年龄   性别   民族  籍贯\n";
cout<<setw(8)<<stud[temp].num<<setw(8)<<stud[temp].name<<setw(8)<<stud[temp].age<<setw(8)<<
stud[temp].sex<<setw(8)<<stud[temp].nation<<setw(8)<<stud[temp].home<<endl;
writefile(n);
}
void stat()
{
int i,jem=0,jen=0,js=0,j=0,t,df=0,nf=0,mf=1;
char *id,*nm[100];
int n=readfile();
for(i=0;i<n;i++)
{
if(strcmp("男",stud[i].sex)==0)
jem++;
}
jen=n-jem;
cout<<"在系统中所记载的"<<n<<"人里面:\n其中男生"<<jem<<"人,女生"<<jen<<"人.";
for(t=0;t<n;t++)
{
mf=1;
id=stud[t].nation;
for(i=t;i<n;i++)
if(strcmp(id,stud[i].nation)==0)
js++;
for(df=0;df<nf;df++)
{
if(strcmp(nm[df],id)==0)
{
mf=0;
break;
}
}
if(mf==1)
{
cout<<endl<<id<<"族的人数为"<<js;
}
nm[nf++]=id;
js=0;
}
//统计的另外一种算法
nf=0;
nm[nf]=stud[nf].home;
for(i=1;i<n;i++)
{
mf=1;
for(t=0;t<=nf;t++)
     if(strcmp(nm[t],stud[i].home)==0)
{
mf=0;
break;
}
if(mf==1)
nm[++nf]=stud[i].home;
}
for(i=0;i<=nf;i++)
{
js=0;
for(t=0;t<n;t++)
if(strcmp(nm[i],stud[t].home)==0)
js++;
cout<<endl<<"籍贯为"<<nm[i]<<"族的人数为"<<js;
}
 
}

你可能感兴趣的:(C++,学生信息管理系统)