大数据库原理与设计大作业源代码
- 格式:doc
- 大小:522.50 KB
- 文档页数:11
一、大作业内容对学生信息(包括学号、数学、英语、计算机、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.每个教师都将各自班学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩员。
假设,教师现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改和浏览等功能。
学习相关开发工具和应用软件,熟悉系统建设过程。
二、大作业的要求与数据1、用C语言实现系统;对学生信息(包括学号、数学、英语、C语言、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出。
要求设计的管理系统能够完成以下功能:(1)、每一条记录包括一个学生的学号、姓名、3门课成绩(2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入。
)(3)、成绩信息显示浏览功能:完成全部学生记录的显示。
(4)、查询功能:完成按姓名查找学生记录,并显示。
(5)、成绩信息的删除:按学号进行删除某学生的成绩.(6)、排序功能:按学生平均成绩进行排序。
(7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!三、总体设计(包含几大功能模块)1、成绩录入功能2、成绩输出功能3、成绩查询功能4、删除模块5、排序功能6、统计功能7、退出系统四、详细设计(各功能模块的具体实现算法——流程图)4.1各函数的功能和实现1、输入初始的学生信息:输入信息包括学生的姓名、学号以及学生的成绩等相关信息;可用函数void input(STUDENT *data, int *len)来实现此操作。
2、成绩输出模块:输出学生的信息以及成绩void output(STUDENT *data, int len):通过学生的姓名来查看学生的相关成绩,同时也可以分别通过caverage() 、maverage() 、eaverage() 和comaverage() 来输出成绩的平均分数、最高和最低分数。
系统建设详细设计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='”&re quest("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+"。
数据结构大作业作业题目:职工信息管理系统姓名:学号:班级:指导教师:日期:一、主要功能:这个职工信息管理系统是由C语言编写的程序,它用起来很方便又很灵活。
它由输入职工信息,输出职工信息,按职工号,部门号,工资排序,按职工号,部门号,工资来输出职工的所有信息。
删除有关职工的所有信息,保存职工的所有信息并退出等11个模块儿组成。
二、实验环境:C语言、C++、C# 等等。
三、功能说明:下面按步骤来介绍一下,职工信息管理系统的基本操作。
这是运行程序以后出现的主界面。
如图(1)所示:图(1)主界面1.输入职工的信息该模块儿的功能是分别输入职工的姓名,职工号,部门号,工资等信息。
每次输入职工的所有信息以后,界面上会显示出《输入完成!》的命令。
如图(2)所示:图(2)输入职工信息该模块儿的功能是显示出有关职工的所有信息。
操作如图(3)所示:图(3)输出所有的职工信息3.按职工号排序该模块儿的功能是按职工号排序所有的职工。
我们按3的时候,界面上会显示出《排序完成!》的命令。
如图(4)所示:图(4)按职工号排序该模块儿的功能是显示出已排序好的所有职工的号码。
操作如图(5)所示:图(5)输出所有的职工号5.按部门号排序该模块儿的功能是按部门号排序所有职工的部门号。
我们按5的时候,界面上会显示出《排序完成!》的命令。
如图(6)所示:图(6)按部门号排序该模块儿的功能是显示出已排序好的所有部门号。
操作如图(7)所示:图(7)输出所有的部门号7.按职工的工资排序该模块儿的功能是按工资排序所有职工的工资。
我们按7的时候,界面上会显示出《排序完成!》的命令。
如图(8)所示:图(8)按职工的工资排序该模块儿的功能是显示出已排序好的所有职工的工资。
操作如图(9)所示:图(9)输出所有职工的工资9.删除职工的所有信息该模块儿的功能是删除有关职工的所有信息。
我们按9的时候界面上会显示出《删除成功!》的命令。
如图(10)所示:图(10)删除职工的所有信息10.保存该模块儿的功能是保存有关职工的所有信息。
好的,我可以为你提供一个简单的数据库课程设计源码的示例。
请注意,以下代码只是一个简单的示例,仅供参考。
你可以根据具体的需求和实际情况进行修改和扩展。
数据库设计目的:创建一个简单的课程管理系统,包括学生、教师、课程和成绩等数据。
数据库结构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表中,关联教师数据和课程描述信息需要调用关联表的添加方法来实现。
数据库实验源代码大全实验一:数据定义语言create user U099074235 IDENTIFIED BY XHM123 DEFAULT TABLESPACE DXPDA TASPACE1,创建表StudentCREATE TABLE Student (SNO CHAR(5) ,SNAME CHAR(10) NOT NULL,SDEPT CHAR(2) NOT NULL,SCLASS CHAR(2) NOT NULL,SAGE NUMBER(2),SSEX CHAR(2),CONSTRAINT SNO_PK PRIMARY KEY(SNO));2,创建表CourseCREATE TABLE Course(CNO CHAR(3),CNAME V ARCHAR2(16) ,CTIME NUMBER(3),CONSTRAINT CNO_PK PRIMARY KEY(CNO))3,创建表TeachCREATE TABLE Teach(TNO V ARCHAR(6),TNAME V ARCHAR(8),TSEX CHAR(2),CNO CHAR(3),TDA TE DATE,TDEPT CHAR(2),CONSTRAINT TT_PK PRIMARY KEY(TNO),CONSTRAINT CNO_FK FOREIGN KEY(CNO) REFERENCES Course(CNO))CREATE TABLE Teach(TNO V ARCHAR(6),TNAME V ARCHAR(8),TSEX CHAR(2),CNO CHAR(3),TAGE NUMBER(2),TDEPT CHAR(2),CONSTRAINT TT_PK PRIMARY KEY(TNO),CONSTRAINT CNO_FK FOREIGN KEY(CNO) REFERENCES Course(CNO))4,创建表ScoreCREATE TABLE Score(SNO CHAR(5),CNO CHAR(3),SCORE NUMBER(5,2),CONSTRAINT SC_PK PRIMARY KEY(SNO,CNO),CONSTRAINT SNO_FK FOREIGN KEY(SNO) REFERENCES Student(SNO), CONSTRAINT CNOM_FK FOREIGN KEY(CNO) REFERENCES Course(CNO))二、插入数据1,StudentINSERT INTO Student V ALUES('96001','马小燕','CS','01',21,'女');INSERT INTO Student V ALUES('96002','黎明','CS','01',18,'男');INSERT INTO Student V ALUES('96003','刘东明','MA','01',18,'男');INSERT INTO Student V ALUES('96004','赵志勇','IS','02',20,'男');INSERT INTO Student V ALUES('97001','马蓉','MA','02',19,'女');INSERT INTO Student V ALUES('97002','李成功','CS','01',20,'男');INSERT INTO Student V ALUES('97003','黎明','IS','03',19,'女');INSERT INTO Student V ALUES('97004','李丽','CS','02',19,'女');INSERT INTO Student V ALUES('96005','司马志明','CS','02',18,'男');2,CourseINSERT INTO Course V ALUES('001','数学分析',144);INSERT INTO Course V ALUES('002','普通物理',144);INSERT INTO Course V ALUES('003','微机原理',72);INSERT INTO Course V ALUES('004','数据结构',72);INSERT INTO Course V ALUES('005','操作系统',64);INSERT INTO Course V ALUES('006','数据库原理',64);INSERT INTO Course V ALUES('007','DB_Design',48);INSERT INTO Course V ALUES('008','程序设计',56);3,TeachINSERT INTO Teach V ALUES('9401','王成钢','男','004',TO_DA TE( '1999-09-05', 'YYYY-MM-DD'),'CS');INSERT INTO Teach V ALUES('9402','李正科','男','003',TO_DA TE( '1999-09-05', 'YYYY-MM-DD'),'CS');INSERT INTO Teach V ALUES('9403','严敏','女','001',TO_DATE( '1999-09-05', 'YYYY-MM-DD'),'MA');INSERT INTO Teach V ALUES('9404','赵高','男','004',TO_DATE( '1999-09-05', 'YYYY-MM-DD'),'IS');INSERT INTO Teach V ALUES('9405','李正科','男','003',TO_DA TE( '2000-02-23', 'YYYY-MM-DD'),'MA');INSERT INTO Teach V ALUES('9406','李玉兰','女','006',TO_DA TE( '2000-02-23', 'YYYY-MM-DD'),'CS');INSERT INTO Teach V ALUES('9407','王成钢','男','004',TO_DA TE( '2000-02-23', 'YYYY-MM-DD'),'IS');INSERT INTO Teach V ALUES('9408','马悦','女','008',TO_DATE( '2000-09-06', 'YYYY-MM-DD'),'CS');INSERT INTO Teach V ALUES('9409','王成钢','男','007',TO_DA TE( '1999-09-05', 'YYYY-MM-DD'),'CS');INSERT INTO Teach V ALUES('9401','王成钢','男','004',35,'CS');INSERT INTO Teach V ALUES('9402','李正科','男','003',40,'CS');INSERT INTO Teach V ALUES('9403','严敏','女','001',33,'MA');INSERT INTO Teach V ALUES('9404','赵高','男','004',28,'IS');INSERT INTO Teach V ALUES('9405','李正科','男','003',32,'MA');INSERT INTO Teach V ALUES('9406','李玉兰','女','006',43,'CS');INSERT INTO Teach V ALUES('9407','王成钢','男','004',49,'IS');INSERT INTO Teach V ALUES('9408','马悦','女','008',35,'CS');INSERT INTO Teach V ALUES('9409','王成钢','男','007',48,'CS');to_date( '05-09-1999', 'DD-MM-YYYY' );4,ScoreINSERT INTO Score V ALUES('96001','001',77.5);INSERT INTO Score V ALUES('96001','003',89);INSERT INTO Score V ALUES('96001','004',86);INSERT INTO Score V ALUES('96001','005',82);INSERT INTO Score V ALUES('96002','001',88);INSERT INTO Score V ALUES('96002','003',92.5);INSERT INTO Score V ALUES('96002','006',90);INSERT INTO Score V ALUES('96005','004',92);INSERT INTO Score V ALUES('96005','005',90);INSERT INTO Score V ALUES('96005','006',89);INSERT INTO Score V ALUES('96005','007',76);INSERT INTO Score V ALUES('96003','001',69);INSERT INTO Score V ALUES('97001','001',96);INSERT INTO Score V ALUES('97001','008',95);INSERT INTO Score V ALUES('96004','001',87);INSERT INTO Score V ALUES('96003','003',91);INSERT INTO Score V ALUES('97002','003',91);INSERT INTO Score V ALUES('97002','004','');INSERT INTO Score V ALUES('97002','006',92);INSERT INTO Score V ALUES('97004','005',90);INSERT INTO Score V ALUES('97004','006',85);INSERT INTO Score V ALUES('97004','008',75);INSERT INTO Score V ALUES('97003','001',59);INSERT INTO Score V ALUES('97003','003',58)实验一、1,(建立数据库表) 建立教学数据库的四个数据库表,其中Student表中不包含SSEX(C,2) 字段,Sname 字段为Sname(C,8)且可为空ALTER TABLE Student DROP COLUMN SSEXALTER TABLE Student MODIFY SNAME VARCHAR(8) NULL例1-2:(修改数据库表) 在Student表中增加SEX(C,2) 字段。
数据库设计作品题目物流数据库管理系统组员1姓名:组员1学号:组员2姓名:组员2学号:完成时间:目录(供参考)1.数据库规划1.1任务陈述本数据库的设计,是为了物流公司能够快捷高效的处理快递邮件,提高物流信息化水平,提高运输效率,同时增加企业管理者对公司运营情况的了解,和方便用户查询快递信息。
数据库设计作品题目物流数据库管理系统1.2任务目标维护(录入、更新和删除)企业员工的数据维护(录入、更新和删除)客户的数据维护(录入、更新和删除)收件人的数据维护(录入、更新和删除)运单的数据维护(录入、更新和删除)快递线路的数据维护(录入、更新和删除)仓库的数据维护(录入、更新和删除)客户评价信息数据实现对货物物流信息的查询实现对快递员的查询实现对运单状态的查询实现对仓库的查询实现对收货人的查询实现对客户的查询跟踪物流信息跟踪运单状态信息报告公司运营情况报告公司员工情况报告客户情况报告仓库情况报告运单的情况1.3 定义系统边界1.4 主要用户视图经理:维护(录入、更新、和删除)公司的数据维护(录入、更新、和删除)员工的数据维护(录入、更新、和删除)用户的数据维护(录入、更新、和删除)仓库的数据实现对仓库的情况实现对所有员工的检索报告所有公司运营的情况报告所有客户的情况主管:维护(录入、更新、和删除)配送的数据维护(录入、更新、和删除)转运的数据维护(录入、更新、和删除)运单的数据维护(录入、更新、和删除)客户的数据实现对仓库检索实现对员工的检索报告仓库的情况报告所在分公司货单的情况派送员:查看运单信息查看配送信息查看配送信息查看收货人信息客户:查看快递配送信息维护(录入、更新、和删除)评价信息2. 需求分析2.1 用户需求说明(重点论述)快递物流公司职员分为经理、主管、派送员,经理拥有最高权限,可以对任意数据进行添加修改删除,主管可以增加运单信息和更改物流信息,查询客户资料,查看仓库情况,派送员只能查询客户资料,客户可以根据运单编号,查询运单详情.客户在提交货物时,要求填写基本信息,包括客户名称、客户电话、收货地址、等信息,并且由系统在注册用户注册完后自动为其生成一个客户编号,并且嵌入到客户注册信息内,形成完整的客户资料,同时,客户还将填写收件人信息,生成收货人信息表。
//选择一种高级语言实现下列语句的功能。
//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)用户登录界面运行超市管理信息系统后,首先进入用户登录界面,用户输入用户名和密码后,系统进行验证,验证通过进入程序的主界面。
在进行系统登录过程中,登录模块将调用数据库里的用户信息表,并对用户名和密码进行验证,只有输入了正确的账号和密码后,系统登录才会成功。
在登录模块中,对系统的尝试登录次数进行了限制,禁止用户无终止的进行系统登录尝试,在本系统中,当用户对系统的三次登录失败后,系统将自动机制登录,突出登录模块。
并在输入了错误的或者是不存在的账户和密码时,系统会给出出错信息提示,指明登录过程中的错误输入或者错误操作,以便用户进行正确的登录。
登录界面如图5-2所示。
图5-2登录界面主要实现代码如下://登录private void radBtnOk_Click (object sender. EventArgs e){ _try{if ( radTxtBoxUser. Text. Trim()==""){this . radLblnfo . Text ="请输入您的用户名!";}else if ( radTxtBoxPsw. Text. Trim()=="”){this . radLbInfo . Text ="请输入您的密码!";}else{commandUnit com= new commandUni();stri ng str = @"select * from Userl nfo where log inNo ='"+ radTxtBoxUser. Text. ToString () + "”';DataTable table = com GetDataSet(str );if ( table . RowsCount <= 0){this . radLbInfo . Text ="用户名不存在!"; radTxtBoxUser.Text ="";radTxtBoxPsw. Text ="";return ;}str = @"select * from Userl nfo where loginNo ='" radTxtBoxUser. Text. ToString () + "' and password = '" +radTxtBoxPsw. Text. ToString () + "”';DataTable tableUser = com GetDataSet(str );if ( tableUser . Rows Count > 0){_currentUser = radTxtBoxUser. Text;_currentPsw = radTxtBoxPsw. Text;IsLogin = true ;this . Close ();}else{this . radLbInfo . Text ="密码错误!"; radTxtBoxPsw. Text="";}}}catch ( System. Exception ex){throw ex;}}(2)主界面系统登录成功后,进入主界面菜单。
通信录项目开发文档目录1需求分析 (2)1.1应用需求........................................................................................... 错误!未定义书签。
1.1.1用户需求分析........................................................................ 错误!未定义书签。
1.1.2系统存储需求........................................................................ 错误!未定义书签。
1.2功能描述........................................................................................... 错误!未定义书签。
1.3数据流图和数据字典....................................................................... 错误!未定义书签。
1.3.1数据流图 (2)1.3.2数据字典................................................................................ 错误!未定义书签。
2.概念结构设计.............................................................................................. 错误!未定义书签。
2.1局部E-R图 (4)2.2全局E-R图 (5)2.3关系图 (5)3.逻辑结构设计.............................................................................................. 错误!未定义书签。
数据库课程设计源代码一、课程目标知识目标:1. 理解数据库的基本概念,掌握数据库设计的基本原理。
2. 学习并运用数据库设计源代码的编写方法,能够独立完成小型项目的数据库设计。
3. 掌握数据库表、字段、索引、关系等基本元素的创建和使用。
技能目标:1. 培养学生运用数据库设计工具进行数据库设计的能力。
2. 培养学生编写结构化查询语言(SQL)进行数据操作的能力。
3. 提高学生分析问题、解决问题的能力,使其能够根据实际需求设计合适的数据库结构。
情感态度价值观目标:1. 激发学生对数据库技术的兴趣,培养其主动学习的积极性。
2. 培养学生的团队协作意识,使其在项目实践中学会与他人合作、沟通。
3. 培养学生的创新意识,鼓励其在数据库设计过程中尝试新思路和方法。
课程性质:本课程为实践性较强的课程,旨在培养学生的数据库设计能力,提高其在实际项目中的应用水平。
学生特点:学生具备一定的编程基础,对数据库有一定的了解,但缺乏实际设计经验。
教学要求:1. 结合课本知识,注重理论与实践相结合,使学生能够在实践中掌握数据库设计方法。
2. 强化编程实践,让学生通过编写源代码,巩固所学知识,提高动手能力。
3. 鼓励学生参与项目实践,培养其独立分析和解决问题的能力。
二、教学内容1. 数据库基本概念:数据库的定义、作用、分类。
2. 数据库设计原理:实体关系模型、关系数据库设计、范式理论。
3. 数据库设计工具:使用ER图、DFD图等工具进行数据库设计。
4. SQL语言:数据定义、数据操纵、数据查询、数据控制。
5. 数据库表、字段、索引、关系的创建和使用。
6. 数据库设计实例:结合实际项目,进行数据库设计案例分析。
7. 实践项目:设计并实现一个简易的数据库项目,包括以下环节:a. 需求分析b. 概念结构设计c. 逻辑结构设计d. 物理结构设计e. 数据库实施f. 数据库维护教学内容安排和进度:1. 第1周:数据库基本概念、设计原理。
2. 第2周:数据库设计工具、SQL语言基础。
系统建设详细设计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%>条学生信息 <%=rs、pagesize%>条/页 共<%=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> ”elseResponse、Writ e “<b>” & I & “</b> ”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%>。
数据库设计以及源代码系统建设详细设计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%>。
数据库原理课程设计报告(附代码)课程设计报告( 2014--2015年度第2学期)名称:数据库原理课程设计题目:超市管理系统院系:计算机系班级:软件1201学号:学生姓名:指导教师:阎蕾,王晓辉设计周数:一成绩:日期:2015年 7月 17日《数据库原理课程设计》课程设计任务书一、目的与要求1.本实验是为软件工程、网络工程、信息安全等专业的学生在学习数据库原理后,为培养更好的解决问题和实际动手能力而设置的实践环节。
通过这个环节,使学生具备应用数据库原理对数据库系统进行设计的能力。
为后继课程和毕业设计打下良好基础。
2.通过该实验,培养学生在建立数据库系统过程中使用关系数据理论的能力。
3.通过对一个数据库系统的设计,培养学生对数据库需求分析、数据库方案设计、系统编码、界面设计和软件调试等各方面的能力。
是一门考查学生数据库原理、面向对象设计方法、软件工程和信息系统分析与设计等课程的综合实验。
二、主要内容针对一个具有实际应用场景的中小型系统(见题目附录)进行数据库设计,重点分析系统涉及的实体、实体之间的联系,实现增加、删除、更新、查询数据记录等基本操作。
大致分为如下步骤:1. 理解系统的数据库需求,分析实体及实体间联系,画出E-R图:1.分析确定实体的属性和码,完成对该实体的实体完整性、用户自定义完整性的定义。
2.设计实体之间的联系,包括联系类型和联系的属性。
最后画出完整的E-R 图。
2.根据设计好的E-R图及关系数据库理论知识设计数据库模式:1)把E-R图转换为逻辑模式;2)规范化设计。
使用关系范式理论证明所设计的关系至少属于3NF并写出证明过程;如果不属于3NF则进行模式分解,直到该关系满足3NF为止,要求写出分解过程。
3)设计关系模式间的参照完整性,要求实现级联删除和级联更新。
4)用SQL语言完成数据库内模式的设计。
3.数据库权限的设计:1)根据系统分析,完成授权操作;2)了解学习收回权限的操作。
Data.h//此类储存了许多用户输入的参数,放入物质类以供查阅#ifndef DATA#define DATAusing namespace std;#include"Matrix.h"class Data{public:Data(); //同样是无参构造函数Data(double dt,int t,double dx,double f,double A); //同样是有参构造double getdt(); //获得各种奇葩数据dtint gett(); //tdouble getdx(); //dxdouble getf(); //fdouble getA(); //Aprivate:double P_dt; //叠代时间精度int P_t; //叠代次数double P_dx; //空间精度double P_f; //波源频率double P_A; //波源振幅};//很esay的一个类,不说了Data::Data(){P_dt=0.1;P_t=100;P_dx=0.5;P_f=100;P_A=1;}Data::Data(double dt,int t,double dx,double f,double A){P_dt=dt;P_t=t;P_dx=dx;P_f=f;P_A=A;}double Data::getdt(){return P_dt;}int Data::gett(){return P_t;}double Data::getdx(){return P_dx;}double Data::getf(){return P_f;}double Data::getA(){return P_A;}//声明坐标类class Coordinate{public:Coordinate(); //无参构造函数Coordinate(int x,int y,int o); //有参构造函数int getx(); //获取x坐标int gety(); //获取y坐标int getorder(); //获取顺序private:int C_x; //x坐标int C_y; //y坐标int C_order; //顺序,为了区分一些点的先后关系};Coordinate::Coordinate(int x,int y, int o){C_x=x;C_y=y;C_order=o;}Coordinate::Coordinate(){C_x=0;C_y=0;C_order=0;}int Coordinate::getx(){return C_x;}int Coordinate::gety(){return C_y;}int Coordinate::getorder(){return C_order;}#endifMatrix.h//这只是一个普通的矩阵类#ifndef MATRIX#define MATRIXusing namespace std;#include<iostream>template <class T>class Matrix{public:Matrix(int rsz=1,int csz=1); //构造函数,创建矩阵Matrix(const Matrix<T>& M ); //拷贝构造函数~Matrix(); //析构函数,删除矩阵T& operator()(int i,int j)const; //重载下标运算符Matrix<T>& operator=(const Matrix<T>& M); //重载矩阵赋值运算符Matrix<T>& operator=(const T X); //重载常数赋值运算int Rows(); //取矩阵的行数int Columns(); //取矩阵的列数void OutPut(ostream& out)const; // 将矩阵放到输出流out中输出private:int rsize,csize; //矩阵行数和列数T *element; //矩阵的存放空间};//实现构造函数template <class T>Matrix<T>::Matrix(int rsz,int csz){rsize=rsz;csize=csz;element=new T[rsize*csize];}//实现拷贝构造函数template <class T>Matrix<T>::Matrix(const Matrix<T>& M){rsize=M.rsize;csize=M.csize;element = new T[rsize*csize];for(int i=0;i<rsize*csize;i++)element[i]=M.element[i];}//实现析构函数template <class T>Matrix<T>::~Matrix(){delete []element;}//实现下标运算符,方便矩阵元素的赋值和取值template <class T>T& Matrix<T>::operator()(int i,int j)const{return element[(i-1)*csize+j-1];}//实现重载赋值运算符template <class T>Matrix<T>& Matrix<T>::operator=(const Matrix<T>& M){if (this!=&M) //如果不是自己给自己赋值{delete []element;rsize=M.rsize;csize=M.csize;element=new T[rsize*csize];for (int i=0;i<rsize*csize;i++)element[i]=M.element[i];}return *this;}//实现重载运算=常数template<class T>Matrix<T>& Matrix<T>::operator=(const T X){for(int i=0;i<rsize*csize;i++){element[i]=X;}return *this;}//实现取矩阵行数template <class T>int Matrix<T>::Rows(){return rsize;}//实现取矩阵列数template <class T>int Matrix<T>::Columns(){return csize;}//实现一维数组的输出template<class T>void Matrix<T>:: OutPut(ostream& out) const{for(int i=0;i<rsize;i++){for(int j=0;j<csize;j++)out<<element[i*csize+j]<<' ';out<<endl;}}//重载插入运算符<<template<class T>ostream& operator<<(ostream& out,const Matrix<T>& x){x.OutPut(out);return out;}#endifMatter.h//此文件储存了一个重要的类,物质类,储存所有已知信息#ifndef MATTER#define MATTER#include"data.h"#include<iostream>#include<cmath>class Matter{public:Matter(); //缺省构造函数Matter(int n,int m); //有参构造函数Matter(Matter&); //拷贝构造函数void operation(int t); //叠代操作,传入一叠代次数tMatrix<double> getM_potential(); //获取势能矩阵Matrix<double> getM_k(); //获取波速矩阵Matrix<double> getM_source(); //获得波源矩阵Data getM_P(); //获取用户输入基本参数void changeM_P(Data P); //改变用户输入基本参数void changeM_k(Matrix<double>&k); //改变波速矩阵void changeM_source(Matrix<double>&reflex); //改变波源矩阵int getM_n(); //获得总长度int getM_m(); //获得总宽度private:Matrix<double> M_potential; //势能矩阵Matrix<double> M_k; //波速矩阵Matrix<double> M_source; //波源矩阵int M_n; //有限元矩阵长度int M_m; //有限元矩阵宽度Data M_P; //用户输入基本参数};//无参构造Matter::Matter(){M_potential=Matrix<double>();M_k=Matrix<double>();M_source=Matrix<double>();int M_n=1;int M_m=1;M_potential=0;M_source=0;M_k=1200;M_source(M_n/2,M_m/2)=1;}//有参构造Matter::Matter(int n,int m){M_potential=Matrix<double>(n,m);M_k=Matrix<double>(n,m);M_source=Matrix<double>(n,m);M_n=n;M_m=m;M_potential=0;M_source=0;M_k=1200;M_source(M_n/2,M_m/2)=1;}//拷贝构造Matter::Matter(Matter &m){M_potential=m.getM_potential();M_k=m.getM_k();M_P=m.getM_P();M_n=m.getM_n();M_m=m.getM_m();M_source=m.getM_source();}//叠代函数void Matter::operation(int t){//波源计算,根据传过来的参数一叠代次数,确定波源(受迫点)的势能情况。
学生学籍管理信息系统数据库原理实验十二作者:石辉(20091602310073)张露(20091602310084)李丽芬(20091602310068)学生学籍管理信息系统目录1.概述 (1)1.1 项目背景 (1)1.2 编写目的 (1)1.3 软件定义 (1)1.4 开发环境 (1)2.需求分析 (2)2.1 问题陈述 (2)2.2 系统主要功能 (2)3. 数据库概念结构设计 (3)3.1 系统E-R图 (3)4.数据库逻辑结构设计 (10)4.1 关系表 (10)4.2 定义视图 (21)4.3 定义索引 (24)4.4 定义权限 (24)4.5 定义触发器 (25)4.6 定义存储过程 (26)5. 数据流图及程序结构框图 (28)6. 程序原代码及其说明 (30)总结 (44)参考文献 (44)II学生学籍管理信息系统1.概述1.1 项目背景随着我国教育体制改革的深入进行,教育系统得到了前所未有的发展。
学生管理正在逐步迈向管理信息现代化。
但是我国的学生管理信息化水平还处在初级阶段,主要表现在对学生的学籍信息管理还是采用原有的人工管理方式。
学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长。
由于大学生类别和专业的设置的多样化,大学生的学籍管理历来是非常繁琐和复杂的的工作。
面对庞大的信息量, 这时的人工管理几乎无法实现,在这种情况下用数据库进行管理变的尤为必要,这可以发挥计算机的优势来提高学生管理工作的效率。
通过这样的系统,可以做到信息的规范管理,科学统计和快速的查询,从而减少管理方面的工作量和人为错误。
1.2 编写目的学生学籍管理系统是应对学生人数增多、信息量增大的问题,实现管理的现代化、化,逐步摆脱当前学生成绩管理的人工管理方式,提高成绩管理效率而开发的。
望该开发程序能够解决学生信息存储、学生各种信息查询等一系列功能。
1.3 软件定义学生信息管理系统是针对学校人事处的大量业务处理工作而开发的管理软件,主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改、增加、删除,另外还考虑到学生选课,针对这些要求设计了学生信息管理系统。
数据库课程设计与实现源码一、引言数据库是现代软件系统中非常重要的组成部分之一,它可以存储和管理大量的数据,并提供高效的数据访问和操作。
在数据库课程中,学生往往需要进行一个数据库设计与实现的项目,以锻炼自己的数据库设计和编程能力。
本文将介绍一个数据库课程设计与实现的源码示例,旨在帮助读者理解数据库的基本概念和实践技巧。
二、项目概述本项目是一个简单的学生管理系统,用于管理学生的基本信息和成绩数据。
系统包括两个主要的数据表:学生表和成绩表。
学生表包含学生的学号、姓名、性别等基本信息,成绩表包含学生的学号、科目、成绩等数据。
三、数据库设计1. 学生表设计学生表包括以下字段:学号、姓名、性别、年龄、班级。
其中,学号是主键,用于唯一标识每个学生的记录。
CREATE TABLE student (stu_id INT PRIMARY KEY,stu_name VARCHAR(20),stu_gender VARCHAR(2),stu_age INT,stu_class VARCHAR(10));2. 成绩表设计成绩表包括以下字段:学号、科目、成绩。
学号和科目共同构成复合主键,用于唯一标识每个学生在每个科目上的成绩。
CREATE TABLE score (stu_id INT,subject VARCHAR(20),score INT,PRIMARY KEY (stu_id, subject),FOREIGN KEY (stu_id) REFERENCES student(stu_id));四、数据库实现1. 数据库连接在实现中,首先需要建立与数据库的连接。
这里使用Python的MySQL Connector库来连接MySQL数据库。
import mysql.connector# 建立数据库连接conn = mysql.connector.connect(host="localhost",user="root",password="password",database="student_management")2. 数据库操作在连接建立后,可以执行各种数据库操作,包括插入、查询、更新和删除等。
数据库原理与设计大作业源代码(1) 用户登录界面运行超市管理信息系统后,首先进入用户登录界面,用户输入用户名和密码后,系统进行验证,验证通过进入程序的主界面。
在进行系统登录过程中,登录模块将调用数据库里的用户信息表,并对用户名和密码进行验证,只有输入了正确的账号和密码后,系统登录才会成功。
在登录模块中,对系统的尝试登录次数进行了限制,禁止用户无终止的进行系统登录尝试,在本系统中,当用户对系统的三次登录失败后,系统将自动机制登录,突出登录模块。
并在输入了错误的或者是不存在的账户和密码时,系统会给出出错信息提示,指明登录过程中的错误输入或者错误操作,以便用户进行正确的登录。
登录界面如图5-2所示。
图5-2 登录界面主要实现代码如下://登录private void radBtnOk_Click(object sender, EventArgs e){try{if (radTxtBoxUser.Text.Trim() == ""){this.radLbInfo.Text = "请输入您的用户名!";}else if (radTxtBoxPsw.Text.Trim() == ""){this.radLbInfo.Text = "请输入您的密码!";}else{commandUnit com = new commandUnit();string str = @"select * from UserInfo where loginNo = '" + radTxtBoxUser.Text.ToString() + "'";DataTable table = com.GetDataSet(str);if (table.Rows.Count <= 0){this.radLbInfo.Text = "用户名不存在!";radTxtBoxUser.Text = "";radTxtBoxPsw.Text = "";return;}str = @"select * from UserInfo where loginNo = '" + radTxtBoxUser.Text.ToString() + "' and passWord = '" + radTxtBoxPsw.Text.ToString() + "'";DataTable tableUser = com.GetDataSet(str);if (tableUser.Rows.Count > 0){_currentUser = radTxtBoxUser.Text;_currentPsw = radTxtBoxPsw.Text;IsLogin = true;this.Close();}else{this.radLbInfo.Text = "密码错误!";radTxtBoxPsw.Text = "";}}}catch (System.Exception ex){throw ex;}}(2) 主界面系统登录成功后,进入主界面菜单。
主界面如图5-3所示。
图5-3 主界面(3) 修改密码界面成功登录系统后,单击“用户信息管理”菜单的“修改密码”,可以进入“修改密码”界面,进行密码的修改。
修改密码界面如图5-4所示。
图5-4 修改密码界面主要实现代码如下://修改密码protected virtual void radBtnOk_Click(object sender, EventArgs e){if (radTxtBoxOldPsw.Text == null ||radTxtBoxOldPsw.Text.Trim() == ""){MessageBox.Show("请输入旧密码!。
", "提醒", MessageBoxButtons.OK, rmation);return;}if (radTxtBoxNewPsw.Text == null ||radTxtBoxNewPsw.Text.Trim() == ""|| radTxtBoxEnterPsw.Text == null || radTxtBoxEnterPsw.Text.Trim() == ""){MessageBox.Show("请输入新密码!。
", "提醒", MessageBoxButtons.OK, rmation);return;}string currPwd = RFrmLogin.CurrentPsw;if (currPwd == radTxtBoxOldPsw.Text.Trim()){if (isSame()){commandUnit com = new commandUnit();string str = @"update UserInfo set passWord = '" +radTxtBoxEnterPsw.Text.ToString() + "' where loginNo = '" + RFrmLogin.CurrentUser + "'";if (com.ExecuteCommand(str) > 0){MessageBox.Show("密码修改成功!。
", "提醒", MessageBoxButtons.OK, rmation);}else{MessageBox.Show("密码修改失败,请联系管理员!。
", "提醒", MessageBoxButtons.OK, rmation);}}else{MessageBox.Show("两次密码输入不一致!", "提醒", MessageBoxButtons.OK, rmation);}}else{MessageBox.Show("输入密码错误!", "提醒", MessageBoxButtons.OK, rmation);}}(4) 修改密码界面管理员成功登录系统后,单击“用户信息管理”菜单的“修改权限”,可以进入“修改权限”界面,进行员工权限的修改。
修改权限界面如图5-5所示。
图5-5 修改权限界面主要实现代码如下://修改权限protected override void radBtnOk_Click(object sender, EventArgs e) {if (radTxtBoxOldPsw.Text == null || radTxtBoxOldPsw.Text.Trim() == ""){MessageBox.Show("请输入用户名!。
", "提醒", MessageBoxButtons.OK, rmation);return;}if (radComBoxPower.Text == null || radComBoxPower.Text.Trim() == ""){MessageBox.Show("请为用户设置权限!。
", "提醒", MessageBoxButtons.OK, rmation);return;}commandUnit com = new commandUnit();string str = @"update UserInfo set power = '" + radComBoxPower.SelectedValue.ToString() + "' where loginNo = '" + radTxtBoxOldPsw.Text.ToString() + "'";if (com.ExecuteCommand(str) > 0){MessageBox.Show("权限修改成功!。
", "提醒", MessageBoxButtons.OK, rmation);}else{MessageBox.Show("权限修改失败,请联系管理员!。
", "提醒", MessageBoxButtons.OK, rmation);}}(5) 编辑员工信息界面管理员成功登录系统后,单击“基本信息管理”菜单的“员工信息”,可以进入“查看员工信息”界面和“编辑员工信息”界面,“查看员工信息”界面只能查看员工信息,“编辑员工信息”界面进行员工信息的修改、添加、删除等功能。
编辑员工信息界面如图5-6所示。
图5-6 编辑员工信息界面主要实现代码如下://保存protected virtual void tSBtnSave_Click(object sender, EventArgs e){try{if (IsVilude()){bool isSuccess = false;commandUnit com = new commandUnit();EmployeeModel emp;for (int j = 0; j < radWithGV.RowCount; j++){emp = new EmployeeModel();#region同步数据if (radWithGV.Rows[j].Tag != null){emp = radWithGV.Rows[j].Tag as EmployeeModel;}else{emp.EmployeeNo =radWithGV.Rows[j].Cells["employeeNo"].Value.ToString(); =radWithGV.Rows[j].Cells["name"].Value.ToString();emp.Sex =radWithGV.Rows[j].Cells["sex"].Value.ToString();emp.IdCard =radWithGV.Rows[j].Cells["idCard"].Value.ToString();emp.Duty =radWithGV.Rows[j].Cells["duty"].Value.ToString();emp.Note =radWithGV.Rows[j].Cells["note"].Value.ToString();emp.IsNew = true;}#endregionif (emp.IsNew){string str = "select * from EmployeeInfo where employeeNo = '" + emp.EmployeeNo + "'";DataTable dtable = com.GetDataSet(str);if (dtable.Rows.Count <= 0){str = @"insert into EmployeeInfo values('" + emp.EmployeeNo + "','" + + "','" + emp.Sex + "','" + emp.IdCard + "','" + emp.Duty + "','" + emp.Note + "')";if (com.ExecuteCommand(str) > 0){_isSaved = true;isSuccess = true;emp.IsNew = false;radWithGV.Rows[j].Tag = emp;}}else{MessageBox.Show("该员工已存在,请审核信息!");}}else if (emp.IsModified){string strSql = @"update EmployeeInfo set name = '"+ + "',sex = '"+ emp.Sex+ "',idCard = '"+ emp.IdCard + "',duty = '"+ emp.Duty + "',note = '" + emp.Note + "' where employeeNo = '" + emp.EmployeeNo + "'";if (com.ExecuteCommand(strSql) > 0){_isSaved = true;isSuccess = true;emp.IsModified = false;radWithGV.Rows[j].Tag = emp;}}elsecontinue;}if (isSuccess){MessageBox.Show("保存成功!");}}else{MessageBox.Show("数据非法!");}}catch (System.Exception ex){throw ex;}}(6) 职务信息界面管理员成功登录系统后,单击“基本信息管理”菜单的“职务信息”,可以进入“职务信息”界面,“职务信息”界面进行职务信息的修改、添加、删除等功能。