学生管理系统

/***********************************************************************************************************
题目 学生信息管理系统
1、问题描述
学生信息(学号、姓名、性别、出生日期、家庭住址,联系电话)
2、功能要求
(1)添加功能:程序能够任意添学生记录,
要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:可根据编号、姓名等信息对已添加的记录进行查询,如果未找到,给出相应的提示信息,如果找到,
则显示相应的记录信息。
(3)显示功能:可显示当前系统中所有记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录,则提示"记录为空!"
并返回操作;否则,输入要删除的人员的学号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,
则提示相应的记录不存。
(6)统计功能:能根据多种参数进行人员的统计。能统计人员数量以及总数,统计男、女员学生的数量。
(7)保存功能:可将当前系统中各类人员记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的人员信息读入到当前系统中,供用户进行使用。

*************************************************************************************************************/
#include
#include
#include
#include<stdlib.h>
#include
#define MAX 100
using namespace std;

/**********************************************************************
定义日期类型(student): 年、月、日
***********************************************************************/
typedef struct Date//日期结构体类型
{
int year;
int month;
int day;
}Mydate;//日期类型的类型名

/**********************************************************************
定义学生类型(student): 学号、姓名、性别、出生日期、家庭住址、联系电话
***********************************************************************/
typedef struct student//定义学生结构体类型
{

char num[15];//学号
char name[30];//姓名
char sex[4];//性别
Mydate birthday;//出生日期
char address[50];
char phone[15];

}Student;
Student st[MAX],stu;
static int Teatop;

/******************************************
保存学生信息,写入文件student.dat
**/
void Save()
{
int i;
ofstream outfile,outfile1; //输出文件流对象,file,file1
outfile1.open(“d:\stm\data\student_data.dat”,ios::out);//打开文件
outfile1<<Teatop; //获取文件流中的记录数 输出到Teatop
outfile.open(“d:\stm\data\student.dat”,ios::binary);//打开文件
if(!outfile) //打开不成功
{
cerr<<“打开文件错误!”<<endl;
return;
}
for(i=0;i<Teatop;i++) //将数组中的记录一条条的写入文件
outfile.write((char )&st[i],sizeof(st[i]));
outfile.close(); //关闭文件流
outfile1.close();
cout<<“保存成功!”<<endl;
}
/

读取学生信息,从文件student.dat读取
*******************************************/
void Read()
{
int i;
ifstream infile,infile1; //输入流对象
infile1.open(“d:\stm\data\student_data.dat”,ios::in);//以输入的方式打开文件
infile1>>Teatop; //输入文件流中记录的个数 存入Teatop
infile.open(“d:\stm\data\student.dat”,ios::binary); //打开文件
if(!infile) //打开文件不成功
{
cerr<<“打开文件错误!”<<endl;
return;
}
for(i=0;i<Teatop;i++) //将文件流中的记录一条条的取,并存入数组中
infile.read((char *)&st[i],sizeof(st[i]));
infile.close();
infile1.close();
cout<<“读取成功!”<<endl;
}

/**********************************************
输入学生信息
**********************************************/
void Input(char xh[]) //输入数据,未存入数组
{
strcpy(stu.num,xh);
cout<<“姓名:”;
cin>>stu.name;
cout<<“性别:”;
cin>>stu.sex;
cout<<“出生日期:”<<endl;
cout<<“年份:”;
cin>>stu.birthday.year;
cout<<“月分:”;
cin>>stu.birthday.month;
cout<<“日:”;
cin>>stu.birthday.day;
cout<<“家庭住址:”;
cin>>stu.address;
cout<<“联系电话:”;
cin>>stu.phone;
}

void Print()					//输出列标题,并指定宽度
{
  	cout<<left;
	cout<<setw(15)<<"学号"
	<<setw(10)<<"姓名"
	<<setw(5)<<"性别"
	<<setw(12)<<"出生日期"
	<<setw(20)<<"家庭住址"
	<<setw(15)<<"联系电话"<<endl;
}

void Output(int i)	//输出学生记录
{
	cout<<left;
	cout<<setw(15)<<st[i].num
	<<setw(10)<<st[i].name
	<<setw(5)<<st[i].sex
	<<setw(4)<<st[i].birthday.year<<"."
	<<setw(2)<<st[i].birthday.month<<"."
	<<setw(4)<<st[i].birthday.day
	<<setw(20)<<st[i].address
	<<setw(15)<<st[i].phone<<endl;
}

