第一篇:数据库学生数据库代码
代码
#include
char a[16];
char s[16];
char d[16];
char f[24];
struct person *next;}stu;////////////////////////////////////////////主菜单 void menu(){inti=0;printf(“t**************************************************************************************n”);printf(“t********************************通讯录管理程序****************************************n”);printf(“t**************************************************************************************n”);printf(“t*
tt1添加通讯录 *n”);printf(“t*
tt2修改通讯录 *n”);printf(“t*
tt3查找通讯录 *n”);printf(“t*
tt4删除通讯录 *n”);printf(“t*
tt5显示通讯录 *n”);printf(“t*
tt6统计通讯录 *n”);printf(“t*
tt7退出通讯录 *n”);printf(“t**************************************************************************************n”);printf(“ttt 请输入操作1-7,以Enter结束n”);printf(“ttt 请输入:”);while(i==0){scanf(“%d”,&i);switch(i)//用switch函数实现多分支选择结构
{ case 1:tianjia();break;case 2:xiugai();break;case 3:chazhao();break;case 4:shanchu();break;case 5:xianshi();break;case 6:tongji();break;case 7:printf(“ttt谢谢您的使用,请按任意键退出....n”);getchar();break;default:printf(“tt 您的输入有误,请重新输入,并以Enter结束n”);menu();} } } //////////////////////1添加 voidtianjia(){ int w=0;inti=0,n;struct person *head;struct person *p1,*p2;
printf(“tt请输入要操作的通讯录文件 1 同学 2 家人 3 同事 4 朋友:”);printf(“请输入:”);while(w==0){scanf(“%d”,&w);
if(w==1)//建立同学文件
{
if((fp=fopen(“tongxue.txt”,“a”))==NULL)
{ fp=fopen(“tongxue.txt”,“w+”);
printf(“tttt同学文件已建立”);
}
else printf(“tttt同学文件已存在ntttt”);
} else if(w==2)//建立家人文件
{
if((fp=fopen(“jiaren.txt”,“a”))==NULL)
{ fp=fopen(“jiaren.txt”,“w+”);
printf(“tttt家人文件已建立”);
} else printf(“tttt家人文件已存在ntttt”);
} else if(w==3)//建立同事文件 { if((fp=fopen(“tongshi.txt”,“a”))==NULL)
{ fp=fopen(“tongshi.txt”,“w+”);
printf(“tttt同事文件已建立”);
} else printf(“tttt同事文件已存在ntttt”);} else if(w==4)//建立朋友文件
{ if((fp=fopen(“pengyou.txt”,“a”))==NULL)
{ fp=fopen(“pengyou.txt”,“w+”);
printf(“tttt朋友文件已建立”);
} else printf(“tttt朋友文件已存在n”);} else {printf(“ttt您的输入有误,请重新输入:”);w=0;} } printf(“tttt请输入添加的个数:”);scanf(“%d”,&n);p2=malloc(LEN);while(i { p1=malloc(LEN);if(i==0)head=p1;else p2->next=p1;printf(“ttt请输入以下信息,并以Enter结束n”);printf(“ttt姓 名 电话号码 地址nttt”);scanf(“%s%s%s%s”,p1->a,p1->s,p1->d,p1->f);p2=p1;i++;} p2->next=NULL;while(head!=NULL){ fprintf(fp,“%-16s%-16s%-16s%-24sn”,head->a,head->s,head->d,head->f);head=head->next;} fclose(fp);menu();} ///////////////////2修改 voidxiugai(){ inti=0,w=0;long offset;char a[16],s[16],d[16],f[24];struct person *p;printf(“tt请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:nttt”);printf(“请输入:”);while(w==0){scanf(“%d”,&w); if(w==1) { if((fp=fopen(“tongxue.txt”,“r+”))==NULL) { printf(“ttt请添加数据n”); menu(); fp=fopen(“tongxue.txt”,“w+”); printf(“tttt同学文件已建立n”); } else printf(“tttt同学文件已存在n”); } else if(w==2) { if((fp=fopen(“jiaren.txt”,“r+”))==NULL) { printf(“ttt请添加数据n”); menu(); fp=fopen(“jiaren.txt”,“w+”); printf(“tttt家人文件已建立n”); } else printf(“tttt家人文件已存在n”); } else if(w==3){ if((fp=fopen(“tongshi.txt”,“r+”))==NULL) { printf(“ttt请添加数据n”); menu(); fp=fopen(“tongshi.txt”,“w+”); printf(“tttt同事文件已建立n”); } else printf(“tttt同事文件已存在n”);} else if(w==4){ fp=fopen(“pengyou.txt”,“r+”);if((fp=fopen(“pengyou.txt”,“r+”))==NULL) { fp=fopen(“pengyou.txt”,“w+”); printf(“tttt朋友文件已建立n”); } else printf(“tttt朋友文件已存在”);} else{ printf(“tttt输入错误,请重新输入n”);w=0; } } printf(“ttt请输入要修改人的 姓 名:n ttttt”);scanf(“%s%s”,a,s);p=malloc(LEN);while(!feof(fp)){ offset=ftell(fp);fscanf(fp,“%s%s%s%sn”,p->a,p->s,p->d,p->f);if((strcmp(a,p->a)==0)&&(strcmp(s,p->s)==0)){ printf(“ttt已找到记录:nttt%-16s%-16s%-16s%-16sn”,p->a,p->s,p->d,p->f); i=1; break;} } if(i==1){ printf(“ttt请输入新的姓 名 号码 地址:nttt”);scanf(“%s%s%s%s”,a,s,d,f); fseek(fp,offset,0);fprintf(fp,“tttt%-16s%-16s%-16s%-24sn”,a,s,d,f); printf(“ttt恭喜,已修改成功!n”);} else printf(“ttt无此相关信息n”);fclose(fp);menu();} /////////////////////3查找 void chazhao(){ char a[16],s[16],d[16],f[24],m[16],n[16];int w=0,e=0; printf(“tt请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:nttt”);printf(“请输入:”);while(w==0){scanf(“%d”,&w); if(w==1) { if((fp=fopen(“tongxue.txt”,“r+”))==NULL) { printf(“tttt请添加数据n”); menu(); fp=fopen(“tongxue.txt”,“w+”); printf(“tttt同学文件已建立n”); } else printf(“tttt同学文件已存在n”); } else if(w==2) { if((fp=fopen(“jiaren.txt”,“r+”))==NULL) { printf(“tttt请添加数据n”); menu(); fp=fopen(“jiaren.txt”,“w+”); printf(“tttt家人文件已建立n”); } else printf(“tttt家人文件已存在n”); } else if(w==3){ if((fp=fopen(“tongshi.txt”,“r+”))==NULL) { printf(“tttt请添加数据n”); menu(); fp=fopen(“tongshi.txt”,“w+”); printf(“tttt同事文件已建立n”); } else printf(“tttt同事文件已存在n”);} else if(w==4){ fp=fopen(“pengyou.txt”,“r+”);if((fp=fopen(“pengyou.txt”,“r+”))==NULL) { printf(“tttt请先添加数据n”); menu(); fp=fopen(“pengyou.txt”,“w+”); printf(“tttt朋友文件已建立n”); } else printf(“tttt朋友文件已存在n”);} else {printf(“ttt输入错误,请重新输入n”);w=0;} } printf(“tt请输入查找方式 1:按姓氏查找 2:按姓名查找nttt”);while(e==0){scanf(“%d”,&e);if(e==1)//按姓氏查找 { printf(“ttt请输入姓氏:ntttt”);scanf(“%s”,m);printf(“ttt查找结果如下:nttt姓tt名tt电话tt地址nn”); while(feof(fp)==0){ fscanf(fp,“%s%s%s%sn”,a,s,d,f);if(strcmp(a,m)==0)printf(“ttt%-16s%-16s%-16s%-24sn”,a,s,d,f);} } else if(e==2)//按姓名查找 {printf(“ttt请输入姓t名:ntttt”);scanf(“%s%s”,m,n);printf(“ttt查找结果如下:nttt姓tt名tt电话tt地址nn”);while(feof(fp)==0) { fscanf(fp,“%s%s%s%sn”,a,s,d,f); if(strcmp(a,m)==0&&strcmp(s,n)==0)printf(“ttt%-16s%-16s%-16s%-24sn”,a,s,d,f); } } else {printf(“你想干嘛,重新输入吧!1按姓氏查找 2按姓名查找”);e=0;} } fclose(fp);menu();} /////////////////4删除 voidshanchu(){ inti=0,w=0;long offset;char a[16],s[16],d[16],f[24];struct person *p;printf(“tt请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:nttt”);printf(“请输入:”);while(w==0){scanf(“%d”,&w); if(w==1) { if((fp=fopen(“tongxue.txt”,“r+”))==NULL) { printf(“tttt请添加数据n”); menu(); fp=fopen(“tongxue.txt”,“w+”); printf(“tttt同学文件已建立n”); } else printf(“tttt同学文件已存在n”); } else if(w==2) { if((fp=fopen(“jiaren.txt”,“r+”))==NULL) { printf(“tttt请添加数据n”); menu(); fp=fopen(“jiaren.txt”,“w+”); printf(“tttt家人文件已建立n”); } else printf(“tttt家人文件已存在n”); } else if(w==3){ if((fp=fopen(“tongshi.txt”,“r+”))==NULL) { printf(“tttt请添加数据n”); menu(); fp=fopen(“tongshi.txt”,“w+”); printf(“tttt同事文件已建立n”); } else printf(“tttt同事文件已存在n”);} else if(w==4){ fp=fopen(“pengyou.txt”,“r+”);if((fp=fopen(“pengyou.txt”,“r+”))==NULL) { printf(“tttt请添加数据n”); menu(); fp=fopen(“pengyou.txt”,“w+”); printf(“tttt朋友文件已建立n”); } else printf(“tttt朋友文件已存在n”);} else{ printf(“tttt您的输入有误,请重新输入:”);w=0; } } printf(“ttt请输入要修改人的姓 名:n ttttt”);scanf(“%s%s”,a,s);p=malloc(LEN);while(!feof(fp)){ offset=ftell(fp);fscanf(fp,“%s%s%s%sn”,p->a,p->s,p->d,p->f);if((strcmp(a,p->a)==0)&&(strcmp(s,p->s)==0)){ printf(“ttt已找到记录:nttt%-16s%-16s%-16s%-16sn”,p->a,p->s,p->d,p->f); i=1; break;} } if(i==1)//找到信息,确认删除 { fseek(fp,offset,0);fprintf(fp,“%-16s%-16s%-16s%-24sn”,“",”“,”“,”“); printf(”ttt恭喜,已删除成功!n“); } else printf(”ttt好像没有此记录???n“);fclose(fp);menu();} /////////////////5显示 voidxianshi(){ char a[20],s[20],d[20],f[20];//足够大 int w=0; printf(”tt请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:nttt“);printf(”请输入:“);while(w==0){scanf(”%d“,&w); if(w==1) { if((fp=fopen(”tongxue.txt“,”r+“))==NULL) { fp=fopen(”tongxue.txt“,”w+“); printf(”tt请先添加信息n“); printf(”ttt请先添加数据n“); menu(); } else printf(”tt同学文件已存在n“); } else if(w==2) { if((fp=fopen(”jiaren.txt“,”r“))==NULL) { fp=fopen(”jiaren.txt“,”w+“); printf(”ttt请添加数据n“); menu(); } else printf(”ttt家人文件已存在n“); } else if(w==3){ if((fp=fopen(”tongshi.txt“,”r+“))==NULL) { fp=fopen(”tongshi.txt“,”w+“); printf(”ttt请添加数据n“); menu(); } else printf(”ttt同事文件已存在n“);} else if(w==4){ fp=fopen(”pengyou.txt“,”r+“);if((fp=fopen(”pengyou.txt“,”r+“))==NULL) { fp=fopen(”pengyou.txt“,”w+“); printf(”ttt请添加数据n“); menu(); } else printf(”ttt朋友文件已存在n“);} else {printf(”ttt您的输入有误,请重新输入:“);w=0;} } while(feof(fp)==0){ fscanf(fp,”%s%s%s%sn“,a,s,d,f);printf(”%-16s%-16s%-16s%-24sn“,a,s,d,f);} fclose(fp);menu();//返回主菜单继续接下来的操作 } ////////////////////6统计 voidtongji(){ int w=0,i=0; char a[20],s[20],d[20],f[20]; printf(”tt请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:nttt“);printf(”请输入:“);while(w==0){scanf(”%d“,&w); if(w==1) { if((fp=fopen(”tongxue.txt“,”r+“))==NULL) { printf(”ttt总数是0个,请先添加数据n“); menu(); fp=fopen(”tongxue.txt“,”w+“); printf(”tttt同学文件已建立n“); } else printf(”tttt同学文件已存在n“); } else if(w==2) { if((fp=fopen(”jiaren.txt“,”r+“))==NULL) { printf(”ttt总数是0个,请先添加数据n“); menu(); fp=fopen(”jiaren.txt“,”w+“); printf(”tttt家人文件已建立n“); } else printf(”tttt家人文件已存在n“); } else if(w==3){ if((fp=fopen(”tongshi.txt“,”r+“))==NULL) { printf(”ttt总数是0个,请先添加数据n“); menu(); fp=fopen(”tongshi.txt“,”w+“); printf(”tttt同事文件已建立n“); } else printf(”tttt同事文件已存在n“);} else if(w==4){ fp=fopen(”pengyou.txt“,”r+“);if((fp=fopen(”pengyou.txt“,”r+“))==NULL) { printf(”ttt总数是0个,请先添加数据n“); menu(); fp=fopen(”pengyou.txt“,”w+“); printf(”tttt朋友文件已建立“); } else printf(”tttt朋友文件已存在“);} else {printf(”ttt您的输入有误,请重新输入:“);w=0;} } while(feof(fp)==0){ fscanf(fp,”%s%s%d%s“,a,s,&d,f);i++;} printf(”nttt总数是%d个n“,--i);fclose(fp);menu();} ///////////////////主函数 #include { //主函数体开始 char a[20],b[20],c[20]=”admin“,d[20]=”12345“;//设置密码 printf(”nnnnn“);//欢迎界面 system(”COLOR 37“);//定义页面颜色 printf(”t**********Welcome to use the address book management system**********n“);printf(”n“);printf(”t**********************欢迎使用通讯录管理系统*************************n“);printf(”n“);printf(”nnnttt经常联系,问问彼此,最近你过得好吗?n“);printf(”n“);printf(”ttt 愿亲情、爱情、友情永不凋零!n“);printf(”nnnntt litter Copyright litter.Allrights reservednnn“);printf(”t*********************************************************************n“);Sleep(3000);(”cls“);printf(”t(Please enter your user name)请输入用户名:“); scanf(”%s“,a);printf(”t(Please input your password)请输入密码:“);scanf(”%s“,b);if((strcmp(a,c)==0)&&(strcmp(b,d)==0))//为什么改为a[20]就不行 { printf(”nnn(The user name and password are correct, welcome to use)用户名和密码正确,欢迎使用n“);Sleep(1000);system(”cls“);} else {printf(”(Password mistake, please press any key to exit)密码错误,请按任意键退出n“);exit(0);} system(”COLOR 37");menu();} 实验一 (1)无条件单表查询 select sname NAME,'year of birth:' BIRTH,2004-sage BIRTHDAY,LOWER(sdept)DEPARTMENT FROM student;(2)有条件单表查询 SELECT sname,sdept,sage FROM student WHERE sage NOT BETWEEN 20 AND 23;(3)单表嵌套(一层)查询 SELECT sno,sname,sdept FROM student WHERE sdept IN(SELECT sdept FROM student WHERE sname='刘晨');(4)复合条件多表查询 SELECT student.sno,sname,cname,grade FROM student ,sc,course WHERE student.sno=sc.sno AND sc.cno=course.cno;(5)使用COUNT()的单表查询 SELECT COUNT(*)FROM student;(6)使用AVG()的单表查询 SELECT AVG(grade)'平均成绩' from SC where CNO='1';(7)查询结果分组 SELECT cno,COUNT(sno)'人数' FROM sc GROUP BY cno;(8)查询结果排序 SELECT * FROM student ORDER BY sdept,sage DESC;(9)使用通配符的查询 SELECT sname,sno,ssex FROM student WHERE sname NOT LIKE'刘%';(10)使用换码字符的单表查询 SELECT cno,ccredit FROM course WHERE cname LIKE 'DB_Design'ESCAPE'';(11)插入单个元组 插入一个新学生元组 Insert into student(sno,sname,ssex,sdept,sage)values('200215128','陈冬','男','IS',18)(12)插入子查询结果 对每一个系,求学生平均年龄,并把结果存入数据库 Create table dept_age(sdept char(15),avg_age int)Insert into dept_age(sdept,avg_age)select sdept,avg(sage)from student group by sdept(13)修改某个元组的值 将学生200215121的年龄改为22岁 Update student set sage=’22’ where sno=’200215121’(14)修改多个元组的值 将所有学生的年龄增加一岁 Update student set sage=sage+1(15)删除一个元组的值 删除学号为200215128的学生记录 delete from student where sno='200215128'(16)建立视图 建立信息系学生的视图 create view is_student as select sno,sname,sage from student where sdept='IS' ×(17)查询视图 查询选修了1号课程的信息系学生信息 Select is_student.sno,sname from is_student,sc where is_student.sno=sc.sno and sc.cno=’1’ ×(18)更新视图 将信息系学生视图is_student中学号为95001的学生姓名改为李楠 update is_student set sname='李楠' where sno='95002' 将下列问题用SQL命令表示: 1.查询‘IS’系学生的学号、姓名、性别。 SELECT sno,sname,ssex FROM student WHERE sdept='IS';2.查询‘IS’系年龄在20岁以下的学生。 SELECT * FROM student WHERE sdept='IS'AND sage<20;3.查询所有不姓‘刘’的学生的学号、姓名、性别。 SELECT sname,sno,ssex FROM student WHERE sname NOT LIKE'刘%';4.查询student表中学生的总人数。 SELECT COUNT(*)'总人数' FROM student;5.查询和‘李勇’同性别的所有同学的姓名。 SELECT sname from student where ssex in(select ssex from student where sname='李勇');6.查询和‘李勇’同性别并同系的所有同学的姓名。 Select sname from student where ssex in(select ssex from student where sname='李勇')and sdept in(select sdept from student where sname='李勇')7.查询选修2号课程的学生的学号。Select sno from sc where cno='2' 8.求3号课程的平均成绩。 Select avg(grade)from sc where cno=’3’ 9.查询选修2号课程的学生的最高分。Select max(grade)from sc where cno=’2’ 10.按成绩降序排列,输出‘IS’系学生选修了2号课程的学生的姓名和成绩。 Select sname,grade from student,sc where sdept='IS' and cno='2' and student.sno=sc.sno order by grade desc SQL查询分析器下建数据库的命令代码: create database 霍双双200826352 on(name='霍双双200826352_data',filename='E: 霍霍 双双 双双 ***5 霍霍 双双 双双200826352_data.mdf',size=10mb,maxsize=50mb,filegrowth=10%)log on(name='霍双双200826352_log',filename='E:200826352_log.ldf',size=10mb,maxsize=50mb,filegrowth=10%)在查询分析器重建立各表的命令代码: 建立student表: create table student(sno char(5)primary key,sname char(20),ssex char(2),sage int,sdept char(15))建立course表: create table course(cno char(2)primary key,cname char(15),cpno char(2),ccredit int)建立cs表: use 霍双双200826352 create table sc(sno char(5),cno char(2),grade smallint,primary key(sno,cno),foreign key(sno)references student(sno),foreign key(cno)references course(cno))实验二 T-SQL查询、存储过程、触发器、完整性上机作业题 第一部分 :T-SQL程序设计 (1).如果3号课程的平均成绩在80分以上,则输出“3号课程成绩良好”,否则输出“3号成绩一般” declare @avg float set @avg=(select avg(grade)from sc where cno='3')if @avg>80print'3号课程成绩良好'else print'3号成绩一般'(2)计算并输出95003号学生的平均成绩,若无该生信息,则显示“该生未选课”,提示信息.declare @avg float if(select count(*)from sc where sno='95003')=0 print '该生未选课' else begin select @avg=avg(grade)from sc where sno='95003' print'95003号学生平均成绩' print @avg end(3).如果有成绩在90分以上的学生,则显示他的学号,课程和成绩,否则显示“没有学生的课程成绩在90分以上”提示信息 declare @text char(10)if exists(select grade from SC where grade>90)select Sno,Cno,Grade from SC where Grade>90 else begin set @text='没有学生的课程成绩在90分以上' print @text end ×(4).利用游标逐行显示student表中的记录。 declare stu cursor for select *from student open stu fetch next from stu while @@fetch_status=0 fetch next from stu close stu deallocate stu(5).用自定义函数计算全体男生的平均年龄 create function avg_age(@sex char(2))returns int as begin declare @aver int select @aver=(select avg(Sage)from Student where Ssex=@sex)return @aver end go declare @aver1 int,@sex char(2)set @sex='男' select @aver1=dbo.avg_age(@sex)select @aver1 as '全体男生的平均年龄' go(6).显示course表中课程名的前2个字符。select substring(Cname,1,2)from Course(7).在一列中显示student中各元组的学号中的年级,列名显示为“年级”;另一列中显示学号中的学生序列号,列名显示为“序号”。 select substring(Sno,1,2)年级,substring(Sno,3,len(Sno)-1)序号 from Student order by Sno(8).在选课表中显示学号、课程号,并根据成绩:0-59显示“不合格”;60-79显示“合格”;80-89显示“良好”;90-100显示“优秀。” select Sno as '学号',Cno as '课程号', grade =case when Grade<=59 then '不合格' when Grade>=60 and Grade<=79 then '合格' when Grade>=80 and Grade<=89 then '良好' else '优秀' end from SC 第二部分 :存储过程 (1)创建一个为worker表添加职工记录的存储过程Addworker go if exists(select name from sysobjects where name='Addworker' and type='P')drop procedure Addworker go create proc Addworker @职工号 char(4),@姓名 char(8),@性别 char(2),@出生日期 datetime,@党员否 char(2),@参加工作 datetime,@部门号 char(4)as insert into worker(职工号,姓名,性别,出生日期,党员否,参加工作,部门号)values(@职工号,@姓名,@性别,@出生日期,@党员否,@参加工作,@部门号)go exec Addworker '16','王璐','女','1988-11-20','否','2010-08-21','11'(2)创建一个存储过程Delworker删除worker表中指定职工号的记录 go if exists(select name from sysobjects where name='Delworker' and type='P')drop procedure Delworker go create procedure Delworker @职工号 char(4)as delete from worker where 职工号=@职工号 go exec Delworker '16'(3)显示存储过程Delworker的定义信息。Sp_helptext Delworker(4)删除存储过程Addworker和Delworker。drop procedure Addworker, Delworker(5)创建并执行以下存储过程: a.从数据库表中查询,返回学生学号、姓名、课程名、成绩 use 霍双双200826351 go if exists(select name from sysobjects where name='select_stu' and type='P')drop procedure select_stu go create procedure select_stu as select SC.Sno,Sname,Cname,Grade from Student,SC,Course where SC.Sno=Student.Sno and SC.Cno=Course.Cno go exec select_stu b.从数据库表中查询指定学号的学生学号,姓名,该存储过程接受与传递参数,精确匹配的值 use 霍双双200826351 go if exists(select name from sysobjects where name='select_sno' and type='P')drop procedure select_sno go create procedure select_sno @Sno char(5)as select Sno,Sname from Student where Sno=@Sno go exec select_sno '95002' ×第三部分:触发器 (1)在表depart上创建一个触发器 depart_update , 当更改部门号时同步更改 worker表中对应的部门号。Go If exists(select name from sysobjects where name='depart_update'and type='tr')drop trigger depart_update go Create trigger depart_update on depart for update as set worker.部门号=(select 部门号 from inserted)where worker.部门号=(select 部门号from deleted)(2)在表worker上创建一个触发器worker_delete,当删除职工记录时同步删除salary表中对应的职工记录。Go If exists(select name from sysobjects where name='worker_delete'and type='tr')drop trigger worker_delete go create trigger worker_delete on worker for delete as delete salary where salary.职工号=(select 职工号 from deleted)(3)删除触发器depart_update(4)删除触发器worker_delete(5)在数据库中创建一个触发器,向选课表添加一条纪录时,检查该纪录的学号在学生表中是否存在,检查该纪录的课程号在课程表中是否存在,若其中有一项为否,则拒绝添加操作,并显示“违反数据一致性”提示信息。Go If exists(select name from sysobjects where name='add_student'and type='tr')drop trigger add_student go create trigger add_student on sc for insert as go 第四部分:数据库完整性 1、实施worker表的“性别”字段默认值为“男”的约束 create default default_sex as '男' go sp_bindefault'default_sex','worker.性别' 2、实施salary表的“工资”字段值在0~9999的约束、create rule salary_rule as @salary='[0~9999]' go sp_bindrule 'salary_rule','salary.工资' 3、实施depart表的“部门号”字段值唯一的非聚集索引的约束 4、为worker表建立外键“部门号”,参考表depart的“部门号”列。 5、建立一个规则 sex:@性别=’男’OR @性别=’女’,将其绑定到worker表的“性别”列上。Create rule sex as @性别='男'OR @性别='女' Go Sp_bindrule 'sex','worker.性别' 6、删除1小题所建立的约束。 7、删除2小题所建立的约束。 8、删除3小题所建立的约束 9、删除4小题所建立的约束 10.解除5小题所建立的绑定并删除规则sex 建立数据库: create database 数据库 建表: create table 部门信息表 (部门编号 char(2)primary key ,部门名称 nchar(14),部门职能 nchar(14),部门人数 char(4))go create table 管理员信息表 (用户名 nchar(4)primary key ,密码 char(10),)go create table 用户信息表 (用户名char(10)primary key ,用户类型char(10),密码 char(10))go create table 员工工作岗位表 (姓名 nchar(4)primary key ,员工编号 char(4) 工作岗位 nchar(3),部门名称 nchar(10),参加工作时间 char(4))go create table 员工学历信息表 (姓名 nchar(4)primary key ,员工编号 char(4) 学历 nchar(2),毕业时间 char(10),毕业院校 nchar(10),外语情况 nchar(10),专业 nchar(10))go create table 员工婚姻情况表 (姓名 nchar(4)primary key ,员工编号 char(4) 婚姻情况 nchar(2),配偶姓名 nchar(4),配偶年龄 char(3),工作单位 nchar(10),)go create table 员工基本信息表 (员工编号 char(4)primary key ,姓名 nchar(4),性别 nchar(1),民族 nchar(3),出生年月 char(14),学历 nchar(10),政治面貌 nchar(3),婚姻状况 nchar(2),部门名称 nchar(10),工作岗位 nchar(10),) 建立视图: CREATE VIEW 按员工工作岗位查询 as SELECT 员工工作岗位表.工作岗位, 员工基本信息表.员工编号,员工基本信息表.姓名, 员工基本信息表.性别, 员工基本信息表.出生年月,员工基本信息表.学历, 员工基本信息表.婚姻状况,员工基本信息表.部门名称 FROM 员工工作岗位表 INNER JOIN 员工基本信息表 ON 员工工作岗位表.姓名 = 员工基本信息表.姓名 go CREATE VIEW 按员工详细信息查询 as SELECT 员工基本信息表.* FROM 员工基本信息表 go CREATE VIEW 按参加工作时间查询 as SELECT 员工工作岗位表.参加工作时间, 员工工作岗位表.工作岗位,员工基本信息表.员工编号, 员工基本信息表.姓名, 员工基本信息表.性别,员工基本信息表.出生年月, 员工基本信息表.部门名称 FROM 员工工作岗位表 INNER JOIN 员工基本信息表 ON 员工工作岗位表.姓名 = 员工基本信息表.姓名 触发器的建立 delete触发器: create trigger 删除员工1 ON 员工工作岗位表 for delete AS BEGIN DELETE FROM 员工基本信息表 WHERE 员工编号 IN(SELECT 员工编号 FROM DELETED)end go create trigger 删除员工2 ON 员工学历信息表 for delete AS BEGIN DELETE FROM 员工基本信息表 WHERE 员工编号 IN(SELECT 员工编号 FROM DELETED)end go create trigger 删除员工3 ON 员工婚姻情况表 for delete AS BEGIN DELETE FROM 员工基本信息表 WHERE 员工编号 IN(SELECT 员工编号 FROM DELETED)end go create trigger 删除员工4 ON 员工基本信息表 for delete AS BEGIN DELETE FROM 员工工作岗位表 WHERE 员工编号 IN(SELECT 员工编号 FROM DELETED)end go create trigger 删除员工5 ON 员工基本信息表 for delete AS BEGIN DELETE FROM 员工学历信息表 WHERE 员工编号 IN(SELECT 员工编号 FROM DELETED)end go create trigger 删除员工6 ON 员工基本信息表 for delete AS BEGIN DELETE FROM 员工婚姻情况表 WHERE 员工编号 IN(SELECT 员工编号 FROM DELETED)end Update触发器: Create Trigger 修改编号1 On 员工基本信息表 for Update As if Update(员工编号) begin Update 员工工作岗位表 Set 员工编号=i.员工编号 From 员工工作岗位表 br , Deleted d ,Inserted i Where br.员工编号=d.员工编号 end go Create Trigger 修改编号2 On 员工基本信息表 for Update As if Update(员工编号) begin Update 员工学历信息表 Set 员工编号=i.员工编号 From 员工学历信息表 br , Deleted d ,Inserted i Where br.员工编号=d.员工编号 end go Create Trigger 修改编号3 On 员工基本信息表 for Update As if Update(员工编号) begin Update 员工婚姻情况表 Set 员工编号=i.员工编号 From 员工婚姻情况表 br , Deleted Where br.员工编号=d.员工编号 end go Create Trigger 修改员工编号1 On 员工工作岗位表 for Update As if Update(员工编号) begin Update 员工基本信息表 Set 员工编号=i.员工编号 From 员工基本信息表 a , Deleted Where a.员工编号=d.员工编号 end go Create Trigger 修改员工编号2 On 员工学历信息表 for Update As if Update(员工编号) begin d ,Inserted i d ,Inserted i Update 员工基本信息表 Set 员工编号=i.员工编号 From 员工基本信息表 a , Deleted d ,Inserted i Where a.员工编号=d.员工编号 end go Create Trigger 修改员工编号3 On 员工婚姻情况表 for Update As if Update(员工编号) begin Update 员工基本信息表 Set 员工编号=i.员工编号 From 员工基本信息表 a , Deleted d ,Inserted i Where a.员工编号=d.员工编号 end 存储过程的建立: CREATE PROC 按婚姻查找 @婚姻状况 nchar(2)AS select 员工基本信息表.员工编号,员工基本信息表.姓名,员工婚姻情况表.婚姻情况,员工婚姻情况表.配偶姓名 from 员工基本信息表 inner join 员工婚姻情况表 on 员工基本信息表.员工编号=员工婚姻情况表.员工编号 where 员工婚姻情况表.婚姻情况=@婚姻状况 order by 员工基本信息表.员工编号 CREATE PROC 按学历查找 @员工学历 nchar(4)AS select 员工基本信息表.员工编号,员工基本信息表.姓名,员工学历信息表.学历,员工学历信息表.毕业院校,员工学历信息表.专业 from 员工基本信息表 inner join 员工学历信息表 on 员工基本信息表.员工编号=员工学历信息表.员工编号 where 员工学历信息表.学历=@员工学历 order by 员工基本信息表.员工编号 数据库营销案例 一、卖游戏币的例子 案例:有一个人,04年时,他曾做过游戏币生意,就是传说中的网游商人。他当时属于中间商,左手从打币工作室手中收货,右手再销售给的玩家。当时倒腾的是新浪代理的一款名为《天堂2》的游戏。他当时应该是这个游戏里最知名的商人,玩这个游戏的,特别是倒腾游戏币的,大部分都知道他。而且从收入上说,他也应该是同行中赚的最多的人之一。当时他一天最多可以赚2000多元,注意,说的是纯利润。而这成绩的背后,数据库营销帮了很大的忙。 分析:数据库营销的第一步是搜集客户资料。而搜集客户资料最好的方式就是与客户交流。而很多人上网卖东西,是卖完就拉倒,就再不与客户主动联系了,顶多是来新货后发发广告,这是很不可取的。但这个人上网卖东西有一个习惯,就是喜欢和客户聊天。比如说卖游戏币时,每个来买币的人,他都会和他聊一聊,弄清楚对方在那个城市、年龄有多大、做什么工作、玩了多少年网游、在游戏里玩到什么阶段、每月在游戏里的支出、以往是如何消费的、身边有多少个朋友一起玩、对其它玩家的影响力如何等等。当掌握了这些数据后,开始给用户分类,然后进行有针对性的维护。一般客户大概可以分四种: 1、暂时还不购买的客户: 很多客户并不马上购买,可能只是询询价。很多卖家对于这样的客户是直接放弃,这点很不对。因为网络上的骗子太多,客户第一次不放心,观望一下很正常。对于这样的卖家,首先要根据数据分析一下购买力如何,其次要看一下是不是会经常购买。而且即使其本身购买力不行,但他身边或许有很多强力买家。如果发现这个用户具备其中一条,就不能轻易放弃。这时候就需要与客户经常的沟通聊天,先和客户成为朋友。当成为朋友之后,下次肯定会在你这儿消费。 2、重点维护的大客户: 对于经常购买游戏币,特别是消费额高的大客户,一定要重点维护。对于这种用户的信息,掌握的也应该是越多越好。 3、偶尔购买的散户: 对于偶尔买一点开开荤的散户,可以不用重点维护。但是不维护不代表不重视,起码不能让他们出去骂你。 4、玩家资源多的意见领袖: 有些玩家本身的购买力可能不行,但是他的身边却可能有大量的优质客户。对于这样的用户,即使购买力弱,也要当成大客户重点维护。因为从他身上能挖掘到资源。 通过以上方法,当年他总共赚了有小几十万,但是实际上总共在他这儿消费过的人加一块也就80多个。当时开发最成功的一个客户是一个上班族,其一开始没想在他这儿长期购买,因为他的价钱偏贵。但是由于他在获取到他的资料后,找到了很好的突破口,结果变成了他的忠实用户,他一个人就在他这儿消费了几万元,而且还给他介绍了好几个忠实客户。 二、理发店的例子 案例:理发大家都知道,是一个拥有上千年历史的老行当了,现在的理发店竞争越来越激烈。而对于理发店来说,最优质的客户是女性用户,因为爱美是女人的天性,一般做一次头发,至少都是上百元。如果那个理发店能有一群忠实的女性顾客,那生意一定会非常火爆。 而有这么一家理发店,就通过数据库营销,牢牢抓住了600个白领回头客。那他是怎么做的呢? 分析:首先,这家理发店会为来理发的用户,都建立一个客户档案,其中包括顾客目前头发的状况、历次烫发染发的时间、用的什么烫发水等等,同时还包括职业、单位等基本信息。最重要的,要留下客户的联系方式,特别是线上联系方式。 其次,通过MSN等工具与客户进行线上交流,比如聊顾客的美发要求、闲聊促进感情等。因为大家都知道,要想长期留住你的用户,最好的方法是与他成为朋友。而在理发的过程中,与顾客交流的时间和精力肯定有限,而如果通过电话等方式,又不是很现实。所以MSN等IM工具,就成了最佳选择。与顾客聊成了朋友,自然就会成为你的回头客。 而且当客户要理发时,还可以提前在MSN上沟通好需求,再结合顾客的数据档案,基本上就能对用户的期望值把握的非常准确了。最重要的,这样能最大程度的节省双方的时间,同时也避免客人多时“撞车”排队。 三、内联升的数据库营销 一个古代的案例。清朝末年的老北京流传着一句谚语:“头戴马聚源,身披瑞蚨祥,脚踏内联升,腰缠‘四大恒’。”意思是戴马聚源的帽子最尊贵,用瑞蚨祥的绸缎做衣服穿在身上最光彩,脚蹬一双内联升鞋店的靴鞋最荣耀,腰中缠着“四大恒”钱庄的银票最富有,有腰缠万贯之意。而这个内联升,就是咱们接下来要讲的故事主角。 内联升的创始人叫赵廷,最早在一家鞋作坊学得一手制鞋手艺,又积累了一定的经验。后来,由一位丁大将军出资入股,资助赵廷开办了鞋店。由于当时京城的制鞋行业竞争也挺激烈,于是他决定走专业路线,专门为皇亲国戚、朝廷文武百官制作朝靴。早期的经营并不是一帆风顺,因为这些达官贵人做鞋,经常只是差下人送个鞋样过来,但这样就保证不了鞋的舒适度。特别是遇到一些脚形比较特殊的人,可能就容易出问题。在经历过几次交易纠纷后,赵廷打起了数据库营销的主意(当然,那时候还没有这个说法,也没这个名词,但是意思是一样的),搞了一本后来闻名于世的《履中备载》。这个备载实际上就是内联升的用户档案,里面详细记载了京城内所有达官贵人脚上的秘密,比如鞋的尺寸、样式和特殊脚形等等。有了这个数据后,为客人做鞋就不怕不合脚了,而且还省去了很多麻烦,比如说某个客人要做鞋,直接来支会一声就行,不需要费劲的去沟通需求了。 《履中备载》推出之后,赵廷的生意果然是越来越火爆。而这火爆的原因,除了顾客对他的鞋越来越满意这个原因外,还有个意外收获。原来很多人听说内联升掌握了京城达官贵人的足下之秘后,都纷纷来订鞋送礼。因为在当时,上好的朝靴经常作为一种礼品,馈赠亲友或者下级送给上级。而内联升的数据在当时不可多得的精准信息,大大方便了送礼者。 《数据库》教学计划 黄 艳 《数据库》是一门语言学科,是职专学生素质教育的一个重要组成部分,对提高学生的编程能力,促进教学内容和教学体制改革,提高教育质量和管理水平,实现教育现代化具有重要意义。为了能顺利完成教学任务,让学生学有所成,特制定教学计划如下: 一、学生情况分析 本学期担任电子一年四个班的教学工作,从总体上看,学生的学习情况不一,学生的基础参差不齐,仅有小部分同学操作能力较强,大部分学生基础较差。在学习上懒惰、怕动手动脑,对要求掌握的概念及操作要领不加强与巩固。所以,教学上要努力克服困难,充分利用现在条件,从实际出发,注重实效,坚持理论与实践相结合等多途径、多策略地激发他们的学习兴趣,把他们引导到系统地学习上来。 二、学期教学目标 知识与技能: 1、数据库基础知识。 2、数据类型、运算符和表达式。 3、表文件的建立,基本操作。 4、通过学习,使学生了解并掌握一些学习方法和技巧,培养学生的学习积极性和自觉性,鼓励学生之间相互交流,进行某些创新设计的能力。情感态度与价值观: 让学生理解《数据库》对日常生活和学习的重要作用,激发强烈的求知欲,养成积极主动地学习和使用《数据库》。做好学生的思想工作,调动学生的学习积极性,树立自信心。在课堂上培养学生学习兴趣和学习能力。同时使每个学生在课堂上都能掌握更多更广的编程知识,技能和技巧。感受到创新的喜悦,并能用于实践。培养学生对《数据库》的兴趣和意识,让学生了解和掌握《数据库》基本知识和技能,了解《数据库》的发展及期应用对人类日常生活和科学技术的深刻影响。通过《数据库》课程使学生具有独立编程的能力;培养学生良好的学习素养,把《数据库》作为支持终身学习和合作学习手手段,为适应信息社会的学习、工作和生活打下必要的基础。 三、教材分析 本学期使用的教材是高等教育出版社出版的《数据库应用基础》,内容较多,知识面广,学生掌握起来有较大的难度,需要加强上机操作练习,掌握操作要领。 四、预定教学进度安排如下: 九月份: 基础知识 各种运算 十月份: 函数 十一月份: 函数 十二月份 第二章 一月份 考试第二篇:数据库上机实验总结(含代码)
第三篇:人事管理系统数据库设计 sql代码
第四篇:数据库营销
第五篇:数据库教学计划--(定稿)