标题:能改一下这C程序为C++程序吗?
只看楼主
寻四叶草
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-5-16
 问题点数:0 回复次数:6 
能改一下这C程序为C++程序吗?

#include<Stdio.h>
#include<Conio.h>
#include<math.h>
#include<string.h>
#define mall (xue *)malloc(sizeof(xue))

int n,r=0; char k[15][7]; /*n是学科的数目,r是在这个成绩表里的总人数,k[15][7]里存储了学科名称(每学科名不长于3个汉字或6个英文字母)*/
typedef struct node
{
int no; /*学号*/
char name[9];
char sex[5];
float kj[15];/*15为最大科目数,各科成绩*/
struct node *next;
}xue;

/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

xue *shu(xue *head) /*输入数据函数*/
{
int j,c,i;
xue *p1,*p2,*p3,*p4;
ji3: p1=mall;p2=head;
if(p2->next!=NULL) /*先找到最后一个位置 */
p2=p2->next;
printf("\n注意:分数和学号等必须是数字,否则会出错\n");
ji2: printf("请输入学生学号(学号应大于0且小于10000):");/*输入学号,学号应大于0*/
scanf("%d",&p1->no);
while(p1->no<0||p1->no>9999)
{getchar();
printf("输入错误,请重新输入学生学号:");
scanf("%d",&p1->no);}
/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/
if(p1->no==0)
goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/
else if(head->next!=NULL)
{
p3=head;
do
{
p3=p3->next;
if(p3->no==p1->no)
{printf("学号重复,请重输!\n");
goto ji2;}
}
while(p3->next!=NULL);
} /*学号输入到此为止*/
printf("请输入学生姓名:");
scanf("%s",&p1->name);/*输入学生姓名*/
printf("请输入学生性别:");
scanf("%s",&p1->sex);/*输入学生性别*/
for(i=0;i<n;i++) /*输入各科成绩*/
{
printf("请输入%s成绩(0---150分):",k[i]);
scanf("%f",&p1->kj[i]);
while(p1->kj[i]<0||p1->kj[i]>150)
{ getchar();
printf("输入错误,请重新输入成绩");
scanf("%f",&p1->kj[i]);
}/*输入错误,重新输入成绩直到正确为止*/
}
printf("\n输入是否有误?如果要重新输入请你选择:要: 1. 不要:其它数字.\n请输入你的选择:");
scanf("%d",&c);
if(c==1) goto ji2;
p1->next=p2->next;
p2->next=p1;
r++; /*记录人数*/

printf("\n你是否还要输入学生成绩资料,是: 1, 不是: 0\t\t请输入:");
scanf("%d",&c);
if(c==1) goto ji3;

end: for(j=1;r>1&&j<r;j++) /*主要用来按学号排好顺序来存储*/
{

p4=head;p2=p4->next;p3=p2->next;
while(p2->next!=NULL)
{
if(p2->no>p3->no)
{p2->next=p3->next;p4->next=p3;p3->next=p2;}
p4=p4->next;p2=p4->next;p3=p2->next;
}
}
printf("\n现在共有学生成绩资料有%d个\n",r);
getch();
return head;
}

min() /*用来建立学生成绩的学科数目和学科名称的函数*/
{
int i; /*n为科目总数,k[i]存储了科目的名称*/

ji1: printf("请输入科目总数(不要超过15科): ");
scanf("%d",&n); /*输入科目总数(不要超过15科)*/

for(i=0;i<n;i++)
{
printf("请输入第%d科的名称(名字为3个汉字或6个英文字母)\n",i+1);
scanf("%s",k[i]); /*输入第学科的名称*/
}
printf("请你查看是否有误,如果要重新输入请按0,按其它数字键继续\n");
scanf("%d",&i);
if(i==0) goto ji1;
}

xue *jian(xue *head) /*建立学生成绩资料函数*/
{
int i;
head=mall;
head->next=NULL;
min(); /*先为你的成绩表定学科数目和学科名称*/
head=shu(head); /*输入数据*/
printf("你要保存这个成绩表吗?要:1,不要:其它数字.\n请你输入:");
scanf("%d",&i);
if(i==1) save(head); /*保存成绩表*/
return head;
}

/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

save(xue *head) /*保存成绩表*/
{
FILE *fp;
xue *p=head;
int i,j;
char file[30]; /*用来存放文件保存路径以及文件名*/
printf("请输入文件路径及文件名:");
scanf("%s",file);
if((fp=fopen(file,"wb"))==NULL)
{
printf("不能打开文件!\n");
return 0;
}
fprintf(fp,"%d\t%d\t",r,n); /*把人数和学科总数输到文件中去*/
for(j=0;j<n;j++)
{
fprintf(fp,"\t%s",k[j]); /*把学科名称输到文件中去*/
}
fprintf(fp,"\n");

for(i=0;i<r;i++) /*r为总的人数,n为科目总数*/
{ /*把成绩和姓名等输到文件中去*/
p=p->next;
fprintf(fp,"%d\t%s\t%s\t",p->no,p->name,p->sex);
for(j=0;j<n;j++)
fprintf(fp,"%.1f\t",p->kj[j]);
fprintf(fp,"\n");
}
fclose(fp);
printf("文件已经保存!\n");
getch();

}

/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

xue *load(xue *head) /*打开文件*/
{
FILE *fp;
xue *p,*p1;
int i,j;
char file[30]; /*用来存放文件保存路径以及文件名*/
p=head;
printf("请输入文件路径及文件名:");
scanf("%s",file);
if((fp=fopen(file,"rb+"))==NULL)
{
printf("不能打开文件!\n");
return 0;
}
printf(" 考试成绩管理系统 \n");
printf("---------------------------------------------------------------------------\n");
printf("----------------------------------------------------------------------------\n");
fscanf(fp,"%d",&r);fscanf(fp,"%d",&n); /*从文件中提取人数和科目总数*/
for(j=0;j<n;j++)
{
fscanf(fp,"%s",&k[j]); /*从文件中提取学科名称*/
}

for(i=0;i<r;i++)
{

p1=mall;
p1->next=NULL;
fscanf(fp,"%d",&p1->no);
fscanf(fp,"%s",&p1->name); /*从文件中提取学生成绩信息*/
fscanf(fp,"%s",&p1->sex);
for(j=0;j<n;j++)
fscanf(fp,"%f",&p1->kj[j]);
p->next=p1;
p=p->next;

}
fclose(fp);
printf("文件读取成功!\n要显示结果吗:要:1; 不要:其它数字. \n输入你的选择: ");
scanf("%d",&i);
if(i==1) prin(head);
getch();
return(head);
}
/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

prin(xue *head) /*显示学生成绩表*/
{
xue *p=head;
int i,j;
if(head->next==NULL)
{
printf("\n没有任何学生资料!\n");
return ;
}
printf("共有%d个人和%d科学科\n",r,n); /*显示学生和学科的总数*/
for(i=0,p=head;i<r;i++) /*r为总的人数,n为科目总数*/
{
p=p->next;
printf("学号:%d \t 姓名:%s\t性别:%s ",p->no,p->name,p->sex);
for(j=0;j<n;j++)
{printf("\t%s:",k[j]);printf("%.1f",p->kj[j]);} /*显示学生成绩信息*/
printf("\n\n");
}
}

/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

/*删除一个学生的资料*/
xue *del(xue *head)/*函数del,功能:删除学生资料*/
{
xue *p1,*p2;
int number,i;
printf("输入要删除的学生的学号(输入0时退出):");
scanf("%d",&number);
getchar();
while(number!=0)/*输入学号为0时退出*/
{
if(head->next==NULL)
{
printf("\n没有任何学生资料!\n");
return(head);
}
p2=head;
p1=head->next;

while(number!=p1->no&&p1->next!=NULL) /*p1指向的不是所要找的首结点,并且后面还有结点*/
{
p2=p1;p1=p1->next;
} /*p1后移一个结点*/
if(number==p1->no) /*找到了*/
{
if(p1==head->next)
head->next=p1->next; /*若p1指向的是首结点,把地二个结点地址赋予head*/
else
p2->next=p1->next; /*否则将下一个结点地址 赋给前一结点地址*/
free(p1); /*释放删除的结点*/
printf("\n%d已经删除了.\n",number);r=r-1;
}
else
printf("学号为%d的学生不存在!如果要建立该学生号,请先返回!\n",number);
/*找不到该结点*/
printf("如果还要删除,请输入要删除的学生的学号,返回请按0:");
scanf("%d",&number);
getchar();
}
printf("你要保存你的修改吗?要:1,不要:其它数字.\n请你输入:");
scanf("%d",&i);
if(i==1) save(head);
printf("现在的学生数为:%d个!\n",r);
return(head);
}
/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

