精华内容
下载资源
问答
  • 课程设计 (论文 ) 题 目 名 称 学生成绩管理系统 课 程 名 称 专业课程设计 I 学 生 姓 名 学 号 系 专 业 信息工程系计算机科学与技术 指 导 教 师 2013 年 11 月 15 日 实用标准文案 目录 1 前言 2 2 需求分析 2 ...
  • 通过分析比较,结合用户对成绩管理系统的改进意见与实现情况,运用面向对象思想方法,设计和实现一个满足功能和性能,并有所创新的成绩管理系统,以提高成绩管理的自动化、友好性等。本系统基于.NET平台和SQL ...
  • 学生成绩管理系统设计》 二、实训目的 (1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。 (2)掌握C++的基本概念和基础知识。 (3)通过训练能够读懂较为复杂的C++语言源程序...

    很多朋友私信要一份C语言学生成绩管理系统设计报告,提供一下获取方法吧

    扫描下方公号,发送 成绩系统 三个字,获取实训报告。

    后续也会把之前搜集到的优质管理系统相关资料分享出来,大家一起学习,下面是作者自己的一份实训报告,希望能帮助到大家

    一、课程设计题目

    《学生成绩管理系统设计》

    二、实训目的

    (1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。

    (2)掌握C++的基本概念和基础知识。

    (3)通过训练能够读懂较为复杂的C++语言源程序并具备基本C++语言程序设计的能力。

    4)通过实训,培养自己编写、调试、分析程序的能力。

    5)培养自己独立解决问题,查找资料的能力。同学之间相互帮助,相互交流,相互合作的团队精神。

    6) 培养自己良好的学习兴趣,独立的编程风格。

    7) 通过实训检查自己学习上的不足,达到熟练掌握C++语言的基本知识和技能。

    三、课程设计报告内容

    3.1功能要求

    该系统运行在DOS环境下,人机界面为命令行文本界面。完成的任务是对若干人的成绩信息进行管理,且数据保存到文件中。

    实现的主要功能是:

    系统以菜单方式进行工作

    学生信息和成绩输入功能

    学生信息和成绩输出功能

    学生信息和成绩浏览功能

    查询学生信息及成绩功能

    修改学生信息及成绩功能

    学生成绩排序

    以稳健的形式进行保存

    3.2 设计环境

    所使用的语言采用标准C,开发工具可选用在DOS环境下的Turbo C

    3.3 数据结构

    本系统是对学生成绩的信息进行管理,学生成绩信息采用C的结构体数据类型描述,定义如下:

    struct students
    {
       int num;          //学号-整型//
       char name[8];    //姓名-字符型//
       char chinese;    //大学语文-字符型//
       char math;       //大学数学-字符型//
       char computer;   //计算机-字符型//
       char sum;        //总成绩-字符型//
       char ave;        //平均分-字符型//
    }

    3.4实现方法及主要算法分析

    (1)主界面的设计:主界面采用文本菜单的形式,各功能调用通过菜单进行选择。采用循环处理,以便执行完某项处理后,仍可选择其他项处理。在循环内先显示提示信息,然后读取用户输入,使用switch语句对用户的输入进行判断,分别调用相应的模块,当某模块结束后再次回到文本菜单,直到用户选择结束程序菜单,才退出循环,从而退出系统。

    (2) 外部文件的类型:文件采用的二进制的文件,对文件的读写采用顺序文件的方式,并使用fread和fwrite等函数对文件进行操作。

    (3)清屏函数:一般由上一级菜单屏幕进入下一级菜单屏幕或由下一级菜单屏幕返回上一级菜单屏幕都需要清除屏幕原来显示的内容。同时在调用程序的过程中,记录需要清屏的位置,然后修改代码,加入clrscr()函数清屏。

    (4)提示信息:一般的输入与输出需有相应的提示信息,以增加用户的交互性,增加输出的可读性,以帮助用户使用程序。

    3.5模块设计

    根据功能要求,本系统为五大主要模块,具体模块如表所示。

    学生信息成绩管理系统的模块

    3.6处理流程

    (1)学生成绩管理系统主界面模块

    2)成绩输入模块 和(3)成绩排序模块

    (4)删除记录

    (5)修改记录

    (6)查找信息

    四、结论

    学生成绩管理系统的编写,看似杂乱无头绪,实际上却并不如此。它的每一个功能都能分成模块,有句话说的好,大事化小,小事化了。C语言编程也正式如此,把一个大的程序分为若干相互独立的模块,这样使完成每一个模块的工作变得单纯而明确,这样不仅降低了难度还使得思路清晰,很容易编写出要做的程序,从而为设计一些较大的软件打下了良好的基础。

    分析问题:

    学生成绩管理系统的整体功能都包括、增加成员、删除成员、查看成员、修改成员、登陆口令五大板块,而查看有包括学号,姓名,大学语文成绩,大学数学成绩,计算机成绩,总成绩,平均分七个模块。

    1. 设计的数据对象包括整形:学号。字符型:姓名、3门课程成绩、总成绩、平均成绩。
    2. 数据结构线性数据结构,定义人数上限为1000.

    算法的设计:

    1. 自顶向下

      现有全局,在进行整体设计,然后再进行下层的设计,逐步实现精细化。采用这种方法能够做到胸有全局,能全盘考虑,不至于顾此失彼,头重脚轻。

    1. 逐步细化

       一步步地将上层的任务分解成较小的、易于实现的任务,知道可以很简单实现为止。

    编写源程序:

    1. 不求速度,但求质量!一步一个脚印,编写程序时候宁可速度慢些也要尽量保证质量,做到尽量不出错。
    2. 精力集中,全神贯注!写程序时候最忌讳三心二意,这样才能思路清晰保证质量。
    3. 保持一个良好的编程心态,不要被长长的代码吓到

    程序的编译与运行:

    1. 查找错误是一件让人闹心的事,但是要注重技巧,注意平时经验的积累。
    2. 程序编译成功不要满足现状,要积极测试程序的可用性,对功能不理想,存在缺点的地方,积极的改进,完善。

    五、结束语

    在实训过程中,使我良好的锻炼了自己,首先是兴趣方面,通过编写通讯录管理系统使我更加喜欢编程,使我从以前的迷茫状态中解脱出来,使我了解了编程的真正意义。我想这对我以后的人生有着很大的帮助。其次通过编写通讯录管理系统使我对写程序有了一定的思路,不像以前无从下手,使我理解了算法的意义,使我懂得了模块化思想的好处。

    通过一个星期的编写代码,使我对书本上的知识有了更深的理解,甚至有很多不懂的问题在这过程中自然而然的理解了。对期末考试更有了信心。在朱老师的悉心指导下,我对C语言有了更深刻的理解,对程序的算法,数据的定义,程序的改错等方面的能力有了很大提高,自身的注意力,耐心,和对编程的兴趣有了很大增长,使我获益匪浅。

    六、参考书目:

    [1]谭浩强,《C语言程序设计》,清华大学出版社

    附完整代码:

    #include<stdio.h>
    #include<string.h>    //比较字符串头文件//
    #include<stdlib.h>   //实时检测总数头文件//
    #define N 1000       //控制最大输入//
    int n=0;             //实时检测的总数n//
    
    /*定义结构体students*/																	       
    struct students
    {
       int num;          //学号-整型//
       char name[8];     //姓名-字符型//
       char chinese;     //大学语文-字符型//
       char math;        //大学数学-字符型//
       char computer;    //计算机-字符型//
       char sum;         //总成绩-字符型//
       char ave;        //平均分-字符型//
    }student[N],student1;     //student[N]是结构体数组student1是结构体的初始化//
    
      /*实时检测总数n*/
    void count()  
     {
    	FILE *fp;         //定义一个文件指针fp//
    	fp=fopen("students.txt","at+");     //以“追加”方式打开students文本文件//
    	if(fp==NULL)                        //判断文件是否为空//
    		printf("Cannot open file!");
        struct students stu1;                 
    	n=0;         //初始化//
    	while(1)
    	{
    	  if(feof(fp))  //检测文件是否结束//
    	  break;
          fread(&stu1,sizeof(struct students),1,fp);   //读取文件//
    	  n++;    //读取文件数//
        }
    	n--;           //关闭文件数//
    	fclose(fp);    //关闭文件//
     }
    
    /*菜单*/
    void main()
    {
    	int i;        //获取用户在菜单中的选择//     
    	while(i!=0)
    	{
    		system("cls");     //清屏//
    	printf("\t\t欢迎进入学生信息管理系统\n");
      printf("\t\t==============================\n");
    		printf("\t\t*请择操作                    *\n");
    		printf("\t\t*1输入学生信息               *\n");
    		printf("\t\t*2输出学生信息               *\n");
    		printf("\t\t*3修改学生信息               *\n");
    		printf("\t\t*4查询学生信息               *\n");
           printf("\t\t*5排序学生信息               *\n");
    		printf("\t\t*6退出                       *\n");
    	printf("\t\t==============================\n");
     scanf("%d",&i);
     system("cls");     //清屏// 
    		count();     //实时检测总数n//
    		switch(i)
    		{
    		 case 1:input();break;    //输入学生信息//	
    		 case 2:output();break; 	//输出学生信息//
    	     case 3:xiugai();output();break;    //修改学生信息//
            case 4:query();break;    //查询学生信息*/
            case 5:paixu();output();break;    //成绩排序//
    	default:
    		   printf("输入有错\n");     //错误纠正//  
    		}
    	}
    	   if(i==0)
    	     tuichu();        //退出系统//
    }
    
    
    /*成绩输入*/
    void input()   
    {
      int i=0;     //学生人数初始化//
      char c;
      FILE *fp;     //定义一个文件指针fp//
    	count();     //实时检测总数n//
    	fp=fopen("students.txt","at+");    //以“追加”方式打开students文本文件//
      do 
      {	
       printf("请输入学生的个人信息:\n");
         printf("\n请输入第%d学生的信息:\n",n+1);
         printf("请输入学生的学号:");
         scanf("%d",&student[i].num);
         printf("请输入学生的姓名:");
        scanf("%s",student[i].name);getchar();
        printf("请输入学生的大学语文成绩");
        scanf("%s",student[i].chinese);
        printf("请输入学生的大学数学成绩:");
        scanf("%d",&student[i].math);
        printf("请输入学生的计算机成绩:");
        scanf("%s",student[i].computer);
         getchar();
         student[i].sum=student[i].chinese+student[i].math+student[i].computer;
    		student[i].ave=student[i].sum/3;
    fwrite(&student[i],sizeof(struct students),1,fp);  //以方式将其写入students文本文件//
    	i++;     
    	n++;      
    	printf("\n\n\t\t\t\t是否继续输入(Y/N):");getchar();     //提示是否继续,从键盘  
                                                               获得一个字符//  
    scanf("%c",&c);  
      }
     while(c=='y'||c=='Y');
     fclose(fp);
    }
    
    /*成绩输出*/        
    void output()  
    {
      int i;
      char c;
      FILE *fp;      //定义一个文件指针fp//
      fp=fopen("students.txt","rt");    //以“读取的” 方式打开students文本文件//
      system("cls");     //清屏//
      getchar();
        
    printf("||------||-----||-----||-----||------||-------||-------||------||");
    	printf("|#学号-----姓名------大学语文------大学数学------计算机------总成绩
    -----平均分---#|\n");
      do{  
    	  for(i=0;i<n;i++)  
    	  { 
           fread(&student[i],sizeof(struct students),1,fp);  
           printf("%d",student[i].num);
            printf(" %d",student[i].name);
    	        printf("%d",student[i].chinese);
              printf(" %d ",student[i].math);
              printf("%d ",student[i].computer);
              printf("%d",student[i].sum);
              printf(" %d ",student[i].ave);
         
    	  }
    printf("|------||-----||------||-----||-----||-----||-----||------ |");
      	  printf("\n\n\t\t\t\t是否继续其它操作(Y/N):");     //提示是否继续//
    	      scanf("%c",&c);
    	  c=getchar();
    	}while(c=='y'||c=='Y');
         fclose(fp);      //关闭文件//
    }
    
    /*成绩修改*/
    void xiugai()  { 
      int i,tp,num1;
      char c; 
      FILE *fp;     //定义一个文件指针fp//
    
    lb:  
      printf("\n按学号修改\n\n");
      printf("请输入要修改的学生学号\n");
      scanf("%d",&num1);
    
     for(i=0;i<n;i++) 
     {
    	if(num1==student[i].num)
    	  { 
    		printf("要修改的学生信息为:\n");
            printf("学号\t姓名\t大学语文成绩\t大学数学成绩\t计算机成绩\t总成绩\t
    平均分\n");          
            printf(" %d ",student[i].num);
            printf(" %d ",student[i].name);
            printf(" %d ",student[i].chinese);
            printf(" %d ",student[i].math);
            printf(" %d ",student[i].computer);
            printf(" %d ",student[i].sum);
            printf(" %d ",student[i].ave);
            do {
    		    printf("请选择要修改项:\n");
                printf("1学号\n2姓名\n3大学语文成绩\n4大学数学成绩\n5总成绩\n6平
    均分\n");
                scanf("%d",&tp);
    	            switch(tp)
    			{
    	         case 1:
    				{	 printf("请输入学号:\n");
    		          scanf("%d",&student[i].num);
    		          goto la;
    				}	
    	  	      case 2:
    				{ printf("请输入姓名:\n");
    		          scanf("%s",student[i].name);
    		          goto la;
    				}	
    	  	      case 3:
    				{ printf("请输入大学语文成绩:\n");
    				  getchar();
    		          scanf("%c",&student[i].chinese);
    		         goto la;
    				}	
    	  	      case 4:
    				{ printf("请输入大学数学成绩:\n");
    		          scanf("%d",&student[i].math);
    		         goto la;		  
    				}	
    	  	      case 5:
    				{printf("请输入计算机成绩:\n");
    		          scanf("%s",student[i].computer);	
    		         goto la;
    				}	
    	  	     case 6:
    				{ printf("请输入总成绩:\n");
    		          scanf("%s",student[i].sum);
    		         goto la;
    				}	
    	  	     case 7:
    				{ printf("请输入平均分:\n");
    		          scanf("%s",student[i].ave);
    		         goto la;
    				}
    			}
    		}while (tp<8);		 
    la:	  printf("是否继续修改(y/n)\n");     //提示是否继续//
    	  getchar();
    	  scanf("%c",&c);
    	  if(c=='y'||c=='Y')  goto lb;
             }
      }
        fp=fopen("students.txt","w+");   //以“读写” 方式打开students文本文件//
    	  for(i=0; i<n;i++)
    	  fwrite(&student[i],sizeof(struct students),1,fp);  //以 方式将其写入students
                                                     文本文件//
     fclose(fp);    //关闭文件//
    }
    
    
    /*成绩查询*/
    void query()
    { int querymode;     //子菜单选择//
      int i,j=0,findnum;
      char findname[20];
      int findok,t=0;     //定义一个判断标志的整型变量findok//
      char findct;        //定义一个用于判断是否继续查找的字符变量findct//
      
       FILE *fp;         //定义一个文件指针fp//
       count();     //实时检测总数n//
       fp=fopen("students.txt","r");       //以“只读” 方式打开students文本文件//
       system("cls");     //清屏//
    
      /*查询菜单*/
      printf("\t\t信息查询");
      printf("\n\t1按姓名查询");
      printf("\n\t2按学号查询");
      printf("\n\t0返回上级菜单");
      printf("\n请输入您的操作:");
      scanf("%d",&querymode);
    
      /*查询操作*/
      switch(querymode)
      {case 1: 
        {     printf("请输入要查询学生的姓名:\n");
                getchar();
                scanf("%s",findname); 
                for(i=0;i<N;i++)
    		{
         fread(&student[i],sizeof(struct students),1,fp); //以方式将其读入students
                                                          文本文件//
       if(strcmp(student[i].name,findname)==0)        //比较字符串//
    			 { 
    			   j++;
    			   printf("\n查寻到的学生为:\n");
    			   if(j==1)
                              、
    printf("|------||-----||------||------||------||-------||------||-----|");    
    //仅在第一次显示//
    	printf("|#学号-----姓名------大学语文------大学数学------计算机------总成绩-
    ----平均分---#|\n");
              
    printf("%4d%d%d%d%d%d%d%d",student[i].num,student[i].name,
    student[i].chinese,student[i].math,student[i].sum,student[i].ave);
    			  }
    
    			}
    			if(j==0)
    			  printf("\n>>>查无此人!");
    
               //提示是否继续// 
                printf ("\n是否继续查找(Y/N)?");       
                getchar();
                getchar();}break;
      
        case 2:{ printf("请输入要查询学生的学号:");
                 scanf("%d",&findnum);
                 for(i=0;i<n;i++)
    			 {
                  fread(&student[i],sizeof(struct students),1,fp);        
    //以结构体students的方式从文件fp中读取,将其读入students文本文件,每次读入一个 
    学生的信息//
                  if(student[i].num==findnum)      //整型数字的比较// 
    			  {findok=1;break;}
    			  else findok=0;
    			 }
                  if(!findok)
    				printf("\n>>>查无此人!");
    			  else
    			  { printf("\n查寻到的学生为:\n") ;
    			    if(j==1)
                          printf("|-------||------||------||-------||-------||-------||-------||------|");   
     //仅在第一次显示//
     printf("|学号-----姓名------大学语文------大学数学------计算机------总成绩-----平均分---|\n");
     printf("%4d%d%d%d%d%d%d%d",student[i].num,student[i].name,
    student[i].chinese,student[i].math,student[i].sum,student[i].ave);
    			  }
    //提示是否继续//
          printf ("\n是否继续查找(Y/N)?");       
            getchar();
    			findct=getchar();     //从键盘输入一个判断字符,并将它赋值给字符变量
                                   findct,用于以下的if语句的判断 //
    			if(findct=='Y' || findct=='y')
    			  query();
    		  }
      }
      fclose(fp);    //关闭文件//
    }
    
    
    /*成绩排序*/
    void paixu()
    {
       int i, j;
         FILE *fp;       //定义一个文件指针fp//
       system("cls");      //清屏//
       count();       //实时检测总数n// 
       for(i=0;i<n-1;i++)
    	    for(j=0;j<n-1-i;j++)    //按学号对学生信息进行排序//
    		{
    		     if(student[j].num>student[j+1].num)   //整型数字的比较//
    			 {
    			     student1=student[j];
    			     student[j]=student[j+1];
    			     student[j+1]=student1;
    			 }
    		}
    	fp=fopen("students.txt","w+");  //以 “读写”方式打开students文本文件//
    	for(i=0;i<n;i++)
    	fwrite(&student[i],sizeof(struct students),1,fp);  //以结构体students的方式从
       文件fp中读取,将其写入students文本文件,每次写入一个学生的信息//
        fclose(fp);      //关闭文件//
    }
    
    /*退出系统*/
    void tuichu() 
    {
    	char c;
    	  system("cls");      //清屏//
        printf("\n\n\t\t谢谢使用\n\n\n");
        printf("\n\n\t\t制作人:李姣 渠莉 宝珠 朱佳 刘妍\n");
    	  getchar();
    	c=getchar();       //取用户输入,回显//    
    }

    需要实训报告的同学,请在下方留言,看到会一个个回复的。

    或者直接扫描下方公号,发送 成绩系统 三个字,获取下载源码

    如果失效了,再请直接私信或留言,欢迎大家一起探讨学习。

    相关文章推荐:

    1、 C语言学生成绩管理系统源代码 ★★★★★

    2、 C语言学籍管理系统源代码 ★★

    3、C语言学生成绩管理系统设计 《C语言程序设计》实训报告 ★★★

    展开全文
  • 实用标准文案 C# 语言编程实训报告 精彩文档 实用标准文案 系部 * 班级 * 学号 * 姓名 * 指导教师 * 评语 一 设计题目学生成绩管理系统设计目的 通过编写学生成绩管理系统掌握循环结构数组结构结构体 的设计和...
  • 计算机高级语言课程设计报告 学生成绩管理系统 班级 191142 班 学号 姓名 日期 2015 年 1 月 22 日 一 课程设计题目与要求 包括题目与系统功能要求 实习内容 C++ 语言面向对象分析设计 基本要求 学生成绩管理是...
  • 计算机高级语言课程设计报告 学生成绩管理系统 班级191142班 学号 姓名 日期2015年1月22日 一 课程设计题目与要求 包括题目与系统功能要求 实习内容 C++语言面向对象分析设计 基本要求 学生成绩管理是高等学校...
  • 本次实验设计了一个学生管理系统学生管理系统对数据的存储可以是顺序结构,也可以是链式结构。由于顺序结构存储时用的是一段连续的存储空间,不适合存储大量的信息量,因此本人使用单链表的数据结构来对学生的信息...
  • C#语言编程实训报告 系部 * 班级 * 学号 评语 姓名 * 指导教师 * 一 设计题目学生成绩管理系统设计目的 通过编写学生成绩管理系统 掌握循环结构 数组结构 结构体 的设计和应用 熟练方法的调用 选择结构的具体...
  • * 指导教师* 评语: 一 设计题目学生成绩管理系统设计目的 通过编写学生成绩管理系统掌握循环结构数组结构结构体 的设计和应用熟练方法的调用选择结构的具体应用排序检索功 能的设计最终提高面向对象编程分析与...
  • 毕业设计中期总结 1. 前期...通过分析比较,结合用户对学生管理系统的改进意见与实现情况,运用面向对象思想方法,设计和实现一个满足功能和性能,并有所创新的学生管理子系统,以提高学生管理的自动化、友好性等。
  • 数 据库共同来完成的采用面向对象方法对学生成绩管理系统进行设计与实现 分析设计学生成绩管理系统的静态模型和动态模型完成了系统开发的分析 设计和实现的工作本学生成绩管理系统通过?Web?方式完成用户与系统的...
  • 学生成绩管理系统

    2012-08-22 21:40:00
    学生成绩管理系统 班级 计算机应用091班 姓名唐俊驰 学号 2009052023 日期 2010-12-26 一、 需求分析 1. 程序的功能:学生数据的录入、添加、修改与删除;成绩统计并排名;学生数据的读取与存储等基本功能...

    《面向对象程序设计》课程实验报告

     

    学生成绩管理系统

     

    班级  计算机应用091 姓名唐俊驰    学号  2009052023   日期  2010-12-26              

     

    一、        需求分析

    1.  程序的功能:学生数据的录入、添加、修改与删除;成绩统计并排名;学生数据的读取与存储等基本功能。

    2.  输入输出的要求:输入学生的成绩及处理要求;输出自己想得到的结果

    3.  测试数据。  zhang       123  58    69    74

    wang       456  78    96    58

    yang           789  89    68    59

    二、        详细设计

    1.  程序框架设计:

    设置了添加、修改、删除、查找、排序和对数据的读取、保存等功能。

    2.  程序详细设计

    添加:创建一个新的分类,用输入的变量初始化这个类,并用指针链接上一个对象。

    修改:先通过链表找到要修改的对象,在输入要修改的值,利用类内函数对值进行修改。

    删除:根据输入的条件找到要删除的对象,将此对象的next指针赋值给上一个对象的next值。

    查找:按照学号或者姓名按链表查找对象,找到后输出该对象的基本信息。

    排序:利用比较法,按照要求的标准进行排序。

    数据的读取和保存:文件的打开和关闭,并按照存储的格式读取。

    三、        调试分析

    1.  调试中遇到的问题及对问题的解决方法

     

    四、        使用说明及测试结果

    1.  系统配置:Windows XP SP3;VC 6.0

    2.  系统运行效果图

                           

     

     

     

     

     

     

    五、        源程序(带注释)

    1.程序代码

    /*stu.cpp*/

    #include<iostream>

     

    #include ".\ClassHead.h"

     

    using namespace std;

    void main() {

       char c;

       cla a;

       do {

              cout<<"\n score systerm:\n"; 

              cout<<" 1……add \n";

              cout<<" 2……delete \n";

              cout<<" 3……change \n";

              cout<<" 4……look for\n";

              cout<<" 5……paixu\n";

              cout<<" 6……save \n";

              cout<<" 7……read \n";

              cout<<" 8……back \n"; 

              cout<<"choose(1-8):";

              cin>>c;

              switch(c) {

              case '1':

                     a.sadd();

                     break;

              case '2':

                     a.sremove();

                     break;

              case '3':

                     a.samend();

                     break;

              case '4':

                     a.ssearch();

                     break;

              case '5':

                     a.staxis();

                     break;

              case '6':

                     a.ssave();

                     break;

              case '7':

                     a.sload();

                     break;

              }

             

       }while(c!='8');

    }

     

    /*类的定义及其成员函数的实现*/

    #ifndef _CLASSHEAD_H

    #define _CLASSHEAD_H

    #include<iomanip>

    #include<fstream>

    #include<string>

    #define max 80;

    using namespace std;

     

    class student {

    public:

           student *next;

    public:

           string name;

           long num;

           int x,y,z;

           int AA;

           void play() {

                  cout << name << "student's numbers" << num << ",math:" << x

                         << ",language:" << y << ",english:" << z << ",in total:" << AA << endl;

           };

           student(string sname,long snum,int sx,int sy,int sz) {

                  name = sname;

                  num = snum;

                  x = sx;

                  y = sy;

                  z = sz;

           }

    };

     

     

    class cla {

    public:

           cla() {

                  stu = 0;

                  sload();

           }

           ~cla() {

                  student *p;

                  p = stu;

                  while(p) {

                         p = p->next;

                         delete stu;

                         stu = p;

                  }

                  stu = 0;

           }

           void sadd(); 

           void sremove(); 

           void samend(); 

           void ssearch(); 

           void staxis(); 

           void ssave(); 

           void sload();

          

           void pxh();

           void psx();

           void pyw();

           void pyy();

           void pAA();

    private:

           student *stu; 

    };

     

    void cla::sadd() {

           student *q;

           string name1;

           long num1;

           int x1,y1,z1;

          

          

          

           system("cls");

           cout << "\n **add student** \n" << endl;

           cout << "please input:" << endl;

           cout << "name\tnumber\tmath\tlanguage\tenglish:" << endl;

           cin >> name1 >> num1 >> x1 >> y1 >> z1;

          

           q = new student(name1,num1,x1,y1,z1);

           q->next = 0;

           q->AA = x1 + y1 + z1;

          

           if(stu) {

                  student *t;

                  t = stu;

                  if(t->num == num1) {

                         cout << "number has already been recorded,please input again" << endl;

                         return;

                  }

                  while(t->next) {

                         if(t->num == num1) {

                                cout << "number has already been recorded,please input again" << endl;

                                return;

                         }

                         t = t->next;

                  }

                  t->next = q;

           }

           else {

                  stu = q;

           }

           cout << "down" << endl;

    }

     

    void cla::sremove() {

           system("cls");

           int num1;

           cout << "\n** delete **\n";

           cout << "please input the number you want to delete:";

           cin >> num1;

          

           student *p1,*p2;

           p1 = stu;

           while(p1) {

                  if(p1->num == num1)

                         break;

                  else {

                         p2 = p1;

                         p1 = p1->next;

                  }

           }

          

           if(p1 != NULL) {

                  p1->play();

                  cout << "[Y/N]" << endl;

                  char c;

                  cin >> c;

                  if(toupper(c)!='Y')

                         return;

                 

                  if(p1==stu) {

                         stu = p1->next;

                         delete p1;

                  }

                  else {

                         p2->next = p1->next;

                         delete p1;

                  }

                  cout << "find the number is:" << num1 << "  delete\n";

           }

           else

                  cout << "there's no information about that!\n";

    }

     

    void cla::samend() {

           system("cls");

           long num1;

           cout << "\n** change the student number**\n";

           cout << "input the changing number";

           cin >> num1;

          

           student *p1,*p2;

           p1 = stu;

           while(p1) {

                  if(p1->num == num1)

                         break;

                  else {

                         p2 = p1;

                         p1 = p1->next;

                  }

           }

           if(p1!=NULL) {

                  cout << "the number is" << num1 << "'information" << endl;

                  cout << "name "<<p1->name<<"math"<<p1->x<<"language"<<p1->y<<"english"<<p1->z<<endl;

                  cout<<"please the changing information:name math language english"<<endl;

                  cin>>p1->name>>p1->x>>p1->y>>p1->z;

                  p1->AA=p1->x+p1->y+p1->z;

                  cout<<"change suceed"<<endl;

           }

           else

                  cout<<"no found!\n";

    }

     

    void cla::ssearch() {

           system("cls");

           cout<<"\n** look for **\n"<<endl;

           cout<<"please input the way:"<<endl;

           cout<<"1.number"<<endl;

           cout<<"2.name"<<endl;

           cout<<"3.return"<<endl;

           char c;

           cin>>c;

           switch (c) {

           case '1':

                  {

                         long num1;

                         cout<<"the number"<<endl;

                         cin>>num1;

                        

                         student *p1,*p2;

                         p1=stu;

                         while(p1) {

                                if(p1->num==num1)

                                       break;

                                else {

                                       p2=p1;

                                       p1=p1->next;

                                }

                         }

                        

                         if(p1!=NULL) {

                                cout<<"muber is"<<num1<<" information"<<endl;

                                cout<<"name:"<<p1->name<<" math:"<<p1->x<<" language:"<<p1->y<<" english:"<<p1->z<<endl;

                                cout<<"down";

                         }

                         else

                                cout<<"no foud!\n";

                         break;

                  }

           case '2':

                  {

                         string name1;

                         cout<<"the name"<<endl;

                         cin>>name1;

                        

                         student *p1,*p2;

                         p1=stu;

                         while(p1) {

                                if(p1->name==name1)

                                       break;

                                else {

                                       p2=p1;

                                       p1=p1->next;

                                }

                         }

                        

                         if(p1!=NULL) {

                                cout<<name1<<"information"<<endl;

                                cout<<"number:"<<p1->num<<" math:"<<p1->x<<" language:"<<p1->y<<" english:"<<p1->z<<endl;

                                cout<<"down...";

                         }

                         else

                                cout<<"no foud!\n";

                         break;

                  }

           case '3':

                  return;

           }

          

    }

     

    void cla::pxh() {

           student *p1,*p2;

           int n;

           p1=stu;

           n=1;

           while(p1->next) {

                  n++;

                  p1=p1->next;

           }

           cout<<"have"<<n<<"message..."<<endl;

           int i;

           p1=stu;

           for(i=1;i<n;i++) {

                  p1=stu;

                  if (p1->num>p1->next->num) {

                         p2=p1->next;

                         p1->next=p1->next->next;

                         p2->next=p1;

                         stu=p2;

                  }

                  p1=stu;

                  while(p1->next->next) {

                         p2=p1;

                         p1=p1->next;

                         if(p1->num>p1->next->num) {

                                p2->next=p1->next;

                                p1->next=p1->next->next;

                                p2->next->next=p1;

                                p1=p2->next;

                         }

                  }

           }

          

           p1=stu;

           do {

                  p1->play();

                  p1=p1->next;

           }while(p1);

    }

     

    void cla::psx() {

           student *p1,*p2;

           int n;

           p1=stu;

           n=1;

           while(p1->next) {

                  n++;

                  p1=p1->next;

           }

           cout<<"have"<<n<<"message..."<<endl;

           int i;

           p1=stu;

           for(i=1;i<n;i++) {

                  p1=stu;

                  if (p1->x>p1->next->x) {

                         p2=p1->next;

                         p1->next=p1->next->next;

                         p2->next=p1;

                         stu=p2;

                  }

                  p1=stu;

                  while(p1->next->next) {

                         p2=p1;

                         p1=p1->next;

                         if(p1->x>p1->next->x) {

                                p2->next=p1->next;

                                p1->next=p1->next->next;

                                p2->next->next=p1;

                                p1=p2->next;

                         }    

                  }

           }

           p1=stu;

           do {

                  p1->play();

                  p1=p1->next;

           }while(p1);

    }

     

     

    void cla::pyw() {

           student *p1,*p2;

           int n;

           p1=stu;

           n=1;

           while(p1->next) {

                  n++;

                  p1=p1->next;

           }

           cout<<"have"<<n<<"message..."<<endl;

           int i;

           p1=stu;

           for(i=1;i<n;i++) {

                  p1=stu;

                  if (p1->y>p1->next->y) {

                         p2=p1->next;

                         p1->next=p1->next->next;

                         p2->next=p1;

                         stu=p2;

                  }

                  p1=stu;

                  while(p1->next->next) {

                         p2=p1;

                         p1=p1->next;

                         if(p1->y>p1->next->y) {

                                p2->next=p1->next;

                                p1->next=p1->next->next;

                                p2->next->next=p1;

                                p1=p2->next;

                         }

                  }

           }

           p1=stu;

           do {

                  p1->play();

                  p1=p1->next;

           }while(p1);

    }

     

    void cla::pyy() {

           student *p1,*p2;

           int n;

           p1=stu;

           n=1;

           while(p1->next) {

                  n++;

                  p1=p1->next;

           }

           cout<<"have"<<n<<"message..."<<endl;

           int i;

           p1=stu;

           for(i=1;i<n;i++) {

                  p1=stu;

                  if (p1->z>p1->next->z) {

                         p2=p1->next;

                         p1->next=p1->next->next;

                         p2->next=p1; 

                         stu=p2;

                  }

                  p1=stu;

                  while(p1->next->next) {

                         p2=p1;

                         p1=p1->next;

                         if(p1->z>p1->next->z) {

                                p2->next=p1->next;

                                p1->next=p1->next->next;

                                p2->next->next=p1;

                                p1=p2->next; 

                         }

                  }

           }

           p1=stu;

           do {

                  p1->play();

                  p1=p1->next;

           }while(p1);

    }

     

    void cla::pAA() {

           student *p1,*p2;

           int n;

           p1=stu;

           n=1;

           while(p1->next) {

                  n++;

                  p1=p1->next;

           }

           cout<<"have"<<n<<"message..."<<endl;

           int i;

           p1=stu;

           for(i=1;i<n;i++) {

                  p1=stu;

                  if (p1->AA>p1->next->AA) {

                         p2=p1->next;

                         p1->next=p1->next->next;

                         p2->next=p1; //头结点交换

                         stu=p2;

                  }

                  p1=stu;

                  while(p1->next->next) { //中间的交换

                         p2=p1;

                         p1=p1->next;

                         if(p1->AA>p1->next->AA) {

                                p2->next=p1->next;

                                p1->next=p1->next->next;

                                p2->next->next=p1;

                                p1=p2->next; //交换

                         }

                  }

           }

           p1=stu;

           do {

                  p1->play();

                  p1=p1->next;

           }while(p1);

    }

     

    void cla::staxis() {   //排序

           system("cls");

           char c;

           cout<<"请选择以何种方式排序:"<<endl;

           cout<<"1……number"<<endl;

           cout<<"2……math"<<endl;

           cout<<"3……language"<<endl;

           cout<<"4……english"<<endl;

           cout<<"5……total"<<endl;

           cout<<"6……return"<<endl;

           cout<<"choose(1-6)"<<endl;

           cin>>c;

          

           switch (c) {

           case '1':pxh(); break;

           case '2':psx(); break;

           case '3':pyw(); break;

           case '4':pyy(); break;

           case '5':pAA(); break;

           case '6':return;

           }

          

    }

     

    void cla::ssave() {

           system("cls");

           char c;

           cout<<"\nsafe,[Y/N]:";

           cin>>c;

           if(toupper(c)!='Y')

                  return;

          

          

           ofstream tfile("date.txt",ios_base::binary);

           student *p=stu;

           while(p) {

                  tfile<<p->name<<"\t"<<p->num<<"\t"<<p->x<<"\t"<<p->y<<"\t"<<p->z;

                  tfile<<endl;

                  p=p->next;

           }

           tfile.close();

           cout<<"down..."<<endl;

    }

     

    void cla::sload() {

           student *p;

           p=stu;

           while(p) {

                  stu=p->next;

                  delete p;

                  p=stu;

           }

          

          

           ifstream tfile("date.txt",ios_base::binary);

          

           string name1;

           long num1;

           int x1,y1,z1;

          

           tfile>>name1>>num1>>x1>>y1>>z1;

           while(tfile.good()) {

                 

                  student *s;

                  s=stu;

                  s=new student(name1,num1,x1,y1,z1);

                  s->next=0;

                  s->AA=x1+y1+z1;

                  if(stu) {

                         student *p2;

                         p2=stu;

                         while(p2->next) {

                                p2=p2->next;

                         }

                         p2->next=s;

                  }

                  else {

                         stu=s;

                  }

                  tfile>>name1>>num1>>x1>>y1>>z1;

           }

           tfile.close();

           cout<<"\ninformation has down...\n";

    }

    #endif

    转载于:https://www.cnblogs.com/vmyspace/archive/2012/08/22/2651512.html

    展开全文
  • mfc学生成绩管理系统

    2020-07-06 10:35:00
    (1)、设计一个学生类Student,包括数据成员:姓名、学号、二门课程(面向对象程序设计、高等数学)的成绩。 (2)、创建一个管理学生的类Management,包括实现学生的数据的增加、删除、修改、按课程成绩排序、保存...

    程序设计课程设计报告

    目录
    一、课程设计题目及内容
    二、程序中使用的数据及主要符号说明
    三、带有详细注释的自己编写的源程序
    四、程序运行时的效果图
    五、实验结果分析,实验收获和体会。
    1、实验结果分析:
    2、实验收获和体会:

    一、实验内容
    实验1:
    (1)、设计一个学生类Student,包括数据成员:姓名、学号、二门课程(面向对象程序设计、高等数学)的成绩。
    (2)、创建一个管理学生的类Management,包括实现学生的数据的增加、删除、修改、按课程成绩排序、保存学生数据到文件及加载文件中的数据等功能。
    (3)、创建一个基于对话框的MFC应用程序,程序窗口的标题上有你姓名、学号和应用程序名称。使用(1)和(2)中的类,实现对学生信息和成绩的输入和管理。

    (4)、创建一个单文档的MFC应用程序,读取(3)中保存的文件中的学生成绩,分别用直方图和折线方式显示所有学生某课程的成绩分布图。
    在这里插入图片描述

    在这里插入图片描述

    二、程序中使用的数据及主要符号说明

    unsigned int mID;//学号
    	CString mName;//姓名
    	unsigned int mAge;//年龄
    	CString mAdd;//地址
    	float mCpp;//c++成绩
    	float mMath;//数学成绩
    	CListBox m_list;//列表名
    	afx_msg void OnClickedButtonAdd();//添加按钮
    	afx_msg void OnClickedButtonDel();//删除按钮
    	afx_msg void OnClickedButtonChange();//修改
    	afx_msg void OnClickedButtonOk();//确定
    	afx_msg void OnClickedButtonCancle();//取消
    	
    	afx_msg void OnSelchangeList1();//列表控件
    	virtual BOOL OnInitDialog();//初始化对话框
    	afx_msg void OnDestroy();//防止内存泄漏
    	afx_msg void OnClickedButton6();
    	int m_count;//记录人数
    	int mSex;//性别
    
    
    

    三、带有详细注释的自己编写的源程序

    1)、设计一个学生类Student
    //Student.h
    #pragma once
    
    #include<string>
    //using namespace std;
    #include<iostream>
    
    enum Sex { male, female };
    class Student
    {
    public:
    	Student();//构造函数
    	~Student();//析构函数
    
    	unsigned int GetID()const
    	{
    		return m_num;
    	}
    	void SetID(unsigned int ID) { m_num = ID; };
    	std::string GetName()const
    	{
    		return m_name;
    	}
    	void SetName(const std::string& name) { m_name = name; };
    	Sex GetSex()const
    	{
    		return m_sex;
    	}
    	void SetSex(Sex sex) { m_sex = sex; };
    	unsigned int GetAge()const
    	{
    		return m_age;
    	}
    	void SetAge(unsigned int age) { m_age = age; };
    	std::string GetAdd()const
    	{
    		return m_add;
    	}
    	void SetAdd(std::string add) { m_add = add; };
    	float GetCpp()const
    	{
    		return m_cpp;
    	}
    	void SetCpp(float cpp) { m_cpp = cpp; };
    	float GetMath()const
    	{
    		return m_math;
    	}
    	void SetMath(float math) { m_math = math; };
    
    	friend std::ostream& operator<<(std::ostream& os, const Student& st);
    	friend std::istream& operator>>(std::istream& is, Student& st);
    
    private:
    	unsigned int  m_num;//学号
    	std::string m_name;//姓名
    	Sex m_sex;//性别
    	unsigned int m_age;//年龄
    	std::string m_add;//地址
    	float m_cpp;//c++成绩
    	float m_math;//数学成绩
    
    };
    
    //Student.cpp///
    
    #include "pch.h"
    #include "Student.h"
    
    Student::Student()//初始化
    	:m_num(0)
    	, m_name("")
    	, m_sex(male)
    	, m_age(20)
    	, m_add("")
    	, m_cpp(0.0f)
    	, m_math(0.0f)
    {
    
    }
    
    Student::~Student()
    {
    }
    
    std::ostream& operator<<(std::ostream& os, const Student& st)//重载函数
    {
    	os << "" << st.m_num;
    	os << "" << st.m_name;
    	os << "" <<(int )st.m_sex;
    	os << "" << st.m_age;
    	os << "" << st.m_add;
    	os << "" << st.m_cpp;
    	os << "" << st.m_math;
    	return os;
    }
    
    std::istream& operator>>(std::istream& is, Student& st)
    {
    	is >> st.m_num;
    	is >> st.m_name;
    	int sex;
    	is >> sex;
    	st.m_sex = sex == 0 ? male : female;
    	is >> st.m_age;
    	is >> st.m_add;
    	is >> st.m_cpp;
    	is >> st.m_math;
    	return is;
    
    }2)、添加一个CStudentinfo类,包括实现学生的数据的增加、删除、修改、按课程成绩排序、保存学生数据到文件及加载文件中的数据等功能。
    //Dlg.h
    #pragma once
    // CStudentinfo 对话框
    
    class CStudentinfo : public CDialogEx
    {
    	
    private:
    	unsigned int mID;//学号
    	CString mName;//姓名
    	unsigned int mAge;//年龄
    	CString mAdd;//地址
    	float mCpp;//c++
    	float mMath;//数学
    	CListBox m_list;//列表名称
    public:
    	afx_msg void OnClickedButtonAdd();
    	afx_msg void OnClickedButtonDel();
    	afx_msg void OnClickedButtonChange();
    	afx_msg void OnClickedButtonOk();
    	afx_msg void OnClickedButtonCancle();
    public:
    	afx_msg void OnSelchangeList1();
    	virtual BOOL OnInitDialog();
    	afx_msg void OnDestroy();
    	afx_msg void OnClickedButton6();
    	int m_count;人数
    private:
    	int mSex;//性别
    };
    
    
    // CStudentinfo.cpp: 实现文件
    //
    
    #include "pch.h"
    #include "EX03.h"
    #include "afxdialogex.h"
    
    
    #include "Student.h"
    #include "CStudentinfo.h"
    #include <ctime>
    #include <fstream>
    // CStudentinfo 对话框
    
    IMPLEMENT_DYNAMIC(CStudentinfo, CDialogEx)
    
    //对话框初始化
    CStudentinfo::CStudentinfo(CWnd* pParent /*=nullptr*/)
    	: CDialogEx(DIALOG_STUDENT, pParent)
    	, mID(0)
    	, mName(_T(""))
    	, mAge(0)
    	, mAdd(_T(""))
    	, mCpp(0)
    	, mMath(0)
    	, mSex(0)
    	, m_count(0)
    {
    
    }
    
    // CStudentinfo 消息处理程序
    //
    
    //添加
    void CStudentinfo::OnClickedButtonAdd()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	UpdateData(TRUE);
    	if (mID > 0 && !mName.IsEmpty())
    	{
    		Student* pSt = new Student();
    	//	pSt = nullptr;
    		pSt->SetID(mID);
    		pSt->SetName(std::string(mName));
    		pSt->SetSex(mSex == 0 ? male : female);
    		pSt->SetAge(mAge);
    		pSt->SetAdd(std::string(mAdd));
    		pSt->SetMath(mMath);
    		pSt->SetCpp(mCpp);
    		CString temp;
    		temp.Format(_T("%d-%s"), mID, mName);
    		m_list.AddString(temp);
    		m_list.SetItemDataPtr(m_list.GetCount() - 1, pSt);
    
    		mName = "";
    		mAdd = "";
    		mID =0;
    		mAge = 0;
    		mMath = 0;
    		mCpp = 0;
    		UpdateData(false);
    	
    	}
    }
     
    //删除
    void CStudentinfo::OnClickedButtonDel()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	int sel = m_list.GetCurSel();//获取当前对象
    	if (sel == LB_ERR)return;
    	auto pSt = (Student*)m_list.GetItemDataPtr(sel);
    	delete pSt;
    	m_list.DeleteString(sel);
    }
    
    //修改
    void CStudentinfo::OnClickedButtonChange()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	int sel = m_list.GetCurSel();//获取当前对象
    	if (sel == LB_ERR)return;
    	auto pSt = (Student*)m_list.GetItemDataPtr(sel);
    	UpdateData(TRUE);//更新数据
    	pSt->SetID(mID);
    	pSt->SetName(std::string(mName));
    	pSt->SetSex(mSex == 0 ? male : female);
    	pSt->SetAge(mAge);
    	pSt->SetAdd(std::string(mAdd));
    	pSt->SetCpp(mCpp);
    	pSt->SetMath(mMath);
    	CString temp;
    	temp.Format(_T("%d-%s"), mID, mName);
    	m_list.DeleteString(sel);
    	m_list.InsertString(sel, temp);
    	//m_list.AddString(temp);
    	//m_list.SetItemDataPtr(m_list.GetCount() - 1, pSt);
    	m_list.SetItemDataPtr(sel, pSt);
    	mName = "";
    	mAdd = "";
    	UpdateData(false);
    
    }
    
    //确定,保存
    void CStudentinfo::OnClickedButtonOk()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	TCHAR fileName[MAX_PATH];
    	GetModuleFileName(nullptr, fileName, MAX_PATH);
    	CString file = fileName;
    	int pos = file.ReverseFind(_T('.'));
    	file = file.Left(pos + 1) + _T("txt");
    	std::ofstream ofile(file, std::ios::out);
    	if (ofile)
    	{
    		int n = m_list.GetCount();
    		ofile << n << std::endl;
    		for (int k = 0; k < n; ++k)
    		{
    			auto pSt = (Student*)m_list.GetItemDataPtr(k);
    			ofile << (*pSt);
    		}
    	}
    	ofile.close();
    
    	CDialogEx::OnOK();
    }
    
    
    //取消
    void CStudentinfo::OnClickedButtonCancle()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	CDialog::OnOK();
    }
    
    
    
    //列表事件
    void CStudentinfo::OnSelchangeList1()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	int sel = m_list.GetCurSel();//获取当前对象
    	if (sel == LB_ERR)return;
    	auto pSt = (Student*)m_list.GetItemDataPtr(sel);
    //数据读取
    	mID = pSt->GetID();
    	mName = pSt->GetName().c_str();
    	mSex = pSt->GetSex() == male ? 0 : 1;
    	mAge = pSt->GetAge();
    	mAdd = pSt->GetAdd().c_str();
    	mMath = pSt->GetMath();
    	mCpp = pSt->GetCpp();
    	UpdateData(false);
    
    }
    
    //添加额外初始化
    BOOL CStudentinfo::OnInitDialog()
    {
    	CDialogEx::OnInitDialog();
    
    	// TODO:  在此添加额外的初始化 
    
    	//读取信息
    	TCHAR fileName[MAX_PATH];
    	GetModuleFileName(nullptr, fileName, MAX_PATH);
    	CString file = fileName;
    	int pos = file.ReverseFind(_T('.'));
    	file = file.Left(pos + 1) + _T("txt");
    	std::ifstream ifile(file, std::ios::in);
    	if (ifile)
    	{
    		int n = 0;
    		ifile >> n;
    		for (int k = 0; k < n; ++k)
    		{
    			Student* pSt = new Student();
    			ifile >> (*pSt);
    			CString temp;
    			temp.Format(_T("%d-%s"),pSt->GetID(), pSt->GetName().c_str());
    			m_list.AddString(temp);
    			m_list.SetItemDataPtr(m_list.GetCount() - 1, pSt);
    		}
    	}
    
    	return TRUE;  // return TRUE unless you set the focus to a control
    				  // 异常: OCX 属性页应返回 FALSE
    }
    
    //防止内存泄漏
    void CStudentinfo::OnDestroy()
    {
    	int n = m_list.GetCount();
    	for (int k = 0; k < n; ++k)
    	
    		delete (Student*)m_list.GetItemDataPtr(k);
    
    	CDialogEx::OnDestroy();
    
    	// TODO: 在此处添加消息处理程序代码
    }
    
    //随机生成
    void CStudentinfo::OnClickedButton6()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	UpdateData(true);
    	for (int k = 0; k < m_count; ++k)
    	{
    		auto pSt = new Student();
    		pSt->SetID(190620000 + rand() % 10000);
    		TCHAR name[9];
    		for (int i = 0; i < 8; ++i)
    		{
    			name[i] = 65 + rand() % 26;
    		}
    		name[8] = _T('\0');
    		pSt->SetName(std::string(name));
    		pSt->SetSex(rand() % 2 == 0 ? male : female);
    		pSt->SetAge(17 + rand() % 4);
    		pSt->SetAdd(std::string(name));
    		pSt->SetMath(40.0f + rand() % 51);
    		pSt->SetCpp(40.0f + rand() % 54);
    		CString temp;
    		temp.Format(_T("%d: %s"), pSt->GetID(), pSt->GetName().c_str());
    		m_list.AddString(temp);
    		m_list.SetItemDataPtr(m_list.GetCount() - 1, pSt);
    
    	}
    }
    

    (3)、创建一个基于对话框的MFC应用程序
    在这里插入图片描述

    (4)、创建一个单文档的MFC应用程序,读取(3)中保存的文件中的学生成绩,分别用直方图和折线方式显示所有学生某课程的成绩分布图。

    // EX03View.h: CEX03View 类的接口
    //
    
    #pragma once
    
    
    class CEX03View : public CView
    {
    // 重写
    public:
    	virtual void OnDraw(CDC* pDC);  // 重写以绘制该视图
    // 实现
    public:
    	virtual ~CEX03View();
    // 生成的消息映射函数
    public:
    	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    };
    
    // EX03View.cpp: CEX03View 类的实现
    ///
    
    #include "pch.h"
    #include "framework.h"
    // SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
    // ATL 项目中进行定义,并允许与该项目共享文档代码。
    #include "EX03Doc.h"
    #include "EX03View.h"
    #include"CStudentinfo.h"
    #include "Student.h"
    #include <fstream>
    //
    // CEX03View
    
    // CEX03View 绘图
    ///
    
    void CEX03View::OnDraw(CDC* pDC )
    {
    	CEX03Doc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	if (!pDoc)
    		return;
    
    	// TODO: 在此处为本机数据添加绘制代码
    	int counts[][5] = { {0,0,0,0,0},{0,0,0,0,0} };
    	int mathCppMax[2] = { -1,1 };
    	for (int k = 0; k < mMaths.GetCount(); ++k)
    	{
    		//处理数学数据
    		int n = (int)mMaths[k] / 10 - 5;
    		if (n < 0) n = 0;
    		else if (n > 4) n = 4;
    		++counts[0][n];
    		if (mathCppMax[0] < counts[0][n]) 
    			mathCppMax[0] = counts[0][n];
    		//处理 C++
    		n = (int)mCpps[k] / 10 - 5;
    		if (n < 0) n = 0;
    		else if (n > 4) n = 4;
    		++counts[1][n];
    		if (mathCppMax[1] < counts[1][n]) 
    			mathCppMax[1] = counts[1][n];
    	}
    	//获取客户区矩形
    	CRect rect;
    	GetClientRect(&rect);
    	//窗口的宽度和高度
    	int w = rect.Width(), h = rect.Height() / 2;
    	//画分割线
    	pDC->MoveTo(0, h);
    	pDC->LineTo(w, h);
    	//显示标题文本
    	CRect rt(0, 0, w, 20);
    	pDC->DrawText(_T("数学成绩统计分布图"), rt, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    	rt = CRect(0, h, w, h + 20);
    	pDC->DrawText(_T("C++成绩统计分布图"), rt, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    	//设置画笔
    	CPen pen;
    	pen.CreatePen(PS_SOLID, 2, RGB(0x00, 0x00, 0xFF));
    	auto oldPen = pDC->SelectObject(&pen);
    	//设置阴影画刷
    	CBrush brush0;
    	brush0.CreateHatchBrush(HS_BDIAGONAL, RGB(0x00, 0x12, 0x7C));
    	CBrush brush1;
    	brush1.CreateHatchBrush(HS_FDIAGONAL, RGB(0x00, 0x12, 0x7C));
    	//折线段数据
    	CPoint pts[2][5];
    	//每个矩形的宽度及每个人的高度
    	int dw = 80, dh[2] = { (h - 20) / mathCppMax[0], (h - 20) / mathCppMax[1] };
    	//设置起始位置
    	int x = (w - 5 * dw) / 2;
    	//画矩形图
    	for (int k = 0; k < 5; ++k)
    	{
    		if (k % 2 == 0) pDC->SelectObject(&brush0);
    		else pDC->SelectObject(&brush1);
    		for (int i = 0; i < 2; ++i)
    		{
    			int y = (i + 1) * h - dh[i] * counts[i][k];
    			rt = CRect(x, (i + 1) * h, x + dw, y);
    			pDC->Rectangle(rt);
    			CString temp;
    			temp.Format(_T("%d人"), counts[i][k]);
    			pDC->DrawText(temp, rt, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
    			pts[i][k].x = x + dw / 2;
    			pts[i][k].y = y;
    		}
    		x += dw;
    	}
    	//画折线段
    	CPen redPen;
    	redPen.CreatePen(PS_SOLID, 3, RGB(0xFF, 0x00, 0x00));
    	pDC->SelectObject(&redPen);
    	for (int k = 0; k < 2; ++k) pDC->Polyline(pts[k], 5);
    	pDC->SelectObject(oldPen);
    
    }
    
    
    // CEX03View 消息处理程序
    void CEX03View::OnLButtonDown(UINT nFlags, CPoint point)
    {
    	// TODO: 在此添加消息处理程序代码和/或调用默认值
    
    	CView::OnLButtonDown(nFlags, point);
    	
    		
    		CStudentinfo dlg;
    		if (dlg.DoModal() == IDOK)
    		{
    			//读取信息
    			TCHAR fileName[MAX_PATH];
    			GetModuleFileName(nullptr, fileName, MAX_PATH);
    			CString file = fileName;
    			int pos = file.ReverseFind(_T('.'));
    			file = file.Left(pos + 1) + _T("txt");
    			std::ifstream ifile(file, std::ios::in);
    			mMaths.RemoveAll();
    			mCpps.RemoveAll();
    			if (ifile)
    			{
    				int n = 0;
    				ifile >> n;
    				for (int k = 0; k < n; ++k)
    				{
    					Student* pSt = new Student();
    					ifile >> (*pSt);
    					mMaths.Add(pSt->GetMath());
    					mCpps.Add(pSt->GetCpp());
    				}
    			}
    		}
    }
    
    
    
    

    四、程序运行时的效果图

    在这里插入图片描述

    在这里插入图片描述

    五、实验结果分析,实验收获和体会。
    1、实验结果分析:
    (1)新建了Students.h头文件存储学生类
    (2)将单文档与管理系统关联起来,使得在管理系统界面能够实现绘图功能。
    (3)绘制了单文档的按钮,以及增加相应命令。
    2、实验收获和体会:
    (1)熟练使用UpdateDate函数进行界面数据更改与读入。
    (2)对如listbox等控件的使用有了深层次的理解
    (3)对listbox的各项函数、、sort函数等的使用的更加得心应手。
    (4)领悟了char与CString在调用时的区别,以及掌握了将浮点型转化为字符型的方法。
    (5)能够更加熟练的运用文件输入输出流对数据进行输入输出。
    (7)对单文档的绘图功能有了一定的了解。

    自我评分:91

    展开全文
  • 我校尽管部分学院或系已开出学生成绩管理系统,但开发的系统不具有通用性,所以我想借本次毕业设计之际,开发一个不仅适用本校各系而且适用于其它各校的通用高校学生成绩管理系统. 采用软件工程的指导方法,选用C/S...
  • 项目报告 1 设计题目 学生成绩管理系统 2 设计目的 1. 巩固 C#语言编程知识提高面向对象编程能力提高分析与解决实际问题的 能力 2. 掌握循环子程序等结构的程序设计方法 3. 掌握数组结构体等数据结构的设计方法 4. ...
  • 教务管理系统问题描述: 教学管理系统包括选课管理、成绩管理的功能,用于处理每学期的课程选修注册和学生成绩管理。它的直接用户有学生、教师和教务管理员。 选课管理,负责新学期的课程选修注册工作,主要功能...

    教务管理系统


    问题描述:

         教学管理系统包括选课管理、成绩管理的功能,用于处理每学期的课程选修注册和学生的成绩管理。它的直接用户有学生、教师和教务管理员。

     

    选课管理,负责新学期的课程选修注册工作,主要功能有:

    1. 生成学期选课表:教务管理员按专业生成以及维护本学期的选课表,并在网上发布,以供学生选课之用。

    2. 选课:学生在学期开始的前两周开始试听和选课。在这期间内学生可在网上随时更改所选的课程。在选课期间,学生可查询课程介绍,任课老师情况以及以往自己的选课情况和成绩。学生只能选择自己的课程。每门课程有人数限制。

    3. 课表调整:在两周后,若选一门课的学生人数少于下限,则取消该门课。在第三周内,学生可选其他的课程。

    4. 公布名单:自第四周起,教务管理员生成开课汇总表,并在网上发布,同时把相关信息发送到成绩管理部。

    5. 查询:自第四周起,学生可查询自己所选的课程信息

     

    成绩管理,负责学生成绩管理,主要功能有:

    1. 成绩录入:教师录入学生的考试成绩(包括录入出错的修改,即维护),形成成绩单。

    2. 成绩统计与发布:教师按课程号和班级统计成绩并发布所生成的报表。

    3. 成绩查询:学生按学号查询考试成绩。

     

     词汇表

    1.      教务管理员:可生成和维护、调整选课表,最终可生成并发布开课汇总表

    2.      学生:可参与选课、查询课程介绍及任课老师情况、查询以往自己的选课情况和成绩、查询本学期成绩

    3.      教师:可录入统计学生成绩

    4.      课程:具有课程名称、课程号等课程信息

    5.      选课表:由课程经过教务管理员按专业生成,可供学生选课

    6.      选课清单:记录学生学号及其选取的课程号

    7.      开课汇总表:记录所有学生的选课情况及其选取课程的信息

    8.      成绩:记录某学生学号与选取课程的成绩

    9.      成绩表:对所有学生的成绩进行统计而成

     


    展开全文
  • 广州大学MFC实验报告——学生成绩管理系统

    千次阅读 多人点赞 2019-06-08 10:33:38
    并通过本实验,掌握如何运用面向对象技术对具体的应用系统进行分析设计。 二、基本知识点 1、类和对象的定义、对象的初始化和使用 2、面向对象的继承机制 3、虚函数与多态性 4、运算符重载 5、文件的使用 6、算法...
  • 教务管理系统 设计类图 :1.选课管理:2.成绩管理: 类图文档1.选课管理:(1)教务管理员类图综述:用于记录教务管理员的信息与功能类描述:l 属性:姓名、工作证号l 操作:生成学期选课表、维护选课表、课表...
  • 教务管理系统用况图: 详细描述:用况:成绩录入1.1简要说明:教师录入学生的考试成绩(包括录入出错的修改,即维护),形成成绩单。1.2参与者:选课管理、教师1.3包含:无1.4扩展点:无1.5继承:无1.6前置条件:...
  • 教务管理系统 选课管理:成绩管理: 类图文档1.选课管理:(1)教务管理员类图综述:用于记录教务管理员的信息与功能类描述:l 属性:姓名、工作证号l 操作:生成学期选课表、维护选课表、课表调整、生成开课...
  • 曲 為 viZk# 第一章需求分析 课程设计性质和目的? 输入输出的形式 程序的... 第一章需求分析 1课程设计性质和目的 该课程设计的主要任务是运用在面向对象程序设计课程中学到的理论知识来指导实践使 学生了解面向对象
  • 成绩管理平台设计分析 小组成员:李滨锶、张清庆、陈涵、吴钢 采用面向对象方法设计成绩管理平台: 由需求分析可得系统需求: (1)管理员。实现管理员用户的添加,修改和删除,以及对教师添加、教师修改、教师...
  • 3 学生成绩管理系统概要设计 12 3.1系统设计图例说明 13 3.2 系统设计业务目标(业务逻辑层) 13 3.2.1系统设计目标概述 13 3.2.2 用户(角色) 13 3.2.3 假定 14 3.3 技术总体目标 15 3.3.1系统技术性能要求 15 3.3.2 ...
  • 上述的各种理论,对我们设计和开发学生成绩管理系统提供了重要的理论基础,同时也为我们如何进行具体的设计和开发工作,提供了必要的思路和方法。 二、系统的需求分析 2.1项目开发的背景分析 当今时代是...
  • Java程序设计课程组 项目学生成绩管理系统面向对象实现 任务学生成绩信息的保存与读取 Java程序设计 项目二 学生成绩管理系统面向对象实现 Java程序设计项目式 前面无论是用结构化方法还是面向对象方法来实现学生...
  • 其次, 在教师给出了学生成绩之后,系统会根据成绩来判断该生是否通过了考试,如果该成绩大于或等于60,则在该生的学分上加上该课程的学分。 管理员在本系统中有着最高的权力,包括新增,更改,删除学生,教师,...

空空如也

空空如也

1 2 3 4 5
收藏数 84
精华内容 33
关键字:

学生成绩管理系统面向对象设计分析