资讯动态

教务系统数据库设计实战:从ER图到权限控制的完整落地方案

发布时间:2026/10/2 9:10:37 来源:尧图企业网站定制
简介本资源是一份完整的高校数据库课程设计报告面向计算机专业本科生及数据库初学者聚焦教务管理信息系统的设计与实现解决多角色协同、权限隔离与海量教学数据高效管理的实际问题。报告涵盖需求分析、ER模型设计、功能模块划分含教务员信息维护、教师成绩录入、学生选课评教、管理员自动排课、C#后端开发与Web前端交互等核心内容附有详细系统功能图、界面截图说明及参考文献。资源为单文件Word文档.doc共1个文件大小287KB结构清晰含封面、任务书、目录、6大章节正文及设计总结便于直接用于课程答辩或二次开发参考。目前已有94人学习下载适合需要数据库建模实践范例、权限控制方案借鉴及教务类系统完整开发流程学习的读者。1. 教务管理系统数据库课程设计报告一份能跑通、能改、能交的本科级实战模板这不是一份“纸上谈兵”的课程设计文档而是一份我当年在实验室熬了三周、反复调试 SQL 脚本、手敲 C# 窗体代码、被 VS2008 报错弹窗追着打、最终在答辩现场成功演示增删改查选课成绩录入全流程的真实落地产物。它用的是 Windows XP SQL Server 2000没错就是那个年代但它的数据库模型、ER 图逻辑、表结构设计、外键约束策略、权限分层思路——放到今天 MySQL 8.0 或 PostgreSQL 15 的课程设计里依然能直接复用、不翻车、不被老师挑刺。它解决的不是“要不要建索引”这种玄学问题而是“学生选了两门同名不同课序号的课怎么保证成绩不串”“教师教多个班同一门课课表怎么区分”“管理员排课时教室冲突怎么校验”这些真正在教务场景里卡脖子的细节。适合计算机专业大三学生快速上手、填满报告页数、跑通核心流程、稳稳拿下课程设计高分也适合刚入职的初级开发在接手老系统维护前先拿它当“黑匣子解剖图”——看懂一个真实业务系统是怎么把“系→专业→班级→学生→课程→成绩→评教”这条数据链拧紧的。2. 从 E-R 图到 9 张物理表教务系统数据库设计的底层逻辑与可执行建表语句2.1 为什么必须先画 E-R 图——不是为了交差是为防“删库跑路”式连环错很多同学跳过概念设计直接开写CREATE TABLE结果做到一半发现学生表里存了班级编号班级表里又存了系编号系表里还存了办公室电话……最后查个“计算机系所有学生名单”得连 5 张表JOIN 条件写错一个数据就全乱。这份报告的 E-R 图图 3-5看似老派实则精准踩中了高校教务的三层嵌套关系系 → 专业 → 班级 → 学生和系 → 教师以及课程 ↔ 教师、学生 ↔ 课程的多对多绑定。它强制你回答三个关键问题哪些是强实体如学生、教师、课程必须有主键且不可为空哪些是弱实体或联系如“选修”“授课”必须由两个强实体共同构成复合主键哪些属性该下放如“班级最低总学分”属于班级实体而非学生实体避免数据冗余和更新异常。提示图 3-5 中“学生↔课程”连线上的m:n标注直接决定了你必须单独建一张SC选课表而不是把“课程编号”塞进学生表里——这是防数据爆炸的第一道防火墙。2.2 9 张表的字段设计不是照抄报告是理解每一列存在的理由报告第 5 章列出了 9 张表学生、专业、成绩、院系、教师、评教、课程、班级、选课但原始 Word 表格只写了字段名和类型没写为什么这么设、不这么设会怎样。我按实际开发经验补全逻辑并给出可直接执行的 SQL Server 2000 兼容建表语句MySQL 用户只需把char(n)换成VARCHAR(n)IDENTITY(1,1)换成AUTO_INCREMENT-- 1. 学生基本信息表Student CREATE TABLE Student ( Sno CHAR(10) NOT NULL PRIMARY KEY, -- 学号主键长度10够用如2023000001 Sname VARCHAR(20) NOT NULL, -- 姓名非空防空记录 Ssex CHAR(2) CHECK (Ssex IN (男,女)), -- 性别用户定义完整性强制枚举 Sage INT CHECK (Sage BETWEEN 16 AND 35), -- 年龄业务合理范围防乱填 Class CHAR(10) NOT NULL, -- 所属班级编号外键指向Class表 Dno CHAR(2) NOT NULL, -- 所属院系编号外键指向Sdept表 Tel CHAR(11) NULL -- 联系允许为空但格式应校验应用层做 ); -- 外键约束必须显式添加报告里没写但实操必加 ALTER TABLE Student ADD CONSTRAINT FK_Student_Class FOREIGN KEY (Class) REFERENCES Class(Class); ALTER TABLE Student ADD CONSTRAINT FK_Student_Sdept FOREIGN KEY (Dno) REFERENCES Sdept(Dno);-- 4. 选课表SC核心中的核心处理 m:n 关系 CREATE TABLE SC ( Sno CHAR(10) NOT NULL, -- 学号复合主键 part1 Cno VARCHAR(20) NOT NULL, -- 课序号复合主键 part2注意不是课程编号Cno是课序号 Grade DECIMAL(4,1) NULL, -- 总评成绩允许暂缺刚选课还没考 Daigrade DECIMAL(4,1) NULL, -- 平时成绩 Midgrade DECIMAL(4,1) NULL, -- 期中成绩 Lasgrade DECIMAL(4,1) NULL, -- 期末成绩 Fingrade DECIMAL(4,1) NULL, -- 最终成绩可由其他项计算得出 PRIMARY KEY (Sno, Cno) -- 复合主键一个学生对一门课只能有一条记录 ); -- 外键指向学生和课程注意Cno 指向 Course.Cno即课序号 ALTER TABLE SC ADD CONSTRAINT FK_SC_Student FOREIGN KEY (Sno) REFERENCES Student(Sno); ALTER TABLE SC ADD CONSTRAINT FK_SC_Course FOREIGN KEY (Cno) REFERENCES Course(Cno);-- 7. 课程基本信息表Course关键在“课序号”与“课程编号”分离 CREATE TABLE Course ( Cno VARCHAR(20) NOT NULL PRIMARY KEY, -- 课序号唯一标识一次开课如CS101-2023-A Cname VARCHAR(10) NOT NULL, -- 课名如“数据库原理” Credit TINYINT NOT NULL CHECK (Credit BETWEEN 1 AND 6), -- 学分业务约束 Cnum SMALLINT NOT NULL DEFAULT 100, -- 名额默认100人 Tno CHAR(10) NULL, -- 任课教师工作证号外键允许空未分配教师 Dno CHAR(2) NULL -- 开设院系外键支持跨院系开课 ); -- 外键约束 ALTER TABLE Course ADD CONSTRAINT FK_Course_Teacher FOREIGN KEY (Tno) REFERENCES Teacher(Tno); ALTER TABLE Course ADD CONSTRAINT FK_Course_Sdept FOREIGN KEY (Dno) REFERENCES Sdept(Dno);参数说明与实操要点Cno课序号是整套系统的关键设计。它和CourseName课名不是一一对应——同一门“数据库原理”计算机系 2023 级 A 班和 B 班是两个不同Cno如DB-2023-A,DB-2023-B这样才能让教师分别录入两个班的成绩学生分别选两个班的课排课时分别占两个教室时段。如果混用“课程编号”系统立刻崩溃。Grade等成绩字段用DECIMAL(4,1)而非FLOAT确保成绩计算不出现95.30000000000001这种玄学数字。所有外键ON DELETE CASCADE没加——因为教务系统严禁级联删除删个教师不能把他的课、学生成绩全干掉必须用应用层逻辑控制。2.3 完整性设计不是贴标签是让数据库替你“把关”报告第 5.2 节提到了实体、参照、用户定义三类完整性但没说清怎么落地。这里补上必须加、不加就出事的约束约束类型字段示例实际 SQL 语句不加的后果实体完整性Student.SnoPRIMARY KEY已含NOT NULL插入空学号记录后续所有查询 JOIN 失败参照完整性SC.SnoFOREIGN KEY (Sno) REFERENCES Student(Sno)学生已毕业被删其选课记录还在查成绩时NULL报错用户定义完整性Student.SexCHECK (Ssex IN (男,女))数据库里出现未知、M导出报表时分类统计全错-- 补充一个报告里没写但极重要的约束防止同一学生重复选同一门课 -- 在 SC 表上加唯一索引等效于逻辑主键但更灵活 CREATE UNIQUE INDEX IX_SC_StudentCourse ON SC(Sno, Cno);3. 权限分层与用户角色教务员、教师、学生、管理员的 SQL Server 实现方案3.1 四类用户不是 PPT 画饼是数据库里四套独立登录账户报告 2.3.3 节提到“不同用户设置不同权限”但没说怎么建。在 SQL Server 2000 里必须为每类用户创建独立的Login服务器登录和User数据库用户再通过Role角色统一分配权限。不能只靠应用层判断“当前是学生”那是裸奔——一旦绕过登录界面直连数据库所有数据裸奔。-- 步骤1创建服务器登录Windows 认证更安全此处用 SQL 登录示意 EXEC sp_addlogin jiaowuyuan, pwd123, eisbook; -- eisbook 是数据库名 EXEC sp_addlogin teacher001, pwd456, eisbook; EXEC sp_addlogin student2023, pwd789, eisbook; EXEC sp_addlogin admin, masterkey, eisbook; -- 步骤2在 eisbook 数据库中创建对应用户 USE eisbook; EXEC sp_adduser jiaowuyuan, jiaowuyuan; EXEC sp_adduser teacher001, teacher001; EXEC sp_adduser student2023, student2023; EXEC sp_adduser admin, admin; -- 步骤3创建角色并授予权限这才是核心 -- 教务员角色可操作所有基础表学生/教师/课程/班级/院系但不能动成绩和评教 EXEC sp_addrole role_jiaowuyuan; GRANT SELECT, INSERT, UPDATE, DELETE ON Student TO role_jiaowuyuan; GRANT SELECT, INSERT, UPDATE, DELETE ON Teacher TO role_jiaowuyuan; GRANT SELECT, INSERT, UPDATE, DELETE ON Course TO role_jiaowuyuan; GRANT SELECT, INSERT, UPDATE, DELETE ON Class TO role_jiaowuyuan; GRANT SELECT, INSERT, UPDATE, DELETE ON Sdept TO role_jiaowuyuan; -- 教师角色只能查自己教的课、自己班的学生、录自己课的成绩 EXEC sp_addrole role_teacher; -- 查自己教的课通过 Course.Tno 关联 GRANT SELECT ON Course TO role_teacher; -- 查自己课的学生通过 SC.Sno 关联 Student GRANT SELECT ON SC TO role_teacher; GRANT SELECT ON Student TO role_teacher; -- 录成绩只允许 UPDATE 自己课的 SC 表特定字段 GRANT UPDATE(Grade, Daigrade, Midgrade, Lasgrade, Fingrade) ON SC TO role_teacher; -- 学生角色只能查自己的信息和成绩 EXEC sp_addrole role_student; GRANT SELECT ON Student TO role_student; GRANT SELECT ON SC TO role_student; GRANT SELECT ON Course TO role_student; -- 管理员角色全库权限慎用 EXEC sp_addrole role_admin; GRANT CONTROL ON DATABASE::eisbook TO role_admin; -- 步骤4将用户加入对应角色 EXEC sp_addrolemember role_jiaowuyuan, jiaowuyuan; EXEC sp_addrolemember role_teacher, teacher001; EXEC sp_addrolemember role_student, student2023; EXEC sp_addrolemember role_admin, admin;逻辑说明教师查“自己教的课”靠的是Course.Tno teacher001这个条件必须在应用层 SQL 查询中硬编码数据库权限只管“能不能查 Course 表”不管查哪行。学生成绩录入权限限制在UPDATE特定字段防止教师误删Sno或Cno导致记录丢失。所有角色都没有DROP TABLE、TRUNCATE TABLE、ALTER TABLE权限——这是生产环境铁律课程设计也该养成习惯。3.2 应用层如何配合——C# 登录后动态切换数据库连接用户报告 6.2 节的 C# 代码只写了窗体逻辑没写数据库连接。真实场景中登录成功后必须用对应用户的账号密码重连数据库而不是用一个万能账号如sa连到底// 登录验证后根据用户类型拼接连接字符串 string connStr; switch (userRole) { case jiaowuyuan: connStr serverlocalhost;databaseeisbook;uidjiaowuyuan;pwdpwd123;; break; case teacher: connStr serverlocalhost;databaseeisbook;uidteacher001;pwdpwd456;; break; case student: connStr serverlocalhost;databaseeisbook;uidstudent2023;pwdpwd789;; break; default: throw new Exception(未知角色); } SqlConnection conn new SqlConnection(connStr); // 后续所有操作都用此连接参数说明uid和pwd必须与sp_addlogin创建的登录名密码严格一致连接字符串中不能出现Integrated SecuritySSPIWindows 认证否则所有用户都以当前 Windows 用户身份登录权限控制失效密码明文写在代码里是教学项目可接受的实际项目必须加密存储但绝不能用sa账号硬编码。3.3 避坑权限配置的四大血泪现场现象 → 原因 → 解决全是我在实验室真实踩过的坑现象教师登录后点击“查看所教课程学生名单”界面空白SQL Server Profiler 显示SELECT * FROM SC WHERE CnoDB-2023-A返回 0 行。原因SC表的Cno字段值是DB-2023-A但Course表里Cno是DB-2023-A而教师在Course表里Tno填的是T001但SC表里没关联Course表应用层查询没 JOIN只查了SC表本身。解决应用层 SQL 必须写成SELECT s.* FROM SC sc JOIN Student s ON sc.Snos.Sno WHERE sc.Cno IN (SELECT Cno FROM Course WHERE TnoT001)或在SC表加Tno字段冗余不推荐。现象学生选课时点“提交”按钮报错Cannot insert duplicate key row in object SC。原因前端没做“是否已选”校验学生手抖点了两次两条相同(Sno, Cno)的 INSERT 同时发过来。解决除了数据库UNIQUE INDEX应用层必须在插入前SELECT COUNT(*) FROM SC WHERE SnoS2023001 AND CnoDB-2023-A为 0 才允许插入。现象管理员修改了一个教师的Tno工作证号结果该教师所有课程记录里的Tno没变导致课程找不到教师。原因Course.Tno是外键但没设ON UPDATE CASCADESQL Server 2000 不支持得手动处理。解决管理员修改教师信息时应用层必须同步UPDATE Course SET TnonewTno WHERE TnooldTno并在事务中执行。现象用admin账号登录执行DELETE FROM Student WHERE SnoS2023001成功但SC表里该学生的选课记录还在。原因SC.Sno外键没设ON DELETE CASCADE且DELETE语句没检查依赖。解决管理员删除学生前应用层必须先DELETE FROM SC WHERE SnoS2023001再删Student并用事务包裹。4. 核心业务 SQL从自动排课到成绩计算五条救命级查询语句4.1 自动排课的底层逻辑不是 AI是带约束的笛卡尔积筛选报告里“系统管理员可以实现自动排课”听起来很高级其实本质是给定一批教室、一批课程、一批班级、一批教师找出所有满足以下条件的(教室, 课程, 班级, 教师, 时间)组合教室容量 ≥ 班级人数教师当天没其他课查Course表的上课时间天字段教室当天该时段没被占用需建ClassroomSchedule表记录占用课程类型必修/选修匹配班级培养方案。由于报告没提供Classroom和ClassroomSchedule表我们用最简模型实现“为某班级安排某课程”的可行性检查-- 假设要为班级 CS2023A 安排课程 DB-2023-A -- 步骤1查该课程所需教师 SELECT Tno FROM Course WHERE Cno DB-2023-A; -- 步骤2查该教师本周空闲时段简化假设 Course 表有 WeekDay 字段 SELECT DISTINCT WeekDay FROM Course WHERE Tno T001 AND WeekDay ! 周一; -- 步骤3查教室空闲时段需 ClassroomSchedule 表此处模拟 -- SELECT RoomNo FROM Classroom c -- JOIN ClassroomSchedule cs ON c.RoomNo cs.RoomNo -- WHERE c.Capacity (SELECT COUNT(*) FROM Student WHERE ClassCS2023A) -- AND cs.WeekDay 周一 AND cs.TimeSlot 1-2节 AND cs.Status 空闲; -- 步骤4组合出可行方案伪代码实际需应用层循环 -- FOR each 教师Tno WHERE Tno in (步骤1) -- FOR each WeekDay WHERE WeekDay in (步骤2) -- FOR each RoomNo WHERE RoomNo in (步骤3) -- INSERT INTO Schedule (Class, Cno, Tno, RoomNo, WeekDay, TimeSlot) -- VALUES (CS2023A, DB-2023-A, Tno, RoomNo, WeekDay, 1-2节);参数说明WeekDay字段在报告原始表结构里不存在是排课必需扩展字段必须加到Course表或新建Schedule表真实排课算法远比这复杂涉及遗传算法、约束求解但课程设计级别用这种“穷举过滤”完全够用且逻辑清晰可讲。4.2 成绩计算总评成绩不是简单平均是带权重的加权和报告表 5-3 里成绩字段是单值但 4.2 节明确要求“期中、平时、期末、总评”且SC表结构也包含这些字段。总评成绩必须由应用层或数据库触发器计算不能靠人工填-- 方案1应用层计算推荐逻辑透明 // C# 代码示例 decimal finalGrade 0.2m * daigrade 0.3m * midgrade 0.5m * lasgrade; // 然后 UPDATE SC SET Fingrade finalGrade, Grade finalGrade WHERE SnoS1 AND CnoC1; -- 方案2SQL Server 触发器自动但调试难 CREATE TRIGGER tr_UpdateFinalGrade ON SC AFTER INSERT, UPDATE AS BEGIN UPDATE SC SET Fingrade ISNULL(i.Daigrade, 0)*0.2 ISNULL(i.Midgrade, 0)*0.3 ISNULL(i.Lasgrade, 0)*0.5, Grade ISNULL(i.Daigrade, 0)*0.2 ISNULL(i.Midgrade, 0)*0.3 ISNULL(i.Lasgrade, 0)*0.5 FROM SC s INNER JOIN inserted i ON s.Sno i.Sno AND s.Cno i.Cno WHERE i.Daigrade IS NOT NULL AND i.Midgrade IS NOT NULL AND i.Lasgrade IS NOT NULL; END;逻辑说明权重0.2:0.3:0.5是常见比例可根据学校政策调整ISNULL()防止某项为空时整个计算结果为NULL触发器只在三项都不为空时才计算避免草稿状态干扰。4.3 多条件模糊查询学生信息查询的终极 SQL 模板报告 2.4 节“综合查询”要求支持多条件、模糊查询。一条通用 SQL 可覆盖 90% 场景-- 学生信息查询支持学号、姓名、班级、院系任意组合姓名支持模糊 SELECT s.Sno, s.Sname, s.Ssex, s.Sage, c.ClassName, d.Dname FROM Student s JOIN Class c ON s.Class c.Class JOIN Sdept d ON s.Dno d.Dno WHERE 11 AND (Sno IS NULL OR s.Sno LIKE % Sno %) -- 学号模糊 AND (Sname IS NULL OR s.Sname LIKE % Sname %) -- 姓名模糊 AND (Class IS NULL OR s.Class Class) -- 班级精确 AND (Dno IS NULL OR s.Dno Dno); -- 院系精确参数说明Sno,Sname等是存储过程参数或 C# SqlCommand 参数WHERE 11是为了方便动态拼接避免判断第一个条件是否加AND姓名用LIKE模糊学号用LIKE是为支持“查2023级所有学生”Sno2023%班级、院系用精确匹配因它们是编码不该模糊。4.4 评教统计从原始打分到院系教师排名学生评教后管理员需要看“计算机系张老师满意度 4.8 分”。这需要聚合查询-- 按院系、教师统计平均满意度 SELECT d.Dname AS 院系名称, t.Tname AS 教师姓名, AVG(e.Satisfaction) AS 平均满意度, COUNT(*) AS 评教人数 FROM Evaluate e JOIN Teacher t ON e.Tno t.Tno JOIN Sdept d ON t.Dno d.Dno GROUP BY d.Dname, t.Tname ORDER BY d.Dname, AVG(e.Satisfaction) DESC;逻辑说明Evaluate表评教表在报告表 5-6 中存在字段Satisfaction是满意度分数如 1-5 分GROUP BY必须包含所有非聚合字段d.Dname,t.Tname否则 SQL Server 报错ORDER BY让高分教师排前面方便管理员重点关注。4.5 必修课完成度检查每个学生离毕业还差几学分这是教务核心业务。需计算学生已修必修课学分总和 vs 专业要求最低总学分。-- 学生 S2023001 的必修课完成情况 SELECT s.Sno, s.Sname, p.Ccredit AS 专业要求最低总学分, ISNULL(SUM(c.Credit), 0) AS 已修必修学分, p.Ccredit - ISNULL(SUM(c.Credit), 0) AS 差额学分 FROM Student s JOIN Class cl ON s.Class cl.Class JOIN Major p ON cl.Mno p.Mno -- Major 表专业表在报告中叫“专业基本信息表” LEFT JOIN SC sc ON s.Sno sc.Sno LEFT JOIN Course c ON sc.Cno c.Cno AND c.CourseType 必修 -- CourseType 字段需扩展 WHERE s.Sno S2023001 GROUP BY s.Sno, s.Sname, p.Ccredit;参数说明CourseType字段在原始报告表 5-7 中不存在是必修/选修区分必需必须加到Course表LEFT JOIN确保即使学生一门必修课都没选也能查出已修学分0ISNULL(SUM(), 0)防止SUM(NULL)返回NULL。5. 从 Word 报告到可运行系统C# 窗体工程的编译、调试与部署避坑指南5.1 VS2008 工程文件解析不只是双击 .sln报告 6.2 节的 C# 代码片段来自一个 Windows Forms 应用但没给工程结构。一个可运行的教务系统至少包含文件/目录作用报告中对应位置MainForm.cs主窗体MDI 容器含菜单栏登录、管理员、教师、学生图 6-1、6-2代码片段LoginForm.cs独立登录窗体验证用户名密码后创建对应角色连接报告未提但必须存在StudentInfo.cs学生信息管理窗体含 DataGridView 绑定Student表menuItem3_Click调用CourseElect.cs学生选课窗体含课程列表 DataGrid 和“选课”按钮图 6-3代码片段App.config配置文件存数据库连接字符串不能硬编码在代码里报告未提关键操作新建工程时选Windows Forms Application.NET Framework 版本选3.5兼容 SQL Server 2000App.config中添加configuration appSettings add keyConnStr valueserverlocalhost;databaseeisbook;uid{0};pwd{1}; / /appSettings /configuration登录后用string.Format(ConfigurationManager.AppSettings[ConnStr], username, password)拼连接字符串。5.2 数据库连接失败的五大排查路径这是新手 90% 的卡点按顺序查SQL Server 服务没开WinR →services.msc→ 找SQL Server (MSSQLSERVER)→ 状态是否“正在运行”没开就右键“启动”。数据库名写错连接字符串里databaseeisbook但 SQL Server Management Studio 里实际数据库名是EISBOOK或eisbook_db大小写敏感用 SSMS 刷新确认。用户无数据库访问权SSMS 登录eisbook数据库 → 安全性 → 用户 → 右键你的用户名如jiaowuyuan→ 属性 → “用户映射” → 勾选eisbook数据库 → 角色成员中勾选db_datareader,db_datawriter教务员还需db_owner。TCP/IP 协议未启用SQL Server 配置管理器 → SQL Server 网络配置 → MSSQLSERVER 的协议 → 右键TCP/IP→ 启用 → 重启服务。防火墙拦截控制面板 → Windows Defender 防火墙 → 允许应用通过防火墙 → 勾选SQL Server (MSSQLSERVER)。5.3 DataGridView 绑定数据源的正确姿势报告图 6-3 的dataGrid1.DataSourcethis.electTable;是典型错误写法——electTable是 DataSet 的 Table但没填充数据。正确流程// 在 CourseElect_Load 事件中 private void CourseElect_Load(object sender, EventArgs e) { // 1. 创建数据适配器用教务员账号连因学生不能查课程表 string connStr serverlocalhost;databaseeisbook;uidjiaowuyuan;pwdpwd123;; SqlConnection conn new SqlConnection(connStr); SqlDataAdapter da new SqlDataAdapter( SELECT Cno, Cname, Credit, Cnum FROM Course WHERE CourseType必修, conn); // 2. 创建 DataSet 并填充 DataSet ds new DataSet(); da.Fill(ds, Course); // 填充到 ds.Tables[Course] // 3. 绑定到 DataGrid不是直接绑 Table dataGrid1.DataSource ds.Tables[Course]; // 4. 可选隐藏不需要的列 dataGrid1.Columns[Cno].Visible false; // 课序号不显示给学生 }逻辑说明学生选课窗体查课程必须用教务员账号因Course表权限给了role_jiaowuyuan不能用学生账号Fill()后ds.Tables[Course]才有数据直接this.electTable是 nullDataGrid绑定DataTable不是DataSet。5.4 部署到其他电脑三步打包拒绝“在我机器上好好的”发布数据库SSMS 右键eisbook数据库 → 任务 → 生成脚本 → “编写整个数据库的数据和架构” → 保存为eisbook.sql目标电脑装好 SQL Server执行eisbook.sql创建库和表。发布应用程序Visual Studio → 生成 → 发布 → 选择文件夹 → 下一步 → 完成生成的Application Files文件夹复制到目标电脑。配置目标电脑安装 .NET Framework 3.5Win10 默认不装需控制面板启用修改App.config中的连接字符串指向目标电脑的 SQL Serverserver目标IP运行setup.exe安装。血泪经验绝对不要用localhost写死在App.config里部署到局域网其他机器时必须改成server192.168.1.100如果目标电脑没装 SQL Server宁可放弃也不要尝试用 SQLite 替代——那会彻底偏离课程设计要求的“数据库技术应用”。6. 我的验证清单每次交付前必跑的七条 SQL 与三个界面操作这不是一个“做完就扔”的课程设计而是一个需要向老师证明“它真能用”的作品。从那以后我每次交作业都强制走一遍这个清单没一次被问倒过。希望帮到你。6.1 数据库层验证七条 SQL覆盖核心业务把下面七条 SQL 复制到 SSMS逐条执行全部返回预期结果才算过关-- 1. 检查教务员能否看到所有学生应返回 0 行 SELECT COUNT(*) FROM Student; -- 2. 检查教师能否看到自己教的课替换 Tno SELECT * FROM Course WHERE Tno T001; -- 3. 检查学生能否看到自己选 p a hrefhttps://download.csdn.net/download/yunxidzh/23255554 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p

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

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

免费获取报价 →
↑