看着提示错误就想吐了,好不容易熬了好些日子才写了出来,不行了,大虾来帮忙改改错!

feixuan238 2012-07-12 01:59:09
如题:
真的好烦躁,现在
憋了好久终于些出了这个小系统,但些出来的真的是什么啊
我都怀疑自己是否适合做这行了
主要是自身性格问题了,个人比较浮躁,拖延成性!
开始时真感觉一点头绪都没有,整个一做这个系统下来都是模模糊糊的
老师上课吧,我承认没认真听,但一听就犯困,好不容易听了,又听不懂!
对这个课程设计老师又没什么具体叫我们怎么做!也没告诉过做系统的思路(抑或没听进去..)
到底是自己不够努力还是存在太大差距啊..
但情况也是这样的,我真正看书和上机操作的时间并不多,课程多到烦去
整个大一都是浑浑噩噩的...
我想这种情况不止我一个人吧...
废话不多说了
上代码,希望大虾帮忙修改下错误,现在真的很累
今晚真撑不住了,心累身累,一看到那可恶的代码就想吐..
就一般的成绩管理系统,我真的没学好...

#include "stdafx.h"
#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<iomanip.h>
class Stu //构建学生类
{
public:

friend void Lookup(Stu stud[]) ; //成绩查询
friend void Average(Stu stud[]);
friend void Score(Stu stud[]);
friend void Output(Stu stud[]) ; //学生成绩信息全部输出
friend void Sort(Stu stud[]) ; //按总分从高到低排序
friend int Read(Stu stud[]); //从文本读入成绩

private:
int num[20];
char name[20];
float english[20];
float math[20];
float elec[20]; //计算机导论
float c_program[20];
float sport[20];
float average[20];
float score[20];//总分

}stud[100];


int Read(Stu stud[]) //从文件中读20个本科生的5门科目成绩信息
{
int i;
char str[255];
FILE *fpr,*fpw,*fpq;
if((fpr=fopen("read.txt","r"))==NULL)
{
printf("\n 文件打开错误!\n");
exit(0);
}
fgets(str,255,fpr);
for(i=0;i<20;i++)
fscanf(fpr,"%d %s %f %f %f %f %f",&num[i],&name[i],&english[i],&math[20],&elsc[20],&c_program[20],&sport[20]);
fclose(fpr);
return 20;

}

viod average(Stu stud[]){
int i;
for(i=0;i<20;i++)
stud[i].average=(stud[i].elec+stud[i].c_program+stud[i].english+stud[i].math+stud[i].sport)/5;
for(i=0;i<20;i++)
cout<<stud[i].num<<" "<<stud[i].name<<" 平均分为:"<<stud[i].average<<endl;
}


viod score(Stu stud[]){
int i;
for(i=0;i<20;i++)
stud[i].score=(stud[i].elec+stud[i].c_program+stud[i].english+stud[i].math+stud[i].sport);
for(i=0;i<20;i++)
cout<<stud[i].num<<" "<<stud[i].name<<" 总分为:"<<stud[i].score<<endl;

}

