本帖最后由 juezuo 于 2018-7-3 15:26 编辑
我的程序差不多就完成了。但是就是差3个模块,分别是读写文件,按平均成绩查询。按总成绩查询 ,拜托论坛里面的大神了。我想了好久,编译器总能出错.
下面是代码
红色注释的是所需要解决的问题
#include<iostream>
#include<iomanip>
#include<string>
#include <fstream>
#include <stdlib.h>
using namespace std;
class student
{
int num;
char name[20];
char class1[20];
double chinese;
double math;
double english;
double youxiu;//优秀率
double bujige;//不及格率
double sum;//总成绩
double aver1;//平均成绩
int tenum;//电话号码
char addr[100];//家庭地址
public:
void wenjian() <font color="red">// 这个是文件的写入模块。但是好像是覆盖,就是写入一次就覆盖前面写入的内容,我希望改成再次写入时,不要覆盖上次写入的数据</font>
{
cout<<"学生学号:";
cin>>num;
cout<<"学生姓名:";
cin>>name;
cout<<"学生电话号码 :";
cin>>tenum;
cout<<"家庭地址 ";
cin>>addr;
cout<<"学生班级:";
cin>>class1;
cout<<"语文成绩:";
cin>>chinese;
cout<<"英语成绩:";
cin>>english;
cout<<"数学成绩:";
cin>>math;
ofstream outfile("student.txt");
if (outfile.is_open())
{
outfile<<"学生学号:"<<num<<endl;
outfile<<"学生姓名:"<<name<<endl;
outfile<<"学生电话号码 :"<<tenum<<endl;
outfile<<"家庭地址 "<<addr<<endl;
outfile<<"学生班级:"<<class1<<endl;
outfile<<"语文成绩:"<<chinese<<endl;
cout<<"英语成绩:"<<english<<endl;
outfile<<"数学成绩:"<<math<<endl;
outfile<<"已成功存入文件中 ^_^"<<endl;
//将数据写入student.txt文件中
outfile.close();
}
/* FILE *fp;
int ch;
if ((fp=fopen("student.txt","w")) ==NULL)
{
cerr<<"\n无法打开此文件!"<<endl;
exit(EXIT_FAILURE);
}
while((ch=getc(fp))!= EOF)
{
putchar(ch);
}
fclose(fp);
*/
/*
void openfile()<font color="red"> //这个是文件的打开模块,就是,打开文件数据并输入到屏幕当中,这个也弄了好久编译器不通过</font>
{
ifstream file1("student.txt");
if (file1.is_open()) //打开文件并且读取数据模块
{
file1>>num; //从文件中读取学生学号
cout<<"学号:"<<num<<endl;
file1>>name;
cout<<"学生姓名:"<<name<<endl;
file1.close();
}
}
*/
}
void set()
{
cout<<"是否需要录入txt文件中:(Y/N)"<<endl;
char c;
cin>>c;
char b;
if (c=='y' || c=='Y')
{
do
{
wenjian();
cout<<"\n是否需要退出(y/n)"<<endl;//推出模块
cin>>b;
if (b=='y' || b=='Y')
{
c='n';
}
} while (c=='y' || c=='Y');
}else{
cout<<"\t学生学号:";
cin>>num;
cout<<"\t学生姓名:";
cin>>name;
cout<<"\t学生电话号码 :";
cin>>tenum;
cout<<"\t家庭地址 ";
cin>>addr;
cout<<"\t学生班级:";
cin>>class1;
cout<<"\t语文成绩:";
cin>>chinese;
cout<<"\t英语成绩:";
cin>>english;
cout<<"\t数学成绩:";
cin>>math;
}
}
void show()
{
cout<<"该学生的学号:"<<num<<endl;
cout<<"该学生的姓名:"<<name<<endl;
cout<<"该学生的电话号码 "<<tenum<<endl;
cout<<"该学生的家庭地址 "<<addr<<endl;
cout<<"该学生的班级:"<<class1<<endl;
cout<<"该学生的语文成绩:"<<chinese<<endl;
cout<<"该学生的数学成绩:"<<math<<endl;
cout<<"该学生的英语成绩:"<<english<<endl;
}
double ad(){return sum=chinese+english+math;}
double sum1();
double aver()
{
aver1=(chinese+english+math)/3;
return aver1;
}
friend void show();
friend void search();
friend void change();
friend void add();
friend void paixu();
friend void del();
};
void input();
void show();
void search();
void change();
void add();
void paixu();
void del();
student s[100];
int n=0;
int main()
{
int select;
while(1)
{
system("cls");
cout<<"\t ******************欢迎使用******************\n";
cout<<"\t **************学生成绩管理系统**************\n";
cout<<"\t *------------------------------------------*\n";
cout<<"\t * 1——录入学生信息 *\n";
cout<<"\t * 2——显示学生信息 *\n";
cout<<"\t * 3——查询学生信息 *\n";
cout<<"\t * 4——修改学生信息 *\n";
cout<<"\t * 5——添加学生信息 *\n";
cout<<"\t * 6——排序学生信息 *\n";
cout<<"\t * 7——删除学生信息 *\n";
cout<<"\t * 0——退出 *\n";
cout<<"\t *------------------------------------------*\n";
cout<<"\t 你要输入的编号是(0--7):";
cin>>select;
if(select==0) break;
switch(select){
case 1:
input(); //调用input函数录入数据
system("pause");
break;
case 2:
show(); //调用show函数显示学生信息
system("pause");
break;
case 3:
search(); //调用search函数查询学生信息
system("pause");
break;
case 4:
change(); //调用change函数修改学生信息
system("pause");
break;
case 5:
add(); //调用add函数添加学生信息
system("pause");
break;
case 6:
paixu(); //调用add函数添加学生信息
system("pause");
break;
case 7:
del(); // 调用del函数删除学生信息
system("pause");
break;
system("pause");
default:
cout<<"没有此选项,请重新选择!"<<endl;
}
}
return 0;
}
void input() //录入学生信息的函数
{
char sel;
do
{
n++;
cout<<"\t请输入第"<<n<<"个学生信息:\t"<<endl;
s[n].set();
cout<<"是否要继续录入学生信息(Y/N):";
cin>>sel;
}while(sel=='Y' || sel=='y' );
}
void show()
{
cout<<left; //设置输出左对齐
cout<<setw(10)<<"学生学号"
<<setw(10)<<"学生姓名"
<<setw(15)<<"学生电话号码"
<<setw(15)<<"学生家庭地址"
<<setw(13)<<"学生班级"
<<setw(12)<<"语文成绩"
<<setw(12)<<"数学成绩"
<<setw(12)<<"英语成绩"
<<endl;
for(int i=1;i<=n;i++)
{
cout<<setw(10)<<s.num
<<setw(10)<<s.name
<<setw(15)<<s.tenum
<<setw(15)<<s.addr
<<setw(13)<<s.class1
<<setw(12)<<s.chinese
<<setw(12)<<s.math
<<setw(12)<<s.english<<endl;
}
cout<<endl;
}
double sum1()
{
int i;
double sum=0;
for(i=1;i<=n;i++)
{
sum=ad(); <font color="red">//这个是计算总分模块,但是我用VC6.0报错'ad' : undeclared identifier?明明已经定义了?? </font>
}
return sum;
}
<font color="red">//类似的求平均分模块,也拜托吧里的大神了</font>
void search()//查询
{
int a,b,i;char c[20];
cout<<"请选择查询方式:"<<endl;
cout<<"按学生姓名查询请按1"<<endl;
cout<<"按学生学号查询请按2"<<endl;
cin>>a;
switch(a)
{
case 1:
{char sel;
do{
cout<<"请输入你要查的学生的姓名:"<<endl;
cin>>c;
for(i=1;i<=n;i++)
if(strcmp(s.name,c)==0)
{cout<<"你要查的学生信息为:"<<endl;
cout<<"学生学号:"<<s.num<<endl<<"学生姓名:"
<<s.name<<endl<<"学生班级:"
<<s.class1<<endl<<"学生电话号码 "
<<s.tenum<<endl<<"学生家庭住址 "
<<s.addr<<endl<<"语文成绩:"
<<s.chinese<<endl<<"数学成绩:"
<<s.math<<endl<<"英语成绩:"
<<s.english<<endl;
break;
}
else if(strcmp(s.name,c)!=0&&i==n)
{cout<<"没有这个学生!"<<endl;break;}
cout<<"是否要继续查询学生信息(Y/N):";
cin>>sel;
}while(sel=='Y' || sel=='y' );
break;
}
case 2:
{ char sel;
do{
cout<<"请输入你要查的学生的学号:"<<endl;
cin>>b;
for(i=1;i<=n;i++)
if(s.num==b)
{
cout<<"你要查的学生信息为:"<<endl;
cout<<"学生学号:"<<s.num<<endl<<"学生姓名:"
<<s.name<<endl<<"学生班级:"
<<s.class1<<endl<<"学生电话号码 "
<<s.tenum<<endl<<"学生家庭住址 "
<<s.addr<<endl<<"语文成绩:"
<<s.chinese<<endl<<"数学成绩:"
<<s.math<<endl<<"英语成绩:"
<<s.english<<endl;
break;
}
else if(s.num!=b&&i==n)
{cout<<"没有这个学生!请核对后再输入!"<<endl;break;}
cout<<"是否要继续查询学生信息(Y/N):";
cin>>sel;
}while(sel=='Y' || sel=='y' );
break;}
case 3:
{
extern openfile();
break;
}
default:
cout<<"您的输入有误!"<<endl;
}
}
void change()
{
{ char sel;
int d,i,e,f,g=0;
do{
cout<<"请输入你要修改的学生的学号:"<<endl;
cin>>d;
for(i=1;i<=n;i++)
if(s.num==d)
{
cout<<"你要修改的学生信息为:"<<endl;
cout<<"学生学号:"<<s.num<<endl<<"学生姓名:"
<<s.name<<endl<<"学生班级:"
<<s.class1<<endl<<"学生电话号码"
<<s.tenum<<endl<<"学生家庭住址"
<<s.addr<<endl<<"语文成绩:"
<<s.chinese<<endl<<"数学成绩:"
<<s.math<<endl<<"英语成绩:"
<<s.english<<endl;
e=1;
break;
}
else if(s.num!=d&&i==n)
{cout<<"没有这个学生!请核对后再输入!"<<endl;
e=0;break;}
while(e==1)
{ {cout<<"请输入该学生要修改的信息对应的数字:"<<endl;
cout<<"学生学号:1"
<<'\t'<<"学生姓名:2"
<<'\t'<<"学生班级:3"
<<'\t'<<"学生电话号码 :4"
<<'\t'<<"学生家庭:5"
<<'\t'<<"语文成绩:6"
<<'\t'<<"数学成绩:7"
<<'\t'<<"英语成绩:8"<<endl;
}
cin>>f;
switch(f)
{case 1:cout<<"\t新的学生学号为:";
cin>>s.num;break;
case 2:cout<<"\t新的学生姓名为:";
cin>>s.name;break;
case 3:cout<<"\t新的学生班级为:";
cin>>s.class1;break;
case 4:cout<<"\t新的学生电话号码为:";
cin>>s.tenum;break;
case 5 :cout<<"\t新的学生家庭地址为:";
cin>>s.addr;break;
case 6:cout<<"\t新的语文成绩为:";
cin>>s.chinese;break;
case 7:cout<<"\t新的数学成绩为:";
cin>>s.math;break;
case 8:cout<<"\t新的英语成绩为:";
cin>>s.english;break;
default:cout<<"您的输入有误,请重新输入!";
cin>>f;}
e=0;
g=1;
}
if(g==1)
{ cout<<"修改成功!";}
cout<<"是否要继续修改学生信息(Y/N):";
cin>>sel;
}while(sel=='Y' || sel=='y' );
}
}
void add()
{
char sel;
do
{
n++;
cout<<"\n请输入第"<< n <<"个学生信息:\n";
cout<<"\t学生学号:";
cin>>s[n].num;
cout<<"\t学生姓名:";
cin>>s[n].name;
cout<<"\t学生班级:";
cin>>s[n].class1;
cout<<"\t学生电话号码为:";
cin>>s[n].tenum;
cout<<"\t学生家庭地址为:";
cin>>s[n].addr;
cout<<"\t语文成绩:";
cin>>s[n].chinese;
cout<<"\t数学成绩:";
cin>>s[n].math;
cout<<"\t英语成绩:";
cin>>s[n].english;
cout<<"是否要继续添加学生信息(Y/N):";
cin>>sel;
}while(sel=='Y' || sel=='y' );
}
void paixu()
{
int a;
cout<<"请选择排序方式:"<<endl;
cout<<"1.按学号排序;"<<endl
<<"2.按总成绩排序;"<<endl
<<"3.按平均成绩排序;"<<endl;
cin>>a;
switch(a)
{
case 1:
{int t=0;
for(int i=0;i<n-1;i++)
for(int j=0;j<n-i;j++)
if(s[j].num>s[j+1].num)
{ t=s[j].num;
s[j].num=s[j+1].num;
s[j+1].num=t;}
cout<<"按学号排序结果:"<<endl;
cout<<left; //设置输出左对齐
cout<<setw(10)<<"学生学号"
<<setw(10)<<"学生姓名"
<<setw(13)<<"学生班级"
<<setw(10)<<"学生电话"
<<setw(10)<<"学生家庭地址"
<<setw(12)<<"语文成绩"
<<setw(12)<<"数学成绩"
<<setw(12)<<"英语成绩"
<<endl;
for(i=1;i<=n;i++)
{ cout<<setw(10)<<s.num
<<setw(10)<<s.name
<<setw(13)<<s.class1
<<setw(10)<<s.tenum
<<setw(10)<<s.addr
<<setw(12)<<s.chinese
<<setw(12)<<s.math
<<setw(12)<<s.english<<endl;}
}
break;
/* case 2:
{double t;
for(int i=0;i<n-1;i++)
{ for(int j=0;j>n-i-1;j++)
{
if(s[j].sum>s[j+1].sum)
t=s[j].sum; s[j].sum=s[j+1].sum; s[j+1].sum=t;
}
}
cout<<"按总成绩排序结果:"<<endl;
for(i=1;i<=n;i++)
cout<<"学号:"<<s.num<<"\t"<<"姓名:"<<s.name<<"\t"<<"班级:"<<s.class1<<"\t"
<<"语文成绩:"<<s.chinese<<"\t"<<"数学成绩:"<<s.math<<"\t"<<"英语成绩"<<s.english<<"\t总成绩"<<ssum<<endl;
cout<<endl;
}
break;*/
/* case 3:
int t;
for(int i=0;i<n-1;i++)
{ for(int j=0;j>n-1-i;j++)
{
if(s[j].aver()>s[j+1].aver())
t=s[j].aver(); s[j].aver()=s[j+1].aver(); s[j+1].aver()=t;
}
}
cout<<"按平均成绩排序结果:"<<endl;
for(i=0;i<n;i++)
cout<<"学号:"<<s.num<<"\t"<<"姓名:"<<s.name<<"\t"<<"班级:"<<s.class1<<"\t"
<<"语文成绩:"<<s.chinese<<"\t"<<"数学成绩:"<<s.math<<"英语成绩"<<s.english<<endl;
cout<<endl;
}
break ;
*/
default:
{cout<<"您的输入有误!请重新输入!"<<endl;
cin>>a;}
}
}
void del()
{
int j,i,k;char c[10],sel,y;
do{
cout<<"请输入你要删除的学生的姓名:"<<endl;
cin>>c;
for(i=1;i<=n;i++)
if(strcmp(s.name,c)==0)
{cout<<"你要删除的学生信息为:"<<endl;
cout<<"学生学号:"<<s.num<<endl
<<"学生姓名:"<<s.name<<endl
<<"学生班级:"<<s.class1<<endl
<<"学生电话:"<<s.tenum<<endl
<<"学生家庭地址:"<<s.addr<<endl
<<"语文成绩:"<<s.chinese<<endl
<<"数学成绩:"<<s.math<<endl
<<"英语成绩:"<<s.english<<endl;
cout<<"确认删除?(y/n):";
cin>>y;
if(y=='Y'||y=='y')
{
for(j=i;j<=n+1;j++)
{
s[j]=s[j+1];
} k=1;
}
else
cout<<"删除失败!"<<endl;
break;
}
else if(strcmp(s.name,c)!=0&&i==n)
{cout<<"没有这个学生!请核对后再输入!"<<endl;
k=0;break;}
while(k==1)
{
if(y=='Y'||y=='y')
cout<<"删除成功!";
n--;
k=0;
}
cout<<"是否要继续删除学生信息(Y/N):";
cin>>sel;
}while(sel=='Y' || sel=='y' );
}
1.文件打开用追加模式
2.
double sum1()
{
int i;
double sum=0;
for(i=1;i<=n;i++)
{
sum=ad();
}
return sum;
}
|