C语言课程设计报告学生成绩简单管理程序.docx

上传人:b****3 文档编号:4734054 上传时间:2022-12-08 格式:DOCX 页数:13 大小:18.92KB
下载 相关 举报
C语言课程设计报告学生成绩简单管理程序.docx_第1页
第1页 / 共13页
C语言课程设计报告学生成绩简单管理程序.docx_第2页
第2页 / 共13页
C语言课程设计报告学生成绩简单管理程序.docx_第3页
第3页 / 共13页
C语言课程设计报告学生成绩简单管理程序.docx_第4页
第4页 / 共13页
C语言课程设计报告学生成绩简单管理程序.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C语言课程设计报告学生成绩简单管理程序.docx

《C语言课程设计报告学生成绩简单管理程序.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告学生成绩简单管理程序.docx(13页珍藏版)》请在冰豆网上搜索。

C语言课程设计报告学生成绩简单管理程序.docx

C语言课程设计报告学生成绩简单管理程序

1.  系统菜单的主要功能

(1)输入若干条记录

(2)显示所有记录

(3)按学号排序

(4)插入一条记录

(5)按姓名查找,删除一条记录

(6)查找并显示一条记录

(7)输出统计信息(新增)

(8)从正文中添加数据到结构体数组中

(9)将所有数据写入文件中

   (0)退出程序

2.  题目分析

该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。

如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。

菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:

功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。

功能2是显示所有的记录,通过循环输出,格式也比较重要。

功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。

功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。

功能6的算法在5中就已经体现了,输入姓名,一一比较。

功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。

功能8和9是对文件的操作,提前准备好数据。

3.  感受

学了将近一个学期的C语言了,说实话,挺疲惫的,特别是最后的课设,调得好烦。

但现在想想收获也不小,以前高中学VB的时候,一直觉得计算机语言挺简单的,现在看来当时根本没有接触到计算机语言的精髓。

看到了自己做出的这个小程序,挺自豪的,以前一直以为做出一个软件一样的程序是遥不可及的事情。

我选择的是第二个程序,因为自我觉得它涉及面更广,把以前学过的算法几乎都过了一遍。

以后在碰到像等级考试这样的事情我就再也不怕了。

感谢藏洌老师的热情指导。

恭维的话就不多说了,感受大概就这么多吧。

4.  程序正文部分

#include                  /*引用库函数*/

#include

#include

#include

 

typedefstruct               /*定义结构体数组*/

{

                   charnum[10];              /*学号*/

                   charname[20];             /*姓名*/

                   intscore;            /*成绩*/

}Student;

Studentstu[80];            /*结构体数组变量*/

 

intmenu_select()          /*菜单函数*/

