数据库课程设计源代码

合集下载

python数据库课程设计

python数据库课程设计

python 数据库课程设计一、课程目标知识目标:1. 理解数据库的基本概念,掌握Python数据库操作的基本原理;2. 学会使用Python中的SQLite数据库,掌握基本的数据库创建、查询、更新和删除操作;3. 了解数据库的规范化和数据完整性,能够对数据库进行合理的设计。

技能目标:1. 能够独立使用Python编程实现对数据库的连接、操作和关闭;2. 能够运用SQL语句实现对数据库的增、删、改、查功能;3. 能够分析和解决数据库操作过程中遇到的问题,具备一定的数据库编程调试能力。

情感态度价值观目标:1. 培养学生对数据库技术的兴趣,激发他们探索数据世界的热情;2. 培养学生的团队协作精神,使他们学会在项目中进行有效沟通和分工合作;3. 培养学生具备良好的数据伦理意识,尊重和保护个人隐私。

本课程针对高年级学生,结合Python编程和数据库知识,注重实践操作和实际应用。

通过本课程的学习,使学生掌握Python数据库操作技能,培养他们解决实际问题的能力,同时提高他们的团队协作和数据伦理素养。

课程目标具体、可衡量,便于教学设计和评估。

二、教学内容1. 数据库基本概念:数据库的定义、分类及用途;关系型数据库和非关系型数据库的特点;SQL语言的基本概念和用法。

教材章节:第一章 数据库概述2. Python数据库操作:SQLite数据库的安装与使用;Python中数据库连接、游标对象的创建与操作;基本的SQL语句(SELECT、INSERT、UPDATE、DELETE)在Python中的实现。

教材章节:第二章 Python数据库操作3. 数据库设计:数据库规范化理论;实体-关系模型;数据完整性约束;关系数据库设计方法。

教材章节:第三章 数据库设计4. 数据库编程实践:项目案例分析与实现;数据库操作综合应用;团队协作完成项目任务。

教材章节:第四章 数据库编程实践5. 数据库安全与伦理:数据库安全策略;数据备份与恢复;数据隐私保护;数据伦理原则。

数据库课程设计-图书管理系统-附源代码

数据库课程设计-图书管理系统-附源代码

数据库课程设计-图书管理系统-附源代码(总54页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March毕业设计(论文)( 2013 届本科)题目:图书馆管理系统学院:信息学院专业:信息管理与信息系统班级:姓名:学号:指导教师:2013年 6 月目录1 绪论 ......................................................................................................................... 错误!未定义书签。

课题背景 ..................................................................................................... 错误!未定义书签。

本课题研究的意义和目的.......................................................................... 错误!未定义书签。

2 图书馆管理系统的分析.......................................................................................... 错误!未定义书签。

现状分 ......................................................................................................... 错误!未定义书签。

可行性分析 ................................................................................................. 错误!未定义书签。

xml课程设计报告源代码

xml课程设计报告源代码

xml课程设计报告源代码一、课程目标知识目标:1. 让学生掌握XML(可扩展标记语言)的基本概念,理解其语法结构和文档类型定义(DTD);2. 帮助学生学会使用XML编写和解析数据,并能将其应用于实际项目中;3. 引导学生了解XML与数据库、网络服务等技术的关联,拓展知识视野。

技能目标:1. 培养学生运用XML编写和修改文档的能力;2. 提高学生使用XML解析器进行数据解析的技能;3. 培养学生将XML技术应用于实际问题的解决能力。

情感态度价值观目标:1. 激发学生对计算机编程和数据分析的兴趣,培养其主动学习和探究的精神;2. 培养学生具备良好的团队合作意识,学会与他人共同解决问题;3. 增强学生的信息素养,使其认识到XML在现代信息技术中的重要性。

本课程针对高年级学生,课程性质为理论与实践相结合。

在教学过程中,需注重对学生实际操作能力的培养,同时结合学生特点和教学要求,将课程目标分解为具体的学习成果。

教学设计和评估将以此为基础,确保学生能够达到预期学习效果。

二、教学内容1. XML基本概念与语法- XML定义与作用- XML声明与文档结构- 元素、属性、实体与命名空间2. 文档类型定义(DTD)- DTD的基本概念与用途- DTD规则的编写与引用- 验证XML文档与DTD的一致性3. XML解析技术- DOM解析与SAX解析原理- 使用DOM4J解析XML文档- 使用JAXP和JDOM解析XML文档4. XML与数据库- XML与数据库的关联- 使用XML进行数据库数据的导入导出- XML数据查询与更新5. XML应用案例- XML在Web服务中的应用- XML在移动开发中的应用- XML在数据交换与存储中的应用教学内容按照上述五个方面进行组织,确保学生能够系统地学习和掌握XML 技术。

教学大纲将明确教学内容安排和进度,关联课本相应章节,如:- XML基本概念与语法:第1章- 文档类型定义(DTD):第2章- XML解析技术:第3章- XML与数据库:第4章- XML应用案例:第5章三、教学方法为了提高教学效果,激发学生的学习兴趣和主动性,本课程将采用以下多样化的教学方法:1. 讲授法:教师通过生动的语言和形象的比喻,对XML的基本概念、语法、DTD等理论知识进行讲解,帮助学生建立扎实的理论基础。

高校程序设计课程设计源代码与文档范例

高校程序设计课程设计源代码与文档范例

高校程序设计课程设计源代码与文档范例源代码与文档范例在高校的程序设计课程中,学生们通常需要进行项目设计和编码实现。

正确编写源代码和撰写文档是一个程序开发过程中非常重要的环节。

本文将为大家提供一份高校程序设计课程设计源代码与文档的范例,以供参考。

源代码范例下面是一个简单的源代码范例,用Python编写一个求解斐波那契数列的函数:```pythondef fibonacci(n):if n <= 0:return "Input must be a positive integer."elif n == 1:return 0elif n == 2:return 1else:fib_list = [0, 1]for i in range(2, n):fib_list.append(fib_list[i-1] + fib_list[i-2])return fib_list[n-1]# 测试代码n = 10print(f"The {n}th fibonacci number is: {fibonacci(n)}")```上述代码定义了一个名为fibonacci的函数,用于计算斐波那契数列中的第n个数。

代码中使用了循环和列表等基本编程概念,力求简洁明了。

同时,还包含了测试代码,用于验证函数的正确性。

文档范例除了源代码外,编写完善的文档也是程序设计中必不可少的一部分。

下面是一个文档范例,包含了对上述源代码的说明和使用指南:```# 斐波那契数列计算器## 简介本程序用于计算斐波那契数列中的第n个数。

## 源代码```pythondef fibonacci(n):if n <= 0:return "Input must be a positive integer."elif n == 1:return 0elif n == 2:return 1else:fib_list = [0, 1]for i in range(2, n):fib_list.append(fib_list[i-1] + fib_list[i-2])return fib_list[n-1]```## 使用方法用户需要提供一个正整数n作为输入参数,函数将返回斐波那契数列中的第n个数。

数据库课程设计概要

数据库课程设计概要

信息工程学院课程设计报告设计名称:数据库课程设计姓名:学号:专业班级:系(院):设计时间:设计地点:指导老师:userName Varchar(16) Not null(主键) 用户名userPassword Varchar(16) Not null 密码userPurview Varchar(8) null 用户权限4 关系图4-15 物理设计数据库物理设计阶段的任务是根据具体计算机系统(DBMS和硬件等)的特点,为给定的数据库模型确定合理的存储结构和存取方法。

所谓的“合理”主要有两个含义:一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。

主要体现在后者。

(1)建立索引:①对课程表在Cno属性列上建立聚集索引,在Cname,Ccredt,Csemester,Cperiod属性列上建立非聚集索引。

②对学生表在Sno属性列上建立聚集索引,在Sname,Ssex,Sage,Sdept属性列上建立非聚集索引③对成绩表在Cno,Sno属性列上建立聚集索引,在grade属性列上建立非聚集索引④对用户表在userName属性列上建立聚集索引,在userPassword,userPurview属性列上建立非聚集索引(2)存储结构确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排与存储结构,以与确定系统存储参数的配置。

将日志文件和数据库对象(表、索引等)分别放在不同的磁盘可以改进系统的性能。

所以系统将日志文件和数据文件存放在不同磁盘上。

6.数据库建立(1)创建数据库图10-2学生选课系统登录界面图登陆代码为:try{DataBase db = new DataBase();DataSet ds = new DataSet();string sqlStr = "select userPassword,userPurview from 用户表 where userName='" + txtuserName.Text.Trim() + "'"; ds = db.GetDataFormDB(sqlStr);string str1, str2,str3;str1 = ds.Tables[0].Rows[0].ItemArray[0].ToString().Trim();str3 = ds.Tables[0].Rows[0].ItemArray[1].ToString().Trim();str2 = txtPassWord.Text.Trim();if (str1 == str2){if (str3 == comboBox1.Text.ToString().Trim()){Form2 ob_Form2 = new Form2();erInfo[0] = txtuserName.Text.Trim();erInfo[1] = ds.Tables[0].Rows[0].ItemArray[1].ToString();ob_Form2.Show();this.Hide();}else{MessageBox.Show("用户权限错误,请重新输入");comboBox1.Text = "";comboBox1.Focus();}}else{MessageBox.Show("用户名或密码错误,请重新输入");txtuserName.Text = "";txtPassWord.Text = "";txtuserName.Focus();}}catch{MessageBox.Show("用户名或密码错误","错误");}②学生选课系统主界面如图10-3略图10-3学生选课系统主界面③学生信息管理界面如图10-4图10-4学生信息管理界面可以进行学生信息的添加、修改、删除操作。

数据库课程设计源码

数据库课程设计源码

好的,我可以为你提供一个简单的数据库课程设计源码的示例。

请注意,以下代码只是一个简单的示例,仅供参考。

你可以根据具体的需求和实际情况进行修改和扩展。

数据库设计目的:创建一个简单的课程管理系统,包括学生、教师、课程和成绩等数据。

数据库结构1. 学生表(students):* student_id(学生ID):主键* name(学生姓名)* age(学生年龄)* major(所学专业)2. 教师表(teachers):* teacher_id(教师ID):主键* name(教师姓名)* department(所属部门)3. 课程表(courses):* course_id(课程ID):主键* course_name(课程名称)* teacher_id(教师ID,外键,关联教师表)* course_desc(课程描述)4. 成绩表(grades):* grade_id(成绩ID):主键* student_id(学生ID,外键,关联学生表)* course_id(课程ID,外键,关联课程表)* grade(成绩)数据库操作函数实现:1. 学生添加、修改和删除操作:需要先通过学号对学生信息进行查询,然后更新数据库中的数据。

函数示例如下:```pythondef add_student(name, age, major):# 插入学生数据到students表中pass```2. 教师添加、修改和删除操作:需要先通过姓名对教师信息进行查询,然后更新数据库中的数据。

函数示例如下:```pythondef add_teacher(name, department):# 插入教师数据到teachers表中pass```3. 课程添加、修改和删除操作:需要先通过课程名称对课程信息进行查询,然后更新数据库中的数据。

函数示例如下:```pythondef add_course(course_name, teacher_id, course_desc):# 插入课程数据到courses表中,关联教师数据和课程描述信息需要调用关联表的添加方法来实现。

数据结构课程设计源代码(完整版)

数据结构课程设计源代码(完整版)

算法与数据结构课程设计报告设计题目:专业班级学生学号指导教师2014年第1学期第一部分:需求分析1、系统名称:航空客运订票系统航空客运订票的业务活动包括:查询航线、客票预定和办理退票等。

要求在TC或VC环境下设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。

2、要求:(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)以及等候替补的客户名单(包括姓名、所需票量)。

(2)作为模拟系统,全部数据可以只存放在内存中。

(3)通过此系统可以实现如下功能:①录入功能:可以录入航班情况②查询功能:根据客户提供的终点站名进行查询,可以输出以下信息:航班号、飞机号、星期几飞行和余票量等。

也可以根据航班号,查询飞机某个航线的情况。

③订票功能:根据客户提出的要求(姓名、终点站名、订票数量)查询该航班的余票量情况。

如尚有足够的余票,则为客户办理订票手续;若已满员或余票量少于订票数量,则需要重新询问客户要求,如需要,可登记排队候补。

④退票功能:根据客户提供的情况(姓名、日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,若有人排队,则为排在第一位的客户办理订票手续。

第二部分:系统设计图样一:设计说明1:添加航班:整个航班的信息保存在一个结构体flight中,采用结构体数组,每一个航班信息包含航班号、起飞时间、起飞城市、降落时间、降落城市、余票数量。

航班信息通过lulu()函数进行添加。

添加的信息保存在航班flight结构体数组中。

2:查询航班:查询板块分为两个部分,按姓名查找和按站名查找。

按姓名查找:通过所输入的姓名和已定客户的姓名相匹配,匹配成功则查找成功。

按站名查找:通过所输入的起始站名和终点站名进行匹配,匹配成功则查找成功。

3:订票功能:根据用户的姓名和航班号进行订票,如果所查找的航班号的余票满足用户需要的票数,则订票成功,该信息保存在Customer中,才用结构体数组,包含已定客户的姓名、客户ID、订的票数、起飞时间、起飞城市、降落时间、降落城市、航班号。

数据库设计以及源代码

数据库设计以及源代码

系统建设详细设计1.数据库设计管理员用户表信息:学生用户表:学生信息表:班级文本50 所在班级专业文本50 所学专业2 系统程序文件设计与编写与数据库连接的代码:<% db="message.mdb"set Conn=server.createobject("adodb.Connection")conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&server.mappath(db)%>登陆界面代码:代码为:<!--#include file="conn.inc" --><%if request("Submit")<>"" thenset rs=server.createobject("adodb.recordset")sql="SELECT username,password from users where username='"&request("username")&"'"rs.open sql,conn,1,3if rs.bof and rs.eof thenmsg="错误:用户名不存在"elseif rs("password")=request("password") thenSession("admin")=trueresponse.redirect "index.asp?users=admin"elsemsg="错误:密码不正确"end ifend ifrs.closeset rs=nothingConn.closeSet conn = Nothingend if%><html><head><title>管理员</title><script language="JavaScript" type="text/JavaScript"><!--function MM_jumpMenu(targ,selObj,restore){ //v3.0eval(targ+".location='"+selObj.options[selObj.selectedIndex].va lue+"'");if (restore) selObj.selectedIndex=0;}//--></script><LINK href="style.css" rel=Stylesheet type=text/css></head><center><span class="style1”>学生信息管理系统</span></center></td></tr><tr><td colspan="2"><center>管理员:<input name="username" type="text" maxlength="10">密码:<input name="password" type="password" > <input type="submit" name="Submit" value="登录"><input type="reset" name="Submit2" value="重置">用户类型:<select name="menu1" onChange="MM_jumpMenu('parent',this,0)"><option value="admin_login.asp" selected>管理员</option><option value="student_login.asp">学生</option></select> <br> <fontcolor=red><%=msg%></font> </center> </td></tr></table></form></body></html>显示信息:代码为:<!--#include file=”conn.inc”<%if Session(“admin”)<>true and Session(“student”)<>true then Response.Redirect “student_login.asp”end if%><!doctype html public “-//W3C//DTD HTML 4.0 Transitional//EN”><html><head><title>学生信息</title><LINK href=”style.css” rel=Stylesheet type=text/css></style></head><table align=center><tr><td colspan=”2”><center><span class=”style1”>学生信息管理系统</span></center></td></tr><tr><td colspan=”5”><a href=”#”>[<b>首页</b>]</a><a href=”search.asp”>[查询]</a><a title=”需要管理员权限”href=”post.asp”>[添加]</a><a href=”admin_login.asp”>[管理]</a><a href=”logout.asp”>[退出]</a></td></tr></table><%users = Request(“users”)If request(“PageNo”)=”” thenPageNo=1ElsePageNo=int(request(“PageNo”))End Ifsql=”SELECT * from liuyan order by ID desc”set rs=server.createobject(“adodb.recordset”)rs.open sql,conn,1,3if not(rs.eof and rs.bof) thenrs.Pagesize=3rs.absolutepage=PageNox = 0For x = 1 to rs.Pagesizeif x mod 2 thentr_color=”#EBEBEB”elsetr_c olor=”#ffffff”end ifIf rs.eof thenExit ForElseif isNull(Rs(“Dateandtime”)) thenstrDateandtime = “”elsestrDateandtime = Cstr(Rs(“Dateandtime”))end if‘Username,Email,Content,Sex,DateandtimeResponse.Write “<tabl e width=50% border=0 align=center cellpadding=0 cellspacing=0 bgcolor=” + tr_color+ “>”Response.Write “<tr>”Response.Write “<td width=20% nowrap>姓名:</td>”Response.Write “<td width=60% class=Tab>” + Rs(“Username”) + “</td>”‘修改删除链接if us ers = “admin” thenResponse.Write “<td width=20% class=Tab align=right>” + “<a href=post.asp?users=” + users + “&id=” + cstr(Rs(“ID”)) + “><font color=blue>修改</font></a> <a href=delete.asp?users=” + users + “&id=”+ cstr(Rs(“ID”)) + “><font color=blue>删除</font></a>” + “</td>”elseResponse.Write “<td width=20% class=Tab></td>”end ifResponse.Write “</tr>”Response.Write “<tr>”Response.Write “<td>性别:</td>”Response.Write “<td colspan=2>” + Rs(“Sex”) + “</td>”Response.Write “</tr>”Response.Write “<tr>”Response.Write “<td>班级:</td>”Response.Write “<td colspan=2>” + Rs(“Class”) + “</td>”Response.Write “</tr>”Response.Write “<tr>”Response.Write “<td>专业:</td>”Response.Write “<td colspan=2>” + Rs(“Major”) + “</td>”Response.Write “</tr>”Response.Write “<tr>”Response.Write “<td>入学时间:</td>”Response.Write “<td colspan=2>” + strDateandtime + “</td>”Response.Write “</tr>”Response.Write “<tr>”Response.Write “<td>评语:</td>”Response.Write “<td colspan=2>” + Rs(“Content”) + “</td>”Response.Write “</tr>”Response.Write “<tr>”Response.Write “<td>E-mail:</td>”Response.Write “<td colspan=2>” + Rs(“Email”) + “</td>”Response.Write “</tr>”Response.Write “</table>”Response.Write “<table border=0 align=center>”‘if users = “admin” then‘Response.Write “<tr>”‘Response.Write “<td align=right bgcolor=”+ tr_color+ “><a href=delete.asp?users=”+ users + “&id=”+ cstr(Rs(“ID”)) + “><font color=red>删除</font></a></td>”‘Response.Writ e “</tr>”‘end ifResponse.Write “<tr>”Response.Write “<td height=1></td>”Response.Write “</tr>”Response.Write “</table>”rs.MoveNextEnd IfNext。

学生选课系统数据库设计代码

学生选课系统数据库设计代码

学生选课系统数据库设计代码设计一个学生选课系统的数据库涉及多个方面,包括定义表结构、创建关系和索引等。

下面是一个简化版的MySQL数据库设计代码,该代码旨在支持一个基础的学生选课系统。

首先,我们定义三个基本表:学生、课程和选课记录。

sql复制代码-- 创建学生表CREATE TABLE students (student_id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100) NOT NULL,email VARCHAR(100) UNIQUE NOT NULL,password VARCHAR(255) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);-- 创建课程表CREATE TABLE courses (course_id INT PRIMARY KEY AUTO_INCREMENT,course_name VARCHAR(100) NOT NULL,description TEXT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);-- 创建选课记录表CREATE TABLE course_enrollments (id INT PRIMARY KEY AUTO_INCREMENT,student_id INT,course_id INT,enrollment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (student_id) REFERENCES students(student_id),FOREIGN KEY (course_id) REFERENCES courses(course_id));这个设计非常基础,并且可以根据实际需求进行扩展。

例如,你可能需要添加更多的字段到学生和课程表中,如地址、电话号码、课程学分等。

数据库设计源代码

数据库设计源代码

//选择一种高级语言实现下列语句的功能。

//CREATE TABLE <表名> (<列名><数据类型>[<列完整性约束条件>][,<列名><数据//类型>[<列完整性约束条件>]…][,<表完整性约束条件>] )//ALTER TABLE <表名> [ADD <新列名><数据类型>[<列完整性约束>]] [DROP<列完整//性约束名>][MODIFY <列名><数据类型>]//使用说明//1、将程序文件table.sql放在D盘根目录下。

//2、在C盘根目录下建立一个名为"数据库"的文件夹,用于存储表。

//3、建立的表存储路径为C:\数据库:\table.dbf。

//4、在程序文件table.sql中只有一条建表语句和三条修改表语句,在以程序方式执//行时注意执行的次数,慎重选择“是否继续执行”。

//5、程序输入的SQL语句格式如下://create table student//(//SNO int PRIMARY KEY,//SNAME char(10) UNIQUE,//SAGE int,//SDEPT char(20) NOT NULL,//COURSE char(20),//GRADE int//);//alter table student add CNO int NOT NULL;//alter table student alter column SAGE short;//alter table student drop SDEPT;#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>//宏定义#define YEAR 0#define MONTH 1#define DAY 2#define FOX_VERISON_INFO 262#define MAX 40//字段类型#define DATE 0x44#define DOUBLE 0x45#define FLOAT 0x46#define SHORT 0x47#define INT 0x48#define TRUE 1#define FALSE 0//文件头结构体定义struct DbfHead{char dbFlag;char year;char month;char day;int recCounts;short firstRecAddr;short recLen;char undo[20];};typedef struct DbfHead DbfHead, *pDbfHead; //字段描述结构体定义struct FieldDcp{char fieldName[10];char undo1;char fieldType;short offset;char undo2[2];char fieldLen;char numDecis;char undo3[14];};typedef struct FieldDcp FieldDcp, *pFieldDcp; //字段数据结构体定义struct DbfField{char *fieldData;char fieldName[10];char fieldType;char fieldLen;char fieldDcis;short offset;};typedef struct DbfField DbfField, *pDbfField; //记录结构体定义struct DbfRecchar delFlag;DbfField field[MAX];int realCounts;};typedef struct DbfRec DbfRec, *pDbfRec;//dbf文件句柄定义struct DbfHand{char filename[50];DbfHead header;DbfRec rec;long curRecNo;long curFpAddr;FILE *fd;};typedef struct DbfHand DbfHand, *pDbfHand;//约束条件typedef struct Condition{int flag;//flag 用于区分约束条件(PARIMARY KEY 1 UNIQUE 2 NOT NULL 3) }Condition;pDbfHand f;DbfRec rec;char table_name[20];char sql[300],sql1[300];char GetDate(int getMode)//获取日期{if( DAY ==getMode)return 01;if(MONTH == getMode)return 06;if(YEAR == getMode)return 10;elseexit(0);}short GetHeadLength(pDbfRec rec)//获得文件头长度{return rec->realCounts*32+32+2;}short GetRecLength(pDbfRec rec)//获得文件体长度register int i=0;int count=0;for(i=0;i<rec->realCounts;i++){if(rec->field[i].fieldType=='D'){count+=8;continue;}else if(rec->field[i].fieldType=='I'){count+=4;continue;}else if(rec->field[i].fieldType=='T'){count+=6;continue;}count+=rec->field[i].fieldLen;}return count+1;}pDbfHand NewDbfHead(pDbfHand hand, pDbfRec rec)//新建文件头{int ret = -1;hand-> header.dbFlag = 0x03;hand-> header.day = GetDate(DAY);hand-> header.month = GetDate(MONTH);hand-> header.year = GetDate(YEAR);hand-> header.recLen = GetRecLength(rec);hand-> header.recCounts = 0;hand-> header.firstRecAddr = GetHeadLength(rec);if (0!= fseek(hand-> fd, 0, SEEK_SET))return NULL;ret = fwrite((char*)&hand->header,sizeof(DbfHead) , 1 , hand->fd);if(ret != -1)return hand;elsereturn NULL;}pDbfHand UpdateHead(pDbfHand hand)//更新文件头{if (0!= fseek(hand-> fd, 0, SEEK_SET))return NULL;if (-1== fwrite((char *)&hand-> header, sizeof(DbfHead) , 1 , hand->fd)) return NULL;fclose(hand->fd);return hand;}pDbfHand WriteFieldDicsribe(pDbfHand hand, pDbfRec rec)//写字段描述部分{int i = 0;FieldDcp field={0};field.offset = 0x01;for ( i = 0; i < rec-> realCounts; i++){field.fieldType = rec-> field[i].fieldType;field.numDecis = 0;switch ( field.fieldType){case DOUBLE:field.fieldLen = 8;break;case FLOAT:field.fieldLen = 4;break;case INT:field.fieldLen = 4;break;case SHORT:field.fieldLen = 2;break;default:field.fieldLen = rec-> field[i].fieldLen;break;}strcpy(field.fieldName, rec-> field[i].fieldName);field.offset +=( short)rec-> field[i].fieldLen;if(-1 ==fwrite((char*)&field, sizeof(FieldDcp) , 1 , hand->fd))return NULL;}hand-> rec.delFlag = 0x20;hand-> rec.realCounts = rec-> realCounts;for (i = 0; i < rec-> realCounts; i++ )hand-> rec.field[i] = rec-> field[i];return hand;void WriteFieldEnd(pDbfHand hand)//写文件头结束标志{int i = 0;char buf[2] = {0x0D, 0x00};char versionBuf[FOX_VERISON_INFO] = {0};if (0 == fseek(hand-> fd, 0, SEEK_END)){if (-1== fwrite(buf, 2 , 1 , hand->fd))return;}return ;}pDbfHand ReadDbfHead(pDbfHand hand)//读文件头信息{int i=0,j=0;if (-1 != (fseek(hand-> fd, 0, SEEK_SET))){if (0 != fread((char*)&hand-> header, 32 , 1 , hand->fd))return hand;}return NULL;}int GetFieldCount(pDbfHand hand)//得到字段个数{int i = 0;int offset = 1;FieldDcp field ={0};char cEnd = 0;for (i=0;i<MAX;i++){memset((char *)&field,0,sizeof(FieldDcp));if ( -1 == fseek(hand-> fd, (i+1)*32, SEEK_SET))return -1;if ( 0 != fread((char*)&field, 32 , 1 , hand->fd)){fread(&cEnd,1 , 1 , hand->fd);if (0x0D == cEnd)return (i + 1);}}return -1;}pDbfHand ReadFieldDiscribe(pDbfHand hand)//读字段描述信息int i = 0,j=0;int fieldCount = GetFieldCount(hand);hand-> rec.realCounts = fieldCount;for ( i = 0; i < hand-> rec.realCounts; i++){FieldDcp field = {0};if (-1 == fseek(hand-> fd, (i+1)*32, SEEK_SET))return NULL;if (-1 == fread((char*)&field, 32 , 1 , hand->fd))return NULL;memcpy(hand-> rec.field[i].fieldName,field.fieldName,sizeof(field.fieldName));hand-> rec.field[i].fieldLen = field.fieldLen;hand-> rec.field[i].fieldType = field.fieldType;hand-> rec.field[i].fieldDcis = field.numDecis;hand-> rec.field[i].offset = field.offset;}for(i=0;i<hand->rec.realCounts;i++){for(j=0;hand->rec.field[i].fieldName[j]!='\0';j++){hand->rec.field[i].fieldName[j]=tolower(hand->rec.field[i].fieldName[j]);}}return hand;}char *SaveDate( char *str)//保存内容为日期时,格式华{int i=0, j=0;char temp[9]={0};if (strlen(str) != 10) //日期格式输入不合法return NULL;for ( i=0, j=0; i <10; i++ ){if ( i == 4 || i ==7 )continue;else{if(*(str+i) >= '0' && *(str+i) <= '9'){temp[j]=*(str+i);j++;}elsereturn NULL;}}str=NULL;str=( char *)realloc(str, 8);memset(str, 0x00, 8);memcpy(str, temp, 8);return str;}int WriteRecord(pDbfHand hand, pDbfRec record)//在当前位置写一条纪录,覆盖原有内容{int i = 0;char *buf = NULL;int curFieldLen = 0;int actDataLen = 0;int nPos = 1;int nFiledCount = 0;int rest = TRUE;nFiledCount = hand-> rec.realCounts;buf = ( char*)malloc(hand-> header.recLen + 1 );memset(buf,0x20,hand-> header.recLen + 1);buf[0] = ' ';for ( i = 0; i < nFiledCount; i++ ){if (hand-> rec.field[i].fieldType == DATE && record-> field[i].fieldData != NULL ) record-> field[i].fieldData = SaveDate(record-> field[i].fieldData);curFieldLen = hand-> rec.field[i].fieldLen;actDataLen = strlen(record-> field[i].fieldData);if ( actDataLen > curFieldLen)actDataLen = curFieldLen;memcpy(&buf[nPos], record-> field[i].fieldData, actDataLen);nPos += hand-> rec.field[i].fieldLen;}buf[hand-> header.recLen] = '\0 ';if ( -1 == fwrite(buf, hand-> header.recLen , 1 , hand->fd))rest = FALSE;return rest;}char *ReadDbfDate( char *str)//读日期时,格式化{int i=0, j=0;char temp[11] = {0};char *strRest = NULL;for ( i=0, j=0; i < 8; i++, j++ ){if ( i==4 || i==6){temp[j] = '/';j++;}temp[j]=*(str+i);}str = (char *)calloc(11,sizeof(char));memset(str, 0x00, 11);memcpy(str,temp,10);return str;}char *DsdStrEndSpace(char *str, int size)//去掉字符串的后面空格{int i=0,flag=0;for(i=size-1; i>= 0; i--){if (*(str+i) != 0x20)break;str[i] =0x00;}return str;}/*pDbfField GetCurrentField(pDbfHand handle, pDbfRec rec ,int fieldId)//得到当前文件{return (pDbfField)&(rec-> field[fieldId]);}*/int GetFieldNum(pDbfHand hand,char* field_name)//得到文件个数{int flag=0;int j;for(j=0;j<hand->rec.realCounts;j++){if(0==strcmp(field_name,hand->rec.field[j].fieldName)){flag=1;break;}}if(flag)return j;elsereturn -1;}int IsBottomRecord(pDbfHand hand)//判断是否是第一条记录{int recCounts = hand-> header.recCounts;if (hand-> curRecNo != hand-> header.recCounts)return FALSE;return TRUE;}int GotoTop(pDbfHand hand)//返回顶部{hand-> curRecNo = 1;hand-> curFpAddr = hand-> header.firstRecAddr;if (-1 == fseek(hand-> fd, hand-> curFpAddr, SEEK_SET))return FALSE;return TRUE;}int GotoBottom(pDbfHand hand)//移动到最后一条记录{int recLen = hand-> header.recLen;long offset = 0;offset = recLen * (hand-> header.recCounts -1);hand-> curRecNo = hand-> header.recCounts;hand-> curFpAddr = hand-> header.firstRecAddr + offset;if (-1 == fseek(hand-> fd, hand-> curFpAddr, SEEK_SET))return FALSE;return TRUE;}int GoNextRecord(pDbfHand hand)//移动到下一条记录{if (TRUE == IsBottomRecord(hand))return TRUE;else{hand-> curRecNo += 1;hand-> curFpAddr += hand-> header.recLen;if (-1 == fseek(hand-> fd, hand-> header.recLen, SEEK_CUR)) return FALSE;}return TRUE;}int GetCurRecord(pDbfHand hand,pDbfRec rec)//得到当前记录{int i = 0,m;char curFieldLen = 0;long fieldOffset = 0;char pBuffData[1024] = {0};char *recData;(*rec)=hand->rec;for(m=0;m<hand->rec.realCounts;m++){rec->field[m].fieldData=(char*)malloc(hand->rec.field[m].fieldLen+1);memset(rec->field[m].fieldData, 0x00, hand->rec.field[m].fieldLen+1);}if (-1== fseek(hand->fd,hand->curFpAddr, SEEK_SET)) //Move file pointer return 0;recData = pBuffData;recData = recData + 1;if (-1 == fread(recData,hand->header.recLen , 1 , hand->fd))return 0;rec->delFlag = recData[0];recData = recData + 1;for (i = 0; i < hand->rec.realCounts; i++, fieldOffset += curFieldLen){curFieldLen = hand->rec.field[i].fieldLen;memcpy(rec->field[i].fieldData,recData+fieldOffset,curFieldLen);rec->field[i].fieldData = DsdStrEndSpace(rec->field[i].fieldData, curFieldLen);if (rec->field[i].fieldType == DATE && rec->field[i].fieldData[0] != 0x20 ) rec->field[i].fieldData =ReadDbfDate(rec->field[i].fieldData);}return 1;}pDbfHand AddRec(pDbfHand hand, pDbfRec record)//向文件尾中插入一条记录{char dataEndFlag = 0x1A;if ((hand-> fd =fopen("c:\\数据库\\table.dbf","r+b")) == NULL)return NULL;if ( hand-> header.recCounts == 0)fseek(hand-> fd, -0L, SEEK_END);elsefseek(hand-> fd, -1L, SEEK_END);if (FALSE == WriteRecord(hand, record))return NULL;if ( -1 == fwrite(&dataEndFlag, 1 , 1 , hand->fd))return NULL;hand-> curRecNo += 1;hand-> header.recCounts += 1;hand-> curFpAddr += hand-> header.recLen;if (NULL == UpdateHead(hand))return hand;}pDbfHand AddField(pDbfHand hand,char* field_name,char type,int len,int dec)//在文件中插入一条记录{int i,reccounts;pDbfRec *rec;if(hand->header.recCounts){rec=(pDbfRec*)malloc(sizeof(pDbfRec)*hand->header.recCounts);hand->curFpAddr=hand->header.firstRecAddr;hand->curRecNo=1;if (-1 == fseek(hand-> fd,hand->curFpAddr, SEEK_SET))return FALSE;for(i=0;i<hand->header.recCounts;i++){rec[i]=(pDbfRec)malloc(sizeof(DbfRec));GetCurRecord(hand,rec[i]);GoNextRecord(hand);}for(i=0;i<hand->header.recCounts;i++){rec[i]->field[hand->rec.realCounts].fieldData=(char*)malloc(len+1);memset(rec[i]->field[hand->rec.realCounts].fieldData, 0x00, len+1);rec[i]->realCounts++;}}strcpy(hand->rec.field[hand->rec.realCounts].fieldName,field_name);hand->rec.field[hand->rec.realCounts].fieldName[strlen(field_name)]='\0';hand->rec.field[hand->rec.realCounts].fieldType=type;hand->rec.field[hand->rec.realCounts].fieldLen=len;hand->rec.field[hand->rec.realCounts].fieldDcis=dec;hand->rec.realCounts++;reccounts=hand->header.recCounts;hand->fd=fopen("c:\\数据库\\table.dbf","w");fclose(hand->fd);hand->fd=fopen("c:\\数据库\\table.dbf","w+b");if(NewDbfHead(hand, &hand->rec) == NULL)return NULL;if (NULL == WriteFieldDicsribe(hand, &hand->rec))return NULL;WriteFieldEnd(hand);if(0!=fclose(hand->fd))for(i=0;i<reccounts;i++)AddRec(hand,rec[i]);return hand;}pDbfHand AlterField(pDbfHand hand,char* field_name,char type,int len,int dec)//修改一条记录{int num,i,reccounts;pDbfRec *rec;num=GetFieldNum(hand,field_name);if(hand->header.recCounts){rec=(pDbfRec*)malloc(sizeof(pDbfRec)*hand->header.recCounts);hand->curFpAddr=hand->header.firstRecAddr;hand->curRecNo=1;if (-1 == fseek(hand-> fd,hand->curFpAddr, SEEK_SET))return FALSE;for(i=0;i<hand->header.recCounts;i++){rec[i]=(pDbfRec)malloc(sizeof(DbfRec));GetCurRecord(hand,rec[i]);GoNextRecord(hand);rec[i]->field[num].fieldDcis=dec;rec[i]->field[num].fieldLen=len;rec[i]->field[num].fieldType=type;}}hand->rec.field[num].fieldType=type;hand->rec.field[num].fieldLen=len;hand->rec.field[num].fieldDcis=dec;reccounts=hand->header.recCounts;hand->fd=fopen("c:\\数据库\\table.dbf","w");fclose(hand->fd);hand->fd=fopen("c:\\数据库\\table.dbf","w+b");if(NewDbfHead(hand, &hand->rec) == NULL)return NULL;if (NULL == WriteFieldDicsribe(hand, &hand->rec))return NULL;WriteFieldEnd(hand);if(0!=fclose(hand->fd))return NULL;for(i=0;i<reccounts;i++)AddRec(hand,rec[i]);return hand;}pDbfHand DropField(pDbfHand hand,char* field_name,int n)//删除一条记录{int num,i,j,reccounts;pDbfRec *rec;num=GetFieldNum(hand,field_name);if(hand->header.recCounts){rec=(pDbfRec*)malloc(sizeof(pDbfRec)*hand->header.recCounts);hand->curFpAddr=hand->header.firstRecAddr;hand->curRecNo=1;if (-1 == fseek(hand-> fd,hand->curFpAddr, SEEK_SET))return FALSE;for(i=0;i<hand->header.recCounts;i++){rec[i]=(pDbfRec)malloc(sizeof(DbfRec));GetCurRecord(hand,rec[i]);GoNextRecord(hand);rec[i]->field[num].fieldDcis=rec[i]->field[num+1].fieldDcis;rec[i]->field[num].fieldLen=rec[i]->field[num+1].fieldLen;rec[i]->field[num].fieldType=rec[i]->field[num+1].fieldType;num++;}}if(num==-1){for(j=0;j<10;j++)hand->rec.field[num].fieldName[j]=0;hand->rec.field[num].fieldType=0;hand->rec.field[num].fieldLen=0;hand->rec.field[num].fieldDcis=0;}else{for(;num<n;num++){strcpy(hand->rec.field[num].fieldName,hand->rec.field[num+1].fieldName);hand->rec.field[num].fieldType=hand->rec.field[num+1].fieldType;hand->rec.field[num].fieldLen=hand->rec.field[num+1].fieldLen;hand->rec.field[num].fieldDcis=hand->rec.field[num+1].fieldDcis;}}hand->header.recCounts--;reccounts=hand->header.recCounts;hand->fd=fopen("c:\\数据库\\table.dbf","w");fclose(hand->fd);hand->fd=fopen("c:\\数据库\\table.dbf","w+b");if(NewDbfHead(hand,&hand->rec) == NULL)return NULL;if (NULL == WriteFieldDicsribe(hand,&hand->rec))return NULL;WriteFieldEnd(hand);if(0!=fclose(hand->fd))return NULL;for(i=0;i<reccounts;i++)AddRec(hand,rec[i]);return hand;}pDbfHand CreateDbf(DbfRec rec)//建立DBF文件{pDbfHand hand = NULL;if ((hand = (pDbfHand)malloc(sizeof(DbfHand))) ==NULL) return NULL;memset(hand, 0x00, sizeof(DbfHand));if((hand->fd=fopen("c:\\数据库\\table.dbf","w+b"))!=NULL){if(NewDbfHead(hand, &rec) == NULL)return NULL;if(NULL == WriteFieldDicsribe(hand, &rec))return NULL;WriteFieldEnd(hand);}fclose(hand->fd);return hand;}pDbfHand OpenDbf()//打开DBF文件{pDbfHand hand = NULL;if ((hand = (pDbfHand) malloc(sizeof(DbfHand))) ==NULL) return NULL;memset(hand, 0x00, sizeof(DbfHand));if ((hand-> fd =fopen("c:\\数据库\\table.dbf","r+b")) == NULL) return NULL;if(NULL == ReadDbfHead(hand))return NULL;if(NULL == ReadFieldDiscribe(hand))return NULL;GotoTop(hand);return hand;}void ShowBeginning(){printf("+----------------------------------------------------------------------------+\n");printf("||\n");printf("| 欢迎进入SQL系统|\n");printf("||\n");printf("+----------------------------------------------------------------------------+\n");}void Show(){printf(" 输入语句格式如下:\n");printf(" create table student\n");printf(" (\n");printf(" SNO int PRIMARY KEY,\n");printf(" SNAME char(10) UNIQUE,\n");printf(" SAGE int,\n");printf(" SDEPT char(20) NOT NULL,\n");printf(" COURSE char(20),\n");printf(" GRADE int\n");printf(" );\n");printf(" alter table student add CNO int NOT NULL;\n");printf(" alter table student alter column SAGE short;\n");printf(" alter table student drop SDEPT;\n");}int Read()//用于读取从键盘键入的SQL语句{char c;int i,j;printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++\n");printf("请输入SQL语句:\n\n");for(i=0;(c=getch())!=';';i++){if(c==27)exit(0);if(c==8){i-=2;if(i<-1)i=-1;system("cls");Show();printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++\n");printf("请输入SQL语句:\n\n");for(j=0;j<=i;j++){if(sql1[j]==13){puts("");}printf("%c",sql1[j]);}continue;}sql1[i]=c;if(c==13){puts("");sql[i]=' ';}else if(c=='('||c==')'||c=='\''){printf("%c",c);sql[i]=' ';}else{printf("%c",c);sql[i]=c;}}sql[i]=';';sql[i+1]='\0';printf(";");puts("");return 0;}int position;//文件指针的位置int Read1()//用于读取从程序文件中读取的SQL语句{FILE *fp;char c;int i,j;printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++\n");printf("请输入SQL语句:\n\n");fp=fopen("d:\\table.sql","r");fseek(fp,position,0);for(i=0;(c=fgetc(fp))!=';';i++){if(c==27)exit(0);if(c==8){i-=2;if(i<-1)i=-1;system("cls");Show();printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++\n");printf("请输入SQL语句:\n\n");for(j=0;j<=i;j++){if(sql1[j]==13)puts("");printf("%c",sql1[j]);}continue;}sql1[i]=c;if(c==13){puts("");sql[i]=' ';}else if(c=='('||c==')'||c=='\''){printf("%c",c);sql[i]=' ';}else{printf("%c",c);sql[i]=c;}}sql[i]=';';sql[i+1]='\0';printf(";");puts("");position=ftell(fp);return 0;}int CREATE(){char type[6][10]={"char","int","short","float","double"};char Type1[6]={'C','N','S','F','D'};FILE *fp=NULL;Condition con[MAX];//约束条件结构体int i,j,num=0,error=1;//num 字段数error输入错误标志char temp[10],condition[10];//table_name 表名condition 约束条件memset(con,0,sizeof(con[0])*MAX);//结构体中各值初始化为空for(i=0;sql[i]==' ';i++);for(j=0;sql[i]!=' '&&sql[i]!=';';i++,j++)temp[j]=tolower(sql[i]);temp[j]='\0';if(strcmp(temp,"create")!=0)//判断create是否写错{error=0;printf("\n你输入的'create'有误,请重新创建!\n");}else{for(;sql[i]==' ';i++);for(j=0;sql[i]!=' '&&sql[i]!=';';i++,j++)temp[j]=tolower(sql[i]);temp[j]='\0';if(strcmp(temp,"table")!=0)//判断table是否写错{error=0;printf("\n你输入的'table'有误,请重新创建!\n");}else{for(;sql[i]==' ';i++);for(j=0;sql[i]!=' '&&sql[i]!=';';i++,j++)//提取表名table_name[j]=tolower(sql[i]);table_name[j]='.'; //加后缀.dbftable_name[j+1]='d';table_name[j+2]='b';table_name[j+3]='f';table_name[j+4]='\0';do{int field_lengtf=0,flag=1;//field_lengtf 字段长度for(;sql[i]==' '||sql[i]==',';i++);if(sql[i]==';')break;for(j=0;sql[i]!=' ';i++,j++)//提取列名rec.field[num].fieldName[j]=sql[i];rec.field[num].fieldName[j]='\0';for(;sql[i]==' ';i++);for(j=0;sql[i]!=' '&&sql[i]!=',';i++,j++)//提取列数据类型temp[j]=tolower(sql[i]);temp[j]='\0';for(j=0;j<5;j++){if(strcmp(temp,type[j])==0){rec.field[num].fieldType=Type1[j];break;}}if(j==5)//列数据类型有误{error=0;printf("\n你输入的列数据类型有误(务必是char,int,short,float,double),请重新创建!\n");break;}else{/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++*/if(rec.field[num].fieldType=='C'){//如果类型是char需要提取列长度,如果是int、float则固定列长度为4,double则固定列长度为8for(;sql[i]==' ';i++);for(;sql[i]!=' ';i++)//提取长度{if(sql[i]<48||sql[i]>58)//列长度必须是数字{flag=0;break;}elsefield_lengtf=field_lengtf*10+(sql[i]-48);}if(flag==0){error=0;printf("\n你输入的列长度有误,请重新创建!\n");break;}elserec.field[num].fieldLen=field_lengtf;}else if(rec.field[num].fieldType=='N'||rec.field[num].fieldType=='F') rec.field[num].fieldLen=4;else if(rec.field[num].fieldType=='D')rec.field[num].fieldLen=8;else if(rec.field[num].fieldType=='S')rec.field[num].fieldLen=2;field_lengtf=0,flag=1;for(;sql[i]==' ';i++);for(j=0;sql[i]!=' '&&sql[i]!=','&&sql[i]!=';';i++,j++)//提取列完整性约束condition[j]=tolower(sql[i]);condition[j]='\0';if(condition[0]!=','&&condition[0]!='\0'){if(strcmp(condition,"primary")==0)//判断是否为主键{for(;sql[i]==' ';i++);for(j=0;sql[i]!=' '&&sql[i]!=',';i++,j++)temp[j]=tolower(sql[i]);temp[j]='\0';if(strcmp(temp,"key")==0)con[num].flag=1;else{error=0;printf("\n你输入的'KEY'有误,请重新创建!\n");break;}}else if(strcmp(condition,"unique")==0)//判断是否取唯一值con[num].flag=2;else if(strcmp(condition,"not")==0)//判断是否非空{for(;sql[i]==' ';i++);for(j=0;sql[i]!=' '&&sql[i]!=',';i++,j++)condition[j]=tolower(sql[i]);condition[j]='\0';if(strcmp(condition,"null")==0)con[num].flag=3;else{error=0;printf("\n你输入的约束条件'NOT NULL'有误,请重新创建!\n");break;}}else//列完整性约束出错{error=0;printf("\n你输入的约束条件有误(必须PARIMARY KEY,UNIQUE,NOT NULL),请重新创建!\n");break;}}}rec.field[num].fieldDcis=0;rec.field[num].offset=0;rec.realCounts=num+1;num++;//下一字段}while(sql[i]!=';');if((fp=fopen("d:\\student.dat","w+b"))==NULL)//将列完整性约束条件写入文件中{printf("打开文件失败!\n");error=0;}fwrite(&con,sizeof(Condition)*num,1,fp);fclose(fp);fp=NULL;}}if(error==0){memset(sql,0,sizeof(char)*300);//出错时清空输入的语句return 0;}else{if(f!=CreateDbf(rec))//建立.dbf文件return 1;elsereturn 0;}return 1;}int ALTER(){char type[6][10]={"char","int","short","float","double"};char Type1[6]={'C','N','S','F','D'};FILE *fp;int i,j,num,error=1;char T; //列数据类型的简写Condition con[MAX];//约束条件结构体char temp[10],field_name[10],f_type[10],condition[10];// field_name 列名f_type 列数据类型memset(&con,0,sizeof(con));//结构体中各值初始化为空for(i=0;sql[i]==' ';i++);for(j=0;sql[i]!=' ';i++,j++)temp[j]=tolower(sql[i]);temp[j]='\0';if(strcmp(temp,"alter")!=0)//判断alter是否写错{error=0;printf("\n你输入的'alter'有误,请重新输入SQL语句!\n");}else{for(;sql[i]==' ';i++);for(j=0;sql[i]!=' ';i++,j++)temp[j]=tolower(sql[i]);temp[j]='\0';if(strcmp(temp,"table")!=0)//判断table是否写错{error=0;printf("\n你输入的'table'有误,请重新输入SQL语句!\n");}else{for(;sql[i]==' ';i++);for(j=0;sql[i]!=' ';i++,j++)//提取表名table_name[j]=tolower(sql[i]);table_name[j]='.'; //加后缀.dbftable_name[j+1]='d';table_name[j+2]='b';table_name[j+3]='f';table_name[j+4]='\0';if((f=OpenDbf())==0) //判断该表是否存在{printf("\n你输入的表%s不存在,请重新输入SQL语句!\n",table_name);error=0;}else{for(;sql[i]==' ';i++);if(tolower(sql[i])=='a')//增加属性{for(j=0;sql[i]!=' ';i++,j++)//判断add是否写错temp[j]=tolower(sql[i]);temp[j]='\0';if(strcmp(temp,"add")==0){int field_lengtf=0,flag=1; //field_lengtf 列长度for(;sql[i]==' ';i++);for(j=0;sql[i]!=' ';i++,j++)//提取添加的列名field_name[j]=sql[i];field_name[j]='\0';for(;sql[i]==' ';i++);for(j=0;sql[i]!=' '&&sql[i]!=';';i++,j++)//提取列数据类型f_type[j]=tolower(sql[i]);f_type[j]='\0';for(j=0;j<5;j++){if(strcmp(f_type,type[j])==0){T=Type1[j];break;}。

数据库课程设计详细代码

数据库课程设计详细代码

数据库课程设计详细代码一、教学目标本课程的教学目标是使学生掌握数据库的基本理论、设计方法和操作技能,培养学生运用数据库技术解决实际问题的能力。

具体目标如下:1.知识目标:(1)了解数据库的基本概念、发展历程和分类;(2)掌握关系模型、实体-关系模型等数据库设计方法;(3)熟悉SQL语言及其基本操作;(4)掌握数据库的创建、管理、备份和恢复方法。

2.技能目标:(1)能够使用数据库管理系统进行数据库设计、创建和管理;(2)能够运用SQL语言进行数据的增、删、改、查操作;(3)能够进行数据库的备份和恢复操作;(4)能够运用数据库技术解决实际问题。

3.情感态度价值观目标:(1)培养学生的团队协作精神,使其能够与他人共同完成数据库设计任务;(2)培养学生的问题解决能力,使其能够运用数据库技术解决实际问题;(3)培养学生的创新意识,使其能够积极探索数据库技术的新应用。

二、教学内容本课程的教学内容主要包括以下几个方面:1.数据库基本概念:数据库、数据库管理系统、数据库系统、数据模型等;2.数据库设计方法:关系模型、实体-关系模型、E-R图等;3.SQL语言:数据定义、数据操纵、数据查询、数据控制等;4.数据库管理:数据库的创建、管理、备份和恢复等;5.数据库应用案例:运用数据库技术解决实际问题。

三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解数据库的基本概念、设计方法和操作技能;2.案例分析法:分析数据库在实际应用中的案例,使学生更好地理解数据库技术;3.实验法:让学生亲自动手进行数据库设计、创建和管理,提高学生的实践能力;4.讨论法:学生进行小组讨论,培养学生的团队协作能力和问题解决能力。

四、教学资源本课程的教学资源包括:1.教材:选用权威、实用的数据库教材,为学生提供系统、全面的学习资料;2.参考书:提供相关领域的参考书籍,拓展学生的知识视野;3.多媒体资料:制作课件、教学视频等,使教学内容更加生动形象;4.实验设备:提供计算机、数据库管理系统等实验设备,保障学生的实践操作。

数据库设计以及源代码

数据库设计以及源代码

系统建设详细设计1、数据库设计管理员用户表信息:学生用户表:学生信息表:班级文本50 所在班级专业文本50 所学专业2 系统程序文件设计与编写与数据库连接的代码:<% db="message、mdb"set Conn=server、createobject("adodb、Connection")conn、open "Provider=Microsoft、Jet、OLEDB、4、0;Data Source="&server、mappath(db)%>登陆界面代码:代码为:<!--#include file="conn、inc" --><%if request("Submit")<>"" thenset rs=server、createobject("adodb、recordset")sql="SELECT username,password from users where username='"&request("username")&"'"rs、open sql,conn,1,3if rs、bof and rs、eof thenmsg="错误:用户名不存在"elseif rs("password")=request("password") thenSession("admin")=trueresponse、redirect "index、asp?users=admin"elsemsg="错误:密码不正确"end ifend ifrs、closeset rs=nothingConn、closeSet conn = Nothingend if%><html><head><title>管理员</title><script language="JavaScript" type="text/JavaScript"><!--function MM_jumpMenu(targ,selObj,restore){ //v3、0eval(targ+"、location='"+selObj、options[selObj、selectedIndex]、value+"'");if (restore) selObj、selectedIndex=0;}//--></script><LINK href="style、css" rel=Stylesheet type=text/css></head><center><span class="style1”>学生信息管理系统</span></center></td></tr><tr><td colspan="2"><center>管理员:<input name="username" type="text" maxlength="10">密码:<input name="password" type="password" > <input type="submit" name="Submit" value="登录"><input type="reset" name="Submit2" value="重置">用户类型:<select name="menu1" onChange="MM_jumpMenu('parent',this,0)"><option value="admin_login、asp" selected>管理员</option><option value="student_login、asp">学生</option></select> <br> <fontcolor=red><%=msg%></font> </center> </td></tr></table></form></body></html>显示信息:代码为:<!--#include file=”conn、inc”<%if Session(“admin”)<>true and Session(“student”)<>true then Response、Redirect “student_login、asp”end if%><!doctype html public “-//W3C//DTD HTML 4、0 Transitional//EN”><html><head><title>学生信息</title><LINK href=”style、css” rel=Stylesheet type=text/css></style></head><table align=center><tr><td colspan=”2”><center><span class=”style1”>学生信息管理系统</span></center></td></tr><tr><td colspan=”5”><a href=”#”>[<b>首页</b>]</a><a href=”search、asp”>[查询]</a><a title=”需要管理员权限”href=”post、asp”>[添加]</a><a href=”admin_login、asp”>[管理]</a><a href=”logout、asp”>[退出]</a></td></tr></table><%users = Request(“users”)If request(“PageNo”)=”” thenPageNo=1ElsePageNo=int(request(“PageNo”))End Ifsql=”SELECT * from liuyan order by ID desc”set rs=server、createobject(“adodb、recordset”)rs、open sql,conn,1,3if not(rs、eof and rs、bof) thenrs、Pagesize=3rs、absolutepage=PageNox = 0For x = 1 to rs、Pagesizeif x mod 2 thentr_color=”#EBEBEB”elsetr_c olor=”#ffffff”end ifIf rs、eof thenExit ForElseif isNull(Rs(“Dateandtime”)) thenstrDateandtime = “”elsestrDateandtime = Cstr(Rs(“Dateandtime”))end if‘Username,Email,Content,Sex,DateandtimeResponse、Write “<tabl e width=50% border=0 align=center cellpadding=0 cellspacing=0 bgcolor=” + tr_color+ “>”Response、Write “<tr>”Response、Write “<td width=20% nowrap>姓名:</td>”Response、Write “<td width=60% class=Tab>” + Rs(“Username”) + “</td>”‘修改删除链接if us ers = “admin” thenResponse、Write “<td width=20% class=Tab align=right>” + “<a href=post、asp?users=” + users + “&id=” + cstr(Rs(“ID”)) + “><font color=blue>修改</font></a> <a href=delete、asp?users=” + users + “&id=” + cstr(Rs(“ID”)) + “><font color=blue>删除</font></a>” + “</td>”elseResponse、Write “<td width=20% class=Tab></td>”end ifResponse、Write “</tr>”Response、Write “<tr>”Response、Write “<td>性别:</td>”Response、Write “<td colspan=2>” + Rs(“Sex”) + “</td>”Response、Write “</tr>”Response、Write “<tr>”Response、Write “<td>班级:</td>”Response、Write “<td colspan=2>” + Rs(“Class”) + “</td>”Response、Write “</tr>”Response、Write “<tr>”Response、Write “<td>专业:</td>”Response、Write “<td colspan=2>” + Rs(“Major”) + “</td>”Response、Write “</tr>”Response、Write “<tr>”Response、Write “<td>入学时间:</td>”Response、Write “<td colspan=2>” + strDateandtime + “</td>”Response、Write “</tr>”Response、Write “<tr>”Response、Write “<td>评语:</td>”Response、Write “<td colspan=2>” + Rs(“Content”) + “</td>”Response、Write “</tr>”Response、Write “<tr>”Response、Write “<td>E-mail:</td>”Response、Write “<td colspan=2>” + Rs(“Email”) + “</td>”Response、Write “</tr>”Response、Write “</table>”Response、Write “<table border=0 align=center>”‘if users = “admin” then‘Response、Write “<tr>”‘Response、Write “<td align=right bgcolor=”+ tr_color+ “><a href=delete、asp?users=”+ users + “&id=”+ cstr(Rs(“ID”)) + “><font color=red>删除</font></a></td>”‘Response、Writ e “</tr>”‘end ifResponse、Write “<tr>”Response、Write “<td height=1></td>”Response、Write “</tr>”Response、Write “</table>”rs、MoveNextEnd IfNextend ifif rs、recordcount > 0 then<tr><td>共有<%=rs、recordcount%>条学生信息&nbsp;<%=rs、pagesize%>条/页&nbsp;共<%=rs、pagecount%>页</td><td align=”right” class=”Tab”>分页:<%for i=1 to rs、pagecountif pageno <> I thenResponse、Write “<A href=index、asp?users=” + users + “&pageno=” + cstr(i) + “>”&i&”</a>&nbsp;”elseResponse、Writ e “<b>” & I & “</b>&nbsp;”end ifnext%></td> </tr></table>Else<tr><td><marquee>目前,没有任何学生信息!</marquee></td> </tr></table>End if<%rs、closeset rs=nothingConn、closeSet conn = Nothing%></body></html>4、查询信息页面显示:代码为:<!--#include file="conn、inc" --><%if Session("admin")<>true and Session("student")<>true then Response、Redirect "student_login、asp"end if%>if studentid <>0 thensql="SELECT * from liuyan where ID="&studentidset rs=server、createobject("adodb、recordset")rs、open sql,conn,1,3<%rs、closeset rs=nothingConn、closeSet conn = Nothingend if%>。

数据库原理课程设计指导书20070725

数据库原理课程设计指导书20070725

《数据库原理》课程设计指导书课程名称:数据库原理课程代码:02113008一、课程基本情况1.学分:3 学时:2周2.课程性质:实践教学3.适用专业:计算机科学与技术,计算机科学与教育4.适用对象:本科5.先修课程:计算机基础,数据结构6.教材与参考书目:王珊萨师煊编著《数据库系统概论》7.考核方式:设计答辩二、课程教学目的课程设计是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是课程教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。

本课程设计是计算机科学与技术专业的专业技术实践课。

其主要目的是:1、培养学生运用所学的数据库原理理论知识和技能,分析解决计算机应用实际问题的能力。

2、培养学生掌握用所学的数据库原理知识设计计算机课题的思想和方法。

3、培养学生调查研究、查阅文献、资料、手册以及编写技术文献的能力。

4、通过课程设计,要求学生在指导教师的指导下,独立完成设计课题的全部内容,包括:⑴通过调查研究和上机实习,收集和调查有关技术资料。

⑵掌握设计课题的基本步骤和方法。

⑶根据课题的要求进行上机实验调试。

三、课程内容、时间分配及教学基本要求1、选题原则课程设计可根据课程的教学要求,使学生能达到某一技能的训练,为学生毕业设计提供扎实的基本技能训练的需要进行选题。

选题的基本原则是:1、必须符合计算机科学专业课程训练的要求。

2、在满足课程训练要求的前提下,尽可能选择一些有一定实用价值的课题。

3、选题要有利于深化所学课程的知识和拓展知识面。

4、课题任务要有一定的设计、工程量,以保证学生得到一定程度的训练。

5、课题的设计难度要适中,以学生在规定时间内经过努力可以完成为宜。

2、课程设计题目由指导教师或学生自行选择一个数据库相关的题目。

题目至少要包括后台数据库和前台应用程序两部分。

数据库中应该含有多张表,表与表之间应该有一定的联系。

学生信息管理系统java课程设计代码

学生信息管理系统java课程设计代码

学生信息管理系统java课程设计代码学生信息管理系统Java课程设计代码一、引言学生信息管理系统是一种方便、高效的信息管理工具,可以帮助学校或教育机构管理学生的个人信息、学籍信息等。

本文将介绍一个基于Java语言的学生信息管理系统的设计代码。

二、系统设计1. 需求分析学生信息管理系统需要满足以下需求:- 学生信息的录入、修改和删除- 学生信息的查询和显示- 学生成绩的录入、修改和查询- 学生课表的查询和显示- 学生考勤情况的记录和查询2. 数据库设计系统需要设计学生信息、学生成绩、课程表和考勤情况等相关数据库表。

每个表需要定义相应的字段,如学生姓名、学号、性别、年龄等。

3. 界面设计系统需要设计用户友好的界面,方便用户进行操作。

可以使用JavaSwing等图形界面库进行开发,界面要清晰、美观,并提供相应的按钮和输入框供用户使用。

4. 功能实现系统的功能实现需要编写相应的Java代码。

可以使用面向对象的编程思想,将学生、成绩、课程表和考勤等信息封装成对象,通过调用对象的方法来完成相应的操作。

5. 数据库连接系统需要与数据库进行连接,使用Java JDBC等技术来实现数据库的增删改查操作。

可以使用MySQL等关系型数据库管理系统。

6. 用户权限管理系统可以设计管理员和普通用户两种角色,管理员具有录入、修改和删除学生信息的权限,普通用户只能查询和显示学生信息。

三、代码实现以下是一个简单的学生信息管理系统的Java代码示例:```javaimport java.sql.*;import javax.swing.*;public class StudentManagementSystem {// 数据库连接信息private static final String URL = "jdbc:mysql://localhost:3306/student_db";private static final String USERNAME = "root";private static final String PASSWORD = "123456";public static void main(String[] args) {// 连接数据库Connection conn = null;try {conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);} catch (SQLException e) {e.printStackTrace();JOptionPane.showMessageDialog(null, "数据库连接失败!");System.exit(0);}// 界面初始化JFrame frame = new JFrame("学生信息管理系统");frame.setSize(800, 600);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 添加组件JPanel panel = new JPanel();JLabel label = new JLabel("学生信息管理系统");panel.add(label);frame.add(panel);// 显示界面frame.setVisible(true);}}```四、总结通过以上的代码示例,我们可以看到一个简单的学生信息管理系统的实现框架。

数据库课程设计(学生管理系统)-附代码

数据库课程设计(学生管理系统)-附代码

数据库课程设计报告题目:学生信息管理系统院系名称:计算机学院专业名称:班级:学生姓名:学号(8位):指导教师:设计起止时间:2011年12月19日~2011年12月30日一. 设计目的1、掌握DBMS的基本工作原理2、培养数据库应用系统设计的基本思路和方法3、培养分析、解决问题的能力二. 设计内容利用数据库实现对学生信息的管理所用数据库:sqlserver 2008开发语言:java、开发工具:eclipse三.概要设计通过访问数据库实现以下功能:1、不同用户权限登陆系统2、用户密码修改3、学生信息的添加、查询、修改、浏览1.功能模块图2.各个模块详细的功能描述。

1、系统用户管理模块管理员和普通用户通过这个模块登陆系统,不同的用户用不同的用户名登陆,通过选择登陆模式(管理员或者普通用户)登陆系统,完成不同的操作。

两种用户都可以对自己的登陆密码进行修改。

新用户可进行注册操作,注册后登陆,并进行信息的完善。

2、学生信息管理模块管理员和普通用户对学生信息由不同的操作。

管理员可以对信息进行增加,删除,修改和列表查看,普通用户对自己的信息可进行查询,和修改。

四.详细设计1.功能函数的调用关系图2.各功能函数的数据流程图3.重点设计及编码、--学生信息表--create table studentinfo(Sid int primary key identity(1,1),Sname varchar(30) not null,Ssex varchar(10) check(Ssex='男' or Ssex='女'),Snumber varchar(8) check(Snumber like '0409[0-9][0-9][0-9][0-9]') not null,Sprofession varchar(30),Sclass varchar(20),Sdate datetime default getDate());--普通用户登陆信息表--create table userinfo(id int primary key identity(1,1),name varchar(30) not null,mima varchar(20) not null);--管理员登陆信息表--create table userinfo(id int primary key identity(1,1),name varchar(30) not null,mima varchar(20) not null);--连接数据库—try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");}catch(ClassNotFoundException e){System.out.print("加载驱动程序失败");}String conURL="jdbc:sqlserver://localhost:1433; DatabaseName=SIMS";try{Connectioncon=DriverManager.getConnection(conURL,"sa","majie");Statement st=con.createStatement();、}catch(SQLException g){System.out.println("错误代码:"+g.getErrorCode());System.out.println("错误内容:"+g.getMessage());}五.测试数据及运行结果1.正常测试数据和运行结果登录信息查询修改信息2.异常测试数据及运行结果六.调试情况,设计技巧及体会1.改进方案本次课程设计实现了系统的基本功能,做的不是很复杂,跟预期想的结果有些差距,数据库表的设计有点简单,下来还要增加表的复杂度,以及触发器的使用。

数据库设计以及源代码

数据库设计以及源代码

数据库设计以及源代码系统建设详细设计1.数据库设计管理员用户表信息:学生用户表:学生信息表:电子文本50 学生的电子备注/ / 学生的其他信息性别文本50 性别入学时间文本50 学生入学的时间班级文本50 所在班级专业文本50 所学专业2 系统程序文件设计与编写与数据库连接的代码:<% db="message.mdb"set Conn=server.createobject("adodb.Connection")conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&server.mappath(db)%>登陆界面代码:代码为:<%if request("Submit")<>"" thenset rs=server.createobject("adodb.recordset")sql="SELECT username,password from users where username='"&request("username")&"'"rs.open sql,conn,1,3if rs.bof and rs.eof thenmsg="错误:用户名不存在"elseif rs("password")=request("password") then Session("admin")=trueresponse.redirect "index.asp?users=admin" elsemsg="错误:密码不正确"end ifend ifrs.closeset rs=nothingConn.closeSet conn = Nothingend if%>。

数据库课程设计JAVA代码

数据库课程设计JAVA代码

数据库课程设计JAVA代码课程管理系统JAVA代码完整版package TT;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Main extends JFrame{private static final long serialVersionUID = 1L;protected static String a1;protected static String[] a = { "管理员登陆", "教师登陆", "学生登陆" };protected static String a2;protected static String a3;public Main(){//构造方法、}public static void setChange(){//实现界面登陆选择界面final JComboBox box ;box = new JComboBox(a);final String userName = "sa";final String passwrod = "123";final String userName1 = "te";final String passwrod1 = "1234";final String userName2 = "st";final String passwrod2= "12345";final JFrame jFrame = new JFrame("登陆界面");Dimension dimension =Toolkit.getDefaultT oolkit().getScreenSize();jFrame.setBounds(((int)dimension.getWidth() - 200) / 2, ((int)dimension.getHeight() - 300) / 2, 540, 500);jFrame.setResizable(false);jFrame.setLayout(null);jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLO SE);JLabel labe00 = new JLabel("选择");labe00.setBounds(130, 100, 100, 30);jFrame.add(labe00);JPanel p = new JPanel();p.add(box);p.setBounds(250, 100, 100, 30);jFrame.add(p);JLabel label1 = new JLabel("姓名");label1.setBounds(130, 170, 100, 30);jFrame.add(label1);JLabel label2 = new JLabel("密码");label2.setBounds(130, 250, 100, 30);jFrame.add(label2);final JTextField text1 = new JTextField();text1.setBounds(250, 175, 130, 20);jFrame.add(text1);final JPasswordField text2 = new JPasswordField();text2.setBounds(250, 255, 130, 20);jFrame.add(text2);box.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (e.getSource() == box) {int index = box.getSelectedIndex();switch (index) {case 0://这里可以做别的事情,这样写只是为了告诉你有这个方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

use kjq111007307/*创建一个部门信息表包含“部门号,部门名,部门经理,人数”属性列*/create table department(depart_no char(2)primary key,depart_name char(30)not null,depart_manage char(6)not null,depart_people int not null)/*创建一个职位信息表包含“职位,基本薪资,福利,失业保险,住房公积金”属性列*/create table position(pos char(30)primary key,basesalary float not null,benefits float not null,insurances float not null,housing_funds float not null)/*创建一个职工信息表包含"职工号,职工名,性别,年龄,学历,部门号,职位"属性列*/create table staff_message(staff_no char(4)primary key,staff_name char(10)not null,staff_sex char(2)check(staff_sex in('男','女')),staff_age int not null,staff_edu char(10)not null,staff_dep char(2)not null,staff_job char(30)not null,foreign key(staff_dep)references department(depart_no),foreign key(staff_job)references position(pos))/*创建一个员工考勤表包含“职工号,年月,迟到,缺勤,加班”属性列*/create table staff_days(staff_no char(4),month_date char(6),staff_late int not null,staff_absent int not null,workoverdays int not null,primary key(staff_no,month_date))/*创建一个薪资表包含“职工号,年月,奖金,罚金,真实薪资”属性列*/create table salary(staff_no char(4),month_date char(6),addsalary float not null,subsalary float not null,relsalary float not null,primary key(staff_no,month_date))create index salary_index on salary(month_date asc,staff_no asc); /*部门表信息的录入*//*经理室*/insertinto departmentvalues('01','manage_department','王栋','1');/*财务科*/insertinto departmentvalues('02','financial_department','张鹏','3');/*技术科*/insertinto departmentvalues('03','plan_department','代淑英','5');/*销售科*/insertinto departmentvalues('04','market_department','金加容','6');/*职位表信息的录入*//*经理*/insertinto positionvalues('manager','4500','1125','-45','-36');/*副经理*/insertinto positionvalues('assistant_manager','4000','1000','-40','-32');/*办事*/insertinto positionvalues('clerk','3500','875','-35','-28');/*助理*/insertinto positionvalues('assistant','2000','500','-20','-16');/*职工信息表信息的录入*/insertinto staff_messagevalues('0101','王栋','男','38','硕士','01','manager'); insertinto staff_messagevalues('0201','张鹏','男','35','硕士','02','manager'); insertinto staff_messagevalues('0202','程雷','男','30','本科','02','clerk');insertinto staff_messagevalues('0203','王晶晶','女','29','本科','02','assistant');insertinto staff_messagevalues('0301','代淑英','女','35','硕士','03','manager');insertinto staff_messagevalues('0302','刘燕','女','30','本科','03','assistant_manager'); insertinto staff_messagevalues('0303','杨浩','男','27','本科','03','clerk');insertinto staff_messagevalues('0304','程伟','男','31','本科','03','clerk');insertinto staff_messagevalues('0305','唐琦','女','25','本科','03','assistant');insertinto staff_messagevalues('0401','金加容','女','34','本科','04','manager');insertinto staff_messagevalues('0402','吴辉','男','35','本科','04','assistant_manager'); insertinto staff_messagevalues('0403','陈睿','男','32','本科','04','clerk');insertinto staff_messagevalues('0404','万莉','女','36','本科','04','clerk');insertinto staff_messagevalues('0405','方冬雨','女','31','本科','04','clerk');insertinto staff_messagevalues('0406','陈晨','女','27','专科','04','assistant');insertinto staff_daysvalues('0101','201205','0','0','0');insertinto staff_daysvalues('0201','201205','0','0','0');insertinto staff_daysvalues('0202','201205','0','0','0');insertinto staff_daysvalues('0203','201205','0','0','0');insertinto staff_daysvalues('0301','201205','0','0','0');insertinto staff_daysvalues('0302','201205','0','0','0');insertinto staff_daysvalues('0303','201205','0','0','0'); insertinto staff_daysvalues('0304','201205','0','0','0'); insertinto staff_daysvalues('0305','201205','0','0','0'); insertinto staff_daysvalues('0401','201205','0','0','0'); insertinto staff_daysvalues('0402','201205','0','0','0'); insertinto staff_daysvalues('0403','201205','0','0','0'); insertinto staff_daysvalues('0404','201205','0','0','0'); insertinto staff_daysvalues('0405','201205','0','0','0'); insertinto staff_daysvalues('0406','201205','0','0','0'); insertinto salaryvalues('0101','201205','0','0','5544'); insertinto salaryvalues('0201','201205','0','0','5544'); insertinto salaryvalues('0202','201205','0','0','4312'); insertinto salaryvalues('0203','201205','0','0','2464'); insertinto salaryvalues('0301','201205','0','0','5544'); insertinto salaryvalues('0302','201205','0','0','4928'); insertinto salaryvalues('0303','201205','0','0','4312'); insertinto salaryvalues('0304','201205','0','0','4312'); insertinto salaryvalues('0305','201205','0','0','2464'); insertinto salaryvalues('0401','201205','0','0','5544'); insertinto salaryvalues('0402','201205','0','0','4928');insertinto salaryvalues('0403','201205','0','0','4312');insertinto salaryvalues('0404','201205','0','0','4312');insertinto salaryvalues('0405','201205','0','0','4312');insertinto salaryvalues('0406','201205','0','0','2464');/*******************触发器***********************//*创建一个触发器当修改考勤表中的加班或迟到或缺勤时,薪资表中的数据有自动更新的功能*/ create trigger xinzi1on staff_daysfor updateas/*定义三个变量late,absent,overdays当考勤表有更新时用来记录新的数据*/declare @late int,@absent int,@overdays int/*给变量赋值*/select @late=staff_late from insertedselect @absent=staff_absent from insertedselect @overdays=workoverdays from inserted/*定义变量来记录组成最终真实薪资的各项薪资*/declare @kkbasesalary float,@kkaddsalary float,@kksubsalary float,@kkbenefits float,@kkinsurances float,@kkhousing_funds float,@kkrelsalarys float/*给组成最终真实薪资的各项薪资赋值*/select @kkbasesalary=(select basesalaryfrom positionwhere pos=(select staff_jobfrom staff_messagewhere staff_no=(select staff_no from inserted)))select @kkaddsalary=(select workoverdays from inserted)*30select @kksubsalary=(select staff_late from inserted)*(-10)+(selectstaff_absent from inserted)*(-30)select @kkbenefits=@kkbasesalary*(0.25)select @kkinsurances=@kkbasesalary*(-0.01)select @kkhousing_funds=@kkbasesalary*(-0.008)/*用组成真实薪资的各项薪资来给真实薪资赋值*/select@kkrelsalarys=@kkbasesalary+@kkaddsalary+@kksubsalary+@kkbenefits+@kkinsurances+@kkhousing_funds/*利用变量对薪资表中的'加班费,迟到缺勤扣除费'进行更新*/update salaryset addsalary=@kkaddsalarywhere staff_no=(select staff_no from inserted)and month_date=(select month_date from inserted)update salaryset subsalary=@kksubsalarywhere staff_no=(select staff_no from inserted)and month_date=(select month_date from inserted)update salaryset relsalary=@kkrelsalaryswhere staff_no=(select staff_no from inserted)and month_date=(select month_date from inserted)/*创建一个触发器当对考勤表插入新数据时,薪资表有自动对应插入新数据的功能*/ create trigger xinzi2on staff_daysfor insertasbegin/*定义变量来记录薪资表中应插入的各项数据*/declare @jjstaff_no char(4),@jjmonth_date char(6)declare @jjbasesalary float,@jjaddsalary float,@jjsubsalary float,@jjbenefits float,@jjinsurances float,@jjhousing_funds float,@jjrelsalarys float /*给各个变量赋值*/select @jjstaff_no=(select staff_nofrom inserted)select @jjmonth_date=(select month_datefrom inserted)select @jjbasesalary=(select basesalaryfrom positionwhere pos=(select staff_jobfrom staff_messagewhere staff_no=(select staff_no from inserted)))select @jjaddsalary=0select @jjsubsalary=0select @jjbenefits=@jjbasesalary*(0.25)select @jjinsurances=@jjbasesalary*(-0.01)select @jjhousing_funds=@jjbasesalary*(-0.008)select @jjrelsalarys=@jjbasesalary+@jjbenefits+@jjinsurances+@jjhousing_funds/*将新值插入到薪资表中*/insertinto salaryvalues(@jjstaff_no,@jjmonth_date,@jjaddsalary,@jjsubsalary,@jjrelsalarys)end/*对员工信息表创建一个触发器实现当登记新来员工信息时,薪资表和考勤表中自动对应增加新记录的功能*/create trigger staffmessage1on staff_messagefor insertasbegin/*定义变量来记录待插入薪资表和考勤表的数据*/declare @hhstaff_no char(4)select @hhstaff_no=(select staff_no from inserted)/*向考勤表中自动插入新员工的薪资数据,同时薪资表也会自动插入新数据*/insertinto staff_daysvalues(@hhstaff_no,'201206',0,0,0)end/*对员工信息表创建一个触发器来实现当某员工信息从信息表中删除时,薪资表和考勤表能自动删除关于该员工的信息的功能*/create trigger staffmessage2on staff_messagefor deleteasbegin/*删除辞职员工在薪资表中的记录*/deletefrom salarywhere staff_no=(select staff_no from deleted)/*删除辞职员工在考勤表中的记录*/deletefrom staff_dayswhere staff_no=(select staff_no from deleted)end/******************存储过程********************//*创建一个存储过程实现向部门表录入新数据的功能*/create procedure department_insert@aadepart_no char(2),@aadepart_name char(30),@aadepart_manage char(6),@aadepart_people intasbegininsertinto departmentvalues(@aadepart_no,@aadepart_name,@aadepart_manage,@aadepart_people) end/*创建一个存储过程实现向职位表录入新数据的功能*/create procedure position_insert@bbpos char(30),@bbbasesalary float,@bbbenefits float,@bbinsurances float, @bbhousing_funds floatasbegininsertinto positionvalues(@bbpos,@bbbasesalary,@bbbenefits,@bbinsurances,@bbhousing_funds) end/*创建一个存储过程实现向职工信息表录入新数据的功能*/create procedure staffmessage_insert@ccstaff_no char(4),@ccstaff_name char(10),@ccstaff_sex char(2),@ccstaff_age int,@ccstaff_edu char(10),@ccstaff_dep char(2),@ccstaff_job char(30)asbegininsertinto staff_messagevalues(@ccstaff_no,@ccstaff_name,@ccstaff_sex,@ccstaff_age,@ccstaff_edu,@ccstaff_dep, @ccstaff_job)end/*创建一个存储过程实现在新的一月时向考勤表中插入新数据的功能*/create procedure kaoqin_insert@qqstaff_no char(4),@qqmonth_date char(6),@qqstaff_late int,@qqstaff_absent int,@qqworkoverdays intasbegininsertinto staff_daysvalues(@qqstaff_no,@qqmonth_date,@qqstaff_late,@qqstaff_absent,@qqworko verdays)end/*创建一个存储过程实现只能查看自己的基本信息的功能*/create proc select_staffmessage@staff_number char(4)asselect*from staff_messagewhere staff_no=@staff_number;/*创建一个存储过程实现只能查看自己的工资情况的功能*/create proc select_salary@staff_num char(4)as/*查看自己某年某月的福利,失业保险,住房公积金,奖金,罚金,最终真实工资*/selectsalary.staff_no,salary.month_date,position.benefits,position.insurances,position.housing_funds,salary.addsalary,salary.subsalary,salary.relsala ryfrom salary,staff_message,positionwhere salary.staff_no=@staff_numand salary.staff_no=staff_message.staff_noand staff_message.staff_job=position.pos;/*创建一个存储过程实现只能查看自己的考勤信息的功能*/create proc select_staffdays@staff_no char(4)asselect*from staff_dayswhere staff_no=@staff_no;/*****************实现功能的代码********************//*查看五个基本表*/select*from department;select*from position;select*from staff_message;select*from staff_daysselect*from salary;/*查看某员工自己的信息*/exec select_staffmessage'0202';/*查看某员工自己的考勤记录*/exec select_staffdays'0202';/*查看某员工自己的薪资*/exec select_salary'0202';/*更新考勤表薪资表会自动对应更新,*/update staff_daysset staff_late=3where staff_no='0101'and month_date='201205';select*from staff_days;select*from salary;/*向考勤表插入信息,薪资表也会自动对应插入信息*/exec kaoqin_insert'0101','201206','0','0','0';select*from staff_days;select*from salary;/*向员工信息表插入信息,考勤表和薪资表也会自动对应插入新信息*/ exec staffmessage_insert'0204','陈珍','女','29','本科','02','clerk';select*from staff_message;select*from staff_days;select*from salary;/*删除员工信息表的信息,考勤表和信息表也会自动删除对应信息*/ deletefrom staff_messagewhere staff_no='0204';select*from staff_message;select*from staff_days;select*from salary;/*按部门查询员工的基本信息*/select*from staff_messagewhere staff_dep='03';/*按年月查看员工的考勤记录*/select*from staff_dayswhere month_date='201205';/*按部门查看所有员工薪资总数*/select sum(relsalary)from staff_message,salarywhere salary.staff_no=staff_message.staff_noand staff_dep='04';/*按职位查看所有员工薪资总数*/select sum(relsalary).from staff_message,salarywhere salary.staff_no=staff_message.staff_no and staff_job='clerk';.。

相关文档
最新文档