⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 毕业生信息管理系统
💻 CPP
字号:
#include "iostream.h"
#include "string.h"
#include "stdlib.h"
#include "fstream.h"
#include "stdio.h"
#include "BST.h"
#include "bs.h"

#define N 100

mainrec A[N];
noindex B[N];
nameindex C[N];
banjiindex D[N];
teacherindex E[N];

void setup()//创建一个学生信息文件
{
	fstream f1;
	f1.open("d:\\data.txt",ios::in|ios::out);
	if(!f1)
	{
		cout<<"不能打开文件!"<<endl;
		return;
	}
	cout<<"输入学号为-1,表示结束"<<endl;
	for(int i=0;i<N;i++)
	{
		cout<<"请输入学号"<<endl;
		cin>>A[i].no;
		if(A[i].no==-1)
			break;
		else
		{
			cout<<"请输入姓名"<<endl;
			cin>>A[i].name;
			cout<<"请输入性别"<<endl;
			cin>>A[i].sex;
			cout<<"请输入班级"<<endl;
			cin>>A[i].banji;//班级
			cout<<"请输入生日"<<endl;
			cin>>A[i].birthday;//生日
			cout<<"请输入电话"<<endl;
			cin>>A[i].telephone;//电话
			cout<<"请输入地址"<<endl;
			cin>>A[i].adress;//地址
			cout<<"请输入指导老师"<<endl;
			cin>>A[i].teacher;//指导老师
			if(i!=0)
				f1<<endl;
			f1<<A[i].no<<"\t"<<A[i].name<<"\t"<<A[i].sex<<"\t"<<A[i].banji<<"\t"<<A[i].birthday<<"\t"<<A[i].telephone<<"\t"<<A[i].adress<<"\t"<<A[i].teacher;
		}
	}
	f1.close();
}
void open1()//从文件写入temp
{
	mainrec temp;
	fstream f1;
	f1.open("d:\\data.txt",ios::in|ios::out);
	while(!f1.eof())
	{		
		f1>>temp.no>>temp.name>>temp.sex>>temp.banji>>temp.birthday>>temp.telephone>>temp.adress>>temp.teacher;
		cout<<temp.no<<"\t"<<temp.name<<"\t"<<temp.sex<<"\t"<<temp.banji<<"\t"<<temp.birthday<<"\t"<<temp.telephone<<"\t"<<temp.adress<<"\t"<<temp.teacher<<"\t"<<endl;
	}
	f1.close();
}

void open2()//从文件写入工作区A
{
	int i=0;
//	mainrec temp;
	fstream f1;
	f1.open("d:\\data.txt",ios::in|ios::out);
	while(!f1.eof()&&i<N)
	{		
		f1>>A[i].no>>A[i].name>>A[i].sex>>A[i].banji>>A[i].birthday>>A[i].telephone>>A[i].adress>>A[i].teacher;
		cout<<A[i].no<<"\t"<<A[i].name<<"\t"<<A[i].sex<<"\t"<<A[i].banji<<"\t"<<A[i].birthday<<"\t"<<A[i].telephone<<"\t"<<A[i].adress<<"\t"<<A[i].teacher<<"\t"<<endl;
		i++;
	}
	f1.close();
}
void noopen()//从文件写入工作区B
{
	int i=0;
	fstream f1;
	f1.open("d:\\no_index.txt",ios::in|ios::out);
	cout<<"从学号索引文件中读取索引:"<<endl;
	while(!f1.eof()&&i<N)
	{		
		f1>>B[i].rec>>B[i].no;
		cout<<B[i].rec<<"\t"<<B[i].no<<endl;
		i++;
	}
	f1.close();
}
void nameopen()//从文件写入工作区C
{
	int i=0;
	fstream f1;
	f1.open("d:\\name_index.txt",ios::in|ios::out);
	cout<<"从姓名索引文件中读取索引:"<<endl;
	while(!f1.eof()&&i<N)
	{		
		f1>>C[i].rec>>C[i].name;
		cout<<C[i].rec<<"\t"<<C[i].name<<endl;
		i++;
	}
	f1.close();
}
void banjiopen()//从文件写入工作区D
{
	int i=0;
	fstream f1;
	f1.open("d:\\banji_index.txt",ios::in|ios::out);
	cout<<"从班级索引文件中读取索引:"<<endl;
	while(!f1.eof()&&i<N)
	{		
		f1>>D[i].rec>>D[i].banji;
		cout<<D[i].rec<<"\t"<<D[i].banji<<endl;
		i++;
	}
	f1.close();
}
void teacheropen()//从文件写入工作区E
{
	int i=0;
	fstream f1;
	f1.open("d:\\teacher_index.txt",ios::in|ios::out);
	cout<<"从指导教师索引文件中读取索引:"<<endl;
	while(!f1.eof()&&i<N)
	{		
		f1>>E[i].rec>>E[i].teacher;
		cout<<E[i].rec<<"\t"<<E[i].teacher<<endl;
		i++;
	}
	f1.close();
}
/////////////////////////建立索引表
void nosort1(noindex B[],int len)//按no排序——冒泡法
{
	int i,j;
	noindex temp;
	for(i=0;i<len-1;i++)
	{
		temp=B[i];
		j=i-1;

		while(temp.no<B[j].no)
		{
			B[j+1]=B[j];
			j--;
		}
		B[j+1]=temp;
	}
}

