用C++设计的简单学生学籍管理系统

求求各位大哥大姐解决小弟的难题啊
2025-05-22 16:30:57
推荐回答(1个)
回答1:

/*
这是本人刚学习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<<" —*—*—学生信息管理系统—*—*—"< cout<<"1----学生基本信息录入 2----学生信息查询"< cout<<"3----学生信息排序 4----学生信息修改"< cout<<"5----学生信息删除 0----退出"< ifstream infile("record_n.txt",ios::in);
infile>>record_n; //读取record_n,获知文件student.dat中保存有几个学生的数据
infile.close();
h2: cout<<"已经记录有"< cin>>a;
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< goto h1;
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!"< exit(1);
}
if(record_n==0)cout<<"Error!\n没有记录"< else
{
for(i=0;i {
infile.read((char *)&stud1[i],sizeof(stud1[i]));
}
}
/*进行对比,找到相应学号*/
infile.close();
for(i=0;i {
if(num==stud1[i].num) //判断,如果符合查询条件则输出到屏幕
{
cout<<"学号:"< cout<<"性别:"< cout<<"电话号码:"< j=i; //记录要修改学号的序号
}
}
for(i=0;i {
if(num==stud1[i].num)break;
}
if(i>=record_n)
{
cout<<"Error!\n未找到该学号,";
goto h0;
}

for(i=0;i stud2[i]=stud1[i];
for(i=j+1;i stud2[i]=stud1[i];
cout<<"请按照姓名、性别、出生年、月、电话号码、省份的顺序输入学生新信息(若要修改学号请删除该记录后重新录入新信息):"< /*将对应学号的信息和其他学号信息记录到stud2[],清空原文件后写入文件*/
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"< cin>>answer;
if(answer==0)goto h0;
if(answer!=0&&answer!=1)
{
cout<<"Error!"< goto ha;
}
if(answer==1)
{
fstream iofile("student.dat",ios::out|ios::binary);
if(!iofile)
{
cerr<<"Open file error!"< exit(1);
}
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"< cout<<"请输入要删除的学生学号:";
cin>>num;
if(num==-1)
{
ofstream outfile("record_n.txt",ios::out);
if(!outfile)
{
cerr<<"Open file error!"< abort();
}
outfile<<0; //数据个数恢复为0
outfile.close();
fstream iofile("student.dat",ios::out|ios::binary);
if(!iofile)
{
cerr<<"Open file error!"< exit(1);
}
iofile.close();
cout<<"学生信息已经全部删除"<
}
else
{
if(num==0)goto h0;
else
{
ifstream infile("student.dat",ios::binary);
if(!infile)
{
cerr<<"Open file error!"< exit(1);
}
if(record_n==0)cout<<"Error!\n没有记录"< else
{
for(i=0;i {
infile.read((char *)&stud1[i],sizeof(stud1[i]));
}
}
infile.close();
/*进行对比,找到相应学号*/
for(i=0;i {
if(num==stud1[i].num) //判断,如果符合查询条件则输出到屏幕
{
cout<<"学号:"< cout<<"性别:"< cout<<"电话号码:"< j=i; //记录要删除学号的序号
}
}
for(i=0;i {
if(num==stud1[i].num)break;
}
if(i>=record_n)
{
cout<<"Error!\n未找到该学号,";
goto h0;
}
ha: cout<<"是否确定删除该记录?确定输入1,返回输入0"< cin>>answer;
if(answer==0)goto h0;
if(answer!=0&&answer!=1)
{
cout<<"Error!"< goto ha;
}
if(answer==1)
{
/*将对应学号去掉后,剩余学生信息用stud2[]记录,清空原文件,再写入文件*/
for(i=0;i stud2[i]=stud1[i];
for(i=j;i stud2[i]=stud1[i+1];
ofstream outfile("record_n.txt",ios::out);
if(!outfile)
{
cerr<<"Open file error!"< abort();
}
outfile< outfile.close();
fstream iofile("student.dat",ios::out|ios::binary);
if(!iofile)
{
cerr<<"Open file error!"< exit(1);
}
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<h3: 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!"< exit(1);
}
if(record_n==0)cout<<"Error!\n没有记录"< else
{
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!"< exit(1);
}
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!"< exit(1);
}
if(record_n==0)cout<<"Error!\n没有记录"< else
{
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!"< exit(1);
}
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< else
{
if(!infile)
{
cerr<<"Open file error!"< exit(1);
}
for(i=0;i {
infile.read((char *)&stud1[i],sizeof(stud1[i]));
}
infile.close();
cout< }
cout<<"请按以下顺序输入学生信息:学号、姓名、性别、出生年、月、电话号码、省份";
cout<
for(i=0;i {
cout<<"请输入第"< cin>>p->num;
p1->num=p->num;
if(p->num==0)break;
for(j=0;j {
if(p->num==stud1[j].num)
{
cout<<"Error!\n输入的学号与已有记录重复!"< goto hi;
}
}
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!"< abort();
}
outfile.write((char *)&stud[i],sizeof(stud[i]));
outfile.close();
fstream iofile("record_n.txt",ios::out);
if(!iofile)
{
cerr<<"Open file error!"< abort();
}
iofile< iofile.close();
}
hi: cout<
}

//文件“信息查询.cpp”
#include
#include
#include
using namespace std;

/*——————————————信息查询函数————————————*/

void info_inquire()
{
int i;
h6: cout< cout<<"4—输出全部学生信息, 0—返回"<h3: 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!"< goto h5;
}
h4: cout<<"请输入要查询的学生的学号(返回请输入0):"< cin>>num;
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<<"学号:"< cout<<"性别:"< 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!"< goto h5;
}
h4: cout<<"请输入要查询的学生的姓名(返回请输入0):"< cin>>name;
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<<"学号:"< cout<<"性别:"< 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!"< goto h5;
}
h4: cout<<"请输入要查询的学生的性别(返回请输入0):"< cin>>sex;
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<<"学号:"< cout<<"性别:"< 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!"< goto h0;
}
if(record_n==0)cout<<"Error!\n没有记录"< else
{
for(i=0;i {
infile.read((char *)&stud1[i],sizeof(stud1[i]));
cout<<"第"< cout<<"学号:"< 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(); //信息删除函数