C语言打开文件顺序查找学号,C++使用文件实现学生信息管理系统

C++实现文件实现学生信息管理系统,供大家参考,具体内容如下

功能如下:

添加学生信息(学生添加完成将直接保存进文件)

成绩信息(c语言,大学英语,高等数学)

个人信息(姓名、性别、学号、年龄)

显示学生信息

查询学生信息

按学号查询

按名字查询

按学号删除学生信息

修改学生信息

按学号对学生进行排序

类的设计:

表示成绩的Score类:

class Score{

public:

float cLauage;//c语言成绩

float math;//高数成绩

float english;//英语成绩

};

学生类

class Student{

public :

char num[10];//学号

int age;//年龄

char name[20];//姓名

char sex[5];//性别

Score sc;

};

教师类

class Teacher{

public:

Student stu[N]; //N为50

void seek();//查找

void modify();//修改信息

void insert();//插入学生信息

void del();//删除学生

void display();//显示学生信息

void sorts();//按学号排序

void help();//帮助信息

void menu();//菜单

void refresh();//刷新

};

主要功能的实现

插入学生信息

主要思想:实例化一个Student对象将输入的学生信息存入该对象,输入完成后将该对象写入文件,代码实现如下:

//插入学生信息

void Teacher::insert(){

int j=n;

int m;//要增加的学生人数

cout<

cin>>m;

do

{

Student stu;

cout<

cin>>stu.num;

cout<

cin>>stu.name;

cout<

cin>>stu.age;

cout<

cin>>stu.sex;

cout<

cin>>stu.sc.cLauage;

cout<

cin>>stu.sc.math;

cout<

cin>>stu.sc.english;

j++;

fstream file("student.txt", ios::out | ios::binary | ios::app);

file.write((char *)&stu, sizeof(Student));//把该学生对象写入文件

file.close();

}while(j

n+=m;

cout<

}

查找学生信息

主要思想:将所有学生对象从文件中读取出来,获取该对象的属性值与输入信息做比较,如果相等则找到该学生对象。否则,不存在该学生。代码如下:

按学号查找

cout<

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) //判断从文件读出对象的学号信息是否和输入相等

{

flag=1;

cout<

cout<

break;

}

}

if(flag!=1)

cout<

file.close();

按姓名查找(只需要获取学生对象的name做比较)

cout<

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)//判断从文件读出对象的姓名信息是否和输入相等

{

flag=1;

cout<

cout<

break;

}

}

if(flag!=1)

cout<

file.close();

显示学生信息

主要思想:将学生信息从文件读出来进行显示。代码如下:

void Teacher::display(){

int flag;

int t=0;

fstream file("student.txt", ios::binary | ios::in);

cout<

while(!file.eof())

{

Student stu;

file.read((char *)&stu, sizeof(Student));//从文件读出所有学生信息

flag=1;

cout<

}

if(flag!=1)

cout<

file.close();

}

修改学生信息

主要思想:将需要修改的学生按学号从文件中取出,为该对象设置新的值,最终在写入文件。代码如下:

void Teacher::modify(){

int item,age,score;//选择修改项,修改年龄

Student stu;

int flag;

char str[20];//暂时存修改内容

cout<

cin>>str;

fstream file("student.txt", ios::binary | ios::in);//打开文件存取学生对象的文件

while(!file.eof())

{

file.read((char *)&stu, sizeof(Student));//读取文件

if(strcmp(stu.num,str)==0)//如果存在学生信息输出

{

flag=1;

cout<

cout<

break;

}

}

if(flag!=1)//如果不存在则提示无该学生

cout<

file.close();

printf("------------------\n");

printf("1.修改姓名\n");

printf("2.修改年龄\n");

printf("3.修改性别\n");

printf("4.修改C语言成绩\n");

printf("5.修改高等数学成绩\n");

printf("6.修改大学英语成绩\n");

printf("7.退出本菜单\n");

printf("------------------\n");

while(1)

{

printf("请选择子菜单编号:");

scanf("%d",&item);

switch(item)

{

case 1:

printf("请输入新的姓名:\n");

cin>>str;

strcpy(stu.name,str); break;//为学生姓名赋新值

case 2:

printf("请输入新的年龄:\n");

cin>>age;

stu.age=age;break;//为学生年龄赋新值

case 3:

printf("请输入新的性别:\n");

cin>>str;

strcpy(stu.sex,str); break;//为学生性别赋新值

case 4:

printf("请输入新的C语言成绩:\n");

cin>>score;

stu.sc.cLauage=score; break;//为学生成绩复新制

case 5:

printf("请输入新的数学成绩:\n");

cin>>score;

stu.sc.math=score; break;

case 6:

printf("请输入新的英语成绩:\n");

cin>>score;

stu.sc.english=score; break;

case 7:{

fstream file("student.txt", ios::out | ios::binary | ios::app);

cout<

file.write((char *)&stu, sizeof(Student));//把新的学生信息写入文件

file.close();

return;

}

default:printf("请在1-7之间选择\n");

}

}

}

删除学生信息

主要思想: 将所有学生对象从文件从读出,把读出的不包括需要删除学生的对象存入vector容器,最终将遍历该vector容器,将所有对象存入文件。代码如下:

void Teacher::del(){

vector va;

Student stu;//将读出的学生信息存入该对象

int flag;

char str[20];

cout<

cin>>str;

fstream file("student.txt", ios::binary | ios::in);//打开文件存取学生对象的文件

while(!file.eof())

{

file.read((char *)&stu, sizeof(Student));//读取文件

if(strcmp(stu.num,str)==0)//如果存在学生信息输出

{

flag=1;

continue;

}

va.push_back(stu);//将非删除的学生存入容器

}

fstream file1("student.txt", ios::out | ios::trunc);

for (int i=0;i

{

file1.write((char *)&va[i], sizeof(Student));//将容器中的学生对象写入文件

}

cout<

file.close();//关闭文件

file1.close();

}

排序功能

主要思想:将所有的对象信息从文件中读出存入vector容器,使用sort()方法结合自定义排序实现学生按学号排序,最终将排序号的遍历写入文件。代码如下:

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

{

return strcmp(a1.num,a2.num)<=0;//按学号从小到大排序

}

void Teacher::sorts(){

vector va;

Student stu;

fstream file("student.txt", ios::binary | ios::in);//打开文件存取学生对象的文件

while(!file.eof())

{

file.read((char *)&stu, sizeof(Student));//读取文件

va.push_back(stu);//将学生对象存入容器

}

va.pop_back();

sort(va.begin(),va.end(),myCompare);//使用sort进行排序

fstream file1("student.txt", ios::out | ios::trunc);

for (int i=0;i

{

file1.write((char *)&va[i], sizeof(Student));//将排序好的写入文件

}

file.close();//关闭文件

file1.close();

}

刷新功能

主要思想:对学生信息进行排序并输出

//刷新

void Teacher::refresh(){

Teacher t;

t.sorts();

t.display();

}

遇到的问题:在从文件读出信息时使用的eof()方法判断是否读到末尾时当读到最后一个字符时,程序会多读一次(编译器会让指针停留在最后一个字符那里,然后重复读取一次,使用while(file.peek() != EOF)就可以解决。

运行截图

添加(在之前的测试中存入了一些数据)

e41539215e8b4541416687e9cad1ed4c.png

查询

d6416a8a6c8c4c5bdfa15a58cd2ff2ef.png

删除

f14f66199ceaa8c3718c531e7a28805c.png

刷新

96cf394e40b517bbd5319c36a2473ee6.png

修改

26e4a2051994fc3af36c08b50dfa1eab.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值