最新c语言课程设计网学生成绩管理系统4.docx

上传人:b****6 文档编号:7328961 上传时间:2023-01-23 格式:DOCX 页数:12 大小:21.70KB
下载 相关 举报
最新c语言课程设计网学生成绩管理系统4.docx_第1页
第1页 / 共12页
最新c语言课程设计网学生成绩管理系统4.docx_第2页
第2页 / 共12页
最新c语言课程设计网学生成绩管理系统4.docx_第3页
第3页 / 共12页
最新c语言课程设计网学生成绩管理系统4.docx_第4页
第4页 / 共12页
最新c语言课程设计网学生成绩管理系统4.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

最新c语言课程设计网学生成绩管理系统4.docx

《最新c语言课程设计网学生成绩管理系统4.docx》由会员分享,可在线阅读,更多相关《最新c语言课程设计网学生成绩管理系统4.docx(12页珍藏版)》请在冰豆网上搜索。

最新c语言课程设计网学生成绩管理系统4.docx

最新c语言课程设计网学生成绩管理系统4

(一)、课程设计题目

《学生成绩管理系统》的设计与实现

 

(二)、课程设计目的

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-4大学生购买手工艺制品目的1、课程设计报告

1)课程设计题目、内容、要求。

2)总体设计(包含几大功能模块)。

2、你大部分的零用钱用于何处?

3)详细设计(各功能模块的具体实现算法——流程图)

4)数据结构设计描述,各模块(函数)的功能介绍,参数说明等。

创业首先要有“风险意识”,要能承受住风险和失败。

还要有责任感,要对公司、员工、投资者负责。

务实精神也必不可少,必须踏实做事;5)调试分析(包含各模块的测试用例,及测试结果。

在大学生对DIY手工艺品价位调查中,发现有46%的女生认为在十元以下的价位是可以接受;48%的认为在10-15元;6%的则认为50-100元能接受。

如图1-2所示6)总结(课程设计完成了哪些功能,还有哪些地方需要改进,及通过一周的课程设计有何收获,调试程序的体会等)

二:

本程序共有八个功能与数据结构说明:

(四)大学生对手工艺制品消费的要求1.学生记录的输入(一次性输入,输入个数由用户决定,最大可容纳80记录,最大数可以在源程序中改)。

1996年“碧芝自制饰品店”在迪美购物中心开张,这里地理位置十分优越,交通四通八达,由于位于市中心,汇集了来自各地的游客和时尚人群,不用担心客流量的问题。

迪美有300多家商铺,不包括柜台,现在这个商铺的位置还是比较合适的,位于中心地带,左边出口的自动扶梯直接通向地面,从正对着的旋转式楼梯阶而上就是人民广场中央,周边4、5条地下通道都交汇于此,从自家店铺门口经过的90%的顾客会因为好奇而进去看一下。

2.追加学生记录。

(追加后不能超过最在值80)。

(3)年龄优势3.修改记录。

4.删除记录。

5.浏览全部记录。

6.查找记录(按姓名查找)。

(二)DIY手工艺品的“热卖化”7.插入记录。

8.对记录进行排序(按平均成绩排序)。

(1)位置的优越性9.退出。

10.数据结构是这样的:

学号只能由数字字符组成,最大可以11个字符;姓名由字符组成,最大可以20个字符;三门科目分数都是整型;平均成绩是实型。

11.程序中定义了学生的容量为50个。

容量可以在源程序宏定义中改,本程序宏定义#defineN50

#include

#include

/*控制学生记录的容量*/

#defineN50

structstudent

{charnum[11];

 charname[20];

 intscore[3];

 floatave;

}stu[N];

/*全新保存函数*/

save(intn)                     /*保存函数,保存n个记录*/

{FILE*fp;

 inti;

 if((fp=fopen("score.txt","wb"))==NULL)   /*以输出打开方式,在此前的记录被覆盖*/

 {printf("\nCannotopenfile\n");

  returnNULL;

 }

 for(i=0;i

  if(stu[i].ave!

=0)           /*stu[i].ave=0表此记录已删除*/

    if(fwrite(&stu[i],sizeof(structstudent),1,fp)!

=1)

      printf("filewriteerror\n");

 fclose(fp);

}

 /*加载记录或可以计算记录个数的函数*/

load()                      /*加载记录或可以计算记录个数的函数*/

{FILE*fp;

 inti;

 if((fp=fopen("score.txt","rb"))==NULL)   /*以输出打开方式,在此前的记录被覆盖*/

 {printf("\nCannotopenfile\n");

  returnNULL;

 }

 for(i=0;!

feof(fp);i++)

 fread(&stu[i],sizeof(structstudent),1,fp);

 fclose(fp);

 return(i-1);               /*返回记录个数*/

}

/*一个任务结束时的选择浏览还是返回的函数*/

voidprintf_back()             /*一个任务结束时的选择浏览还是返回*/

{intk,w;

 printf("\n\n\tSuccessful.^_^\n\n");

 printf("Whatdoyouwanttodo?

\n\n\t1).Browseallnow\t2).Back:

 []\b\b");

 scanf("%d",&w);

 if(w==1)browse();

 elsemenu();

}

/*显示数据结构项目函数*/

voidprintf_face()           /*显示数据结构项目*/

{printf("\n\tNO. name                score1  score2  score3 average\n");

}

average(inti)                   /*对第i个记录的分数求平均值*/

{intj,sum;

 for(sum=0,j=0;j<3;j++)

  sum+=stu[i].score[j];

 stu[i].ave=sum/3.0;

}

/*学号输入函数*/

no_input(inti,intn)                 /*i表示第i个的学生信息,n表示比较到第n个学生*/

