📄 main.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 + -