收藏 分销(赏)

语言专业课程设计网学生成绩标准管理系统.doc

上传人:精*** 文档编号:2682803 上传时间:2024-06-04 格式:DOC 页数:22 大小:39.54KB 下载积分:10 金币
下载 相关 举报
语言专业课程设计网学生成绩标准管理系统.doc_第1页
第1页 / 共22页
语言专业课程设计网学生成绩标准管理系统.doc_第2页
第2页 / 共22页


点击查看更多>>
资源描述
(一)、课程设计题目 《学生成绩管理系统》设计与实现   (二)、课程设计目 1、  进一步掌握和运用C语言进行程设计能力; 2、  进一步理解和运用构造化程设计思想和办法; 3、  初步掌握开发一种小型实用系统基本办法; 4、  学会调试一种较长程序基本办法; 5、  学会运用流程图或N-S图表达算法; 6、  掌握书写程设计开发文档能力(书写课程设计报告);     (三)、设计内容 1、每一条记录涉及一种学生学号、姓名、3门课成绩、平均成绩。 2、输入功能:可以一次完毕若干条记录输入。 3、显示功能:完毕所有学生记录显示。 4、查找功能:完毕按姓名查找学生记录,并显示。 5、排序功能:按学生平均成绩进行排序。 6、插入功能:按平均成绩高低插入一条学生记录。 7、将学生记录存在文献score中。 8、应提供一种界面来调用各个功能,调用界面和各个功能操作界面应尽量清晰美观!   (四)、设计规定 1、  用C语言实现系统; 2、  运用构造体数组实现学生成绩数据构造设计; 3、  系统具备增长,查询,插入,排序等基本功能; 4、  系统各个功能模块规定用函数形式实现; 5、  完毕设计任务并书写课程设计报告。 6、  将学生成绩信息存在文献中。   (五)、提交材料 1、课程设计报告 1)课程设计题目、内容、规定。 2)总体设计(包括几大功能模块)。 3)详细设计(各功能模块详细实现算法——流程图) 4)数据构造设计描述,各模块(函数)功能简介,参数阐明等。 5)调试分析(包括各模块测试用例,及测试成果。) 6)总结(课程设计完毕了哪些功能,尚有哪些地方需要改进,及通过一周课程设计有何收获,调试程序体会等) 二:本程序共有八个功能与数据构造阐明: 1.学生记录输入(一次性输入,输入个数由顾客决定,最大可容纳80记录,最大数可以在源程序中改) 。 2.追加学生记录。(追加后不能超过最在值80)。 3.修改记录。 4.删除记录。 5.浏览所有记录。 6.查找记录(按姓名查找)。 7.插入记录。 8.对记录进行排序(按平均成绩排序)。 9.退出。 10.数据构造是这样:学号只能由数字字符构成,最大可以11个字符;姓名由字符构成,最大可以20个字符;三门科目分数都是整型;平均成绩是实型。 11.程序中定义了学生容量为50个。容量可以在源程序宏定义中改,本程序宏定义#define N 50 #include<string.h> #include<stdio.h> /*控制学生记录容量*/ #define N 50 struct student {char num[11];  char name[20];  int score[3];  float ave; }stu[N]; /*全新保存函数*/ save(int n)                      /*保存函数,保存n个记录*/ {FILE *fp;  int i;  if((fp=fopen("score.txt","wb"))==NULL)    /*以输出打开方式,在此前记录被覆盖*/   {printf("\nCannot open file\n");    return NULL;   }  for(i=0;i<n;i++)    if(stu[i].ave!=0)            /*stu[i].ave=0表此记录已删除*/      if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)        printf("file write error\n");  fclose(fp); }  /*加载记录或可以计算记录个数函数*/ load()                       /*加载记录或可以计算记录个数函数*/ {FILE *fp;  int i;  if((fp=fopen("score.txt","rb"))==NULL)    /*以输出打开方式,在此前记录被覆盖*/   {printf("\nCannot open file\n");    return NULL;   }  for(i=0;!feof(fp);i++)   fread(&stu[i],sizeof(struct student),1,fp);  fclose(fp);  return(i-1);                /*返回记录个数*/ } /*一种任务结束时选取浏览还是返回函数*/ void printf_back()              /*一种任务结束时选取浏览还是返回*/ {int k,w;  printf("\n\n\tSuccessful. ^_^\n\n");  printf("What do you want to do?\n\n\t1).Browse all now\t2).Back:  [ ]\b\b");  scanf("%d",&w);  if(w==1) browse();  else menu(); } /*显示数据构造项目函数*/ void printf_face()            /*显示数据构造项目*/ {printf("\n\tNO.  name                 score1   score2   score3  average\n"); } average(int i)                    /*对第i个记录分数求平均值*/ {int j,sum;  for(sum=0,j=0;j<3;j++)    sum+=stu[i].score[j];  stu[i].ave=sum/3.0; } /*学号输入函数*/ no_input(int i,int n)                  /*i表达第i个学生信息,n表达比较到第n个学生*/ {int j,k,w1;   do   {w1=0;    printf("NO.:");    scanf("%s",stu[i].num);    for(j=0;stu[i].num[j]!='\0';j++)          /*学号输入函数,作了严格规定*/      if(stu[i].num[j]<'0'||stu[i].num[j]>'9')     /*判断学号与否为数字*/        {puts("Input error!Only be made up of (0-9).Please reinput!\n");         w1=1;break;        }    if(w1!=1)     for(k=0;k<n;k++)                /*比较到第n个学生*/       /*排除第i个学生记录即你要修改*/       if(k!=i&&strcmp(stu[k].num,stu[i].num)==0)    /*判断学号与否有雷同*/        {puts("This record is exist. please reinput!\n");         w1=1;break;        }   }   while(w1==1); } /*对分数输入*/ score_input(int i) {int j;  for(j=0;j<3;j++)   {printf("score %d:",j+1);    scanf("%d",&stu[i].score[j]);   } }  /*输入一种记录函数*/ input(int i)                           /*输入一种记录函数*/ {  no_input(i,i);                      /*调用学号输入函数*/  printf("name:");  scanf("%s",stu[i].name);  score_input(i);           /*调用分数输入函数*/  average(i);               /*调用求平均值函数*/ }  /*显示一种记录函数*/ printf_one(int i)                              /*显示一种记录函数*/ {int j;  printf("%11s  %-17s",stu[i].num,stu[i].name);  for(j=0;j<3;j++)    printf("%9d",stu[i].score[j]);  printf("%9.2f\n",stu[i].ave); } void puts___()     /*显出---函数*/ {puts("\n--------------------------------------------------------------------"); } /*修改记录函数*/ modify_data(int i,int n)          /*修改数据函数,修改第i个记录*/ {int c,w1;   do                              /*输入选取作个判断*/    {puts("\nmodify by =>\n\n  1).NO.  2.name  3).score1  4).score2\n  5).score3  6).all score  7).all data  8).cancel and back");     printf("Which you needed?:[ ]\b\b");     scanf("%d",&c);     if(c>8||c<1)             {puts("\nChoice error!Please again!");   /*判断选取与否错误,若是则重新选取性*/              getchar();    /*当输入是字符时可以防止死循环*/             }    }    while(c>8||c<1);   do    {switch(c)                     /*选取要修改项目*/     {case 1:no_input(i,n);break;    /*调用学号输入函数*/      case 2:printf("name:");scanf("%s",stu[i].name);break;      case 3:printf("score1:");scanf("%d",&stu[i].score[0]);break;      case 4:printf("score2:");scanf("%d",&stu[i].score[1]);break;      case 5:printf("score3:");scanf("%d",&stu[i].score[2]);break;      case 6:score_input(i);break;/*调用分数输入函数*/      case 7:input(i);break;   /*调用输入整条学生记录*/      case 8:menu();   /*直接返回主介面*/     }     if(c>2&&c<7)       average(i);                  /*调用求平均值函数*/     puts("\nNow:\n");     printf_face();                         /*调用显示数据构造项目函数*/     printf_one(i);                 /*修改后记录让顾客确认*/     printf("\nAre you sure?\n\n\t1).Sure  2).No and remodify   3).Back without save in this time   [ ]\b\b");  /*与否拟定*/     scanf("%d",&w1);   /*选取2则表达这次修改错误要重新修改*/    }    while(w1==2);   return(w1);        /*返回控制值*/ }  /****************输入模块****************/ enter()                           /*输入模块*/ {int i,n;  printf("How many students(0-%d)?:",N);  scanf("%d",&n);                  /*要输入记录个数*/  printf("\nEnter data now\n\n");  for(i=0;i<n;i++)    {printf("\nInput %dth student record.\n",i+1);     input(i);                        /*调用输入函数*/    }  if(i!=0) save(n);                            /*调用保存函数*/  printf_back();                       /*一种任务结束时让顾客选取是浏览还是返回*/}  /****************追加模块****************/ add()                             /*追加模块*/ {int i,n,m,k;  FILE *fp;  n=load();  printf("How many students are you want to add(0-%d)?:",N-n);  scanf("%d",&m);               /*输入要追加记录个数*/  k=m+n;  for(i=n;i<k;i++)    {printf("\nInput %dth student record.\n",i-n+1);     input(i);                        /*调用输入函数*/    }  if((fp=fopen("score.txt","ab"))==NULL)  /*以ab方式打开文献,追加保存*/   {printf("cannot open file\n");    return;   }  for(i=n;i<k;i++)                   /*输入出到文献*/    if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)      printf("file write error\n");  fclose(fp);  printf_back();                       /*一种任务结束时选取浏览还是返回*/ }  /****************修改模块****************/ modify()                         /*修改模块*/ {struct student s;  FILE *fp;  int i,n,k,w0=1,w1,w2=0;  n=load();  do  {clrscr();   k=-1;   /*给顾客看所有记录以便确认要修改记录*/   puts___();             /*显示-----*/   printf_face();                /*调用显示数据构造项目函数*/   for(i=0;i<n;i++)     {if((i!=0)&&(i%10==0))     /*目是分屏显示*/        {printf("\n\nRemember NO.which needed modify. pass any key to contiune  . . .");         getch();         puts("\n\n");        }      printf_one(i);                  /*调用显示一种记录函数*/     }   puts___();   do    {printf("\n\nEnter NO. that you want to modify!    NO.:");     scanf("%s",s.num);                /*输入要修改数据学号*/     for(i=0;i<n;i++)                  /*查找要修改数据*/      if(strcmp(s.num,stu[i].num)==0)        {k=i;                      /*找到要修改记录*/         s=stu[i];                /*把stu[i](即当次修改学生记录)备份给s,以便顾客反悔时恢复名誉*/        }     if(k==-1) printf("\n\nNO exist!please again");    }    while(k==-1);            /*当K=-1表达没有找到*/   printf_face();               /*调用显示数据构造项目函数*/   printf_one(k);                  /*调用显示一种记录函数*/   w1=modify_data(k,n);          /*修改学生记录并且返回保存控制值w1,w1=1则表达顾客已确认修改*/   if(w1==1)       /*W1等于1时则表达顾客拟定这次修改*/     {printf("\nSuccessful ^_^.\n\nAre you modify another?\n\n\t1).Yes  2).Back with save\t[ ]\b\b");      scanf("%d",&w0);      w2=1;         /*来控制保存,使w2=1是标记已有过修改*/     }   else     {w0=0;      if(w2==1)        stu[k]=s;     }      /*走到这里是由于顾客没有确认这次修改(在调用修改函数w1=modify_data(k,n);时没有确认).  使W0=0,为了让终结循环,   stu[k]=s,则把备份s恢复给stu[k](即当次修改),这样好处是保证在此之前修改过成功保存,而本次(顾客没有确认)不修改*/   if(w0!=1&&w2==1)     /*W0不等于1则表达正常返回,w2=1表达在此之前有过修改,这时就保存顾客已确认修改并返回*/         save(n);       /*w2不等于1表达在本次之前没有修改过(即:第一次),而又反悔这次修改,则不保存返回*/   }   while(w0==1);  menu(); } /****************删除模块****************/ del()                             /*删除模块*/ {struct student s;  FILE *fp;  int i,j,n,k,c,w0=1;  n=load();  do  {clrscr();   k=-1;   /*给顾客看所有记录以便确认要删除记录*/   puts___();   printf_face();                /*调用显示数据构造项目函数*/   for(i=0;i<n;i++)     if(stu[i].ave!=0)      {if((i!=0)&&(i%10==0))     /*目是分屏显示,每10个一屏*/        {printf("\n\nRemember NO. which needed del. pass any key to contiune  . . .");         getch();         puts("\n\n");        }       printf_one(i);                   /*调用显示一种记录函数*/      }   puts___();   do    {printf("\n\nEnter NO. that you want to Delete!    NO.:");     scanf("%s",s.num);                /*输入要修改数据学号*/     for(i=0;i<n;i++)                  /*查找要修改数据*/      if(strcmp(s.num,stu[i].num)==0)        {k=i;                      /*找到要修改记录下标赋给K*/         s=stu[i];        }     if(k==-1) printf("\n\nNO exist!please again");/*K=-1,表达没有找到相似之*/    }    while(k==-1);   puts("\n");   printf_face();                /*调用显示数据构造项目函数*/   printf_one(k);                  /*调用显示一种记录函数*/   printf("\nAre you sure?\n\t1).sure   2).no and del another   3).back without save all  [ ]\b\b");   scanf("%d",&c);   if(c==1)     {stu[k].ave=0;         /*stu[k].ave=0用来标记这个记录是要删除.保存时则不保存stu[k].ave=0数据*/      printf("\n\nSuccessful ^_^.\n\nAre you again?\n\t1).again  2).back to menu\t[ ]\b\b");   /*问与否继续*/      scanf("%d",&w0);     }   if(c==3) w0=0;           /*w0=0不删除直接返回*/   if(w0!=1&&c!=3)           /*只有当确认删除后返回才保存,不删除直接返回则不保存,且不保存在此之前删除过记录*/      save(n);   }   while(w0==1);  menu();              /*返回主介面*/ } /****************浏览(所有)模块****************/ browse()                          /*浏览(所有)模块*/ {int i,j,n;  n=load();         /*加载记录*/  clrscr();  puts___();  printf_face();                  /*调用显示数据构造项目函数*/  for(i=0;i<n;i++)    {if((i!=0)&&(i%10==0))               /*目是分屏显示*/      {printf("\n\nPass any key to contiune  . . .");       getch();       puts("\n\n");      }     printf_one(i);                 /*调用显示一种记录函数*/    }  puts___();  printf("\tThere are  %d record.\n",n);  printf("\nPass any key to back  . . .");  getch();                          /*按任意健*/  menu(); }  /****************查找模块****************/ search()                          /*查找模块*/ {int i,n,k,w1=1,w2,w3,w4;  struct student s;  n=load();  do   {do     {k=-1;      printf("\n\nEnter name that you want to search!    name:");      scanf("%s",s.name);                /*输入要修改数据学号*/      printf_face();                 /*调用显示数据构造项目函数*/      for(i=0;i<n;i++)                  /*查找要修改数据*/        if(strcmp(s.name,stu[i].name)==0)          {k=i;                      /*找到要修改记录*/           printf_one(k);break;                  /*调用显示一种记录函数*/          }      if(k==-1)        {printf("\n\nNO exist!please");         printf("\n\nAre you again?\n\t1).again   2).NO and back   [ ]\b\b");         scanf("%d",&w1);        }     }     while(k==-1&&w1==1);              /*如果w1不等于1则直接返回*/    w4=0;w3=0;    if(k!=-1)                           /*k不等于-1表达找到,如果找到则选取操作*/        {printf("\n\nWhat do you want to do?\n\t1).Search another   2).Modify   3).Delete   4).Back menu   [ ]\b\b");         scanf("%d",&w2);         switch(w2)           {case 2:w3=modify_data(k,n);break;/*调用修改数据函数*/            case 3:{printf("\nAre you sure?\n\t1).Sure   2).No and back   [ ]\b\b");                    scanf("%d",&w4);                    if(w4==1)                      stu[k].ave=0;     /*表达删除*/                    break;                   }           }         if(w3==1||w4==1)            {save(n);             printf("\n\nSuccessful. ^_^.");             printf("\n\nWhat do you want to do?\n\t1).Search another   2).Back   [ ]\b\b");             scanf("%d",&w2);            }        }    }    while(w2==1);  menu(); } /****************插入模块****************/ insert()                           /*插入模块*/ {int i,j,n,c;  struct student s;  n=load();  puts("\nInput one data.\n");  do   {input(n);       /*输入到第n个记录,即插入到最后*/    printf_face();    printf_one(n);    printf("\n\nAre you sure?\n\n\t1).Sure\t2).cancel snd again\t3).Back withuot save  [ ]\b\b");    scanf("%d",&c);    if(c==1)      {for(j=0;j<n;j++)                    /*用起泡法排序*/         for(i=n;i>j;i--)           if(stu[i].ave>stu[i-1].ave)             {s=stu[i-1];stu[i-1]=stu[i];stu[i]=s;}       save(n+1);       printf_back();      }    else if(c!=2) menu();   }   while(c==2); }  /****************排序模块(按平均成绩)****************/ order()                           /*排序模块(按平均成绩)*/ {int i,j,k,n;  struct student s;  n=load();  for(i=0;i<n-1;i++)              /*选取法排序*/    {k=i;     for(j=i+1;j<n;j++)       if(stu[j].ave>stu[k].ave) k=j;     s=stu[i];stu[i]=stu[k];stu[k]=s;    }  save(n);  puts("\n\n");  printf_back(); }  /****************主界面****************/ menu()                            /*主界面*/ {int n,w1;  do   {clrscr();                   /*清屏*/    puts("\n\t\t\t   Copy right by CHEN LIN BIN!");    puts("\t\t\t\t  24/06/!\n\n");    puts("\t\t*********************MENU*********************\n\n");    puts("\t\t\t\t1.Enter new data");    puts("\t\t\t\t2.Addition data");    puts("\t\t\t\t3.Modify data");    puts("\t\t\t\t4.Delete data");    puts("\t\t\t\t5.Browse all");    puts("\t\t\t\t6.Search by name");    puts("\t\t\t\t7.Insert data");    puts("\t\t\t\t8.Order by average");    puts("\t\t\t\t9.Exit");    puts("\n\n\t\t**********************************************\n");    printf("Choice your number(1-9):[ ]\b\b");    scanf("%d",&n);    if(n<1||n>9)                                  /*对选取数字作判断*/      {w1=1;getchar();}    else  w1=0;   }   while(w1==1);  /*选取功能*/  switch(n)   {case 1:enter();break;      /*输入模块*/    case 2:add();break;        /*追加模块*/    case 3:modify();break;     /*修改模块*/    case 4:del();break;        /*删除模块*/    case 5:browse();break;     /*浏览模块*/    case 6:search();break;     /*查找模块*/    case 7:insert();break;     /*插入模块*/    case 8:order();break;      /*排序模块*/    case 9:exit(0);            /*退出*/   } } /*****************主函数****************/ main() {menu(); } 点击此处下载报告
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服