数据库系统原理课程设计 -----图书借阅管理系统

数据库系统原理课程设计 -----图书借阅管理系统,第1张

#include <string.h>

#include <iostream.h>

class Book{ // 书籍基类

protected:

char Title[40]// 书名

long Code// 条码

int Type// 0表示书,1表示杂志

public:

Book()

Book(char *title,long code)

void SetCode(long code){ Code = code}

void SetTitle(char* tl){ strcpy(Title,tl)}

void SetType(bool type){Type = type}

int GetType(){ return Type}

long GetCode(){ return Code}

virtual void Show()// 显示书的信息

friend ostream&operator<<(ostream&, Book&)// 重载插入运算符

friend istream&operator>>(istream&is, Book&)// 重载提取运算符

Book *Next// 为创建每个读者所借书链表而定义指针

}

class Item :public Book{ //书的款目

// char Title[40]// 书名

char Author[20]// 著者名

char IndexCode[10]// 分类号

// long Code// 条码

public:

Item()

Item(char *author,char *title,char *index,int code)

Item(Item &)

void SetAuthor(char*)

void SetIndexCode(char*)

virtual void Show()// 显示书的信息

friend ostream&operator<<(ostream&os, Item&)// 重载插入运算符

friend istream&operator>>(istream&is, Item&)// 重载提取运算符

public:

}

class Magazine:public Book { //杂志类

int Volume

enum LANG {CHINESE=1,ENGLISH} Lang// 枚举变量,确定语言类别

public:

Magazine():Book(){Volume = 0Lang = CHINESEType = 1}

Magazine(char *title,int vol,LANG lang,int code)

Magazine(Magazine&)

void SetVolume(int vol){Volume = vol}

void SetLang(int lang){Lang = (LANG)lang}

virtual void Show()// 显示杂志的信息

friend ostream&operator<<(ostream&os, Magazine&)// 重载插入运算符

friend istream&operator>>(istream&is, Magazine&)// 重载提取运算符

}

class Reader{ // 读者信息类

char Name[20]// 姓名

char Position[20]// 职务

int Age// 年龄

long Code// 借书证号

Book* items// 所借书链表

public:

Reader()

Reader(char *name,char *posi,int age,int code)

// Reader(Reader&)

~Reader()

long GetCode(){return Code}

void SetName(char*)

void SetPosition(char*)

void SetAge(int)

void SetCode(long)

void AddBook(Item)// 添加所借书

void AddBook(Magazine)// 添加所借杂志

void DelBook(Book it)// 还书后减少所借书

void ShowBooks()// 显示所借书

void Show()// 显示读者信息

friend ostream&operator<<(ostream&os, Reader&)// 重载插入运算符

friend istream&operator>>(istream&is, Reader&)// 重载提取运算符

public:

int Counter//计数器,统计所借书数目

}

class Manager{ // 管理员类

char Name[20]// 姓名

int Age// 年龄

int Code// 工号

friend class Library// 将图书馆类声明为友元

public:

Manager(){}

Manager(char*,int,int)

long GetCode(){ return Code}

void Show()

friend ostream&operator<<(ostream&os, Manager&)// 重载插入运算符

friend istream&operator>>(istream&is, Manager&)// 重载提取运算符

}

class Loan { // 借阅信息类

int Type// 0表示书,1表示杂志

Item item// 借阅书

Magazine mag// 借阅杂志

Reader reader// 借阅者

Manager manager// 借书 *** 作员

int Code

friend class Library// 将图书馆类声明为友元

public:

Loan(){ }

Loan(Loan &l)

int GetCode(){ return Code}

void Show()

friend ostream&operator<<(ostream&os, Loan&)// 重载插入运算符

friend istream&operator>>(istream&is, Loan&)// 重载提取运算符

}

、、、、、、、、、、、、、、、、、、、、、、、

#include<iostream.h>

#include<string.h>

class Reader

template<typename T>class DblList

template<typename T>class DblNode{

public:

T Info//数据域

DblNode<T>*llink,*rlink//前驱(左链)、后继(右链)指针

public:

DblNode(T data)//一般结点

DblNode()//头结点

T GetInfo(){return Info}

friend class DblList<T>

friend class Library

}

template<typename T>class DblList{

DblNode<T>*head,*current

public:

DblList()

~DblList()

void Insert(const T&data)

DblNode<T>* Remove(DblNode<T>* p)

void Print()

int Length()//计算链表长度

DblNode<T>*Find(T data)//搜索数据与定值相同的结点

DblNode<T>* Find(int data)//按某个关键字查找

void MakeEmpty()//清空链表

void ShowList()//显示链表各结点

friend istream&operator>>(istream&, DblList<typename T>&)// 重载输入流运算符

friend ostream&operator<<(ostream&os, DblList<typename T>&dlist)// 重载输出流运算符

friend class Library

//其它 *** 作

}

template<typename T>DblNode<T>::DblNode(){

llink=rlink=NULL

}

template<typename T>DblNode<T>::DblNode(T data){

info=data

llink=NULL

rlink=NULL

}

template<typename T>DblList<T>::DblList(){//建立表头结点

head=new DblNode<T>()

head->rlink=head->llink=head

current=NULL

}

template<typename T>DblList<T>::~DblList(){

MakeEmpty()//清空链表

delete head

}

template<typename T>void DblList<T>::MakeEmpty(){

DblNode<T>*tempP

while(head->rlink!=head){

tempP=head->rlink

head->rlink=tempP->rlink//把头结点后的第一个节点从链中脱离

tempP->rlink->llink=head//处理左指针

delete tempP//删除(释放)脱离下来的结点

}

current=NULL//current指针恢复

}

template<typename T>void DblList<T>::Insert(const T &data){//新节点在链尾

current=new DblNode<T>

current->Info=data

current->rlink=head//注意次序

current->llink=head->llink

head->llink->rlink=current

head->llink=current//最后做

}

template<typename T>DblNode<T>* DblList<T>::Remove(DblNode<T>* p){ // 删除结点

current=head->rlink

while(current!=head&¤t!=p) current=current->rlink

if(current==head) current=NULL

else{//结点摘下

p->llink->rlink=p->rlink

p->rlink->llink=p->llink

p->rlink=p->llink=NULL

}

return current

}

template<typename T>DblNode<T>* DblList<T>::Find(T data){ // 按结点查找

current=head->rlink

while(current!=head&¤t->Info!=data) current=current->rlink

if(current==head) current=NULL

return current

}

template<typename T>DblNode<T>* DblList<T>::Find(int data){ // 按数据值查找结点

current=head->rlink

int temp =current->Info.GetCode()

while(current!=head&&temp!=data){

current=current->rlink

temp = current->Info.GetCode()

}

if(current==head) current=NULL

return current

}

template<typename T>void DblList<T>::Print(){ // 输出链表

current=head->rlink

while(current!=head){

cout<<current->Info<<'\t'

current=current->rlink

}

cout<<endl

}

template<typename T>int DblList<T>::Length(){ // 取得链表长度

int count=0

current=head->rlink

while(current!=head){

count++

current=current->rlink

}

return count

}

template<typename T>void DblList<T>::ShowList(){ // 输出链表各结点

int count=0

current=head->rlink

while(current!=head){

current->GetInfo().Show()

current=current->rlink

}

return

}

template<typename T>

istream&operator>>(istream&is, DblList<typename T>&dlist){

int len

T tt// 定义局部变量读入一个结点

is>>len

for(int i= 0 i<leni++){ // 循环读入链表各结点

is>>tt

dlist.Insert(tt)

}

return is

}

template<typename T>

ostream&operator<<(ostream&os, DblList<typename T>&dlist){

DblNode<T>*tempP

int len = dlist.Length()

os<<len<<' '

tempP=dlist.head->rlink

while(tempP!=dlist.head){ // 循环输出链表各结点

os<<tempP->Info

tempP = tempP->rlink

}

return os

}

#include "class.h"

#include "dblist.h"

#include <fstream.h>

