c++学生选课系统设计报告

合集下载

c语言课程设计学生选课系统

c语言课程设计学生选课系统

c语言课程设计学生选课系统一、教学目标本课程的目标是让学生掌握C语言编程基础,能够运用C语言设计学生选课系统。

具体目标如下:1.知识目标:学生需要掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基础知识。

2.技能目标:学生能够运用C语言编写简单的程序,具备一定的编程能力,能够独立设计并实现学生选课系统的核心功能。

3.情感态度价值观目标:学生通过本课程的学习,能够培养对计算机编程的兴趣和热情,提高解决问题的能力,培养团队协作和自主学习的意识。

二、教学内容根据课程目标,教学内容主要包括以下几个部分:1.C语言基础知识:包括基本语法、数据类型、运算符、控制结构等。

2.函数:包括函数的定义、声明、调用等。

3.数组和字符串:包括一维数组、多维数组、字符串的基本操作等。

4.指针:包括指针的基本概念、指针与数组、指针与函数等。

5.结构体和文件:包括结构体的定义和使用、文件的读写操作等。

6.学生选课系统的设计与实现:包括系统需求分析、系统设计、核心功能实现等。

三、教学方法为了达到课程目标,我们将采用以下教学方法:1.讲授法:通过讲解C语言的基本语法、数据类型、运算符、控制结构等知识,让学生掌握C语言的基础知识。

2.案例分析法:通过分析实际的学生选课系统的案例,让学生了解并掌握系统的设计与实现方法。

3.实验法:让学生通过动手编写程序,巩固所学知识,提高编程能力。

4.小组讨论法:分组让学生讨论并解决问题,培养团队协作和自主学习的意识。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《C语言程序设计》等相关教材。

2.参考书:提供相关的C语言编程参考书籍,供学生自主学习。

3.多媒体资料:制作课件、教学视频等,丰富教学手段,提高学生的学习兴趣。

4.实验设备:提供计算机实验室,让学生能够进行上机实验,提高编程能力。

五、教学评估为了全面、客观、公正地评估学生的学习成果,我们将采用以下评估方式:1.平时表现:通过学生在课堂上的参与度、提问回答、小组讨论等表现,评估学生的学习态度和积极性。

c学生选课系统-课程设计报告

c学生选课系统-课程设计报告

2016-2017学年第二学期《高级语言程序设计》课程设计报告题目:学生选课系统专业:网络工程(对口)班级:16(3)班姓名:代应豪指导教师:代美丽成绩:计算机学院2017 年4月25 日目录一需求分析 (1)三详细设计 (2)1.数据定义 (2)2.算法流程图 (2)四函数 (5)五测试 (6)六设计总结 (9)七参考文献 (10)八源程序 (10)一需求分析数据结构可用结构体,包括课程和选修两个结构体,其中课程结构体成员结构体成员包括课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期。

选修结构体成员包括学号,课程编号,该结构体的建立主要是为了查询某门课程学生选修情况。

二总体设计系统由哪几个功能模块构成,给出功能模块图。

C中模块化的工具是函数根据上面的需求分析,可以将这个系统的设计分为如下七大模块:选课模块、按学分查找模块、按编号查找模块、查看课程模块、查看选课情况模块、课程输入模块、完成选择模块。

三详细设计1.数据定义2.算法流程图(1)录入课程信息表(2)课程管理(3)录入课程信息(4)学生信息管理(5)学生选课(6)系统信息及查看系统(7)退出系统、四函数1.struct couse * head1;结构2. void keyboardc()//录入课程子函数(从键盘录入)3. void filec()//录入键盘子函数(从文件录入)4. void inputc()//录入课程主函数5. void insertc(struct couse *incouse)//课程管理子函数(增加课程)6. void delc(int num1)//课程管理子函数(删除课程)7. void elect(struct student * s)//选课8. void cheak()//学生选课子函数(查询可选课程)9. void back(struct student * p)//退课10. void hcheak()//学生选课子函数(查询已选课程)11.void elective()//学生选课主函数12.void listc()//输出课程信息13.void lists()//输出学生信息14.void intoc()//存储课程信息15.void intos()//存储学生信息16.void into()//存储信息17.void store()//信息主函数18. int main()//主函数五测试1.主菜单2.录入课程信息3.从键盘输入4.从文件输入5.学生选课菜单6.学生信息管理7.管理员输入课程信息界面六设计总结问题一:无法读取文txt文件。

学生选课系统分析报告

学生选课系统分析报告

学生选课系统分析报告题目:学生选课系统班级:电子商务094 组员:魏红秀蒋汉玉胡燕杜梅潘小凤董梦云指导教师:王召义日期: 2011-5-22目录一、系统分析背景魏红秀蒋汉玉 (3)二、选课系统功能分析董梦云杜梅潘小凤 (3)三、系统分析胡燕蒋汉玉魏红秀 (3)(一)管理员用户登录 (4)(二)教师用户登录 (4)(三)学生用户登录 (4)四、业务流程分析蒋汉玉 (4)业务流程图1-1 (5)五、数据流程分析魏红秀 (5)数据流程图1-2 (6)六、分析总结全组组员 (6)学生选课系统分析报告一、系统分析背景在时下这个飞速发展的信息社会中,直到今天仍然没有一套完善可行的学生信息管理系统出现在学校里。

每年,从大专生、本科生到硕士生、博士生,几千人的入学、升学、毕业,全要由教务处和各系老师人工管理。

信息量之巨大,工作量之繁重,是难以想象的。

因此,学校和各个系都要安排多名教师专门负责学生学籍管理,浪费了大量的人力资源。

然而,即使这样,管理仍然谈不上井井有条。

而另一方面,当我们还是高中生的时候就听说大学实行的是“学分制”,也就是说,我们不必再天天按照老师安排的课程去学习,而是可以在一些必修课之外,随意选择我们喜爱和感兴趣的课去学习。

但是,当我们真正步入校园之后才发现,这里仍然是所谓的“学年制”,即每学期的课程都是学校安排的,学生没有选择的自由,而且课程的安排由于各方面诸多的原因经常有不适之处,尤其是先行课的问题。

最后,从社会这方面讲,学校的软件系统也是衡量该学校整体水平的一个重要因素。

我们所追求的是同学坐在家里动一动鼠标,就能查询到自己各方面的资料,包括选课、成绩、个人信息等。

二、选课系统功能分析本选课系统既面向教务处,又面向教师和学生。

不同的人,不同的身份操作的权限也不同。

作为教师,他可以向教务处申请增加、删除、修改课程信息,并随时了解选修本课的学生名单,还可以输入并分析考试成绩。

作为教务处管理员,它的权限是最宽的。

学生选课系统c课程设计

学生选课系统c课程设计

学生选课系统c 课程设计一、教学目标本课程旨在让学生掌握学生选课系统C的基本原理和使用方法。

知识目标包括了解学生选课系统的功能、结构和常用技术,理解面向对象设计的基本概念和方法。

技能目标包括能够使用学生选课系统C进行课程选择和排课,能够进行简单的系统设计和优化。

情感态度价值观目标包括培养学生对编程和计算机科学的兴趣和热情,提高学生解决问题的能力和创新精神。

二、教学内容本课程的教学内容主要包括学生选课系统C的基本原理、系统结构和常用技术,面向对象设计的基本概念和方法,以及学生选课系统C的实践应用。

具体包括以下几个部分:1.学生选课系统C的基本原理:介绍学生选课系统C的定义、功能和特点,让学生了解学生选课系统C的基本概念。

2.学生选课系统C的系统结构:讲解学生选课系统C的组成部分,包括数据库、服务器和客户端等,让学生了解学生选课系统C的架构和运行机制。

3.学生选课系统C的常用技术:介绍学生选课系统C中常用的技术,如SQL、Java等,让学生掌握学生选课系统C的开发和实现方法。

4.面向对象设计的基本概念和方法:讲解面向对象设计的基本原则和方法,如封装、继承和多态等,让学生掌握面向对象设计的思维方式和实际应用。

5.学生选课系统C的实践应用:通过实际操作,让学生学会使用学生选课系统C进行课程选择和排课,培养学生的实际操作能力。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学。

包括:1.讲授法:通过讲解学生选课系统C的基本原理、系统结构和常用技术,让学生掌握基本概念和知识。

2.讨论法:通过学生进行小组讨论,引导学生思考和探讨学生选课系统C的实际应用问题和解决方案。

3.案例分析法:通过分析典型案例,让学生了解学生选课系统C的实际应用场景和设计方法。

4.实验法:通过实际操作,让学生学会使用学生选课系统C进行课程选择和排课,培养学生的实际操作能力。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选择合适的教材,为学生提供系统的学习资料。

学生选课信息系统数据库课程设计报告(1)

学生选课信息系统数据库课程设计报告(1)

学生选课信息系统数据库课程设计报告(1)学生选课信息系统数据库课程设计报告一、设计背景学生选课是高校本科教育的重要环节之一,选课过程需要学生、教师和管理员之间的良好合作。

为了方便学生选课,提高教学质量,开发一个适合本校实际需求的学生选课信息系统是非常有必要的。

二、系统需求1. 前台系统学生登录系统后可以进行选课、退课和查询课程信息等操作。

系统提供课程介绍和授课教师信息,方便学生选择。

2. 后台系统管理员需要对系统的课程信息、学生选课信息进行管理,包括添加、删除、修改课程信息,管理选课限制,查询学生选课情况等。

3. 数据库设计系统需要设计数据库,存储学生、教师和课程信息,以及学生选课信息的记录。

三、系统功能1. 学生功能(1)学生登录系统进行选课、退课操作。

(2)学生可以查看选课情况、课程信息和授课教师信息。

2. 教师功能(1)教师登录系统可以查看自己的授课情况和课程信息。

(2)教师可以对自己的课程信息进行修改。

3. 管理员功能(1)管理员登录系统可以添加、删除、修改课程信息。

(2)管理员可以设置课程选课限制,管理学生选课情况和课程信息。

四、系统实现1. 前台系统使用HTML、CSS、JavaScript等技术进行开发,实现学生、教师等用户操作界面。

2. 后台系统使用PHP或Java等技术进行开发,实现管理员对系统各个功能的管理操作。

3. 数据库使用MySQL或Oracle等关系型数据库进行设计,存储学生、教师和课程信息、学生选课记录等。

五、系统优化为了提高系统的性能和可用性,需要对系统进行优化,包括:1. 对数据库进行索引优化,提高查询速度。

2. 在前台系统中进行数据缓存,减少对后台系统的请求次数,提高系统响应速度。

3. 对系统进行安全性优化,防止非法入侵和数据泄漏。

六、系统测试在开发完成后,需要进行系统测试,包括功能测试和性能测试。

针对测试中发现的问题和缺陷,进行修复和优化,最终达到高质量的系统交付效果。

选课系统课设报告

选课系统课设报告

选课系统课设报告全文共四篇示例,供读者参考第一篇示例:选课系统课设报告一、引言随着教育领域的不断发展,高校教学管理系统也在不断完善,选课系统作为高校教学管理系统的一个重要组成部分,对学生和教师的教学生活起着至关重要的作用。

