(570) 574-3675


CREATE DATABASE SPJ

USE SPJ

CREATE TABLE"S"(SNO CHAR(5) PRIMARY KEY,SNAME CHAR(20),STATUS SMALLINT,CITY CHAR(20))
CREATE TABLE"P"(PNO CHAR(5) PRIMARY KEY,PNAME CHAR(20),COLOR CHAR(5),WEIGHT SMALLINT)
CREATE TABLE"J"(JNO CHAR(5) PRIMARY KEY,JNAME CHAR(20),CITY CHAR(20))
CREATE TABLE"SPJ"(SNO CHAR(5),PNO CHAR(5),JNO CHAR(5),QTY SMALLINT,PRIMARY KEY(SNO,PNO,JNO),
FOREIGN KEY(SNO) REFERENCES S(SNO),FOREIGN KEY(PNO) REFERENCES P(PNO),FOREIGN KEY(JNO) REFERENCES J(JNO))

SELECT * FROM S
SELECT * FROM P
SELECT * FROM J
SELECT * FROM SPJ

CREATE DATABASE SC1

USE SC1

CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY,Sname CHAR(20) UNIQUE,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20))
INSERT INTO Student VALUES('201215121','李勇','男',20,'CS')
INSERT INTO Student VALUES('201215122','刘晨','女',19,'CS')
INSERT INTO Student VALUES('201215123','王敏','女',18,'MA')
INSERT INTO Student VALUES('201215125','张立','男',19,'IS')

CREATE TABLE Course(Cno CHAR(4) PRIMARY KEY,Cname CHAR(40) NOT NULL,Cpno CHAR(4),CCredit SMALLINT,FOREIGN KEY(Cpno) REFERENCES Course(Cno))
INSERT INTO Course VALUES('2','数学',NULL,2)
INSERT INTO Course VALUES('6','数据处理',NULL,2)
INSERT INTO Course VALUES('7','PASCAL语言','6',4)
INSERT INTO Course VALUES('4','操作系统','6',3)
INSERT INTO Course VALUES('5','数据结构','7',4)
INSERT INTO Course VALUES('1','数据库','5',4)
INSERT INTO Course VALUES('3','信息系统','1',4)

CREATE TABLE SC(Sno CHAR(9),Cno CHAR(4),Grade SMALLINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno) REFERENCES Student(Sno),FOREIGN KEY(Cno) REFERENCES Course(Cno))
INSERT INTO SC VALUES('201215121','1',92)
INSERT INTO SC VALUES('201215121','2',85)
INSERT INTO SC VALUES('201215121','3',88)
INSERT INTO SC VALUES('201215122','2',90)
INSERT INTO SC VALUES('201215122','3',80)

SELECT * FROM Student
SELECT * FROM Course
SELECT * FROM SC

CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept='IS'
UPDATE IS_Student SET Sname='刘晨' WHERE Sno='201215122'
DELETE FROM Student WHERE Sno='201215129'
INSERT INTO IS_Student VALUES('赵新','201215159',20)
SELECT * FROM IS_Student

SNO SNAME STATUS CITY
S1 精益 20 天津
S2 盛锡 10 北京
S3 东方红 30 北京
S4 丰泰盛 20 天津
S5 为民 30 上海

PNO PNAME COLOR WEIGHT
P1 螺母 红 12
P2 螺栓 绿 17
P3 螺丝刀 蓝 14
P4 螺丝刀 红 14
P5 凸轮 蓝 40
P6 齿轮 红 30

JNO JNAME CITY
J1 三建 北京
J2 一汽 长春
J3 弹簧厂 天津
J4 造船厂 天津
J5 机车厂 唐山
J6 无线电厂 常州
J7 半导体厂 南京

SNO PNO JNO QTY
S1 P1 J1 200
S1 P1 J3 100
S1 P1 J4 700
S1 P2 J2 100
S2 P3 J1 400
S2 P3 J2 200
S2 P3 J4 500
S2 P3 J5 400
S2 P5 J1 400
S2 P5 J2 100
S3 P1 J1 200
S3 P3 J1 200
S4 P5 J1 100
S4 P6 J3 300
S4 P6 J4 200
S5 P2 J4 100
S5 P3 J1 200
S5 P6 J2 200
S5 P6 J4 500

--1 求供应工程J1零件的供应商号码SNO
SELECT DISTINCT SNO FROM SPJ WHERE JNO='J1'
--2 求供应工程J1零件P1的供应商号码SNO
SELECT DISTINCT SNO FROM SPJ WHERE JNO='J1' AND PNO='P1'
--3 求供应工程J1零件为红色的供应商号码SNO
SELECT SPJ.SNO FROM SPJ,P WHERE SPJ.PNO=P.PNO AND P.COLOR='红' AND SPJ.JNO='J1'
--4 求没有使用天津供应商生产的红色零件的工程号JNO
SELECT JNO FROM SPJ EXCEPT SELECT SPJ.JNO FROM SPJ,S,P WHERE S.SNO=SPJ.SNO AND P.PNO=SPJ.PNO AND CITY='天津' AND COLOR='红'

--5 求至少用了供应商S1所供应的全部零件的工程号JNO
SELECT DISTINCT JNO FROM SPJ X WHERE NOT EXISTS(SELECT * FROM SPJ Y WHERE PNO IN (SELECT PNO FROM SPJ WHERE SNO='S1') AND NOT EXISTS(SELECT * FROM SPJ Z WHERE Z.PNO=Y.PNO AND Z.JNO=X.JNO))

-- 查询每个学生学号、姓名及其平均成绩
SELECT Student.Sno,Sname,AVG(Grade) FROM Student,SC WHERE Student.Sno=SC.Sno GROUP BY Student.Sno,Sname
SELECT Student.Sno,Sname,AVG(Grade) FROM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno) GROUP BY Student.Sno,Sname

--查询所有选修了1号课程的学生姓名
SELECT Student.Sname FROM Student WHERE EXISTS(SELECT * FROM SC WHERE Sno=Student.Sno AND Cno='1')

--查询了选修了数据库的学生学号
SELECT SNO FROM SC WHERE EXISTS (SELECT * FROM Course WHERE Cno=SC.Cno AND Cname='数据库')
--查询没有选修数据库的学生学号
SELECT Student.Sno FROM Student WHERE NOT EXISTS(SELECT * FROM SC WHERE Sno=Student.Sno AND EXISTS (SELECT * FROM Course WHERE Cno=SC.Cno AND Cname='数据库'))
--查询选修了数据库的学生学号和姓名
SELECT Student.Sno,Student.Sname FROM Student WHERE EXISTS(SELECT * FROM SC WHERE Sno=Student.Sno AND EXISTS (SELECT * FROM Course WHERE Cno=SC.Cno AND Cname='数据库'))
--3.5.6、7 要求用exists实现
--6 找出使用上海产的零件的工程名称
SELECT JNAME FROM J WHERE EXISTS(SELECT* FROM SPJ WHERE JNO=J.JNO AND EXISTS(SELECT * FROM S WHERE SNO=SPJ.SNO AND CITY='上海'))
--7 找出没有使用天津产的零件的工程号码
SELECT JNO FROM J WHERE NOT EXISTS(SELECT* FROM SPJ WHERE JNO=J.JNO AND EXISTS(SELECT * FROM S WHERE SNO=SPJ.SNO AND CITY='天津'))

--8 把全部红色零件的颜色改成蓝色
UPDATE P SET COLOR='蓝色' WHERE COLOR='红色'
--9 由S5供给给J4的零件P6改为由S3供应
UPDATE SPJ SET SNO='S3' WHERE SNO='S5' AND JNO='J4' AND PNO='P6'
--10 从供应商关系中删除S2的记录,并从供应情况关系中删除对应的记录
DELETE FROM SPJ WHERE SNO='S2'
DELETE FROM S WHERE SNO='S2'
--11 请将(S2,J6,P4,200)插入供应情况关系
INSERT INTO SPJ VALUES('S2','J6','P4',200)

CREATE VIEW V AS SELECT SPJ.SNO,SPJ.PNO,SPJ.QTY FROM SPJ,J WHERE SPJ.JNO=J.JNO AND J.JNAME='三建'
--9.(1) 找出三建工程项目使用的各种零件代码及其数量
SELECT PNO,SUM(QTY) FROM V GROUP BY PNO
--(2)找出供应商S1的供应情况
SELECT * FROM V WHERE SNO='S1'

--等价SQL表达式
--SELECT * FROM S WHERE A=10
--SELECT A.B FROM S
--SELECT DISTINCT * FROM S,T WHERE S.C=T.C AND S.D=T.D
--SELECT DOSTINCT * FROM S,T WHERE S.C=T.C
--SELECT DISTINCT * FROM S,T WHERE A

MFC接受YUV帧,并将其动态播放为视频形式

和服务端一样,客户端的问题也可以分解为用于通信的客户端本身,和用于显示的函数。
继续阅读“MFC接受YUV帧,并将其动态播放为视频形式”

805-351-3314

如果仅仅是将某一个像素点的YUV转化为RGB,套用公式就可以了,公式易于查到。
但如果某一帧的信息存储在三个Y、U、V数组中,其中Y数组的大小为U、V的四倍(YUV420),要将其转换为RGB数组,那么还要解决一个像素到像素对应的问题。换句话说,RGB的某个像素,其Y、U、V信息分别保存在哪里?需要一点算法将其算出来。
继续阅读“将保存在数组中的YUV帧转化为RGB帧”

将视频文件解码,并通过WinSock以YUV流的形式发送到客户端

解决这个问题,可以分成两个部分:一个是搭建Socket服务器,这个之前已经介绍过;还有一个,如何将视频文件解码为YUV流的形式。
继续阅读“将视频文件解码,并通过WinSock以YUV流的形式发送到客户端”

如何依据特定属性要求生成一个CFONT对象

我们如何在程序中获取一个CFONT对象?
MFC自带一种对话框类的子类,即CFontDialog类。我们可以通过在某处调用这个对话框来手动定义一种字体。

CFont* GetFont(){
	CFontDialog dlg;
	dlg.DoModal();
	LOGFONT font = *dlg.m_cf.lpLogFont;
	CFont *f;
	f->CreateFontIndirect(&font);
	return f;
}

但有时候,我们不希望弹出对话框,而是根据一些预定义的属性来生成字体。这时候我们可以用以下方式实现。

CFont* GetFont(){
	LOGFONT F;
 
	F.lfHeight = 20;
	F.lfWidth = 0;
	F.lfWeight = 400;
	F.lfCharSet = DEFAULT_CHARSET;
	F.lfFaceName[20] = NULL;
	F.lfQuality = DEFAULT_QUALITY;
	F.lfPitchAndFamily = DEFAULT_PITCH | FF_DECORATIVE;
	F.lfOutPrecision = OUT_DEFAULT_PRECIS;
	F.lfClipPrecision = CLIP_DEFAULT_PRECIS;
	F.lfItalic = FALSE;
	F.lfStrikeOut = FALSE;
	F.lfUnderline = FALSE;
	F.lfEscapement = 0;
	F.lfOrientation = 0;
 
	CFont *f;
	f->CreateFontIndirect(&F);
	return f;
}

其实就是一个个手动设置LOGFONT中的参数了。

DC函数进行MFC图形绘制的基本步骤

目标:在屏幕上画一条从(123,456)到(654,321)的直线,线段连续、宽度为1、颜色为纯黑色
代码逻辑主要有三部分:通过BeginPaint和EndPaint操作PAINTSTRUCT完成资源申请和释放;创建、选中、使用并删除某一特定类型的画笔;使用画笔进行具体绘制。

void CPicDealerView::OnDraw(CDC* pDC){
	PAINTSTRUCT ps;
	BeginPaint(&ps);/进行绘画准备工作,申请显卡资源
 
	HDC hDC = pDC->GetSafeHdc();/获取用于绘图的DC
 
	HPEN pen = CreatePen(0, 1, RGB(0,0,0));/创建画笔,类型为连续(0),宽度为1,颜色为黑色
	HPEN oldpen = (HPEN)SelectObject(hDC, pen);/选择画笔
 
	MoveToEx(hDC, 123, 456, NULL);
	LineTo(hDC, 654, 321);/具体绘图,连一条线
 
	DeleteObject(pen);/删除画笔
 
	EndPaint(&ps);/终止绘图,释放显卡资源
}

3308207880

直接在OnDraw()中绘图,会因为白色背景的不断刷新,引发闪烁的问题。但如果改写WM_ERASEBKGND消息,屏蔽掉背景刷新,又会出现该刷新时不刷新的重影问题。
这时我们可以用双缓存的方式,将所有内容写在内存DC中,再一次性输出到屏幕上。

void CPicDealerView::OnDraw(CDC* pDC)
{
	CRect r0;
	GetClientRect(&r0);
	int w = r0.Width();
	int h = r0.Height();/获取窗口大小
 
	CDC mDC;/声明内存DC
	CBitmap mBitmap;/声明Bitmap
	mDC.CreateCompatibleDC(NULL);/创建一个兼容的内存DC
	mBitmap.CreateCompatibleBitmap(pDC, w, h);/创建和窗口大小匹配的Bitmap
	CBitmap* ob = mDC.SelectObject(&mBitmap);
	mDC.FillSolidRect(0, 0, w, h, RGB(100, 100, 100));/设置内存DC的背景
 
	/具体画图内容,在mDC上画图
 
	pDC->BitBlt(0,0,w,h,&mDC,0,0,SRCCOPY);/将mDC的内容复制到pDC
 
	mBitmap.DeleteObject();
	mDC.DeleteDC();
}

614-899-9205

假设我们的doc类中,有一个CImage类的成员。我们希望对其进行永续操作。

class CPicDealerDoc : public CDocument
{
...
public:
	CImage m_Image;
...
}

继续阅读“关于CImage类成员在CDocument中的读写”

在MFC中重绘CButton时必须继承后重写DrawItem()

直接生成CButton实例重绘的话,会因为没有重写DrawItem()触发Aseert(0)中断。而直接重写CButton会影响到其他按钮。
因此对于这样的按钮,必须继承一个新的类来进行操作。

class CCButton :
	public CButton
{
public:
	CCButton();
	~CCButton();
	void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) {
		return;
	}
};