第一篇:学生管理系统 设计总结
概述
随着计算机技术的发展,特别是计算机网络技术与数据库技术的发展,使用人们的生活与工作方式发生了很大的改变。现代化管理高效、简洁,数据库始于20世纪60年代,经过40多年的发展,现在已经形成了理论体系,成为计算机软件的一个重要分支。数据库技术体现了当代先进的数据管理方法,使计算机的应用真正渗透到国民经济各个部门,在数据处理领域发挥着越来越大的作用。
而互联网技术的出现,更是进一步丰富的人类生活,数字化生存已经一步步走进我们的生活与工作。互联网技术与数据库技术的结合为计算的在人类生活中的应用带来了巨大的影响。产业信息化,管理现代化,科学化已经成为行业发展的重要课题,这不仅是企业提高自身竞争力,甚至是国家提高综合国力,走向国民富强的重要手段。
我国人口众多,学生数目庞大,要进行信息化管理就需要建立合适的信息管理系统,在实现基础的管理功能的同时做好数据的整理、安全功能。通过使用信息管理系统,可以极大提高工作效率。
背景分析
学生信息是学校管理中一项繁琐的工作。管理人员需要建立学生的学籍,汇总每学期没有拿到规定学分的学生,及这些学生的详细情况;学生完成一门课程的学习后,教师学要录入学生的考试成绩,计算平均成绩,汇总各分数段的人数;学生需要查询已结业的各门课程的成绩;班主任需要查询本班学生的学习情况,包括每个课程的平均成绩和每个学生的考试通过情况。为此,设计一套实用的学生信息管理系统就可以大大简化管理人员、班主任和任课教师的工作,方便学生查询自己的学习情况。此外还需要具备良好的扩充能力,以应付未来可能添加的新需求。
在账户管理方面需要分别处理老师和学生的账户,合理分配权限,做好系统安全。
总结
学生管理系统是一个典型的数据库管理系统应用。在制作过程中遇到的困难并不太多,主要是规划文档期间经验不足的问题,需要改很多遍。
接触了软件工程这门课程,我认为软件工程和我们平时上专业课相对来讲一个是宏观一个是微观。平时写软件是一个微观的,讲的是如何来实现各个功能的细微细节。而软件工程就相对来讲是一个宏观调控,从整体方面来分析系统的结构,可行性等等。
写软件我们是照着一定的思想一定思路去写下去,有人说其实写软件并不难,只要给你一个思路你就可以不断地往下写。我觉得确是如此,其实我们平时写软件我觉得并不是很难的事,平时即使遇到处理不了的技术问题,哪里编译出现错误等等其实都可以在网上提问。技术问题一般我们都可以在网上得到答案,但软件的思想不是我们看了一下就能真正理解的。
不论采用哪种方法来开发软件,分析的过程都是提取系统需求的过程。分析工作主要包括3项内容,这就是理解,表达和验证。首先,系统分析员通过用户及领域专家的充分交流,力求完全理解用户需求和该应用邻域中的关键性的背景知识,并用某种无二义性的方式把这种理解表达成文档资料。分析过程得出的最重要的文档资料是软件需求规格说明(在面向对象分析中,主要由对象模型,动态模型和功能模型组成)。
由于问题复杂,而且人与人之间的交流带有随意性和非形式化的特点,上述理解过程通常不能一次就达到理解的效果。因此,还必须进一步验证软件需求规格说明的正确性,完整性和有效性,如果发现了问题则进行修正。显然,需求分析过程是系统分析员与用户及领域
专家反复交流和多次修正的过程。也就是说,理解和验证的过程通常交替进行,反复迭代,而且往往需要利用原型系统作为辅助工具。
由此可见,软件工程在构筑、编写文档方面的工作实际上并不比编写代码的工作量要少,相反,有时候编写代码尤其是初步编写代码的工作量在整个工程中只占了很少的一部分工作。我们需要改变传统的编写软件的观点,从软件工程的角度来看待问题,这也是我学习软件工程这门课最大的收获。
第二篇:学生管理系统个人总结
学生管理系统个人总结
概述
随着计算机技术的发展,特别是计算机网络技术与数据库技术的发展,使用人们的生活与工作方式发生了很大的改变。现代化管理高效、简洁,数据库始于20世纪60年代,经过40多年的发展,现在已经形成了理论体系,成为计算机软件的一个重要分支。数据库技术体现了当代先进的数据管理方法,使计算机的应用真正渗透到国民经济各个部门,在数据处理领域发挥着越来越大的作用。
而互联网技术的出现,更是进一步丰富的人类生活,数字化生存已经一步步走进我们的生活与工作。互联网技术
与数据库技术的结合为计算的在人类生活中的应用带来了巨大的影响。产业信息化,管理现代化,科学化已经成为行业发展的重要课题,这不仅是企业提高自身竞争力,甚至是国家提高综合国力,走向国民富强的重要手段。
我国人口众多,学生数目庞大,要进行信息化管理就需要建立合适的信息管理系统,在实现基础的管理功能的同时做好数据的整理、安全功能。通过使用信息管理系统,可以极大提高工作效率。
背景分析
学生信息是学校管理中一项繁琐的工作。管理人员需要建立学生的学籍,汇总每学期没有拿到规定学分的学生,及这些学生的详细情况;学生完成一门课程的学习后,教师学要录入学生的考试成绩,计算平均成绩,汇总各分数段的人数;学生需要查询已结业的各门课程的成绩;班主任需要查询本班学生的学习情况,包括每个课程的平均成绩和
每个学生的考试通过情况。为此,设计一套实用的学生信息管理系统就可以大大简化管理人员、班主任和任课教师的工作,方便学生查询自己的学习情况。此外还需要具备良好的扩充能力,以应付未来可能添加的新需求。
在账户管理方面需要分别处理老师和学生的账户,合理分配权限,做好系统安全。
总结
学生管理系统是一个典型的数据库管理系统应用。在制作过程中遇到的困难并不太多,主要是规划文档期间经验不足的问题,需要改很多遍。
接触了软件工程这门课程,我认为软件工程和我们平时上专业课相对来讲一个是宏观一个是微观。平时写软件是一个微观的,讲的是如何来实现各个功能的细微细节。而软件工程就相对来讲是一个宏观调控,从整体方面来分析系统的结构,可行性等等。
写软件我们是照着一定的思想一
定思路去写下去,有人说其实写软件并不难,只要给你一个思路你就可以不断地往下写。我觉得确是如此,其实我们平时写软件我觉得并不是很难的事,平时即使遇到处理不了的技术问题,哪里编译出现错误等等其实都可以在网上提问。技术问题一般我们都可以在网上得到答案,但软件的思想不是我们看了一下就能真正理解的。
不论采用哪种方法来开发软件,分析的过程都是提取系统需求的过程。分析工作主要包括3项内容,这就是理解,表达和验证。首先,系统分析员通过用户及领域专家的充分交流,力求完全理解用户需求和该应用邻域中的关键性的背景知识,并用某种无二义性的方式把这种理解表达成文档资料。分析过程得出的最重要的文档资料是软件需求规格说明。
由于问题复杂,而且人与人之间的交流带有随意性和非形式化的特点,上述理解过程通常不能一次就达到理解的
效果。因此,还必须进一步验证软件需求规格说明的正确性,完整性和有效性,如果发现了问题则进行修正。显然,需求分析过程是系统分析员与用户及领域
专家反复交流和多次修正的过程。也就是说,理解和验证的过程通常交替进行,反复迭代,而且往往需要利用原型系统作为辅助工具。
由此可见,软件工程在构筑、编写文档方面的工作实际上并不比编写代码的工作量要少,相反,有时候编写代码尤其是初步编写代码的工作量在整个工程中只占了很少的一部分工作。我们需要改变传统的编写软件的观点,从软件工程的角度来看待问题,这也是我学习软件工程这门课最大的收获。
个人总结
--------学生信息管理系统小结经过大家的努力,学生管理系统终于做完了,经过这次实习系统设计,自己总结了这个学生信息管理系统的一些问题,不过收获还是颇为丰富的,再有理论知
识上结合实践,使我学到了更多。
首先,更进一步的了解了数据库的基本操作,在这之前,数据库的学习仅仅刚开了个头,我们只是在了解一些概念性的东西。在做这个系统之前,我连基本的连接数据库,配文件dsn,数据库查询语句等这些东西都不熟练。现在对于数据库的增删改查操作比较熟练了,对于初学者来说,比较头疼的就是对于单引号的处理。我的建议是如果不理解先把按照课本上正确的语句敲,然后在多次进行数据库的链接,增删改查操作中不断总结规律。这次设计的学生信息管理系统,全在自己所掌握的知识下,进行编程设计,完全体现了自己在数据库语言和程序设计课程学习状况,充分地为自己以后更深入了数据库语言奠下深厚的基础。
纵观此学生信息管理系统的整体概况,目前,自我认为设计良好,相关功能都能够实现,功能强大,条理清晰,界面可观性比较好。并且特色在于,所
设计的表单都在一个表单系统桌面中运行,比较符合系统的观念。
在系统设计的过程中,我从中发现,学习数据库要细心和有耐性,并且要不断地从外界学习更多的技术才能设计出一套完美的系统
刘小慧2014年7月15日
学生管理系统开发总结报告
项目承担部门:07级汉本2本
本组成员:田维祝胡鹏跃周延强马勇 王飞霞
撰写人:田维祝
完成日期:2014年12月22日
本文档使用部门:项目组主管领导客户维护人员用户 评审人:
评审日期:
实际开发结果:
功能基本实现。
1、软件产品描述
此项目主要是有关于学生的成绩进行管理的应用软件,他的主要适用对象是老师和学生,能够减少老师的工作
时间和压力同时能够及时的让学生对自己的成绩等私人信息及时了解!
软件模块清单
文档清单
进度
工作评价
对技术评价:
采用了以前没有使用过的技术:如jsp ,mvc架构等 对质量评价:
由于时间较短所以很多东西没有完善,产品少有瑕疵!技术总结积累:
通过这次实例我们把过去所学的java只灵活运用到了项目中,同时涉及到了数据库的一些技术,网页的设计美化,jsp网页设计,让我们受益匪浅。同时小组内技术交流大家学会了很多过去没有怎么使用的技术或者软件,如ps,eclipse,jdbc数据库连接等等。经验教训:
通过这次实例开发,增进了团队协作能力,增强了我们的编程思
想,锻炼了我们的沟通能力。重要 的是我们学习了很多只是,加深了一些书本知识的理解,体验了软件的开发流程。
我们的缺陷在于,由于是初次合作所以彼此分工不明确。合作不够密切!
最深体会:学无止境,多动手多思考!
asp.net课程设计
-----成绩管理系统
韩
旭
强
计算机系应用技术1001班 2014年六月二十七日
学生成绩管理系统总结
成员介绍
组长:韩旭强 组员:岳瑞杰
牛津
成员分工合作
岳瑞杰
韩旭强 牛津 功能实现
c#课程设计
实
训
总
结
姓名: 班级:
学号:指导教师:
一学期很快就过去了,在这一学期中,我通过对visual c# 2014程序设计的学习获得了很多知识。在本次c#课程设计中,我学习到了许多书本上没有的知识,是我了解到程序开发的艰难。虽然这次实训中有许多的不足,但起码是了解了图书管理系统开发的部分过程。这次课程设计给我提供了一个很好的机会,在设计中发现,有很多已经学过的东西我们没有理解到位不能灵活运用于实际,不能很好的用来解决问题,这就需要自己不断的大量的实践,通过不断的自学,不断地发现问题,思考问题,进而解决问题。在这个过程中我们将深刻理解所学知识,同时也可以学到不少很实用的东西。
一 实训选题
图书管理系统的设计
二 实训设计作品内容
这次的课程设计,我们需要做一个图书管理系统的登录界面及主界面。
三 设计中遇到的问题及解决方案
这次的课程设计,我们需要做一个图书管理系统的登录界面及主界面。在制作过程中,我亲身体验了一回系统的设计开发过程,很多东西书上写的很清楚,貌似看着也很简单,思路非常清晰。但真正需要自己想办法去设计一个系统的时候才发现其中的难度。本次实训中,在做到各个页面之间的跳转中,不知如何制作,在我像同学及老师的不断请教中终于学会了。
四 作品的优点及不足
通过本次课程设计,我感觉我的作品的优点在于,各页面之间的背景设计还是不错的,不足在于设计页面过于简单,有的设计不是很合理。希望以后能改正,更加努力学习。
五 对实训的意见及建议
通过这次课程设计的完成,使我对自己所学知识进一步的了解,同时通过实践发现自己的不足,对知识的掌握及运用存在诸多的不完善。本系统也存在着很多不足,如系统十分简单,实现功能也不够完善。所以在今后的学习中我会继续努力,完善自我。在本次的实训中我感觉实训的时间有点短,有些设计是需要时间来思考的,但两天的时间过于短,由许多的功能无法实现及更改,希望学校加长对实训时间的延长。还有就是实训环境有点简陋,实训室没办法上网,有些东西不会而无法及时的上网查询。希望领导能够改善。对于建议,希望领导能给实训室装上风扇,最好能装上空调。
第三篇:学生管理系统
import java.awt.*;import java.awt.event.*;import java.sql.*;import java.util.*;import javax.swing.*;
public class Xsglxt extends JFrame implements ActionListener { JPanel mb1,mb2;JLabel bq1;JTextField wbk1;JButton an1,an2,an3,an4;JTable bg1;
JScrollPane gd1;Xsxx xsxx2;
public static void main(String[] args)
{
Xsglxt xs=new Xsglxt();}
public Xsglxt(){
mb1=new JPanel();
bq1=new JLabel(“请输入姓名”);
wbk1=new JTextField(10);
an1=new JButton(“查询”);
an1.addActionListener(this);
an1.setActionCommand(“chaxun”);
mb1.add(bq1);mb1.add(wbk1);mb1.add(an1);
mb2=new JPanel();
an2=new JButton(“添加”);
an2.addActionListener(this);
an2.setActionCommand(“tianjia”);
an3=new JButton(“修改”);
an3.addActionListener(this);
an3.setActionCommand(“xiugai”);
an4=new JButton(“删除”);
an4.addActionListener(this);
an4.setActionCommand(“shanchu”);
mb2.add(an2);mb2.add(an3);mb2.add(an4);
xsxx2=new Xsxx();
bg1=new JTable(xsxx2);gd1=new JScrollPane(bg1);
this.add(gd1);this.add(mb1,“North”);this.add(mb2,“South”);
this.setTitle(“学生管理系统”);this.setSize(500,400);this.setLocation(201,181);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);
} public void actionPerformed(ActionEvent e){ if(e.getActionCommand().equals(“chaxun”)){
String xingming=this.wbk1.getText().trim();
String sql=“select * from xuesheng where xingming='”+xingming+“'”;
xsxx2=new Xsxx(sql);
bg1.setModel(xsxx2);} else if(e.getActionCommand().equals(“tianjia”)){
Tianjia tj=new Tianjia(this,“添加学生信息”,true);
xsxx2=new Xsxx();
bg1.setModel(xsxx2);
} else if(e.getActionCommand().equals(“xiugai”)){
int ii=this.bg1.getSelectedRow();
if(ii==-1)
{
JOptionPane.showMessageDialog(this,“请选中要修改的行”);
return;
}
new Xiugai(this,“修改学生信息”,true,xsxx2,ii);
xsxx2=new Xsxx();
bg1.setModel(xsxx2);}
else if(e.getActionCommand().equals(“shanchu”))
{
int ii=this.bg1.getSelectedRow();
if(ii==-1)
{
JOptionPane.showMessageDialog(this,“请选中要删除的行”);
return;
}
String st=(String)xsxx2.getValueAt(ii,0);
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs=null;
Statement sm=null;
try {
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
ct=DriverManager.getConnection(“jdbc:odbc:sql server”,“sa”,“ydyd4488321”);
ps=ct.prepareStatement(“delete from xuesheng where xuehao=?”);
ps.setString(1,st);
ps.executeUpdate();
} catch(Exception e2){}
finally
{
try {
if(rs!=null)
{
rs.close();
}
if(ps!=null)
{
ps.close();
}
if(ct!=null)
{
ct.close();
}
} catch(Exception e3){}
}
xsxx2=new Xsxx();
bg1.setModel(xsxx2);
} } }
第四篇:oracle学生成绩管理系统设计
阶段1.1成绩管理系统实体关系设计
一、实验目的和要求
(1)熟练掌握实体关系设计的方法。(2)通过需求分析结果,掌握E-R图。
二、实验内容和原理
实体关系设计是在需求分析的一个环节过程,在这一过程中产生E-R图,该图由实体、属性和联系三个要素构成。逻辑结构设计的任务就是把概念设计阶段建立的基本E-R图按照选定的系统软件支持的数据模型,转换成相应的逻辑模型。这种转换要符合关系数据模型的原则。
E-R图向关系模型转换时要解决如何将实体和实体间的联系转换为关系,并确定这些关系的属性和码,这种转换一般按下面的原则进行。
(1)一个实体转换为一个关系,实体的属性就是关系的属性,实体的码就是关系的码。
(2)一个联系也转换为一个关系,联系的属性及联系所连接的实体的码都转换为关系的属性,但关系的码会根据联系的类型变化。
三、主要仪器设备
计算机一台、Powerdesinger运行环境
四、操作方法与实验步骤
在成绩管理系统中,需要管理学生、课程和成绩,以及它们之间的联系。因此在该系统的E-R图中,实体分别为学生、老师、课程。为了便于掌握,学生实体的属性分别有学号、姓名、性别;课程实体的属性有课程编号、课程名称、学期、课程学分;教师实体的属性有教师编号、姓名、性别。学生实体与课程实体有选课关系,而且一个学生可以选择多门课程,一门课程也可以被多个学生选择,因此学生和课程之间的联系是m:n联系。教师实体与课程实体有教授关系,一名教师可以教多门课程,一门课程也可以被多个教师教授,因此教师和课程之间的联系是m:n联系。学生在选课后会产生成绩,教师授课后会产生授课地点及授课学期。根据上述分析,绘出的E-R图如下图所示。
阶段1.2 成绩管理系统结构设计
一、实验目的和要求
1.了解数据库中列的属性以及各个属性的含义。2.掌握为不同的列选择不同的属性及范围。
二、实验内容和原理
在管理信息系统中,物理结构设计主要是指如何将通过逻辑结构设计所得的系统逻辑结构型转换为物理模型,并明确地指出系统的物理存储结构。本实验主要是利用CASE工具集PowerDesigner对成绩管理系统进行物理结构的设计。
三、主要仪器设备
计算机一台、Powerdesinger 运行环境、Oracle运行环境
四、操作方法与实验步骤
在物理结构设计中需要考虑为每列设计合适的数据类型。成绩管理系统中,学生(学号、姓名、性别)关系里,学号采用int来表示就可以了,而姓名设置成varchar2(20),性别只需要设置为char(2)。因为性别不是男就是女,因此只会占用两个字节。所以最终我们可以将其物理表结构设置为:t_student(stuid int,stuname varchar2(20),sex char(2)。依照上述,课程的物理表结构为:t_course(couid int,couname varchar2(20),term char(2),credit number(3,1))。教师的物理存储表结构为:t_teacher(teaid int,teaname varchar2(20),sex char(2))。选课的物理表结构为:t_selcour(sid int,cid int,score number.(4,2))。教课的物理表结构为:t_teacour(tid int,cid int,teaaddr varchar2(30),term char(2))。
(1)通过手动编写SQL语句方式建立数据库后台
上述创建了代表学生实体的表t_student,其中stuid设置为主键,唯一标识一个学生。
表t_course用来代表课程实体,其中采用couid来标识一门课程。当课程名称的长度大于20个字符时,varchar2可以自动扩展。
物理实体在物理结构中用t_teacher表来表示,teaid用来唯一标识一位教师,因此其不能空
选课表t_selcour中学生编号参考t_student表中的stuid,此时sid为外键,课程编号cid也作为外键参考t_course中的couid(2)通过PowerDesigner建立数据库后台。
第四步:到此,系统的概念模型就全部设计好了。接下来单击菜单“工具”→“生成物理属性模型”选项,就会弹出“物理数据模型生成选项”对话框,如下图:
在“常规”选项卡中选择“生成新的物理模型”单选钮,并选择DBMS为“OPACLE Version 10g”,“名称”文本“MyPhysicalDataModel”,并单击“确认”按钮,在弹出得到路径选择对话框中输入你想要放置生成的物理数据模型文件的位置,系统就会自动在指定的路径下生成一个名为“MyPhysicalDataModal.pdm”的文件,并生成系统的物理模型,如下图
CONGC
从菜单中选择 Database---Generate Database选项。PowerDesigner将会在指定的路径下生成一个名字为*.sql 的文本文件。里面存放可供Oracle 执行的用来建立数据库实体的SQL语句。
阶段1.3 成绩管路系统存储过程设计
一、实验目的和要求
(1)了解存储过程的设计目的以及方法。(2)掌握存储过程的创建。
二、实验内容和原理
存储过程是在数据中定义的程序块,它存放在数据库服务端数据字典里。采用存储过程可以提高过程代码程序的执行速度和代码共享度。具体有以下几个特点。(1)过程存放在服务器端,减少了网络传输的延时,提高了速度。(2)过程在执行一次之后,会驻留内存,后续的执行无需再经编译过程,提高了执行效率。
三、主要仪器设备
计算机一台,Oracle运行环境
四、操作方法与实验步骤
1、创建存储过程先向表t_student中插入数据,具体如下所示
2、每次向表t_student中插入数据时,只需要运行该过程就可以了。具体如下所示。表t_student中的列stuid被设置为主键,因此不可以存在重复值。在第二次运行时,因为输入的第一个参数id与表中已存在的数据相同,所以插入时出现错误。
3、继续向表中插入两条记录,其中当参数id不重复时,过程成功完成。
4、不仅可以通过存储过程向表中插入数据,也可以通过一般的SQL语句向表中插入数据,如下所示。
5、向表中插入数据时,需要注意数据类型以及长度都需要与表中定义的相符,否则会出现错误,具体如下所示。
6、t_course表中列term被定义为char且长度为2,因此在插入数据时该列最大长度为2,超过该值会出现错误。课程表中只有已经存在的课程编号才能被插入到选课表中,否则会出错,这样就保证了数据的一致性。
7、t_selcour表的另外一个外键为第一列sid,在插入时只有当该值存在于学生表中的学生编号时,才能被成功插入,否则也会出现错误,具体如下所示。
8、对于向表t_teacour中插入数据时,同样需要满足外键参考主键的约束条件,具体如下所示。
9、向表t_teacour中插入一行记录,其中tid存在于表t_teacher的列teaid中,cid存在于表t_course列couid中。如果插入的值不符合外键约束条件,会出现错误,具体如下所示。
10、在完成对表插入值后,可以关联表查询记录。比如:查询教师编号为1的教师所带的课程编号、教师姓名、课程名称、课程学分信息,具体如下所示。实现了查询编号为1的老师所带的课程编号、课程名称等信息。在查询时,为表命名别名时为了方便,各个表的连接通过主键外键约束来实现。
查看t_course及t_selcourse中的值
五、实验结果与分析
实验结果如上截图所示。
六、讨论、心得
grant select不支持对表中选定的几列授权,只能将整个表的select权限授权出去。所以实验中先建立了基于选课信息表的视图SelectiveInfo1,视图中包含成绩列,学号列以及班级列(不包含其他的列)再将对视图SelectiveInfo1的select权限授予角色teacher。
不同的用户可以创建相同的表格,teacher用户创建了table1,student用户也创建了table1,且这两个表格式完全相同的,那么其他用户需要用这两个表格时,可以用teacher.table1和student.table1加以区分。
实验中遇到的问题可以上网百度,网上资源很丰富。
第五篇:学生考勤管理系统设计报告
C/C++程序设计专题实验
报告
题目:学生考勤管理系统设计
班级:电子信息科学与技术131 姓名: 邬
帅
斌
目录
目录......................................................................1 摘要........................................................................2 1.设计要求和目的.........................................................................................错误!未定义书签。
1.1设计目的................................................................3 1.2问题描述................................................................3 1.3功能要求................................................................3 1.4问题的解决方案..........................................................3 2 设计思路和方法...........................................................................................................................4 3 主模块设计....................................................................................................................................5 4.运行测试及结果.........................................................................................................................13 5.总结...........................................................................................................................................16 参考文献.........................................................................................................................................16 源代码..............................................................................................................................................17
摘要
随着信息技术在管理上越来越深入的应用,管理信息系统的实施在技术上已经逐步成熟。管理信息系统是一个不断发展的学科,任何单位要生存要发展,要提高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的信息管理系统。
由于学校的学生管理系统缺乏开发,而学生人数不断增加,学生信息的不断更新,所以,学生考勤管理系统的建立就显得非常重要了。
本设计是基于Visual basic C++ 6.0开发环境,至上而下,层次化地设计学生考勤管理,综合考虑学生考勤管理所涉及的多方面问题,结合学校和教师的情况,有步骤,条理清晰的设计,操作简单,很方便的实现了学校和老师对学生考勤的管理。
关键词:学生考勤管理 C++ 信息录入 查询
1.设计要求和目的
1.1设计目的
(1)进一步锻炼学生对C++课程基础知识和实践技能的掌握和运用;
(2)要求学生基本掌握面向对象程序设计的基本思路和方法;
(3)要求学生能够利用所学的基础知识和技能,解决简单的面向对象设计问题。
1.2问题描述
学生信息包括:学号、姓名、性别、年龄、班级等信息。
考勤信息包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假和旷课)。
1.3功能要求
(1)添加功能:程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。添加学生记录时,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。还可以按课程名、学生姓名对缺课记录进行查询。
(3)显示功能:可显示当前系统中所有学生的记录和缺课记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。
(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。
(6)统计功能:能根据多种参数进行统计。能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。需要排序。
(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
1.4问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系;(3)根据问题描述,设计系统的类层次;(4)完成类层次中各个类的描述;(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;(7)功能调试;
(8)完成系统总结报告。(7)功能调试;
(8)完成系统总结报告。
2.设计思路和方法
2.1设计思路
根据设计要求,经分析可将整个系统划分为7个功能模块。数据管理中可以对学生的基本信息、课程的基本信息、学生缺课的查询、添加、删除和修改。查询管理通过根据学生姓名,课程姓名 时间段儿等信息,查询单个学生的缺课记录,单科课的旷课记录,单个学生的旷课记录。功能模块图如下图所示:
学生考勤管理程序建立学生缺课记录修改学生缺课记录查询学生缺课记录查看单科旷课记录查看学生旷课记录载入学生旷课记录储存学生旷课记录
2.2数据结构设计
struct xueke {char xueke_name[50];int people_num;};这是定义了一个xueke结构体,用来存放一个学科名及其相应的旷课人数;
struct student { char name[50];long time;int lesson_time;char lesson_name[50];int chidao_num;
int zaotui_num;int qingjia_num;int kuangke_num;struct student *next;};这是定义了一个student的结构体,用来存放一个学生的考勤记录,其中有,字符数组name[50],lesson_name[50],分别存放学生名字,缺课课程名字;int型变量lesson_time,chidao_num,zaotui_num,qingjia_num, kuangke_num,分别来存放,缺课节次,迟到次数,早退次数,请假次数,旷课次数 long型变量time,记录时间。
3.主模块设计
3.1建立学生缺课记录子模块
建立的学生人数,学生基本信息(包括缺课时间、学生姓名、课程名称、节次、迟到次数、早退次数、请假次数、旷课次数),用creat()函数,如下图:
开始int i,b;struct student *head,*p1,*p2;printf(“请输入要建立资料的学生人数:”);scanf(“%d”,&b);head=p2=NULL;p1=(struct student *)malloc(LEN);输入第一个学生成绩head=p1;p2=p1;i=0;student_num++;inext=p1;p2=p1;student_num++;i++p2->next=NULL结束
3.2修改学生缺课记录子模块
开始char xiugai_name[50];char xiugai_xueke_name[50];int k;printf(”请输入要修改的学生姓名与学科名称:“);scanf(”%s%s“,xiugai_name,xiugai_xueke_name);struct student *p1,*p2;p2=(struct student *)malloc(LEN);p1=head;p1=p1->next;strcmp(xiugai_name,p1->name)!=0&&(p1->next!=NULL)&&strcmp(xiugai_xueke_name,p1->lesson_name)!strcmp(xiugai_name,p1->name)==0&&strcmp(xiugai_xueke_name,p1->lesson_name)==0显示修改菜单选择修改项目并完成修改结束
3.3修改学生缺课记录子模块
开始int i=0;char chaxun_name[50];struct student *p;p=head;printf(”请输入要查询的人名:“);scanf(”%s“,chaxun_name);i
3.4查看单科旷课记录子模块
根据学科名称和时间范围查出所有在该范围内旷课的学生以及次数,如下图:
开始struct student *p1,*p2,*p3;char lesson[50];long look_time1,look_time2;int xunhuan_num=0;p3=(struct student *)malloc(LEN);p1=head;p2=p1->nextxunhuan_num
3.5查看学生旷课记录子模块
根据要查询的学科名称及时间段查出在改时间段内该门课上旷课的人数,如下图:
开始int n,i,j,zhongjian;struct student *p1;char zhongjian_name[50];long look_time1,look_time2;printf(”请输入第%d个学科名称:“,i+1);scanf(”%s“,a[i].xueke_name);a[i].people_num=0;printf(”请输入要查看的时间范围由小到大“);scanf(”%ld%ld“,&look_time1,&look_time2);p1=head;i=0;Yi 3.6载入学生旷课记录子模块 可以载入实现储存在当前文件夹中txt文件中所储存的数据,如下图: 开始struct student *p1=NULL,*p2=NULL,*head=NULL;struct student student_ziliao[100];int i=0,n=0;打开文件!feof(fp1)将文件里的数据存入结构体数组通过结构体数组建立链表结束 3.7储存学生旷课记录子模快 进入系统界面,进行数据的输入,信息的保存调用相应的函数打开相应的地址,查询各项信息。如下图: 开始struct student *p1;p1=head;打开文件xueshengziliao.txtp1!=NULLN将数据写入文件p1=p1->next;结束 Y 4.运行测试与结果 4.1开始菜单 4.2主菜单 4.3创建学生缺课记录库 4.4修改学生缺课记录 4.5查询学生缺课记录 4.6查看单科旷课记录 4.7查看学生旷课记录 4.8载入旷课记录 4.9储存旷课记录 5.总结 在老师同学的细心帮助下,结合网上的参考资料,这次设计总算顺利完成。通过本次设计,让我对C++基础课程有了更加深刻的理解,在相关的能力上有了很大的提高,虽然在设计过程中遇到很大的困难,但是经过不断的修改和调试,在此过程中受益匪浅。 这次的程序设计相对于平时的训练还是有了进步的。学生考勤管理系统要求至少要有四个类,在起初,对于定义哪四个类我是不清楚的,通过仔细的研读问题描叙终于在脑海里确定了这四个类。既然是学生考勤管理系统,那由学生缺课信息中的日期我想到了时间类,这是一个很简单的类。从系统的几大功能我又想到了系统的基础就是缺课学生的缺课信息,于是我又想到了一个信息类,还有两个类是根据两个统计功能想到的,在现在看来似乎有些不妥。通过这次的课程设计我明白了学习程序设计语言必须要勤做实验,通过实验总结经验。 平时遇到的一些小问题一定要重视,越是基础的知识越要理解透彻。比如指针与数组方面的知识,一旦没有弄清楚,在设计程序时就会吃亏。这次的课设中,我遇到了很多的问题,有的通过思考或查看书本解决了,有的还留在脑子里,只有通过孜孜不倦的求索我们才会有进步,不懂得思考就不能真正的掌握一门知识。这次的实验给以了我警示,让我明白我所掌握的知识还很欠缺,对于继承与派生这一章的知识,我以为自己勉强掌握了,这次实验后我发现我掌握得还不够。基类的保护成员公有继承到派生类,类外是否可以通过对象来访问呢,原先我认为是可以的,经过这次程序设计,我知道我错了。总之,我觉得做学问不应该马虎,对于所学一定要有深入的理解,这也是我这次课设得到的启示。 参考文献: 刘锐宇.Visual C++从入门到精通.清华大学出版社 谭浩强.C++语言程序设计.清华大学出版社 设计源程序代码: #include //stdio.h的内容用C++头文件的形式表示 #include #include //动态内存分配 #include #include //I/O流控制头文件 #define NULL 0 #define guding 10 #define LEN sizeof(struct student) //定义了一个常数宏LEN,它的值等于结构体student的所占内存大小 using namespace std;int student_num;FILE *fp1; //定义指针类型文件 struct xueke { char xueke_name[50];int people_num;}; struct student { char name[50];long time;int lesson_time;char lesson_name[50];int chidao_num;int zaotui_num;int qingjia_num;int kuangke_num;struct student *next;};void chaxun(struct student *head){ int i;char chaxun_name[50];cout<<”请输入要查询的人名:“; cin>>chaxun_name;struct student *p; if(head==NULL) cout<<”联系人为空“;p=head;for(i=0;i if(strcmp(chaxun_name,p->name)==0){ cout<<”缺课时间:“< time<<”学生姓名:“< name<<”课程名称:“< lesson_name<<”节次:“< lesson_time< 早退次数:“< zaotui_num<<”请假次数:“< qingjia_num<<”旷课次数:“< kuangke_num< p=p->next; //p的指针内容变成了p->next } } struct student *xiugai(struct student *head){ char xiugai_name[50];char xiugai_xueke_name[50];int k;cout<<”请输入要修改的学生姓名与学科名称【格式:学生姓名(空格)学科名称】:“;cin>>xiugai_name>>xiugai_xueke_name;struct student *p1,*p2; p2=(struct student *)malloc(LEN);p1=head;if(head==NULL){ cout<<”没有学生信息n“; return head;} while((strcmp(xiugai_name,p1->name)!=0||strcmp(xiugai_xueke_name,p1->lesson_name)!=0)&&(p1->next!=NULL)) p1=p1->next; if(strcmp(xiugai_name,p1->name)==0&&strcmp(xiugai_xueke_name,p1->lesson_name)==0){ cout<<”===================================修改信息 =================================n“; cout<<” 1-修改缺课时间 n“; cout<<” 2-修改学生姓名 n“; cout<<” 3-修改课程名称 n“; cout<<” 4-修改第几节缺课 n“; cout<<” 5-修改迟到次数n“; cout<<” 6-修改早退次数n“; cout<<” 7-修改请假次数n“; cout<<” 8-修改旷课次数nn“; cout<<”==================================n“; cin>>k; switch(k) { case 1: cout<<”请输入新的缺课时间:“; cin>>p1->time; break; case 2: cout<<”请输入新的学生姓名:“; cin>>p1->name; break; case 3: cout<<”请输入新的课程名称:“; cin>>p1->lesson_name; break; case 4: cout<<”请输入新的缺课节次:“; cin>>p1->lesson_time; break; case 5: cout<<”请输入新的迟到次数:“; cin>>p1->chidao_num; break; case 6: cout<<”请输入新的早退次数:“; cin>>p1->zaotui_num; break; case 7: cout<<”请输入新的请假次数:“; cin>>p1->qingjia_num; break; case 8: cout<<”请输入新的旷课次数:“; cin>>p1->kuangke_num; break; } } return head; } struct student *creat(){ int i,b; struct student *head,*p1,*p2; cout<<”请输入要建立资料的学生人数:“; cin>>b; head=p2=NULL; p1=(struct student *)malloc(LEN); cout<<”【输入格式:缺课时间(空格)学生姓名(空格)课程名称(空格)第几节(空格)迟到次数(空格)早退次数(空格)请假次数(空格)旷课次数】n“; cout<<”请输入第1名学生信息:“; cin>>p1->time>>p1->name>>p1->lesson_name>>p1->lesson_time>>p1->chidao_num>>p1->zaotui_num>>p1->qingjia_num>>p1->kuangke_num; head=p1; p2=p1; student_num+=1; for(i=1;i { p1=(struct student*)malloc(LEN); cout<<”请输入第“< cin>>p1->time>>p1->name>>p1->lesson_name>>p1->lesson_time>>p1->chidao_num>>p1->zaotui_num>>p1->qingjia_num>>p1->kuangke_num; p2->next=p1; p2=p1; student_num+=1; } p2->next=NULL; return head;} void print(struct student *head){ struct student *p;p=head;if(p==NULL) cout<<”没有学生信息n“;while(p!=NULL) { cout<<”缺课时间:“< time<<”学生姓名:“< lesson_name<<”节次:“< lesson_time< zaotui_num<<请假次数:”< qingjia_num<<旷课次数:“< kuangke_num< p=p->next;} } struct student *tongji_lesson(struct student *head){ struct student *p1,*p2,*p3;char lesson[50];long look_time1,look_time2;int xunhuan_num=0;p3=(struct student *)malloc(LEN);if(head==NULL){ cout<<”没有学生信息“; return(head);} p1=head;p2=p1->next;while(xunhuan_num while(p2!=NULL) { if(p2->kuangke_num>p1->kuangke_num) { p3->chidao_num=p2->chidao_num; p3->kuangke_num=p2->kuangke_num; p3->qingjia_num=p2->qingjia_num; p3->zaotui_num=p2->zaotui_num; p3->lesson_time=p2->lesson_time; p3->time=p2->time; strcpy(p3->lesson_name,p2->lesson_name); strcpy(p3->name,p2->name); p2->chidao_num=p1->chidao_num; p2->kuangke_num=p1->kuangke_num; p2->qingjia_num=p1->qingjia_num; p2->zaotui_num=p1->zaotui_num; p2->lesson_time=p1->lesson_time; p2->time=p1->time; strcpy(p2->lesson_name,p1->lesson_name); strcpy(p2->name,p1->name); p1->chidao_num=p3->chidao_num; p1->kuangke_num=p3->kuangke_num; p1->qingjia_num=p3->qingjia_num; p1->zaotui_num=p3->zaotui_num; p1->lesson_time=p3->lesson_time; p1->time=p3->time; strcpy(p1->lesson_name,p3->lesson_name); strcpy(p1->name,p3->name); } p1=p2; p2=p2->next; } p1=head; p2=p1->next; xunhuan_num++;} cout<<”请输入要查看的学科名称:“;cin>>lesson;cout<<”请输入要查看的时间范围【输入格式:时间(空格)时间】“;cin>>look_time1>>look_time2;p1=head; while(p1!=NULL){ if(strcmp(lesson,p1->lesson_name)==0&&look_time1<=p1->time&&p1->time<=look_time2) cout<<”学生姓名:“< name<<” 旷课次数:“< kuangke_num< p1=p1->next;} return head;} struct student *tongji_student(struct student *head){ struct xueke a[10];int n,i,j,zhongjian;struct student *p1;char zhongjian_name[50];long look_time1,look_time2;if(head==NULL){ cout<<”没有学生信息n“;return head; } cout<<”请输入一共的学科数:“;cin>>n;for(i=0;i cout<<”请输入第“<>a[i].xueke_name;a[i].people_num=0; }