}
/*课程管理程序
设计程序对学生选修课程情况进行记录和管理。
一名学生可选修多门课程,每条课程记录包括课程名,学分,选修学期和成绩等信息。
要求进行如下操作:
1)输入多个学生的选修课程信息,以清晰的格式写到文件中;
2)修改某个学生的选课记录,增加新选修的课程;
3)在文件中查找某个学生的信息,输出所有选修的课程;
4)删除某个学生的所有选课信息
5)核查所有不满足毕业条件学生名单(如选修学分不足、某学期不及格课程超过3科等)。
*/
#include
#include
#include
#include
usingnamespacestd;
constintMAXCHOOSE=10;//最大选课数量
structlesson//课程结构体
{
charname[20];
intcredit,choose,score;
};
structstudent//学生结构体
{
charname[20];
intnum,total;
lessonrecord[MAXCHOOSE];
};
voidinput()//输入函数
{
ofstreamfout("student.dat",ios:
:
binary|ios:
:
app);//打开文件
intn,cnt,i;
studentcur;
cout<<"输入学生的总数"<cin>>n;
while(n--)//一个个的读入学生数据
{
cout<<"输入学生的姓名和学号:
"<cin>>cur.name>>cur.num;
cout<<"输入该学生所选课程的总数:
"<cin>>cnt;
cur.total=cnt;
cout<<"输入每门课程的名字,学分,选修学期和成绩"<for(i=0;i{
cin>>cur.record[i].name>>cur.record[i].credit>>cur.record[i].choose>>cur.record[i].score;
}
fout.write((char*)&cur,sizeof(student));//写入文件中
}
fout.close();
}
voidchange()//修改学生数据的函数
{
ifstreamfin;
ofstreamfout;
fin.open("student.dat",ios:
:
binary);
if(!
fin)
cout<<"没有学生记录,请先输入"<else
{
boolflag=false;
charname[20];
intnum,incres,i;
studentcur[100];
intcount=0;
cout<<"输入要修改的学生姓名和学号"<cin>>name>>num;
while(fin.read((char*)&cur[count],sizeof(student)))
{
if(strcmp(cur[count].name,name)==0&&cur[count].num==num)//若当前读取的数据为要修改的学生则修改
{
cout<<"输入要增加的课程数目"<cin>>incres;
cout<<"输入每门课程的课程名,学分,选修学期和成绩"<for(i=0;i{
cin>>cur[count].record[cur[count].total].name>>cur[count].record[cur[count].total].credit>>cur[count].record[cur[count].total].choose>>cur[count].record[cur[count].total].score;
cur[count].total++;
}
flag=true;
}
count++;
}
fin.close();
fout.open("student.dat",ios:
:
binary);
for(intc=0;c{
fout.write((char*)&cur[c],sizeof(student));
}
fout.close();
if(!
flag)
{
cout<<"要查找的学生不在记录中"<}
}
}
voidfind()//查找函数
{
fstreamfin("student.dat",ios:
:
binary|ios:
:
in);
if(!
fin)
cout<<"记录不存在,请先输入"<else
{
charname[20];
intnum,i;
studentcur;
cout<<"请输入要查找的学生的姓名和学号"<cin>>name>>num;
while(fin.read((char*)&cur,sizeof(student)))//从文件中读入学生数据,若为当前要查询的学生,输出
{
if(strcmp(cur.name,name)==0&&cur.num==num)
{
cout<<"该学生共选修了"<cout<<"课程名学分选修学期成绩"<for(i=0;i{
cout<}
return;
}
}
cout<<"要查找的学生不在记录中"<fin.close();
}
}
voiddel()//删除函数
{
ifstreamfin;
ofstreamfout;
fin.open("student.dat",ios:
:
binary);
if(!
fin)
cout<<"没有学生记录,请先输入"<else
{
charname[20];
intnum;
studentcur[100];
intcount=0;
cout<<"输入要删除的学生姓名和学号"<cin>>name>>num;
while(fin.read((char*)&cur[count],sizeof(student)))
{
if(strcmp(cur[count].name,name)==0&&cur[count].num==num)//若当前读取的数据为要删除的学生
{
count--;
}
count++;
}
fin.close();
fout.open("student.dat",ios:
:
binary);
for(intc=0;c{
fout.write((char*)&cur[c],sizeof(student));
}
fout.close();
}
}
voidcheck()//检查函数
{
ifstreamfin("student.dat",ios:
:
binary);
if(!
fin)
cout<<"记录不存在,请先输入"<else
{
studentcur;
inti,cnt;
boolflag=0;
cout<<"不合格学生的名单:
"<while(fin.read((char*)&cur,sizeof(student)))//读入学生数据,若有3科以上不及格,则输出
{
for(i=0,cnt=0;iif(cur.record[i].score<60)
cnt++;
if(cnt>3)
{
flag=1;
cout<}
}
if(flag==0)
cout<<"没有不合格的学生"<fin.close();
}
}
intmain()
{
intchoose;
cout<<"--------课程管理程序---------"<cout<<"1)输入学生数据"<cout<<"2)修改学生数据"<cout<<"3)查询学生数据"<cout<<"4)删除学生数据"<cout<<"5)检查不合格的学生"<cout<<"选择以上功能,6退出程序"<while
(1)
{
cout<<"请输入选择"<cin>>choose;
if(choose==6)
break;
if(choose<1||choose>6)
cout<<"输入错误,重新输入"<else
{
switch(choose)
{
case1:
input();break;
case2:
change();break;
case3:
find();break;
case4:
del();break;
case5:
check();break;
}
}
}
return0;
}
/*一条学生的记录包括学号、姓名和成绩等信息,
要求进行如下读写操作:
(1)格式化输入多个学生记录;
(2)以清晰的格式写到文件stu.txt中;
(3)按二进制方式写到文件stu.dat中;
(4)从文件中读出对成绩求平均值;
(5)对文件中按成绩排序再写回文件中.
(6)在文件中查找某个学生的信息,修改成绩并重新写入文件*/
#include
#include
#include
#include
usingnamespacestd;
classStudent
{
public:
intnumber;
charname[20];
intscore;
};
voidmain()
{
//
(1)格式化输入多个学生记录,
(2)以清晰的格式写到文件stu.txt中;
ofstreamfout;
fout.open("stu.txt");
cout<<"请输入学生个数"<intn,i;
cin>>n;
Student*stu=newStudent[n];
for(i=0;i{
cout<<"请输入第"<
";
cin>>stu[i].name;
cout<<"请输入第"<
";
cin>>stu[i].number;
cout<<"请输入第"<
";
cin>>stu[i].score;
}
for(i=0;i{
fout<<""<:
left)<"<:
left)
<<"学号:
"<"<}
//(3)按二进制方式写到文件stu.dat中
ofstreamfout2;
fout2.open("stu2.dat");
fout2.write((char*)stu,sizeof(Student)*n);
fout2.close();
//(4)从文件中读出对成绩求平均值
ifstreamfin2;
fin2.open("stu2.dat");
inttotal=0;
for(i=0;i{
Students;
fin2.read((char*)&s,sizeof(Student));
cout<<"学生姓名:
"<"<"<total=total+s.score;
}
cout<<"平均值:
"<fin2.close();
//(5)对文件中按成绩排序再写回文件中.
intj,t1,t2;
charstr[20];
for(i=0;i{
intk=i;
for(j=i+1;j{
if(stu[k].score>stu[j].score)
{t1=stu[k].score;stu[k].score=stu[j].score;stu[j].score=t1;
t2=stu[k].number;stu[k].number=stu[j].number;stu[j].number=t2;
strcpy(str,stu[k].name);strcpy(stu[k].name,stu[j].name);strcpy(stu[j].name,str);
}
}
}
for(i=0;i{
fout<<""<:
left)<"<:
left)
<<"学号:
"<"<}
fout.close();
//(6)在文件中查找某个学生的信息,修改成绩并重新写入文件
cout<<"请输入查找学生的学号"<intno;
cin>>no;
ifstreamfin;
fin.open("stu2.dat");
fin.seekg(sizeof(Student)*(no-1));
Students2;
fin.read((char*)&s2,sizeof(Student));
cout<<"学号为"<"<"<fin.close();
fstreamfio;
fio.open("stu2.dat");
Students3;
cout<<"输入修改后的成绩"<cin>>s3.score;
strcpy(s3.name,s2.name);
s3.number=s2.number;
fio.seekp(sizeof(Student)*(no-1));
fio.write((char*)&s3,sizeof(Student));
Students4;
fio.read((char*)&s4,sizeof(Student));
fio<<"修改后:
"<<"学号为:
"<"<"<fio.close();
}
/*有5个员工的数据,包括职员的姓名、工号和周薪,要求:
(1)把它们存到磁盘文件中;
(2)将磁盘文件中的第1,3,5个员工数据读入程序并显示;
(3)将第3个员工的数据修改后存回磁盘文件中的原有位置。
(4)从磁盘文件读入修改后的5个员工的数据并显示出来。
(5)增添新员工的信息
(6)删除第一个员工的信息*/
#include
#include
usingnamespacestd;
classEmployee
{
public:
charname[20];
intnumber;
intwage;
};
voidmain()
{
//
(1)把它们存到磁盘文件中;
ofstreamfout;
fout.open("employee.dat");
inti;
Employeeemp[5];
for(i=0;i<5;i++)
{
cout<<"输入第"<
cin>>emp[i].name>>emp[i].number>>emp[i].wage;
}
fout.write((char*)emp,sizeof(Employee)*5);
fout.close();
//
(2)将磁盘文件中的第1,3,5个员工数据读入程序并显示;
ifstreamfin;
fin.open("employee.dat");
for(i=0;i<5;i=i+2)
{
Employeeemploy;
fin.read((char*)&employ,sizeof(Employee));
cout<<"第"<
fin.seekg(sizeof(Employee)*(i+2));
}
fin.close();
//(3)将第3个员工的数据修改后存回磁盘文件中的原有位置。
ifstreamfin2;