freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

unix課程設(shè)計(jì)基于中間件的圖書管理系統(tǒng)-在線瀏覽

2024-12-11 06:37本頁面
  

【正文】 和數(shù)據(jù)庫交換數(shù)據(jù) 圖 程序設(shè)計(jì)流程圖 登錄 查詢 管理員 用戶 添加 刪除 借書 還書 續(xù)借 中間件 顯示借閱信息 數(shù)據(jù)庫 服務(wù)器 開始 結(jié)束 7 四、詳細(xì)設(shè)計(jì) 基本套接字系統(tǒng)調(diào)用 【 1】創(chuàng)建套接字 — socket() 應(yīng)用程序在使用套接字前 ,必須擁有一個(gè)套接字 ,系統(tǒng)調(diào)用 socket()向應(yīng)用程序提供創(chuàng)建套接字的手段。 該調(diào)用要接收 3 個(gè)參數(shù),根據(jù)這 3 個(gè)參數(shù)建立一個(gè)套接字,并將相應(yīng)的資源分配給它,同時(shí)返回一個(gè)整型套接字號(hào),只和一個(gè)特定的協(xié)議相聯(lián)系。 domain(協(xié)議族): AF_INET,AF_UNIX,AF_IPX type(類型): SOCK_STREAM,SOCK_DGRAM protocol(協(xié)議): 0讓系統(tǒng)使用指定類型和協(xié)議族上的默認(rèn)協(xié)議。其調(diào)用格式如下 : include sys/ int bind(int sockfd,const struct sockaddr *my_addr, int addrlen)。 my_addr 為本方地址數(shù)據(jù)結(jié)構(gòu)。 1isten()需在 accept()之前調(diào)用 ,其調(diào)用格式如下 : include sys/ int listen(int s,int backlog)。 backlog 定義最大長度的 socket 等待隊(duì)列。 accept()用于使服務(wù)器等待來自某客戶進(jìn)程的實(shí)際連 接。 在面向連接的協(xié)議中 ,該調(diào)用導(dǎo)致本地系統(tǒng)和外部系統(tǒng)之間連接實(shí)際建立。 ③ connect 與 accept 的說明 調(diào)用 accept()后 ,服務(wù)器等待從編號(hào)為 s 的套接字上接受客戶連接請求 ,連接請求是由客戶方的 connect()調(diào)用發(fā)出的。 新的套接字可用于處理服務(wù)器并發(fā)請求。常用的系統(tǒng)調(diào)用有 send()和 recv()。 int recv(int s,void *buf,int len,int flags)。 在處理二進(jìn)制數(shù)據(jù)處理時(shí),后者優(yōu)于前者。如果 s 涉及一個(gè)打開的TCP 連接 ,則該連接被釋放。最好是設(shè)為開機(jī)自動(dòng)啟動(dòng)。其常用法為: mysql [OPTIONS] [database] 常用參數(shù)有: ?, help: 幫助 D, database=DB_name: 指定數(shù)據(jù)庫 h, host=Host_name: 指定主機(jī) u, user=DB_user_name: 指定用戶 p[…], password[=…] : 指定密碼 客戶端命令行 命令行提 示符下輸入: mysql 或 mysql –u root 進(jìn)入 mysql系統(tǒng)。 use database。 create table tbl。 select … from tbl … where … insert … into tbl … values … update … tbl … set … where … delete … from tbl … where … MySQL 開發(fā)接口 不同版本的 MySql有不同的目錄設(shè)置。mysql)。mysql,localhost,root,0,―mydb,0,NULL,0)。mysql,SELECT * FROM person)。mysql)。 } mysql_free_result(result)。mysql)。 ① 數(shù)據(jù)庫 library,如圖 所示 : 圖 12 ② 數(shù)據(jù)庫 library 中的相關(guān)表,如圖 所示: 圖 ③ 數(shù)據(jù)庫 library 中部分表的內(nèi)容,如圖 所示: 圖 13 2)開始時(shí)運(yùn)行服務(wù)器程序 如圖 所示: 圖 服務(wù)器通信過程中如圖 所示: 圖 14 3)運(yùn)行中間件程序 ,如圖 所示: 圖 4)運(yùn)行客戶端程序 ,如圖 所示: 圖 15 5) 實(shí)現(xiàn) 查詢圖書 功能 ,如圖 所示: 圖 6)實(shí)現(xiàn)用戶登錄功能, 且實(shí)現(xiàn)了密碼不回顯功能, 如 所示: 圖 16 7)實(shí)現(xiàn)用戶查詢圖書功能,如圖 所示: 圖 8)實(shí)現(xiàn)用戶借書功能,如圖 所示: 圖 17 9)實(shí)現(xiàn)用戶還書功能,如圖 所示: 圖 10)實(shí)現(xiàn)用戶續(xù)借功能,如圖 所示: 圖 18 11)實(shí)現(xiàn)用戶注銷,如圖 所示: 圖 12)實(shí)現(xiàn)管理員登錄,且實(shí)現(xiàn)了密碼不回顯功能功能,如圖 所示: 圖 13)實(shí)現(xiàn)管理員查詢圖書功能,如圖 所示: 圖 19 14)實(shí)現(xiàn)管理員增加圖書功能,如圖 所示: 圖 15)實(shí)現(xiàn)管理員刪除圖書功能,如圖 所示: 20 圖 刪除圖書 book10 后再查詢改圖書,提示“未找到該圖書”,說明確實(shí)刪除成功,如圖 所示: 圖 16)實(shí)現(xiàn)管理員注銷功能,如圖 所示: 圖 21 17)退出系統(tǒng),如圖 所示: 圖 22 六、設(shè)計(jì)中遇到的問題及解決方法 這是我們第一次學(xué)習(xí)關(guān)于中間件的知識(shí),對(duì)它的具體運(yùn)行只是有一定程度的了解,不是很深刻,在設(shè)計(jì)中由于對(duì) UNIX 知識(shí)的掌握不好,導(dǎo)致初期進(jìn)度是相當(dāng)?shù)穆?,在開始的幾天里差不多就沒有什么進(jìn)度, 后來通過我們小組成員的討論、不斷查閱資料及向老師請教 ,我們開始有了一點(diǎn)點(diǎn)的設(shè)計(jì)思路,設(shè)計(jì)過程中用到的知識(shí)不單單是課本上有的,還有的是課本上沒介紹過的,因此這 就需要我們多方的查閱資料和向老師請教。還有在數(shù)據(jù)庫的建立中,由于其基本程序中不帶有數(shù)據(jù)庫,一次我們必須自己建立一個(gè)數(shù)據(jù)庫來存儲(chǔ)信息,但是我們不知道怎樣在客戶端和主機(jī)程序中插入數(shù)據(jù)庫,以此來存儲(chǔ)圖書信息,在指導(dǎo)老師和同學(xué)的幫助下,還有借助網(wǎng)絡(luò)查了一些資料后終 于解決了這一問題 , 等等。在仔細(xì)研究代碼后,我在管理員增加圖書的代碼后添加了 break 語句,成功的解決了錯(cuò)誤。為了解決這個(gè)錯(cuò)誤,我在客戶端的主菜單部分添加了 ifelse語句,對(duì)字符進(jìn)行判斷和錯(cuò)誤處理,成功的解決了該錯(cuò)誤。 23 七、源程序清單 數(shù)據(jù)庫代碼 編寫腳本文件 ,并在腳本中編寫如下內(nèi)容: create database library。 create table books( id char(10) not null primary key, name char(50) not null, writer char(50), storage char(10) )。 create table admi ( id char(10) not null primary key, name char(50) not null, password char(15) )。 insert into books values (1,book1,a,5)。 insert into books values (3,book3,c,6)。 insert into books values (5,book5,e,9)。 insert into books values (7,book7,g,7)。 insert into admi values (11111,root,123)。 int i=0,j=0,n=0。 strcpy(temp,buf)。 strtok_r(temp,。op)。,amp。 while((tmp=strtok_r(p,amp。 p=NULL。 } i++。 } free(temp)。 MYSQL_RES *result。 int i,j,n=0。 if(mysql_init(amp。 return 1。 if(!mysql_real_connect(amp。 mysql_close(amp。 return 1。 printf(cmd=%s\n,cmd)。mysql,cmd)!=0) { printf(query database wrong!\n)。mysql)。 } if(flag==1) { printf(bbbbbbbbbbbbb\n)。mysql))==NULL) { mysql_free_result(result)。mysql)。 } n=mysql_num_rows(result)。 j=0。 while((row=mysql_fetch_row(result))) { strcat(buf,。 strcat(buf,row[0])。imysql_num_fields(result)。 strcat(buf,row[i])。 } if(flag==1) { printf(aaaaaaaaaaaaaaaaaaaaa\n)。 } mysql_close(amp。 printf(opdb successfully!\n)。 return n。 sprintf(cmd1,select * from borrow where to_days(now())to_days(b_date)30amp。r_id=\%s\,id)。 if((opdb(cmd1,NULL,1)==0)amp。(opdb(cmd2,NULL,1)4)) { sprintf(cmd,update reader set enable=\1\ where id=\%s\,id)。 } else { sprintf(cmd,update reader set enable=\0\ where id=\%s\,id)。 } printf(Check ok!\n)。 struct servent *sp。 char buf[1024]。 if(argc!=1) service=argv[1]。 fprintf(stderr,\t%s server_name!\n,argv[0])。 exit(1)。 exit(5)。 27 exit(6)。sin,sizeof(sin))。 if(bind(s,(struct sockaddr *)amp。 close(s)。 } if(listen(s,5)==1){ fprintf(stderr,Error: listen)。 exit(6)。 if((ns=accept(s,0,0))==1) { // wait a connection */ fprintf(stderr,error: accept)。 } if((pid=fork())==1){ // coned, and then create child proc fprintf(stderr,server: fork error!)。 exit(1)。 wait(0)。 } if(pid==0){ // entered child proccedure close(s)。 MYSQL mysql。 MYSQL_ROW row。 char *info[3]。
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1