📄 jiaocaiguanli.cpp
字号:
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//定义结构体
struct bookData
{
char booNum[9];
char name[20];
char zhuanye[30];
char shuliang[50];
};
//////////////////////
char *pFileName = 0;
//函数名英语字母顺序排列
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 *);
///////////////////////////////////////////////////////////
//主函数
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<<"您输入的选项不存在,请查证后再选择!"<<endl;
}
cout<<"请输入您的选择(0~2): ";
}while(cin>>recev);
}
///////////////////////////////////////////////
/////////// 函数区 //////////////////
//添加纪录函数
void addRecord(fstream &fInOut)
{
bookData book;
cout<<"请输入编号: ";
cin>>book.booNum;
cout<<"请输入教材名: ";
cin>>book.name;
cout<<"请输入专业): ";
cin>>book.zhuanye;
cout<<"请输入数量: ";
cin>>book.shuliang;
fInOut.seekp( (atoi(book.booNum) - 1) *sizeof(bookData) );
fInOut.write( reinterpret_cast<const char *>(&book),
sizeof(bookData) );
}
//创建新文件函数
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<<"开始输入数据 "<<endl;
int yn;
do
{
addRecord(fout);
cout<<"要继续输入数据吗?(1 yes|0 no)"<<endl;
cin>>yn;
}while(yn);
fout.close();
cout<<"您输入的数据已保存"<<endl;
//接下来判断是否对它进行操作(有待添加这些功能)
}
//删除记录函数
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();
}
//显示所有记录函数
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)<<"专业"<<setw(50)<<"数量"<<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();
}
//查找记录函数按编号查教材名
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)<<"专业"<<setw(10)<<"数量"<<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)<<"专业"<<setw(10)<<"数量"<<endl;
cout <<setiosflags(ios::left)<<setw(10)<< book.booNum
<<setw(20)<< book.zhuanye<<setw(10)<<book.shuliang[10]<<endl;
}
//功能菜单(选择"2.查看已有文件"后调用)
void functionMenu()
{
cout<<"现在操作的文件名是:";
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<<"您输入的选项不存在,请查证后再选择!"<<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));
}
//插入数据函数
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<<"要继续添加数据吗?(1 yes|0 no)"<<endl;
cin>>yn;
}while(yn);
fInOut.close();
}
//显示主菜单函数
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.退出系统";
cout<<" \t\t\t\t "<<endl;
}
//功能菜单前显示的菜单函数
void menu()
{
cout <<"\t\t\t\t1.显示全部记录\n\n\t\t\t\t2.添加纪录\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;
}
//查看已有文件函数
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();
}
//修改记录函数
void updateRecord(char *pFileName)
{
fstream fInOut(pFileName,ios::out | ios::ate);
cout<<"请输入您要修改的记录的编号"<<endl;
addRecord(fInOut);
fInOut.close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -