最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++使用文件實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

 更新時(shí)間:2021年01月25日 16:35:11   作者:m_target  
這篇文章主要為大家詳細(xì)介紹了C++使用文件實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

C++實(shí)現(xiàn)文件實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),供大家參考,具體內(nèi)容如下

功能如下:

添加學(xué)生信息(學(xué)生添加完成將直接保存進(jìn)文件)

  • 成績(jī)信息(c語(yǔ)言,大學(xué)英語(yǔ),高等數(shù)學(xué))
  • 個(gè)人信息(姓名、性別、學(xué)號(hào)、年齡)

顯示學(xué)生信息

查詢學(xué)生信息

  • 按學(xué)號(hào)查詢
  • 按名字查詢

按學(xué)號(hào)刪除學(xué)生信息
修改學(xué)生信息
按學(xué)號(hào)對(duì)學(xué)生進(jìn)行排序

類的設(shè)計(jì):

表示成績(jī)的Score類:

class Score{

public:
 float cLauage;//c語(yǔ)言成績(jī)
 float math;//高數(shù)成績(jī)
 float english;//英語(yǔ)成績(jī)
};

學(xué)生類

class Student{
public :
 char num[10];//學(xué)號(hào)
 int age;//年齡
 char name[20];//姓名 
 char sex[5];//性別
 Score sc;
};

教師類

class Teacher{
public:
 Student stu[N]; //N為50
 void seek();//查找
 void modify();//修改信息
 void insert();//插入學(xué)生信息
 void del();//刪除學(xué)生
 void display();//顯示學(xué)生信息
 void sorts();//按學(xué)號(hào)排序
 void help();//幫助信息
 void menu();//菜單
 void refresh();//刷新
};

主要功能的實(shí)現(xiàn)

插入學(xué)生信息

主要思想:實(shí)例化一個(gè)Student對(duì)象將輸入的學(xué)生信息存入該對(duì)象,輸入完成后將該對(duì)象寫入文件,代碼實(shí)現(xiàn)如下:

//插入學(xué)生信息
void Teacher::insert(){

 int j=n;
 int m;//要增加的學(xué)生人數(shù)
 cout<<"請(qǐng)輸入待增加的學(xué)生數(shù):"<<endl;
 cin>>m;
 do
 {
 Student stu;
 cout<<"請(qǐng)輸入第"<<j-n+1<<"個(gè)學(xué)生的學(xué)號(hào)"<<endl;//輸入學(xué)生信息
 cin>>stu.num;
 cout<<"請(qǐng)輸入第"<<j-n+1<<"個(gè)學(xué)生的姓名"<<endl;
 cin>>stu.name;
 cout<<"請(qǐng)輸入第"<<j-n+1<<"個(gè)學(xué)生的年齡"<<endl;
 cin>>stu.age;
 cout<<"請(qǐng)輸入第"<<j-n+1<<"個(gè)學(xué)生的性別"<<endl;
 cin>>stu.sex;
 cout<<"請(qǐng)輸入第"<<j-n+1<<"個(gè)學(xué)生的C語(yǔ)言成績(jī)"<<endl;
 cin>>stu.sc.cLauage;
 cout<<"請(qǐng)輸入第"<<j-n+1<<"個(gè)學(xué)生的高數(shù)成績(jī)"<<endl;
 cin>>stu.sc.math;
 cout<<"請(qǐng)輸入第"<<j-n+1<<"個(gè)學(xué)生的英語(yǔ)成績(jī)"<<endl;
 cin>>stu.sc.english; 
 j++;
 fstream file("student.txt", ios::out | ios::binary | ios::app);
 file.write((char *)&stu, sizeof(Student));//把該學(xué)生對(duì)象寫入文件
 file.close();
 }while(j<n+m);
 n+=m;
 cout<<"信息增加完畢"<<endl;
}

查找學(xué)生信息

主要思想:將所有學(xué)生對(duì)象從文件中讀取出來,獲取該對(duì)象的屬性值與輸入信息做比較,如果相等則找到該學(xué)生對(duì)象。否則,不存在該學(xué)生。代碼如下:

按學(xué)號(hào)查找

cout<<"請(qǐng)輸入要查詢的學(xué)生的學(xué)號(hào)"<<endl;
  cin>>str;
  fstream file("student.txt", ios::binary | ios::in);//打開文件
  while(!file.eof())
  {
  Student stu;
  file.read((char *)&stu, sizeof(Student));
  if(strcmp(stu.num,str)==0) //判斷從文件讀出對(duì)象的學(xué)號(hào)信息是否和輸入相等
  {
   flag=1;
   cout<<"學(xué)生學(xué)號(hào) 學(xué)生姓名 年齡 性別 C語(yǔ)言成績(jī) 高等數(shù)學(xué) 大學(xué)英語(yǔ)成績(jī)"<<endl;  
   cout<<stu.num<<"\t "<<stu.name<<" \t"<<stu.age<<"\t"<<stu.sex<<"\t"<<stu.sc.cLauage<<" \t"<<stu.sc.math<<"\t\t "<<stu.sc.english<<endl;
   break;
  }
  }
  if(flag!=1)
  cout<<"該學(xué)號(hào)不存在"<<endl; 
  file.close();

按姓名查找(只需要獲取學(xué)生對(duì)象的name做比較)

cout<<"請(qǐng)輸入要查詢的學(xué)生的姓名"<<endl;
  cin>>str;
  fstream file("student.txt", ios::binary | ios::in);
  while(!file.eof())
  {
  Student stu;
  file.read((char *)&stu, sizeof(Student));
  if(strcmp(stu.name,str)==0)//判斷從文件讀出對(duì)象的姓名信息是否和輸入相等
  {
   flag=1;
   cout<<"學(xué)生學(xué)號(hào) 學(xué)生姓名 年齡 性別 C語(yǔ)言成績(jī) 高等數(shù)學(xué) 大學(xué)英語(yǔ)成績(jī)"<<endl;  
   cout<<stu.num<<"\t "<<stu.name<<" \t"<<stu.age<<"\t"<<stu.sex<<"\t"<<stu.sc.cLauage<<" \t"<<stu.sc.math<<"\t\t "<<stu.sc.english<<endl;
   break;
  }
  }
  if(flag!=1)
  cout<<"該學(xué)生不存在"<<endl; 
  file.close();

顯示學(xué)生信息

主要思想:將學(xué)生信息從文件讀出來進(jìn)行顯示。代碼如下:

void Teacher::display(){
 int flag;
 int t=0;
 fstream file("student.txt", ios::binary | ios::in);
 cout<<"學(xué)生學(xué)號(hào) 學(xué)生姓名 年齡 性別 C語(yǔ)言成績(jī) 高等數(shù)學(xué) 大學(xué)英語(yǔ)成績(jī)"<<endl;  
 while(!file.eof())
 {
 Student stu;
 file.read((char *)&stu, sizeof(Student));//從文件讀出所有學(xué)生信息
 flag=1;  
 cout<<stu.num<<"\t "<<stu.name<<" \t"<<stu.age<<"\t"<<stu.sex<<"\t"<<stu.sc.cLauage<<" \t"<<stu.sc.math<<"\t\t "<<stu.sc.english<<endl;
 }
 if(flag!=1)
 cout<<"無該學(xué)生"<<endl; 
 file.close();

}

修改學(xué)生信息

主要思想:將需要修改的學(xué)生按學(xué)號(hào)從文件中取出,為該對(duì)象設(shè)置新的值,最終在寫入文件。代碼如下:

void Teacher::modify(){
 int item,age,score;//選擇修改項(xiàng),修改年齡
 Student stu;
 int flag;
 char str[20];//暫時(shí)存修改內(nèi)容
 cout<<"請(qǐng)輸入要查詢的學(xué)生的學(xué)號(hào)"<<endl;
 cin>>str;
 fstream file("student.txt", ios::binary | ios::in);//打開文件存取學(xué)生對(duì)象的文件
 while(!file.eof())
 {
 file.read((char *)&stu, sizeof(Student));//讀取文件
 if(strcmp(stu.num,str)==0)//如果存在學(xué)生信息輸出
 {
  flag=1;
  cout<<"學(xué)生學(xué)號(hào) 學(xué)生姓名 年齡 性別 C語(yǔ)言成績(jī) 高等數(shù)學(xué) 大學(xué)英語(yǔ)成績(jī)"<<endl;  
  cout<<stu.num<<"\t "<<stu.name<<" \t"<<stu.age<<"\t"<<stu.sex<<"\t"<<stu.sc.cLauage<<" \t"<<stu.sc.math<<"\t\t "<<stu.sc.english<<endl;
  break;
 }
 }
 if(flag!=1)//如果不存在則提示無該學(xué)生
 cout<<"該學(xué)生不存在"<<endl; 
 file.close();
 printf("------------------\n");
 printf("1.修改姓名\n");
 printf("2.修改年齡\n");
 printf("3.修改性別\n");
 printf("4.修改C語(yǔ)言成績(jī)\n");
 printf("5.修改高等數(shù)學(xué)成績(jī)\n");
 printf("6.修改大學(xué)英語(yǔ)成績(jī)\n");
 printf("7.退出本菜單\n");
 printf("------------------\n");
 while(1)
 {
 printf("請(qǐng)選擇子菜單編號(hào):");
 scanf("%d",&item);
 switch(item)
 {
 case 1:
  printf("請(qǐng)輸入新的姓名:\n");
  cin>>str;
  strcpy(stu.name,str); break;//為學(xué)生姓名賦新值
 case 2:
  printf("請(qǐng)輸入新的年齡:\n");
  cin>>age;
  stu.age=age;break;//為學(xué)生年齡賦新值
 case 3:
  printf("請(qǐng)輸入新的性別:\n");
  cin>>str;
  strcpy(stu.sex,str); break;//為學(xué)生性別賦新值
 case 4:
  printf("請(qǐng)輸入新的C語(yǔ)言成績(jī):\n");
  cin>>score;
  stu.sc.cLauage=score; break;//為學(xué)生成績(jī)復(fù)新制
 case 5:
  printf("請(qǐng)輸入新的數(shù)學(xué)成績(jī):\n");
  cin>>score;
  stu.sc.math=score; break;
 case 6:
  printf("請(qǐng)輸入新的英語(yǔ)成績(jī):\n");
  cin>>score;
  stu.sc.english=score; break;
 case 7:{
  fstream file("student.txt", ios::out | ios::binary | ios::app);
  cout<<"修改成功"<<endl;
  file.write((char *)&stu, sizeof(Student));//把新的學(xué)生信息寫入文件
  file.close();
  return;
 }
 default:printf("請(qǐng)?jiān)?-7之間選擇\n");
 }
 }
}

刪除學(xué)生信息

主要思想: 將所有學(xué)生對(duì)象從文件從讀出,把讀出的不包括需要?jiǎng)h除學(xué)生的對(duì)象存入vector容器,最終將遍歷該vector容器,將所有對(duì)象存入文件。代碼如下:

void Teacher::del(){
 vector<Student> va;
 Student stu;//將讀出的學(xué)生信息存入該對(duì)象
 int flag;
 char str[20];
 cout<<"請(qǐng)輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào)"<<endl;
 cin>>str;
 fstream file("student.txt", ios::binary | ios::in);//打開文件存取學(xué)生對(duì)象的文件
 while(!file.eof())
 {
 file.read((char *)&stu, sizeof(Student));//讀取文件
 if(strcmp(stu.num,str)==0)//如果存在學(xué)生信息輸出
 {
  flag=1;
  continue;
 }
 va.push_back(stu);//將非刪除的學(xué)生存入容器
 }
 fstream file1("student.txt", ios::out | ios::trunc);
 for (int i=0;i<va.size();i++)
 {
 file1.write((char *)&va[i], sizeof(Student));//將容器中的學(xué)生對(duì)象寫入文件
 }
 cout<<"刪除成功"<<endl;
 file.close();//關(guān)閉文件
 file1.close();
}

排序功能

主要思想:將所有的對(duì)象信息從文件中讀出存入vector容器,使用sort()方法結(jié)合自定義排序?qū)崿F(xiàn)學(xué)生按學(xué)號(hào)排序,最終將排序號(hào)的遍歷寫入文件。代碼如下:

static bool myCompare(const Student& a1,const Student& a2)//自定義排序

{
 return strcmp(a1.num,a2.num)<=0;//按學(xué)號(hào)從小到大排序
}


void Teacher::sorts(){
 vector<Student> va;
 Student stu;
 fstream file("student.txt", ios::binary | ios::in);//打開文件存取學(xué)生對(duì)象的文件
 while(!file.eof())
 {
 file.read((char *)&stu, sizeof(Student));//讀取文件
 va.push_back(stu);//將學(xué)生對(duì)象存入容器
 }
 va.pop_back();
 sort(va.begin(),va.end(),myCompare);//使用sort進(jìn)行排序
 fstream file1("student.txt", ios::out | ios::trunc);
 for (int i=0;i<va.size();i++)
 {
 file1.write((char *)&va[i], sizeof(Student));//將排序好的寫入文件
 }
 file.close();//關(guān)閉文件
 file1.close();
}

刷新功能

主要思想:對(duì)學(xué)生信息進(jìn)行排序并輸出

//刷新
void Teacher::refresh(){
 Teacher t;
 t.sorts();
 t.display(); 
}

遇到的問題:在從文件讀出信息時(shí)使用的eof()方法判斷是否讀到末尾時(shí)當(dāng)讀到最后一個(gè)字符時(shí),程序會(huì)多讀一次(編譯器會(huì)讓指針停留在最后一個(gè)字符那里,然后重復(fù)讀取一次,使用while(file.peek() != EOF)就可以解決。

運(yùn)行截圖

添加(在之前的測(cè)試中存入了一些數(shù)據(jù))

查詢

刪除

刷新

修改

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ main函數(shù)的幾點(diǎn)細(xì)節(jié)

    C++ main函數(shù)的幾點(diǎn)細(xì)節(jié)

    這篇文章主要介紹了C++ main函數(shù)的幾點(diǎn)細(xì)節(jié),幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下
    2020-08-08
  • C語(yǔ)言創(chuàng)建鏈表錯(cuò)誤之通過指針參數(shù)申請(qǐng)動(dòng)態(tài)內(nèi)存實(shí)例分析

    C語(yǔ)言創(chuàng)建鏈表錯(cuò)誤之通過指針參數(shù)申請(qǐng)動(dòng)態(tài)內(nèi)存實(shí)例分析

    這篇文章主要介紹了C語(yǔ)言創(chuàng)建鏈表錯(cuò)誤之通過指針參數(shù)申請(qǐng)動(dòng)態(tài)內(nèi)存,是鏈表創(chuàng)建過程中非常常見的經(jīng)典錯(cuò)誤。實(shí)例中做了較為詳盡的分析,需要的朋友可以參考下
    2014-09-09
  • C語(yǔ)言中進(jìn)制知識(shí)匯總

    C語(yǔ)言中進(jìn)制知識(shí)匯總

    在C語(yǔ)言里,整數(shù)有三種表示形式:十進(jìn)制,八進(jìn)制,十六進(jìn)制。 其中以數(shù)字0開頭,由0~7組成的數(shù)是八進(jìn)制。以0X或0x開頭,由0~9,A~F或a~f 組成是十六進(jìn)制。除表示正負(fù)的符號(hào)外,以1~9開頭,由0~9組成是十進(jìn)制。
    2016-05-05
  • Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入與導(dǎo)出

    Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入與導(dǎo)出

    QT中涉及到數(shù)據(jù)庫(kù)相關(guān)的項(xiàng)目,幾乎都需要將少量的信息數(shù)據(jù)導(dǎo)出到文件保存好,然后用戶可以打開該表格進(jìn)行編輯,編輯完成后保存,再重新導(dǎo)入到軟件中。所以本文將具體為大家介紹一下這一功能如何實(shí)現(xiàn),感興趣的可以跟隨小編一起試一試
    2022-01-01
  • C++中的復(fù)制構(gòu)造函數(shù)詳解

    C++中的復(fù)制構(gòu)造函數(shù)詳解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++復(fù)制構(gòu)造函數(shù)的實(shí)現(xiàn)講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2021-09-09
  • Visual Studio 2019下配置 CUDA 10.1 + TensorFlow-GPU 1.14.0

    Visual Studio 2019下配置 CUDA 10.1 + TensorFlow-GPU 1.14.0

    這篇文章主要介紹了Visual Studio 2019下配置 CUDA 10.1 + TensorFlow-GPU 1.14.0,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C語(yǔ)言實(shí)現(xiàn)數(shù)字連連看

    C語(yǔ)言實(shí)現(xiàn)數(shù)字連連看

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)數(shù)字連連看游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++實(shí)現(xiàn)LRU緩存的操作方法

    C++實(shí)現(xiàn)LRU緩存的操作方法

    LRU是一種常用的緩存淘汰策略,主要目的是在緩存空間有限的情況下,優(yōu)先淘汰那些最長(zhǎng)時(shí)間沒有被訪問的數(shù)據(jù)項(xiàng),這篇文章主要介紹了C++實(shí)現(xiàn)LRU緩存,需要的朋友可以參考下
    2024-07-07
  • C語(yǔ)言二維數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲

    C語(yǔ)言二維數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言二維數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語(yǔ)言中結(jié)構(gòu)體的內(nèi)存對(duì)齊規(guī)則講解

    C語(yǔ)言中結(jié)構(gòu)體的內(nèi)存對(duì)齊規(guī)則講解

    C 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng),本篇讓我們來了解C 的結(jié)構(gòu)體內(nèi)存對(duì)齊
    2022-05-05

最新評(píng)論

沽源县| 青铜峡市| 莆田市| 宜宾县| 常州市| 林州市| 南投市| 洞口县| 多伦县| 南乐县| 深水埗区| 济阳县| 寻乌县| 昌江| 石林| 崇信县| 扬中市| 潞城市| 鸡西市| 宜城市| 宜良县| 若羌县| 静安区| 阳原县| 玉林市| 勃利县| 西城区| 南宁市| 简阳市| 新密市| 大连市| 海兴县| 盖州市| 桐梓县| 营山县| 盐池县| 闸北区| 西乌珠穆沁旗| 南岸区| 包头市| 芦溪县|