C++简单编程题目 求大神教育 学生成绩管理系统

题目一:学生成绩管理系统任务:自学C语言中有关线性表及外部文件的内容,独立设计上述应用系统,并编程实现以下功能。信息录入录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等)。 (1)信息查询 输入学号,查询学生各门课程的成绩及所有课程的平均成绩; 查询所有学生各门课程的成绩,并按可选的自定义规则进行排序。 (2)信息删除与修改 输入学号,删除该学生的成绩信息;输入学号,查询并显示出该学生的成绩信息,并在此基础上进行修改。 (3)信息保存 将学生的学号、姓名及各门课程的成绩等信息保存于外部存储器的文件。要求: (1)根据以上功能需求,定义学生成绩信息结构,并采用线性表结构对数据进行存储; (2)为了保证所有的数据可以长期被使用,要求程序能将录入数据存储在外部数据文件中,具体数据格式自定; (3)提供友好的用户界面,方便用户操作。
while(g)
{
printf("\n\t\t\t\t主菜单\n");
printf("\t\t=====================================\n");
printf("\t\t1.输入学号,查询学生各门课程的成绩及所有课程的平均成绩\n");
printf("\t\t2.查询所有学生各门课程的成绩,并按可选的自定义规则进行排序\n");
printf("\t\t3.输入学号,删除该学生的成绩信息\n");
printf("\t\t4.输入学号,查询并显示出该学生的成绩信息,并在此基础上进行修改\n");
printf("\t\t5.将学生的学号、姓名及各门课程的成绩等信息保存于外部存储器的文件\n");
printf("\t\t6.退出系统\n");
printf("\t\t=====================================\n");
printf("\n请选择功能:\n");
scanf("%d",&x);
switch(x)
小弟觉得大概用这个格式 大神求帮忙

 #include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>
/*作者:北京交通大学运输10级 lenhal
  功能:成绩管理系统
  时间:2012年7月
*/
int n=2;             //全局变量,要输入的学生数,自行改变其值
struct student
{
 char num[10];
 char name[10];
 float score[3];
 float avg;
}stu[200];
/**********************************************************************************************/
void enter(struct student t[])//输入数据
{
 int i,j,k,a;
 system("cls");
 printf("输入数据之前,请确定输入的人数\n你是否已经确定了人数\n");
 printf("是输入1回车继续\n否输入0回车退出程序,改变全局变量的值\n");
 scanf("%d",&a);
 if(a!=1)
  exit(0);
 for(i=0;i<n;i++)
 {
  system("cls");                          //清屏
  printf("请输入第%d个学生的学号:\n",i+1);
  scanf("%s",t[i].num);
  for(j=0;j<i;j++)
   if(strcmp(t[i].num,t[j].num)==0)                  //避免有相同的学号
   {
    i--;
    printf("此学号的学生已存在,请重新输入:");
    Sleep(3000);
    break;
   }
 }
 for(i=0;i<n;i++)
 {
  system("cls");
  printf("请输入学号为%s学生的:(用空格隔开) \n名字 第一门成绩 第二门成绩 第三门成绩\n",t[i].num);
  //t[i].score[0]=0;t[i].score[1]=0;t[i].score[2]=0;
  scanf("%s%f%f%f",t[i].name,&t[i].score[0],&t[i].score[1],&t[i].score[2]);
  t[i].avg=(t[i].score[0]+t[i].score[1]+t[i].score[2])/3.0;
 }
}
/**********************************************************************************************/
int list(struct student t[])               //显示所有信息
{
 int i;
 system("cls");
 printf("所有%d个学生信息如下:\n\n",n);
 printf("学号     名字    第一门成绩   第二门成绩   第三门成绩   平均分\n");
 for(i=0; ;i++)
 {
  if(strlen(t[i].num)!=0)                 //判断是否结束
  printf("%s\t%s\t  %5.2f\t        %5.2f\t    %5.2f\t %5.2f\t\n",
  t[i].num,t[i].name,t[i].score[0],t[i].score[1],t[i].score[2],t[i].avg);
  else 
   break;
 }
 putchar(10);
}
/**********************************************************************************************/
void research(struct student t[])           //按学号查找某个信息
{
 int i,a,y;
 char s[10];
 while(1)
 {
 system("cls");
 printf("请输入要查询的学号:");
 scanf("%s",&s);
 for(i=0; ;i++)
 {
  system("cls");
  if (!(strcmp(s,t[i].num)))         //如果找到该学号,则输出
  {
   printf("学号为%s的学生成绩如下:\n\n",t[i].num);
   printf("学号    名字    第一门成绩   第二门成绩   第三门成绩   平均分\n");
      printf("%s\t%s\t  %5.2f\t        %5.2f\t    %5.2f\t %5.2f\t\n",
      t[i].num,t[i].name,t[i].score[0],t[i].score[1],t[i].score[2],t[i].avg);
   putchar(10);
   break;
  }
  else if((strcmp(s,t[i].num))!=0 && strlen(t[i].num)==0)//查找完毕后找不到该学号,结束
  {
   printf("\n没有此学号的信息:\n\n");
   break;
  }
 }
 printf("************************************\n");
 printf("   继续查询,输入1回车\n");
 printf("   返回主菜单,输入2回车\n");
 printf("   退出程序,输入任意回车\n");
 printf("************************************\n");
 scanf("%d",&a);
 if(a==1)
 research(stu,n);
 else if(a==2)
  break;
 else
 {
  system("cls");
  printf("是否退出?直接退出输入1回车,保存数据退出输入2回车,输入22回主菜单\n建议退出前先保存数,否则数据将丢失");
  scanf("%d",&y);
  if(y==1)
     exit(0);
  else if(y==2)
   save(stu);
  else
   main();
 }
 }
 main();
}
/**********************************************************************************************/
void del(struct student t[])             //删除某一学生的信息
{
 int i,j,a,z,y;
 char b[10];
 system("cls");
 printf("请输入要删除的学号:");
 scanf("%s",b);
 for(i=0; ;i++)                    
  if(strcmp(b,t[i].num)==0)
   break;
  else if((strcmp(b,t[i].num))!=0 && strlen(t[i].num)==0)
  {
   printf("没有此学号的信息:\n\n");
   Sleep(3000);
   break;
  }
 if(strlen(t[i].num)!=0)
 {
 system("cls");
 printf("确认删除? 是输入1回车\n");
 scanf("%d",&z);
 if(z==1)
 for(j=i; ;j++)
 {
  if(strlen(t[j].num)==0)
   break;
  else
  {
      t[j]=t[j+1];
   n=n-1;
  }
 }
 }
 system("cls");
 printf("************************************\n");
 printf("   继续删除,输入1回车\n");
 printf("   返回主菜单,输入2回车\n");
 printf("   退出程序,输入任意回车\n");
 printf("************************************\n");
 scanf("%d",&a);
 if(a==1)
 del(stu);
 else if(a==2)
  main();
 else
 {
  system("cls");
  printf("是否退出?直接退出输入1回车,保存数据退出输入2回车,输入22回主菜单\n建议退出前先保存数,否则数据将丢失");
  scanf("%d",&y);
  if(y==1)
     exit(0);
  else if(y==2)
   save(stu);
  else
   main();
 }
}
/**********************************************************************************************/
void add(struct student t[])                    //增加学生数据
{
 int i,j,m,a,y;
 system("cls");
 printf("请输入要增加的记录数:\nm=");
 scanf("%d",&m);
 for(i=n;i<n+m;i++)
 {
 system("cls");
 printf("请输入第%d个新增学生的学号:",i-n+1);
 scanf("%s",t[i].num);
 for(j=0;j<i;j++)
   if(strcmp(t[i].num,t[j].num)==0)           //避免学号重复
   {
    i--;
    printf("此学号的学生已存在,请重新输入:");
    Sleep(3000);
    break;
   }
 }
 for(i=n;i<n+m;i++)
 {
  system("cls");
  printf("请输入增加学号为%s学生的:(用空格隔开) \n名字 第一门成绩 第二门成绩 第三门成绩\n",t[i].num);
  //t[i].score[0]=0;t[i].score[1]=0;t[i].score[2]=0;
  scanf("%s%f%f%f",t[i].name,&t[i].score[0],&t[i].score[1],&t[i].score[2]);
  t[i].avg=(t[i].score[0]+t[i].score[1]+t[i].score[2])/3.0;
 }
 n=n+m;                     //学生数等于本来学生数加新加的学生数
 printf("************************************\n");
 printf("   继续添加,输入1回车\n");
 printf("   返回主菜单,输入2回车\n");
 printf("   退出程序,输入任意回车\n");
 printf("************************************\n");
 scanf("%d",&a);
 if(a==1)
 add(stu);
 else if(a==2)
  main();
 else
 {
  system("cls");
  printf("是否退出?直接退出输入1回车,保存数据退出输入2回车,输入22回主菜单\n建议退出前先保存数,否则数据将丢失");
  scanf("%d",&y);
  if(y==1)
     exit(0);
  else if(y==2)
   save(stu);
  else
   main();
 }
}
/**********************************************************************************************/
int save(struct student t[])                           //保存数据到文件中
{
 FILE *fp;
 char s[20],ch;
 int i,a,y;
 system("cls");
 printf("保存到新的文件输入1回车\n保存到已有文件输入2回车\n");
 scanf("%d",&a);
 ch=getchar();           //接收回车字符,否则gets()函数将空格赋给s,出错
 if(a==1)
 {
 printf("请输入新的文件名:\n(包括其拓展名,20个字符以下)\n");
 gets(s);
 if((fp=fopen(s,"w+"))==NULL)         //使fp指向文件
 {
  printf("没有此文件\n");
  exit(0);
 }
 }
 else if(a==2)
 {
 printf("请输入已有文件名:\n(包括其拓展名,20个字符以下)\n");
 gets(s);
 if((fp=fopen(s,"w+"))==NULL)
 {
  system("cls");
  printf("没有此文件\n");
  exit(0);
  
 }
 }
 fprintf(fp,"%d\n",n);           //将学生数写的文件中
 for(i=0; ;i++)
  if(strlen(t[i].num)!=0)     //如果学号不为空,将数据写到指定文件中
  {
   fprintf(fp,"%s\t%s\t%-5.2f\t%-5.2f\t%-5.2f\t%-5.2f",
         t[i].num,t[i].name,t[i].score[0],t[i].score[1],t[i].score[2],t[i].avg);
   fprintf(fp,"\n");
  }
  else
   break;
 fclose(fp);
 system("cls");
 printf("    \n保存完成!\n");
}
/**********************************************************************************************/
void read(struct student t[])                //读取文件中的数据
{
 FILE *fp;
 int y,m,i,x;
 char s[20],ch;
 ch=getchar();         //接收回车字符,否则gets()函数将空格赋给s,出错
 system("cls");
 printf("请输入要读取数据的文件名:\n(包括其拓展名,20个字符以下)\n");
 gets(s);
 if((fp=fopen(s,"r"))==NULL)
 {
  system("cls");
  printf("没有此文件\n");
  Sleep(3000);
  system("cls");
  printf("是否退出?直接退出输入1回车,保存数据退出输入2回车,输入22回主菜单\n建议退出前先保存数,否则数据将丢失");
  scanf("%d",&y);
  if(y==1)
     exit(0);
  else if(y==2)
   save(stu);
  else
   main();
 }
 fscanf(fp,"%d",&x);//读取学生数
 for(i=0;i<x;i++)             //读取所有数据
  fscanf(fp,"%s%s%f%f%f%f",t[i].num,t[i].name,&t[i].score[0],
  &t[i].score[1],&t[i].score[2],&t[i].avg);
 fclose(fp);
 system("cls");
 n-=n; //将n置0
 n=x;
 printf("    \n读取完成!\n");
}
/**********************************************************************************************/
 menu()              //选择菜单
{
 int x;
 printf("请选择相应的菜单:\n");
 printf("************************************\n");
 printf("   输入新记录,输入0回车\n");
 printf("   显示全部学生成绩,输入1回车\n");
 printf("   查询相应的记录,输入2回车\n");
 printf("   删除相应的记录,输入3回车\n");
 printf("   增加新的记录,输入4回车\n");
 printf("   从文件中读入记录,输入5回车\n");
 printf("   按平均分从高到低排序并输出,输入6回车\n");
 printf("   按学号从低到高排序并输出,输入7回车\n");
 printf("   查找每门成绩的最高分,输入8回车\n");
 printf("   保存成绩到文本中,输入9回车\n");
 printf("   退出程序,输入11回车\n");
 printf("************************************\n");
 scanf("%d",&x);
 return x;
}
 /**********************************************************************************************/
 void to_exit()          //退出
 {
  int y;
  system("cls");
  printf("是否退出?直接退出输入1回车,保存数据退出输入2回车,输入22回主菜单\n建议退出前先保存数,否则数据将丢失");
  scanf("%d",&y);
  if(y==1)
     exit(0);
  else if(y==2)
   save(stu);
  else
   main();
 }
/**********************************************************************************************/
 void avg_arrange(struct student t[])//按平均分从高到低排序
 {
  int i,j;
  struct student temp[1];
  for(i=0;i<n-1;i++)
   for(j=i+1;j<n;j++)
    if(t[i].avg < t[j].avg)
    {
     temp[0]=t[i];
     t[i]=t[j];
     t[j]=temp[0];
    }
 list(stu);
 }
 /**********************************************************************************************/
 void num_arrange(struct student t[])//按学号从小到大排序
 {
  int i,j;
  struct student temp[1];
  for(i=0;i<n;i++)
   for(j=0;j<n-1;j++)
    if(strcmp(t[j].num,t[j+1].num)>0)
    {
     temp[0]=t[j];
     t[j]=t[j+1];
     t[j+1]=temp[0];
    }
 list(t);
 }

/**********************************************************************************************/
 void high(struct student t[])//查找某门科目的最高成绩
 {
  int i,j,k;
  struct student max[1];
  max[0]=t[0];
  system("cls");
  printf("请输入要查找的科目: 1 or 2 or 3\n");
  scanf("%d",&k);
  for(i=1;i<n;i++)
   max[0]=max[0].score[k-1] > t[i].score[k-1] ? max[0]:t[i];
 system("cls");
 printf("第 %d 科目: 最分为:%-5.2f  学号为%s\n",k,max[0].score[k-1],max[0].num);
}
/**********************************************************************************************/
main()
{
 int a;
 while(1)
 {
 a=menu();
 switch(a)//根据选择菜单做相应的操作
 {
 case 0 : enter(stu);break;
 case 1: list(stu);break;
 case 2: research(stu);break;
 case 3: del(stu);break;
 case 4: add(stu);break;
 case 5: read(stu);break;
 case 6: avg_arrange(stu);break;
 case 7: num_arrange(stu);break;
 case 8: high(stu);break;
 case 9: save(stu);break;
 default : to_exit();break;
 }
 }
}
/**********************************************************************************************/

追问

 不好意思   运行有错误 是怎么回事

追答

我的可以运行啊,如下:

 

 

 

你把Cpp1.cpp所在的目录与它相关的.exe以及其他扩展名的文件删除了再试下,可能有些文件是之前你编译的,有影响

追问

还是有错的 我用的是VC6.0精简版 麻烦把文件发给我

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-01
斯蒂芬感到十分告诉对方告诉对方个
第2个回答  2013-07-01
用结构体加上链表呗

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网