/********************************************
/*实现增加学生信息函数功能
/*t: 教师对象
/*i: 循环输入计数器
/*bh: 输入编号
/*添加成功,返回1,否则返回0
*********************************************/
int Add()
{

int i;
char xh[12];
Read();							//读文件
if(Teatop==MAX)					//数组已满
{
	cout<<"人数已满"<<endl;
	return 0;
}
cout<<"请输入学号:";			//如果没满,则输入记录
cin>>xh;
for(i=0;i<Teatop;i++)			//在Teatop条记录中比较,是否存在相同的编号
{
    if(strcmp(xh,st[i].num)==0)			//编号存在相同的,返回0
    {
		cout<<"已有学号,请重新输入"<<endl;
		return 0;
    }
}
Input(xh);						//不存在学号相同的,调用Input()函数,输入记录
st[Teatop]=stu;					//把记录存入数组中
Teatop++;						//元素个数加1
cout<<"添加成功!"<<endl;
return 1;

}
/********************************************
实现查找学生信息功能
可根据学号或姓名查找
j: 进行循环查找的计数器
bh: 输入的学号
fs: 查找的方式
xm: 输入的姓名
查找成功,返回1
*********************************************/
int Search()
{
int j,fs;
char xm[30],xh[12];
cout<<“选择查找方式 ,按编号查找(0)|按姓名查找(1):”;
cin>>fs; //输入要查找的方式
switch(fs)
{
case 0: //根据学号查找
cout<<“请输入学号:”;
cin>>xh;
for(j=0;j<Teatop;j++)
{
if(strcmp(xh,st[j].num)0) break; //找到
}
if(j
Teatop) //没找到
{
cout<<“没有此人!”<<endl;
return 0;
}
else
{
Output(j); //输出找到的记录
}
break;
case 1: //根据姓名查找
cout<<“请输入姓名:”;
cin>>xm;
for(j=0;j<Teatop;j++)
{
if(strcmp(xm,st[j].name)0) break;//找到
}
if(j
Teatop) //没找到
cout<<“没有此人!”<<endl;
else
{
Output(j); //找到并输出
}
break;
}
return 1;

}
/******************************************
显示所有学生信息
*/
void Show()
{
int i;
if(Teatop==0)
{
cout<<“记录为空!”<<endl;
return;
}
Print();
for(i=0;i<Teatop;i++) //循环的从数组中取记录,并显示
Output(i);
}
/

编辑学生信息
根据编号查找到该记录,再进行修改
*/
void Edit()
{
Student t1;
int j;
char xh[12];
cout<<“请输入要编辑的学生的学号:”;
cin>>xh;
for(j=0;j<Teatop;j++) //查找与输入学号相同的记录
{
if(strcmp(xh,st[j].num)0) break;
}
if(j
Teatop)
{
cout<<“没有此人!”<<endl;
return;
}
Output(j);
cout<<“输入修改后的信息,编号不能改:”<<endl;
Input(xh); //重新输入该记录的信息
st[j]=t1; //将该记录写入数组
cout<<“编辑成功!”<<endl;
}
/

删除学生信息
根据学号找到要删除的记录,进行删除
i: 循环查找计数器
k: 要删除的记录的位置
bh: 输入要删除的记录的学号
*******************************************/
int Delete()
{
int j,k;
char xh[12];
cout<<“请输入要删除的学生的学号:”;
cin>>xh;
for(j=0;j<Teatop;j++)
{
if(strcmp(xh,st[j].num)0) break;
}
if(j
Teatop)
{
cout<<“没有此人!”<<endl;
return 0;
}
for(k=j;k<Teatop;k++) //在数组中删除该记录,后面的记录往前移
{
st[k]=st[k+1];
}
Teatop–; //记录数减1
cout<<“删除成功!”<<endl;
return 1;
}

/*************************************
统计学生信息
对性别、省份等进行分类统计人数
tj: 分类统计
i: 循环控制
countm:男学生人数
countf:女学生人数
***************************************/
void CountTea()
{

int tj,i,j,countm=0,countf=0;			//统计类别
Read();									//从文件中读取数据到数组中
cout<<"输入统计的类别:0-性别|1-省份";
cin>>tj;
switch(tj)
{
	case 0:								//按性别统计
		for(i=0;i<Teatop;i++)
			{
			if(strcmp("男",st[i].sex)==0)countm++;
			if(strcmp("女",st[i].sex)==0)countf++;
			}
		cout.setf(ios::left);
		cout<<setw(20)<<"总学生数为:"<<Teatop<<"人"<<endl;
		cout<<setw(20)<<"男学生人数为:"<<countm<<"人"<<endl;
		cout<<setw(20)<<"女学生人数为:"<<countf<<"人"<<endl;
		break;
	case 1:								//按省份统计学生人数
		
	break;
 }

}

/****************************************************
主函数
choice: 选择项
password:密码
c: 获取单个字符,实现暂停
*******************************************************/
int main()
{
int choice,password;
char c;
cout<<" *************************************";
cout<<endl<<" 学生信息管理系统 “<<endl;
cout<<” *************************************";
cout<<endl<<“请输入密码:”;
cin>>password;
if(password!=123456)
{
cout<<“密码错误!”<<endl;
flushall(); // 清除所有缓冲区
c=getchar();
return 0;
}
char ch;
do{
cout<<“学生管理”<<endl;
cout<<""<<endl;
cout<<"| 1.添加 ";
cout<<"2.查询 ";
cout<<"3.显示 ";
cout<<"4.编辑 ";
cout<<"5.删除 ";
cout<<"6.统计 ";
cout<<"7.保存 ";
cout<<"8.读取 “;
cout<<“0.退出 |”<<endl;
cout<<”
"<<endl;
cout<<“请选择:”;
cin>>choice;
switch(choice) //不同的选择,调用TeaManager类中相应用函数
{
case 1:Add();break;
case 2:Search();break;
case 3:Show();break;
case 4:Edit();break;
case 5:Delete();break;
case 6:CountTea();break;
case 7:Save();break;
case 8:Read();break;
default:cout<<"\n 选择错误!"<<endl;break;
case 0:break;
}
cout<<“按回车键继续”<<endl;
flushall();
ch=getchar();
system(“cls”);
}while(choice!=0);

cout<<endl<<"谢谢使用"<<endl;
flushall();								//清除所有缓冲区
c=getchar();							//暂停
return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值