⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jiaocaiguanli.cpp

📁 这个是教材管理系统C++的原代码
💻 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 + -