void nosort2(noindex B[],int len)//按no排序——二叉搜索树
{
	BST <noindex> NO(B);
	NO.Remove(NO.Min());//删除“0”的节点
	for(int i=0;i<len;i++)
	{
		B[i]=NO.Min();
		cout<<B[i].no<<endl;
		NO.Remove(B[i]);
	}
}
void no_index()//生成学号索引文件
{
	int i;
	fstream f2;
	f2.open("d:\\no_index.txt",ios::in|ios::out|ios::trunc);
	noindex B[N+1];
	cout<<"排序前:"<<endl;
	for(i=0;i<N&&A[i].no!=-1;i++)
	{
		B[i].no=A[i].no;
		B[i].rec=i+1;
		cout<<B[i].rec<<"\t"<<B[i].no<<endl;
	}
	nosort1(B,i);
//	nosort2(B,i);
	cout<<"排序后:"<<endl;
	for(int j=0;j<i;j++)
	{
		cout<<B[j].rec<<"\t"<<B[j].no<<endl;
		if(j!=0)
				f2<<endl;
		f2<<B[j].rec<<"\t"<<B[j].no;
//		cout<<j<<endl;
	}
	f2.close();
}
//////////////
void namesort(nameindex B[],int len)//按name排序——冒泡法
{
    int pass = 1;
	int exchange = 1;
	nameindex temp;
    while ( pass < N && exchange )
	{
		exchange = 0;	     //交换标志置为0,假定未交换
		for ( int j = len-1;  j >= pass;  j-- )
			if (strcmp(B[j-1].name,B[j].name)>0)
			{ //逆序
				//交换
				temp=B[j-1];
				B[j-1]=B[j];
				B[j]=temp;
				exchange = 1; //交换标志置为1,有交换
			}
         pass++;
	}
}
void name_index()//生成姓名索引文件
{
	int i;
	fstream f2;
	f2.open("d:\\name_index.txt",ios::in|ios::out|ios::trunc);
	nameindex B[N+1];
	cout<<"排序前:"<<endl;
	for(i=0;i<N&&A[i].no!=-1;i++)
	{
		strcpy(B[i].name,A[i].name);
		B[i].rec=i+1;
		cout<<B[i].rec<<"\t"<<B[i].name<<endl;
	}
	namesort(B,i);
	cout<<"排序后:"<<endl;
	for(int j=0;j<i;j++)
	{
		cout<<B[j].rec<<"\t"<<B[j].name<<endl;
		if(j!=0)
				f2<<endl;
		f2<<B[j].rec<<"\t"<<B[j].name;
	}
	f2.close();
}
//////////////////////////
void banjisort(banjiindex B[],int len)//按banji排序——直接选择排序法
{
	banjiindex temp;
    for (int i=0;i<len;i++) 
	{
		int k = i;
		for (int j= i+1;j<len;j++)
			if ( strcmp(B[j-1].banji,B[j].banji)>0 )
				k = j;  //当前具最小关键码的对象
			if ( k != i ) //对换到第 i 个位置
			{
				temp=B[i];
				B[i]=B[k];
				B[k]=temp;
			}
	}
}
void banji_index()//生成班级索引文件
{
	int i;
	fstream f2;
	f2.open("d:\\banji_index.txt",ios::in|ios::out|ios::trunc);
	banjiindex B[N+1];
	cout<<"排序前:"<<endl;
	for(i=0;i<N&&A[i].no!=-1;i++)
	{
		strcpy(B[i].banji,A[i].banji);
		B[i].rec=i+1;
		cout<<B[i].rec<<"\t"<<B[i].banji<<endl;
	}
	banjisort(B,i);
	cout<<"排序后:"<<endl;
	for(int j=0;j<i;j++)
	{
		cout<<B[j].rec<<"\t"<<B[j].banji<<endl;
		if(j!=0)
				f2<<endl;
		f2<<B[j].rec<<"\t"<<B[j].banji;
	}
	f2.close();
}
/////////////////////////////////
void teachersort(teacherindex B[],int len)//按teacher排序——折半插入排序法
{
    for ( int i = 1; i <len; i++)
	{
		teacherindex temp=B[i];
		int left = 0,Right = i-1;
		while ( left <= Right )
		{
			int middle = ( left + Right )/2;
			if (strcmp(temp.teacher,B[middle].teacher)>0)
              Right = middle - 1;
			else
				left = middle + 1;
		}
		for ( int k = i-1; k >= left; k-- )
			B[k+1] =B[k];
		B[left] = temp;
	}
}
void teacher_index()//生成指导老师索引文件
{
	int i;
	fstream f2;
	f2.open("d:\\teacher_index.txt",ios::in|ios::out|ios::trunc);
	teacherindex B[N+1];
	cout<<"排序前:"<<endl;
	for(i=0;i<N&&A[i].no!=-1;i++)
	{
		strcpy(B[i].teacher,A[i].teacher);
		B[i].rec=i+1;
		cout<<B[i].rec<<"\t"<<B[i].teacher<<endl;
	}	
	teachersort(B,i);
	cout<<"排序后:"<<endl;
	for(int j=0;j<i;j++)
	{
		cout<<B[j].rec<<"\t"<<B[j].teacher<<endl;
		if(j!=0)
				f2<<endl;
		f2<<B[j].rec<<"\t"<<B[j].teacher;
	}
	f2.close();
}
//////////////////////////查询
int nosearch(noindex B[])//按学号查询——二叉搜索树
{
	int a;
	BST <noindex> NO(B);
	cout<<"请输入您要查询的学号:"<<endl;
	cin>>a;
	noindex temp(a);
	noindex temp1=NO.FindType(temp);
	int rec=temp1.rec;
	cout<<A[rec-1].no<<"\t"<<A[rec-1].name<<"\t"<<A[rec-1].sex<<"\t"<<A[rec-1].banji<<"\t"<<A[rec-1].birthday<<"\t"<<A[rec-1].telephone<<"\t"<<A[rec-1].adress<<"\t"<<A[rec-1].teacher<<"\t"<<endl;
	return rec-1;
}
int namesearch(nameindex B[])//按姓名查询——顺序表
{
	char temp[10];
	int rec;
	int i=0;
	cout<<"请输入您要查询的姓名:"<<endl;
	cin>>temp;
	while(strcmp(temp,B[i].name)!=0)
		i++;
	rec=B[i].rec;
	cout<<A[rec-1].no<<"\t"<<A[rec-1].name<<"\t"<<A[rec-1].sex<<"\t"<<A[rec-1].banji<<"\t"<<A[rec-1].birthday<<"\t"<<A[rec-1].telephone<<"\t"<<A[rec-1].adress<<"\t"<<A[rec-1].teacher<<"\t"<<endl;
	return rec-1;
}
int banjisearch(banjiindex B[])//按班级查询——顺序表
{
	char temp[20];
	int rec;
	int i=0;
	cout<<"请输入您要查询的班级:"<<endl;
	cin>>temp;
	while(strcmp(temp,B[i].banji)!=0)
		i++;
	rec=B[i].rec;
	cout<<A[rec-1].no<<"\t"<<A[rec-1].name<<"\t"<<A[rec-1].sex<<"\t"<<A[rec-1].banji<<"\t"<<A[rec-1].birthday<<"\t"<<A[rec-1].telephone<<"\t"<<A[rec-1].adress<<"\t"<<A[rec-1].teacher<<"\t"<<endl;
	return rec-1;
}
int teachersearch(teacherindex B[])//按指导老师查询——顺序表
{
	char temp[10];
	int rec;
	int i=0;
	cout<<"请输入您要查询的指导老师:"<<endl;
	cin>>temp;
	while(strcmp(temp,B[i].teacher)!=0)
		i++;
	rec=B[i].rec;
	cout<<A[rec-1].no<<"\t"<<A[rec-1].name<<"\t"<<A[rec-1].sex<<"\t"<<A[rec-1].banji<<"\t"<<A[rec-1].birthday<<"\t"<<A[rec-1].telephone<<"\t"<<A[rec-1].adress<<"\t"<<A[rec-1].teacher<<"\t"<<endl;
	return rec-1;
}
void modify(int i)//修改
{
	fstream f1;
	f1.open("d:\\data.txt",ios::in|ios::out|ios::trunc);
	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;
	int choose;
	cin>>choose;
	switch(choose)
	{
	case 1:
		{
			cout<<"请输入您修改后的学号:";
			cin>>A[i].no;
			break;
		}
	case 2:
		{
			cout<<"请输入您修改后的姓名:";
			cin>>A[i].name;
			break;
		}
	case 3:
		{
			cout<<"请输入您修改后的性别:";
			cin>>A[i].sex;
			break;
		}
	case 4:
		{
			cout<<"请输入您修改后的班级:";
			cin>>A[i].banji;
			break;
		}
	case 5:
		{
			cout<<"请输入您修改后的出生日期:";
			cin>>A[i].birthday;
			break;
		}
	case 6:
		{
			cout<<"请输入您修改后的电话:";
			cin>>A[i].telephone;
			break;
		}
	case 7:
		{
			cout<<"请输入您修改后的住址:";
			cin>>A[i].adress;
			break;
		}
	case 8:
		{
			cout<<"请输入您修改后的指导教师:";
			cin>>A[i].teacher;
			break;
		}
	default:
		break;
	}
	cout<<A[i].no<<"\t"<<A[i].name<<"\t"<<A[i].sex<<"\t"<<A[i].banji<<"\t"<<A[i].birthday<<"\t"<<A[i].telephone<<"\t"<<A[i].adress<<"\t"<<A[i].teacher<<"\t"<<endl;
	cout<<"排序后:"<<endl;
	for(i=0;i<N&&A[i].no!=-1;i++)
	{
		if(i!=0)
				f1<<endl;
		f1<<A[i].no<<"\t"<<A[i].name<<"\t"<<A[i].sex<<"\t"<<A[i].banji<<"\t"<<A[i].birthday<<"\t"<<A[i].telephone<<"\t"<<A[i].adress<<"\t"<<A[i].teacher;
		cout<<A[i].no<<"\t"<<A[i].name<<"\t"<<A[i].sex<<"\t"<<A[i].banji<<"\t"<<A[i].birthday<<"\t"<<A[i].telephone<<"\t"<<A[i].adress<<"\t"<<A[i].teacher<<"\t"<<endl;
	}
	f1.close();	
}
///////////////////////////////////////////////
int searchteacher()//指导老师查询
{
	teacher_index();
	teacheropen();//按指导老师排序
	return teachersearch(E);//按指导老师查询
}
int searchbanji()//班级查询
{
	banji_index();
	banjiopen();//按班级排序
	return banjisearch(D);//按班级查询
}
int searchno()//学号查询
{
	no_index();//创建学号索引文件
	noopen();//按学号排序
	return nosearch(B);//按学号查询
}
int searchname()//姓名查询
{
	name_index();
	nameopen();//按姓名排序
	return namesearch(C);//按姓名查询
}
int search()//查询search
{
	int  i,input;
	cout<<"请输入查询方式:"<<endl;
	cout<<"1、按学号查询"<<endl;
	cout<<"2、按姓名查询"<<endl;
	cout<<"3、按班级查询"<<endl;
	cout<<"4、按指导老师查询"<<endl;
	cin>>input;
	switch(input)
	{
	case 1:
		{
			i=searchno();
			break;
		}
	case 2:
		{
			i=searchname();
			break;
		}
	case 3:
		{
			i=searchbanji();
			break;
		}
	case 4:
		{
			i=searchteacher();
			break;
		}
	default:
		break;
	}
	return i;
}
void changeindex()//修改所有的索引文件
{
	no_index();
	name_index();
	banji_index();
	teacher_index();
}