xue *add(xue *head) /*增加学生成绩资料的函数*/
{
int i;
head=shu(head); /*调用shu输入函数,先输入要增加的学生的成绩资料*/
printf("你要保存你的修改吗?要:1,不要:其它数字.\n请你输入:");
scanf("%d",&i);
if(i==1) save(head); /*保存新增加的资料*/
return(head);
}

/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

pai(xue *head,int a,int i) /*查看学号是a,第i科的排名*/
{
xue *p1;
float f,f1=0,f2=0;
int j=1,l,u=1;
p1=head->next;

while(p1->no!=a)
p1=p1->next;
f=p1->kj[i]; /*找到学号为 a 的学生,并用 f 记录 i 这个学生的这科成绩*/

for(l=0;l<n;l++)
f1=f1+p1->kj[l]; /*记录这个学生的总成绩*/

p1=head->next;
while(p1!=NULL)
{
f2=0;
for(l=0;l<n;l++) f2=f2+p1->kj[l]; /* f2 计算每个学生的总成绩*/
if(f<p1->kj[i]) j++; /*总成绩比较,用j记录总成绩排名*/
if(f1<f2) u++; /*各科成绩排名,用u来记录排名*/
p1=p1->next;
}
if(i<0) printf("\t总分是%.1f 第%d名\t",f1,u); /*如果i传入的值是小于0,就做总分排名*/
else printf("%s第%d名\t",k[i],j); /*i>0就做各科排名*/
}

xue *cha(xue *head) /*用来查看学生成绩的函数*/
{
int a,j;
xue *p=head,*p1;
if(head->next==NULL)
{
printf("\n没有任何学生资料!\n");
return(head);
}
ji4: printf("\n输入你要查找的学生学号(1---10000):");
scanf("%d",&a);
if(a<1||a>10000) {printf("输入的学号错误");goto ji4; }
p1=head->next;
while(p1->no!=a&&p1->next!=NULL) /*查找学生*/
p1=p1->next;
if(p1->no==a) /*找到了学生*/
{ /*显示学生成绩及总分,总分排名*/
printf("学号:%d\t姓名:%s\t性别:%s\t",p1->no,p1->name,p1->sex);
for(j=0;j<n;j++)
{printf("\t%s:",k[j]);printf("%.1f",p1->kj[j]);}
printf("\n\n");
pai(head,p1->no,-1);
for(j=0;j<n;j++) pai(head,p1->no,j);
printf("\n\n");
getch();
printf("请你选择你要做的:1为继续查找学生成绩;选其它数字返回再进行其它操作(删除,修改,退出等);");
scanf("%d",&j);
if(j==1) goto ji4;
}

else /*如果输入的学号没找到*/
{printf("\n学号为%d的学生不存在!\n你要继续查找吗?要:1,不要:0。\n请选择:",a);
scanf("%d",&j);
if(j==1) goto ji4;
}
return(head);
}

/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/


[此贴子已经被作者于2006-5-18 22:10:23编辑过]

搜索更多相关主题的帖子: next include 
2006-05-18 22:06
寻四叶草
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-5-16
得分:0 

接上面的程序



xue *gai(xue *head) /*修改学生的成绩资料*/
{
xue *p1;
int number,i;
ji7: printf("输入要修改的学生的学号(输入0时退出):");
scanf("%d",&number);
while(number!=0)/*输入学号为0时退出*/
{
if(head->next==NULL)
{
printf("\n没有任何学生资料!\n");
return(head);
}
p1=head->next;

while(number!=p1->no&&p1->next!=NULL) /*p1指向的不是所要找的首结点,并且后面还有结点*/
p1=p1->next;/*p1后移一个结点*/

if(number==p1->no)/*找到了*/
{
ji5: printf("请输入学生姓名:");
scanf("%s",&p1->name);/*输入学生姓名*/
printf("请输入学生性别:");
scanf("%s",&p1->sex);/*输入学生性别*/
for(i=0;i<n;i++) /*输入各科成绩*/
{
ji6: printf("请输入%s 的成绩",k[i]);
scanf("%f",&p1->kj[i]);
while(p1->kj[i]<0)
{ getchar();
printf("输入错误,请重新输入成绩");
scanf("%f",&p1->kj[i]);
}/*输入错误,重新输入成绩直到正确为止*/
}
}
printf("\n如果你输入错了学生姓名和性别和成绩,请选:1;只输错了成绩,请选2;如果还要修改其它学生的成绩资料,请选:3;否则请按其它数字。\n请输入你的选择:");
scanf("%d",&i);
if(i==1)goto ji5;
else if(i==2) goto ji6;
else if(i==3) goto ji7;
getch();
printf("\n你要保存你所做的修改吗?要,请选:1;不要请选其它数字.\n 请你输入你的选择:");
scanf("%d",&i);
if(i==1) save(head);
getch();
return(head);
}
}
/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

