?? jiaocaiguanli.cpp
字號:
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//定義結(jié)構(gòu)體
struct bookData
{
char booNum[9];
char name[20];
char zhuanye[30];
char shuliang[50];
};
//////////////////////
char *pFileName = 0;
//函數(shù)名英語字母順序排列
void addRecord(fstream &);
void createNewFile();
void bsrch_name(char *);//按教材名查找編號
void deleteRecord(char *);
void displayAllRecord(char *);
void findRecord(char *);
void functionMenu();
void initial(fstream &);
void insertRecord(char *);
void mainMenu();
void menu();
void operateExitedFile();
void updateRecord(char *);
///////////////////////////////////////////////////////////
//主函數(shù)
void main()
{
int recev;
bookData book();
mainMenu();
cout<<"請輸入您的選擇(0~2): ";
cin>>recev;
do
{
switch(recev)
{
case 0:
exit(1);
case 1:
createNewFile();
mainMenu();
break;
case 2:
operateExitedFile();
mainMenu();
break;
default:
cout<<"您輸入的選項(xiàng)不存在,請查證后再選擇!"<<endl;
}
cout<<"請輸入您的選擇(0~2): ";
}while(cin>>recev);
}
///////////////////////////////////////////////
/////////// 函數(shù)區(qū) //////////////////
//添加紀(jì)錄函數(shù)
void addRecord(fstream &fInOut)
{
bookData book;
cout<<"請輸入編號: ";
cin>>book.booNum;
cout<<"請輸入教材名: ";
cin>>book.name;
cout<<"請輸入專業(yè)): ";
cin>>book.zhuanye;
cout<<"請輸入數(shù)量: ";
cin>>book.shuliang;
fInOut.seekp( (atoi(book.booNum) - 1) *sizeof(bookData) );
fInOut.write( reinterpret_cast<const char *>(&book),
sizeof(bookData) );
}
//創(chuàng)建新文件函數(shù)
void createNewFile()
{
cout<<"請輸入文件全名(如copy.dat): ";
char fileName[20];
cin>>fileName;
fstream fout(fileName, ios::out |ios::ate);
initial(fout);//初始化文件記錄
//打開FileName.dat文件
ofstream outPutFileName("FileName.dat", ios::out | ios::app);
if(!outPutFileName)
{
cerr<<"file could not be opend.\n";
exit(1);
}
outPutFileName<<fileName<<endl;//把新建文件的文件名寫入FileName.dat
cout<<"開始輸入數(shù)據(jù) "<<endl;
int yn;
do
{
addRecord(fout);
cout<<"要繼續(xù)輸入數(shù)據(jù)嗎?(1 yes|0 no)"<<endl;
cin>>yn;
}while(yn);
fout.close();
cout<<"您輸入的數(shù)據(jù)已保存"<<endl;
//接下來判斷是否對它進(jìn)行操作(有待添加這些功能)
}
//刪除記錄函數(shù)
void deleteRecord(char *pFileName)
{
bookData book;
int sn;
cout<<"輸入您想刪除的編號:"<<endl;
cin>>sn;
fstream fInOut(pFileName,ios::in | ios::out );
if(sn != 0 )
{
bookData blankRecord = {0," ",' ',0," "," "};
fInOut.seekp( (sn - 1)*sizeof(bookData) );
fInOut.write( reinterpret_cast<const char *>(&book),sizeof(bookData) );
cout<< "教材 #" << sn <<"已被刪除"<<endl;
}
else
cout<< "教材 #" << sn <<"是空記錄"<<endl;
fInOut.close();
}
//顯示所有記錄函數(shù)
void displayAllRecord(char *pFileName)
{
bookData book;
ifstream output(pFileName,ios::in ); // |ios::out
output.read(reinterpret_cast< char * >(&book),sizeof(bookData));
cout <<setiosflags(ios::left)<<setw(10)<<"編號"
<<setw(20)<<"教材名"<<setw(10)<<"專業(yè)"<<setw(50)<<"數(shù)量"<<endl;
while(output && !output.eof())
{
if((atoi(book.booNum)) != 0)
cout <<setiosflags(ios::left)<<setw(10)<< book.booNum
<<setw(20)<< book.name<<setw(10)<< book.zhuanye<<setw(50)<< book.shuliang<<endl;
output.read(reinterpret_cast< char *>(&book),sizeof(bookData));
}
output.close();
}
//查找記錄函數(shù)按編號查教材名
void findRecord(char *pFileName)
{
cout<<"請輸入您要查找的記錄的編號: ";
bookData book;
cin>>book.booNum;
fstream fInOut(pFileName,ios::in );
fInOut.seekg( (strlen(book.booNum - 1)*sizeof(bookData) ));
fInOut.read( reinterpret_cast< char *>(&book),sizeof(bookData) );
cout <<setiosflags(ios::left)<<setw(10)<<"編號"<<setw(20)<<"教材名"<<
setw(10)<<"專業(yè)"<<setw(10)<<"數(shù)量"<<endl;
cout <<setiosflags(ios::left)<<setw(10)<< book.booNum
<<setw(20)<< book.name
<<setw(10)<< book.zhuanye[20]<<setw(10)<<book.shuliang[50]<<endl;
}
void bsrch_name(char *pFileName)//按教材名查找編號
{
cout<<"請輸入您要查找的記錄的教材名: ";
bookData book;
cin>>book.name;
fstream fInOut(pFileName,ios::in );
fInOut.seekg( (strlen(book.booNum-1)*sizeof(bookData) ));
fInOut.read( reinterpret_cast< char *>(&book),sizeof(bookData) );
cout <<setiosflags(ios::left)<<setw(10)<<"編號"
<<setw(20)<<"專業(yè)"<<setw(10)<<"數(shù)量"<<endl;
cout <<setiosflags(ios::left)<<setw(10)<< book.booNum
<<setw(20)<< book.zhuanye<<setw(10)<<book.shuliang[10]<<endl;
}
//功能菜單(選擇"2.查看已有文件"后調(diào)用)
void functionMenu()
{
cout<<"現(xiàn)在操作的文件名是:";
cout<<pFileName<<endl;
menu();
cout<<"請輸入您要的操作號: ";
int choice;
cin>>choice;
do{
switch(choice)
{
case 1:
displayAllRecord(pFileName);
cout<<endl;
menu();
cout<<"請輸入您要的操作號: ";
cin>>choice;
break;
case 2:
insertRecord(pFileName);
cout<<endl;
menu();
cout<<"請輸入您要的操作號: ";
cin>>choice;
break;
case 3:
updateRecord(pFileName);
cout<<endl;
menu();
cout<<"請輸入您要的操作號: ";
cin>>choice;
break;
case 4:
deleteRecord(pFileName);
cout<<endl;
menu();
cout<<"請輸入您要的操作號: ";
cin>>choice;
break;
case 5:
findRecord(pFileName);
cout<<endl;
menu();
cout<<"請輸入您要的操作號: ";
cin>>choice;
break;
case 6:
bsrch_name(pFileName);
cout<<endl;
menu();
cout<<"請輸入您要的操作號: ";
cin>>choice;
break;
case 0:
break;
default:
{
cout<<"您輸入的選項(xiàng)不存在,請查證后再選擇!"<<endl;
cout<<"請輸入您要的操作號: ";
cin>>choice;
}
}//end of switch
}while(choice >= 0 && choice <= 5);
}////////////////////
void initial(fstream &iniFile)
{
bookData book = {0,"\0",'m',0,"\0","\0"};//
for(int i = 0; i < 100; i++)
iniFile.write(reinterpret_cast<const char *>(&book),sizeof(bookData));
}
//插入數(shù)據(jù)函數(shù)
void insertRecord(char *pFileName)
{
fstream fInOut(pFileName,ios::out | ios::ate);
if(!fInOut)
{
cerr<<"file could not be opend.\n";
exit(1);
}
int yn;
do
{
addRecord(fInOut);
cout<<"要繼續(xù)添加數(shù)據(jù)嗎?(1 yes|0 no)"<<endl;
cin>>yn;
}while(yn);
fInOut.close();
}
//顯示主菜單函數(shù)
void mainMenu()
{
cout<<"\t\t\t*****************************\n";
cout<<"\t\t\t * 教 材 信 息 管 理 *\n";
cout<<"\t\t\t*****************************\n";
cout<<"\t\t\t\t1.添加新信息\n\n\t\t\t\t2.查看已有資料\n\n\t\t\t\t0.退出系統(tǒng)";
cout<<" \t\t\t\t "<<endl;
}
//功能菜單前顯示的菜單函數(shù)
void menu()
{
cout <<"\t\t\t\t1.顯示全部記錄\n\n\t\t\t\t2.添加紀(jì)錄\n\n\t\t\t\t3.修改記錄"
<<"\n\n\t\t\t\t4.刪除記錄\n\n\t\t\t\t5.按編號查教材名\n\n\t\t\t\t6.按教材名查編號\n\n\t\t\t\t0.返回上級菜單"<<endl;
}
//查看已有文件函數(shù)
void operateExitedFile()
{
cout<<"已存在的文件名:"<<endl;
ifstream inPutFileName("FileName.dat",ios::in);
char fileNameA[20];
while(inPutFileName>>fileNameA)
{
cout<<fileNameA<<endl;
}
inPutFileName.close();
cout<<endl<<"請輸入您要操作的文件全名: ";
char fileName[20];
cin>>fileName;
pFileName = fileName;//指針指向要操作的文件名,以備傳遞
fstream fInOut(fileName,ios::in | ios::out | ios::app);
if(!fInOut)
{
cerr<<"文件打不開!\n";
exit(1);
}
fInOut.close();
functionMenu();
}
//修改記錄函數(shù)
void updateRecord(char *pFileName)
{
fstream fInOut(pFileName,ios::out | ios::ate);
cout<<"請輸入您要修改的記錄的編號"<<endl;
addRecord(fInOut);
fInOut.close();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -