Ⅰ 線性存儲結構就是順序存儲結構嗎線性表是線性存儲結構嗎
不是,他們的關系可以如圖所示。線性表包括順序存儲結構和鏈式存儲結構。
拓展資料:
線性表的劃分是從數據的邏輯結構上進行的。線性指的是在數據的邏輯結構上是線性的。即在數據元素的非空有限集中
(1)存在唯一的一個被稱作「第一個」的數據元素,(2)存在唯一的一個被稱作「最後一個」的數據元素,(3)除第一個外,集合中的每個數據元素均只有一個前繼元素,(4)除最後一個外,集合中的每個數據元素均只有一個後繼元素。
那麼對於線性表,從存儲結構上分,可以有順序存儲結構和鏈式存儲結構。順序存儲結構包括順序表、順序隊列和順序棧;鏈式存儲結構包括鏈表、鏈隊列和鏈棧。
Ⅱ 圖書管理系統 數據結構 。
圖書管理的。會做的
Ⅲ 用數據結構編一個圖書管理系統
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#define N sizeof(struct book)
#define PT "%-5d %10s %6s %6s %8s %3d \n",p->num,p->name,p->where,p->author,p->pub,p->count
struct book /*圖書信息*/
{
int num; /*書號*/
char name[10]; /*書名*/
char where[10]; /*所在書庫*/
char author[15]; /*作者*/
char pub[20]; /*出版社*/
int count; /*數量*/
struct book *next;
};
/*輸出模塊*/
void print(struct book *p0)
{
struct book *p;
p=p0->next;
printf("\n\n\t\t^^^^^^^^^^^^^^圖書信息表^^^^^^^^^^^^^^");
printf("\n\n圖書編號---圖書名稱---所在書庫----作者----出版社---數量\n");
while(p!=NULL)
{
printf(PT);
p=p->next;
}
getch();
}
/*輸入模塊*/
struct book *creat()
{
struct book *head,*p1,*p2;
int i=0;
head=p2=(struct book *)malloc(N);
head->next=NULL;
printf("\n\n\t\t錄入圖書信息");
printf("\n\t---------------------------------------");
while(1)
{ p1=(struct book *)malloc(N);
printf("\n 請輸入圖書編號(書號為0結束): ");
scanf("%d",&p1->num);
if(p1->num!=0)
{
printf("\n\n書名 所在書庫 作者 出版社 圖書數量\n");
scanf("%s%s%s%s%d",p1->name,p1->where,p1->author,p1->pub,&p1->count);
p2->next=p1;
p2=p1;
i++;
}
else
break;
}
p2->next=NULL;
free(p1);
printf("\n\t\t----------------------------------------");
printf("\n\t\t %d 種書錄入完畢",i);
getch();
return head;
}
/*查找模塊*/
void find(struct book *p0)
{
char name[10];
int flag=1;
struct book *p;
p=p0->next;
printf("請輸入要查找的書名:\n");
scanf("%s",name);
for(p=p0;p;p=p->next)
if(strcmp(p->name,name)==0)
{
printf("\n\n圖書編號---圖書名稱---所在書庫----作者----出版社---數量\n");
printf(PT);
flag=0;
break;
}
if(flag) printf("\n 暫無此圖書信息\n");
getch();
}
/*刪除模塊*/
void del(struct book *p0)
{
char name[10];
int flag=1;
struct book *p;
p=p0;
printf("請輸入要刪除的書名:\n");
scanf("%s",name);
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
p0->next=p->next; /*後續節點連接到前驅節點之後*/
free(p);
printf("\t該書資料已刪除.");
flag=0;
break;
}
p0=p;
p=p->next;
}
if(flag) printf("\n\t無此圖書信息。");
getch();
}
/*增加模塊*/
void insert(struct book *p0)
{
struct book *p;
p=(struct book *)malloc(N);
while(1)
{
printf("\n 請輸入要增加的圖書編號(書號為0 退出): ");
scanf("%d",&p->num);
if(p->num!=0)
{
if(p0->next!=NULL&&p0->next->num==p->num) /*找到重號*/
{
p=p->next;
free(p);
printf("\t該書已存在");
}
else
{printf("\n\n書名 所在書庫 作者 出版社 圖書數量\n");
scanf("%s%s%s%s%d",p->name,p->where,p->author,p->pub,&p->count);
p->next=p0->next;
p0->next=p;
printf("\t已成功插入.");
}
}
else
break;
}
getch();
}
/*修改模塊*/
void modify(struct book *p0)
{
char name[10];
int flag=1;
int choice;
struct book *p;
p=p0->next;
printf("請輸入要修改的書名:\n");
scanf("%s",name);
while(p!=NULL&&flag==1)
{
if(strcmp(p->name,name)==0)
{
printf("\n\t請選擇要修改的項:");
printf("\n\t 1.修改圖書編號\n");
printf("\n\t 2.修改圖書所在書庫\n");
printf("\n\t 3.修改圖書作者\n");
printf("\n\t 4.修改圖書出版社\n");
printf("\n\t 5.修改圖書庫存量\n");
scanf("%d",&choice);
switch(choice)
{
case 1: { printf("\n 請輸入新的圖書編號:");
scanf("%d",p->num); break;
}
case 2: { printf("\n 請輸入新的圖書書庫:");
scanf("%s",p->where); break;
}
case 3: { printf("\n 請輸入新的圖書作者:");
scanf("%s",p->author); break;
}
case 4: {printf("\n 請輸入新的圖書出版社:");
scanf("%s",p->pub); break;
}
case 5: {printf("\n 請輸入新的圖書庫存量:");
scanf("%d",p->count); break;
}
}
printf("\n\t該項已成功修改。\n\t 新的圖書信息:");
printf("\n\n圖書編號---圖書名稱---所在書庫----作者----出版社---數量\n");
printf(PT);
flag=0;
}
p0=p;
p=p0->next;
}
if(flag) printf("\n\t暫無此圖書信息。");
getch();
}
/*讀文件*/
struct book *read_file()
{
int i=0;
struct book *p,*p1,*head=NULL;
FILE *fp;
if((fp=fopen("library.txt","rb"))==NULL)
{printf("\n\n\n\n\n \t********庫文件不存在,請創建!**********");
getch();
return NULL;
}
head=(struct book *)malloc(N);
p1=head;
head->next=NULL;
printf("\n 已有圖書信息:");
printf("\n\n圖書編號---圖書名稱---所在書庫----作者----出版社---數量\n");
while(!feof(fp))
{
p=(struct book *)malloc(N); /*開辟空間以存放的取得信息*/
while(fscanf(fp,"%d%s%s%s%s%d",&p->num,p->name,p->where,p->author,p->pub,&p->count)!=EOF)
{
printf(PT);
i++;
}
p1->next=p;
p1=p;
}
p1->next=NULL;
fclose(fp);
printf("\n 共種%d 圖書信息",i);
printf("\n\n\n 文件中的信息以正確讀出。按任意鍵進入主菜單。");
getch();
return (head);
}
/*保存文件*/
void save(struct book *head)
{
FILE *fp;
struct book *p;
fp=fopen("library.txt","wb"); /*以只寫方式打開二進制文件*/
if(fp==NULL) /*打開文件失敗*/
{
printf("\n=====>打開文件失敗!\n");
getch();
return ;
}
else
for(p=head->next;p!=NULL;p=p->next)
fprintf(fp,"%d %s %s %s %s %d\n",p->num,p->name,p->where,p->author,p->pub,p->count);
fclose(fp);
printf("\n\t保存文件成功!\n");
}
void main()
{
struct book *head=NULL;
int choice=1;
head=read_file();
if(head==NULL)
{
printf("\n\t\t**********");
getch();
head=creat();
}
do
{
system("cls");
printf("\t\t----------Welcome---------\n");
printf("\n\n\t歡迎您,圖書管理員.\n");
printf("\n\n\n\n\n");
printf("\n\t 請選擇:");
printf("\n\t 1.查詢圖書信息\n");
printf("\n\t 2.修改圖書信息\n");
printf("\n\t 3.增加圖書信息\n");
printf("\n\t 4.刪除圖書信息\n");
printf("\n\t 5.顯示所有圖書信息\n");
printf("\n\t 0.退出系統\n");
scanf("%d",&choice);
switch(choice)
{
case 1: find(head); break;
case 2: modify(head); break;
case 3: insert(head); break;
case 4: del(head); break;
case 5: print(head); break;
case 0: system("cls");
printf("\n\n\n\n\n\t^^^^^^^^^^謝謝使用,再見^^^^^^^^^^!\n\n");
break;
}
}while(choice!=0);
save(head);
}
Ⅳ 線性結構有哪幾種存儲結構
數據元素之間的關系有兩種不同的表示方法:順序映象和非順序映象,並由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。 順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常藉助於程序設計語言中的數組來實現。 鏈接存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。 順序存儲和鏈接存儲是數據的兩種最基本的存儲結構。 在順序存儲中,每個存侗含有所存元素本身的信息,元素之間的邏輯關系是通過數組下標位置簡單計算出來彭線性表的順序存儲中,若一個元素存儲在對應數組中的下標位置為i,則它的前驅元著數組中的下標位置為i一1,它的後繼元素在對應數組中的下標位置為i+1。在鏈接存個存儲結點不僅含有所存元素本身的信息,而且含有元素之間邏輯關系的信息。 其中data表示值域,用來存儲.一個元素。Pl,p2,…,Pill(1n≥1)均為指針域,每個韋值為其對應的後繼元素或前驅元素所在結點(以後簡稱為後繼結點或前驅結點)的存通過結點的指針域(又稱為鏈域)可以訪問到對應的後繼結點或前驅結點,該後繼結一《結點稱為指針域(鏈域)所指向(鏈接)的結點。若一一個結點中的某個指針域不需要指f點,則令它的值為空,用常量N-LILL表示,NIJ】上在iostream.h中被定義為數值0。 數據的鏈接存儲表示又被稱為鏈接表。當鏈接表中的每個結點只含有一個指針稱為單鏈表。
Ⅳ 圖書管理系統的結構
其中信息源是圖書館管理系統(MIS)的產地,信息處理器擔負信息的傳輸、加工、保存等任務。信息用戶是信息的使用者,它應用信息進行決策。信息管理者負責信息系統的設計實現。圖書管理系統
特點及功能
1.3.1 圖書館管理系統的界面特點
在計算機軟體技術中,人機界面已經發展成為一個重要的分支。MIS人機界面設計一般遵循以下一些基本原則:
1.以通信功能作為界面設計的核心
2.界面必須始終一致
3.界面必須使用戶隨時掌握任務的進展情況
4.界面必須能夠提供幫助
5.界面友好、使用方便
6.輸入畫面盡可能接近實際
7.具有較強的容錯功能
圖書館管理系統的功能
1. 准備和提供統一格式的信息,使各種統計工作簡化,使信息成本最低;
2. 及時全面地提供不同要求的、不同細度的信息,以期分析解釋現象最快,及時產生正確的控制。
3. 全面系統的保存大量的信息,並能很快的查詢和綜合,為組織的決策提出信息支持。
4. 利用數學方法和各種模型處理信息,以期預測未來和科學地進行決策。
Ⅵ 圖書館管理系統
圖書館管理系統
摘 要
圖書管理系統是典型的信息管理系統(MIS),其開發主要包括後台資料庫的建立和維護以及前端應用程序的開發兩個方面。對於前者要求建立起數據一致性和完整性強、數據安全性好的庫。而對於後者則要求應用程序功能完備,易使用等特點。
因此本人結合開入式圖書館的要求,對MS SQL Server2000資料庫管理系統、SQL語言原理、Delphi應用程序設計,Delphi資料庫技術進行了較深入的學習和應用,主要完成對圖書管理系統的需求分析、功能模塊劃分、資料庫模式分析,並由此設計了資料庫結構和應用程序。系統運行結果證明,本文所設計的圖書管理系統可以滿足借閱者、圖書館工作人員和高級管理員三方面的需要。
第一章對資料庫應用系統開發和圖書管理系統進行了簡明的介紹,並分析了開發圖書管理系統所應進行的工作。
第二章對資料庫的設計和SQL語言的使用進行了系統分析,為深入理解資料庫應用打下了基礎。
第三章學習了具體的開發工具Delphi 6.0,對其資料庫組件,SQL語言在Delphi中的應用等資料庫編程關鍵技術進行了系統的介紹。
第四章分析了圖書管理信息系統的應用需求,按照資料庫設計理論一步一步地給出了系統需求說明書、局部ER圖、全局ER圖、系統關系模式,子模式,利用MS SQL Server2000建立了資料庫
第五章進行了具體的程序設計,具體劃分了三類用戶的操作許可權,設計了了三個操作界面。實現了資料庫表的瀏覽,記錄的添加、刪除和修改,報表的生成,實現了多資料庫表的連接操作,實現了多條件查詢和模糊查詢,並靈活實現了對不可更新查詢結果集的更新操作,實現了主從表操作,實現了密碼維護功能,最後,系統還可以導入資料庫以對任意同結構的資料庫進行操作。
設計充分利用Delphi 6、MS SQL Server2000資料庫技術的強大力量,提高了編程效率和可靠性。
關鍵詞:資料庫,SQL語言,MS SQL Server,Delphi6,
資料庫組件,圖書管理,窗體,listview組件
24
37
§5.2 數據模塊窗體的設置 ……………………………………………………… 第一章 緒 論
§1.1 資料庫應用系統開發簡介
在資料庫應用系統開發之前,對開發資料庫的基本概念應當了解,對資料庫的結構、開發資料庫應用程序的步驟、開發體系及方法都應當有相當清晰的了解和認識。
資料庫應用系統開發的目標是建立一個滿足用戶長期需求的產品。開發的主要過程為:理解用戶的需求,然後,把它們轉變為有效的資料庫設計。把設計轉變為實際的資料庫,並且這些資料庫帶有功能完備、高效能的應用。
資料庫技術在計算機軟體鄰域研究中一直是非常重要的主題,產生於60年代,30多年來資料庫技術得到了迅速發展,並已形成較為完整的理論體系和一大批實用系統。並且,近年來,隨著World Wide Web(WWW)的猛增及Internet技術的迅速發展,使得資料庫技術之時成為最熱門技術之一。
1.1.1 資料庫
如圖1.1顯示了資料庫系統的主要組件。資料庫由DBMS(資料庫管理系統)處理,DBMS則由開發人員和用戶通過應用程序直接或間接地使用。它主要包括四個要素:用戶數據、元數據、索引和應用元數據。
1.1.1.1 用戶數據
目前,大多數主流資料庫管理系統把用戶數據表示為關系。現在把關系看作數據表。表的列包含域或屬性,表的行包含對應業務環境中的實體的記錄。並非所有的關系都同樣符合要求,有些關系比其它關系更結構化一些。第二章描述了一個用以產生良好結構關系的過程,稱作規范化。
為了對比結構差的關系和結構好的關系之間的差別,以本文所設計的圖書管理系統中的圖書和圖書借閱者關系為例來說明,假若設計關系R1(借書證號,姓名,性別,身份編號,身份證,聯系電話,圖書編號,圖書名稱,圖書類別,作者,出版社,出版日期,備注,價格,數量);這個關系的問題出在它有關於兩個不同主題的數據,就是圖書借閱者和圖書。用這種方式構成的關系在進行修改時,會出現問題。因為一個圖書借閱者可能借閱多本書,如果某個圖書借閱者的某個欄位(如聯系電話)出現變更,它所借閱的圖書記錄(可能多個)也就必須變化,這是不好的。因此數據用兩個關系表示更好。現在如果某圖書借閱者改變了它的聯系電話,只有關系(表)user的對應行需要改變。當然,要想產生一個,顯示圖書名稱及其借閱者聯系電話的報表,就需要將這兩個表的行結合起來。結果表明,將關系分別存儲,在生成報表的時候將它們結合起來,比把它們存儲在一個合成的表中更好。
user(借書證號,姓名,性別,身份編號,身份證,聯系電話,)
book(圖書編號,圖書名稱,圖書類別,作者,出版社,出版日期,備注,價格,數量)
1.1.1.2 元數據
資料庫是自描述的,這就意味著它自身包含了它的結構的描述,這種結構的描述稱作元數據。因為DBMS產品是用來存儲和操縱表的,所以大多數產品把元數據以表的形式存儲,有時稱作系統表。這些系統表存儲了資料庫中表的情況,指出每一個表中有多少列,那一列是主關鍵字,每一列的數據類型的描述,它也存儲索引、關鍵字、規則和資料庫結構的其他部分。
在表中存儲元數據不僅對DBMS是有效的,對用戶也是方便的,因為他們可以使用與查詢用戶數據同樣的查詢工具來查詢元數據。本文第二章所介紹的SQL語言可以同時用於元數據和用戶數據。
1.1.1.3 索引
第三種類型的數據改進了資料庫的性能和可訪問性,這種數據經常稱作開銷數據,盡管有時也採用其他類型的數據結構,如鏈表,但它主要還是索引。索引可以用來排序和快速訪問數據。下面以本人的圖書管理信息系統中的book表為例來說明。
假定數據在磁碟上是按』圖書編號』的遞增順序排列的,用戶想列印一個按』圖書名稱』排序的圖書數據報表。為此,所有的數據都需要從源表中提取出來並排序,除非表很小,否則這是一個很費時的過程。或者,可以在『圖書名稱』欄位上創建一個索引,該索引的條目按照『圖書名稱』排序,這樣,該索引的條目可以讀出來,並用來按順序訪問book數據。
索引用於快速訪問數據。例如,一個用戶只想訪問book表中『圖書類別』值為『01』的那些學生。如果沒有索引,則必須搜索整個源表;但有了索引之後,可以找到索引條目,並使用它來挑選所有合適的行。
索引對排序和查找是有幫助的,但要付出代價。book表中的行每次改變時,索引也必須改變,這意味著索引並非隨意的,應該在真正需要時保存。
1.1.1.4 應用元數據
存儲在資料庫中的第四種數據是應用元數據,它用來存儲用戶窗體、報表、查詢和其他形式的查詢組件。並非所有的DBMS都支持應用組件,支持組件的DBMS也不一定把全部組件的結構作為應用元數據存儲在資料庫中。然而,大多數現代的DBMS產品存儲這種數據作為資料庫的一部分。一般來說,資料庫開發人員和用戶都不直接訪問應用元數據,想反,他們通過DBMS中的工具來處理這些數據。
MS SQL Server2000中就支持窗體、存儲過程等應用元數據。
1.1.2 資料庫管理系統
資料庫管理系統(DBMS)是指資料庫系統中管理數據的軟體系統。DBMS是資料庫系統的核心組成部分。對資料庫的一切操作,包括定義、更新及各種控制,都是通過DBMS進行的。DBMS總是基於某種數據模型,可以把DBMS看成是某種數據模型在計算機系統上的具體實現。根據數據模型的不同,DBMS可以分成層次型、網狀型、關系型、面向對象型等。MS SQL Server2000就是一種關系型資料庫管理系統。
關系模型。關系模型主要是用二維表格結構表達實體集,用外鍵表示實體間聯系。關系模型是由若干個關系模式組成的集合。關系模式相當於前面提到的記錄類型,它的實例稱為關系,每個關系實際上是一張二維表格。
關系模型和層次、網狀模型的最大判別是用關鍵碼而不是用指針導航數據,表格簡單用戶易懂,編程時並不涉及存儲結構,訪問技術等細節。關系模型是數學化模型。SQL語言是關系資料庫的標准化語言,已得到了廣泛的應用。
如圖1.1所示,DBMS的特點和功能可以分為三個子系統:設計工具子系統、運行子系統和DBMS引擎。
設計子系統有一個方便資料庫及其應用創建的工具集。它典型地包含產生表、窗體、查詢和報表的工具。DBMS產品還提供編程語言和對編程語言的介面。
運行子系統處理用設計子系統開發的應用組件。它所包含的運行處理器用來處理窗體和資料庫的數據交互,以及回答查詢和列印報表等。
DBMS引擎從其他兩個組件接受請求,並把它們翻譯成對操作系統的命令,以便讀寫物理介質上的數據。DBMS引擎還涉及事務管理、鎖、備份和恢復。
1.1.3 創建資料庫
1.1.3.1 資料庫模式
資料庫模式定義了資料庫的結構、表、關系、域和業務規則。資料庫模式是一種設計,資料庫和應用正是建立在此基礎上的。
域是一列可能擁有的值的集合。必須為每一個表的每一列確定域。除了數據的物理格式外,還需要確定是否有些域對表來說是唯一的。
資料庫模式的最後一個要素是業務規則,它是對需要反映在資料庫和資料庫應用程序中的業務活動的約束。業務規則是模式的一個重要部分,因為他們指定了無論什麼數據變化到達DBMS引擎,允許的數據值必須滿足的約束。不管無效的數據變化請求是來自窗體的用戶、查詢/修改請求還是應用程序,DBMS都應該拒絕。
遺憾的是,不同的DBMS產品用不同的方法實施業務規則。在某些情況下,DBMS產品不具備實施必要業務規則的能力,必須以代碼形式把它們編入應用程序。
1.1.3.2 創建表
1.1.3.3 定義聯系
1.1.4 應用組件
資料庫應用包括窗體、查詢、報表、菜單和應用程序。
§1.2 圖書管理系統
當今時代是飛速發展的信息時代。在各行各業中離不開信息處理,這正是計算機被廣泛應用於信息管理系統的環境。計算機的最大好處在於利用它能夠進行信息管理。使用計算機進行信息控制,不僅提高了工作效率,而且大大的提高了其安全性。
尤其對於復雜的信息管理,計算機能夠充分發揮它的優越性。計算機進行信息管理與信息管理系統的開發密切相關,系統的開發是系統管理的前提。本系統就是為了管理好圖書館信息而設計的。
圖書館作為一種信息資源的集散地,圖書和用戶借閱資料繁多,包含很多的信息數據的管理,現今,有很多的圖書館都是初步開始使用,甚至尚未使用計算機進行信息管理。根據調查得知,他們以前對信息管理的主要方式是基於文本、表格等紙介質的手工處理,對於圖書借閱情況(如借書天數、超過限定借書時間的天數)的統計和核實等往往採用對借書卡的人工檢查進行,對借閱者的借閱許可權、以及借閱天數等用人工計算、手抄進行。數據信息處理工作量大,容易出錯;由於數據繁多,容易丟失,且不易查找。總的來說,缺乏系統,規范的信息管理手段。盡管有的圖書館有計算機,但是尚未用於信息管理,沒有發揮它的效力,資源閑置比較突出,這就是管理信息系統的開發的基本環境。
數據處理手工操作,工作量大,出錯率高,出錯後不易更改。圖書館採取手工方式對圖書借閱情況進行人工管理,由於信息比較多,圖書借閱信息的管理工作混亂而又復雜;一般借閱情況是記錄在借書證上,圖書的數目和內容記錄在文件中,圖書館的工作人員和管理員也只是當時對它比較清楚,時間一長,如再要進行查詢,就得在眾多的資料中翻閱、查找了,造成查詢費時、費力。如要對很長時間以前的圖書進行更改就更加困難了。
基於這此問題,我認為有必要建立一個圖書管理系統,使圖書管理工作規范化,系統化,程序化,避免圖書管理的隨意性,提高信息處理的速度和准確性,能夠及時、准確、有效的查詢和修改圖書情況。
§1.1 系統所做工作
1) 了解應用開發工具的現狀
2) DelPHi6.0編程基礎
3) MS SQL Server基礎
4) 設計資料庫;設計界面
5) 開發資料庫。資料庫實現的一些功能有
l 數據和數據說明的醒目顯示;
l 多條件的查詢、多條記錄的檢索、模糊查詢;
l 數據文件某種存儲格式導入數據窗體,經過數據完整性校驗存入資料庫;
l 資料庫安全性的設計;
l 資料庫的設計、數據介面、界面的設計。
§1.3 本文所作工作
緒論部分對資料庫應用系統的結構、開發進行了簡要介紹,分析了圖書管理信息系統設計的特點和任務。
第二章介紹了資料庫的設計和範式分析,並系統介紹了SQL語言,為設計和理解應用程序做了鋪墊。
第三章對系統介紹了Delphi 6.0的資料庫編程技術、SQL語言在Delphi 6.0中的應用、MS SQL Server基礎。
第四章分析了圖書管理系統的應用需求,設計了系統的資料庫結構,並根據需求對系統功能進行了劃分和細化。
第五章根據第四章的設計結果利用MSSQL Server2000和Delphi 6.0進行了具體的應用程序設計。
總結部分介紹了設計體會和編程體會,並指出了系統設計中的不足和改進的方向。
第二章 資料庫理論基礎
一個成功的信息管理系統,是建立在許多條件之上的,而資料庫是其中一個非常重要的條件和關鍵技術。
信息管理系統所涉及的資料庫設計分五個步驟:資料庫需求分析、概念設計、邏輯設計、物理設計與載入測試。
(1) 資料庫需求分析的任務是將業務管理單證流化為數據流,劃分主題之間的邊界,繪制出DFD圖,並完成相應的數據字典。
(2) 概念設計的任務是從DFD出發,繪制出本主題的實體-關系圖,並列出各個實體與關系的綱要表。
(3) 邏輯設計的任務是從E-R圖與對應的綱要表出發,確定各個實體及關系的表名屬性。
(4) 物理設計的任務是確定所有屬性的類型、寬度與取值范圍,設計出基本表的主鍵,將所有的表名與欄位名英文化(現在很多軟體能支持中文欄位,如MS SQL Server,我就是用的中文欄位名),實現物理建庫,完成資料庫物理設計字典。
(5) 載入測試工作貫穿於程序測試工作的全過程,整個錄入、修改、查詢、處理工作均可視為對資料庫的載入測試工作。
要設計出一個好的信息管理系統資料庫,除滿足系統所要求的功能外,還必須遵守下列原則:
² 基本表的個數越少越好。
² 主鍵的個數越少越好。鍵是表間連接的工具,主鍵越少,表間的連接就越簡單。
² 欄位的個數越少越好。
² 所有基本表的設計均應盡量符合第三範式。
資料庫的設計中,如何處理多對多的關系和如何設計主鍵,是兩個有著較大難度、需要重點考慮的問題。下面我們著重從SQL應用、資料庫設計範式和查詢優化等方面來分析本課題的系統關鍵技術和實現難點並加以解決。
§2.1 資料庫系統設計及範式分析
信息系統的主要任務是通過大量的數據獲得管理所需要的信息,這就必須存儲和管理大量的數據。因此建立一個良好的數據組織結構和資料庫,使整個系統都可以迅速、方便、准確地調用和管理所需的數據,是衡量信息系統開發工作好壞的主要指標之一。
2.1.1 資料庫系統設計
資料庫設計主要是進行資料庫的邏輯設計,即將數據按一定的分類、分組系統和邏輯層次組織起來,是面向用戶的。資料庫設計時需要綜合企業各個部門的存檔數據和數據需求,分析各個數據之間的關系,按照DBMS提供的功能和描述工具,設計出規模適當、正確反映數據關系、數據冗餘少、存取效率高、能滿足多種查詢要求的數據模型。
資料庫設計的步驟是:
(1) 資料庫結構定義:目前的資料庫管理系統(DBMS)有的是支持聯機事務處理CLTP(負責對事務數據進行採集、處理、存儲)的操作型DBMS,有的可支持數據倉庫、有聯機分析處理CLAP(指為支持決策的制定對數據的一種加工操作)功能的大型DBMS,有的資料庫是關系型的、有的可支持面向對象資料庫。針對選擇的DBMS,進行資料庫結構定義。
(2) 數據表定義:數據表定義指定義資料庫中數據表的結構,數據表的邏輯結構包括:屬性名稱、類型、表示形式、預設值、校驗規則、是否關鍵字、可否為空等。關系型資料庫要盡量按關系規范化要求進行資料庫設計,但為使效率高,規范化程度應根據應用環境和條件來決定。數據表設計不僅要滿足數據存儲的要求,還要增加一些如反映有關信息、操作責任、中間數據的欄位或臨時數據表。
(3) 存儲設備和存儲空間組織:確定數據的存放地點、存儲路徑、存儲設備等,備份方案,對多版本如何保證一致性和數據的完整性。
(4) 數據使用許可權設置:針對用戶的不同使用要求,確定數據的用戶使用許可權,確保數據安全。
(5) 數據字典設計:用數據字典描述資料庫的設計,便於維護和修改。
為了更好地組織數據和設計出實際應用資料庫,應該注意如下問題:
規范化地重組數據結構:對數據進行規范化表達,這在後面將會具體討論。
關系數據結構的建立:在進行了數據基本結構的規范化重組後,還必須建立整體數據的關系結構。這一步設計完成後資料庫和數據結構設計工作基本完成,只待系統實現時將數據分析和數據字典的內容代入到所設計的數據整體關系結構中,一個規范化資料庫系統結構就建立起來了。
建立關系數據結構涉及三方面內容:確定關聯的關鍵指標項並建立關聯表;確定單一的父系記錄結構;建立整個資料庫的關系結構。
(1)鏈接關系的確定
在進行了上述數據規范化重組後,已經可以確保每一個基本數據表(我們簡稱為表)是規范的,但是這些單獨的表並不能完整地反映事物,通常需要通過指標體系整體指標數據才能完整全面地反映問題。也就是說在這些基本表的各宇段中,所存儲的是同一事物不同側面的屬性。那麼計算機系統如何能知道哪些表中的哪些記錄應與其它表中的哪些記錄相對應,它們表示的是同一個事物呢?這就需要在設計數據結構時將這種各表之間的數據記錄關系確定下來。這種表與表之間的數據關系一般都是通過主或輔關鍵詞之間的連接來實現的。因為在每個表中只有主關鍵詞才能唯一地標識表中的這一個記錄值(因為根據第三範式的要求,表中其它數據欄位函數都依賴於主關鍵詞),所以將表通過關鍵詞連接就能夠唯一地標識出某一事物不同屬性在不同表中的存放位置。
(2)確定單一的父子關系結構
所謂確定單一的父系關系結構就是要在所建立的各種表中消除多對多(以下用M:N來表示)的現象,即設法使得所有表中記錄之間的關系呈樹狀結構(只能由一個主幹發出若干條分支,而不能有若干條主幹交錯發出若干條分支狀況)。所謂的「父系」就是指表的上一級關系表。消除多對多關系可以藉助於E-R圖的方法來解決,也可以在系統分析時予以注意,避免這種情況的發生。
消除這種M:N情況的辦法也很簡單,只需在二表之間增加一個表,則原來M:N的關系就改成了M:1,1:N的關系了。
確定數據資源的安全保密屬性:
一般DBMS都提供給我們自己定義數據安全保密性的功能。系統所提供的安全保密功能一般有8個等級(0-7級),4種不同方式(只讀、只寫、刪除、修改),而且允許用戶利用這8個等級的4種方式對每一個表自由地進行定義。
定義安全保密性的方法一般有如下幾種:
a.原則上所有文件都定義為4級,個別優先順序特別高的辦公室(終端或微機的入網賬號)可定義高於4級的級別,反之則定義為低於4的級別。
b.統計文件(表)和數據錄入文件一般只對本工作站定義為只寫方式,對其它工作站則定義為只讀方式。
c.財務等保密文件一般只對中工作站(如財務科等)定義為可寫、可改、可刪除方式,對其它工作站則定義為只讀方式,而且不是每個人都能讀,只有級別相同和高級別者才能讀
2.1.2 資料庫設計範式分析
建立起一個良好的數據指標體系,是建立數據結構和資料庫的最重要的一環。一個良好的數據指標體系是建立DB的必要條件,但不是充分條件。我們完全可以認為所建指標體系中的一個指標類就是關系資料庫中的一個基本表,而這個指標類下面的一個個具體指標就是這個基本表中的一個欄位。但如果直接按照這種方式建庫顯然還不能算最佳。對於指標體系中數據的結構在建庫前還必須進行規范化的重新組織。
a. 數據組織的規范化形式
在數據的規范化表達中,一般將一組相互關聯的數據稱為一個關系(relation),而在這個關系下的每個數據指標項則被稱為數據元素(data element),這種關系落實到具體資料庫上就是基本表,而數據元素就是基本表中的一個欄位(field)。規范化表達還規定在每一個基本表中必須定義一個數據元素為關鍵字(key),它可以唯一地標識出該表中其它相關的數據元素。在規范化理論中表是二維的,它有如下四個性質:
l 在表中的任意一列上,數據項應屬於同一個屬性(如圖中每一列都存放著不同合同記錄的同一屬性數據)。
l 表中所有行都是不相同的,不允許有重復組項出現(如圖中每一行都是一個不同的合同記錄)。
l 在表中,行的順序無關緊要(如圖中每行存的都是合同記錄,至於先放哪一個合同都沒關系)。
l 在表中,列的順序無關緊要,但不能重復(如圖中合同號和合同名誰先誰後都沒關系,但二者不可重復或同名)。
在對表的形式進行了規范化定義後,數據結構還有五種規范化定義,定名為規范化模式,稱為範式。在這五種範式中,一般只用前三種,對於常用系統就足夠了。而且這五種範式是「向上兼容」的,即滿足第五範式的數據結構自動滿足一、二、三、四範式,滿足第四範式的數據結構自動滿足第一、二、三範式,……,依此類推。
第一範式(first normal form,簡稱1st NF)就是指在同一表中沒有重復項出現,如果有則應將重復項去掉。這個去掉重復項的過程就稱之為規范化處理。在本文所討論的開發方法里,1st NF實際上是沒有什麼意義的。因為我們按規范化建立的指標體系和表的過程都自動保證了所有?/div>
Ⅶ SQL設計圖書管理系統
目 錄
圖書管理信息系統的設計和實現
端應用程序的開發兩個方面。對於前者要求建立起數據一致性和完整性強、數據安全性好的資料庫。而對於後者則要求應用程序功能完備,易使用等特點。
本圖書管理信息系統是利用計算機管理信息處理的迅速、准確、可靠且具有強大存儲能力的突出特點,全面提高圖書館的管理水平和工作效率,並以及時、完整的業務經營資料,為圖書館的及時轉換提供一定的支持。本圖書管理系統涵蓋了六個主要的子系統:圖書資料管理、讀者資料管理、借書操作、還書操作、修改密碼和查詢處理,並通過信息的收集、整理、存儲、傳遞將它們有機地結合起來,提高了工作的准確率和效率。
本論文從系統分析、需求分析、概要分析、詳細分析到系統實施、系統運行、系統維護等幾個方面詳細闡述了圖書管理系統的開發過程,記錄了開發過程中的分析依據和設計思路及相關圖表,闡明了主要的設計內容和實施、運行情況,為本系統的使用、升級提供了完備的資料。
本系統開發時間將近四個月,初步完成了圖書管理信息系統的初級版本,系統基本上實現了原定的基本功能,並將在以後進行陸續的改進和完善。
關鍵詞:Delphi;SQL Server 2000;資料庫;圖書管理信息系統
Design And Implementation of The Books Management Information System
Abstract:The books management information system is the typical information management system (MIS), It mainly develops including two respects ,one is setting-up and maintenance of backstage supporter's database . Another is developing the front application program. As to the former demand set up data consistency , integrality strong and data security kind database.require to the latter the function of the application program is complete , Easy to use and so on the characteristic.
This books management information system is using the computer management information processing rapid, accurate, is reliable also has the formidable memory property the prominent characteristic, comprehensively enhances the library the management level and the working efficiency, and take the prompt integrity account executive material, provides the certain support for newer books and reference materials in time of the library. The books management information system has covered six subsystems: The books and reference materials management, the reader material management, taking advantage of the book operation, modify password and also the book operation, inquiry processing, and through the information collection, the reorganization, the memory, the transmission organically unifies them, enhanced the work rate of accuracy and the efficiency.
This thesis from the system analysis, the demand analysis, the outline analysis, the multianalysis to the system implementation, the system movement, the system maintenance and so on several aspects in detail elaborated the books management information system performance history, recorded in the performance history analysis to rest on and to design the mentality and the correlation graph, had expounded the main design content and the implementation, the movement situation, for this system use, the promotion have provided the complete material.
This system is nearly four months construction period, finished the elementary edition of the books administrative system tentatively, the system has basically realized the original basic function, and will carry on improvement and completion successively afterwards.
Keyword: Delphi ; SQL; database; books management information system
前 言
隨著我國經濟的高速發展,人們的物質需求已趨向飽和,而精神上的需求卻日益提高。學習的繁重、工作的壓力、競爭的刺激使人們感到知識的睏乏,渴望進一步的充電。同時當今時代是飛速發展的信息時代。在各行各業中離不開信息處理,正是因此計算機被廣泛應用於信息管理系統的環境。計算機的最大好處在於利用它能夠進行信息管理。管理信息系統是先進的科學技術和現代管理相結合的產物,建立以計算機為主要手段的管理信息系統,已成為現代企業、政府部門等各類組織提高自身素質、實現組織的戰略目標。使用計算機進行信息控制,不僅提高了工作效率,而且大大的提高了其安全性尤其對於復雜的信息管理,計算機能夠充分發揮它的優越性。計算機進行信息管理與信息管理系統的開發密切相關,系統的開發是系統管理的前提。
為滿足圖書館業務發展的需要,提高競爭能力,我決定利用計算機來提高圖書館管理水平和工作效率。根據圖書館的日常需要,確定系統要實現六個基本功能:圖書資料管理、讀者資料管理、借書操作、還書操作、修改密碼和查詢處理。同時該系統具有強大的查詢功能和可靠性。
目標是努力達到:讀者滿意。圖書館內藏書豐富,品種齊全,但隨著信息處理量的快速增大,工作越來越繁多、要求全面、先進、高效。純辦公軟體無論從准確度還是及時性上都已無法滿足業務的需要。因此,開發一個界面友好,易於操作的圖書館軟體進行自動化處理變得十分重要,本系統開發目的和意義就是為了管理好圖書館信息,使圖書管理工作規范化、系統化、程序化,避免圖書管理的隨意性,提高信息處理的速度和准確性,能夠及時、准確、有效的查詢和修改圖書情況。此圖書管理信息系統以「以人為本」為服務宗旨,提高對讀者的服務質量。
1 Delphi和SQL簡介
1.1 資料庫的介紹
資料庫技術是計算機科學技術中的重要領域,也是應用最廣的技術之一,而且已經成為電子信息系統的重要核心技術。眾所周知,計算機應用從科學計算進入數據處理是一個劃時代的轉折。數據處理是指對各種形式的數據進行收集、存儲、加工和傳播的一系列活動的總和。其目的是從大量的,原始的數據中抽取,推導出對人們有價值的信息經作為行動和決策的依據,是為了藉助計算機科學地保存和管理復雜的,大量的數據以便人們能方便而充分地利用這些寶貴的信息資源。資料庫技術所研究的問題就是如何科學地組織和存儲數據,如何高效地獲取和處理數據。資料庫系統就是當代計算機系統的重要組成部分。
數據處理的中心問題是數據管理,數據管理隨著計算機硬體和軟體的發展而不斷發展,經歷了三個階段:人工管理階段,文件系統階段和資料庫系統階段。資料庫系統具有以下特點:(1)數據結構化。(2)數據的共享性高、冗餘度低、易擴展。(3)數據獨立性高。(4)數據由DBMS統一管理和控制。包括數據的安全性保護,數據的完整性檢查,並發控制以及資料庫備份和恢復[2]。我做的圖書管理系統中主要是用了Delphi和SQL 。
1.2 Delphi的簡介
計算機軟體的開發分為兩個不同的分支,其中一個分支是使用傳統的程序設計語言開發數值控制、數值運算等軟體,圍繞它們的重點是演算法,數據結構以及面向對象技術,這里基本採用Pascal,Basic和C等到高級程序設計語言。另一個分支則是通用的資料庫管理軟體領域即資料庫應用程序的開發。這兩個分支的發展都有極為迅速,但是二者並沒出現混合滲透的跡象。如果使用資料庫語言進行傳統的編程,雖然也能完成相應的功能,但是其編程過程可能極為復雜。反之,如果使用傳統的編程語言進行資料庫編程,通過調用專用的資料庫應用程序介面函數據和過程,可能也會做出比較完善的資料庫管理程序,但做起來大多是極其困難的。而Delphi結合了兩個分支的優點,它結合了傳統的編程語言Object Pascal和資料庫語言的強大功能,既可以用於傳統的演算法編程,又可以用於資料庫編程。特別是Delphi具有強大的資料庫開發功能,利用Delphi的資料庫開發工具,根本不需要編寫任何Object Pascal代碼便可以創建一個一般的資料庫應用。
Delphi是面向對象的開發工具,它是目前開發客戶/伺服器資料庫應用程序的強有力的工具。Delphi目前有兩個版本:標准版本和客戶/伺服器版本。標准版本包含一個Borland Database Engine的局部拷貝,它允許用戶創建能訪問Dbase,Paradox 和 Local Inter Base伺服器的資料庫應用,它還支持具有ODBC(Open Database Connecticity)介面的資料庫。客戶/伺服器版本包括Borland SQL Link,它能直接訪問Oracle,SyBase 和Microsoft SQL Server,Informix等多種資料庫伺服器。
Delphi可以訪問多種資料庫管理系統的資料庫,憑借窗體和報表,BDE(Borland Database Engine)可以訪問Paradox,dbase,本地Inter Base伺服器的資料庫,也可以訪問遠程資料庫伺服器的
2 系統分析
2.1 系統調查
系統調查的主要內容有:系統的基本情況、系統中信息處理的狀況、系統的資源情況及系統的各類人員對信息系統的態度。同時我了解到圖書館的使用人員有(1)系統管理員:維護整個系統的正常運行、及時更新系統,給每個新用戶建立讀者信息,給每個注銷用戶刪除相應的讀者信息。(2)圖書管理員:負責給同學辦理借書、還書、修改圖書基本信息和圖書流通狀態。(3)讀者:包括學生用戶、老師用戶和外界人士。
圖書館的組織機構設置如圖1所示。
圖1圖書館的組織結構
系統中信息處理狀況:
通過對原有系統數據流程的分析,可以發現這種模式存在著一些不合理之處,完全可以改進,使工作效率提高,減少信息迂迴。
圖書館現行系統存在的問題:第一,日常管理工作缺乏規范性,隨意性很大,對人的經驗水平有很大的依賴性,因此具體操作往往因人而異;第二,資料多次手工處理,如逾期通知等,出錯率高,完全可以用資料庫檢索自動生成。第三,數據重復率高,有些地方人員多次使用相同數據,有些信息完全可以歸類,第四,缺乏統計工作。
所以完全可以通過建立一套完整的圖書管理信息系統,來對信息進行查詢、修改、統計、檢索等日常管理工作,盡量減少的人員介入和數據冗餘,以簡練實用為基礎,實現信息管理計算機化提高工作效率和信息化水平。
2.2 可行性分析
可行性分析對系統的開發至關重要,可以大幅減少不必要的損失,保證系統開發的順利進行。因此要對系統進行技術可行性、經濟可行性、操作可行性三方面的系統可行性分析:
2.2.1 技術可行性
近幾年來計算機技術發展異常迅猛,高速度大容量的電腦已成為許多學校里日常工作必不可少的設備,隨著辦公自動化的軟體不斷涌現,微機的普及為該系統的開發奠定了堅實的基礎。
2.2.2 經濟可行性
一方面,系統的開發不需要額外增加設備購置費、軟體開發費、管理和維護費用。另一方面,系統的開發可以較好地解決圖書館因日常事務繁雜而造成的處理效率低,出錯率偏高的局面,並可以及時了解各項日常事務的進展情況,為及時調整庫存資料提供可靠的數據支持,從而明確工作目標,同時還可以減少人工勞動、提高工作效率、增加書本流通量。
2.2.3 操作可行性
計算機以強大的信息處理能力作為人類腦力勞動的有利助手登上歷史舞台後,已滲透到社會生活的各個領域,使現代社會組織、特別是企業,學校的信息處理能力適應現代化管理的要求,且系統逐步從單項事務信息處理系統迅速向綜合服務(決策支持系統)的管理信息系統發展。本系統使用界面良好,易於操作。圖書館擁有一批較高素質的員工,只需了解相關知識,就可熟練操作本系統了。
通過以上分析,圖書館管理信息系統的開發在經濟上、技術上、操作上都是可行的。
2.3 系統的總目標
圖書館管理信息系統的總目標是按照管理信息系統的管理和開發方法,採用先進的信息技術和手段,支持並規范圖書和讀者資料的管理、借書、還書、修改密碼、查詢書本或學生等操作的全過程,並加強上述過程中各種信息資源的管理和應用,提高各部門管理工作的現代化水平,實現各部門信息的准確、及時處理和溝通及共享,為圖書館對庫存資料的決策提供有利的支持和反饋信息,以實現圖書館的總體目標。
2.4 具體目標
(1)每年開學,新生報到的時候,圖書館系統管理員要給每一位新生的信息建立個人檔案,辦理圖書借閱證。學生的個人檔案包括學生的學號、姓名、性別、班級、年級、所屬專業、電話號碼。
(2)學生畢業的時候,圖書館系統管理員要及時對每位學生的信息進行刪除。
(3)每次新進圖書的時候,圖書管理員要對每本圖書的信息進行管理和錄入,以方便讀者的借閱。圖書的基本信息有:圖書索引號、圖書名、作者、出版社、出版日期和圖書的使用狀態。
(4)當圖書被讀者借閱的時候,圖書管理員要改變圖書的使用狀態,不再允許借閱,但是允許預約,而且每本書只允許被一個讀者借閱,也只能被一個讀者預約。
(5)當學生借閱的圖書延期的時候,圖書管理員要及時通知學生歸還圖書,並對其進行相應的處罰。學生可以在圖書未超期的情況下辦理續借。
(6)學生可以在圖書管理系統中查詢自己的借閱情況。
(7)當圖書被損壞或圖書出館時,圖書管理員要及時修改相應的圖書信息。
(8)系統還應該提供強大的數據統計,查詢等功能。
(9)系統應充許外界人士通過規定的步驟注冊成為新用戶,並享有一定的權利。
(10)系統應該有很好的可擴展性。
3 需求分析
需求分析階段的根本任務是要明確圖書館在決策和日常事務處理上的信息需求,以便提出整個系統的總體方案。在需求分析中,主要採用流程圖和數據字典來描述。
3.1 事務流程圖
通過對圖書館的多次調查,大致了解了圖書館的日常的管理事務流程。每日處理的工作如圖2所示。
圖2圖書館的事務圖
(1) 圖書資料的管理
圖書管理員將采購的圖書入庫分類處理,同時建立相關的圖書資料信息,如果該書已有,則修改現有書本數等於原有書本數加新增書本數。如有圖書損壞及罰款處理,也修改圖書資料信息。如果圖書出館,則刪除相關的圖書資料信息。
(2) 讀者資料管理
每年新生入校的時候,系統管理員要為每一個學生辦理相應的圖書借閱許可證,學生填寫登記表包括學生學號、姓名、性別、年級、班級、專業名稱、電話號碼等基本信息。核對無誤後交由系統管理員辦理學生借閱證,如果讀者更改任何個人信息,則應由學生寫出書面申請,由系統管理員在相應的讀者基本信息中進行修改。如果學生要離開學校,則審核該讀者是否有逾期書籍和損壞,如無,則辦理撤消業務,同時在讀者資料庫中刪除該讀者。最後給讀者合格注銷通知。對於教師用戶也是一樣的處理過程。
(3) 借書操作
讀者把借閱證及想要借的圖書交給圖書管理員,圖書管理員進行審核,如該讀者是否有過期未還的圖書,是否借閱圖書已超過五本或未交清罰款,有上述情況之一則通知該讀者借閱不成功。否則借閱成功,圖書交給讀者。同時圖書管理員修改圖書、讀者及圖書流通信息表。如讀者逾期則可電話聯系。如讀者發現該圖書已借出,則只可在圖書資料庫中進行預約。一本書同一時間只能被一個讀者預約。如讀者續借,則延長讀者應還書日期。讀者只可在該書本尚未超期的情況下才可以進行續借,否則續借不成功。
(4) 還書操作
讀者把借閱證及要還圖書交給圖書管理員,由他進行審核,如該圖書有逾期或破損,則通知該讀者按比例罰款。否則圖書交圖書管理員放回書庫。並修改圖書、讀者借書信息表。讀者遺失書本則給予原價五倍賠償。
(5) 查詢處理
讀者可以到圖書館內的電腦上查詢自己的借書信息表,查詢圖書是否逾期,是否可以進行續借,也可以查找自己要借的圖書是否在館,以及近期圖書館的動態和公告。圖書管理員可在圖書到期前一天列印逾期清單,電話聯系讀者,以方便讀者及時還書,加快書本流通。
(6) 修改密碼
為了方便管理,圖書館系統管理員會給每一個新注冊的用戶一個初始密碼,讀者用初始密碼首次登錄系統後,應及時修改自己的密碼,以保護自己的權利。或在使用的過程中通過修改密碼來防
D1 庫存清單
圖7 歸還圖書的DFD
3.3 數據字典
int 4 f 所在專業代碼
varchar 20 專業名稱
表3圖書基本信息表
欄位名 欄位類型 長度 NULL 欄位意義
bookid varchar 10 f 圖書索引號
bookname varchar 30 f 圖書名稱
Autor char 10 f 作者名字
department Int 4 所在書庫代碼
description char 20 描述
Lend char 1 f 是否借出
appoint char 1 f 是否預約
表4學生基本信息
userid varchar 10 f 用戶編號
username varchar 10 f 用戶名
sdepartment char 30 部門或專業
password varchar 20 f 密碼
Right_1 bit 1 f 查詢權
Ringht_2 bit 1 f 管理權
表6庫存信息表
欄位名 欄位類型 長度 NULL 欄位意義
department int 4 f 書庫代碼
description varchar 20 書庫名稱
3.4 數據項的頁碼設計
(1)對讀者編號,為了便於查找採用層次碼。
如:02(年級,即入學年份) 09(學院代碼) 1(專業代碼) 279
[注]: 學院代碼如:商學院---01 信息學院---02 土木學院---03
外語學院---04 藝術學院---05 計算機科學與工程學院---09
計算機科學與工程學院的專業代碼如:計算機科學與技術專業---1
網路專業---2
(2)圖書編號,為了便於得到有關信息採用層次碼。
如:TP(類別) 3111(編號) 01(內部編號)
[注]: 內部編號:同時采購了五本相同的圖書,在類別和編號相同的時候,用01,02,03,04,05分別代表這五本相同的圖書。
編號: 計算機應用基礎---3111 計算機網路---3112
計算機組成原理---3113 資料庫---3114
類別: 計算機類--- TP 文學類--- I 藝術類---V
數理化---O 英語類---H
4 概要設計
4.1 總體設計
系統功能結構如圖8所示。
圖8系統功能結構示意圖
4.2 局部 E_R圖
學生基本信息,圖書基本信息,用戶信息和讀者借書情況表的局部E-R圖如圖9至圖12所示。
圖10書本基本信息表
圖12 讀者借書信息表
4.3 總體E-R圖
本圖書管理信息系統的總體E-R圖如圖13所示。
圖13 總體E-R圖
部分聯系的屬性如下:
1.借閱{借閱編號、圖書索引號、借閱證號、借書日期、還書日期}
2.預訂{預訂編號、圖書索引號、借閱證號、預訂日期}
3.采購{采購編號、圖書索引號、采購價格、采購數量}
4.報廢{圖書索引號,報廢時間,報廢原因}
4.4 E_R圖向關系模型的轉化
E_R圖向關系模型的轉化要解決的問題是如何將實體和實體之間的聯系轉化為關系模式,如何
圖15 修改圖書記錄
圖16 修改學生記錄
圖17 查詢/借閱/預約圖書
圖18 查詢/歸還已借閱圖書
5.2 建立索引和嵌套查詢
索引是資料庫中一常用而重要的資料庫對象集。索引改進了資料庫的性能和可訪問性,可以用來排序和快速訪問數據。大大改善了資料庫的性能。下面以本人的圖書管理信息系統中的book表為被借出時不能被預約。
(8) 修改圖書的基本信息
這是圖書管理員的權力,包括添加,刪除和修改圖書信息。當有新添加進來的圖書時,圖書管理員要查看圖書館里是不是已存有這樣的圖書,發現已有庫存時,要修改圖書的數目,否則就加入新的圖書信息。當有舊書或損壞了的圖書要退出的時候,要及時減少相應圖書的數目或是刪除相應的圖書信息。學生借出書或歸還圖書時,要及時地修改圖書流通信息表。
(9) 修改學生用戶的基本信息
系統管理員在這里添加,刪除和修改學生和教師的基本信息。當有新生入校時,根據學生填寫的基本信息表為每個新生注冊一個用戶名,在校期間如果學生基本信息有變化可以交系統管理員審核後修改相應的信息,畢業或注銷用戶時,管理員要及時刪除相應的記錄。教師的處理情況相同。
(10)初始化系統
當遇到不可恢復的重大意外損傷時系統管理員可以用它來重新恢復圖書館的基本信息,保證圖書管理系統正常工作。除了用戶信息表恢復初始值外,其它的數據信息都會被清零。
(11) 公告欄
系統管理員向所有登錄用戶和外界人士及時發布圖書館最新消息的地方,包括注意事項等。
(12) 意見箱
所有登錄用戶可以在這里向系統管理員和圖書管理員提出對圖書管理的寶貴意見,方便管理員及時採取相應措施修改管理方案,方便用戶以後的使用,提高整個系統的性能。
本系統主要提供圖書管理,學生用戶管理和系統管理。以下列出了圖書管理信息系統主模塊,系統總體結構、圖書/讀者功能模塊和圖書流通功能模塊的示意圖如圖19至圖21所示。
圖19系統總體結構
圖20圖書/讀者功能模塊
圖21圖書流通功能模塊
5.5 界面設計及功能實現
5.5.1 登錄界面設計及功能的實現
圖22 登錄界面
Ⅷ 數據結構實訓做一個圖書管理系統
此答案僅供參考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<malloc.h>
typedef struct
{
char author[10];
char name[20];
char pub[20];
float price;
char ISBN[10];
} DataType;
typedef struct node
{
DataType data;
struct node *next;
}Book;
void Listinitiate(Book **head)
{
*head=(Book*)malloc(sizeof(Book));
(*head)->next=NULL;
}
int luru(Book *head)
{
Book *p,*s;
char tag='Y';
p=head;
while(p->next!=NULL)
{
p=p->next;
}
while(tag=='Y'||tag=='y')
{
s=(Book*)malloc(sizeof(Book));
printf("請輸入圖書的名稱 :\n");
scanf("%s",s->data.name);
printf("請輸入圖書的作者:\n");
scanf("%s",&s->data.author);
printf("請輸入圖書的出版社:\n");
scanf("%s",&s->data.pub);
printf("請輸入圖書的價格:\n");
scanf("%f",&s->data.price);
printf("請輸入圖書的ISBN:\n");
scanf("%s",&s->data.ISBN);
fflush(stdin);
s->next=NULL;
p->next=s;
p=s;
printf("------------添加圖書信息成功!--------------\n");
printf("-------還繼續添加圖書信息嗎?Y OR N-----------\n");
scanf("%c",&tag);
printf("\n");
if(tag=='Y'||tag=='y') continue;
else if(tag=='N'||tag=='n') break;
}
return 1;
}
int chaxun(Book *head)
{
Book *p;
int tag=0;
char nam[20];
printf("請輸入您想查找的圖書名稱!");
scanf("%s",nam);
for(p=head; p!=NULL;p=p->next)
{
if(strcmp(p->data.name,nam)==0)
{
printf("圖書的相關信息如下:\n");
printf("-----圖書的名稱為: %s\n",p->data.name);
printf("-----圖書的作者為: %s\n",p->data.author);
printf("-----圖書的出版社為: %s\n",p->data.pub);
printf("-----圖書的價格為 : %.2f\n",p->data.price);
printf("-----圖書的ISBN為 : %s\n",p->data.ISBN);
tag=1;
}
}
if(tag==0)
{
printf("沒有您查找的圖書的相關信息!\n");
}
return 1;
}
int liulan(Book *head)
{
Book *p;
p=head;
while(p->next!=NULL)
{
p=p->next;
printf("圖書的相關信息如下:\n");
printf("-----圖書的名稱為: %s\n",p->data.name);
printf("-----圖書的作者為: %s\n",p->data.author);
printf("-----圖書的出版社為: %s\n",p->data.pub);
printf("-----圖書的價格為 : %.2f\n",p->data.price);
printf("-----圖書的ISBN為 : %s\n",p->data.ISBN);
}
return 1;
}
int change(Book *head)
{
Book *p;
char nam[20];
printf("請輸入要修改的圖書的名稱!");
scanf("%s",nam);
for(p=head; p!=NULL;p=p->next)
{
if(strcmp(p->data.name,nam)==0)
{
printf("請輸入圖書的新名稱為: ");
scanf("%s",p->data.name);
printf("請輸入圖書的新作者為: ");
scanf("%s",p->data.author);
printf("請輸入圖書的新出版社為: ");
scanf("%s",p->data.pub);
printf("請輸入圖書的新價格為: ");
scanf("%f",&p->data.price);
printf("請輸入圖書的ISBN為: ");
scanf("%s",p->data.ISBN);
}
}
return 1;
}
int del(Book *p0)
{
char nam[20];
int flag=1;
Book *p;
p=p0;
printf("請輸入要刪除的書名:\n");
scanf("%s",&nam);
while(p!=NULL)
{
if(strcmp(p->data.name,nam)==0)
{
p0->next=p->next;
free(p);
printf("\t該書資料已刪除\n");
break;
}
p0=p;
p=p->next;
}
return 1;
}
void caidan()
{
printf(" ==================================================== \n");
printf(" 歡迎進入圖書館管理系統 \n");
printf(" [1]圖書信息錄入 \n");
printf(" [2]圖書信息瀏覽 \n");
printf(" [3]圖書信息查詢 \n");
printf(" [4]圖書信息修改 \n");
printf(" [5]圖書信息刪除 \n");
printf(" [6]退出系統 \n");
printf(" 請選擇:");
fflush(stdin);
}
int main()
{
Book *head;
char choice;
Listinitiate(&head);
for(;;)
{
caidan();
scanf("%c",&choice);
if(choice=='1') {luru(head);}
else if(choice=='2') {liulan(head);}
else if(choice=='3') {chaxun(head);}
else if(choice=='4') {change(head);}
else if(choice=='5') {del(head); }
else if(choice=='6')
{
printf(" ==================================================== \n");
printf("\n 感謝使用圖書管理系統 ! \n");break;
}
else
{
printf(" ================= 輸入錯誤,請重新輸入!====================\n");
}
}
}