class Library{ // 封装图书馆流通业务的类

DblList<Item>item// 在馆图书链表

DblList<Magazine>mag// 在馆杂志链表

DblList<Reader>reader// 读者链表

DblList<Loan>loan// 借阅信息链表

DblList<Manager>manager// 管理员信息链表

int itemNum// 记录在馆图书数目

int magNum// 记录在馆杂志数目

int readerNum// 记录读者数目

int loanNum// 记录借阅信息数目

int managerNum// 记录管理员数目

ofstream itemFileOut// 文件流对象,保存图书馆书籍数据

ifstream itemFileIn// 文件流对象,读入图书馆书籍数据

ofstream magFileOut// 文件流对象,保存图书馆杂志数据

ifstream magFileIn// 文件流对象,读入图书馆杂志数据

ofstream readerFileOut// 文件流对象,保存图书馆读者数据

ifstream readerFileIn// 文件流对象,读入图书馆读者数据

ofstream loanFileOut// 文件流对象,保存图书馆借阅信息数据

ifstream loanFileIn// 文件流对象,读入图书馆借阅信息

ofstream managerFileOut// 文件流对象,保存图书馆管理员数据

ifstream managerFileIn// 文件流对象,读入图书馆管理员数据

public:

Library()// 构造函数

~Library()//析构函数

void Run()// 图书馆类的运行函数

void CreateBibliotheca()// 创建书目

void CreateReader()// 创建读者库

void CreateManager()// 创建管理员信息

int ShowMainMenu()// 显示主菜单函数

void Borrow()// 借书 *** 作

void Return()// 还书 *** 作

void Require()// 查询 *** 作

void SaveInfo()// 保存图书馆信息

void OpenInfo()// 读入图书馆信息

}

本课程主要介绍数据结构原理,内容有:1. 绪论;2. 三种主要数据模型;3. 关系数据库标准语言、关系系统及其查询优化;4. 关系数据理论;5. 数据库设计;6. 数据库维护;7. 数据库管理系统;8. 分布式数据库系统;9. 计算机网络的安全等。

数据库课程设计是在学生系统的学习了数据库原理课程后,按照关系型数据库的基本原理,综合运用所学的知识,以小组为单位,设计开发一个小型的数据库管理系统。通过对一个实际问题的分析、设计与实现,将原理与应用相结合,使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手能力;另一方面,使学生能深入理解和灵活掌握教学内容。

总体设计要求:

四到五人为一个小组,小组成员既要有相互合作的精神,又要分工明确。每个学生都必须充分了解整个设计的全过程。

从开始的系统需求分析到最后的软件测试,都要有详细的计划,设计文档应按照软件工程的要求书写。

系统中的数据表设计应合理、高效,尽量减少数据冗余。

软件界面要友好、安全性高。

软件要易于维护、方便升级。

编程语言可由小组根据自己的情况选择,但一般情况下应该是小组的每个成员都对该语言较熟悉。避免把学习语言的时间放在设计期间。

参考使用的语言有:VF、VB、Delphi 、PB、VC、SQL_Server等。

学生学籍管理系统

一、设计目的

学生根据所学的数据库原理与程序设计的知识,能够针对一个小型的数据库管理系统,进行系统的需求分析,系统设计,数据库设计,编码,测试等,完成题目要求的功能,从而达到掌握开发一个小型数据库的目的。

二、设计内容

1.主要的数据表

学生基本情况数据表,学生成绩数据表,课程表,代码表等。

2.主要功能模块

1)实现学生基本情况的录入、修改、删除等基本 *** 作。

2)对学生基本信息提供灵活的查询方式。

3)完成一个班级的学期选课功能。

4)实现学生成绩的录入、修改、删除等基本 *** 作。

5)能方便的对学生的个学期成绩进行查询。

6)具有成绩统计、排名等功能。

7)具有留级、休学等特殊情况的处理功能。

8)能输出常用的各种报表。

9)具有数据备份和数据恢复功能。

三、设计要求

学生成绩表的设计,要考虑到不同年级的教学计划的变化情况。

对于新生班级,应该首先进行基本情况录入、选课、然后才能进行成绩录入。

图书管理系统

一、设计目的

学生根据所学的数据库原理与程序设计的知识,能够针对一个小型的数据库管理系统,进行系统的需求分析,系统设计,数据库设计,编码,测试等,完成题目要求的功能,从而达到掌握开发一个小型数据库的目的。

二、设计内容

1.要的数据表

图书基本信息表,借书卡信息表,借阅信息表,图书分类信息表,代码表等。

2.功能模块

1)图书基本情况的录入、修改、删除等基本 *** 作。

2)办理借书卡模块。

3)实现借书功能。

4)实现还书功能。

5)能方便的对图书进行查询。

6)对超期的情况能自动给出提示信息。

7)具有数据备份和数据恢复功能。

三、设计要求

图书编号可参考国家统一的图书编码方法,再完成基本功能模块的情况下,尽量使系统能具有通用性。

银行储蓄系统

一、设计目的

学生根据所学的数据库原理与程序设计的知识,能够针对一个小型的数据库管理系统,进行系统的需求分析,系统设计,数据库设计,编码,测试等,完成题目要求的功能,从而达到掌握开发一个小型数据库的目的。

二、设计内容

1.主要的数据表

定期存款单,活期存款帐,存款类别代码表等。

2.功能模块

1)实现储户开户登记。

2)办理定期存款帐。

3)办理定期取款手续。

4)办理活期存款帐

5)办理活期取款手续。

6)实现利息计算。

7)输出明细表。

8)具有数据备份和数据恢复功能。

三、设计要求

要进行实际调研,系统功能在实现时参照实际的储蓄系统的功能。同时要考虑银行系统数据的安全与保密工作。数据要有加密功能。

设备管理系统

一、设计目的

学生根据所学的数据库原理与程序设计的知识,能够针对一个小型的数据库管理系统,进行系统的需求分析,系统设计,数据库设计,编码,测试等,完成题目要求的功能,从而达到掌握开发一个小型数据库的目的。

二、设计内容

1.主要数据表

设备明细帐表,设备使用单位代码表,国家标准设备分类表等。

2.功能模块

1)实现设备的录入、删除、修改等基本 *** 作。

2)实现国家标准设备代码的维护。

3)能够对设备进行方便的检索。

4)实现设备折旧计算。

5)能够输出设备分类明细表。

6)具有数据备份和数据恢复功能。

三、设计要求

具体设备编码参考国家统一编码方法,功能实现也要考虑通用性。

医院药品进销存系统

数据库原理及应用课程设计

一、课程设计的目的

《数据库原理及应用》课程设计是计算机科学与技术专业集中实践性环节之一,是学习完《数据库原理及应用》课程后进行的一次全面的综合练习。本课程设计主要在于加深学生对数据库基础理论和基本知识的理解,掌握数据库应用系统设计开发的基本方法,达到进一步使学生综合运用所学知识和增强实际动手能力的目的。

二、课程设计的任务与要求

要求学生根据自身对题目的理解情况,从给定的设计题目中选择一个,以MS SQL Server作为后台数据库平台,以PowerBuilder作为前台开发工具,完成一个小型数据库应用系统的系统的分析、设计和开发。

三、课程设计说明书

仓储管理系统

对于一个以生产或经营产品为主要业务的单位来说,仓库管理系统至关重要。高效方便的仓库管理系统,可以为生产经营提供坚强的后盾和有力的支持。效率低下甚至是混乱不堪的仓库管理系统,无疑会成为企业健康发展的拖累甚至是枷锁。使企业发展动力不足。本次数据库设计实现了仓库管理的高效化、电子化。通过本系统可以方便地实现仓库管理中的货物登记、出库入库等 *** 作,使仓库管理井井有条。

1系统需求分析

1.1系统功能需求分析

仓库管理系统主要实现对库存商品的管理,对商品出库、入库的管理,和对仓库管理系统维护的功能。具体要实现的功能包括:

1)库存商品管理

查看数据库中商品的名称、编号、单价等信息。

2)商品出库、入库管理

入库、出库单纪录本次入库、出库的货物名称、数量,入库、出库的时间、商品单价以及总价,入库、出库的经手人等。

3)商品的查询

输入商品的编号或者商品的名称查询信息

4)用户管理

用户可以修改登录密码

1. 2数据需求分析

1.员工(ID ,姓名,密码,权限)

2.商品(商品名,商品编号,所属类,单价)

3.出货表(商品名,商品编号,数量,总价,经手人)

4.入货表(商品名,商品编号,数量,总价,经手人)

5.查询(商品名,商品编号,数量,单价)

根据上面的关系我们需要的数据基本上就上面所列出的数据。

2 系统总体设计

1)库存商品管理

查看数据库中商品的名称、编号、单价等信息。

2)商品出库、入库管理

入库、出库单纪录本次入库、出库的货物名称、数量,入库、出库的时间、商品单价以及总价,入库、出库的经手人等。

3)商品的查询

输入商品的编号或者商品的名称查询信息

4)用户管理

用户可以修改登录密码

2.1系统总体结构设计

2.2.1 E-R图

2.2.2 关系模式

1.员工(ID ,姓名,密码,权限)

2.商品(商品名,商品编号,所属类,单价)

3.出货表(商品名,商品编号,数量,总价,经手人)

4.入货表(商品名,商品编号,数量,总价,经手人)

5.查询(商品名,商品编号,数量,单价)

2.2.3 数据表

“员工信息表”“商品信息表”“出货单”“进货单”的主键分别是:ID、商品编号、商品编号、商品编号。

员工信息表

商品信息表

出货单

进货单

3.系统实施

工作界面PB9.0,以下是我制作过程和运行中的一些截图:

首先建立PB与SQL的数据链接:如果链接不成功,返回对以话框“数据库连接错误,经检查后再试!”

然后点Preview选项会d出如下窗口:

一、 工作界面截图:

分别建有:workspace、application、windows、dw_、da_等。

工作时检测连接数据库是否正常的程序代码:

// Profile q

SQLCA.DBMS = "ODBC"

SQLCA.AutoCommit = False

SQLCA.DBParm = "ConnectString='DSN=仓库UID=PWD='"

connect

open(w_enter)

二、 运行结果的截图:

这个是我运行后的第一个用户界面,在界面中输入管理员ID和密码。我的管理员ID 和密码分别为 1,123.点击确定进入menu下一界面。

若ID和密码分别输入1,1234,则跳出以下界面:

确定按钮所对应的代码如下:

//定义两个变量

string password,userid

password=sle_2.text

//检索用户名和密码记录

SELECT "员工信息表". "ID",

"员工信息表"."密码"

INTO :userid,

:password

FROM "员工信息表"

WHERE "员工信息表"."ID" =:sle_1.text and "员工信息表"."密码" =:sle_2.text

//判断用户输入的用户名是否正确

if sqlca.sqlcode<>0 then

messagebox("错误!","ID或密码错误,请重新输入!",exclamation!,ok!,2)

else

messagebox("通过验证!","ID和密码正确,欢迎您使用本系统!",Information!,ok!,2)

open(w_main)

close(w_enter)

end if

取消按钮所对应的代码如下:

close(parent)

//关闭登录窗口

三、 menu界面的截图:

在本界面中我们通过点击菜单栏上的不同管理按钮来实现管理和 *** 作的功能。

进货—进货单

出货—出货单

库存—蔬菜类

—水产类

—肉类

系统维护—修改密码

查询

四、 进货的截图如下:

在本界面中, *** 作员可以输入进货信息

五、 进货的截图如下:

在本界面中, *** 作员可以输入出货信息

六、本界面是实现用户更改自己的密码的界面

用户在登陆后根据上面的提示可以更改自己的密码。

程序代码如下:

string oldid

string oldp

string newp1

string newp2

oldid=trim(sle_1.text)

oldp=trim(sle_2.text)

newp1=trim(sle_3.text)

newp2=trim(sle_4.text)

if len(oldp)=0 or isnull(oldp) then

oldp=space(10)

end if

if len(newp1)=0 or isnull(newp1) then

newp1=space(10)

end if

if len(newp2)=0 or isnull(newp2) then

newp2=space(10)

end if

select "operator"."password"

into :oldp

from "operator"

where "operator"."password"=:oldp

if sqlca.sqlcode<>0 then

messagebox("提示","原密码不正确!")

sle_2.text=""

sle_2.setfocus()

return

end if

if newp1<>newp2 then

messagebox("提示","两次新密码输入不同!")

sle_4.text=""

sle_4.setfocus()

return

end if

Update "operator"

set "password"=:newp1

where "operator"."operator_id"=:oldid

if sqlca.sqlcode<>0 then

rollback

messagebox("提示","密码更正错误! 请重设!")

return

end if

gs_password=newp1

commit

messagebox("提示","密码修改成功!")

七、本 *** 作可以看仓库里的商品并可对其进行插入和删除

八、从仓库查询所需要的商品

4 系统评价

系统的功能基本上已经实现,但是还是不够完善。但是在使用的时候还是能给用户带来一定的方便的。仓库的进货和出货在本系统中能直观的以表格形式反映出来,便于 *** 作员的使用和决策者的管理。

4.1 系统特色

本系统要求用户进行验证之后才能进入相应的界面。有利于保护数据库的安全,不被非法登陆使用。对于仓库内货物的进出管理要求严格,即进出货时必须填写相应的进出货单据。便于企业管理查看账目,保障了企业的稳定运行。通过本系统可以方便地实现仓库管理中的货物登记、出库入库等 *** 作,使仓库管理井井有条。在查看数据库时可以方便的删除数据库中冗余的信息和添加新的信息。

4.2 系统不足及改进

这个系统基本上实现了一些简单的对系统所涉及表的更新、增加和删除的功能。也实现对用户登陆的安全上有了一定的限制,只有在正确输入ID和密码的时候才能进入系统。远没有达到大型公司的仓储物资管理的要求,所创建的数据库框架比较简单,各表之间的联系也过于简单,没有添加外键相互约束,用POWER BUILDER做出来的系统过于简单、单调,需要进一步深入的调整优化,将各表之间的关系紧密联系起来,相互制约,保证数据库中数据的添加、删除、更新,安全有序。 *** 作窗口还需要进一步的进行美化,使用户在使用中更赏心悦目。

5 课程设计心得

这次课程设计的主要目的是掌握数据库应用系统分析设计的基本方法,基本掌握PowerBuilder,进一步提高分析解决问题的综合能力。通过这次课程设计,我基本掌握了以上要求。但只有两周的课程设计时间,时间比较仓促,所以开发的系统不是很完善,有一些功能未实现,但是仓库管理的基本功能均已实现。以前对数据库的很多知识认识都不深刻,做过这次课程设计之后,我对数据库的知识有了一个比较系统的了解;比如:对表内一些字段的约束,关系等的运用已经比较熟练。这个课程设计使我巩固了数据库的知识。

对于PowerBuilder也有了一定的了解,由于用的不多,所以运用的不是很熟练。刚开始的时候,对于PowerBuilder的语法,用法等一系列知识都不熟悉。当我基本完成此系统开发的时候,我发现其实也没有那么难,在未做之前我还害怕做不出来。经过对这个系统的开发,在开发过程中遇到但也解决了很多问题,所以说我们不能惧怕有困难而不去接触认识它,我们要知难而上,只有这样我们才能成长,才能有所发展。

这认为最难的一部分是用户查看数据库时通过插入删除按钮对数据库的更改,因为我们在文本框中输入的数字是被默认为字符型的,我在其中使用了integer(string)这个函数把字符型的进行了转换,但是在使用的过程中并不能像我所想像的那样有用。因为时间有限,所以这个问题还没有完全的解决。

通过这次数据库课程设计加深我对数据库基础理论和基本知识的理解,掌握数据库应用系统设计开发的基本方法,达到进一步使我综合运用所学知识和增强实际动手能力的目的。

我会继续学习数据库的知识,学习PowerBuilder的知识,只有通过不断的学习充实自己,才能让自己有所得。只有了知识的积淀,才能为自己的发展铺平道路!

可以参考一下啊,最终还是要自己做的吧。。仅供参考。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10700916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存