本报告将针对选课系统进行设计与开发,以提高选课效率、方便学生和教师的教学活动。

二、系统需求1. 学生端需求:(1)学生能够浏览课程信息,包括课程名称、授课老师、上课时间等;(2)学生能够进行选课操作,包括添加课程、删除课程等;(3)学生能够查看自己的选课情况,并进行调整;(4)学生能够进行退课操作,包括退选已选的课程;(5)学生能够查看课程成绩、考试信息等。

三、系统设计1. 系统架构设计:(1)选课系统采用B/S架构,即浏览器/服务器结构,学生和教师都可以通过浏览器访问系统;(2)系统后台采用MySQL数据库进行数据存储;(3)系统前台使用HTML、CSS、JavaScript进行开发。

2. 模块设计:(1)课程信息模块:包括课程的发布、浏览、修改和删除等功能;(2)选课模块:包括学生的选课和退课功能;(3)成绩管理模块:包括教师对学生成绩的录入和统计分析功能;(4)反馈模块:学生和教师可以在系统内进行交流和反馈。

3. 功能设计:(1)学生注册登录:学生需要先注册账号并登录系统才能进行选课操作;(2)选课流程优化:学生可以根据自己的兴趣和实际情况进行选课,并进行灵活调整;(3)成绩统计分析:教师可以根据系统提供的成绩统计功能,对学生成绩进行全面分析;(4)平台信息推送:系统可以根据学生和教师的需求,进行相关信息推送,如课程变更、考试安排等。

四、系统实现1. 系统开发工具:(1)后台开发:使用Spring Boot进行后台服务开发;(2)前端开发:使用Vue.js进行前端界面开发;(3)数据库管理:使用MySQL进行数据管理。

2. 系统测试:(1)功能测试:测试系统的各项功能是否正常运行;(2)兼容性测试:测试系统在不同浏览器和设备上的兼容性;(3)性能测试:测试系统的性能是否稳定;3. 系统部署:系统部署在高校的教学管理平台上,学生和教师可以通过互联网访问系统进行选课操作。

学生选课系统设计报告

学生选课系统设计报告

大理学院数学与计算机学院《数据库系统设计》课程设计报告班级:2012级计算机科学与技术1班学号:201211514姓名:刘秀珍系统名称:学生选课系统总分:实验报告内容及撰写要求:一、需求分析程序的主要功能描述,可以用文字、框图、用例等方式。

参考《数据库系统设计任务书》附录中的内容来进行设计报告的撰写。

主要应当包含分析的过程及分析后得到的数据流图和数据字典。

二、数据库设计2.1 数据库概念设计实体关系模型设计,创建分ER图和总体ER图,并描述总体E-R图合并时的问题解决。

2.2数据库的逻辑设计根据概念设计结果,创建数据库的逻辑模型,建立在具体DBMS下(SQL SERVER 2005)的表结构,并根据规范化理论对表结构进行优化调整。

同时,根据应用需求,创建数据库系统所需的外模式(视图)、模式和内模式(索引)等,此外,应当根据需求,建立数据完整性约束(实体完整性,参照完整性和用户自定义完整性)。

三、系统实现3.1 数据库访问1)数据访问类及实现代码2)SQL语句3.2 业务逻辑层类及代码描述业务流程、数据处理功能的模块代码3.3表示层的实现可以用界面截图及其实现类及核心代码描述四、总结一、需求分析1.1背景全校性选修课开设的目的在于扩大学生的知识面、加强学生素质教育、培养复合型高级人才,具有不可替代的重要性。

随着教育改革的不断深入和素质教育的加强,学分制的实施,选修课在一个学生的培养计划中占的比重将越来越大。

网上选课系统的出现使同学们能够更加自主、便捷、准确的进行选课。

但是,由于一般高校中的学生都比较多,因此带来了诸多如信息管理等问题,鉴于需要将学生信息、选课信息等信息数字化以便于管理维护,我们便想到了利用数据库能够比较良好地解决此类问题,由此下面我将设计出一个学生选课系统以供参考。

1.2系统设计要求:设计出一个学生选课数据库系统的简要要求如下:1)设计要求①建立相应的数据库及相关的表、属性、约束、规则、默认等;②输入相应的记录(每个表不少于20条记录);③编写进行数据管理的存储过程。

使用C#制作学生选课系统

使用C#制作学生选课系统

.cnbook (6)接下来限定“Sname”字段值不能为空,其方法是:直接在“Sname”行的最后一列的【允 ww 许空】项单击 取消勾选即可。如图 8 所示。
w 图6 设置主键
.c .net ww 图 7 设置主键后的“Sno”字段
book 使用 C#制作学生选课系统
t .net 内容提要:本文是使用 C#制作学生选课系统。主要介绍了如何在 Visual C# 2005 环境下使用 e k 和 SQL Server 2000 设计一个学生选课系统,其中详细介绍了如何建立数据库的连接、编 .n oo 写数据读取方法和数据更新方法等。 ok nb 关键字:学生选课系统、Visual C# 2005、SQL Server 2000、
k.n boo 2.2 创建数据表 oo cn 接下来介绍使用 SQL Server 2000 的企业管理器直接创建学生信息表“tbl_Student”、课程信息
nb w. 表“tbl_Course”和选课信息表“tbl_SC”的方法和步骤,从而完成学生选课系统的数据库设计。 .c ww 1. 使用企业管理器 w 打开 SQL Server 2000 的企业管理器,依次展开控制台目录,定位到“SelectCourse”数据库, w 并选择“表”,则在右边的“表”项目中列出了所有的数据表,其中最后一个为用户创建的“tbl_User” w et k 数据表,如图 1 所示。
,则
.cnbook 弹出【选择名称】对话框,输入表名为“tbl_Student”,然后单击【确定】按钮即可,如图 11 所示。 .net www 图 11 输入表名 ok nb (10)最后关闭表设计器,这时可以在企业管理器的表视图区域中看到刚刚创建的用户数据表
c “tbl_Student”。 w. 3. 创建课程信息表 ww 根据如表 3 所示的表结构定义,按照创建学生信息表“tbl_Student”的方法,设计课程信息表
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++程序设计课程设计报告课题名称: 学生选修课程系统设计组号:第八组指导教师:**目录引言………………………………………………………………..一设计目的及内容……………………………………………………二课题总体设计………………………………………………………1.性能需求……………………………………………………………2.功能需求…………………………………………………………….3.功能模块图…………………………………………………………三详细设计…………………………………………………………….1.各模块说明. ……………………………………………………….2.各模块功能流程图………………………………………………四测试与调试…………………………………………………………五心得体会…………………………………………………..六附:源代码……………………………………………….引言21世纪以高科技为核心的知识经济占主导地位,国家的综合国力和以国际竞争力将越来越取决于科学技术创新水平。

教育作为知识创新,传播和应用的基础,培养和输送人才的摇篮,已经成为经济发展和社会进步的基础。

尽管人类进步的程度随着不同时代,不同地区而有所变化,教育的口径不断扩宽,以便使过去仅供少数人使用的教育资源能够为更多各种年龄,不同社会阶层和背景的人们所用。

在信息爆炸的时代,传统教学管理面临诸多挑战。

课程设计是课程教学必不可缺的一个重要环节,可加深学生对该课程所学内容的进一步的了解与巩固,是将计算机课程与实际问题相连接的关键步骤。

此次程序设计综合运用所学知识解决实际问题,将课堂的书本知识有效的在程序中体现出来,让学生更理解了C++功能之强大,进一步让学生对面向对象的方法以及C++的编程思想有了较好了解和认识。

一设计目的及内容:网上选课系统是针对在校学生和教师使用,从学生的角度来说,由于学校教学制度的改革,现在大部分高等院校开始实行的是学生的自主选课模式,传统的教学模式(学生按照学校安排好的课程上课)已经不能适应新型的教学手段,如果仍然通过纸上的选课,一方面浪费大量的人力,物力资源,另一方面浪费时间以及在人为的统计过程中不可避免出现的差错等情况。

随着学校规模的不断扩大,专业,班级,学生的数量急剧增加,有关学生选课的各种信息也成倍增加,而目前许多高校的学生的选课管理仍然停留在复杂的人工操作上,重复工作较多,工作量大,效率低,各种弊端会越来越多的暴露出来,因此利用网络,使学生只要在计算机前输入自己的个人选课信息即可完成原来几倍的工作量。

从教师的角度上来说,同样是节省了大量的工作量,由于教师提出代课申请完成课程发布的工作较学生选课而言更加的复杂,因此在网上进行课程发布能大幅度的减少教师的工作量,减少错误发生几率,作为教师,也只要通过自己的电脑来操作即可,不用奔波于教务处和办公室之间。

1、课题名称:学生选修课程系统设计2、课程设计详细内容说明:假定有n门课程,每门课程有课程编号、课程名称、课程性质、总学时、授课学时、实验学时、学分、开课学期等信息。

学生可以按要求(如每个学生总学分不得少于20、没学期不能超过3门课程,每门课程不得超过50个人,但不能少于10否则该课程不开设)自由选课。

使之能提供一些功能:要求:具体设计要求实现如下功能:1、课程信息录入功能2、课程信息浏览功能3、查询功能:(按课程性质查询、按课程学分查询,查询每个学生的选修信息、查询每门课程的选修信息等)4、学生选修课程5、修改课程或选课信息(根据课程编号或名称修改课程信息、根据学生姓名修改选课信息);6、删除课程或选课信息(根据课程编号或名称删除课程信息、根据学生姓名删除选课信息);二课题总体设计:1、性能需求:在现代,高科技的飞跃发展,人们工作习惯的改变,别特是电脑的大量普及,人们生活节奏越来越来快,怎样提高工作效率是人们首先考虑的问题。

学生选课是一个非常繁琐与复杂的一项工作,一个原因就是工作量大,不好管。

对于一个学校而言,更应该运用一些本地资源,提高管理的力度,对学生负责,对国家负责。

显然,靠手工进行管理这种选课方法已经不能适应时代的发展,学校的需求。

今天这种传统的管理方法必然会被计算机为基础的信息系统所代替。

同时这种传统方式放映出很多问题:第一,当要查询某个同学或某个班级的选课情况极不方便;第二,每次选课时省老师花大量时间统计各班级各学生的选课情况,这样准确率也较难保证;第三,选课的可靠性很低;第四,现在学校虽然已用计算机进行选课管理,但工作并不完善,有很大的局限性。

2、功能需求:我们设计的是一个学生选修金额系统,这个系统的功能比较完善。

使用主函数中的switch语句实现该结构,进而实现该系统的各项功能。

该系统能实现六项功能:1.录入信息、2.查询信息、3.删除课程、4.显示课程、5.保存信息、6.读取信息,设计本次试验所用到的知识点有:类和对象、FOR循环、switch语句、do while()语句、构造函数等等。

3、功能模块图:学生信息模块课程信息模块选课模块三详细设计:1.各模块说明:(1)我们这学生选修课系统的主界面分有两个选项一个是学生使用的学生端一个是老师使用的教师端。

(2) 学生端包括学生的选课情况、学生情况和学生选课,学生可在这里进行选课查询各学生选修课情况还可以查看学生的情况。

(3) 选课系统管理端只有教师可以进入因为需要密码,设计密码是防止学生进入管理端随意修改。

管理端包括一些要求里有的如:课程浏览、课程录入、课程删除、课程查询等,还包括一些要求里边没有的功能如:填写成绩、更改学分等。

这些功能只有管理员才能进行修改和填写。

2 各模块功能流程图: (1)主界面流程图:(2)学生端流程图:(3)管理端流程图:结束四测试与调试:运行:1.学生选课主界面2.选修课系统学生端3.系统管理端4.学生选课界面5.查询学生所选课程界面6.删除课程界面7.课程信息录入功能8.按课程查询所选人数遇到的问题和解决办法:这个程序用到了数据结构的内容可是我们还没有学习数据结构当时这件事真是吧我们难住了,没办法只能自己上网还有去图书馆这中间也去问过老师最终还是把主要问题解决了,不过这中间可能有一些问题是我们现在解决不了的。

五心得体会:1 每当拿到一个小工程,我们都得先仔细分析用户的需求,然后再给程序定位(所花费的人力、物力以及财力),这将花费我们大量的时间,就如本次任务一样,我们首先聚在一起分析,然后得出大致方向,再具体分配任务,无论哪一部分都是我们努力的结果。

2通过这次学生选课系统设计,以C++语言为基础的编写,更让我掌握到C++语言中的相关语句的应用。

3用Visual C++ 6.0 环境下编写,我觉得,从文件中读入数据十分麻烦,没有数据库中读入数据那么轻松,如果我要用到两个表中的记录,非常麻烦。

4整个设计过程过后,我也基本掌握了设计的基本步骤,为我们以后做毕业论文也有很好的帮助。

5C++是很好的系统编程语言,但不能以此独立,但用C++语言是做不出好的系统,还是要和其他软件结合,以C++为基础编写的系统,这样做出来的系统也更好,更美观。

6这次系统设计有很多不足之处,在这过程中也认识到自己对C++也有很多的没掌握的地方。

但是在老师和同学的帮助下,也算是弄出了一个简单的系统,在以后也要更加努力的学习,掌握更好的编程技术。

7做程序真的是个很累的活,有时就为了一个小小的错误,可以一两顿饭不吃,但是做出来的那一刻,真心的感觉很开心,很有成就感,虽然其应用性不高,至少这也是我们小组努力的结果。

8经过我们多天的团结合作终于把这个学生选课系统做完了,虽然这过程是艰难的但是做完之后感觉挺有成就感的,在这个过程中我们学到了很多光听老师讲学不到的东西。

在写这个程序的时候用到了数据结构的内容,如果不是这个程序我觉得我是不会去自学数据结构的内容。

参考书目:⑴谭浩强,《C++程序设计》,清华大学出版社,2002.4⑵求是科技,《Visual C++ 6.0信息管理系统开发》,人民邮电出版社,2005.4⑶陈良银、游洪跃、李旭伟,《C语言程序设计(C99版)》,清华大学出版社,2006.10⑷殷人昆,《数据结构》(用面向对象方法与C++语言描述),清华大学出版社,2007.2编程人员:孙双蕾、白晓兰实验报告设计:牟炼调试人员:孙双蕾讲解人员:白晓兰附录:源代码#include <iostream>#include <iomanip>#include <fstream>#include <conio.h>using namespace std;//定义课程class course //某个学生所学的课程中的某一个{public:char cname[20]; //课程名称float grade; //课程成绩course *Next; //指向下一个课程的指针};//学生类class student{public: student(){ root = NULL;const int maxcourse = 5;factcourse = 0;}void readname(char N[] ); //读入学生的姓名void getname(char N[]); //得到学生的姓名void wrecourse(char N[],float score); //要据课程名写入学生课程的成绩float average(); //学生课程的平均成绩void addcourse(char N[],float g); //给学生增加一门课int findcourse(char N[]); //查找是否已有此课程,如果有返回,如果没有返回int retfactcourse(){ return factcourse;} //得到所学的课程数目course *retroot(){ return root; } //利用键表将所有的课程保存起来int retmaxcourse(){ return 5; } //得到最多可学的课程数目void clrroot() //清零{ root = NULL;factcourse = 0;}private: char sname[20]; //学生的姓名int maxcourse; //学生最多可以学五门课程int factcourse; //学生实际所学的课程数目course *root; //课程的根结点指针};void student::readname (char N[])//读入学生的姓名{ strcpy(sname,N); }void student::getname(char N[])//得到学生的姓名{ strcpy(N,sname); }void student::wrecourse(char N[],float score)//要据课程名写入学生课程的成绩{ course *p = root;if(p==NULL)return;if(p!=NULL)p = p->Next;while(p){ if(strcmp(p->cname,N)==0)p->grade = score;p = p->Next;}}float student::average()//学生课程的平均成绩{ float aver=0.0;course *p = root;while (p){ aver = aver+p->grade; }aver = aver/factcourse;return aver; }void student::addcourse (char N[],float g)//给学生增加一门课{ course *s = new course;s->Next=NULL;if(root == NULL)root = s;course *p = root;course *newcourse = new course;newcourse->Next = p->Next;p->Next=newcourse;strcpy(newcourse->cname,N);newcourse->grade = g;factcourse++;}int student::findcourse (char N[])//查找是否已有此课程,如果有返回,如果没有返回{ course *p = root;if(root==NULL)return 0;p = p->Next;while(p){ if(strcmp(p->cname,N)==0)return 1;p = p->Next;}return 0; }class studentdb{public:student stu;studentdb *Next; };struct studentname{ char tname[20]; //学生的名字float result; //学生所得的该课程分数studentname *Next; };//课程类class subject{public:subject(){ first = NULL;maxstudent=30;activestudnet=0; }float readcredit(); //得到课程的学分void getcredit(float a); //设置学分float getaverage(); //得到学生的平均成绩float getresult(char N[]); //查找某个学生的成绩void getkname(char N[]); //读出课程的名称void setkname(char N[]); //读入课程的名称studentname *retfirst(){ return first; } //返回根结点void findstudent(studentdb *P); //根据该课程的名称,寻找选这课程的学生int retactivestudent(){ return activestudnet; } //返回实际学生数int retmaxstudent(){ return 30; } //返回最多学生数void clractivestudnet(){ activestudnet = 0; } //从文件中读出来后将实际学生数清零private:int maxstudent; //最多学生数int activestudnet; //实际学生数studentname *first; //学生名单float credit; //该课程的学分float averagerusult; //该课程的平均成绩char kname[20]; //该课程的名称};float subject::readcredit ()//得到课程的学分{ return credit; }void subject::getcredit (float a)//设置学分{ credit=a; }float subject::getaverage()//得到学生的平均成绩{ float k = 0.0;studentname *p;p=first->Next;if(p==NULL)return 0;while(p){ k = k + p->result;p = p->Next ; }return k/activestudnet; }float subject::getresult (char N[]) //查找某个学生的成绩{ studentname *p;p = first;while(p){ if(strcpy(p->tname ,N)==0)return p->result;p = p->Next ; }return -1; }void subject::getkname (char N[]) //读出课程的名称{ strcpy(N,kname); }void subject::setkname (char N[]) //读入课程的名称{ strcpy(kname,N); }void subject::findstudent(studentdb *P) //根据该课程的名称,寻找选这课程的学生{ studentname *newcode = new studentname;newcode->Next=NULL;first = newcode;studentname *T = first;studentdb *K = P->Next;while(K){ course *Y = K->stu.retroot();if(Y ==NULL){ K = K->Next;continue; }if(Y!=NULL)Y = Y->Next;while(Y){ if(strcmp(Y->cname,kname)==0){ studentname *Acode = new studentname;char Name[20];K->stu.getname(Name);strcpy(Acode->tname,Name);Acode->result = Y->grade;Acode->Next = T->Next;T->Next = Acode;activestudnet = activestudnet + 1;break; }Y = Y->Next; }K = K->Next; }return ; }void tuichu(){ system("cls");cout<<"\n\n谢谢你使用选修课系统\n\n"<<endl;cout<<"\n you're welcome ! \n"<<endl;getch();exit(-1); }//总菜单char menu(){ int k=0;char a[3],c,i;system("cls");cout<<endl<<endl;cout<<"*******************************************\n"<<"* *\n"<<"* 学生选修课系统*\n"<<"* *\n"<<"* *\n"<<"* 操作方式: *\n"<<"* 1.选修课系统学生端*\n"<<"* *\n"<<"* 2.选修课系统管理端*\n"<<"* *\n"<<"*******************************************\n"<<endl;while(1){ cout<<"\n\t\t请选择登入方式: ";cin>>a;if(strlen(a)==1){ for(i='1';i<='2';i++){ c=i;if(c==a[0])return c; }}cerr<<"\n\n\t\t\t\t输入有误!\n"<<endl;k++;if(k>2){ system("cls");cerr<<"\n\n\n\t\t~~提示~~:错误输入次数超过三次,你将被强制退出!!\n\n"<<endl;cout<<"\t\t按任意键继续"<<endl;getch();tuichu(); }}}//选修课系统端操作char custom(){ char A[10];char b;char i;int k = 0;system("cls");;cout<<"\n\n\n"<<"※※※※※※※※※※※※※※※※※※※※※※※※※※\n"<<"※选修课系统学生端※\n"<<"※※\n"<<"※操作方式:. ※\n"<<"※1、学生选课※\n"<<"※2、学生情况※\n"<<"※3、选课情况※\n"<<"※4、退出系统※\n"<<"※※\n"<<"※※※※※※※※※※※※※※※※※※※※※※※※※※\n"<<endl;while(1){ cout<<"\t\t\t请选择操作方式: ";cin>>A;if(strlen(A)==1){ for(i='1';i<='4';i++){ b=i;if(b==A[0]) return b; }}cerr<<"\n\t\t\t\t输入有误!\n"<<endl;k++;if(k>2){ system("cls");cerr<<"\n\n\t\t\t~~提示~~:错误输入超过三次!你将被强制退出!!\n"<<endl;cout<<"\t\t按任意键继续"<<endl;getch();tuichu(); }}}char server(){ char A[10];char b;char i;int k = 0;system("cls");;cout<<"\n\n\n"<<"※※※※※※※※※※※※※※※※※※※※※※※※※\n"<<"※※\n"<<"※选修课系统管理端※\n"<<"※※\n"<<"※操作方式: ※\n"<<"※ 1.增加学生 2.增加课程※\n"<<"※ 3.删除学生 4.删除课程※\n"<<"※ 5.填写成绩 6.更改学分※\n"<<"※7.学生情况8.选课情况※\n"<<"※9.保存数据0.退出系统※\n"<<"※※\n"<<"※※※※※※※※※※※※※※※※※※※※※※※※※\n"<<endl;while(1){ cout<<"\t\t 请选择操作方式: ";cin>>A;if(strlen(A)==1){ for(i='0';i<='9';i++){ b=i;if(b==A[0])return b; }}cerr<<"\n\t\t\t\t输入有误!\n"<<endl;;k++;if(k>2){ cerr<<"错误输入超过三次!\n";exit(-1); }}}//密码检查void password(){int k=0,i;char A[]="123456";char B[10];char a;system("cls");for(i=0;i<8;i++)cout<<endl;while(k<=2){printf("\t\t\t请输入管理员密码:");i=0;while(1){a=getch();if(a==13)break;B[i]=a;i++;printf("*");}B[i]='\0';if(strcmp(A,B)==0)return;else{k++;cerr<<"\n\n\t\t\t密码输入错误!请重新输入!\n"<<endl;}if(k>=3){system("cls");cerr<<"\n\n\t\t\t输入错误密码超过三次!请按任意键退出.."<<endl; getch();tuichu();}}}struct subjectdb{ subject sub;subjectdb *Next;};int menu_2_7(studentdb *P);int menu_2_9(studentdb *Y,subjectdb *P);int menu_2_8(subjectdb *P);//学生端功能函数int menu_1_1(studentdb *P,subjectdb *X) //学生选课{ system("cls");cout<<"\n\n\t\t\t\t学生选课操作"<<endl;studentdb *q=P->Next;int i;char N[20],M[20];if(q!=NULL)cout<<"\n\n\n\t\t所有学生名单如下:\n"<<endl;else{ cerr<<"\n\n\n\t\t对不起,暂无学生名单!请先创建!请按任意键继续.."<<endl;return 1; }while(q){ q->stu.getname(N);cout<<"\t\t\t\t"<<N;cout<<endl;q = q->Next ; }q = P->Next;if(q==NULL)return 1;cout<<"\n\n\t\t 请输入学生姓名:";cin>>N;i=0;q=P->Next;while(q){ q->stu.getname(M);if(strcmp(N,M)==0)i++;q = q->Next; }int j=0,k=1;if(i==0){ cout<<"\n\n\t\t没有这个学生!! 请按任意键返回.."<<endl;return 1; }else if(i>1){ cout<<"\n\n\t\t共找到"<<i<<"个姓名为"<<N<<"的学生"<<endl;cout<<"\t\t选择第几个:";cin>>k; }if(k>i||k<=0){ cerr<<"\n\t\t\t输入有误!按任意键继续"<<endl;return 1; }q = P->Next;j=0;while(q){ q->stu.getname(M);if(strcmp(N,M)==0)j++;if(j==k){ if(q->stu.retfactcourse()>=q->stu.retmaxcourse()){ cout<<"\n\t\t所选课程已满!按任意键继续"<<endl;return 1; }else{ subjectdb *t=X->Next;char N1[20];system("cls");;if(t!=NULL){ cout<<"\n\n\n\t\t所有课程如下:"<<endl;cout<<"\n\t\t\t\t课程名称\t\t 学分"<<endl; }else{ cerr<<"\n\n\n\t\t对不起,暂时没有课程"<<endl;return 1; }while(t){ t->sub.getkname(N1);cout<<"\t\t\t\t"<<N1<<setw(26-strlen(N1))<<t->sub.readcredit()<<endl;t = t->Next ; }char N2[20];cout<<"\n\t 输入你所要选的课程: ";cin>>N2;t = X->Next;while(t){ t->sub.getkname(N1);if(strcmp(N1,N2)==0){ if(q->stu.findcourse(N2)==1){ cout<<"\n\t\t此课程你已选过了,不能再选.按任意键继续"<<endl;return 1; }t=X->Next;char NA[20];while(t){ t->sub.getkname(NA);if(strcmp(NA,N2)==0){if(t->sub.retactivestudent()>=t->sub.retmaxstudent ()){ cout<<"\n\t\t此课程已选满,不能选.按任意键继续"<<endl;return 1; }}t = t->Next; }q->stu.addcourse(N2,0.0);cout<<"\n\n\t\t选课成功!按任意键继续"<<endl;return 1; }t = t->Next; }cerr<<"\n\t\t没有此课程!按任意键继续"<<endl; }return 1; }q = q->Next; }return 1; }int menu_1_2(studentdb *P,subjectdb *X) //学生情况{ studentdb *q=P->Next;char N[20];system("cls");cout<<"\n\n\t\t\t\t学生情况操作"<<endl;int i;if(q!=NULL){ cout<<"\n\n\n\t\t所有学生选课信息如下:\n"<<endl<<endl;cout<<"\t\t 姓名\t\t\t选课情况\n"<<endl; }else{ cerr<<"\n\n\n\t\t对不起,暂时没有学生名单!!请按任意键继续.."<<endl;return 1; }while(q){ q->stu.getname(N);cout<<"\t\t "<<N<<setw(25-strlen(N))<<" 已选"<<q->stu.retfactcourse()<<" 门课"<<endl;q = q->Next ; }char M[20];cout<<"\n\t\t输入要查看的学生姓名:";cin>>M;i=0;q=P->Next;while(q){ q->stu.getname(N);if(strcmp(N,M)==0)i++;q = q->Next; }int j=0,k=1;if(i==0){ cout<<"\n\t\t\t没找到这个学生!!请按任意键继续.."<<endl;return 1; }else if(i>1){ cout<<"\n\t\t共找到"<<i<<"个姓名为"<<M<<"的学生"<<endl;cout<<"\t\t选择第几个:";cin>>k; }if(k>i||k<=0){ cerr<<"\n\t\t\t输入有误!按任意键继续.."<<endl;return 1; }q = P->Next;j=0;q=P->Next;while(q){ q->stu.getname(N);if(strcmp(N,M)==0)j++;if(j==k){ system("cls");;course *T=q->stu.retroot();if(T==NULL){ cout<<"\n\n\n\t\t\t"<<N<<"同学你还未选课! 请按任意键继续.."<<endl;return 1; }if (T!=NULL)T = T->Next;cout<<"\n\n\n\t\t"<<N<<"同学你已选"<<q->stu.retfactcourse()<<"门课,具体如下\n\n"<<endl;cout<<"\t\t\t课程名称\t\t成绩\n"<<endl;while(T){ cout<<"\t\t\t"<<T->cname<<setw(25-strlen(T->cname))<<T->grade<<endl;T = T->Next; }j=0; }q = q->Next; }cout<<"\n\t\t请按任意键继续..."<<endl;return 1; }int menu_1_3(subjectdb *P) //选课情况{ subjectdb *q=P->Next;char N[20];system("cls");cout<<"\n\n\t\t\t\t选课情况操作"<<endl;if(q!=NULL){ cout<<"\n\n\n\t\t所有选课情况如下:\n"<<endl;cout<<"\n\t\t\t课程名称\t\t选课人数\n"<<endl; }else{ cerr<<"\n\n\n\t\t对不起,暂时没有课程!!请按任意键继续.."<<endl;return 1; }while(q){ q->sub.getkname(N);cout<<"\t\t\t"<<N<<setw(28-strlen(N))<<q->sub.retactivestudent()<<endl;q = q->Next ; }cout<<"\n\t\t请按任意键继续.."<<endl;return 1; }int menu_1_4(studentdb *X,subjectdb *P) //退出系统{ menu_2_9(X,P);tuichu();return 0; }//管理端功能函数int menu_2_1(studentdb *P) //增加学生{ char N[20];system("cls");;cout<<"\n\n\t\t\t\t增加学生操作\n"<<endl;cout<<"\n\n\t\t请输入学生姓名:";cin>>N;cout<<endl<<"\t\t增加学生操作成功,按任意键继续"<<endl;studentdb *newnode = new studentdb;newnode->Next = P->Next ;newnode->stu.readname(N);P->Next = newnode ;return 1; }int menu_2_2(subjectdb *P) //增加课程{ float k;char N[20],M[20];system("cls");;cout<<"\n\n\t\t\t\t增加课程操作\n"<<endl;cout<<"\n\n\t\t 请输入课程名称:";cin>>N;cout<<endl;subjectdb *q = P->Next;while(q){ q->sub.getkname(M);if(strcmp(N,M)==0){ cout<<"\n\t\t此课程已经存在,按任意键继续"<<endl;return 1; }q = q->Next; }cout<<"\t\t输入此课程的学分:";cin>>k;cout<<"\n\t\t增加课程操作成功,按任意键继续"<<endl;subjectdb *newnode = new subjectdb;newnode->Next = P->Next ;newnode->sub.setkname(N);newnode->sub.getcredit(k);P->Next = newnode ;return 1; }int menu_2_3(studentdb *P) //删除学生{ system("cls");cout<<"\n\n\t\t\t\t删除学生操作"<<endl;menu_2_7(P);studentdb *q = P->Next;if(q==NULL)return 1;int i;char N[20],M[20];cout<<"\n\t请输入要删除的学生姓名:";cin>>N;i=0;while(q){ q->stu.getname(M);if(strcmp(N,M)==0)i++;q = q->Next; }int j=0,k=1;if(i==0){ cerr<<"\n\t\t没有这个学生!!请按任意键继续.."<<endl;return 1; }else if(i>1){ cout<<"\n\t\t共找到"<<i<<"个姓名为"<<N<<"的学生"<<endl;cout<<"\n\t\t要删除第几个:";cin>>k; }if(k>i||k<=0)return 1;q = P->Next;studentdb *R = P;j=0;while(q){ q->stu.getname(M);if(strcmp(N,M)==0)j++;if(j==k){ R->Next = q->Next;free(q);cout<<"\n\t\t删除学生操作成功,按任意键继续.."<<endl;return 1; }q = q->Next;R = R->Next; }return 1; }int menu_2_4(subjectdb *P) //删除课程{ subjectdb *q=P->Next;char N[20];system("cls");;cout<<"\n\n\t\t\t\t删除课程操作"<<endl;if(q!=NULL)cout<<"\n\n\n\t\t所有课程如下:\n"<<endl;else{ cerr<<"\n\n\n\t\t对不起,暂时没有课程!!请按任意键继续.."<<endl;return 1; }while(q){ q->sub.getkname(N);cout<<"\t\t\t\t"<<N<<endl;q = q->Next ; }q = P->Next;subjectdb *R = P;if(q==NULL)return 1;char M[20];cout<<"\n\t 请输入要删除的课程:";cin>>M;while(q){ q->sub.getkname(N);if(strcmp(N,M)==0){ R->Next = q->Next;free(q);cout<<"\n\t\t删除课程操作成功,按任意键继续"<<endl;return 1; }q = q->Next;R = R->Next; }cerr<<"\n\t\t没有此课程!!\t请按任意键继续.."<<endl;return 1; }int menu_2_5(studentdb *X,subjectdb *P) //填写成绩{ subjectdb *q=P->Next;char M[20],N[20],NA[20];float score;system("cls");cout<<"\n\n\t\t\t\t 填写成绩操作\n"<<endl;if(q!=NULL)cout<<"\n\t\t\t课程名称\t\t选课人数\n"<<endl;else{ cout<<"\n\n\n\t\t对不起,暂时没有任何选修课程。

相关文档
最新文档