新聞中心
數(shù)據(jù)庫(kù)系統(tǒng)是現(xiàn)代信息系統(tǒng)中不可或缺的組成部分。在數(shù)據(jù)存儲(chǔ)和操作方面,數(shù)據(jù)庫(kù)系統(tǒng)對(duì)于保證系統(tǒng)可靠性、數(shù)據(jù)完整性和數(shù)據(jù)安全性具有舉足輕重的地位。然而,在數(shù)據(jù)庫(kù)系統(tǒng)中,大多數(shù)用戶只是使用其提供的高級(jí)操作界面,很少涉及其底層源代碼。本文將從底層理解數(shù)據(jù)存儲(chǔ)與操作入手,介紹數(shù)據(jù)庫(kù)系統(tǒng)的源代碼C。

一、數(shù)據(jù)庫(kù)系統(tǒng)的概述
數(shù)據(jù)庫(kù)系統(tǒng)是一個(gè)完整的數(shù)據(jù)管理系統(tǒng),包括數(shù)據(jù)的存儲(chǔ)、查詢、更新、刪除等功能。當(dāng)前,數(shù)據(jù)庫(kù)系統(tǒng)主要包括關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)和非關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)兩種類型。關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)主要基于SQL語(yǔ)言,使用關(guān)系模型進(jìn)行數(shù)據(jù)存儲(chǔ);非關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)則是指不依賴于關(guān)系模型的數(shù)據(jù)庫(kù),常見的有鍵值存儲(chǔ)、文檔存儲(chǔ)、列存儲(chǔ)等形式。
無(wú)論是關(guān)系型數(shù)據(jù)庫(kù)還是非關(guān)系型數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)系統(tǒng)都是基于數(shù)據(jù)結(jié)構(gòu)和算法實(shí)現(xiàn)的。因此,在對(duì)其進(jìn)行底層的數(shù)據(jù)存儲(chǔ)和操作分析時(shí),需要了解相關(guān)的數(shù)據(jù)結(jié)構(gòu)和算法。
二、數(shù)據(jù)庫(kù)系統(tǒng)的源代碼C
數(shù)據(jù)庫(kù)系統(tǒng)的源代碼是實(shí)現(xiàn)其各種功能的基礎(chǔ)。C語(yǔ)言是目前最為常見的數(shù)據(jù)庫(kù)系統(tǒng)編程語(yǔ)言,其源代碼包括與數(shù)據(jù)結(jié)構(gòu)相關(guān)的頭文件、宏定義和函數(shù)庫(kù)調(diào)用等。
C語(yǔ)言中提供的數(shù)據(jù)結(jié)構(gòu)包括數(shù)組、鏈表、棧、隊(duì)列、樹、圖等,在數(shù)據(jù)庫(kù)系統(tǒng)中,常用的數(shù)據(jù)結(jié)構(gòu)是B樹、哈希表和位圖。其中,B樹是常用的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),用于對(duì)數(shù)據(jù)進(jìn)行分層存儲(chǔ);哈希表則是一種常見的散列技術(shù),用于實(shí)現(xiàn)快速查詢;位圖則是一種非常適合處理二進(jìn)制數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。
三、數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)存儲(chǔ)與操作源代碼解析
1. 數(shù)據(jù)庫(kù)文件的打開和關(guān)閉
數(shù)據(jù)存儲(chǔ)與操作的之一步是打開數(shù)據(jù)庫(kù)文件。在數(shù)據(jù)庫(kù)系統(tǒng)中,使用 fopen() 函數(shù)打開指定的數(shù)據(jù)庫(kù)文件,成功返回文件指針,失敗返回 NULL。成功打開數(shù)據(jù)庫(kù)文件后,需要使用 fclose() 函數(shù)關(guān)閉文件流。
2. 數(shù)據(jù)寫入和讀取
在成功打開數(shù)據(jù)庫(kù)文件后,開始進(jìn)行數(shù)據(jù)的寫入和讀取。數(shù)據(jù)寫入時(shí),先將數(shù)據(jù)寫入到內(nèi)存中,再通過(guò) fwrite() 函數(shù)將內(nèi)存中的數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)文件中。數(shù)據(jù)讀取時(shí),使用 fread() 函數(shù)從數(shù)據(jù)庫(kù)文件中讀取數(shù)據(jù)到內(nèi)存中。
3. B樹的實(shí)現(xiàn)
B樹是數(shù)據(jù)庫(kù)系統(tǒng)中常用的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)。在 C 語(yǔ)言中,可以使用結(jié)構(gòu)體和指針進(jìn)行 B 樹的實(shí)現(xiàn)。常用的結(jié)構(gòu)體定義如下:
typedef struct BtreeNode
{
int num; // 節(jié)點(diǎn)中關(guān)鍵字的個(gè)數(shù)
int keys[MAX_KEY_NUM]; // 關(guān)鍵字?jǐn)?shù)組
struct BtreeNode *son[MAX_KEY_NUM + 1];
int is_leaf; // 是否為葉子節(jié)點(diǎn)
}REE_NODE;
然后,可以采用指針作為 B 樹的操作對(duì)象,實(shí)現(xiàn)節(jié)點(diǎn)的添加、查找和刪除等功能。
4. 哈希表的實(shí)現(xiàn)
哈希表在數(shù)據(jù)庫(kù)系統(tǒng)中是一種常見的散列技術(shù),用于實(shí)現(xiàn)快速查詢。哈希表的實(shí)現(xiàn)需要使用到散列函數(shù)、數(shù)組、鏈表等數(shù)據(jù)結(jié)構(gòu)。
哈希表的基本思路是將數(shù)據(jù)分散到不同的槽中,然后通過(guò)散列函數(shù)將關(guān)鍵字與槽的編號(hào)相對(duì)應(yīng)。在 C 語(yǔ)言中,可以采用結(jié)構(gòu)體和指針實(shí)現(xiàn)哈希表。常用的結(jié)構(gòu)體定義如下:
typedef struct HashNode
{
int key; // 關(guān)鍵字
int value; // 數(shù)據(jù)值
struct HashNode *next;
}HASH_NODE;
然后,可以采用指針作為哈希表的操作對(duì)象,實(shí)現(xiàn)數(shù)據(jù)的插入、查找和刪除等功能。
5. 位圖的實(shí)現(xiàn)
位圖是一種非常適合處理二進(jìn)制數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),在數(shù)據(jù)庫(kù)系統(tǒng)中常用于高效地存儲(chǔ)和查詢標(biāo)志位、狀態(tài)信息等數(shù)據(jù)。
在 C 語(yǔ)言中,可以使用一個(gè) char 類型的數(shù)組來(lái)表示位圖。位圖的基本思路是將數(shù)據(jù)的每一位映射到數(shù)組的一個(gè)元素中,其中每一位由一個(gè)二進(jìn)制數(shù)表示。可以通過(guò)位運(yùn)算等操作實(shí)現(xiàn)對(duì)位圖的添加、刪除、查詢等操作。
四、
數(shù)據(jù)庫(kù)系統(tǒng)的源代碼C是實(shí)現(xiàn)其各種功能的基礎(chǔ)。在數(shù)據(jù)存儲(chǔ)和操作方面,需要掌握相關(guān)的數(shù)據(jù)結(jié)構(gòu)和算法,并對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的源代碼進(jìn)行深入理解。本文從底層理解數(shù)據(jù)存儲(chǔ)與操作入手,介紹了數(shù)據(jù)庫(kù)系統(tǒng)的源代碼C,并對(duì)數(shù)據(jù)庫(kù)文件的打開和關(guān)閉、數(shù)據(jù)寫入和讀取、B 樹的實(shí)現(xiàn)、哈希表的實(shí)現(xiàn)和位圖的實(shí)現(xiàn)等方面進(jìn)行了詳細(xì)解析。相信讀者通過(guò)本文的介紹,可以更好地理解數(shù)據(jù)庫(kù)系統(tǒng)的底層實(shí)現(xiàn)原理,提升其在數(shù)據(jù)庫(kù)系統(tǒng)領(lǐng)域的技術(shù)水平。
相關(guān)問(wèn)題拓展閱讀:
- 急求用C語(yǔ)言編寫的圖書管理系統(tǒng)源代碼
- 用C語(yǔ)言寫了含有數(shù)據(jù)庫(kù)的代碼,寫完了,請(qǐng)問(wèn)怎么運(yùn)行數(shù)據(jù)庫(kù)和代碼,數(shù)據(jù)庫(kù)是oracle的
急求用C語(yǔ)言編寫的圖書管理系統(tǒng)源代碼
圖書信息管理系統(tǒng)VB和P
圖書信息管理系統(tǒng)VB和P
這是我自己設(shè)計(jì)的圖書管理系統(tǒng),包括用VB+MSSQL2023做的C/S版和或顫用P+JAVABEAN+MSSQL2023做的哪團(tuán)纖B/S版,包含B/S 版源碼,C/S版源碼,數(shù)據(jù)庫(kù)中不僅有分離的數(shù)據(jù)庫(kù),而且還有可以用來(lái)建庫(kù)的語(yǔ)句,附帶有比較完整的說(shuō)明穩(wěn)當(dāng),全部給大家了,小弟初學(xué)編程,有什么不足的麻煩指出,JAVABEAN的源碼請(qǐng)用JBUILDER9或JBUILDER2023打開
下載地址:
參李仿考資料:
#include
#include
#include
#include
#include
#define STACK_INIT_SIZE 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
struct student /*定義學(xué)生類巖蘆型,用于存放借出的書籍*/
{
int carnum;
char lendbook;
}student;
struct employ /*定義職工類型*/
{
int employnum;
char employname;
int employage;
char employsex;
char employleve;
long int employtage;
}employ;
struct book /*定義書的類型*/
{
int booknum;
char bookname;
char bookcreat;
int turefalse; /*用于借書和還書模塊判斷一本書是否借出的條件*/
}book;
struct car /*借書卡的數(shù)據(jù)類型*/
{
int carnum;
char studentname;
int studentclass;
}car;
huanbook() /*還書函數(shù)*/
{
FILE *fp,*fp2; /*定義兩個(gè)文件指針,fp2用于修改數(shù)據(jù)時(shí)設(shè)立臨時(shí)文件用,防止數(shù)據(jù)遭破壞*/
int i,n;
int carnum;
char lendbook;
printf(“請(qǐng)你輸入你的卡號(hào)\n”);
scanf(“%d”,&carnum);
fp=fopen(“car.txt”,”r”); /*讀取卡號(hào)記錄*/
for(i=0;fread(&car,sizeof(struct car),1,fp)!=0;i++) /*for循環(huán)判斷卡號(hào)是否存在*/
{
if(car.carnum==carnum) /*卡號(hào)存歷老在,進(jìn)入下一循環(huán)*/
{
n=i;
fclose(fp);
printf(“請(qǐng)輸入你要還的書的名字\n”);
scanf(“%s”,lendbook);
fp=fopen(“record.txt”,”r”);
for(i=0;fread(&student,sizeof(struct student),1,fp)!=0;i++) /*判斷是否借閱了輸入的書*/
{
if(strcmp(student.lendbook,lendbook)==0) /*借閱了該書,進(jìn)入下一循環(huán),否則出錯(cuò)顯示*/
{
fclose(fp);
fp=fopen(“record.txt”,”r”);
fp2=fopen(“bookl.txt”,”w”);
for(i=0;fread(&student,sizeof(struct student),1,fp)!=0;i++)
{
if(strcmp(student.lendbook,lendbook)==0)
{
continue; /*刪除還掉的書的借書記錄*/
}
fwrite(&student,sizeof(struct student),1,fp2); /*寫肢棗升入原來(lái)沒(méi)還的書的記錄*/
}
fclose(fp);
fclose(fp2);
fp=fopen(“record.txt”,”w”);
fp2=fopen(“bookl.txt”,”r”);
for(i=0;fread(&student,sizeof(struct student),1,fp2)!=0;i++)
{
fwrite(&student,sizeof(struct student),1,fp); /*將借書記錄信息寫回*/
}
fclose(fp);
fclose(fp2);
fopen(“bookl.txt”,”w”); /*清臨時(shí)文件的記錄*/
fclose(fp2);
fp=fopen(“book.txt”,”r”);
fp2=fopen(“bookl.txt”,”w”);
for(i=0;fread(&book,sizeof(struct book),1,fp)!=0;i++) /*將書的記錄寫入臨時(shí)文件,防止因?yàn)樾薷男畔⑵茐囊郧暗挠涗?/
{
if(i==n)
{
book.turefalse=1;
fwrite(&book,sizeof(struct book),1,fp2); /*將還的書的原來(lái)狀態(tài)設(shè)為無(wú)人借閱的*/
continue;
}
fwrite(&book,sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen(“book.txt”,”w”);
fp2=fopen(“bookl.txt”,”r”);
for(i=0;fread(&book,sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book,sizeof(struct book),1,fp); /*將臨時(shí)文件寫回*/
}
fclose(fp);
fclose(fp2);
fopen(“bookl.txt”,”w”); /*清臨時(shí)文件*/
fclose(fp2);
printf(“還書完畢,按任意鍵返回\n”);
getch();
return 1;
}
}
printf(“你沒(méi)有借這樣的書,任意鍵返回\n”); /*出錯(cuò)提示*/
fclose(fp);
getch();
return 0;
}
}
printf(“系統(tǒng)沒(méi)這樣的卡,和管理員聯(lián)系,按任意鍵返回\n”); /*出錯(cuò)提示*/
fclose(fp);
getch();
}
findbook()
{
FILE *fp;
char bookname;
int ture,i;
fp=fopen(“book.txt”,”r”);
printf(“請(qǐng)輸入你要查找的書名\n”);
scanf(“%s”,bookname);
for(i=0;fread(&book,sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookname,book.bookname)==0)
{
if(book.turefalse==1)
{
printf(“這本書的詳細(xì)資料是:%d %s %s 此書現(xiàn)在無(wú)人借閱\n按任意鍵返回\n”,book.booknum,book.bookname,book.bookcreat);
}
else {printf(“這本書已經(jīng)有人借出\n”);fclose(fp);return 0;}
fclose(fp);
return FALSE;
}
}
printf(“沒(méi)有你要查詢的書籍\n”);
fclose(fp);
return FALSE;
}
findbook1()
{
FILE *fp;
char bookcreat;
int ture,i;
fp=fopen(“book.txt”,”r”);
printf(“請(qǐng)輸入你要查找的作者名\n”);
scanf(“%s”,bookcreat);
for(i=0;fread(&book,sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(bookcreat,book.bookcreat)==0)
{
if(book.turefalse==1)
{
printf(“這本書的詳細(xì)資料是:%d %s %s 此書現(xiàn)在無(wú)人借閱\n按任意鍵返回\n”,book.booknum,book.bookname,book.bookcreat);
}
else {printf(“這本書已經(jīng)有人借出\n”);fclose(fp);return 0;}
fclose(fp);
return FALSE;
}
}
printf(“沒(méi)有你要查詢的書籍\n”);
fclose(fp);
return FALSE;
}
lendcount()
{
FILE *fp;
int i,n=0;
fp=fopen(“record.txt”,”r”);
for(i=0;fread(&student,sizeof(struct student),1,fp)!=0;i++)
{
printf(“卡號(hào):%d 借出的書籍:%s \n”,student.carnum,student.lendbook);
n=n+1;
}
fclose(fp);
printf(“目前共有%d本書借出\n”,n);
printf(“按任意鍵\n”);
getch();
return n;
}
chabook()
{
char ch5;
do
{
printf(“-歡迎進(jìn)入圖書查詢系統(tǒng)!\n”);
printf(” 1:\n”);
printf(” 2:\n”);
printf(” 0:\n”);
printf(“請(qǐng)輸入0–2,其他輸入非法!\n”);
scanf(“%s”,&ch5);
switch(ch5)
{
case ‘1’:findbook();getch();break;
case ‘2’:findbook1();getch();break;
case ‘0’:break;
default:printf(“無(wú)此操作\n”);getch();break;
}
}while(ch5!=’0′);
return FALSE;
}
lendbook()
{
FILE *fp,*fp2;
int i,n;
int carnum;
printf(“請(qǐng)你輸入你的卡號(hào)\n”);
scanf(“%d”,&carnum);
fp=fopen(“car.txt”,”r”);
for(i=0;fread(&car,sizeof(struct car),1,fp)!=0;i++)
{
if(car.carnum==carnum)
{
n=i;
fclose(fp);
printf(“請(qǐng)輸入你要借閱的書的名字\n”);
scanf(“%s”,student.lendbook);
fp=fopen(“book.txt”,”r”);
for(i=0;fread(&book,sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book.bookname,student.lendbook)==0)
{
if(book.turefalse==0) {printf(“對(duì)不起,此書有人借出,請(qǐng)借其他書\n”);fclose(fp);getch();return;}
else
fclose(fp);
fp=fopen(“record.txt”,”a+”);
student.carnum=carnum;
fwrite(&student,sizeof(struct student),1,fp);
fclose(fp);
fp=fopen(“book.txt”,”r”);
fp2=fopen(“bookl.txt”,”w”);
for(i=0;fread(&book,sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(book.bookname,student.lendbook)==0)
{
book.turefalse=0;
fwrite(&book,sizeof(struct book),1,fp2);
continue;
}
fwrite(&book,sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen(“book.txt”,”w”);
fp2=fopen(“bookl.txt”,”r”);
for(i=0;fread(&book,sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book,sizeof(struct book),1,fp);
}
fclose(fp);
fclose(fp2);
fopen(“bookl.txt”,”w”);
fclose(fp2);
printf(“借書完畢,按任意鍵返回\n”);
getch();
return;
}
}
printf(“不存在這樣的書,任意鍵返回\n”);
fclose(fp);
getch();
return;
}
}
printf(“你的卡號(hào)不存在,請(qǐng)申請(qǐng)新卡,按任意鍵返回\n”);
fclose(fp);
getch();
}
carcount()
{
FILE *fp;
int i,n=0;
fp=fopen(“car.txt”,”r”);
for(i=0;fread(&car,sizeof(struct car),1,fp)!=0;i++)
{
printf(“第%d張卡\n”,i+1,car.carnum,car.studentname,car.studentclass);
n=n+1;
}
fclose(fp);
printf(“目前共有%d本書\n”,n);
printf(“按任意鍵\n”);
getch();
}
delcar()
{
FILE *fp,*fp2;
int i;
int carnum;
char choice;
fp=fopen(“car.txt”,”r”);
fp2=fopen(“bookl.txt”,”w”);
printf(“請(qǐng)輸入你要?jiǎng)h除的卡號(hào)\n”);
printf(“如果你輸入的卡號(hào)存在,系統(tǒng)自動(dòng)刪除該信息!如果不存在,系統(tǒng)不做任何改動(dòng)\n”);
scanf(“%d”,&carnum);
for(i=0;fread(&car,sizeof(struct car),1,fp)!=0;i++)
{
if(car.carnum!=carnum)
{
fwrite(&car,sizeof(struct car),1,fp2);
}
}
fclose(fp);
fclose(fp2);
printf(“是否真的要?jiǎng)h除該卡?刪除后該書籍的所有信息將無(wú)法恢復(fù)《Y/N》\n”);
scanf(“%s”,&choice);
if(choice==’y’||choice==’Y’)
{
fp=fopen(“car.txt”,”w”);
fp2=fopen(“bookl.txt”,”r”);
for(i=0;fread(&car,sizeof(struct car),1,fp2)!=0;i++)
{
fwrite(&car,sizeof(struct car),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen(“bookl.txt”,”w”);
fclose(fp2);
printf(“按任意鍵返回\n”);
getch();
return;
}
else
{
printf(“按任意鍵返回\n”);
getch();
return;
}
}
addcar()
{
FILE *fp;
int i=0;
fp=fopen(“car.txt”,”a+”);
printf(“請(qǐng)你輸入卡號(hào)\n”);
scanf(“%d”,&car.carnum);
printf(“請(qǐng)你輸入學(xué)生姓名\n”);
scanf(“%s”,car.studentname);
printf(“請(qǐng)你輸入班級(jí)\n”);
scanf(“%d”,&car.studentclass);
fwrite(&car,sizeof(struct car),1,fp);
fclose(fp);
printf(“輸入完畢,任意鍵返回\n”);
getch();
}
這是我自己設(shè)運(yùn)襪計(jì)的圖困悄攔書管理系統(tǒng),包括用VB+MSSQL2023做的C/S版和用P+JAVABEAN+MSSQL2023做的B/S版,包含B/S 版源碼,C/S版汪胡
C# 圖書管巧陵激理孝襪系統(tǒng)源汪祥碼
用C語(yǔ)言寫了含有數(shù)據(jù)庫(kù)的代碼,寫完了,請(qǐng)問(wèn)怎么運(yùn)行數(shù)據(jù)庫(kù)和代碼,數(shù)據(jù)庫(kù)是oracle的
你的問(wèn)題不清楚耶!我就了解的內(nèi)容進(jìn)行下分析:
1,數(shù)據(jù)庫(kù)是需要啟動(dòng)服務(wù)器,也就是首先啟動(dòng)服務(wù)器,然后數(shù)據(jù)庫(kù)是在服務(wù)器里面,才能提供服務(wù)。
2,C語(yǔ)言代碼,你寫好了,還只是代碼而已,需要運(yùn)用編譯器,進(jìn)行編譯生成可執(zhí)行文件,就可以運(yùn)行了。
希望能幫到你!
數(shù)據(jù)庫(kù)是啟動(dòng)狀態(tài)就可以了,主要是在你的程序端連接數(shù)據(jù)庫(kù)的語(yǔ)句正確就ok,然后就是正常的生成編譯文件,最后生成程序的可執(zhí)行文件了,和調(diào)試普通程序的步驟是一致的
我只是來(lái)看看不說(shuō)話的
數(shù)據(jù)庫(kù) 系統(tǒng)源代碼c的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫(kù) 系統(tǒng)源代碼c,數(shù)據(jù)庫(kù)系統(tǒng)的源代碼C,從底層理解數(shù)據(jù)存儲(chǔ)與操作,急求用C語(yǔ)言編寫的圖書管理系統(tǒng)源代碼,用C語(yǔ)言寫了含有數(shù)據(jù)庫(kù)的代碼,寫完了,請(qǐng)問(wèn)怎么運(yùn)行數(shù)據(jù)庫(kù)和代碼,數(shù)據(jù)庫(kù)是oracle的的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
文章標(biāo)題:數(shù)據(jù)庫(kù)系統(tǒng)的源代碼C,從底層理解數(shù)據(jù)存儲(chǔ)與操作(數(shù)據(jù)庫(kù)系統(tǒng)源代碼c)
鏈接分享:http://www.5511xx.com/article/coogeip.html


咨詢
建站咨詢