/*学生分数统计和排名*/
xue *tongji(xue *head)
{
xue *p1=head->next,*g=head,*d=head; /*g,*d用来记录总分最高、低的位置*/
float f=0,pf,pff,maxf,minf,gp[n];
float gmax[n],gmin[n],ff=0,gff[n]; /*1个人总分f和平均分pf 2全班平均分pff (全班总分ff) 3考试总分最高分maxf 4考试总分最低分minf
5各科平均分gp[n](各科总分gff[n]) 6各科最高分gmax[n] 7各科最低分gmin[n]*/
int i;
if(head->next==NULL)
{
printf("\n没有任何学生资料!\n");
return(head);
}
maxf=-1;minf=99999;
while(p1!=NULL)
{
printf("\n%d %s ",p1->no,p1->name);
pai(head,p1->no,-1); /*调用pai 函数,输出各人总分和总分排名*/
for(f=0,i=0;i<n;i++)
f=f+p1->kj[i];
ff=ff+f;
if(maxf<f) {g=p1;maxf=f;} /*记录最高分和其位置*/
if(minf>f) {d=p1;minf=f;} /*记录最低分和其位置*/
p1=p1->next;
}

pff=ff/r;
printf("\n全班平均分是%.1f",pff);
printf("\n总分最高是:%s %.1f,总分最低是:%s %.1f !\n",g->name,maxf,d->name,minf);

p1=head->next;
for(i=0;i<n;i++) /*给各科我最高分和最低分和总分初始化*/
{
gmax[i]=p1->kj[i]-1;gmin[i]=p1->kj[i]+1;gff[i]=0;
}
p1=head->next;
while(p1!=NULL)
{
for(i=0;i<n;i++) /*分别记录各科最高分和最低分以及各科总分*/
{
if(gmax[i]<p1->kj[i]) gmax[i]=p1->kj[i];
if(gmin[i]>p1->kj[i]) gmin[i]=p1->kj[i];
gff[i]=gff[i]+p1->kj[i];
}
p1=p1->next;
}
for(i=0;i<n;i++)
{
printf("\n%s的最高分是:%.1f; 最低分是:%.1f; 平均分是:%.1f",k[i],gmax[i],gmin[i],gff[i]/r);
}
printf("\n\n");
}

/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

/*按考试总分成绩排序 按各科成绩排序 */
xue *fen(xue *head) /*先计算每个人的总分,并存在kj[n] 中*/
{
xue *p1;
float b;
int i;
p1=head->next;
while(p1!=NULL)
{
b=0;
for(i=0;i<n;i++)
b=b+p1->kj[i]; /*计算总分*/
p1->kj[n]=b; /*存在kj[n]中*/
p1=p1->next;
}
strcpy(k[n],"总分"); /*把k[n]当作一科分,记为 总分*/
n=n+1; /*由于加入的总分这科,所以总科数加1*/
return(head);
}

xue *xu(xue *head,int o) /*按第o(kj[o])科排名*/
{
xue *p2,*p3,*p4;
int j;
for(j=1;r>1&&j<r;j++) /*排名过程*/
{
p4=head; p2=p4->next; p3=p2->next;
while(p3!=NULL)
{
if(p2->kj[o]<p3->kj[o])
{p2->next=p3->next;p4->next=p3;p3->next=p2;}
p4=p4->next; p2=p4->next; p3=p2->next;
}
}
return(head);
}

