/*
这是本人刚学习C++不久时写的一个学生信息管理系统,基本功能没问题。
*/
/*下面分几个文件
你可以先建立一个空工程,然后将这几个文件分别添加到工程中(应该会吧?),或者你把文件分别保存,最后打开“学生信息管理系统.cpp”直接编译、连接(会询问建立一个默认的工程)。此程序在VC6.0环境下测试通过。
*/
//文件“学生信息管理系统.cpp”
#include
#include
#include"common.h"
#include"信息录入.cpp"
#include"信息查询.cpp"
#include"信息排序.cpp"
#include"信息修改.cpp"
#include"信息删除.cpp"
using namespace std;
int main()
{
int a;
h1: cout<<" —*—*—学生信息管理系统—*—*—"<
infile>>record_n; //读取record_n,获知文件student.dat中保存有几个学生的数据
infile.close();
h2: cout<<"已经记录有"<
switch(a)
{
case 0:return 0;break;
case 1:info_input();break;
case 2:info_inquire();break;
case 3:info_sort();break;
case 4:info_update();break;
case 5:info_delete();break;
default:cout<<"Error!"<
cout<
return 0;
}
//文件“信息修改.cpp”
#include
#include
#include
using namespace std;
/*————————————信息修改函数——————————————*/
void info_update()
{
int i,j,answer,num;
student stud1[n],stud2[n];
cout<<"请输入要修改的学生学号(返回请输入0):";
cin>>num;
if(num==0)goto h0;
else
{
ifstream infile("student.dat",ios::binary);
if(!infile)
{
cerr<<"Open file error!"<
}
if(record_n==0)cout<<"Error!\n没有记录"<
{
for(i=0;i
infile.read((char *)&stud1[i],sizeof(stud1[i]));
}
}
/*进行对比,找到相应学号*/
infile.close();
for(i=0;i
if(num==stud1[i].num) //判断,如果符合查询条件则输出到屏幕
{
cout<<"学号:"<
}
}
for(i=0;i
if(num==stud1[i].num)break;
}
if(i>=record_n)
{
cout<<"Error!\n未找到该学号,";
goto h0;
}
for(i=0;i
for(i=j+1;i
cout<<"请按照姓名、性别、出生年、月、电话号码、省份的顺序输入学生新信息(若要修改学号请删除该记录后重新录入新信息):"<
stud2[j].num=stud1[j].num;
cin>>stud2[j].name>>stud2[j].sex>>stud2[j].birthday.year>>stud2[j].birthday.month>>stud2[j].phone>>stud2[j].address;
ha: cout<<"是否确定修改该记录?确定输入1,返回输入0"<
if(answer==0)goto h0;
if(answer!=0&&answer!=1)
{
cout<<"Error!"<
}
if(answer==1)
{
fstream iofile("student.dat",ios::out|ios::binary);
if(!iofile)
{
cerr<<"Open file error!"<
}
for(i=0;i
iofile.write((char *)&stud2[i],sizeof(stud2[i]));
}
iofile.close();
cout<<"该学生信息修改完毕!"<
}
h0: cout<
//文件“信息删除.cpp”
#include
#include
#include
using namespace std;
/*————————————信息删除函数——————————————*/
void info_delete()
{
int i,j,answer,num;
student stud1[n],stud2[n];
cout<<"返回请输入0,删除全部学生信息请输入-1"<
cin>>num;
if(num==-1)
{
ofstream outfile("record_n.txt",ios::out);
if(!outfile)
{
cerr<<"Open file error!"<
}
outfile<<0; //数据个数恢复为0
outfile.close();
fstream iofile("student.dat",ios::out|ios::binary);
if(!iofile)
{
cerr<<"Open file error!"<
}
iofile.close();
cout<<"学生信息已经全部删除"<
}
else
{
if(num==0)goto h0;
else
{
ifstream infile("student.dat",ios::binary);
if(!infile)
{
cerr<<"Open file error!"<
}
if(record_n==0)cout<<"Error!\n没有记录"<
{
for(i=0;i
infile.read((char *)&stud1[i],sizeof(stud1[i]));
}
}
infile.close();
/*进行对比,找到相应学号*/
for(i=0;i
if(num==stud1[i].num) //判断,如果符合查询条件则输出到屏幕
{
cout<<"学号:"<
}
}
for(i=0;i
if(num==stud1[i].num)break;
}
if(i>=record_n)
{
cout<<"Error!\n未找到该学号,";
goto h0;
}
ha: cout<<"是否确定删除该记录?确定输入1,返回输入0"<
if(answer==0)goto h0;
if(answer!=0&&answer!=1)
{
cout<<"Error!"<
}
if(answer==1)
{
/*将对应学号去掉后,剩余学生信息用stud2[]记录,清空原文件,再写入文件*/
for(i=0;i
for(i=j;i
ofstream outfile("record_n.txt",ios::out);
if(!outfile)
{
cerr<<"Open file error!"<
}
outfile<
fstream iofile("student.dat",ios::out|ios::binary);
if(!iofile)
{
cerr<<"Open file error!"<
}
for(i=0;i
iofile.write((char *)&stud2[i],sizeof(stud2[i]));
}
iofile.close();
cout<<"该学号已经删除"<
}
}
h0: cout<
//文件“信息排序.cpp”
#include
#include
#include
using namespace std;
/*————————————信息排序函数————————————*/
void info_sort()
{
int i;
cout<
cin>>i;
switch(i)
{
case 0:goto h7;
case 1:sort_num();break;
case 2:sort_day();break;
default:cout<<"Error!"<
h7: cout<
/*—————按照学号排序函数—————*/
void sort_num()
{
int i,j;
student stud1[n],t;
ifstream infile("student.dat",ios::binary);
if(!infile)
{
cerr<<"Open file error!"<
}
if(record_n==0)cout<<"Error!\n没有记录"<
{
for(i=0;i
infile.read((char *)&stud1[i],sizeof(stud1[i]));
}
}
for(i=0;i
for(j=0;j
if(stud1[j].num>stud1[j+1].num)
{
t=stud1[j];
stud1[j]=stud1[j+1];
stud1[j+1]=t;
}
}
}
infile.close();
/*将排序好的数据写入文件*/
ofstream outfile("student.dat",ios::out|ios::binary);
if(!outfile)
{
cerr<<"Open file error!"<
}
for(i=0;i
outfile.write((char *)&stud1[i],sizeof(stud1[i]));
}
outfile.close();
cout<<"排序完成";
cout<
/*————按照出生年月排序函数————*/
void sort_day()
{
int i,j;
student stud1[n],t;
ifstream infile("student.dat",ios::binary);
if(!infile)
{
cerr<<"Open file error!"<
}
if(record_n==0)cout<<"Error!\n没有记录"<
{
for(i=0;i
infile.read((char *)&stud1[i],sizeof(stud1[i]));
}
}
/*以下对学生的出生年月进行排序*/
for(i=0;i
for(j=0;j
if(stud1[j].birthday.year>stud1[j+1].birthday.year)
{
t=stud1[j];
stud1[j]=stud1[j+1];
stud1[j+1]=t;
}
}
}
for(i=0;i
for(j=0;j
if(stud1[j].birthday.year==stud1[j+1].birthday.year)
{
if(stud1[j].birthday.month>stud1[j+1].birthday.month)
{
t=stud1[j];
stud1[j]=stud1[j+1];
stud1[j+1]=t;
}
}
}
}
infile.close();
/*将排序好的数据写入文件*/
ofstream outfile("student.dat",ios::out|ios::binary);
if(!outfile)
{
cerr<<"Open file error!"<
}
for(i=0;i
outfile.write((char *)&stud1[i],sizeof(stud1[i]));
}
outfile.close();
cout<
//文件“信息录入.cpp”
#include
#include
#include
using namespace std;
/*——————信息录入函数——————*/
void info_input()
{
int i=0,j;
student stud1[n];
student *p,*p1;
p=stud+i;
p1=stud1+record_n;
ifstream infile("student.dat",ios::binary);
if(record_n==0)cout<
{
if(!infile)
{
cerr<<"Open file error!"<
}
for(i=0;i
infile.read((char *)&stud1[i],sizeof(stud1[i]));
}
infile.close();
cout<
cout<<"请按以下顺序输入学生信息:学号、姓名、性别、出生年、月、电话号码、省份";
cout<
for(i=0;i
cout<<"请输入第"<
p1->num=p->num;
if(p->num==0)break;
for(j=0;j
if(p->num==stud1[j].num)
{
cout<<"Error!\n输入的学号与已有记录重复!"<
}
}
cin>>p->name>>p->sex;
cin>>p->birthday.year>>p->birthday.month;
cin>>p->phone>>p->address;
ofstream outfile("student.dat",ios::app|ios::binary);
if(!outfile)
{
cerr<<"Open file error!"<
}
outfile.write((char *)&stud[i],sizeof(stud[i]));
outfile.close();
fstream iofile("record_n.txt",ios::out);
if(!iofile)
{
cerr<<"Open file error!"<
}
iofile<
}
hi: cout<
}
//文件“信息查询.cpp”
#include
#include
#include
using namespace std;
/*——————————————信息查询函数————————————*/
void info_inquire()
{
int i;
h6: cout<
cin>>i;
switch(i)
{
case 0:goto h7;
case 1:acc_num();break;
case 2:acc_name();break;
case 3:acc_sex();break;
case 4:output_all();break;
default:cout<<"Error!"<
goto h6;
h7: cout<
/*————按照学号查询函数—————*/
void acc_num()
{
int i;
int num;
student stud1[n];
ifstream infile("student.dat",ios::binary);
if(!infile)
{
cerr<<"Open file error!"<
}
h4: cout<<"请输入要查询的学生的学号(返回请输入0):"<
if(num==0)
{
infile.close();
goto h5;
}
for(i=0;i
infile.read((char *)&stud1[i],sizeof(stud1[i]));
}
infile.close();
for(i=0;i
if(num==stud1[i].num) //判断,如果符合查询条件则输出到屏幕
{
cout<<"学号:"<
}
for(i=0;i
if(num==stud1[i].num)break;
}
if(i>=record_n)cout<<"Error!\n未找到该学号,";
goto h4;
h5: cout<
/*————按照姓名查询函数—————*/
void acc_name()
{
int i;
char name[20];
student stud1[n];
ifstream infile("student.dat",ios::binary);
if(!infile)
{
cerr<<"Open file error!"<
}
h4: cout<<"请输入要查询的学生的姓名(返回请输入0):"<
if(strcmp(name,"0")==0)
{
infile.close();
goto h5;
}
for(i=0;i
infile.read((char *)&stud1[i],sizeof(stud1[i]));
}
infile.close();
for(i=0;i
if(strcmp(name,stud1[i].name)==0)
{
cout<<"学号:"<
}
for(i=0;i
if(strcmp(name,stud1[i].name)==0)break;
}
if(i>=record_n)cout<<"Error!\n未找到该姓名,";
goto h4;
h5: cout<
/*————按照性别查询函数—————*/
void acc_sex()
{
int i;
char sex[5];
student stud1[n];
ifstream infile("student.dat",ios::binary);
if(!infile)
{
cerr<<"Open file error!"<
}
h4: cout<<"请输入要查询的学生的性别(返回请输入0):"<
if(strcmp(sex,"0")==0)
{
infile.close();
goto h5;
}
for(i=0;i
infile.read((char *)&stud1[i],sizeof(stud1[i]));
}
infile.close();
for(i=0;i
if(strcmp(sex,stud1[i].sex)==0)
{
cout<<"学号:"<
}
for(i=0;i
if(strcmp(sex,stud1[i].sex)==0)break;
}
if(i>=record_n)cout<<"Error!\n未找到该性别的学生记录,";
goto h4;
h5: cout<
/*————输出全部学生信息—————*/
void output_all()
{
int i;
student stud1[n];
ifstream infile("student.dat",ios::binary);
if(!infile)
{
cerr<<"Open file error!"<
}
if(record_n==0)cout<<"Error!\n没有记录"<
{
for(i=0;i
infile.read((char *)&stud1[i],sizeof(stud1[i]));
cout<<"第"< cout<<"学号:"<
}
infile.close();
h0: cout<
//文件“common.h”
/*—————————定义类—————————定义类——————*/
struct Day //定义结构体类型Day
{
int year;
int month;
};
class student //定义类student
{
public:
int num;
char name[20];
char sex[5];
Day birthday;
char phone[15];
char address[15];
};
/*—————全局变量、函数声明————全局变量、函数声明—————*/
const int n=200; //n=200,表示最多可记录200个学生的数据,可以修改,以适应需要
int record_n=0; //记录数据个数,初始化为0
student stud[n];
void info_input(); //信息录入函数
void info_inquire(),acc_num(),acc_name(),acc_sex(),output_all();//信息查询函数
void info_sort(),sort_num(),sort_day(); //信息排序函数
void info_update(); //信息修改函数
void info_delete(); //信息删除函数