设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 437|回复: 5
打印 上一主题 下一主题

请帮帮小弟看哪里出错了,SOS!

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-4 02:07:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好我是新来的,是名C++的超级菜鸟。
以下是一段程序,帮帮小弟看哪里出错了。
谢谢!
-----------------------------------------------------------我是分割线-----------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <iostream.h>
struct StuType
{
char No[10];
char Xm[10];
float Cj_En;
};
extern char *DataFile="d:\\学生成绩.dat" ;
bool Jy_No(char *Stu_NO,FILE *FP);
bool Jy_Cj(float Stu_Cj);
bool Jy_Xm(char *Stu_Xm);
void Data_Disp(char *DataFileName,int n);
void Data_Stu(StuType Stu);
//******************************
// 产生数据文件与增加数据记录
//******************************
void CreatFile()
{
FILE *fp;
int REC=0; // 追加的记录数
StuType Stu,Stu0={"","",0};
fp=fopen(DataFile,"ab+"); //按追加可读写方式打开文件
if(!fp)
{
cout<<"信息错误,操作失败!"<<endl;
return;
}
while(1) //输入记录
{
Stu=Stu0;
do {printf("\n请输入学号:");
scanf("%10s",&Stu.No); //输入学号,并检查
}while(!Jy_No(Stu.No,fp));
do {printf("\n请输入姓名:"); //输入姓名,并检查
scanf("%s",&Stu.Xm);
}while(!Jy_Xm(Stu.Xm));
do {printf("\n英语成绩:"); //输入成绩,并检查
scanf("%f",&Stu.Cj_En);
}while(!Jy_Cj(Stu.Cj_En));

fwrite(&Stu,sizeof(struct StuType),1,fp); // 将刚输入的记录写入文件
REC++;
}
fclose(fp);//关闭文件
printf("\n 所追加的数据清单如下: \n");
Data_Disp(DataFile,REC); //显示所追加的数据清单。
}
//**************************************************
// 学号正确性校验,不准重复,字符串长度为No_Len
//**************************************************
bool Jy_No(char *Stu_No,FILE *FP)
{
const int No_Len=9;
StuType Stu;
if(!strcmp(Stu_No,"#")) return true;
if(!strlen(Stu.No)==No_Len)
{
cout<<"学号的编码长度应该是"<<No_Len<<"!!!"<<endl;
return false;
}
else
{
rewind(FP);
while(!feof(FP))
{
fread(&Stu,sizeof(struct StuType),1,FP);
if(!strcmp(Stu_No,Stu.No))
{
cout<<"学号编码重复!该生的成绩如下: "<<endl;
Data_Stu(Stu);
return false;
}
}
return true;
}
}

//**************************************
// 显示学生的数据
//**************************************
void Data_Stu(StuType Stu)
{
printf(" 序号 学号 姓名 英语成绩\n");
printf("=========================================================================\n");
printf("%10s %10s %10.1f \n",&Stu.No,&Stu.Xm,Stu.Cj_En);
}
//***********************************************
// 姓名正确性校验,不准空白,不检查重复。
//***********************************************
bool Jy_Xm(char *Stu_Xm)
{
int Stu_XmPD=(int) *Stu_Xm;
if(Stu_XmPD>0)
{
cout<<"姓名只能用汉字开头!!!"<<endl;
return false;
}
return true;
}
//********************************************
//成绩正确性校验,必须是0-100之间的符点数
//********************************************
bool Jy_Cj(float Stu_Cj)
{
if(Stu_Cj<0||Stu_Cj>100)
{
cout<<"成绩必须在0-100之间!!!"<<endl;
return false;
}
return true;
}