xue *paixu(xue *head) /*这是排名的总函数*/
{
int i=0;
head=fen(head);
if(head->next==NULL)
{
printf("\n没有任何学生资料!\n");
return(head);
}
while(i>=0&&i<n)
{
printf("请选择你以什么成绩来排序:");
for(i=0;i<n;i++)
{
printf("%d %s\t",i,k[i]); /*显示学科,让你选择近哪科排名*/
}
printf("输入其它数字退出当前界面!\n请输入你的选择:");
scanf("%d",&i);
if(i>=0&&i<n)
{
printf("\n按%s成绩排名为:\n",k[i]);
head=xu(head,i); /*调用xu()函数,以第i科排名*/
prin(head);
}
}
n=n-1;
getch();
}

/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

/*删除,修改,追加学生的资料,合在一起*/
xue *zhiliao(xue *head)
{
int i=1;
if(head->next==NULL)
{
printf("\n没有任何学生资料!\n");
return(head);
}
while(i>0&&i<4)
{
printf("\n请输入你要做的操作: 1 为修改;\t 2 为删除; \t3 为添加;\t 其它数字退出当前工作.\n请你输入你的选择: ");
scanf("%d",&i);
if(i==1) head=gai(head); /*修改函数*/
else if(i==2) head=del(head); /*删除函数*/
else if(i==3) head=add(head); /*添加函数*/
}
return(head);
}

/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

/*首先建立开始菜单选择界面.*/
int menu2311(k)/*函数menu2311,功能:菜单选择界面*/
{
int i;
for(i=0;i<80;i++)
printf("*");
printf("1:建立学生的资料\t\t\t2:从文件调入资料\t\t\t3:查询学生的成绩\t\t\t");
printf("4:删除,修改,追加学生的资料\n5:保存输入的资料\t\t\t");
printf("6:显示学生的成绩\t\t\t7:统计学生的成绩\t\t\t8:对成绩进行排名\n"); /*菜单选择界面*/
for(i=0;i<80;i++)
printf("*");
printf("如果你还没建立或打开文件,就请先做 1 或 2,做了再做其它的.\n\n欢迎进入成绩管理系统,请选择您所要的操作(选择(0)退出系统):");
scanf("%d",&k);/*选择操作*/
getchar();
return (k);
}

/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/

main()
{
int k;
xue *head;
head=mall;
head->next=NULL;
printf("\t说明: 每次要输入或选择时,都是要输入后,再敲一下回车. 特别提醒: 在输入时一定要看清楚提示,不要看错了数字!!!\n\n");
while(1)
{k=menu2311(k);
switch(k)/*用switch语句实现功能选择*/
{case 1: head=jian(head);break;/*1建立学生的资料*/
case 2: head=load(head);break;/*2从文件调入资料*/
case 3: head=cha(head);break;/*3查询学生的成绩*/
case 4: head=zhiliao(head); break;/*4删除,修改,追加学生的资料*/
case 5: save(head);break;/*5保存输入的资料*/
case 6: prin(head); break;/*6显示学生的成绩*/
case 7: tongji(head); break;/*7统计学生的成绩*/
case 8: paixu(head);break;/*8对成绩进行排名*/
case 0: exit(0);/*退出系统,返回主界面*/
default: printf("\n输入错误,请重试!\n"); }
}
getch();
return 0;
}


能不能帮忙改一下,很急,因为快要交那C++课程设计了!谢谢~~

2006-05-18 22:14
zhourunfa66
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-5-17
得分:0 
应该没什么关系吧!!!!
2006-05-18 22:56
寻四叶草
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-5-16
得分:0 

他要我们用C++编啊!否者我早就交上去了啊!

2006-05-19 12:12
c120110
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2006-2-19
得分:0 

把文件的输入和输出改成C++的!在把屏幕输出和键盘输入改成C++的就差不多了!C++又不是不允许C!


2006-05-19 17:37
寻四叶草
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-5-16
得分:0 

谁有耐心看一下好吗?谢谢了

2006-05-22 12:31
yaogou20
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-5-23
得分:0 

建立一个类代替结构体,将操作函数作为类的成员函数.
如果严格要用C++的话,动态分配内存的时候用new和delete.
用cout,cin作为输入输出.
你试着写写,写出来看看帮你找问题

2006-05-23 15:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-65388-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.119403 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved