选修课一张表:课程,课程编号
学生一张表:个人信息,学号(班级学院可在做一张关联也可在这张表里,关联的话,会有一个班级的属性,会再多一张班级表)
映射关系一张表:课程编号、学号(成绩)
通过最后一张表关联前两张就可以了,可以再最后一张里加成绩,就成了成绩与科目人关联的表了
主键、外键都是学号和课程编号
去以下网站看看
>
29
--学生信息(学号,姓名,性别,籍贯,班级编号)和成绩表(学号,课程编号,成绩,是否重修
--学生信息表中学号为主键,其他信息都不允许为空
--通过学号与成绩表形成一个一对多的关系,成绩表中的成绩的默认值为0,但必须在0~100之间。
CREATE TABLE 学生信息
(
学号 INT IDENTITY
NOT NULL
PRIMARY KEY ,
姓名 VARCHAR(50) NOT NULL ,
性别 BIT NOT NULL
DEFAULT (0) ,
籍贯 VARCHAR(50) NOT NULL ,
班级编号 INT NOT NULL
);
CREATE TABLE 成绩
(
学号 INT NOT NULL
FOREIGN KEY REFERENCES 学生信息 (学号) ,
课程编号 INT NOT NULL ,
成绩 INT NOT NULL
DEFAULT (0) ,
是否重修 BIT NOT NULL
DEFAULT (0)
);
ALTER TABLE 成绩 ADD CONSTRAINT ck_成绩 CHECK(100 >= 成绩 AND 成绩>=0);
SELECT FROM 学生信息;
SELECT FROM 成绩;
随着社会的发展,计算机的优势和普及使得SSM班级管理系统的开发成为必需。SSM班级管理系统主要是借助计算机,通过对首页、商铺信息、班级综合评测数据、综合评测数据商品、新闻资讯、我的、跳转到后台、购物车等信息进行管理。减少管理员的工作,同时也方便广大用户对个人所需班级综合评测数据的及时查询以及管理。
SSM班级管理系统的开发过程中,采用B / S架构,主要使用Java技术进行开发,结合最新流行的SpringMVC和Mybatis的SSM框架技术。中间件服务器是Tomcat服务器,使用Mysql数据库和Eclipse开发环境。该SSM班级管理系统其主要功能包括管理员:首页、学生管理、班委管理、活动成绩管理、科目信息管理、德育成绩管理等功能。
本论文对SSM班级管理系统的发展背景进行详细的介绍,并且对系统开发技术进行介绍,然后对系统进行需求分析,对SSM班级管理系统业务流程、系统结构以及数据都进行详细说明。
关键词:SSM班级管理系统,Mysql数据库,Java技术
引言
数字化校园建设是各大高校网络信息化建设部门重点实施的项目,它从人、财、物等方面全面提高高校的教学、科研和管理的水平。狭义上讲,数字化校园建设是指以数字化信息和网络为基础,实现高校里面的各项资源、管理和服务最大程度的数字化,并提供信息化的手段对这些数字化资源进行高效的使用。数字化校园建设形成了数字化的科研、教学和生活环境,为广大师生提供简便、快捷的网络化信息服务。
数字化校园建设为高校信息化建设提供了较好的发展机会同时也提出了较高的要求。当前,高校信息化建设己经发展到了国际互联、校际互联、静态资源共享、动态信息、发布、远程教学和协作工作的阶段,实现了信息化建设的平面式发展。接下来,高校信息化需要向深层次发展,不断加深每一模块的发展。实现教育、教学信息、与资源的最大程度的数字化,建设包括教学、学生、财务、档案等覆盖校内主要相关业务的管理信息系统并提供实现数字化校园的硬件条件是未来高校信息化发展的趋势。
伴随着B/S及门户技术的快速发展,某高校己经建成了统一门户、统一身份认证以及共享共用数据库标准,并开始实现多个面向管理的应用系统。
第一章 开发技术介绍
此次B/S结构、Java技术以及mysql数据库是该班级管理的主要开发技术,然后对系统的整体设计、数据库设计、功能模块设计、系统页面设计以及系统程序设计进行了详细的研究与规划。
11 系统开发平台
在该班级管理中,Eclipse 技术可以给用户带来极大方便,其主要特点就是可以使用户学习起来方便、快捷,另一方面就是信息储存量也是非常大的,该功能主要被应用为数据库中进行查询和编程。并且该功能的数据应用比较灵活,通过我们现在的发展可以得知,只要利用一小部分代码就可以来实现非常强大的功能。因此,该系统数据库开发主要是由Eclipse 技术进行系统代码管理。
12 平台开发相关技术
121 B/S架构
B/S结构的特点也非常多,例如在很多浏览器中都可以做出信号请求。并且可以适当的减轻用户的工作量,通过对客户端安装或者是配置少量的运行软件就能够逐步减少用户的工作量,这些功能的 *** 作主要是由服务器来进行控制的,由于该软件的技术不断成熟,最主要的特点就是与浏览器相互配合为软件开发带来了极大的便利,不仅能够减少开发成本,还能够不断加强系统的软件功能,层层相互独立和展现层是该B/S结构完成相互连接的主要特性。
122 Java技术介绍
Java语言擅长开发互联网类应用和企业级应用,现在已经相当的成熟,而且也是目前使用最多的编程语言之一。Java语言具有很好的面向对象性,可以符合人的思维模式进行设计,封装是将对象的属性和方法尽可能地隐藏起来,使得外界并不知道是如何实现的,外界能通过接口进行访问,继承是指每个类都会有一个父类,所有的子类都有父类的方法,可以进行继承,但是只有final修饰的类不能被继承,通过继承可以使得代码得到重新利用,能够提高软件的开发效率,也是多态的前提。
Java就像C语言、C#语言等,也是一种程序开发语言,而它的特点就是面向对象。作为一种程序开发与设计的语言,它有很多特性,主要特性就是面向对象、夸平台以及可以分布式运行。Java语言项目不但安全性高、稳定性强,而且可以并发运行。
为了提高开发的速度及效率,必须做到代码的重复使用和简化程序的复杂度,要达到上述的要求java语言通过封装、继承与多态等方式实现,这样可以很大程度上达到信息的封装,提高代码复用率,减少冗余度,提高效率。在Java中难能可贵的一点就是它的垃圾回收机制,它使得以往程序中大量存在的内存泄漏的问题得到了较好的缓解。所谓的内存泄漏就是程序向 *** 作系统申请了一块存储空间,比如定义了一个变量,但是由于某种原因,这个变量一直没有使用,但是仍然占用着系统的内存空间,可能一两个这样的变量对程序和 *** 作系统造不成什么大的影响,但是试想如果这样的变量定义的多了系统的内存空间就会一步步减少,从而造成机器的性能降低甚至宕机。但是在Java中有垃圾回收机制的存在,这种机制极大地避免了内存泄漏的出现,在Java虚拟机中,垃圾回收机制会对长时间没有引用变量指向的对象实施垃圾回收,简单的说就是将这个对象销毁,以避免内存泄漏的情况出现。
123 SSM框架
当今流行的“SSM组合框架”是Spring + SpringMVC + MyBatis的缩写,受到很多的追捧,“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架,通常更简单的数据源。Spring属于一个轻量级的反转控制框架(IoC),但它也是一个面向表面的容器(AOP)。SpringMVC常常用于控制器的分类工作模式,与模型对象分开,程序对象的作用与自动取款机进行处理。这种解耦治疗使整个系统的个性化变得更加容易。MyBatis是一个良好的可持续性框架,支持普通SQL查询,同时允许对存储过程的高级映射进行数据的优化处理。大型Java Web应用程序的由于开发成本太高,开发后难以维护和开发过程中一些难以解决的问题,而采用“SSM组合框架”,它允许建立业务层次结构,并为这个问题提供良好的解决方案。
第二章 系统分析
通过对系统功能模块分析可以得知,主要是对项目元素组合、分解和更换做出相应的单元,再通过系统模块来规划出一个原则,系统的设计首先是围绕管理员需求进行开发设计的,主要是为了能够更好的管理信息和服务于用户,其次就是围绕班级综合评测数据进行设计,最终的设计必须要满足班级管理的需求,这样才能够实现系统的最大意义和价值,并且在设计的时候一定要避免代码相互重复的情况发生。
21 可行性分析
可行性分析是每开发一个项目必不可少的一部分,可行性分析可以直接影响一个系统的存活问题,针对开发意义进行分析,还有就是是否可以通过所开发的系统来弥补传统班级综合评测数据模式的不足,是否能够更好的解决班级综合评测数据问题等,通过对该班级管理的开发设计,不仅能够逐步减少工作人员的工作量,而且还可以进行高效工作和管理。所以该系统的开发实现了最大的意义和价值,在系统完成后,利益是否大过于成本,是否能够达到预期效果,这些方面都要进行可行性分析,再通过分析之后,就可以决定是否开发此系统。该班级管理的开发设计中,以下几点进行了可行性分析:技术可行性:通过Java技术的采用,由于该技术不断成熟,所以使用该技术设计班级管理是具有可行性的。经济可行性:在开发过程中,系统完成后的利益是否大过于开发成本。 *** 作可行性:班级管理的开发设计中,方便用户的可 *** 作性和实用性。
211 技术可行性
由于Java技术的不断成熟,所以它在本次班级管理中是非常重要的,该系统的开发主要是基于服务端采用Java 、B/S结构和mysql数据库进行开发设计的。通过对这些技术进行使用,从而保证了系统的完整性和简单性。并且在数据库中保证数据的安全性和稳定性。在校时间我们对Java语言技术和mysql数据库技术进行了学习和交流,并且对软件测试也是简单的了解,然后根据这些销售方式我们可以做出一个简单的系统开发、检验和辨别。通过Java技术和Mysql数据库的相互配合开发出一个高效、稳定的班级管理。
(1)轻量级系统,使用灵活:班级管理,设计时,考虑到不同使用者的习惯,让系统比较轻量级,便于安装,也完成了系统所具备的所有功能,在以上基础上,通过系统测试与优化,让 *** 作更加灵活。
(2)系统开发0成本:该班级管理,以开源的Windows 7 *** 作系统为基础,采用Java技术编码开发,并使用MySQL轻量级数据库,没有多余的开发成本。
(3)覆盖范围:任何城市,都能安装使用本次设计的班级管理,对系统使用方没有严格的规定,平台搭建好了就能使用。
212 经济可行性
通过经济效益和社会价值来决定一个系统的存活问题,是否通过开发班级管理来帮助管理员减少工作,是否能够方便用户的使用,假如开发的软件不能够实现成本节约和资源节约,并且还要投入大量的时间、经济和精力,那么这个系统的开发设计是没有意义和价值的,就不具备开发设计的条件。
213 *** 作可行性
此次开发的班级管理登录界面是我们最常见的一种登录窗口进行造成的,只需通过电脑就可以登录访问,没有那些复杂的登录过程。该班级管理主要是采用B/S结构、Java语言技术以及mysql数据库进行开发设计的,使得系统的开发更高效和稳定,也体现出来该系统的的现代化和规范化。用户可以轻松的进行学习,其系统主要特点就是易 *** 作和易管理。
22 系统性能分析
1系统功能完整性:根据系统每一个功能模块,都能够设计出当初的算法和代码,用户信息主要是以文字和表格的模式进行介绍。
2系统运行分析:系统中的每一个功能都要有相应的代码和编写数据的关系。系统的物理的数据主要是通过需求分析和可行性分析进行分析和显示的。
3界面设计:系统中的软件都是由不同的代码来进行处理和分析的,并且保证了系统界面的易 *** 作性能。
4安全分析:不同的角色要有不同的信息,所以我们登录系统时必须要使用自己的账号和密码进行登录,不能随意进行 *** 作,这样才可以保证系统的安全性。
23 系统功能需求分析
任务需求分析是每个系统开发设计必不可少的一部分,系统质量的好坏可以直接影响系统的存活问题,所以我们必须要将任务需求分析做到位,班级管理的设计在初期的分析是尤为重要的,通过任务分析可以更顺利的进行系统设计,并且保证了用户的满意度。
设计课题一:班级成绩管理系统
一、 问题描述:
对一个有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;i<3;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 "stdioh" /I/O函数/
#include "stdlibh" /其它说明/
#include "stringh" /字符串函数/
#include "conioh" /屏幕 *** 作函数/
#include "memh" /内存 *** 作函数/
#include "ctypeh" /字符 *** 作函数/
#include "alloch" /动态地址分配函数/
#include "dosh"
#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;i<44;i++)
putch(0xcd); /输出上边框水平线/
putch(0xbb); /输出右上角边框 ┓/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /输出左垂直线/
gotoxy(54,i);putch(0xba); /输出右垂直线/
}
gotoxy(10,20);putch(0xc8); /输出左上角边框┗/
for(i=1;i<44;i++)
putch(0xcd); /输出下边框水平线/
putch(0xbc); /输出右下角边框┛/
window(11,3,53,19); / 制作显示菜单的窗口,大小根据菜单条数设计/
clrscr(); /清屏/
for(i=0;i<16;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(c<0||c>14); /选择项不在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;i<N;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\nSTUDENT\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| %62f | %62f | %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((i<20)&&(b!='\r'))
{ b=getch(); /无回显输入/
if(b==8)
{ if(i>0)
{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| %62f | %6-52f | %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;i<N;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; /返回头指针
}
首先定义三个表,学生(id,sno,name),课程(cid,cname),成绩表(sid,id,cid,score),这样,数据库表基本定义完成,这个是数据库 *** 作的关键,接下来用sql语句给每张表插入数据:例如学生表,id自增长
insert into student(sno,sname) values(学号,学生姓名)
参考一下。
以上就是关于学生信息管理系统的数据库设计全部的内容,包括:学生信息管理系统的数据库设计、请问有没有人可以知道班级信息管理系统一般有哪些功能怎样做呢、在教学管理数据库中新建班级表 *** 作步骤是等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)