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

📄 028245.cpp

📁 数据结构实验课中的所有实验程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "stdafx.h"
#include "iostream.h"
#include "string.h"
#include "stdlib.h"
#include "fstream.h"
#include "stdio.h"
#include "BTS.h"
#include "data structure.h"

#define N 100

mainindex A[N];               //
numberindex B[N];             //学号主索引
nameindex C[N];               //姓名索引
classinindex D[N];            //班级索引
instructorindex 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].number;
		if(A[i].number==-1)
			break;
		else
		{
			cout<<"请输入姓名"<<endl;
			cin>>A[i].name;
			cout<<"请输入性别"<<endl;
			cin>>A[i].sex;
			cout<<"请输入班级"<<endl;
			cin>>A[i].classin;        //班级
			cout<<"请输入生日"<<endl;
			cin>>A[i].birth;          //生日
			cout<<"请输入电话"<<endl;
			cin>>A[i].telephone;      //电话
			cout<<"请输入地址"<<endl;
			cin>>A[i].address;        //地址
			cout<<"请输入指导老师"<<endl;
			cin>>A[i].instructor;     //指导老师
			if(i!=0)
				f1<<endl;
			f1<<A[i].number<<"\t"<<A[i].name<<"\t"<<A[i].sex<<"\t"<<A[i].classin<<"\t"<<A[i].birth<<"\t"<<A[i].telephone<<"\t"<<A[i].address<<"\t"<<A[i].instructor;
		}
	}
	f1.close();
}



void writein_display()   //从文件写入工作区,并显示文件内容
{
	int i=0;

	fstream f1;
	f1.open("d:\\data.txt",ios::in|ios::out);
	while(!f1.eof()&&i<N)
	{		
		f1>>A[i].number>>A[i].name>>A[i].sex>>A[i].classin>>A[i].birth>>A[i].telephone>>A[i].address>>A[i].instructor;
		cout<<A[i].number<<"\t"<<A[i].name<<"\t"<<A[i].sex<<"\t"<<A[i].classin<<"\t"<<A[i].birth<<"\t"<<A[i].telephone<<"\t"<<A[i].address<<"\t"<<A[i].instructor<<"\t"<<endl;
		i++;
	}
	f1.close();
}


////////////////////////创建索引文件//////////////////////////////////

void number_index()           //生成学号索引文件
{
	int i;
	fstream f2;
	f2.open("d:\\number_index.txt",ios::in|ios::out|ios::trunc);
	numberindex B[N+1];
	for(i=0;i<N&&A[i].number!=-1;i++)
	{
		B[i].number=A[i].number;
		B[i].loc=i+1;
	}

	int len=i;                  //冒泡法对学号信息排序
    int pass = 1;
	int exchange = 1;
	numberindex temp;
    while ( pass < N && exchange )
	{
		exchange = 0;	     //交换标志置为0,假定未交换
		for ( int j = len-1;  j >= pass;  j-- )
			if (B[j-1].number>B[j].number)
			{ //逆序
				//交换
				temp=B[j-1];
				B[j-1]=B[j];
				B[j]=temp;
				exchange = 1; //交换标志置为1,有交换
			}
         pass++;
	}                           //算法结束
cout<<"已将排序后结果存入学号索引文件"<<endl;

	for(int j=0;j<i;j++)           //存入操作
	{
		if(j!=0)
				f2<<endl;
		f2<<B[j].loc<<"\t"<<B[j].number;

	}
	f2.close();
}




