对《一个简单的学生成绩管理系统》优化的一点意见

现在我们开始讨论优化的问题,在讨论之前,建议先看看《一个简单的学生成绩管理系统》这篇文章。我看过《一个简单的学生成绩管理系统》后,觉他其中的show()这个函数用得不是很好。

show()函数的代码如下:

show()
{
    m_Set.MoveFirst();
    do
    {
     CString s;
     s.Format("%d",m_Set.m_column1);
     m_ListCtrlx.InsertItem(i,s,0);
     m_ListCtrlx.SetItemText(i,1,m_Set.m_column2);
     s.Format("%.1f",m_Set.m_column3);
     m_ListCtrlx.SetItemText(i,2,s);
     s.Format("%.1f",m_Set.m_column4);
     m_ListCtrlx.SetItemText(i,3,s);
     s.Format("%.1f",m_Set.m_column5);
     m_ListCtrlx.SetItemText(i,4,s);
     s.Format("%.1f",m_Set.m_column6);
     m_ListCtrlx.SetItemText(i,5,s);
     s.Format("%.1f",m_Set.m_column7);
     m_ListCtrlx.SetItemText(i,6,s);
     s.Format("%.1f",m_Set.m_column8);
     m_ListCtrlx.SetItemText(i,7,s);
     s.Format("%.2f",m_Set.m_column9);
     m_ListCtrlx.SetItemText(i,8,s);
     i++;
     m_Set.MoveNext();
    }while(!m_Set.IsEOF());
    m_Set.Close();
}
大家可以看出来,这个函数的作用是用来显示和列表控件绑定的数据库表的内容,并且这个函数在初始化的时候就调用了,这一点我觉得没有问题,问题是我觉得他在使用添加记录功能的时候会再次调用这个show()函数,我觉得这样做在效率上面会有很大的损失,为什么这么说呢?因为,每次调用show()函数以前都要清空列表中的内容,然后再把数据库表的内容又重新显示一次,这样我想在效率上面是有影响的。那我们是否可以并不要每次添加记录的时候都要show()函数呢? 有这个想法就按这个想法做下去,我仔细看过后有了新的想法,我觉得可以只要每次都显示添加的记录那不就可以了吗?而且还可以解决调用show()函数带来了抖动.

下面我就具体说说我的解决办法,其实,很简单,我们只要在添加记录的时候不要调用show()函数就可以了,而用代码直接来显示就可以了。

void CBaDialog::OnAdd()
{
  Selec=TRUE;
  CAddialog dlg;
  if( dlg.DoModal()==IDOK)
  {
  if(this->Select()=="一班")
  {
    if(dlg.m_nxue>=200)
    {
    AfxMessageBox("一班学号在1—200之间");
    return;
    }
  }
  else
  {
    if(dlg.m_nxue<200||dlg.m_nxue>=400)
    {
    AfxMessageBox("二班学号在200—400之间");
    return;
    }
  }
  m_Set.AddNew();
  m_nRecordCount+=1;
  m_Set.m_column1=dlg.m_nxue;
  m_Set.m_column2=dlg.m_strName;
  m_Set.m_column3=dlg.m_fmaths;
  m_Set.m_column4=dlg.m_fphysical;
  m_Set.m_column5=dlg.m_fchemistry;
  m_Set.m_column6=dlg.m_fenglish;
  m_Set.m_column7=dlg.m_fpolitic;
  m_Set.m_column8=dlg.m_fmaths+dlg.m_fphysical+dlg.m_fchemistry+dlg.m_fenglish+dlg.m_fpolitic;
  m_Set.m_column9=(float)(m_Set.m_column8/5);
  this->Equal();
  m_Set.Update();//Update()一定放在Equal()后
  m_Set.Requery();
  this->Xuan();
  }
}
我们可以不要调Xuan()这个函数,因为这个函数就是用来调用show()函数的,但是Xuan()函数中还调用了一个和show()功能一样的diaplay()函数,请读者注意,好了,我们可以添加如下代码

CString s;
s.Format("%d",m_dlg.m1);
m_ListCtrlx.InsertItem(i,s,0);
m_ListCtrlx.SetItemText(i,1,m_dlg.m2);
s.Format("%.1f",m_dlg.m3);
m_ListCtrlx.SetItemText(i,2,s);
s.Format("%.1f",m_dlg.m4);
m_ListCtrlx.SetItemText(i,3,s);
s.Format("%.1f",m_dlg.m5);
m_ListCtrlx.SetItemText(i,4,s);
s.Format("%.1f",m_dlg.m6);
m_ListCtrlx.SetItemText(i,5,s);
s.Format("%.1f",m_dlg.m7);
m_ListCtrlx.SetItemText(i,6,s);
s.Format("%.1f",m_dlg.m8);
m_ListCtrlx.SetItemText(i,7,s);
s.Format("%.2f",m_dlg.m9);
m_ListCtrlx.SetItemText(i,8,s);

细心的人一定发现了这就是show()函数中的部分代码,这确实是的,只是我将他对话框中的内容直接用列表显示出来了,其中 m_dlg.m1~m9分别是对话框中编辑框中的内容,还有一点就是要将他定义的变量 i 变成类的成员,这样就可以获得插入的准确的位置了。这样修改后的问题就是代码会增加不少,如何取舍就看各位的需要了。

这是我对这个系统的一点不成熟的意见,希望和各位高手交流看法。更希望和刘永超联系,一起解决问题。

时间: 2024-09-17 04:11:29

对《一个简单的学生成绩管理系统》优化的一点意见的相关文章

急求一个简单的学生成绩管理系统,

问题描述 需要一个学生成绩管理系统,只要有简单的增删查改功能就好了,用c#语言编写,sqlserver数据库 解决方案 解决方案二:有人看吗?急切需求....解决方案三:http://download.csdn.net/detail/qifeifei/2269160,你下载解决方案四:要收费的.解决方案五: 解决方案六:任给一个数据库名.数据表名.主键名,要求自动产生完整的对数据库表增删改查交互界面操作程序.解决方案七:这题好像真的很难呢...帮你顶一下...解决方案八:给钱么,要不我帮你做一个

一个简单的学生成绩管理软件(ODBC开发)

前面我写过一篇<一个完善的ODBC数据库程序>,大家可能看到过,有鼓励,也有批评,但是所有这一切只有一个目的就是学好VC.我学习VC已有接近一年的时间,水平菜鸟级,而VC知识库给大家提供了一个交流的地方,大家相互学习,共同提高.感谢VC知识库各版版主!!! 在<一个完善的ODBC数据库程序>我提到完善它的很多方面,做一个小软件.我按这个思路做下去,实现了一些基本功能.程序采用对话框,界面按属性页的方式分为两部分: "班级成绩"和"年级成绩".

该程序如何编写-学生成绩管理系统对于c++的初学者怎么写

问题描述 学生成绩管理系统对于c++的初学者怎么写 学生成绩管理系统(★★) 问题描述:主要功能是对批量学生的各门成绩进行录入.修改.查询.统计等,要求方便快速.记录学生的学号.姓名.班级.性别.联系电话以及课程和成绩:可以对学生的成绩按学号和姓名进行查寻:输出显示学生成绩:并实现排序.统计及格率和优秀率功能. 编程任务: (1)界面基本要求: 学生成绩管理系统 ** F1 --帮助 ** ** F2 --输入数据并存入文件 ** ** F3 --根据学号查询成绩 ** ** F4 --根据姓名

Java学生成绩管理系统源代码

源代码 import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.Pr

c++ 编程问题-学生成绩管理系统编程问题

问题描述 学生成绩管理系统编程问题 学生成绩管理系统设计说明与要求:学生成绩管理是高等学校教务管理的重要组成部分,其内容较多,要求设计的管理系统能够完成以下八种功能: 1) 登记学生成绩(学号.姓名.英语.数学.C++语言-): 2) 修改学生成绩: 3) 打印一个班级学生的单科成绩: 4) 求出每个学生一学期中各科的平均成绩: 5) 打印某一课程成绩处于指定分数段内的学生名单. 6) 成绩统计(各科平均成绩.各科成绩"优秀"."良好"."中等"

c++-学生成绩管理系统课程设计中的问题

问题描述 学生成绩管理系统课程设计中的问题 如上图所示,只剩下两类bug, 不知道是哪方面的问题 PS我在类的后面都加了分好:,所以"PCH......."的那个bug不是分号的问题 解决方案 基本是语法错误,错误的引起不一定是你看到的,也许是因为其他错误导致的提示,比如括号匹配错误 解决方案二: 你的程序在哪里? 你的头文件有没有问题,比如漏分号,特别是class struct之类的. 包含了以后问题比较隐蔽. 解决方案三: 全是语法错误. 虽然报了这么多, 但是可能就只是一个地方的

学生管理系统-用链表实现学生成绩管理系统的问题

问题描述 用链表实现学生成绩管理系统的问题 今天试图用链表写一个学生成绩管理系统,可是如果要实现既可以按照学号排序又可以按照成绩排序的话,需要对链表进行排序,然后我看网上说对链表排序时一般都很低效,那想问问各位,这样的话用链表划不划算呢,还是干脆用顺序表? 解决方案 链表与顺序表的选择在于你看中哪方面 用顺序表的话如果不知道存储数据的多少,初始分配的内存无法判断,初始分配太多浪费内存,而太少的话又不行.另外,顺序表的定位比较方便. 链表可以动态分配内存,比较方便.链表排序的话可以使用插入排序,冒

Jbuilder新手高分求助——学生成绩管理系统

问题描述 就要交作业了,谁能告诉我哪里有学生成绩管理系统源码?不连数据库的,实现简单的界面(带菜单),能实现录入.查询个人信息.查询班级信息.删除.添加等功能的,我做了两个星期了都没做出来,要是有源码,给我发个:zhudongmei1987@126.com. 解决方案 解决方案二:该回复于2009-06-22 09:22:47被版主删除

学生成绩管理系统【c】

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define MAX 2000struct Student{int no;       /*学号*/char name[8]; /*姓名*/char sex;      /*性别*/char phone[8];/*联系电话*/int mark[4];   /*语文.数学.外语.考试平均成绩*/    };int tot