{intj,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("Inputerror!

Onlybemadeupof(0-9).Pleasereinput!

\n");

       w1=1;break;

      }

  if(w1!

=1)

   for(k=0;k

     /*排除第i个学生记录即你要修改的*/

     if(k!

=i&&strcmp(stu[k].num,stu[i].num)==0)   /*判断学号是否有雷同*/

      {puts("Thisrecordisexist.pleasereinput!

\n");

       w1=1;break;

      }

 }

 while(w1==1);

}

/*对分数输入*/

score_input(inti)

{intj;

 for(j=0;j<3;j++)

 {printf("score%d:

",j+1);

  scanf("%d",&stu[i].score[j]);

 }

}

 /*输入一个记录函数*/

input(inti)                          /*输入一个记录函数*/

{

 no_input(i,i);                     /*调用学号输入函数*/

 printf("name:

");

 scanf("%s",stu[i].name);

 score_input(i);          /*调用分数输入函数*/

 average(i);              /*调用求平均值函数*/

}

 /*显示一个记录的函数*/

printf_one(inti)                             /*显示一个记录的函数*/

{intj;

 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);

}

voidputs___()    /*显出---函数*/

{puts("\n--------------------------------------------------------------------");

}

/*修改记录函数*/

modify_data(inti,intn)         /*修改数据函数,修改第i个记录*/

{intc,w1;

 do                             /*输入选择作个判断*/

  {puts("\nmodifyby=>\n\n 1).NO. 2.name 3).score1 4).score2\n 5).score3 6).allscore 7).alldata 8).cancelandback");

   printf("Whichyouneeded?

:

[]\b\b");

   scanf("%d",&c);

   if(c>8||c<1)

           {puts("\nChoiceerror!

Pleaseagain!

");  /*判断选择是否错误,若是则重新选择性*/

            getchar();   /*当输入是字符时可以防止死循环*/

           }

  }

  while(c>8||c<1);

 do

  {switch(c)                    /*选择要修改的项目*/

   {case1:

no_input(i,n);break;   /*调用学号输入函数*/

    case2:

printf("name:

");scanf("%s",stu[i].name);break;

    case3:

printf("score1:

");scanf("%d",&stu[i].score[0]);break;

    case4:

printf("score2:

");scanf("%d",&stu[i].score[1]);break;

    case5:

printf("score3:

");scanf("%d",&stu[i].score[2]);break;

    case6:

score_input(i);break;/*调用分数输入函数*/

    case7:

input(i);break;  /*调用输入整条学生记录*/

    case8:

menu();  /*直接返回主介面*/

   }

   if(c>2&&c<7)

     average(i);                 /*调用求平均值函数*/

   puts("\nNow:

\n");

   printf_face();                        /*调用显示数据结构项目函数*/

   printf_one(i);                /*修改后的记录让用户确认*/

   printf("\nAreyousure?

\n\n\t1).Sure 2).Noandremodify  3).Backwithoutsaveinthistime  []\b\b"); /*是否确定*/

   scanf("%d",&w1);  /*选择2则表示这次修改错误要重新修改*/

  }

  while(w1==2);

 return(w1);       /*返回控制值*/

}

 /****************输入模块****************/

enter()                          /*输入模块*/

{inti,n;

 printf("Howmanystudents(0-%d)?

:

",N);

 scanf("%d",&n);                 /*要输入的记录个数*/

 printf("\nEnterdatanow\n\n");

 for(i=0;i

  {printf("\nInput%dthstudentrecord.\n",i+1);

   input(i);                       /*调用输入函数*/

  }

 if(i!

=0)save(n);                           /*调用保存函数*/

 printf_back();                      /*一个任务结束时让用户选择是浏览还是返回*/}

 /****************追加模块****************/

add()                            /*追加模块*/

{inti,n,m,k;

 FILE*fp;

 n=load();

 printf("Howmanystudentsareyouwanttoadd(0-%d)?

:

",N-n);

 scanf("%d",&m);              /*输入要追加的记录个数*/

 k=m+n;

 for(i=n;i

  {printf("\nInput%dthstudentrecord.\n",i-n+1);

   input(i);                       /*调用输入函数*/

  }

 if((fp=fopen("score.txt","ab"))==NULL) /*以ab方式打开文件,追加保存*/

 {printf("cannotopenfile\n");

  return;

 }

 for(i=n;i

  if(fwrite(&stu[i],sizeof(structstudent),1,fp)!

=1)

    printf("filewriteerror\n");

 fclose(fp);

 printf_back();                      /*一个任务结束时的选择浏览还是返回*/

}

 /****************修改模块****************/

modify()                        /*修改模块*/

{structstudents;

 FILE*fp;

 inti,n,k,w0=1,w1,w2=0;

 n=load();

 do

 {clrscr();

 k=-1;

 /*给用户看全部记录以便确认要修改的记录*/

 puts___();            /*显示-----*/

 printf_face();               /*调用显示数据结构项目函数*/

 for(i=0;i

   {if((i!

=0)&&(i%10==0))    /*目的是分屏显示*/

      {printf("\n\nRememberNO.whichneededmodify.passanykeytocontiune ...");

       getch();

       puts("\n\n");

      }

    printf_one(i);                 /*调用显示一个记录的函数*/

   }

 puts___();

 do

  {printf("\n\nEnterNO.thatyouwanttomodify!

   NO.:

");

   scanf("%s",s.num);               /*输入要修改的数据的学号*/

   for(i=0;i

    if(strcmp(s.num,stu[i].num)==0)

      {k=i;                     /*找到要修改的记录*/

       s=stu[i];               /*把stu[i](即当次修改的学生记录)备份给s,以便用户反悔时恢复名誉*/

      }

   if(k==-1)printf("\n\nNOexist!

pleaseagain");

  }

  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\nAreyoumodifyanother?

\n\n\t1).Yes 2).Backwithsave\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();

}

(五)DIY手工艺品的“价格弹性化”/****************删除模块****************/

del()                            /*删除模块*/

{structstudents;

 FILE*fp;

 inti,j,n,k,c,w0=1;

 n=load();

 do

 {clrscr();

 k=-1;

 /*给用户看全部记录以便确认要删除的记录*/

 puts___();

 printf_face();               /*调用显示数据结构项目函数*/

 for(i=0;i

   if(stu[i].ave!

=0)

    {if((i!

=0)&&(i%10==0))    /*目的是分屏显示,每10个一屏*/

      {printf("\n\nRememberNO.whichneededdel.passanykeytocontiune ...");

       getch();

       puts("\n\n");

      }

     printf_one(i);                  /*调用显示一个记录的函数*/

    }

 puts___();

 do

  {printf("\n\nEnterNO.thatyouwanttoDelete!

   NO.:

");

   scanf("%s",s.num);               /*输入要修改的数据的学号*/

   for(i=0;i

    if(strcmp(s.num,stu[i].num)==0)

      {k=i;                     /*找到要修改的记录的下标赋给K*/

       s=stu[i];

      }

   if(k==-1)printf("\n\nNOexist!

pleaseagain");/*K=-1,表示没有找到相同之的*/

  }

  while(k==-1);

 puts("\n");

 printf_face();               /*调用显示数据结构项目函数*/

 printf_one(k);                 /*调用显示一个记录的函数*/

 printf("\nAreyousure?

\n\t1).sure  2).noanddelanother  3).backwithoutsaveall []\b\b");

 scanf("%d",&c);

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1