void Lookup(Stu stud[]) //---------------按学号查找学生成绩
{
system("cls");
int n=Read(stud);
int s;
int i=0;
cout<<endl<<"====>> 查找学生成绩 <<===="<<endl;
cout<<"请输入需要查找学生的学号:"<<endl;
cin>>s;
while((stud[i].num-s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
cout<<"=====>提示:对不起,无法找到该学生的信息!"<<endl; /*输入失败信息*/
}
else
{
cout<<"---------------------------"<<endl;
/*输出该学生信息*/
cout<<"学号:"<<stud[i].num<<endl;
cout<<"姓名:"<<stud[i].name<<endl;
cout<<"计算机导论:"<<stud[i].elec<<endl;
cout<<"C++程序设计:"<<stud[i].c_program<<endl;
cout<<"大学英语:"<<stud[i].english<<endl;
cout<<"高等数学:"<<stud[i].math<<endl;
cout<<"大学体育:"<<stud[i].sport<<endl;


}
}



void Sort(Stu stud[]) //---------------按平均分对学生成绩记录项进行降序排序
{
system("cls"); /*运行前清屏*/
int i,j;
int k=0;
float a=0;
char n[19];
FILE *fpw;
if((fpw=fopen("write.txt","w"))==NULL)
{
printf("\n 文件打开错误!\n");
exit(0);
}
for(i=0;i<19;i++)
{
for(j=i+1;j<20;j++)
{
if(stud[i].score<stud[j].score)
{
a = stud[j].score;
stud[j].score = stud[i].score;
stud[i].score = a;
k = stud[i].num;
stud[i].num = stud[j].num;
stud[j].num = k;
strcpy(n,stud[i].name);
strcpy(stud[i].name,stud[j].name);
strcpy(stud[j].name,n);
}
}
}
cout<<"成绩由高到低排序为:"<<endl;
for(i=0;i<20;i++)
cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl;
for(i=0;i<20;i++)
fprintf(fpw,"%d %s %5.1f\n",stud[i].num,stud[i].name,stud[i].score);
fclose(fpw);

}


void Output(Stu stud[]) //---------------显示全部学生成绩
{
system("cls");
int n=Read(stud);
cout<<endl<<"====>> 显示全部学生成绩 <<===="<<endl;
if(!stud)
cout<<"没有记录";
else
{
cout<<"----------------------------------------------------"<<endl; /*格式头*/
cout<<setw(6)<<"学号"<<setw(6)<<"姓名"<<setw(6)<<"计算机导论"<<setw(6)<<"C++"<<setw(6)<<"大学英语"<<setw(6)<<"高等数学"<<setw(6)<<"大学体育"<<" "<<setw(6)<<"平均分"<<endl;
cout<<"------------------------------------------------"<<endl;
for(int i=0;i<n;i++) /*循环输入*/
{
cout<<setw(6)<<stud[i].num<<setw(6)<<stud[i].name<<setw(6)<<stud[i].elec<<setw(6)<<stud[i].c_program<<setw(6)<<stud[i].english<<setw(6)<< stud[i].math<<setw(6)<<stud[i].sport<<" "<<setw(6)<<setprecision(4)<<stud[i].average<<endl;
}
cout<<"--------------------------------------------------------"<<endl;
}
}


int menu() /*菜单函数*/
{
char c;
do
{

system("cls");
cout<<"*************************************************************\n"<<endl;
cout<<" -----------------<<欢迎您使用xuan.0学生成绩管理系统--------------\n"<<endl;
cout<<" *******************************************\n\n"<<endl;/*菜单选择*/
cout<<" * 【1】从文本读入学生成绩 * "<<endl;
cout<<" * 【2】计算显示学生平均分 * "<<endl;
cout<<" * 【3】计算显示学生总分 * "<<endl;
cout<<" * 【4】查询学生成绩 * "<<endl;
cout<<" * 【5】排序并写入文本 * "<<endl;
cout<<" * 【6】显示全部学生成绩 * "<<endl;
cout<<"***************************************************************"<<endl;
cout<<"请你选择操作(0-6):"<<endl;
c=getchar(); /*读入选择*/
}
while(c<'0'||c>'6');
return(c-'0'); /*返回选择*/
}
void main() /*主函数*/
{
for(;;)
{
switch(menu()) /*选择判断*/
{
case 1:
Read(stud);/*从文本读入学生成绩*/
break;
case 2:
Average(stud); /*计算显示学生平均分*/
break;
case 3:
Score(stud); /*计算显示学生总分*/
cout<<"\t\t\t";

break;
case 4:
Lookup(stud); /*查询学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case 5:
Sort(stud); /*排序并写入文本*/
cout<<"\t\t\t";
// system("pause");
break;
case 6:
Output(stud);/*显示全部学生成绩*/
cout<<"\t\t\t";
// system("pause");
break;

case 0:
cout<<endl<<" ================================<<感谢您xuan.0学生成绩管理系统>>===============================\n"<<endl; /*结束程序*/
cout<<"\t\t\t";
system("pause");
exit(0);
}
}
}

就是要是现那六个功能了,要读入的是20个学生的5们成绩
(有个txt的附件,上传不了?直接粘上俩吧)
num 姓名 英语 数学 计导 C++ 大学体育
1001 赛文 87 88 90 75 92
1002 杰克 77 90 95 95 75
1003 泰罗 68 50 66 70 88
1004 雷欧 55 70 80 90 85
1005 奥特 56 66 56 80 70
1006 爱迪 33 95 95 90 90
1007 迪迦 70 88 88 88 88
1008 戴拿 18 20 50 60 90
1009 盖亚 88 30 30 60 80
1010 诺亚 66 50 56 44 78
1011 曹操 59 58 74 86 65
1012 貂蝉 85 69 85 53 69
1013 西施 56 98 59 45 58
1014 小乔 98 67 86 76 95
1015 大乔 89 85 89 73 80
1016 刘邦 100 75 89 83 95
1017 吕布 49 76 69 43 79
1018 张飞 85 48 58 75 63
1019 关羽 56 74 36 85 85
1020 赵云 58 41 56 59 85


谢谢了,感激不尽!
2点了,再直播30分钟,看看有什么进展...
...全文
186 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixuan238 2012-07-12
  • 打赏
  • 举报
回复
为什么读不入文本里的信息?怎么解决?
我觉得有必要使用//system("cls");清屏吧
其实还有个研究生继承类的功能的,继承始终学不会用
现在如果再添加个研究生派生类(公共继承本科学生类),增加数据成员成绩3门
要怎么做?
[Quote=引用 1 楼 的回复:]

C/C++ code

//#include "stdafx.h"
#include<iostream>
#include<fstream>
#include <vector>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<iomanip>
using namespace std;

class Stu //构……
[/Quote]
_Minzey 2012-07-12
  • 打赏
  • 举报
回复

//#include "stdafx.h"
#include<iostream>
#include<fstream>
#include <vector>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<iomanip>
using namespace std;

class Stu //构建学生类
{
public:

friend void Lookup(Stu stud[]) ; //成绩查询
friend void Average(Stu stud[]);
friend void Score(Stu stud[]);
friend void Output(Stu stud[]) ; //学生成绩信息全部输出
friend void Sort(Stu stud[]) ; //按总分从高到低排序
friend int Read(Stu stud[]); //从文本读入成绩

private:
/* int num[20];
char name[20];
float english[20];
float math[20];
float elec[20]; //计算机导论
float c_program[20];
float sport[20];
float average[20];
float score[20];//总分
*/
int num;
char name[20];
float english;
float math;
float elec; //计算机导论
float c_program;
float sport;
float average;
float score;//总分

}stud[100];


int Read(Stu stud[]) //从文件中读20个本科生的5门科目成绩信息
{
int i;
char str[255];
FILE *fpr,*fpw,*fpq;
if((fpr=fopen("read.txt","r"))==NULL)
{
printf("\n 文件打开错误!\n");
exit(0);
}
fgets(str,255,fpr);
for(i=0;i<20;i++)
//fscanf(fpr,"%d %s %f %f %f %f %f",&num[i],&name[i],&english[i],&math[20],&elsc[20],&c_program[20],&sport[20]);
fscanf(fpr,"%d %s %f %f %f %f %f",&stud[i].num,&stud[i].name,&stud[i].english,&stud[i].math,&stud[i].elec,&stud[i].c_program,&stud[i].sport);
fclose(fpr);
return 20;

}

//void average(Stu stud[]){
void Average(Stu stud[]){
int i;
for(i=0;i<20;i++)
stud[i].average=(stud[i].elec+stud[i].c_program+stud[i].english+stud[i].math+stud[i].sport)/5;
for(i=0;i<20;i++)
cout<<stud[i].num<<" "<<stud[i].name<<" 平均分为:"<<stud[i].average<<endl;
}


//viod score(Stu stud[]){
void Score(Stu stud[]){
int i;
for(i=0;i<20;i++)
stud[i].score=(stud[i].elec+stud[i].c_program+stud[i].english+stud[i].math+stud[i].sport);
for(i=0;i<20;i++)
cout<<stud[i].num<<" "<<stud[i].name<<" 总分为:"<<stud[i].score<<endl;

}

void Lookup(Stu stud[]) //---------------按学号查找学生成绩
{
//system("cls");
int n=Read(stud);
int s;
int i=0;
cout<<endl<<"====>> 查找学生成绩 <<===="<<endl;
cout<<"请输入需要查找学生的学号:"<<endl;
cin>>s;
while((stud[i].num-s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
cout<<"=====>提示:对不起,无法找到该学生的信息!"<<endl; /*输入失败信息*/
}
else
{
cout<<"---------------------------"<<endl;
/*输出该学生信息*/
cout<<"学号:"<<stud[i].num<<endl;
cout<<"姓名:"<<stud[i].name<<endl;
cout<<"计算机导论:"<<stud[i].elec<<endl;
cout<<"C++程序设计:"<<stud[i].c_program<<endl;
cout<<"大学英语:"<<stud[i].english<<endl;
cout<<"高等数学:"<<stud[i].math<<endl;
cout<<"大学体育:"<<stud[i].sport<<endl;


}
}



void Sort(Stu stud[]) //---------------按平均分对学生成绩记录项进行降序排序
{
//system("cls"); /*运行前清屏*/
int i,j;
int k=0;
float a=0;
char n[19];
FILE *fpw;
if((fpw=fopen("write.txt","w"))==NULL)
{
printf("\n 文件打开错误!\n");
exit(0);
}
for(i=0;i<19;i++)
{
for(j=i+1;j<20;j++)
{
if(stud[i].score<stud[j].score)
{
a = stud[j].score;
stud[j].score = stud[i].score;
stud[i].score = a;
k = stud[i].num;
stud[i].num = stud[j].num;
stud[j].num = k;
strcpy(n,stud[i].name);
strcpy(stud[i].name,stud[j].name);
strcpy(stud[j].name,n);
}
}
}
cout<<"成绩由高到低排序为:"<<endl;
for(i=0;i<20;i++)
cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl;
for(i=0;i<20;i++)
fprintf(fpw,"%d %s %5.1f\n",stud[i].num,stud[i].name,stud[i].score);
fclose(fpw);

}


void Output(Stu stud[]) //---------------显示全部学生成绩
{
//system("cls");
int n=Read(stud);
cout<<endl<<"====>> 显示全部学生成绩 <<===="<<endl;
if(!stud)
cout<<"没有记录";
else
{
cout<<"----------------------------------------------------"<<endl; /*格式头*/
cout<<setw(6)<<"学号"<<setw(6)<<"姓名"<<setw(6)<<"计算机导论"<<setw(6)<<"C++"<<setw(6)<<"大学英语"<<setw(6)<<"高等数学"<<setw(6)<<"大学体育"<<" "<<setw(6)<<"平均分"<<endl;
cout<<"------------------------------------------------"<<endl;
for(int i=0;i<n;i++) /*循环输入*/
{
cout<<setw(6)<<stud[i].num<<setw(6)<<stud[i].name<<setw(6)<<stud[i].elec<<setw(6)<<stud[i].c_program<<setw(6)<<stud[i].english<<setw(6)<< stud[i].math<<setw(6)<<stud[i].sport<<" "<<setw(6)<<setprecision(4)<<stud[i].average<<endl;
}
cout<<"--------------------------------------------------------"<<endl;
}
}


int menu() /*菜单函数*/
{
char c;
do
{

//system("cls");
cout<<"*************************************************************\n"<<endl;
cout<<" -----------------<<欢迎您使用xuan.0学生成绩管理系统--------------\n"<<endl;
cout<<" *******************************************\n\n"<<endl;/*菜单选择*/
cout<<" * 【1】从文本读入学生成绩 * "<<endl;
cout<<" * 【2】计算显示学生平均分 * "<<endl;
cout<<" * 【3】计算显示学生总分 * "<<endl;
cout<<" * 【4】查询学生成绩 * "<<endl;
cout<<" * 【5】排序并写入文本 * "<<endl;
cout<<" * 【6】显示全部学生成绩 * "<<endl;
cout<<"***************************************************************"<<endl;
cout<<"请你选择操作(0-6):"<<endl;
c=getchar(); /*读入选择*/
}
while(c<'0'||c>'6');
return(c-'0'); /*返回选择*/
}
void main() /*主函数*/
{
for(;;)
{
switch(menu()) /*选择判断*/
{
case 1:
Read(stud);/*从文本读入学生成绩*/
break;
case 2:
Average(stud); /*计算显示学生平均分*/
break;
case 3:
Score(stud); /*计算显示学生总分*/
cout<<"\t\t\t";

break;
case 4:
Lookup(stud); /*查询学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case 5:
Sort(stud); /*排序并写入文本*/
cout<<"\t\t\t";
// system("pause");
break;
case 6:
Output(stud);/*显示全部学生成绩*/
cout<<"\t\t\t";
// system("pause");
break;

case 0:
cout<<endl<<" ================================<<感谢您xuan.0学生成绩管理系统>>===============================\n"<<endl; /*结束程序*/
cout<<"\t\t\t";
system("pause");
exit(0);
}
}
}


怎么说呢..很多细节问题主意一下吧..我改了一点,剩下的你再改进。
feixuan238 2012-07-12
  • 打赏
  • 举报
回复
对的,文件的读写老师都基本呢不讲的,这个是模仿他写的![Quote=引用 7 楼 的回复:]

fgets跳过第一行的数据抬头?
[/Quote]
RLib 2012-07-12
  • 打赏
  • 举报
回复
这东西就是没类库来得方便,不友好
赵4老师 2012-07-12
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看文件或内存中的原始字节内容。

不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了
赵4老师 2012-07-12
  • 打赏
  • 举报
回复
请检查fscanf的返回值!
赵4老师 2012-07-12
  • 打赏
  • 举报
回复
fgets跳过第一行的数据抬头?
luoyingbinfeng 2012-07-12
  • 打赏
  • 举报
回复
strcpy(n,stud[i].name);
strcpy(stud[i].name,stud[j].name);
strcpy(stud[j].name,n);
strcpy是复制一个字符吧,如果要复制一个字符串要strncpy并且要三个参数,最后一个参数是字符串的长度!
luoyingbinfeng 2012-07-12
  • 打赏
  • 举报
回复
fgets(str,255,fpr);
for(i=0;i<20;i++)
fscanf(fpr,"%d %s %f %f %f %f %f",&num[i],&name[i],&english[i],&math[20],&elsc[20],&c_program[20],&sport[20]);
为什么fgets以后还要fscanf?搞不懂
cobra_chen 2012-07-12
  • 打赏
  • 举报
回复
调用了fgets,在调用fscanf。
楼主要读两行?
feixuan238 2012-07-12
  • 打赏
  • 举报
回复
现场直播啊,有木有!
一直在做等高人指点..
为什么读不入文本里的信息?怎么解决?
我觉得有必要使用//system("cls");清屏吧
其实还有个研究生继承类的功能的,继承始终学不会用
现在如果再添加个研究生派生类(公共继承本科学生类),增加数据成员成绩3门
要怎么做?

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