资源描述
精选优质文档-倾情为你奉上数据库原理实验报告学号:姓名:实验一:SQL定义功能、数据插入 1建立教学数据库的三个基本表:S(Sno,Sname,Ssex,Sage,Sdept) 学生(学号,姓名,性别,年龄,系)SC(Sno,Cno,Grade) 选课(学号,课程号,成绩)C(Cno,Cname,Cpno,Ccredit) 课程(课程号,课程名,先行课,学分)_create table S(Sno char(9) PRIMARY KEY,Sname char(40),Ssex char(2),Sage SMALLINT,Sdept char(20); create table SC(Sno char(9),Cno char(4),Grade SMALLINT);create table C(Cno char(4),Cname char(40),Cpno char(4),Ccredit SMALLINT,);insert into Svalues(,李勇,男,20,CS);insert into Svalues(,刘晨,女,19,CS);insert into Svalues(20204,王敏,女,18,MA);insert into Svalues(30203,张立,男,19,IS);insert into SCvalues(,1,92);insert into SCvalues(,2,85);insert into SCvalues(,3,88);insert into SCvalues(,2,90);insert into SCvalues(,3,80); insert into Cvalues(1,数据库,5,4);insert into Cvalues(1,数学, ,2);insert into Cvalues(1,信息系统,1,4);insert into Cvalues(1,操作系统,6,3);insert into Cvalues(1,数据结构,7,4);insert into Cvalues(1,数据处理, ,2);insert into Cvalues(1,PASCAL语言,6,4);SQL select * from SSNO SNAME SSEX SAGE SDEPT- - - - 李勇 男 20 CS 刘晨 女 19 CS 王敏 女 18 MA 张立 男 19 ISSQL select * from SCSNO CNO GRADE- - - 1 92 2 85 3 88 2 90 3 80SQL select * from CCNO CNAME CPNO CCREDIT- - - -1 数据库 5 41 数学 21 信息系统 1 41 操作系统 6 31 数据结构 7 41 数据处理 21 PASCAL语言 6 4_2DROP TABLE、ALTER TABLE、CREATE INDEX、DROP INDEX 及INSERT语句输入数据。_ create table z(Sno char(5), sage char(2), Sname char(6);insert into zvalues(15121,20,李勇);insert into zvalues(30504,20,朱猪);ALTER table z ADD s_entrance DATE;DROP table z;CREATE UNIQUE INDEX StuSno ON z(Sno);DROP INDEX StuSno;_实验二:数据查询 1查询选修1号课程的学生学号与姓名。 SQL SELECT Sno,Sname 2 FROM S 3 WHERE EXISTS 4 (SELECT * 5 FROM SC 6 WHERE Sno=S.Sno AND Cno=1);SNO SNAME- - 李勇2查询选修课程名为数据结构的学生学号与姓名。SQL SELECT Sno,Sname 2 FROM S 3 WHERE EXISTS 4 (SELECT * 5 FROM SC 6 WHERE Sno=S.Sno AND EXISTS 7 (SELECT * 8 FROM C 9 WHERE Cname=数据结构);SNO SNAME- - 刘晨 李勇3查询不选1号课程的学生学号与姓名。SQL SELECT Sno,Sname 2 FROM S 3 WHERE NOT EXISTS 4 (SELECT * 5 FROM SC 6 WHERE Sno=S.Sno AND Cno=1);SNO SNAME- - 刘晨20204 王敏30203 张立4查询学习全部课程学生姓名。SQL SELECT Sname 2 FROM S 3 WHERE NOT EXISTS 4 (SELECT * 5 FROM C 6 WHERE NOT EXISTS 7 (SELECT * 8 FROM SC 9 WHERE Sno=S.Sno AND Cno=C.Cno);SNAME-李勇5查询所有学生除了选修1号课程外所有成绩均及格的学生的学号和平均成绩,其结果按平均成绩的降序排列。create view dot (Sno,Cno,Grade)AS select S.Sno,Cno,Gradefrom S,SCwhere S.Sno=SC.Sno and Cno!=1;select Sno,avg(Grade) averagefrom dotwhere 60=80 and ccredit=2 and SC.Cno=C.Cnoselect Snamefrom Swhere Sno in(select Sno from xdot group by Sno having count(*)=3);8. 查询选课门数唯一的学生的学号。 create view dot (Sno,Ccount) AS select Sno,count(*) from SC group by Sno; select Sno from SC group by Sno having count(*)all (select Ccount from dot where dot.Sno!=SC.Sno); 实验三:数据修改、删除 1把1号课程的非空成绩提高10。SQL UPDATE SC 2 SET Grade=Grade*(1+0.1) 3 WHERE GRADE IS NOT NULL AND GRADE SELECT * FROM SC;SNO CNO GRADE- - - 1 101 2 85 3 88 2 90 3 802在SC表中删除课程名为数据结构的成绩的元组。SQL DELETE 2 FROM SC 3 WHERE CNO IN 4 (SELECT CNO 5 FROM C 6 WHERE C.CNO=SC.CNO AND CNAME=数据库);已删除 1 行。SQL SELECT * FROM SC;SNO CNO GRADE- - - 2 85 3 88 2 90 3 803在S和SC表中删除学号为95002的所有数据。SQL DELETE 2 FROM S 3 WHERE SNO =;已删除 1 行。SQL DELETE 2 FROM SC 3 WHERE SNO =;已删除2行。SQL SELECT * FROM S;SNO SNAME SS SAGE- - - -SDEPT- 李勇 男 20CS20204 王敏 女 18MA30203 张立 男 19ISSQL SELECT * FROM S;SNO SNAME SS SAGE- - - -SDEPT- 李勇 男 20CS20204 王敏 女 18MA30203 张立 男 19ISSQL SELECT * FROM SC;SNO CNO GRADE- - - 2 85 3 88实验四:视图的操作 1建立男学生的视图,属性包括学号、姓名、选修课程名和成绩。Create view gstudent(sno,sname,cname,grade)ASSelectS.Sno,Sname,C.Cname,Gradefrom S,SC,Cwhere S.Sno=SC.Sno and SC.Cno=C.Cno and Ssex=1;2在男学生视图中查询平均成绩大于80分的学生学号与姓名。select sno,sname from Swhere sno in(select sno from gstudent group by sno having avg(grade)80 );Notice: select sno,sname from gstudent group by sno; is wrong select sno,count(*) from gstudent group by sno; is true实验五:库函数,授权控制 1 计算每个学生有成绩的课程门数、平均成绩。select count(*),avg(grade)from SCwhere grade is not nullgroup by sno;2 使用GRANT语句,把对基本表S、SC、C的使用权限授给其它用户。GRANT ALL PRIVILEGESON TABLE S,SC,CTO PUBLIC;3实验完成后,撤消建立的基本表和视图。DROP TABLE S CASCADE;DROP TABLE SC CASCADE;DROP TABLE C CASCADE;DROP VIEW gstudent CASCADE;实验六:综合实验:实现一个小型管理信息系统 熟练掌握Visual C+和Pro*C访问数据库的方法,设计和实现学生通讯录或学生选课的一个小型管理信息系统。要求具有数据的增加、删除、修改和查询的基本功能,并尽可能提供较多的查询功能,用户界面要友好。课程结束前提交实验报告和程序。一、实验平台 操作系统:Windows XP 开发工具:Microsoft Visual Studio Pro*C/C+ 数据库:Oracle 9i二、系统介绍本系统功能模块划分:(1)对数据的浏览模块;(2)对数据的查询模块; (3) 对数据的添加模块;(4) 对数据的修改模块; 数据库部分包含一张表是addresslist其中建立表对应的SQL语句如下: 本通讯录会自动在没有表的情况下建立表三、实验步骤:1. 编写程序2. 通过Pro*C/C+预编译3. 用VC+编译4. 运行试用四、实验结果:1:登录界面2:所有信息3:插入界面4:删除界面5:修改界面6:查询界面五、实验心得: 本次实验在老师的指导下收获良多,pro*c程序经预编译后就能转变成C+程序了,在vc+工具中配置pro*c工具后就能编译,其实预编译可以不通过PROJECT.六、实验代码(预编译前的):#include #include #include #include #include void sql_error(char *msg)coutmsgendl;return;int main()cout*endl;cout*学生通讯录*endl;cout*endl;int t,n;char m;EXEC SQL BEGIN DECLARE SECTION; char username20;char pASsword20;char server10;char schoolnum10;char name20;char roomnum30;char roomphone17;char mobilephone17;char homephone17;char qqnum12;char email22;char remark22;char temp 10;EXEC SQL END DECLARE SECTION;coutusername;coutendlpASsword;coutendlserver;EXEC SQL CONNECT:username IDENTIFIED BY :pASsword USING :server;if(sqlca.sqlcode=0)coutConnect success!endl;elseprintf(%.*sn,sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);coutConnected to ORACLE AS user:usernameendl;EXEC SQL CREATE TABLE addresslist ( schoolnum varchar(9) PRIMARY KEY, name varchar(18) , roomnum varchar(28) , roomphone varchar(15) , mobilephone varchar(15) , homephone varchar(15) , qqnum varchar(10) , email varchar(40) , remark varchar(40) ); while(1)docoutendl;cout*endl;cout 请选择你要进行的操作endl;cout 0:所有信息endl; cout 1:插入数据endl; cout 2:删除数据endl; cout 3:修改数据endl; cout 4:查询endl; cout 5: 退出endl;cout*t;while(t5|t0); switch(t)cASe 0: EXEC SQL DECLARE tmp0 CURSOR FOR SELECT schoolnum,name,roomnum,roomphone,mobilephone,homephone,qqnum,email,remark FROM addresslist; EXEC SQL OPEN tmp0;EXEC SQL WHENEVER NOT FOUND DO break; for (;) EXEC SQL FETCH tmp0 INTO :schoolnum,:name,:roomnum,:roomphone,:mobilephone,:homephone,:qqnum,:email,:remark; coutschoolnum=schoolnumendl; coutname=nameendl; coutroomnum=roomnumendl; coutroomphone=roomphoneendl; coutmobilephone=mobilephoneendl; couthomephone=homephoneendl; coutqqnum=qqnumendl; coutemail=emailendl; coutremark=remarkendl; cout.endl; EXEC SQL CLOSE tmp0; cout按任意键返回; cin.ignore(); cin.get(m); system(cls); break; cASe 1: system(cls); coutendlschoolnum; coutendlname; coutendlroomnum; coutendlroomphone; coutendlmobilephone; coutendlhomephone; coutendlqqnum; coutendlemail; coutendlremark;EXEC SQL INSERT INTO addresslist(schoolnum,name,roomnum,roomphone,mobilephone,homephone,qqnum,email,remark)values(:schoolnum,:name,:roomnum,:roomphone,:mobilephone,:homephone,:qqnum,:email,:remark);EXEC SQL COMMIT; cout按任意键返回; cin.ignore(); cin.get(m); system(cls); break;cASe 2: system(cls); cout按什么删除?学号=1OR姓名=2n; switch(n) cASe 1: cout输入学号schoolnum:schoolnum; EXEC SQL DELETE FROM addresslist WHERE schoolnum=:schoolnum; break; cASe 2: cout输入姓名name:name; EXEC SQL DELETE FROM addresslist WHERE name=:name; break; cout按任意键返回; cin.ignore(); cin.get(m); system(cls); break;cASe 3: system(cls); cout输入要修改的学生学号schoolnumtemp; cout输入修改后的数据:endl; coutendlschoolnum; coutendlname; coutendlroomnum; coutendlroomphone; coutendlmobilephone; coutendlhomephone; coutendlqqnum; coutendlemail; coutendlremark; EXEC SQL UPDATE addresslist SET schoolnum= :schoolnum, name= :name, roomnum= :roomnum, roomphone= :roomphone, mobilephone= :mobilephone, homephone= :homephone, qqnum= :qqnum, email= :email, remark= :remark WHERE schoolnum=:temp; cout按任意键返回; cin.ignore(); cin.get(m); system(cls); break; cASe 4: system(cls); cout按什么查询?学号=1OR姓名=2n; switch(n) cASe 1: cout输入要查询的学生学号schoolnumtemp; EXEC SQL DECLARE tmp1 CURSOR FOR SELECT schoolnum,name,roomnum,roomphone,mobilephone,homephone,qqnum,email,remark FROM addresslist WHERE schoolnum=:temp; EXEC SQL OPEN tmp1; EXEC SQL WHENEVER NOT FOUND DO break; for (;) EXEC SQL FETCH tmp1 INTO :schoolnum,:name,:roomnum,:roomphone,:mobilephone,:homephone,:qqnum,:email,:remark; coutschoolnum=schoolnumendl; coutname=nameendl; coutroomnum=roomnumendl; coutroomphone=roomphoneendl; coutmobilephone=mobilephoneendl; couthomephone=homephoneendl; coutqqnum=qqnumendl; coutemail=emailendl; coutremark=remarkendl; EXEC SQL CLOSE tmp1; break; break; cASe 2: cout输入要查询的学生姓名nametemp; EXEC SQL DECLARE tmp2 CURSOR FOR SELECT schoolnum,name,roomnum,roomphone,mobilephone,homephone,qqnum,email,remark FROM addresslist WHERE name=:temp; EXEC SQL OPEN tmp2; EXEC SQL WHENEVER NOT FOUND DO break; for (;) EXEC SQL FETCH tmp2 INTO :schoolnum,:name,:roomnum,:roomphone,:mobilephone,:homephone,:qqnum,:email,:remark; coutschoolnum=schoolnumendl; coutname=nameendl; coutroomnum=roomnumendl; coutroomphone=roomphoneendl; coutmobilephone=mobilephoneendl; couthomephone=homephoneendl; coutqqnum=qqnumendl; coutemail=emailendl; coutremark=remarkendl; EXEC SQL CLOSE tmp2; break; cout按任意键返回; cin.ignore(); cin.get(m); system(cls); break;cASe 5: EXEC SQL COMMIT WORK RELEASE; coutendl; cout.程序退出.endl; return 0;实验七:综合实验:实现一个小型管理信息系统 10学时熟练掌握Visusl C+ 6.0通过ODBC访问数据库的方法,设计和实现学生通讯录或学生选课的一个小型管理信息系统。要求具有数据的增加、删除、修改和查询的基本功能,并尽可能提供较多的查询功能,用户界面要友好。课程结束前提交实验报告和程序。1用Oracle 9i中建立学生选课数据库,包括Student、Course、SC三张表。所用的定义及数据插入语句如上所述。2在Visusl C+6.0中用ODBC和Oracle进行连接,建立系统的初步框架。3编写相应的浏览更新及查询数据代码。4实验结果:系统运行的界面如下:a:连接上数据库:b:添加c:检索界面D:删除通讯录元组E:修改元组5实验感想本次实验大致过程按照老师给的网站,通过MFC实现ODBC编程,虽然大致过程网站上都有,不过实现起来还是花了很大一番功夫的,不过之前对MFC有所研究,所以建工程的对话框时还是很轻松的。在此要感谢老师及同学们的帮助。6实验代码:【见文件夹addresslist】下午13:0017:00度。全体员工都必须自觉遵守工作时间,实行不定时工作制的员工不必打卡。3.1.2.2打卡次数:一日两次,即早上上班打卡一次,下午下班打卡一次。3.1.2.3打卡时间:打卡时间为上班到岗时间和下班离岗时间; 3.1.2.4因公外出不能打卡:因公外出不能打卡应填写外勤登记表,注明外出日期、事由、外勤起止时间。因公外出需事先申请,如因特殊情况不能事先申请,应在事毕到岗当日完成申请、审批手续,否则按旷工处理。因停电、卡钟(工卡)故障未打卡的员工,上班前、下班后要及时到部门考勤员处填写未打卡补签申请表,由直接主管签字证明当日的出勤状况,报部门经理、人力资源部批准后,月底由部门考勤员据此上报考勤。上述情况考勤由各部门或分公司和项目文员协助人力资源部进行管理。3.1.2.5手工考勤制度3.1.2.6手工考勤制申请:由于工作性质,员工无法正常打卡(如外围人员、出差),可由各部门提出人员名单,经主管副总批准后,报人力资源部审批备案。3.1.2.7参与手工考勤的员工,需由其主管部门的部门考勤员(文员)或部门指定人员进行考勤管理,并于每月26日前向人力资源部递交考勤报表。3.1.2.8参与手工考勤的员工如有请假情况发生,应遵守相关请、休假制度,如实填报相关表单。3.1.2.9 外派员工在外派工作期间的考勤,需在外派公司打卡记录;如遇中途出差,持出差证明,出差期间的考勤在出差地所在公司打卡记录;3.2加班管理3.2.1定义加班是指员工在节假日或公司规定的休息日仍照常工作的情况。A现场管理人员和劳务人员的加班应严格控制,各部门应按月工时标准,合理安排工作班次。部门经理要严格审批员工排班表,保证员工有效工时达到要求。凡是达到月工时标准的,应扣减员工本人的存休或工资;对超出月工时标准的,应说明理由,报主管副总和人力资源部审批。 B因员工月薪工资中的补贴已包括延时工作补贴,所以延时工作在4小时(不含)以下的,不再另计加班工资。因工作需要,一般员工延时工作4小时至8小时可申报加班半天,超过8小时可申报加班1天。对主管(含)以上管理人员,一般情况下延时工作不计加班,因特殊情况经总经理以上领导批准的延时工作,可按以上标准计加班。3.2.2.2员工加班应提前申请,事先填写加班申请表,因无法确定加班工时的,应在本次加班完成后3个工作日内补填加班申请表。加班申请表经部门经理同意,主管副总经理审核报总经理批准后有效。加班申请表必须事前当月内上报有效,如遇特殊情况,也必须在一周内上报至总经理批准。如未履行上述程序,视为乙方自愿加班。3.2.2.3员工加班,也应按规定打卡,没有打卡记录的加班,公司不予承认;有打卡记录但无公司总经理批准的加班,公司不予承认加班。3.2.2.4原则上,参加公司组织的各种培训、集体活动不计加班。3.2.2.5加班工资的补偿:员工在排班休息日的加班,可以以倒休形式安排补休。原则上,员工加班以倒休形式补休的,公司将根据工作需要统一安排在春节前后补休。加班可按1:1的比例冲抵病、事假。3.2.3加班的申请、审批、确认流程3.2.3.1加班申请表在各部门文员处领取,加班统计周期为上月26日至本月25日。3.2.3.2员工加班也要按规定打卡,没有打卡记录的加班,公司不予承认。各部门的考勤员(文员)负责加班申请表的保管及加班申报。员工加班应提前申请,事先填写加班申请表加班前到部门考勤员(文员)处领取加班申请表,加班申请表经项目管理中心或部门经理同意,主管副总审核,总经理签字批准后有效。填写并履行完审批手续后交由部门考勤员(文员)保管。3.2.3.3部门考勤员(文员)负责检查、复核确认考勤记录的真实有效性并在每月27日汇总交人力资源部,逾期未交的加班记录公司不予承认。已经很久没有写日志了,最近有一种特别强烈的写日志的想法!可是思绪一直都被各种考试,各种复习围攻着,无法脱身
展开阅读全文