?? 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 + -