资讯动态

软件工程课程设计实战:从选课系统到完整开发流程

发布时间:2026/10/23 9:23:58 来源:尧图企业网站定制
简介《软件工程课程设计指导书》是一份面向计算机科学与技术专业学生的实践课程资料以“选课系统”为贯穿案例系统讲解如何运用面向对象方法和软件工程规范完成一个小型系统的课程设计。文档从实验目的、面向专业、先修课程、实验环境入手明确系统数据字段与功能要求登录、查询、选课、退课、成绩管理并给出书面报告模板覆盖需求分析、软件设计、软件测试及源代码等关键环节同时说明成绩考核加权评分方式。资源为单个doc文件体积仅539KB内容紧凑便于按章查阅和打印。目前已有97人学习使用。除课程设计全流程指引外文档末尾还附有详细操作指南包括通过ODBC建立Access数据源、在C Builder中创建项目和连接数据库的步骤对初次接触数据库编程的同学尤其友好能有效降低上机门槛。整体而言这份指导书将理论规范与实操细节相结合既适合学生独立完成课程设计也可作为教师布置和评估实践作业的参考。1. 先别慌软件工程课程设计到底是什么第一次在课表里看到“软件工程课程设计”这几个字你大概率会冒出两个问题这到底是什么我还需要额外学点什么先给你一个判断它不是什么高深莫测的东西而是一次“带着规范的完整开发练习”——用软件工程的方法做一个小型软件系统最常见的就是你自己天天在用的选课系统。选课系统的逻辑你早就体验过了查询开课情况像看食堂今日菜单选课像排队打饭退课像把打多的菜退回去。这门课的任务就是把这个过程变成一套能运行的软件写一份记录你思考过程的报告。它适合零基础起步的你前提是愿意从头走一遍完整流程。2. 为什么要这样学一门实践课不是让你写个大作业很多同学第一反应是既然要做选课系统那不就是写代码吗把代码写出来、能跑不就完事了如果你这么想后面写报告的时候一定会翻车。这门课真正想训练你的不是“把代码写出来”而是“像工程师一样把过程走完”。2.1 课程设计和平时“大作业”到底差在哪平时上完 C 课老师布置一个题目你写完代码、跑出结果、提交就结束了。但课程设计不一样它考核的是一整套东西。你写出来的代码只是一部分还要交一份完整的书面报告报告里要有需求分析、用例图、序列图、对象模型、状态图、测试数据、源代码和心得总结。成绩怎么来的指导书写得很清楚书面报告、软件系统、考勤三项加权取平均。也就是说就算你的系统跑得再流畅报告写得很草率分数一样上不去。反过来系统功能基础但报告完整、测试认真反而可能拿到不错的分数——因为这门课考核的核心是“你有没有按软件工程的流程走一遍”而不是“你写出了多惊艳的代码”。我第一做的时候也犯过这个错觉得报告是“写完代码之后补的东西”。结果等系统做完了发现用例图不会画、序列图理不清、测试数据凑不够回头补文档比写代码还痛苦。后来我学乖了报告不是最后写的而是边做边积累的。每一个决定、每一次修改都随手记下来最后整理成报告就会轻松很多。2.2 为什么偏偏选“选课系统”当题目选课系统是指导书给出的设计题目你可能会觉得它太普通但恰恰是这份“普通”让它非常适合新手。首先需求离你很近你每学期都在选课你知道学生要查课、选课、退课老师要录入成绩系统要限制人数。理解需求不用重新学一个陌生领域这是入门阶段最大的优势。其次它“麻雀虽小五脏俱全”。按指导书的要求系统的功能至少有登录、查询开课情况、查询选课情况、查询成绩、选课、退课。数据涉及学生、教师、课程、选课记录四类核心对象字段包括学号、姓名、密码、出生年月、教师号、课号、学分、课时、人数限制、选课人数、考试成绩、平时成绩、总评成绩等二十多个。这些字段刚好覆盖了一个小型信息系统最常见的增删改查和权限控制练一遍之后你以后再接触任何管理系统都会觉得“套路我见过”。更重要的是题目限定了开发工具是 C Builder 6.0 和 Access 2000而不是让你自由选择技术栈。很多新手会觉得“为什么非要用这么老的环境”但你换个角度想限定环境其实是把“选什么工具”这件事替你决定了你可以把精力全部放在“怎么用软件工程流程把系统做出来”上。技术会过时但需求分析、对象建模、测试设计这些能力不会。2.3 面向对象方法和“先规划再动手”的工程思维指导书贯穿始终的两个关键词一个是“面向对象”一个是“软件工程”。面向对象是什么你不用一开始就背定义可以把它理解成把系统里的东西都看成一个个“对象”。选课系统里学生是一个对象老师是一个对象课程是一个对象一条选课记录也是一个对象。每个对象有自己的属性比如学生的学号、姓名和行为比如选课、退课。你写代码就是定义这些对象并让它们互相配合。那“软件工程”呢它强调的是不要上来就写代码而是按顺序走完几个阶段需求分析、软件设计、软件测试、编码实现。你可以把整个过程类比成装修房子需求分析是“我要什么风格的房子、几个房间”软件设计是“画施工图”编码是“按图施工”测试是“验收”。没画图直接施工大概率砸墙重来没做需求分析直接写代码大概率返工。这门课只有 10 个学时的上机时间如果你跳步时间根本不够你用。3. 动手前的准备环境、数据库和数据源一次搞定我知道你现在的状态概念听懂了但还是不知道该先点哪。别急最稳妥的第一步不是打开编译器写代码而是按照指导书的顺序先把环境搭好、把数据库建出来。磨刀不误砍柴工这一步做扎实了后面会非常顺。3.1 工具清单环境虽老逻辑不过时指导书指定的实验环境是Windows 操作系统 C Builder 6.0 开发工具 Access 2000 数据库。这套组合确实有年头了但它教的道理到今天还在用一个桌面程序要访问数据库通常不是直接打开数据库文件而是通过一个中间层这里就是 ODBC 数据源来连接。我先解释一下“数据源”是个什么概念。你可以把 Access 数据库文件比如选课.mdb理解成一个仓库里面放着学生、课程、选课记录的表格。程序就是要去这个仓库查询和修改数据的“办事员”。问题是办事员不能总知道仓库具体在哪个位置、用什么方式开门于是就有了一张“通行证”——ODBC 数据源。通行证上写清楚仓库文件在哪、用什么驱动打开、叫什么名字。程序只需要知道通行证的名字就能找到数据库。所以我给你的第一个建议是不要把“建数据库”和“建数据源”当成一回事。数据库是你用 Access 建的文件数据源是你通过 ODBC 建立的“指向这个文件的别名”。两个都要建顺序是先建数据库再建数据源。3.2 用 Access 建立数据库先建表再谈别的打开 Access 2000新建一个数据库文件起名叫选课.mdb。然后你要做的最重要的一件事就是建表。指导书给了二十多个字段建议把它们拆成四张表而不是塞进一张大表里表名主要字段学生表学号主键、学生姓名、登录密码、性别、出生年月、籍贯、地址、学生电话、家庭地址教师表教师号主键、教师姓名、教研室、职称、性别、教师电话课程表课号主键、课名、学分、先行课号、课时、开课教室、人数限制、选课人数选课记录表记录编号主键、学号、教师号、课号、考试成绩、平时成绩、总评成绩为什么要把字段拆开你自己想想就明白了学生信息如果每条选课记录里都复制一遍一个学生选五门课他的姓名、电话就要存五遍浪费空间还容易改漏。拆成四张表之后选课记录表里只需要存学号和课号需要显示学生姓名时再去查学生表就行。这正是关系型数据库的基本思想也是课程设计报告里“对象模型”部分的现实基础。建表的时候注意一个坑给字段起英文名。比如学号叫 student_id学生姓名叫 student_name课号叫 course_id。你可能会觉得用中文名建表更方便但后面在 C Builder 里写 SQL 查询时中文字段名经常会在编码上出问题英文名能帮你躲开一堆类似的麻烦。建表完成后可以在 Access 里先手工输入几条测试数据比如三五个学生、几门课程。不要多够测试就行。下面这段 SQL 是课程表的结构示意帮助你理解字段类型是怎么设的CREATE TABLE course ( course_id CHAR(10) PRIMARY KEY, -- 课号设为主键 course_name VARCHAR(50) NOT NULL, -- 课名 credit INTEGER, -- 学分 pre_course_id CHAR(10), -- 先行课号没有就留空 hours INTEGER, -- 课时 classroom VARCHAR(30), -- 开课教室 max_students INTEGER, -- 人数限制 selected_count INTEGER -- 当前选课人数 );这段 SQL 的意思是创建一张课程表course_id 是文本类型、设为主键course_name 是不允许为空的文本credit、hours、max_students、selected_count 都是整数类型。一个表必须有一个主键它的作用就是唯一标识一行记录相当于每个人的学号——不可能重复。在 Access 里你通常是使用图形界面建表不一定要手敲这段 SQL但看懂它对后面写查询语句有帮助。3.3 用 ODBC 把数据库变成程序认识的数据源数据库建好了接下来建数据源。指导书附录里有一套非常详细的 ODBC 操作步骤我帮你把它浓缩成七步每一步我都补一句“这一步在干嘛”。第一步打开控制面板找到 BDE Administrator 工具启动它。BDE 是 C Builder 6.0 管理数据库驱动的工具你的程序要通过它认识数据库。第二步在 BDE Administrator 的菜单里点击 Object 下的 New弹出的对话框会让你选择数据库驱动这里选择 Microsoft Access Driver (*.mdb)确定。这一步相当于告诉系统我接下来要连接的数据库是 Access 类型。第三步在左侧面板会出现一个叫 odbc1 的配置项右键它选择 ODBC Administrator弹出 ODBC 数据源管理器。这一步是去设置一个“系统级的通行证”后面所有程序都可以用它。第四步点击“添加”按钮在创建新数据源的对话框里再次选择 Microsoft Access Driver (*.mdb)然后点完成。随后会弹出“ODBC Microsoft Access 安装”面板。第五步在“数据源名”一栏填一个你能记住的名字比如“选课数据源”。这个名字就是你程序里要用的通行证名字后面连接数据库全靠它。第六步在“数据库”栏里点击“选择”按钮找到你刚才用 Access 建好的选课.mdb 文件确定。第七步一路确定回到 BDE Administrator 界面右键 odbc1点击 Apply 应用设置再右键 Open 测试连接。这时候会弹出数据库登录框直接确定。如果左侧的图标字体变黑说明连接成功如果没有变黑回到第 3 章开头的检查思路看驱动选没选对、文件路径对不对。提示数据源名最好用纯英文或拼音比如 xuanke_datasource不要用带空格的名称避免 C Builder 某些版本识别出错。4. 开工前先画图需求分析到软件设计的完整路径很多人学软件工程觉得“虚”就是因为不知道这些图和模型到底长什么样、画了有什么用。这一章我不讲理论直接带你按选课系统走一遍需求分析到软件设计的过程。画图不用多精美能用方框、线段和文字说清楚逻辑就行。4.1 需求分析用例图和序列图怎么画需求分析阶段报告里要有用例图和序列图。用例图的作用是回答一个问题谁能做什么。在选课系统里“谁”是参与者至少有三个学生、教师、系统管理员。“能做什么”叫作用例指导书要求的功能——登录、查询开课情况、查询选课情况、查询成绩、选课、退课——就是用例。画法很简单中间画一个方框代表系统边界方框里面用椭圆画出各个用例方框外面画出小人或方框代表参与者参与者与用例之间用直线连接。学生这个参与者连接登录、选课、退课、查询开课情况、查询选课情况、查询成绩教师参与者连接登录、录入成绩、查询自己课程的学生名单。每个连接代表一次真实的使用场景。序列图则是回答另一个问题一次操作参与者、系统、数据库之间按什么顺序交互。以“学生选课”为例你按时间从上往下画学生输入学号和密码系统验证验证通过后学生提交课号系统检查该课选课人数是否已满未满则写入选课记录并更新选课人数最后返回“选课成功”。画序列图的时候注意每一步都要标明是谁发的消息、谁接收、有没有返回。它其实是帮助你理清代码逻辑的画完这张图你写代码时就不会乱。画图这件事最容易被新手当成负担但它的回报是实打实的你把它画清楚相当于在写代码之前先在纸上把流程“跑”了一遍很多逻辑漏洞这时候就能发现而不是等到上机调试时才手忙脚乱。4.2 软件设计对象模型、状态图和界面草稿设计阶段的任务是把需求分析里的“用例”变成“对象”。对象模型也叫类图你只需要定义四个核心类学生类、教师类、课程类、选课记录类。每个类写清楚它的属性和方法。比如学生类有属性学号、姓名、密码、性别、出生年月有方法登录、选课、退课、查成绩。课程类有属性课号、课名、学分、人数限制、选课人数有方法判断是否已满、增加选课人数。你可能已经发现了类图里的类和你第 3 章建的数据库表高度对应。这不是巧合关系型数据库的表结构往往就是对象模型的一种落地形态。写报告的时候对象模型图里每个类基本上对应你程序里的一个类或数据库里的一张表评审老师一眼就能看出你有没有理解。状态图是报告里另一个要求至少一个重要对象的状态图。最容易画的是“课程”的状态。一门课刚创建时是“可选”选课人数达到上限后变成“人数已满”此时学生无法再选学期结束后变成“已结课”。状态图就是画几个方框表示这些状态再用带箭头的线表示“什么条件下从 A 状态变成 B 状态”。画这张图能逼你想清楚一个关键问题人数限制的逻辑到底在哪一步判断。设计阶段还要把主要的界面草图画出来登录界面要有输入框和登录按钮选课主界面要有课程列表、选课按钮、退课按钮查询界面要有条件输入和结果表格。界面草图不需要细致到颜色但要标注清楚每个按钮触发哪个功能方便你接下来写代码时对照。4.3 从设计到实现的过渡先把功能清单列出来画完图先别急着打开 C Builder。我建议你再花十分钟列一张“功能实现顺序表”这能帮你把上机的 10 个学时规划好。按依赖关系排序我的顺序是这样的先做登录因为所有功能都依赖“判断当前是谁”再做查询开课情况它只需要读数据库最简单适合练手然后做选课和退课这两个需要写数据还要处理人数限制最后做查询选课情况和查询成绩它们是把选课记录和学生、课程信息关联起来查询。每一小步做完都立刻编译运行不要攒着等到最后才一次性测试。我第一次做的时候攒了三个功能才运行结果几十个编译错误堆在一起花了整整一个下午才分清哪个错误是哪个功能引起的。从那以后我就坚持只改一点、测一点。5. 新手避坑实用排查连接失败、业务逻辑与字段命名这一章把我见过的、自己也踩过的新手问题集中整理出来。每一条都按“现象 → 原因 → 解决”来写上机前读一遍能少走很多弯路。5.1 连接测试字体不变黑数据源到底哪里没配对现象按照步骤走到 BDE Administrator 里 Open弹出登录框后点确定图标字体没有变黑连接不成功。原因排查按概率从高到低第一数据库驱动选错了建数据源时选的不是 Microsoft Access Driver第二数据库文件路径不对Access 文件被移动过或者文件名和原来建立数据源时不一致第三Access 数据库文件已经被占用比如你正开着 Access 编辑这张表BDE 去访问时文件被锁住。解决首先回到 ODBC 数据源管理器检查“选择数据库”那一栏显示的路径是否仍是选课.mdb 的真实位置。其次看驱动类型如果是 *.mdb 后缀驱动一定是 Microsoft Access Driver。最后关掉 Access确保没有其他程序占用这个数据库文件再回过头重新 Open 一次。还有一个小技巧不要用网络盘或带特殊符号的路径存放数据库路径越短越不容易出错。5.2 选课人数超过限制还能选进去业务逻辑放错了地方现象课程表里人数限制是 30选课人数已经到 30但系统仍然允许第 31 个学生选课成功。原因你没有在“写入选课记录之前”判断人数是否已满。很多新手会把判断写在界面上比如点选课按钮时弹一个消息框提示“人数已满”但真正的写入操作在另一个函数里这个函数没有做任何检查。结果就是界面上提示了数据却照样写进去了。解决把“人数校验”放在数据库操作层也就是真正执行插入选课记录的函数里。流程是先根据课号查询当前选课人数如果已大于等于人数限制就返回失败否则插入选课记录并把该课程的选课人数加 1。这两步最好放在同一个事务里要么都成功要么都失败。不用把“事务”想得太复杂你可以理解成这两个操作是绑定的不然可能出现“记录插进去了但人数没更新”的脏数据。5.3 查询结果字段对不上、中文显示乱码命名规范是个问题现象运行程序查询开课情况列名显示的是乱码或者无论怎么查结果都是空的。原因最常见的有两种。一种是你建表时用了中文字段名比如“学号”“课名”而 C Builder 里的 SQL 查询是用文本方式拼出来的版本不同的环境下中文字段名容易出现编码不一致。另一种是字段名不统一数据库里叫 student_id代码查询里写的是 student_no少个下划线或多一个字母查询结果自然为空。解决建表阶段就统一字段命名全部使用小写英文加下划线比如 student_id、course_id不要一会儿英文一会儿中文。写 SQL 时不要手抄字段名直接从 Access 的表设计视图复制字段名这样能避免手误。至于乱码把 Access 里的字段名和界面显示用的标题分开数据库里叫 course_name界面上显示“课名”这并不冲突。6. 跑通第一个例子从新建项目到查开课情况到了这一步你终于要打开 C Builder 6.0 了。这一章的目标很小30 分钟内新建一个项目、连上数据库、把“查询开课情况”跑出来。做完这个最小例子你就有底气继续做后面的选课和退课功能了。6.1 最小闭环新建项目、保存、试运行启动 C Builder 6.0 后菜单栏选择 File → New → Application它会自动生成一个空白窗体 Form1。新手的第一个动作应该是立刻保存项目File → Save Project As选一个自己找得到的文件夹输入项目名称比如 XuanKeApp保存。这一步太重要了——很多人等到写了一大半才第一次保存结果程序崩溃一夜回到解放前。保存完之后先试运行一下确认环境没问题菜单 Project → Build All Projects 编译再点 Run → Run 运行。如果你看到一个空白窗口弹出来然后能正常关闭说明开发环境是好的。这时候在窗体上拖一个 Label 组件位置在组件面板的 Standard 页签里用右侧的 Object Inspector 修改它的 Caption 属性比如改成“选课系统”字体大小在 Font 属性里调。这一步是在熟悉最基础的操作往窗体上放组件、改属性、运行看效果。6.2 连上数据库从控件到数据源现在开始连接数据库。组件面板里切到 ADO 页签点一下 AdoConnection 组件然后在 Form1 上单击放置。这个组件在你的程序和数据库之间扮演“管道”的角色。双击这个图标弹出连接配置窗口点 Build 按钮在对话框的“连接”页签里找到“使用数据源名称”的下拉框选择你第 3 步建立的数据源比如 XuanKe_datasource。选好后点“测试连接”按钮如果弹出成功提示说明管道彻底打通了。测试连接这一步一定要做别跳过。如果失败回到第 5 章的排查清单重查数据源。连接成功后把所有对话框点确定保存。6.3 第一个真功能把开课情况查出来管道通了接下来做查询。在同一个 ADO 页签里你还会看到 AdoQuery 组件把它放到窗体上。这个组件的作用就是替你向数据库“问问题”。选中它在属性面板里找到 Connection 属性选择刚才配置好的那个 AdoConnection——这一步是把“提问者”和“管道”绑定起来。然后在 AdoQuery 组件的 SQL 属性里填入下面这句 SQLSELECT course_id, course_name, credit, hours, classroom, max_students, selected_count FROM course ORDER BY course_id;这句查询的意思是从课程表里取出课号、课名、学分、课时、开课教室、人数限制、当前选课人数这几列然后按课号排序。列名必须和你 Access 建表时的字段名完全一致否则查询会报错。如果只想查某门课可以再加一行 WHERE course_name 高等数学但入门阶段先不用复杂条件把全表查出来再说。最后在 ADO 页签或数据显示相关页签里找一个表格组件设置它的 DataSource 和 DataSet 属性让它显示 AdoQuery 查询出的结果。运行时点击查询按钮或直接在 FormShow 事件里激活查询表格里如果能显示出课程数据恭喜你第一个真实功能已经跑通了。整个流程你可能需要反复调整组件属性这很正常第一次连上数据库的人都会卡在某个属性上多试几次就顺手了。6.4 下一步学什么从最小例子走向完整报告跑通查询之后你接下来要做的就是补齐剩余功能登录、选课、退课、查询成绩。建议严格按照“先查询、再写入、再关联查询”的顺序推进每完成一个功能就编译运行一次。不要试图一口气写完尤其是选课和退课里面牵扯人数限制和事务处理写得更谨慎一点。功能全部完成后回到第 4 章的图纸把用例图、序列图、状态图按你实际实现的样子修正一遍。然后开始整理测试数据报告要求至少 20 个不同的对象测试序列你不需要设计得很复杂按等价类法来就够用。我帮你列几个典型场景正确的学号密码登录、错误密码登录、不存在的学号登录、查询不存在的课号、选一门可选课程、选一门人数已满课程、退一门已选课程、退一门没选过的课程、查询空成绩等。把这些场景的操作步骤和预期结果填成一张表就是一份很合格的测试记录。再往后如果你对这个题目还有兴趣可以试试把 C Builder 这套流程里的思想迁移到更现代的技术栈上用任意一门语言重新实现同一个选课系统你会发现需求分析、对象建模、测试设计这些步骤完全复用变的只是工具。到那时候你就真正把软件工程的“内功”练到手了。回想我第一次做这个课程设计的时候最惨痛的教训就是跳过了数据源这一步直接在代码里拼数据库路径折腾了两天才反应过来是连接配置的问题。从那以后我每次做类似的项目都会强制自己先走一遍“建库 → 建数据源 → 测试连接 → 跑查询”的完整闭环再往后写任何功能都安心很多。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