void name_index()           //生成姓名索引文件
{
	int i,j;
	fstream f2;
	f2.open("d:\\name_index.txt",ios::in|ios::out|ios::trunc);
	nameindex B[N+1];

	for(i=0;i<N&&A[i].number!=-1;i++)   
	{
		strcpy(B[i].name,A[i].name);
		B[i].loc=i+1;
	}

	int len=i;               //直接选择排序法,按姓名排序
    int pass = 1;
	int exchange = 1;
	nameindex temp;
    while ( pass < N && exchange )
	{
		exchange = 0;	     //交换标志置为0,假定未交换
		for ( 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++;
	}

	 cout<<"已将排序后结果存入姓名索引文件"<<endl;
                                    
	for(j=0;j<i;j++)                //排序后写入文件
	{
		if(j!=0)
				f2<<endl;
		f2<<B[j].loc<<"\t"<<B[j].name;
	}
	f2.close();
}



void classin_index()             //生成班级索引文件
{
	int i,j;
	fstream f2;
	f2.open("d:\\classin_index.txt",ios::in|ios::out|ios::trunc);
	classinindex B[N+1];
	for(i=0;i<N&&A[i].number!=-1;i++)
	{
		strcpy(B[i].classin,A[i].classin);
		B[i].loc=i+1;
	}

	int len=i;                      //折半插入法
	for (  i = 1; i <len; i++)
	{
		classinindex temp=B[i];
		int left = 0,Right = i-1;
		while ( left <= Right )
		{
			int middle = ( left + Right )/2;
			if (strcmp(temp.classin,B[middle].classin)>0)
              Right = middle - 1;
			else
				left = middle + 1;
		}
		for ( int k = i-1; k >= left; k-- )
			B[k+1] =B[k];
		B[left] = temp;
	}
	cout<<"已将排序后结果存入班级索引文件"<<endl;

	for( j=0;j<i;j++)
	{
		if(j!=0)
				f2<<endl;
		f2<<B[j].loc<<"\t"<<B[j].classin;
	}
	f2.close();
}


void instructor_index()   //生成指导老师索引文件
{
	int i;
	fstream f2;
	f2.open("d:\\instructor_index.txt",ios::in|ios::out|ios::trunc);
	instructorindex B[N+1];
	for(i=0;i<N&&A[i].number!=-1;i++)
	{
		strcpy(B[i].instructor,A[i].instructor);
		B[i].loc=i+1;
	}	
     int len=i;
	 for (  i = 1; i <len; i++)   //折半插入法排序
	{
		instructorindex temp=B[i];
		int left = 0,Right = i-1;
		while ( left <= Right )
		{
			int middle = ( left + Right )/2;
			if (strcmp(temp.instructor,B[middle].instructor)>0)
              Right = middle - 1;
			else
				left = middle + 1;
		}
		for ( int k = i-1; k >= left; k-- )
			B[k+1] =B[k];
		B[left] = temp;
	}
	 cout<<"已将排序后结果存入指导教师索引文件"<<endl;
	for(int j=0;j<i;j++)              //存入操作
	{
		if(j!=0)
				f2<<endl;
		f2<<B[j].loc<<"\t"<<B[j].instructor;
	}
	f2.close();
}
///////////////////////////////////////////////////////////////////

/////////////////显示索引文件/////////////////////////////////////
void print_number_index()              //显示学号索引文件
{

		int i=0;

	fstream f1;
	f1.open("d:\\number_index.txt",ios::in|ios::out);
	while(!f1.eof()&&i<N)
	{		
		f1>>B[i].loc>>B[i].number;
		cout<<B[i].loc<<"\t"<<B[i].number<<endl;
		i++;
	}
	f1.close();
}
	


void print_name_index()              //显示姓名索引文件
{
			int i=0;

	fstream f1;
	f1.open("d:\\name_index.txt",ios::in|ios::out);
	while(!f1.eof()&&i<N)
	{		
		f1>>C[i].loc>>C[i].name;
		cout<<C[i].loc<<"\t"<<C[i].name<<endl;
		i++;
	}
	f1.close();

}
void print_classin_index( )         //显示班级索引文件
{
			int i=0;

	fstream f1;
	f1.open("d:\\classin_index.txt",ios::in|ios::out);
	while(!f1.eof()&&i<N)
	{		
		f1>>D[i].loc>>D[i].classin;
		cout<<D[i].loc<<"\t"<<D[i].classin<<endl;
		i++;
	}
	f1.close();

}
void print_instructor_index()        //显示指导教师索引文件
{
			int i=0;

	fstream f1;
	f1.open("d:\\instructor_index.txt",ios::in|ios::out);
	while(!f1.eof()&&i<N)
	{		
		f1>>E[i].loc>>E[i].instructor;
		cout<<E[i].loc<<"\t"<<E[i].instructor<<endl;
		i++;
	}
	f1.close();

}

void changeindex()        //修改所有的索引文件
{
	number_index();
	name_index();
	classin_index();
	instructor_index();
}

void show_index()                 //查看索引文件
{ int choice;
do{
cout<<"1、查看学号索引文件"<<endl;
cout<<"2、查看姓名索引文件"<<endl;
cout<<"3、查看班级索引文件"<<endl;
cout<<"4、查看指导教师索引文件"<<endl;
cout<<"5、回到主目录"<<endl;
cout<<"你的选择是:";
cin>>choice;
 cout<<endl;
 switch (choice)
 {case 1: 
 {print_number_index();
 break;}
 case 2:
	 {print_name_index();
	 break;}
 case 3:
	 {print_classin_index();
	 break;}
 case 4:
	 {print_instructor_index();
	 break;}
}
}while(choice!=5);

}
//////////////////////////////////////////////////////////

//////////////////////////查询//////////////////////////////

int numbersearch(numberindex B[])//按学号查询--二叉搜索树
{
	int a;
	BST <numberindex> NUMBER(B);
	cout<<"请输入您要查询的学号:"<<endl;
	cin>>a;
	numberindex temp(a);
	numberindex temp1=NUMBER.FindType(temp);
	int loc=temp1.loc;
	cout<<A[loc-1].number<<"\t"<<A[loc-1].name<<"\t"<<A[loc-1].sex<<"\t"<<A[loc-1].classin<<"\t"<<A[loc-1].birth<<"\t"<<A[loc-1].telephone<<"\t"<<A[loc-1].address<<"\t"<<A[loc-1].instructor<<"\t"<<endl;
	return loc-1;
}
int namesearch(nameindex B[])//按姓名查询--顺序表
{
	char temp[10];
	int loc;
	int i=0;

⌨️ 快捷键说明

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