void change()//修改
{
	open2();
	int i=search();
	modify(i);
	changeindex();
}
void insert()//插入
{
//	open2();
	fstream f3;
	f3.open("d:\\data.txt",ios::in|ios::out|ios::trunc);
	for(int i=0;A[i].no!=-1&&i<N;i++);
	cout<<"请输入学号"<<endl;
	cin>>A[i].no;
	cout<<"请输入姓名"<<endl;
	cin>>A[i].name;
	cout<<"请输入性别"<<endl;
	cin>>A[i].sex;
	cout<<"请输入班级"<<endl;
	cin>>A[i].banji;//班级
	cout<<"请输入生日"<<endl;
	cin>>A[i].birthday;//生日
	cout<<"请输入电话"<<endl;
	cin>>A[i].telephone;//电话
	cout<<"请输入地址"<<endl;
	cin>>A[i].adress;//地址
	cout<<"请输入指导老师"<<endl;
	cin>>A[i].teacher;//指导老师
	for(int j=0;j<=i;j++)
	{
		if(j!=0)
				f3<<endl;
		f3<<A[j].no<<"\t"<<A[j].name<<"\t"<<A[j].sex<<"\t"<<A[j].banji<<"\t"<<A[j].birthday<<"\t"<<A[j].telephone<<"\t"<<A[j].adress<<"\t"<<A[j].teacher;
	}
	f3.close();
	changeindex();//修改所有的索引文件
}
void remove()//删除
{
//	open2();
	int i=search();
	for(int k=i;k<N&&A[k].no!=-1;k++)
	{
		A[k]=A[k+1];
	}
	fstream f3;
	f3.open("d:\\data.txt",ios::out|ios::trunc);
	for(int j=0;j<=k-1;j++)
	{
		if(j!=0)
				f3<<endl;
		f3<<A[j].no<<"\t"<<A[j].name<<"\t"<<A[j].sex<<"\t"<<A[j].banji<<"\t"<<A[j].birthday<<"\t"<<A[j].telephone<<"\t"<<A[j].adress<<"\t"<<A[j].teacher;
	}
	f3.close();
	changeindex();//修改所有的索引文件
}
void main()
{
	int input;
	do
	{
		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;
		cout<<"10、修改学生信息"<<endl;
		cout<<"11、退出"<<endl;
		cin>>input;
		switch(input)
		{
		case 1:
			{
				setup();
				break;
			}
		case 2:
			{
				open2();
				break;
			}
		case 3:
			{
				no_index();
				break;
			}
		case 4:
			{
				name_index();
				break;
			}
		case 5:
			{
				banji_index();
				break;
			}
		case 6:
			{
				teacher_index();
				break;
			}
		case 7:
			{
				insert();
				break;
			}
		case 8:
			{
				remove();
				break;
			}
		case 9:
			{
				search();
				break;
			}
		case 10:
			{
				change();
				break;
			}
		}
	}while(input!=11);
	exit(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -