软件开发流程图示例关于班级管理(软件开发项目管理整个流程图)

软件开发 3367
今天给各位分享软件开发流程图示例关于班级管理的知识,其中也会对软件开发项目管理整个流程图进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、要写一份毕业论文“学生成绩管理系统”,它主要流程有哪些?怎么入手

今天给各位分享软件开发流程图示例关于班级管理的知识,其中也会对软件开发项目管理整个流程图进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

要写一份毕业论文“学生成绩管理系统”,它主要流程有哪些?怎么入手

学生成绩管理系统基于JSP学生成绩管理系统软件的开发摘 要学生成绩管理系统是典型的信息管理系统(MIS),它作为学生信息管理的基础,是实现校园信息化进程当中很重要的一个方面。其开发主要包括前端应用程序的开发以及后台数据库的建立和维护[计算机毕业设计网站 ]两个方面。本系统分析了现今学生成绩管理系统中所应用的几个环节,并针对每个环节做出了详细的阐述和探讨。分别从用户管理、课程管理、成绩管理、班级管理等四大模块详细地讲述了软件开发的具体步骤和整个过程,介绍了系统开发用到的JSP环境NetBeans IDE 4.1、使用的相关JSP技术和Java编程语言、引入MVC设计模式理念,以及后台数据库SQL-Server 2000的搭建与操作,并对模块的功能进行了具体分析和详细设计。本系统主要功能包括:用户管理、学生注册、对班级信息、学生信息、班级课程、学校专业信息、课程信息、学生成绩、教师信息、数据库信息的录入、查询、添加、修改和删除等,其中系统的核心是添加、修改和删除三者之间的联系,每一个表的修改都将联动地影响其它的表。

关键词:学生成绩管理系统;NetBeans IDE 4.1;SQL-Server 2000;JSP;JAVA;MVC

目 录论文总页数:共28页1 引言. 11.1 学生成绩管理系统的现状及开发背景. 11.2 学生成绩管理系统的主要特征. 11.3 系统的主要工作. 12 系统开发工具. 12.1 JSP技术与Java语言的概述. 22.1.1 JSP技术与ASP技术的比较. 22.1.2 Java语言的优越性及其演变技术. 22.2 MVC设计模式. 32.3 SQL-Server 2000 数据库概述及特点. 33 系统总体设计. 33.1 系统分析. 33.1.1 系统调查分析. 43.1.2 对系统的综合要求. 43.2 系统总体功能划分. 43.3 系统流程图. 53.4 系统结构图. 74 系统环境配置. 84.1 系统运行环境. 84.2 系统概述. 85 数据库设计. 95.1 概念结构设计. 95.2 逻辑结构设计. 106 软件设计与实现. 126.1 系统登陆模块. 126.2 学生功能模块. 146.3 教师功能模块. 166.4 管理员功能模块. 177 系统测试分析. 247.1测试环境的搭建. 247.1.1 运行环境. 247.1.2 环境配置. 247.2 测试方案的设计. 247.3 测试结果. 25结 论. 26参 考 文 献. 26致 谢. 27声 明. 28

关于班级管理的流程图

(1)任命班长

(2)授予班长挑选副班长以及其他班委员的权力,

(3)授予班委任命、管理小组长的权力

(4)授予小组长管理组员的权力

结束!

VB数据流程图

目录

摘要

ABSTRACT

前言

第一章 为什么要开发一个学生档案管理系统?

第二章 计算机已经成为我们学习和工作的得力助手

1.1 在中小学中用计算机管理学生档案的意义

1.2 为将来学校上网做好准备

1.4 学生档案的设计分析

第三章 怎样开发一个学生档案管理系统?

2.1 编程环境的选择

2.2 关系型数据库的实现

2.3 二者的结合(DBA)

第四章 Windows下的Visual Basic 编程环境简介

3.1 告别“hello world”的年代

3.2 面对对象的编程

3.3 实现菜单选项

3.4 实现工具栏

3.5 帮助

3.6关于系统

第五章 使用Access2000 实现关系型数据库

4.1 数据库的概念

4.2 新建一个数据库

4.3 修改已建的数据库

4.4 实现数据库之间的联系

第五章 系统总体规划

5.1 系统功能

5.2 流程图

第六章 系统具体实现

6.1 用户界面的实现

6.1.1 封面

6.1.2 主界面

6.1.3 帮助系统

6.2 数据库的实现

6.2.1 学籍数据库

6.2.2 学生成绩库

6.2.3 课程库

6.3 与VB的连接

第七章 结束语

第八章 主要参考文献

附录

--------------摘要--------------

学生档案管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。

经过分析,我们使用 MICROSOFT公司的 VISUAL BASIC开发工具,利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。

关键字:控件、窗体、域。

--------------ABSTRACT--------------

The system of managing student file is a typical application of managing information system (know as MIS),which mainly includes building up data-base of back-end and developing the application interface of front-end. The former required consistency and integrality and security of data. The later should make the application powerful and easily used.

By looking up lots of datum, we selected Visual Basic presented by Microsoft because of its objective tools in Win32. VB offered a series of ActiveX operating a data-base. It can give you a short-cut to build up a proto无效 of system application. The proto无效 could be modified and developed till users are satisfied with it.

Keywords: ActiveX , Form , Field .

--------------前言--------------

学生档案管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生档案管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

作为计算机应用的一部分,使用计算机对学生档案信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生档案管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。

因此,开发这样一套管理软件成为很有必要的事情,在下面的各章中我们将以开发一套学生档案管理系统为例,谈谈其开发过程和所涉及到的问题及解决方法。

--------------------下面就让我们开始正文的介绍

第一章

为什么要开发一个学生档案管理系统?

计算机已经成为我们学习和工作的得力助手:

今天,计算机的价格已经十分低廉,性能却有了长足的进步。它已经被应用于许多领域,计算机之所以如此流行的原因主要有以下几个方面:

首先,计算机可以代替人工进行许多繁杂的劳动;

其次,计算机可以节省许多资源;

第三,计算机可以大大的提高人们的工作效率;

第四,计算机可以使敏感文档更加安全,等等。

在中小学中用计算机管理学生档案的意义

现在我国的中小学校中档案的管理水平还停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。

我作为一个计算机应用的本科生,希望可以在这方面有所贡献。改革的总设计师邓小平同志说过“科学技术是第一生产力”,我希望能用我四年的所学编制出一个实用的程序来帮助中小学进行更有效的学籍管理。

归纳起来,好处大约有以下几点:

1. 可以存储历届的学生档案,安全、高效;

2. 只需一到二名档案录入员即可操作系统,节省大量人力;

3. 可以迅速查到所需信息。

为将来学校上网做好准备

跟据1999年中国电信的调查报告显示我国的上网人数已达到890万,互联网已经十分普及,学校往界的毕业生希望能在世界的任何一个角落查到自己校友的信息,本系统为学校将来的上网作了先期工作,比如数据库的建立。

学生档案的设计分析

根据实际情况,我们使用原型法(Rapid Prototyping)即以少量代价快速地构造一个可执行的软件系统模型。使用户和开发人员可以较快地确定需求,然后采用循环进化的开发方式,对系统模型作连续的精化,将系统需具备的性质逐渐增加上去,直到所有的性质全部满足。此时模块也发展成为最终产品了。

第二章

怎样开发一个学生档案管理系统?

编程环境的选择

微软公司的Visual Basic 6.0是Windows应用程序开发工具,使目前最为广泛的、易学易用的面向对象的开发工具。Visual Basic提供了大量的控件,这些控件可用于设计界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效的提高了应用程序的运行效率和可靠性。故而,实现本系统VB是一个相对较好的选择。

关系型数据库的实现

Access2000 就是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。Access 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel 的电子表格,可以使数据库一目了然。另外,Access 允许创建自定义报表用于打印或输出数据库中的信息。Access也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件服务器,与其他网络用户共享数据库。Access 是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。如上所述,Access 作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能。

二者的结合(DBA)

微软的JET数据库引擎提供了与数据库打交道的途径,我们是通过它以及Visual Basic 来访问数据库并对其进行各种操作。Visual Basic、Access以及其他微软的软件产品都是通过共用JET数据库引擎,从而给用户提供了丰富的数据类型。

DATA 控件在数据库中的信息与将信息显示给用户看的Visual Basic程序之间架起了一座桥梁。我们可以设置DATA控件的各个属性,告诉它要调用那个数据库的哪个部分。缺省情况下,DATA控件根据数据库中的一个或多个数据表建立一个dynaset-无效(动态集合)类型的记录集合。一个记录集合是动态的也就意味着,当原来的数据表中的容改变了以后,该记录集合中的记录也会随之改变。DATA控件还提供了用来浏览不同记录的各种跳转按钮。将DATA控件放置在窗体中之后,我们还必须在该控件与要处理的数据库之间建立联系。

第三章

Windows下的Visual?????????????

?????????????????????????????

?????????????????

?????????????????????????????????????????????????)。 Visual Basic应用程序基本的构建块是用户所创建的对象,每一个对象都具有一些特性和行为(属性、事件和 方法)。开发人员可以最有效利用所创建的每一个对象。使用应用程序具有可通用性可说扩展性和强有力的功能。

Visual Basic应用由一系列对象组成,包括有函数、菜单、函数、结构和数据窗口、用户对象、用户事件等等,对象中又包含若干控件如命令按钮、单行编辑器等这些对象和控件都可在许多应用中重复使用。

实现菜单选项

菜单是程序最重要的特性之一,大多数程序都依赖一个定义良好的菜单使程序易于使用和维护,Visual Basic也提供了强大的创建菜单功能是程序更加标准。

您可以使用Visual Basic的Application Wizard也可以使用Visual Basic 的菜单编辑器建立菜单或者修改已经存在的菜单。

实现工具栏

CoolBar控件与Office97种看到的CoolBar是类似的。CoolBar就是一个可以在窗体上浮动的工具,同时也是其他ActiveX的容器。通过在CoolBar中迁入其他空间你局可以向用户提供更好的灵活性和义用性。

Toolbar 是工具条控件,是实现工具条的主体。其中的按钮可以显示图像和标题,并按功能分组或加入分隔符,还可以围棋设置鼠标停留在其上显示的提示字符。Toolbar也是一个控件容器且具有Style属性,并可以为其增加下拉按钮和平滑按钮等。

选择“工程”下拉菜单中的“部件”选项,显示“部件”对话框。在“控件”选项卡列表中选择“Microsoft Windows Common Controls 6.0”后工具相中增加改控件。其属性及对象如下:

1. Align属性定义工具条在窗体中的位置

2. ToolTipText属性是字符串类型,定义控件的提示字符

3. Style属性定义按钮外观。

4. ImageList属性定义与数据条对应的ImageList控件名,该控件定义工具条按钮显示的图像。

5. HotImangeList属性设置一个ImageList控件名,该控件定义按钮获得热点时显示的图像。

6. DisabledImageList属性定义工具条按钮无效时显示的图像。

创建工具条包括ImageList和Toolbar控件

ImageList用于为其他控件提供图像库,将ImageList控件加入到工具箱的操作于前述Toolbar控件相同。

帮助

专业水平的软件通常都带有联机帮助功能。无论写出来的程序是要给大量的用户使用,还是仅仅局限于公司内部有限的使用者,我们都应该为用户提供详细的、易于理解的联机帮助文档。微软的Help Workshop4.0 是一套独立于Visual Basic 的用来协助我们创建、运行于32位Windows 操作系统下的帮助文件的工具。使用它我们可以为我们编写的应用程序生成一组帮助文件。

关于版本

为了是程序显得更具有专业风格,首先可以在其中加入通常的应用程序信息。这些信息包括公司名称、版本号、修订号以及其他类似信息。Visual Basic允许你使用APP对象来保存这些信息,APP对象是一个预定义对象,不需要在程序中创建它。APP对象的大多数属性被应用程序用来提供常规的信息,通过使用这些APP提供的属性,可以在应用程序和用户之间交流重要信息,在项目属性框中可以设置它的属性。

第四章

使用Access2000 实现关系型数据库

数据库的概念

数据库是一种存储数据并对数据进行操作的工具。数据库的作用在于组织和表达信息,简而言之,数据库就是信息的集合。计算机的数据库可以分为两类:非关系数据库(flat-file)和关系数据库(relational)。关系数据库中包含了多个数据表的信息,数据库含有各个不同部分的术语,象记录、域等。

新建一个数据库

创建任何一个数据库的第一步是仔细的规划数据库,设计必须是灵活的、有逻辑的。创建一个数据库结构的过程被认为是数据模型设计。

1. 标识需要的数据;

2. 收集被标识的字段到表中;

3. 标识主关键字字段;

4. 绘制一个简单的数据图表;

5. 规范数据;

6. 标识指定字段的信息;

7. 创建物理表。

修改已建的数据库

数据库的修改分为:添加、编辑和删除记录。这三种操作均可由Visual Basic 创建的程序来完成,下面的章节将详细描述实现的具体方法。

实现数据库之间的联系

数据库之间的关系指明两个库之间共享一个共同的关键字值。一个连接是指一种虚拟的表,这种表是在当用户要求从相互关联的各个不同的表中获取信息时建立的,关键字段用于在相互连接的不同表中查找匹配的记录。一个更高级的连接形式称为自连接。这种连接是指一个表被连接到它自己的一个字段,或在不同的纪录中由重复数据的组合字段。数据库中有三种不同类型的关键字:主关键字、组合关键字和外关键字。在表中使用的关键字类型用于描述库表示什么以及在数据库中如何与其它的库建立关系。

第五章

系统总体规划

系统功能

1. 可以进行文本操作;

2. 添加一个数据库项目;

3. 删除一个数据库项目;

4. 修改一个数据库项目;

5. 查询信息;

6. 察看课程表。

流程图

第六章

系统具体实现

用户界面的实现

6.1.1 封面

具体实现见 图_6.1.1

图_6.1.1

6.1.2 主界面

具体实现见.图_6.1.2

图_6.1.2

主界面包含三方面的内容,以下一一介绍:

1.记录操作

打开记录操作,进入记录操作菜单项分别由文件、视图及帮助三个选项。

1.1文件包括:新建

打开

打开写字板---------如图6.1.4 (源程序见附录清单6.1 )

保存

另存

打印

退出

图6.1.4

1.2视图包括:状态条

工具栏

背景颜色

显示

课程表---------如图6.1.5

文本编辑器

网络浏览

图6.1.5

1. 3帮助包括:内容

关于帮助

2.记录操作

打开记录操作进入记录操作选项页分别由浏览记录、查找等三个选项组成。

2.1浏览记录:

学生学籍库

课程库

成绩库

2.2查找记录

2.3备注

3.系统信息

打开系统信息进入选项页分别由系统信息、信息采集等组成。

6.1.3 帮助系统

具体实现见6.1.3

图6.1.3

数据库的实现

6.2.1学籍数据库

学籍数据库里存储了学生的档案包括:学号、姓名、年龄等 表如6.2.6

列名(中文)列名(英文)数据类型宽度小数点位数是否为空姓名Name Date8No学号CodeInteger6No性别SexDate2No年龄AgeDate6No民族NationDate6No政治面貌Visage...Date2...Yes...家庭住址AddressDate10No备注RecordDate15No 表6.2.6

学籍模块:

该模块主要完成学生基本信息的录入、删除 、更新等功能。在此模块中定义了八个域名来进行学生的信息存储。如果用户修改某一纪录中的某一项,可单添加按钮进行学生记录的编辑,此窗口使用数据窗口的FREEDOM风格(典型的录入界面)。该种风格特点是列标题紧挨着数据列在此窗口还可以增加新学生纪录。

6.2.2成绩数据库

成绩数据库里存储了学生的成绩包括:学号、成绩、等如表6.2.7

列名(中文)列名(英文)数据类型宽度小数点位数是否为空姓名Name Date8No学号CodeInteger6No成绩ScoreDate10No备注RecordDate15No 表6.2.7

成绩模块:

该模块主要完成学生成绩的基本信息的录入、删除 、更新等功能。在此模块中定义了四个域名来进行学生的信息存储。

6.2.3课程数据库

课程数据库利存储了课程的信息:课程名、作者、出版社等如表6.2.8

列名(中文)列名(英文)数据类型宽度小数点位数是否为空课程IDCourseDate8No课程名NameDate15No出版社PublisherDate20No作者ScoreDate18No备注RecordDate15No 表6.2.8

课程模块:

该模块主要完成存储课程的所有信息及录入、删除 、更新等功能

与VB的连接

Visual Basic提供了与底层数据库系统紧密的连接。Visual Basic 支持不同的关系数据库管理系统并充分发挥每一个数据库的特长。生成独立应用或脱离服务器运行的服务以上的应用,Visual Basic连接数据库的方式有两种:

·通过使用Visual Basic的 DATA控件。

·通过使用由Visual Basic提供的专用的直接与数据库相连的接口

第七章

结束语

经过三个多月的设计和开发,中小学档案管理系统基本开发完毕。其功能基本符合用户需求,能够完成学生学籍的存储和成绩的查询以及各类相关报表的打印。并提供部分系统维护功能,使用户方便进行数据备份和恢复、数据删除。,对于数据的一致性的问题也通过程序进行了有效的解决。

但是由于毕业设计时间较短,所以该系统还有许多不尽如人意的地方,比如联机文档比较少,用户界面不够美观,出错处理不够等多方面问题。这些都有待进一步改善。

致谢

在本次毕业设计中,我从指导老师雷震甲老师身上学到了很多东西。雷老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感谢他耐心的辅导。

另外,在系统开发过程中雷老师的助手张彦明老师也给于我很大的帮助,帮助解决了不少的难点,使得系统能及时开发完成,还有同组的同学同样给与我不少帮助,这里一并表示感谢。

第八章

主要参考文献

[1] Visual Basic 6.0 使用指南

作者:Bob Reselman , Richard Peasley , Wayne Pruchniak.

出版社:电子工业出版社

[2] 中文版Microsoft Office 97 自学通

作者:Ned Snell

出版社:机械工业出版社

[3] Visual Basic 6.0 中文版控件大全

作者:Microsoft

出版社;电子工业出版社

[4] 中文Access 2000 24学时教程

作者:Craig Eddy ,Timothy Buchanan

出版社:机械工业出版社

附录程序清单及注释

程序清单6.1

Option Explicit

Dim FileName As String '文件名,用于打开、保存文件

Dim UndoString As String '用于 Undo 操作

Dim UndoNew As String '用于 Undo 操作

Private Sub ImgUndoDisable()

'禁用“Undo”按钮

UndoString = ""

UndoNew = ""

ImgUndo.Enabled = False

ImgUndo.Picture = ImageDisable.ListImages("Undo").Picture

End Sub

Private Sub ImgUndoEnable()

'有效“Undo”按钮

ImgUndo.Enabled = True

ImgUndo.Picture = ImageUp.ListImages("Undo").Picture

End Sub

Private Sub Check_ImgPaste()

'设置粘贴按钮

If Len(Clipboard.GetText) 0 Then

ImgPaste.Enabled = True

ImgPaste.Picture = ImageUp.ListImages("Paste").Picture

Else

ImgPaste.Enabled = False

ImgPaste.Picture = ImageDisable.ListImages("Paste").Picture

End If

End Sub

Private Sub Check_ImgCutCopy()

'设置剪切、复制按钮

If Text1.SelLength 0 Then

ImgCut.Enabled = True

ImgCut.Picture = ImageUp.ListImages("Cut").Picture

ImgCopy.Enabled = True

ImgCopy.Picture = ImageUp.ListImages("Copy").Picture

Else

ImgCut.Enabled = False

ImgCut.Picture = ImageDisable.ListImages("Cut").Picture

ImgCopy.Enabled = False

ImgCopy.Picture = ImageDisable.ListImages("Copy").Picture

End If

End Sub

Private Sub BackColor_Click()

CommonDialog1.ShowColor

Text1.BackColor = CommonDialog1.Color

End Sub

Private Sub Box_Click()

'显停工具栏

If Box.Checked Then

'将停显工具栏

Box.Checked = False

CoolBar1.Visible = False

Else

Box.Checked = True

CoolBar1.Visible = True

End If

Form_Resize '重新调整控件位置

End Sub

Private Sub Close_Click()

Dim FileNum As Integer

If Len(FileName) 0 Then

'有输入文件名

FileNum = FreeFile() '获得可用文件号

Open FileName For Output As FileNum '打开输出文件

'如果无指定文件,则创建新文件

Print #FileNum, Text1.Text '输出文本

Close FileNum '关闭文件

End If

Text1.Text = ""

FileName = ""

End Sub

Private Sub ComboSize_Click()

Text1.FontSize = Val(ComboSize.Text)

End Sub

Private Sub ComboFont_Click()

Text1.FontName = ComboFont.Text

End Sub

Private Sub Copy_Click()

Clipboard.SetText Text1.SelText '复制文本到剪裁板

End Sub

Private Sub Cut_Click()

Clipboard.SetText Text1.SelText '复制文本到剪裁板

Text1.SelText = "" '清选择的文本

End Sub

Private Sub DataTime_Click()

Text1.SelText = Now

End Sub

Private Sub 删除_Click()

Text1.SelText = "" '清选择的文本

End Sub

Private Sub Edit_Click()

'当程序显示“编辑”子菜单前,触发该程序

If Text1.SelLength 0 Then

'文本框中有选中的文本

Cut.Enabled = True

Copy.Enabled = True

删除.Enabled = True

Else

Cut.Enabled = False

Copy.Enabled = False

删除.Enabled = False

End If

If Len(Clipboard.GetText()) 0 Then

'剪裁板中有文本数据

Paste.Enabled = True

Else

'没有可粘贴的文本

Paste.Enabled = False

End If

End Sub

Private Sub Exit_Click()

Unload Me

End Sub

Private Sub FindText_KeyPress(KeyAscii As Integer)

Dim BeginPos As Long

If KeyAscii = 13 Then

BeginPos = InStr(1, Text1.Text, FindText.Text, vbTextCompare)

If BeginPos 0 Then

Text1.SelStart = BeginPos - 1

Text1.SelLength = Len(FindText.Text)

End If

End If

End Sub

Private Sub Fontcolor_Click()

CommonDialog1.ShowColor

Text1.ForeColor = CommonDialog1.Color

End Sub

Private Sub Form_Load()

Dim i As Integer

'加载图像

ImgNew.Picture = ImageUp.ListImages("New").Picture

ImgOpen.Picture = ImageUp.ListImages("Open").Picture

ImgSave.Picture = ImageUp.ListImages("Save").Picture

ImgUndo.Picture = ImageDisable.ListImages("Undo").Picture

Check_ImgPaste

Check_ImgCutCopy

'加载系统字体

For i = 0 To Screen.FontCount - 1

ComboFont.AddItem Screen.Fonts(i)

Next i

End Sub

Private Sub Form_Resize()

Dim TextTop As Long

'修改工具条大小

CoolBar1.Top = Me.ScaleTop

?????????????????????????????

??????????????????????????????????

???????????

????????????????????????????

??????????

????????????????????????????????????????????

????????

???????????????????

??????????

?????????????????????????????????????

???????????????? Me.ScaleLeft

Text1.Width = Me.ScaleWidth

If Me.ScaleHeight CoolBar1.Height Then

Text1.Height = Me.ScaleHeight - TextTop

Else

Text1.Height = 0

End If

End Sub

Private Sub ImgCopy_Click()

Copy_Click '复制

Check_ImgPaste

Check_ImgCutCopy

End Sub

Private Sub ImgCopy_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

'“按下”按钮

If Button = 1 Then

ImgCopy.Picture = ImageDown.ListImages("Copy").Picture

End If

End Sub

Private Sub ImgCopy_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Label1 = "将选择的文本复制到剪裁板"

'判断鼠标位置,显示不同图像

If Button = 1 And (X 0 And X ImgNew.Width And Y 0 And Y ImgNew.Height) Then

ImgCopy.Picture = ImageDown.ListImages("Copy").Picture

ElseIf Button = 1 Then

ImgCopy.Picture = ImageUp.ListImages("Copy").Picture

End If

End Sub

Private Sub ImgCopy_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 1 Then

'“抬起”按钮

ImgCopy.Picture = ImageUp.ListImages("Copy").Picture

End If

End Sub

Private Sub ImgCut_Click()

'If Text1.SelLength 0 Then

Cut_Click '剪切

Check_ImgPaste

Check_ImgCutCopy

'End If

End Sub

Private Sub ImgCut_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 1 Then

'“按下”按钮

ImgCut.Picture = ImageDown.ListImages("Cut").Picture

End If

End Sub

Private Sub ImgCut_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Label1 = "剪切选择的文字到剪裁板"

'判断鼠标位置,显示不同图像

If Button = 1 And (X 0 And X ImgNew.Width And Y 0 And Y ImgNew.Height) Then

ImgCut.Picture = ImageDown.ListImages("Cut").Picture

ElseIf Button = 1 Then

ImgCut.Picture = ImageUp.ListImages("Cut").Picture

End If

End Sub

Private Sub ImgCut_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = 1 Then

'“抬起”按钮

ImgCut.Picture = ImageUp.ListImages("C

C语言程序设计:班级电话本管理程序

/* 电话簿程序 */

/******头文件(.h)***********/

#include "stdio.h" /*I/O函数*/

#include "stdlib.h" /*标准库函数*/

#include "string.h"/*字符串函数*/

#include "ctype.h" /*字符操作函数*/

#define M 50 /*定义常数表示记录数*/

struct unit/*定义数据结构*/

{

char name[20]; /*姓名*/

char units[30]; /*单位*/

char tele[10]; /*电话*/

};

typedef struct unit ADDRESS;

/******以下是函数原型*******/

int enter(ADDRESS t[]); /*输入记录*/

void list(ADDRESS t[],int n); /*显示记录*/

void search(ADDRESS t[],int n); /*按姓名查找显示记录*/

int delete(ADDRESS t[],int n); /*删除记录*/

int add(ADDRESS t[],int n); /*插入记录*/

void save(ADDRESS t[],int n); /*记录保存为文件*/

int load(ADDRESS t[]); /*从文件中读记录*/

void display(ADDRESS t[]); /*按序号查找显示记录*/

void sort(ADDRESS t[],int n); /*按姓名排序*/

void qseek(ADDRESS t[],int n); /*快速查找记录*/

void copy(); /*文件复制*/

void print(ADDRESS temp); /*显示单条记录*/

int find(ADDRESS t[],int n,char *s) ; /*查找函数*/

int menu_select(); /*主菜单函数*/

/******主函数开始*******/

main()

{

int i;

ADDRESS adr[M]; /*定义结构体数组*/

int length; /*保存记录长度*/

clrscr(); /*清屏*/

for(;;)/*无限循环*/

{

switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/

{

case 0:length=enter(adr);break;/*输入记录*/

case 1:list(adr,length);break; /*显示全部记录*/

case 2:search(adr,length);break; /*查找记录*/

case 3:length=delete(adr,length);break; /*删除记录*/

case 4:length=add(adr,length); break; /*插入记录*/

case 5:save(adr,length);break; /*保存文件*/

case 6:length=load(adr); break; /*读文件*/

case 7:display(adr);break; /*按序号显示记录*/

case 8:sort(adr,length);break; /*按姓名排序*/

case 9:qseek(adr,length);break; /*快速查找记录*/

case 10:copy();break; /*复制文件*/

case 11:exit(0); /*如返回值为11则程序结束*/

}

}

}

/*菜单函数,函数返回值为整数,代表所选的菜单项*/

menu_select()

{

char s[80];

int c;

gotoxy(1,25);/*将光标定为在第25行,第1列*/

printf("press any key enter menu......\n");/*提示压任意键继续*/

getch(); /*读入任意字符*/

clrscr(); /*清屏*/

gotoxy(1,1);

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

printf(" 0. Enter record\n");

printf(" 1. List the file\n");

printf(" 2. Search record on name\n");

printf(" 3. Delete a record\n");

printf(" 4. add record \n");

printf(" 5. Save the file\n");

printf(" 6. Load the file\n");

printf(" 7. display record on order\n");

printf(" 8. sort to make new file\n");

printf(" 9. Quick seek record\n");

printf(" 10. copy the file to new file\n");

printf(" 11. Quit\n");

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

do{

printf("\n Enter you choice(0~11):"); /*提示输入选项*/

scanf("%s",s); /*输入选择项*/

c=atoi(s); /*将输入的字符串转化为整型数*/

}while(c0||c11); /*选择项不在0~11之间重输*/

return c; /*返回选择项,主程序根据该数调用相应的函数*/

}

/***输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/

int enter(ADDRESS t[])

{

int i,n;

char *s;

clrscr(); /*清屏*/

printf("\nplease input num \n"); /*提示信息*/

scanf("%d",n); /*输入记录数*/

printf("please input record \n"); /*提示输入记录*/

printf("name unit telephone\n");

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

for(i=0;in;i++)

{

scanf("%s%s%s",t[i].name,t[i].units,t[i].tele); /*输入记录*/

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

}

return n; /*返回记录条数*/

}

/*显示记录,参数为记录数组和记录条数*/

void list(ADDRESS t[],int n)

{

int i;

clrscr();

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

printf("name unit telephone\n");

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

for(i=0;in;i++)

printf("%-20s%-30s%-10s\n",t[i].name,t[i].units,t[i].tele);

if((i+1)%10==0) /*判断输出是否达到10条记录*/

{

printf("Press any key continue...\n"); /*提示信息*/

getch(); /*压任意键继续*/

}

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

}

/*查找记录*/

void search(ADDRESS t[],int n)

{

char s[20]; /*保存待查找姓名字符串*/

int i; /*保存查找到结点的序号*/

clrscr(); /*清屏*/

printf("please search name\n");

scanf("%s",s); /*输入待查找姓名*/

i=find(t,n,s); /*调用find函数,得到一个整数*/

if(in-1) /*如果整数i值大于n-1,说明没找到*/

printf("not found\n");

else

print(t[i]); /*找到,调用显示函数显示记录*/

}

/*显示指定的一条记录*/

void print(ADDRESS temp)

{

clrscr();

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

printf("name unit telephone\n");

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

printf("%-20s%-30s%-10s\n",temp.name,temp.units,temp.tele);

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

}

/*查找函数,参数为记录数组和记录条数以及姓名s */

int find(ADDRESS t[],int n,char *s)

{

int i;

for(i=0;in;i++)/*从第一条记录开始,直到最后一条*/

{

if(strcmp(s,t[i].name)==0) /*记录中的姓名和待比较的姓名是否相等*/

return i; /*相等,则返回该记录的下标号,程序提前结结束*/

}

return i; /*返回i值*/

}

/*删除函数,参数为记录数组和记录条数*/

int delete(ADDRESS t[],int n)

{

char s[20]; /*要删除记录的姓名*/

int ch=0;

int i,j;

printf("please deleted name\n"); /*提示信息*/

scanf("%s",s);/*输入姓名*/

i=find(t,n,s); /*调用find函数*/

if(in-1) /*如果in-1超过了数组的长度*/

printf("no found not deleted\n"); /*显示没找到要删除的记录*/

else

{

print(t[i]); /*调用输出函数显示该条记录信息*/

printf("Are you sure delete it(1/0)\n"); /*确认是否要删除*/

scanf("%d",ch); /*输入一个整数0或1*/

if(ch==1) /*如果确认删除整数为1*/

{

for(j=i+1;jn;j++) /*删除该记录,实际后续记录前移*/

{

strcpy(t[j-1].name,t[j].name); /*将后一条记录的姓名拷贝到前一条*/

strcpy(t[j-1].units,t[j].units); /*将后一条记录的单位拷贝到前一条*/

strcpy(t[j-1].tele,t[j].tele); /*将后一条记录的电话拷贝到前一条*/

}

n--; /*记录数减1*/

}

}

return n; /*返回记录数*/

}

/*插入记录函数,参数为结构体数组和记录数*/

int add(ADDRESS t[],int n)/*插入函数,参数为结构体数组和记录数*/

{

ADDRESS temp; /*新插入记录信息*/

int i,j;

char s[20]; /*确定插入在哪个记录之前*/

printf("please input record\n");

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

printf("name unit telephone\n");

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

scanf("%s%s%s",temp.name,temp.units,temp.tele); /*输入插入信息*/

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

printf("please input locate name \n");

scanf("%s",s); /*输入插入位置的姓名*/

i=find(t,n,s); /*调用find,确定插入位置*/

for(j=n-1;j=i;j--) /*从最后一个结点开始向后移动一条*/

{

strcpy(t[j+1].name,t[j].name); /*当前记录的姓名拷贝到后一条*/

strcpy(t[j+1].units,t[j].units); /*当前记录的单位拷贝到后一条*/

strcpy(t[j+1].tele,t[j].tele); /*当前记录的电话拷贝到后一条*/

}

strcpy(t[i].name,temp.name); /*将新插入记录的姓名拷贝到第i个位置*/

strcpy(t[i].units,temp.units); /*将新插入记录的单位拷贝到第i个位置*/

strcpy(t[i].tele,temp.tele); /*将新插入记录的电话拷贝到第i个位置*/

n++; /*记录数加1*/

return n; /*返回记录数*/

}

/*保存函数,参数为结构体数组和记录数*/

void save(ADDRESS t[],int n)

