📄 028245.cpp
字号:
#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 + -