{

                   charc;

                   do{

                            system("cls");             /*运行前清屏*/

                            printf("\t\t****Students'GradeManagementSystem****\n");           /*菜单选择*/

                            printf("\t\t   |1.InputRecords           |\n");

                            printf("\t\t   |2.DisplayAllRecords              |\n");

                            printf("\t\t   |3.Sort                                   |\n");

                            printf("\t\t   |4.InsertaRecord             |\n");

                            printf("\t\t   |5.DeleteaRecord          |\n");

                            printf("\t\t   |6.Query                   |\n");

                            printf("\t\t   |7.Statistic                |\n");

                            printf("\t\t   |8.AddRecordsfromaTextFile|\n");

                            printf("\t\t   |9.WritetoaTextfile         |\n");

                            printf("\t\t   |0.Quit                                   |\n");

                            printf("\t\t*****************************************\n");

                            printf("\t\t\tGiveyourChoice(0-9):

");

                            c=getchar();                 /*读入选择*/

                   }while(c<'0'||c>'9');

                   return(c-'0');                 /*返回选择*/

}

 

intInput(Studentstud[],intn)                 /*输入若干条记录*/

{inti=0;

 charsign,x[10];           /*x[10]为清除多余的数据所用*/

 while(sign!

='n'&&sign!

='N')         /*判断*/

 {

                    printf("\t\t\tstudent'snum:

");                /*交互输入*/

                    scanf("\t\t\t%s",stud[n+i].num);

                    printf("\t\t\tstudent'sname:

");

                    scanf("\t\t\t%s",stud[n+i].name);

                    printf("\t\t\tstudent'sscore:

");

                    scanf("\t\t\t%d",&stud[n+i].score);

                    gets(x);             /*清除多余的输入*/

                    printf("\t\t\tanymorerecords?

(Y/N)");

                    scanf("\t\t\t%c",&sign);               /*输入判断*/

                    i++;

 }

 return(n+i);

}

 

voidDisplay(Studentstud[],intn)           /*显示所有记录*/

{

 inti;

 printf("\t\t\t-----------------------------------\n");         /*格式头*/

 printf("\t\t\tnumber         name         score\n");

 printf("\t\t\t-----------------------------------\n");

 for(i=1;i

 {

                   printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);

                   if(i>1&&i%10==0)              /*每十个暂停*/

                            {printf("\t\t\t-----------------------------------\n");                 /*格式*/

                             printf("\t\t\t");

                             system("pause");

                             printf("\t\t\t-----------------------------------\n");

                            }

 }

 printf("\t\t\t");

 system("pause");

}

 

voidSort_by_num(Studentstud[],intn)           /*按学号排序*/

{

                   inti,j,*p,*q,s;

                   chart[10];

                   for(i=0;i

                            for(j=0;j

                                      if(strcmp(stud[j].num,stud[j+1].num)>0)

                                      {strcpy(t,stud[j+1].num);

                                       strcpy(stud[j+1].num,stud[j].num);

                                       strcpy(stud[j].num,t);

                                       strcpy(t,stud[j+1].name);

                                       strcpy(stud[j+1].name,stud[j].name);

                                       strcpy(stud[j].name,t);

                                       p=&stud[j+1].score;

                                       q=&stud[j].score;

                                       s=*p;

                                       *p=*q;

                                       *q=s;

                                      }

}

 

intInsert_a_record(Studentstud[],intn)           /*插入一条记录*/

{charx[10];         /*清除多余输入所用*/

                   printf("\t\t\tstudent'snum:

");                  /*交互式输入*/

                   scanf("\t\t\t%s",stud[n].num);

                   printf("\t\t\tstudent'sname:

");

                   scanf("\t\t\t%s",stud[n].name);

                   printf("\t\t\tstudent'sscore:

");

                   scanf("\t\t\t%d",&stud[n].score);

                   gets(x);

                   n++;

                   Sort_by_num(stud,n);          /*调用排序函数*/

                   printf("\t\t\tInsertSuccessed!

\n");          /*返回成功信息*/

                   return(n);

}

 

intDelete_a_record(Studentstud[],intn)          /*按姓名查找,删除一条记录*/

{

                   chars[20];

                   inti=0,j;

                   printf("\t\t\ttellmehis(her)name:

");                /*交互式问寻*/

                   scanf("%s",s);

                   while(strcmp(stud[i].name,s)!

=0&&i

                   if(i==n)

                            {

                             printf("\t\t\tnotfind!

\n");             /*返回失败信息*/

                             return(n);

                            }

                   for(j=i;j

                            {

                             strcpy(stud[j].num,stud[j+1].num);

                             strcpy(stud[j].name,stud[j+1].name);

                             stud[j].score=stud[j+1].score;

                            }

                   printf("\t\t\tDeleteSuccessed!

\n");         /*返回成功信息*/

                   return(n-1);

}

 

voidQuery_a_record(Studentstud[],intn)                /*查找并显示一个记录*/

{

                   chars[20];

                   inti=0;

                   printf("\t\t\tinputhis(her)name:

");                  /*交互式输入*/

                   scanf("\t\t\t%s",s);

                   while(strcmp(stud[i].name,s)!

=0&&i

                   if(i==n)

                            {

                             printf("\t\t\tnotfind!

\n");             /*输入失败信息*/

                             return;

                            }

                   printf("\t\t\this(her)number:

%s\n",stud[i].num);               /*输出该学生信息*/

                   printf("\t\t\this(her)score:

%d\n",stud[i].score);

}

voidStatistic(Studentstud[],intn)           /*新增功能,输出统计信息*/

{

                   inti,j=0,k=0,sum=0;

                   floataver;           /*成绩平均值*/

                   for(i=0;i

                            {

                             sum+=stud[i].score;

                             if(stud[j].score>stud[i].score)j=i;

                             if(stud[k].score

                            }

                   aver=1.0*sum/n;

                   printf("\t\t\tthereare%drecords.\n",n);           /*总共记录数*/

                   printf("\t\t\tthehignestscore:

\n");          /*最高分*/

                   printf("\t\t\tnumber:

%s  name:

%s  score:

%d\n",stud[j].num,stud[j].name,stud[j].score);

                   printf("\t\t\tthelowestscore:

\n");           /*最低分*/

                   printf("\t\t\tnumber:

%s  name:

%s  score:

%d\n",stud[k].num,stud[k].name,stud[k].score);

                   printf("\t\t\ttheaveragescoreis%5.2f\n",aver);                 /*平均分*/

}

 

intAddfromText(Studentstud[],intn)              /*从文件中读入数据*/

{

                   inti=0,num;

                   FILE*fp;           /*定义文件指针*/

                   charfilename[20];                 /*定义文件名*/

                   printf("\t\t\tInputthefilename:

");

                   scanf("\t\t\t%s",filename);             /*输入文件名*/

                   if((fp=fopen(filename,"rb"))==NULL)            /*打开文件*/

                            {

                                      printf("\t\t\tcann'topenthefile\n");                 /*打开失败信息*/

                                      printf("\t\t\t");

                                      system("pause");

                                      return(n);

                            }

              fscanf(fp,"%d",&num);                 /*读入总记录量*/

                   while(i

                   {

                            fscanf(fp,"%s%s%d",stud[n+

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

当前位置:首页 > 高等教育 > 经济学

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

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