{

int i;

FILE *fp; /*指向文件的指针*/

if((fp=fopen("record.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/

{

printf("can not open file\n");/*没打开*/

exit(1); /*退出*/

}

printf("\nSaving file\n"); /*输出提示信息*/

fprintf(fp,"%d",n); /*将记录数写入文件*/

fprintf(fp,"\r\n"); /*将换行符号写入文件*/

for(i=0;in;i++)

{

fprintf(fp,"%-20s%-30s%-10s",t[i].name,t[i].units,t[i].tele);/*格式写入记录*/

fprintf(fp,"\r\n"); /*将换行符号写入文件*/

}

fclose(fp);/*关闭文件*/

printf("****save success***\n"); /*显示保存成功*/

}

/*读入函数,参数为结构体数组*/

int load(ADDRESS t[])

{

int i,n;

FILE *fp; /*指向文件的指针*/

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

{

printf("can not open file\n"); /*不能打开*/

exit(1); /*退出*/

}

fscanf(fp,"%d",n); /*读入记录数*/

for(i=0;in;i++)

fscanf(fp,"%20s%30s%10s",t[i].name,t[i].units,t[i].tele); /*按格式读入记录*/

fclose(fp); /*关闭文件*/

printf("You have success read data from file!!!\n"); /*显示保存成功*/

return n; /*返回记录数*/

}

/*按序号显示记录函数*/

void display(ADDRESS t[])

{

int id,n;

FILE *fp; /*指向文件的指针*/

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

{

printf("can not open file\n"); /*不能打开文件*/

exit(1); /*退出*/

}

printf("Enter order number...\n"); /*显示信息*/

scanf("%d",id); /*输入序号*/

fscanf(fp,"%d",n); /*从文件读入记录数*/

if(id=0idn) /*判断序号是否在记录范围内*/

{

fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移动文件指针到该记录位置*/

print(t[id]); /*调用输出函数显示该记录*/

printf("\r\n");

}

else

printf("no %d number record!!!\n ",id); /*如果序号不合理显示信息*/

fclose(fp); /*关闭文件*/

}

/*排序函数,参数为结构体数组和记录数*/

void sort(ADDRESS t[],int n)

{

int i,j,flag;

ADDRESS temp; /*临时变量做交换数据用*/

for(i=0;in;i++)

{

flag=0; /*设标志判断是否发生过交换*/

for(j=0;jn-1;j++)

if((strcmp(t[j].name,t[j+1].name))0) /*比较大小*/

{

flag=1;

strcpy(temp.name,t[j].name); /*交换记录*/

strcpy(temp.units,t[j].units);

strcpy(temp.tele,t[j].tele);

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

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

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

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

strcpy(t[j+1].units,temp.units);

strcpy(t[j+1].tele,temp.tele);

}

if(flag==0)break; /*如果标志为0,说明没有发生过交换循环结束*/

}

printf("sort sucess!!!\n"); /*显示排序成功*/

}

/*快速查找,参数为结构体数组和记录数*/

void qseek(ADDRESS t[],int n)

{

char s[20];

int l,r,m;

printf("\nPlease sort before qseek!\n"); /*提示确认在查找之前,记录是否已排序*/

printf("please enter name for qseek\n"); /*提示输入*/

scanf("%s",s); /*输入待查找的姓名*/

l=0;r=n-1; /*设置左边界与右边界的初值*/

while(l=r) /*当左边界=右边界时*/

{

m=(l+r)/2; /*计算中间位置*/

if(strcmp(t[m].name,s)==0) /*与中间结点姓名字段做比较判是否相等*/

{

print(t[m]); /*如果相等,则调用print函数显示记录信息*/

return ; /*返回*/

}

if(strcmp(t[m].name,s)0) /*如果中间结点小*/

l=m+1; /*修改左边界*/

else

r=m-1; /*否则,中间结点大,修改右边界*/

}

if(lr) /*如果左边界大于右边界时*/

printf("not found\n"); /*显示没找到*/

}

/*复制文件*/

void copy()

{

char outfile[20]; /*目标文件名*/

int i,n;

ADDRESS temp[M]; /*定义临时变量*/

FILE *sfp,*tfp; /*定义指向文件的指针*/

clrscr();/*清屏*/

if((sfp=fopen("record.txt","rb"))==NULL) /*打开记录文件*/

{

printf("can not open file\n"); /*显示不能打开文件信息*/

exit(1); /*退出*/

}

printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/

scanf("%s",outfile); /*输入目标文件名*/

if((tfp=fopen(outfile,"wb"))==NULL) /*打开目标文件*/

{

printf("can not open file\n"); /*显示不能打开文件信息*/

exit(1); /*退出*/

}

fscanf(sfp,"%d",n); /*读出文件记录数*/

fprintf(tfp,"%d",n);/*写入目标文件数*/

fprintf(tfp,"\r\n"); /*写入换行符*/

for(i=0;in;i++)

{

fscanf(sfp,"%20s%30s%10s\n",temp[i].name,temp[i].units,

temp[i].tele); /*读入记录*/

fprintf(tfp,"%-20s%-30s%-10s\n",temp[i].name,

temp[i].units,temp[i].tele); /*写入记录*/

fprintf(tfp,"\r\n"); /*写入换行符*/

}

fclose(sfp); /*关闭源文件*/

fclose(tfp); /*关闭目标文件*/

printf("you have success copy file!!!\n"); /*显示复制成功*/

}

C语言程序设计 班级学生成绩管理系统

设计课题一:班级成绩管理系统

一、 问题描述:

对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。

二、功能要求:

1、本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。

2、本系统显示这样的菜单:

请选择系统功能项:

a、 成绩录入

b、 成绩显示

c、 成绩保存

d、 成绩排序

e、 成绩修改(要求先输入密码)

f、 成绩统计

(1) 显示每门课程成绩最高的学生的基本信息

(2) 显示每门课程的平均成绩

(3) 显示超过某门课程平均成绩的学生人数

g、 退出系统

3、执行一个具体的功能之后,程序将重新显示菜单。

4、将学生成绩保存到文件中。

三、算法提示:

1、数据结构:结构体类型数组。

2、数据库结构:下表构成该系统的基本数据库。

姓名 学号 课程名称1 课程名称2 ●●●●●●

char Char float float

四、测试数据:

学生人数N=10

课程门数M=4

课程名:数学、语文、英语、政治

五、其它

对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。

问题补充:

今天谁能给我答案啊!!!!!!!急急!!!!!!!

提问者: 342123465 - 一级

最佳答案

C语言课程设计报告—班级成绩管理系统

需要分析:

学生成绩管理系统有13种功能。把这13个功能做成13个子函数。在主函当数中设计一个菜单对这13个子数进行管理。来实现对整个系统的操作。

根据课题的要求。每一个学生的包括姓名(char)、学号(char)、M门课程的成绩(float).再加上系统功能上的要求每一学生的信息还要总分和名次等。所以自然的想到要用结构体来定义每一个学生的信息结构。然后用链表把它们组成一个有序的整体。用对链表的操作来实现对所有学生信息的统一管理(成绩显示、成绩排序、成绩修改等)。最后为了以后按照处理后的顺序保存到文件中。

. 各函数的功能:

概要设计:

程序的模块组成:

主 函 数: int main()

新建函数:STUDENT *init()

输入函数 :STUDENT *create()

显示函数: void print(STUDENT *head)

删除函数: STUDENT *delete(STUDENT *head)

按名字寻找函数: void lookup(STUDENT *head)

保存函数: void save(STUDENT *head)

按总分排序函数: STUDENT *sort(STUDENT *head)

计算总分和均分函数: void computer(STUDENT *h)

修改函数: STUDENT *Modify(STUDENT *head,STUDENT *new)

按学号排序函数: STUDENT *index(STUDENT *h)

菜单函数:int menu_select()

各个函数的主要功能:

输入函数: 随时输入数据。

菜单函数:显示系统主菜单。

显示函数: 显示所有学生的信息。

寻找函数: 方便学生查找自己的成绩。

删除函数: 删除某学生的信息。

排序函数: 按总成绩排序。

按学号排序函数: 按学号排序。

插入函数: 可以插入新的信息。

保存函数: 保存好学生成绩,以免丢失。

统计函数:

l 显示每门课程成绩最高的学生的基本信息。

l 显示每门课程的平均成绩。

l 显示超过某门课程平均成绩的学生人数。

课题的功能模块的划分:

开始

菜单界面

功能选择

初始化函数

输入学生信息

删除学生信息

显示学生信息

查找学生信息

按成绩排序

保存到文件

从文件读数据

插入学生成绩

分类合计

退出系统

结束

详细设计: 整个系统除了主函数外,另外还有14个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下:

主函数 main()

利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。

菜单选择函数 int menu_select()

这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,返回菜单。

代码设计: 初始化函数 STUDENT *init()

这是一个无参函数,里面只有两个语句,它的作用是使链表初始化,使head的值为NULL和一个清屏语句。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!

输入记录函数 STUDENT *create() 这是一个无参函数,用来执行学生成绩记录的输入,当学生为@时停止输入,函数结束后,带回一个链表头的指针指向一下个学生的信息插在表头。

N-S流程图如下:

head=NULL无条件循环

指针p指向新开辟的单元

指针p是否为空

是 否

输入学号p-num

输出 p-num是否为@

内存 是 否

溢出 输入姓名p-name

停止 for(i=0;i3;i++)

输入 输入成绩

返回 p-sum=s;

菜单 p-average=(float)s/3;

显示记录函数 void print(STUDENT *head)

这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。

算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。重复执行此步聚直到p指针指向NULL为止。

N-S流程图如下:

p=head,使指向第一个结点

输出p所指向的结点

p指向一下个结点

当p指的不是表尾

程序调试:

由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。最后还是老师帮我帮我们找到了问题的所在——for 循环的次超过了链表中结点的数量。再就是自定义函数时由于课本的概念不清楚,多写了空格键,以至函数调用不出来。又如:在设计修改学生信息时的密密码时。当用户发现输入密码错误按了退格键后,因为“*”并没有消去。导致用户再次按退格键,又出现前面的情况。最终导致输入密码错误。所以用了两次退格键:

在对链表操作时,要特别链表指针的移动(p=p-next)和链表尾的判断 (p= =NULL)。没有指针的移动,就很容易出现死循环。而在运行过程中不能控制。所以你就会认为是死机。如果没有链表尾的判断。就会在运行过程出现想不到的错误。如:在显示链表信息时,后面就会出现乱码。

一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。

予我耐心解答的老师和同学,是他们为我小程序的成功起到了关键性的作用,那么多个日夜,如此多的困难,同学们勤恳塌实,从开始到结束,没有显出一点倦意,始终热情高涨,我感谢这种氛围,感谢学校提供的良好条件。

回顾起此次课程设计,至今我仍感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。

本次课程设计结束了,对于我的影响很大。我通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我知道自己哪些方面做得还不够。

但我出总结出了一点点的经验如下:

1、要对系统的功能和要求做出详细的分析,并合理分解任务。

2、把分解出来的子任务,做给一个相对独立的模块。

3、在设计一个模块之前,要简单构想一下总界面的显视情况。

4、针对构想出来的界面进行程序的编写。

最后,感谢老师您对我的指导和从百忙中抽空看我的设计,谢谢!

附件:

源程序:

#include "stdio.h" /*I/O函数*/

#include "stdlib.h" /*其它说明*/

#include "string.h" /*字符串函数*/

#include "conio.h" /*屏幕操作函数*/

#include "mem.h" /*内存操作函数*/

#include "ctype.h" /*字符操作函数*/

#include "alloc.h" /*动态地址分配函数*/

#include "dos.h"

#define N 4 /*定义常数*/

typedef struct z1 /*定义数据结构*/

{

char no[12];

char name[20];

int score[N];

float sum;

float average;

int order;

struct z1 *next;

}STUDENT;

/*以下是函数原型*/

STUDENT *init(); /*初始化函数*/

STUDENT *create(); /*创建链表*/

STUDENT *delete(STUDENT *h); /*删除记录*/

void print(STUDENT *h); /* 显示所有记录*/

void lookup(STUDENT *h); /*查找*/

void save(STUDENT *h); /*保存*/

STUDENT *load(); /*读入记录*/

void computer(STUDENT *h); /*计算总分和均分*/

STUDENT *Modify(STUDENT *h); /*修改记录*/

void append(); /*追加记录*/

STUDENT *sort(STUDENT *h); /*按总分排序*/

STUDENT *index(STUDENT *h); /*按学号排序*/

int menu_select(); /*菜单函数*/

/******主函数开始*******/

main()

{

int i;

STUDENT *head; /*链表定义头指针*/

printf("\n\n\n\n\n\n\n\n\n");

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

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

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

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

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

printf("\n");

printf("\n");

printf("\n");

sleep(2);

head=init(); /*初始化链表*/

clrscr(); /*清屏*/

for(;;) /*无限循环*/

{

switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/

{ /*值不同,执行的函数不同,break 不能省略*/

case 0:head=init();break; /*执行初始化*/

case 1:head=create();break; /*创建链表*/

case 2:print(head);break; /*显示全部记录*/

case 3:head=delete(head);break; /*删除记录*/

case 4:lookup(head);break; /*按名字查找记录*/

case 5:save(head);break; /*保存文件*/

case 6:head=load(); break; /*读文件*/

case 7:computer(head);break; /*计算总分和均分*/

case 8:head=Modify(head); break; /*修改记录,一般会插在表尾*/

case 9:head=sort(head);break; /*按部分排序*/

case 10:append();break; /*追加记录*/

case 11:head=index(head);break; /*按学号排序*/

case 12: exit(0); /*如菜单返回值为12程序结束*/

}

}

}

/*菜单函数,返回值为整数*/

menu_select()

{

char *menu[]={"***************MENU***************", /*定义菜单字符串数组*/

" 00. init list", /*初始化*/

" 01. Enter list", /*输入记录*/

" 02. print list ", /*显示单链表中所有记录*/

" 03. Delete a record from list", /*从表中删除记录*/

" 04. Search record on name", /*按照姓名查找记录*/

" 05. Save the file", /*将单链表中记录保存到文件中*/

" 06. Load the file", /*从文件中读入记录*/

" 07. compute the score", /*计算所有学生的总分和均分*/

" 08. Modify an information ", /*修改某学号的信息*/

" 09. sort to make new file", /*排序*/

" 10. append record to file", /*追加记录到文件中*/

" 11. index on nomber", /*按学号排序*/

" 12. Quit"}; /*退出*/

char s[3]; /*以字符形式保存选择号*/

int c,i; /*定义整形变量*/

gotoxy(1,1); /*移动光标*/

textcolor(YELLOW); /*设置文本显示颜色为黄色*/

textbackground(BLUE); /*设置背景颜色为蓝色*/

gotoxy(10,2); /*移动光标*/

putch(0xc9); /*输出左上角边框┏*/

for(i=1;i44;i++)

putch(0xcd); /*输出上边框水平线*/

putch(0xbb); /*输出右上角边框 ┓*/

for(i=3;i20;i++)

{

gotoxy(10,i);putch(0xba); /*输出左垂直线*/

gotoxy(54,i);putch(0xba); /*输出右垂直线*/

}

gotoxy(10,20);putch(0xc8); /*输出左上角边框┗*/

for(i=1;i44;i++)

putch(0xcd); /*输出下边框水平线*/

putch(0xbc); /*输出右下角边框┛*/

window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/

clrscr(); /*清屏*/

for(i=0;i16;i++) /*输出主菜单数组*/

{

gotoxy(10,i+1);

cprintf("%s",menu[i]);

}

textbackground(BLACK); /*设置背景颜色为黑色*/

window(1,1,80,25); /*恢复原窗口大小*/

gotoxy(10,21); /*移动光标*/

do{printf("\n make by wenwei");

printf("\n Enter you choice(0~13):"); /*在菜单窗口外显示提示信息*/

scanf("%s",s); /*输入选择项*/

c=atoi(s); /*将输入的字符串转化为整形数*/

}while(c0||c14); /*选择项不在0~14之间重输*/

return c; /*返回选择项,主程序根据该数调用相应的函数*/

}

STUDENT *init()

{ clrscr();

return NULL;

}

/*创建链表*/

STUDENT *create()

{

int i; int s;

STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/

clrscr();

for(;;)

{

info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/

if(!info) /*如果指针info为空*/

{

printf("\nout of memory"); /*输出内存溢出*/

return NULL; /*返回空指针*/

}

inputs("enter no:",info-no,11); /*输入学号并校验*/

if(info-no[0]=='@') { clrscr();break; } /*如果学号首字符为@则结束输入,清屏后返回*/

inputs("enter name:",info-name,15); /*输入姓名,并进行校验*/

printf("please input %d score \n",N); /*提示开始输入成绩*/

s=0; /*计算每个学生的总分,初值为0*/

for(i=0;iN;i++) /*N门课程循环N次*/

{

do{

printf("score%d:",i+1); /*提示输入第几门课程*/

scanf("%d",info-score[i]); /*输入成绩*/

if(info-score[i]100||info-score[i]0) /*确保成绩在0~100之间*/

printf("bad data,repeat input\n"); /*出错提示信息*/

}while(info-score[i]100||info-score[i]0);

s=s+info-score[i]; /*累加各门课程成绩*/

}

info-sum=s; /*将总分保存*/

info-average=(float)s/N; /*求出平均值*/

info-order=0; /*未排序前此值为0*/

info-next=h; /*将头结点做为新输入结点的后继结点*/

h=info; /*新输入结点为新的头结点*/

clrscr();

}

return(h); /*返回头指针*/

}

/*输入字符串,并进行长度验证*/

inputs(char *prompt, char *s, int count)

{

char p[255];

do{

printf(prompt); /*显示提示信息*/

scanf("%s",p); /*输入字符串*/

if(strlen(p)count)printf("\n too long! \n"); /*进行长度校验,超过count值重输入*/

}while(strlen(p)count);

strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/

}

/*输出链表中结点信息*/

void print(STUDENT *h)

{

int i=0; /* 统计记录条数*/

STUDENT *p; /*移动指针*/

clrscr(); /*清屏*/

p=h; /*初值为头指针*/

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

printf("|rec|nO | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");

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

while(p!=NULL) /*只要p不是尾结点,就输出记录*/

{

i++;

printf("|%3d|%-10s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6.2f | %3d |\n", i, p-no,p-name,p-score[0],p-score[1],p-score[2],p-score[3],p-sum,p-average,p-order);

p=p-next;

}

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

getch(); /*输入任一键返回主菜单*/

clrscr(); /*清屏*/

}

/*删除记录*/

STUDENT *delete(STUDENT *h)

{

STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/

char s[12]; /*存放学号*/

char *pass="wenwei28";

char a[20],b=NULL;

int i=0;

clrscr();

printf("Input your password:");

while((i20)(b!='\r'))

{ b=getch(); /*无回显输入*/

if(b==8)

{ if(i0)

{a[--i]=NULL;

putchar(8); /*退格键*/

putchar(' '); /*以空格代替*/

putchar(8);

}

else putchar(7); /*没有任何字符的退格,响铃警告*/

}

else if(b!='\r')

{ a[i++]=b; /*只要不是退格和回车就接受*/

putchar('*');

}

else

{a[i]=NULL; break; /*密码输入完了,记得加个NULL到后面*/

}

}

if(strcmp(a,pass)!=0)

{clrscr();

printf("Password is mistake Tow seconds to return!");

sleep(2);clrscr();return h;

}

else {printf("Password is OK! Welcome to come!"); sleep(3);

}

clrscr(); /*清屏*/

printf("please deleted no\n"); /*显示提示信息*/

scanf("%s",s); /*输入要删除记录的学号*/

q=p=h; /*给q和p赋初值头指针*/

while(strcmp(p-no,s)p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/

{

q=p; /*将p指针值赋给q作为p的前驱指针*/

p=p-next; /*将p指针指向下一条记录*/

}

if(p==NULL) /*如果p为空,说明链表中没有该结点*/

{ printf("\nlist no %s student\n",s);sleep(2);clrscr();return h;}

else /*p不为空,显示找到的记录信息*/

{

printf("*********************************have found********************************\n");

printf("|no | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");

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

printf("|%-12s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6-5.2f | %3d |\n", p-no,

p-name,p-score[0],p-score[1],p-score[ q=p; /*保存当前结点的指针,作为下一结点的前驱*/

p=p-next; /*指针后移,新读入数据链到当前表尾*/

}

q-next=NULL; /*最后一个结点的后继指针为空*/

fclose(fp); /*关闭文件*/

printf("---You have success read data from file!!!---\n");

getch(); /*按任意键返回主菜单*/

clrscr();

return h; /*返回头指针*/

}

/*成绩统计*/

void computer(STUDENT *h)

{

STUDENT *p,*t,*q; /*定义移动指针*/

float saverage[N]={0}; /*均分初值为0*/

int i;

clrscr();

for (i=0;iN;i++)

{ int n=0,j=0; /*保存记录条数初值为0*/

long s=0; /*总分初值为0*/

p=h; /*从头指针开始*/

while(p!=NULL) /*当p不为空时处理*/

{

s+=p-score[i]; /*累加总分*/

j++; /*统计记录条数*/

p=p-next; /*指针后移*/

h; /*返回头指针

}

软件开发流程图示例关于班级管理的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于软件开发项目管理整个流程图、软件开发流程图示例关于班级管理的信息别忘了在本站进行查找喔。

扫码二维码