main()
{
int choice;
printf(" 欢迎使用成绩查询系统\n
");
printf(" 请选择系统功能\n
");
printf(" 1 输入数据\n");
printf(" 2 显示数据\n");
printf(" 3 按姓名查找数据\n");
printf(" 4 按学号查找数据\n");
printf(" 5 统计数据\n");
printf(" 6 退出系统\n");
scanf("%d",&choice);
switch(choice)
{
case 1: CreatFile();break;
case 2: Disp_File(DataFile);break;
case 3: Data_XmCx(DataFile);break;
case 4: Data_NoCx(DataFile);break;
case 5: Data_TjCx(DataFile);break;
case 6: return;
}
}
2#
发表于 2009-11-4 02:07:02 | 只看该作者
好象说只有1处错误,在线等候解答~!谢谢
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-4 02:07:03 | 只看该作者
晕~怎么没人会吗?斑竹啊~也回回吧~晕~看来我这个新手人缘不太好啊~
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-4 02:07:04 | 只看该作者
很多错误,函数名全是错的
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-4 02:07:05 | 只看该作者
Alome,
很不好意思,我是个不称职的版主,之所以说不称职就是因为对这里关心的太少了,不过这个局面也不会有太大的改动,因为自己也有自己的事情要做,所以无暇照顾大家。看到你的短消息后,看了一下你的帖子。发现你的程序中用到了很多没有定义的函数,此外,你的程序是C 语言风格的程序,当然C++ 是包容 C 的,所以我在局部地方帮你做了一些改动。那些没有定义的函数,我帮你加上去了,但是具体的代码并没有帮你写,也就是说你得自己写。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. using namespace std;

  5. struct StuType
  6. {
  7. char No[10];
  8. char Xm[10];
  9. float Cj_En;
  10. };

  11. char * DataFile = "d:\\学生成绩.dat" ;
  12. bool Jy_No(char * Stu_NO, FILE * FP);
  13. bool Jy_Cj(float Stu_Cj);
  14. bool Jy_Xm(char * Stu_Xm);
  15. void Data_Disp(char * DataFileName, int n);
  16. void Data_Stu(StuType Stu);

  17. //******************************
  18. // 产生数据文件与增加数据记录
  19. //******************************
  20. void CreatFile()
  21. {
  22. FILE * fp;
  23. int REC=0; // 追加的记录数
  24. StuType Stu,Stu0={"","",0};
  25. fp=fopen(DataFile,"ab+"); //按追加可读写方式打开文件
  26. if(!fp)
  27. {
  28. cout<<"信息错误,操作失败!"<<endl;
  29. return;
  30. }
  31. while(1) //输入记录
  32. {
  33. Stu=Stu0;
  34. do
  35. {
  36. printf("\n请输入学号:");
  37. scanf("%10s", Stu.No); //输入学号,并检查
  38. }while(!Jy_No(Stu.No, fp));

  39. do
  40. {
  41. printf("\n请输入姓名:"); //输入姓名,并检查
  42. scanf("%s", Stu.Xm);
  43. }while(!Jy_Xm(Stu.Xm));

  44. do
  45. {
  46. printf("\n英语成绩:"); //输入成绩,并检查
  47. scanf("%f",&Stu.Cj_En);
  48. }while(!Jy_Cj(Stu.Cj_En));

  49. fwrite(&Stu,sizeof(struct StuType),1,fp); // 将刚输入的记录写入文件
  50. REC++;
  51. }
  52. fclose(fp);//关闭文件
  53. printf("\n 所追加的数据清单如下: \n");
  54. Data_Disp(DataFile, REC); //显示所追加的数据清单。
  55. }

  56. //**************************************************
  57. // 学号正确性校验,不准重复,字符串长度为No_Len
  58. //**************************************************
  59. bool Jy_No(char *Stu_No,FILE *FP)
  60. {
  61. const int No_Len=9;
  62. StuType Stu;
  63. if(!strcmp(Stu_No,"#"))
  64. return true;
  65. if(!strlen(Stu.No)==No_Len)
  66. {
  67. cout<<"学号的编码长度应该是"<<No_Len<<"!!!"<<endl;
  68. return false;
  69. }
  70. else
  71. {
  72. rewind(FP);
  73. while(!feof(FP))
  74. {
  75. fread(&Stu,sizeof(struct StuType),1,FP);
  76. if(!strcmp(Stu_No,Stu.No))
  77. {
  78. cout<<"学号编码重复!该生的成绩如下: "<<endl;
  79. Data_Stu(Stu);
  80. return false;
  81. }
  82. }
  83. return true;
  84. }
  85. }


  86. //**************************************
  87. // 显示学生的数据
  88. //**************************************
  89. void Data_Stu(StuType Stu)
  90. {
  91. printf(" 序号 学号 姓名 英语成绩\n");
  92. printf("=========================================================================\n");
  93. printf("%10s %10s %10.1f \n", Stu.No, Stu.Xm, Stu.Cj_En);
  94. }

  95. //***********************************************
  96. // 姓名正确性校验,不准空白,不检查重复。
  97. //***********************************************
  98. bool Jy_Xm(char *Stu_Xm)
  99. {
  100. int Stu_XmPD=(int) *Stu_Xm;
  101. if(Stu_XmPD>0)
  102. {
  103. cout<<"姓名只能用汉字开头!!!"<<endl;
  104. return false;
  105. }
  106. return true;
  107. }

  108. //********************************************
  109. //成绩正确性校验,必须是0-100之间的符点数
  110. //********************************************
  111. bool Jy_Cj(float Stu_Cj)
  112. {
  113. if(Stu_Cj<0||Stu_Cj>100)
  114. {
  115. cout<<"成绩必须在0-100之间!!!"<<endl;
  116. return false;
  117. }
  118. return true;
  119. }

  120. void Disp_File(char * filepath)
  121. {
  122. //add your code

  123. }

  124. void Data_XmCx(char * DataFile)
  125. {
  126. //add your code

  127. }

  128. void Data_NoCx(char * DataFile)
  129. {
  130. //add your code

  131. }

  132. void Data_TjCx(char * DataFile)
  133. {
  134. //add your code

  135. }

  136. int main()
  137. {
  138. int choice;
  139. printf(" 欢迎使用成绩查询系统\n");
  140. printf(" 请选择系统功能\n");
  141. printf(" 1 输入数据\n");
  142. printf(" 2 显示数据\n");
  143. printf(" 3 按姓名查找数据\n");
  144. printf(" 4 按学号查找数据\n");
  145. printf(" 5 统计数据\n");
  146. printf(" 6 退出系统\n");
  147. scanf("%d",&choice);
  148. switch(choice)
  149. {
  150. case 1:
  151. CreatFile();
  152. break;
  153. case 2:
  154. Disp_File(DataFile);
  155. break;
  156. case 3:
  157. Data_XmCx(DataFile);
  158. break;
  159. case 4:
  160. Data_NoCx(DataFile);
  161. break;
  162. case 5:
  163. Data_TjCx(DataFile);
  164. break;
  165. case 6:
  166. break;
  167. }

  168. return 0;
  169. }

复制代码
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-4 02:07:06 | 只看该作者
你调用的函数都是一些你没有定义的函数,而你定义的函数你又没有调用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-19 00:52 , Processed in 0.077746 second(s), 8 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表