学生成绩管理系统C语言课程设计_第1页
学生成绩管理系统C语言课程设计_第2页
学生成绩管理系统C语言课程设计_第3页
学生成绩管理系统C语言课程设计_第4页
学生成绩管理系统C语言课程设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、××××学院课程设计报告 课程名称: 学 院: 专业班级: 姓 名: 学 号: 指导教师: 完成时间: 报告成绩: 评阅意见:            评阅老师: 评阅时间: 学生成绩管理系统C语言课程设计一、 设计要求1) 收集资料,全面分析课题,分解问题,形成中体编程思路;2) 深入分析各个小问题,编写个部分程序模块;3) 对于设计中用到的关键函数,要联系实际 问题进行具体介绍;4) 上机调试,确保程序能正确运行;二、 设计目的:1)

2、 通过设计,了解C语言的实际运用,加强对C语言的重视;2) 通过设计,强化C语言的基本运用及C语句的准确掌握;3) 通过设计,掌握设计软件一般方法,了解软件设计的一般思路;4) 通过设计,锻炼撰写报告的水平。三、 课题分析:编写一个学生成绩管理系统的C程序,包括以下功能:1) 学号段查询功能;2) 输入功能;3) 添加功能、修改功能;4) 成绩处理功能等5) 可实现数据输入、数据显示、数据插入、数据访问、数据保留、数据更新等存储功能,以及各学科平均分、最高分、最低分的提取等数据处理功能。该程序运行相对只能化,可通过学号比较来插入数据、根据姓名查找数据以及更新数据。其操作简单,查找方便,修改迅速

3、,普遍适合学校学生成绩管理,可大大减少人工管理的工作量,提高工作效率。四、 定义数据结构及相关解释:1) 在学生成绩管理系统中,各模块功能系统之间构成的数据结构关系为非线性数据结构的树结构。2) 树结构:每一个结点只有一个前件,称为父结点。没有前件的结点只有一个,称为树的根结点,简称树的根。在学生成绩管理系统中的数据结构图中“图书馆管理程序”为根;在树结构中,每一个结点都可以有多个后件,他们都称为该结点的子结点,没有后件的结点称为叶子。例如,在学生成绩管理系统中的数据结构图中“查看数据”、“ 通过比较学号来插入数据”、“ 通过姓名查找查看数据”、“ 通过姓名查找来更新数据”、“ 保留数据”以及

4、求各学科的“平均分、最高分、最低分”为“学生成绩管理系统”的子结点,也是该树结构的叶子。五、 软件的模块划分:根据对学生成绩管理系统功能分析的情况,可将学生成绩管理系统做如下模块划分:1) main( ) 主函数 - 学生成绩管理系统程序主函数;2) print( )    打印函数 - 设置学生成绩管理系统界面;3) cin( )  数据输入函数 - 数据多格式输入;4) cindata( )  其他数据继续输入函数;5) lookdata( )   查看数据函数 - 查看已保存的数据;6) insert( ) 插入数据的

5、函数 - 通过比较学号来插入数据;7) find( )  查看数据的函数 - 通过姓名查找查看数据;8) update( )   更新数据的函数 - 姓名查找来更新数据;9) save( ) 保留数据函数 - 储存处理后的数据;10) caverage();    求各学生语文平均分、最高和最低分成绩的函数;11) maverage(); 求各学生数学平均分、最高和最低分成绩的函数;12) eaverage();  求各学生英语平均分、最高和最低分成绩的函数;13) comaverage();  求各学生计算机平均

6、分、最高和最低分成绩的函数 注:(2)(13)为自定义功能函数,通过main()主函数调用实现其功能。六、 程序流程设计:根据学生成绩管理系统功能分析绘制流程图:初始界面开始passwords功能选择用户信息输入其他数据插入数据查找查看数据查找更新数据保留数据显示或打印数据求学生语文平均分求学生计算机平均分求学生数学平均分求学生英语平均分空操作返回主程序流程图,学生成绩管理系统操作流程。其他数据输入姓名学号性别成绩语文数学英语计算机其他数据输入过程选择继续输入返回注:其他功能的流程图可参照“其他数据输入”的流程图绘制。七、 各功能模块编写内容详细情况及调试:1) 数据类型的定义。在定义数据类型

7、时,由于学生成绩管理信息需要由不同类型的数据反映出来。如:姓名、性别都需要用char型数据,而学号和成绩则需要用int型数据,并且每位同学的以上信息都需要一次性输入,所以采用结构体类型定义。如:typedef struct student /*定义结构体*/                     char nameMAX;    - 定义char型姓名in

8、t numMAX;        - 定义int型学号char sexMAX;       - 定义char型性别int chinese;               - 定义int型语文成绩int mathematic;      

9、60; - 定义int型数学成绩int english;               - 定义int型英语成绩int computer;            - 定义int型计算机成绩struct student *next; - 结构体指针 stu;说明:在定义结构体类型和变量时,可采用先定义结构体类型再

10、定义结构提变量,也可同时定义结构体类型和变量,还可以直接定义结构提变量。上例中的定义方式为同时定义结构体的类型和变量。结构体定义的格式如下:struct 结构体名 类型标识符 成员名;2) 函数的命名和库函数的使用。A. 函数命名是遵循标识符的命名规则,并且要尽量做到顾名思义的效果。如:lookdata( )为查看数据函数。B. 库函数使用时要提前声明(#include <math.h>等)用到的函数必须包括在库函数或者已自定义的函数中,否则编译出错。C. 函数调用时要注意形参和实参数据类型的对应。3) 函数结构和功能实现。A. 数据输入函数“cin( )” B. 查看数

11、据函数“lookdata( )”   C. 插入数据的函数“insert( )”D. 查看数据的函数“find( )”E. 更新数据的函数“update( )” F. 保留数据函数“save( )” 注:以上的六个功能函数为学生成绩管理系统的输入、读取、修改等主要功能函数,其中主要运用字符串比较,定义指针变量,输入输出等多种函数和操作实现其对外界输入内容进行处理功能以及防止出错的备份功能。G. 管理系统中的各个模块函数的功能实现基本都依靠与以上三中函数类似的编辑方法编写。主要通过以下结构实现对应功能。 for循环结构 对使用者输入内容与内部资料内容进行核对。 sw

12、itch选择结构 对使用者所选择的项目进行判断并调用对应的函数。 if-else选择结构 配合for循环核对内容的正确与否选择对应的操作。 while 、do-while循环结构 条件判断并进行对应的操作。H. 具体功能函数源程序的编辑内容见后文的图书馆管理系统源程序。八、 源程序内容及调试结果。1) 源程序(原始密码是123456):#include"stdio.h"#include"stddef.h"#include"stddef.h"#include"string.h"#define MAX 10typede

13、f struct student                 /*定义结构体*/     char nameMAX;                    /*姓名*/   &

14、#160; int numMAX;                      /* 学号*/     char sexMAX;                  

15、0;  /*性别*/     int chinese;                       /*语文*/     int mathematic;           

16、60;        /* 数学*/     int english;                       /*英语*/     int computer;     

17、60;                /*计算机*/     struct student *next;              /*结构体指针*/    stu;stu *head;     &#

18、160;                        /*头指针*/void print()                       

19、     /*显示或打印函数*/            system("cls");        printf("tttScore Manage Systemn");      /*成绩管理系统*/        &#

20、160;            printf("<1>Enter Recordt");                /*输入数据*/        printf("<2>Displayt");  

21、;                   /*显示*/        printf("<3>Insertt");                 &#

22、160;    /*插入数据*/        printf("<4>Questt");                       /*访问数据*/        printf

23、("<5>Updatet");                      /*以前数据*/        printf("<6>Savet");         &#

24、160;              /*保留数据*/        printf("<7>Fresht");                     

25、0; /*更新数据*/        printf("<8>Chinese Averaget");             /*语文平均成绩*/        printf("<9>Math Averaget");     &

26、#160;          /*数学平均成绩*/        printf("<10>English Averaget");            /*英语平均成绩*/        printf("<11&

27、gt;Computer Averaget");           /*计算机平均成绩*/        printf("<12>Quittn");                    

28、 /*退出*/         void cin(stu *p1)                             /*输入相关数据的函数*/  printf("Enter name:n"); 

29、;   scanf("%s",&p1->name);   printf("Enter num:n");     scanf("%d",&p1->num);    printf("Enter sex:n");     scanf("%s",&p1->sex);   printf("

30、;Enter score:n");   printf("Enter chinese:n");     scanf("%d",&p1->chinese);  printf("Enter math:n");    scanf("%d",&p1->mathematic);  printf("Enter English:n");   sc

31、anf("%d",&p1->english);  printf("Enter Computer:n");   scanf("%d",&p1->computer);   stu *cindata()                      &

32、#160;       /*其他数据是否继续输入的函数*/   stu *p1,*p2;   int i=1;  char ch;  p1=(stu *)malloc(sizeof(stu);    head=p1;  while(i)           cin(p1);    printf("Do you

33、 Want to Continue?yes or no");       /*是否继续输入数据*/     ch=getchar();      ch=getchar();    if(ch='n'|ch='N')      i=0;  p1->next=NULL;    

34、;       else      p2=p1;        p1=(stu *)malloc(sizeof(stu);        p2->next=p1;               return(p1->next);s

35、tu *lookdata(stu *p1)                                /*查看数据的函数*/      while(p1!=NULL)      

36、; printf("Num:%dt",p1->num);         printf("Name:%st",p1->name);         printf("Sex:%st",p1->sex);         printf("n"); 

37、0;       printf("Chinese:%dt",p1->chinese);         printf("Math:%dt",p1->mathematic);         printf("English:%dt",p1->english);   

38、0;     printf("Computer:%dt",p1->computer);         printf("n");         p1=p1->next;             return p1;  

39、; void insert()                               /*通过比较学号来插入数据的函数*/  stu *p1,*p3,*p2;   char ch;   p1=head;   p3=(stu

40、*)malloc(sizeof(stu);    p3->next=NULL;   if(head=NULL) head=p3; return;   cin(p3);   while(p1!=NULL&&(p1->num<p3->num)        /*通过学号的比较来插入*/       p2=p1;p1=p1->next; 

41、  if(p2=head) p3->next=head; head=p3; return;   p3->next=p1;   p2->next=p3;  find(stu *p2)                           

42、0;       /*通过姓名查找查看数据的函数*/  char name20;   int b=0;   printf("Enter the name of the student you want to find:");   /*通过姓名查看*/   scanf("%s",name);   while(p2!=NULL)     if(strc

43、mp(name,p2->name)=0)                  printf("The data you want has be foundn");          printf(" Name:%st",p2->name);     

44、     printf("Num:%dt",p2->num);          printf("sex%st",p2->sex);          printf("n");          printf(&quo

45、t;Chinese:%dt",p2->chinese);          printf("Math:%dt",p2->mathematic);          printf("English:%dt",p2->english);          print

46、f("Computer:%dt",p2->computer);          printf("n");          b=1;               else if(b=0)    

47、0;     printf("sorry not find data!");          p2=p2->next;     if(b=1)                      print();

48、            printf("Find onen");    else            print();             printf("Not findn");&#

49、160;           void caverage()                        /*求各学生语文平均分、最高和最低分成绩的函数*/   stu *p1;    int i; 

50、0;  float max=0.0,min=200.0;    float sum=0.0,aver=0;    p1=head;    if(p1=NULL)     printf("not data!");    else      for(i=0;p1!=NULL;i+,p1=p1->next) sum+=p1->chinese;

51、   aver=sum/i;        p1=head; for(i=0;p1!=NULL;i+,p1=p1->next)          if(max<p1->chinese)             max=p1->chinese;  

52、                 p1=head; for(i=0;p1!=NULL;i+,p1=p1->next)   if(min>p1->chinese)     min=p1->chinese;             printf(&q

53、uot;Chinese Average:%f",aver);      printf("Chinese Max:%f",max);      printf("Chinese Min:%f",min); void maverage()                 &#

54、160;     /*求各学生数学平均分、最高和最低分成绩的函数*/  stu *p1;    int i;    float max=0.0,min=200.0;    float sum=0.0,aver=0;    p1=head;    if(p1=NULL)     printf("not data!");  

55、;  else      for(i=0;p1!=NULL;i+,p1=p1->next) sum+=p1->mathematic;   aver=sum/i;         p1=head; for(i=0;p1!=NULL;i+,p1=p1->next)          if(max<p1->math

56、ematic)             max=p1->mathematic;                   p1=head; for(i=0;p1!=NULL;i+,p1=p1->next)   if(min>p1->mathematic)

57、0;    min=p1->mathematic;             printf("Mathe Average:%f",aver);      printf("Mathe Max:%f",max);      printf("Mathe Min:%f",min);  

58、;void eaverage()                /*求各学生英语平均分、最高和最低分成绩的函数*/   stu *p1;    int i;    float max=0.0,min=200.0;    float sum=0.0,aver=0;    p1=head;  

59、  if(p1=NULL)     printf("not data!");    else      for(i=0;p1!=NULL;i+,p1=p1->next) sum+=p1->english;   aver=sum/i;        p1=head; for(i=0;p1!=NULL;i+,p1=p1->n

60、ext)          if(max<p1->english)             max=p1->english;                   p1=head; for(i=

61、0;p1!=NULL;i+,p1=p1->next)   if(min>p1->english)     min=p1->english;             printf("English Average:%f",aver);      printf("English Max:%f",max); &

62、#160;    printf("English Min:%f",min); void comaverage()             /*求各学生计算机平均分、最高和最低分成绩的函数*/   stu *p1;    int i;    float max=0.0,min=200.0;    float s

63、um=0.0,aver=0;    p1=head;    if(p1=NULL)     printf("not data!");    else      for(i=0;p1!=NULL;i+,p1=p1->next) sum+=p1->computer;   aver=sum/i;     

64、0;  p1=head; for(i=0;p1!=NULL;i+,p1=p1->next)          if(max<p1->computer)             max=p1->computer;            &

65、#160;      p1=head; for(i=0;p1!=NULL;i+,p1=p1->next)   if(min>p1->computer)     min=p1->computer;             printf("Computer Average:%f",aver);   

66、   printf("Computer Max:%f",max);      printf("Computer Min:%f",min);     update(stu *p2)                      /*通过姓名查找来

67、更新数据*/         char name10;                          /*p2为指向结构体struct student的指针*/  int b=0;  printf("Enter The Name");&

68、#160;                /*输入姓名*/  scanf("%s",name);  while(p2!=NULL)    if(strcmp(name,p2->name)=0)                print

69、f("Find you datan");          scanf("Name:%s",p2->name);          scanf("Num:%s",p2->num);          scanf("Sex:%s",p2-&

70、gt;sex);          scanf("Chinese:%d",p2->chinese);          scanf("Math:%d",p2->mathematic);          scanf("english:%d",p2->e

71、nglish);          scanf("Computer:%d",p2->computer);          printf("Success!");          b=1;     else if(b=0) 

72、0;        printf("Sorry not Find data!");          p2=p2->next;        if(b=0)        print();       &

73、#160; printf("Sorry not Find data!");                 else                 print();         printf(&

74、quot;Finish!");              save(stu *p2)                /*保留数据函数*/      FILE *fp;    char file10;    printf(

75、"Enter file name");          /*输入文件名*/    scanf("%s",file);    fp=fopen(file,"w");    while(p2!=NULL)            fprintf(fp,"

76、%s",p2->name);        fprintf(fp,"%s",p2->num);        fprintf(fp,"%s",p2->sex);        fprintf(fp,"%d",p2->chinese);     &

77、#160;  fprintf(fp,"%d",p2->mathematic);        fprintf(fp,"%d",p2->english);        fprintf(fp,"%d",p2->computer);        p2=p2->next;  &#

78、160;         fclose(fp); char password7="123456"                 /*定义初始密码*/void main()              

79、               /*主函数*/  int choice;   stu *p2;   char s8;   int flag=0,i;                    /*标志项*/

80、   int n=3;  do printf("Enter password:n");      scanf("%s",s);     if(!strcmp(s,password)              /*进行密码匹配验证*/      printf(&

81、quot;PASSnnn");        flag=1;       break;          else       printf("Error Enter again:n");        n-; 

82、0;                   while(n>0);  if(!flag)  printf("you have Enter 3 times!");       /*输入密码超过了3次!*/    exit(0);      

83、0;                         /*自动退出*/                         

84、                         /*密码验证成功后进入的界面*/   printf("tttn");             /*操作界面*/   printf(

85、"ttWelcom to the Misn");   printf("Author:-tClass:-tNum:-n");    /*作者,班级和号码*/   printf("Adress:HGn");                      &#

86、160;               /*地址*/   printf("%n");   printf("ttEnter OP:n");   printf("nnnn");   printf("=tt=n");   printf("=tt=n"); &

87、#160; printf("ttEnter the MIS yes or non");                  /*问进入系统与否*/   scanf("%d",&choice);    if(choice='n'|choice='N')    &#

88、160;   exit(1); print();  while(1)    printf("Enter choice:");   scanf("%d",&i);  if(i<1|i>13)            printf("Enter num from 1 to 13:n");    

89、      /*再从1-13中进行选择*/          exit(1);          switch(i)      case 1:          p2=cindata();  /*其他数据是否继续输入的函数*/ &

90、#160;        break;       case 2:          p2=lookdata(head);      /*查看数据的函数*/          break;    &#

91、160;  case 3:          insert();          /*通过比较学号来插入数据的函数*/          break;       case 4:      

92、0;   find(head);        /*通过姓名查找查看数据的函数*/          break;       case 5:          update(head);     /*通过姓名查找来更新数据*/&

93、#160;           break;       case 6:          save(head);       /*保留数据函数*/          break;  

94、60;    case 7:          print();         /*显示或打印函数*/          break;       case 8:          caverage();    /*求各学生语文平均分、最高和最低分成绩的函数*/          break;       case 9:  &#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论