導航:首頁 > 文件目錄 > c語言將通訊錄文件導入管理系統

c語言將通訊錄文件導入管理系統

發布時間:2025-01-10 03:10:37

❶ C語言程序設計,通訊錄管理系統

/*【用C語言編寫具有數據插入、修改、刪除、顯示和查詢功能的電話薄管理程序】
1、數據包括:人名、工作單位、電話號碼和E-mail地址。
2、可對記錄中的姓名和電話號碼進行修改。
3、可增加或刪除記錄。
4、可顯示所有保存的記錄。
5、可按人名或電話號碼進行查詢。

另:採用結構體數組和文件系統實現。結構體包括人名、工作單位、電話號碼和E-mail
絕對原創,2010年7月12日晚剛寫完測試通過的,純C語言! */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define szSTR 64
#define fileDB "c:\\contact.txt"

struct CONTACT {
char name[szSTR];/*姓名*/
char unit[szSTR];/*工作單位*/
char tele[szSTR];/*電話*/
char mail[szSTR];/*mail*/
};

typedef struct CONTACT CON;

#define BNAME 1
#define BUNIT 2
#define BTELE 4
#define BMAIL 8
#define BFULL 0xFF
int OPER[5] = {BFULL, BNAME, BUNIT, BTELE, BMAIL};

void input(CON * s, int mask)
{
if(mask & BNAME) { printf("請輸入學生姓名:"); scanf("%s", s->name); }
if(mask & BUNIT) { printf("請輸入工作單位:"); scanf("%s", s->unit); }
if(mask & BTELE) { printf("請輸入聯系電話:"); scanf("%s", s->tele); }
if(mask & BMAIL) { printf("請輸入電子郵件:"); scanf("%s", s->mail); }
}/*end input*/

void show (int id, CON * s)
{
if(!s) return ;
if(id)
printf("%d\t%s\t%s\t%s\t%s\n",
id, s->name , s->unit , s->tele , s->mail );
else
printf("【姓名】%s【工作單位】%s【電話】%s【電郵】%s\n",
s->name , s->unit , s->tele , s->mail );
/*end if*/
}/*end show*/

void regist(void)
{
CON s; FILE * f = 0;
input(&s, BFULL);
f = fopen(fileDB, "ab");
fwrite(&s,sizeof(s),1,f);
fclose(f);
printf("資料已保存!\n");
}/*end regist*/

int browse(char * key, fpos_t * p, CON * s)
{
FILE * f =0; int i = 0, r = 0; CON t;
char * a = 0, * b = 0; fpos_t q;
if(!s) return 0;
f = fopen(fileDB, "rb");
if(!f) {
printf("資料庫暫無記錄\n");
return 0;
}/*end if*/
printf("編號\t姓名\t單位\t電話\t電郵\n");
printf("------------------------------------------------\n");
while(!feof(f)) {
fgetpos(f, &q);
r = fread(&t, sizeof(t), 1, f);
if(r<1)break;
if(t.name[0]==0) continue;
if(key) {
a = strstr(t.name , key);
b = strstr(t.tele , key);
if(a == 0 && b == 0) continue;
}/*end if*/
if(p) *p = q;
if(s) memcpy(s, &t, sizeof(t));
i++;
show(i, &t);
}/*end while*/
fclose(f);
printf("------------------------------------------------\n");
return i;
}/*end browse*/

fpos_t query(CON * s)
{
char key[szSTR]=""; fpos_t p = 0; int r = 0;
printf("請輸入姓名或者電話號碼:");
scanf("%s", key);
r = browse(key, &p, s);
return r?p:-1;
}/*end query*/

void clear(void)
{
FILE * f = 0; CON s;
fpos_t p = query(&s);
if(p<0) return;
f = fopen(fileDB, "rb+");
fsetpos(f, &p);
memset(&s, 0, sizeof(s));
fwrite(&s, sizeof(s),1, f);
fclose(f);
printf("記錄已刪除!\n");
}/*end clear*/

void modify(void)
{
FILE * f = 0; CON s; int cmd = 0;
fpos_t p = query(&s);
if(p<0) return;
f = fopen(fileDB, "rb+");
fsetpos(f, &p);
for(;;) {
show(0, &s);
printf("請選擇:1-姓名;2-工作單位;3-電話;4-電郵;5-保存並退出;6-放棄修改並退出\n");
scanf("%d", &cmd);
switch(cmd) {
case 1:
case 2:
case 3:
case 4:
input(&s, OPER[cmd]);
break;
case 5:
fsetpos(f, &p);
fwrite(&s, sizeof(s), 1, f);
case 6:
fclose(f);
return;
default:
printf("錯誤的操作,請重新輸入。\n");
}/*end case*/
}/*mext*/
}/*end clear*/

int main(void)
{
int cmd = 0; CON s;
for(;;) {
printf("歡迎使用通信簿!請選擇:1-添加;2-查詢;3-刪除;4-修改;5-全部輸出;0-退出\n");
scanf("%d", &cmd);
switch(cmd) {
case 0: return 0;
case 1: regist(); break;
case 2: query(&s); break;
case 3: clear(); break;
case 4: modify(); break;
case 5: browse(0, 0, &s); break;
}//end case
}
return 0;
}

❷ 用c語言編寫通訊錄管理程序

聲明: 非原創

/*個人通訊錄*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct dataWab{
char name[8];
char telephone[16];
char mobile[16];
char address[16];
char unit[16];
struct dataWab *nextPtr;
}; /*自引用結構,用作通訊錄的數據結構*/

typedef struct dataWab DATAWAB;
typedef DATAWAB *DATAWABPTR;
void insertWab(DATAWABPTR*,char[],char[],char[],char[],char[]); /*插入函數*/
void menuWab(void); /*菜單函數*/
void printWab(DATAWABPTR); /*列印所有記錄函數*/
void seekWab(DATAWABPTR,char[]); /*查找函數*/
void deleteWab(DATAWABPTR,char[]); /*刪除函數*/
void modifyWab(DATAWABPTR,char[]); /*修改函數*/
int test(DATAWABPTR); /*測試函數,測試通訊錄內是否有記錄*/
void printone(DATAWABPTR); /*列印單條記錄函數*/
int controlWab(void); /*程序分支控制函數*/

int main()
{
DATAWABPTR startPtr=NULL;
DATAWABPTR tempPtr;
FILE *fileWab;

char menu; /*菜單操作控制變數*/
char insert; /*插入確認控制變數*/
char modifyName[8]; /*查找時的臨時姓名存儲*/
char deleteName[8]; /*刪除時的臨時姓名存儲*/
char tempName[8]; /*臨時姓名存儲*/
char tempTelephone[16]; /*臨時電話存儲*/
char tempMobile[16]; /*臨時手機存儲*/
char tempAddress[16]; /*臨時地址存儲*/
char tempUnit[16]; /*臨時單位存儲*/
char seekName[8]; /*查找時的臨時姓名存儲*/

if(!(fileWab=fopen("wab.dat","rb")))
return 0;
tempPtr=(DATAWABPTR)malloc(sizeof(DATAWAB));
while(fread(tempPtr,sizeof(DATAWAB),1,fileWab)==1){
tempPtr->nextPtr=startPtr;
startPtr=tempPtr;
tempPtr=(DATAWABPTR)malloc(sizeof(DATAWAB));
}
fclose(fileWab);

puts("\n\n\t\t歡迎使用個人通訊錄1.0\n");
menuWab();
menu=getch();

while(menu!='6'){

switch(menu){

case '1':
printWab(startPtr);
break;
case '2':
while(controlWab()){
printf("\n查找姓名:\n#>");
scanf("%s",seekName);
seekWab(startPtr,seekName);
}
break;
case '3':
while(controlWab()){

puts("\n錄入個人信息\n");
printf("姓名:");
scanf("%s",tempName);
printf("\n電話:");
scanf("%s",tempTelephone);
printf("\n手機:");
scanf("%s",tempMobile);
printf("\n地址:");
scanf("%s",tempAddress);
printf("\n單位:");
scanf("%s",tempUnit);
printf("錄入正確請按 1 \n#>");
insert=getch();
if(insert=='1')
insertWab(&startPtr,tempName,tempTelephone,tempMobile,
tempAddress,tempUnit);
}
break;
case '4':
while(controlWab()){
printf("\n刪除姓名\n#>");
scanf("%s",deleteName);
deleteWab(startPtr,deleteName);
}
break;
case '5':
while(controlWab()){
printf("\n修改姓名\n#>");
scanf("%s",modifyName);
modifyWab(startPtr,modifyName);
}
break;
default:
puts("\n\n輸入選項錯誤,請重新輸入\n");
break;
}

menuWab();
menu=getch();
}
if((fileWab=fopen("wab.dat","wb"))==NULL)
return 0;
while(startPtr!=NULL){
fwrite(startPtr,sizeof(DATAWAB),1,fileWab);
startPtr=startPtr->nextPtr;
}
puts("\n\n\t\t謝謝使用個人通訊錄1.0,再見\n");
}

void menuWab(void) /*菜單函數*/
{
puts("\t\t\t主菜單");
puts("**********************************************************");
puts("**********************************************************");
puts("**\t<<-1->>所有記錄\t\t<<-2->>查找記錄\t\t**");
puts("**\t<<-3->>增加記錄\t\t<<-4->>刪除記錄\t\t**");
puts("**\t<<-5->>修改記錄\t\t<<-6->>退出程序\t\t**");
puts("**********************************************************");
puts("**********************************************************");
puts("\n請選擇 1-6");
printf("#>");
}

void insertWab(DATAWABPTR *tempPtr,char temp2Name[],char temp2Telephone[],
char temp2Mobile[],char temp2Address[],char temp2Unit[])
/*插入函數*/

{
DATAWABPTR newPtr;
newPtr=(DATAWABPTR)malloc(sizeof(DATAWAB));
strcpy(newPtr->name,temp2Name);
strcpy(newPtr->telephone,temp2Telephone);
strcpy(newPtr->mobile,temp2Mobile);
strcpy(newPtr->address,temp2Address);
strcpy(newPtr->unit,temp2Unit);

newPtr->nextPtr=*tempPtr;
*tempPtr=newPtr;
}

void printWab(DATAWABPTR printPtr) /*列印函數*/
{
if(!(test(printPtr))){
printf("\n%8s%16s%16s%16s%16s\n","姓名","電話","手機","住址","單位");

while(printPtr!=NULL){
printf("%8s%16s%16s%16s%16s\n",printPtr->name,printPtr->telephone,
printPtr->mobile,printPtr->address,printPtr->unit);
printPtr=printPtr->nextPtr;
}
}
}

void seekWab(DATAWABPTR seekPtr,char tempName[])

/*查找函數*/
{
if(!(test(seekPtr))){
while(seekPtr!=NULL){

if(!(strcmp(tempName,seekPtr->name))){
printone(seekPtr);
seekPtr=seekPtr->nextPtr;
}
else
seekPtr=seekPtr->nextPtr;
}
}
}

void deleteWab(DATAWABPTR deletePtr,char deleteName[])
/*刪除函數*/
{
DATAWABPTR tempPtr,forePtr;
forePtr=deletePtr;
tempPtr=deletePtr->nextPtr;
while(tempPtr!=NULL){
if(!(strcmp(tempPtr->name,deleteName))){
forePtr->nextPtr=tempPtr->nextPtr;
free(tempPtr);
break;
}
else{
forePtr=tempPtr;
tempPtr=tempPtr->nextPtr;
}
}
}

void modifyWab(DATAWABPTR modifyPtr,char modifyName[])
/*修改函數*/
{
if(!(test(modifyPtr))){
while(modifyPtr!=NULL){
if(!(strcmp(modifyName,modifyPtr->name))){
printf("請輸入新姓名:");
scanf("%s",modifyPtr->name);
printf("\n請輸入新電話:");
scanf("%s",modifyPtr->telephone);
printf("\n請輸入新手機:");
scanf("%s",modifyPtr->mobile);
printf("\n請輸入新地址:");
scanf("%s",modifyPtr->address);
printf("\n請輸入新單位:");
scanf("%s",modifyPtr->unit);
break;
}
else
modifyPtr=modifyPtr->nextPtr;
}
}
}

int test(DATAWABPTR testPtr)
{
if(testPtr==NULL)
puts("通訊錄內沒有任何記錄");
else
return 0;
return 1;
}

void printone(DATAWABPTR printone)
{
printf("\n%8s%16s%16s%16s%16s\n","姓名","電話","手機","住址","單位");
printf("%8s",printone->name);
printf("%16s",printone->telephone);
printf("%16s",printone->mobile);
printf("%16s",printone->address);
printf("%16s\n",printone->unit);
}

int controlWab(void)
{
puts("繼續執行請按 1");
if(getch()=='1')
return 1;
return 0;
}
回答者: 慮而後能得 - 助理 二級 2-19 11:36
我來評論>>
提問者對於答案的評價:感激不盡~~評價已經被關閉 目前有 1 個人評價

100% (1) 不好
0% (0)
相關內容
• 救命啊! 哪位高手能幫我用C語言編寫一個通訊錄管理的...
• 3110c 通訊錄的問題
• 索愛510c的電話本備份?
• 6120C的電話本能不能通過什麼方式轉到6500C來
• 關於諾基亞7310c通訊錄顯示姓名的問題~~~
更多關於c語言編寫通訊錄管理程序的問題>>
查看同主題問題:高手 語言 通訊錄 救命 管理 程序
其他回答 共 4 條
分少啊,沒動力,誰會寫啊
回答者: 229273121 - 見習魔法師 三級 2-19 10:16
本人的C++通訊錄程序代碼
#include<iostream>
#include<string>
#include<iomanip>
#include<list>
#include<fstream>
#include<algorithm>
#define SPACE "\t\t\t"
using namespace std;
struct Record{
string name;
string tel;
public:
friend ostream& operator<<(ostream& os,const Record *rec){
return os<<rec->name<<SPACE<<rec->tel<<endl;
};
friend istream& operator>>(istream& is,Record *rec){
is>>rec->name;

is>>rec->tel;
return is;
}
static bool comp(string patten,int type,Record *rec){
switch(type){
case 0: {return rec->name==patten;}break;
case 1: {return rec->tel==patten;}break;
}
return false;
}
static bool isvan(Record *rec){
return (rec->name==""&&rec->tel=="");
}
};
class RecordList:public list<Record*>
{
public:
friend ostream& operator<<(ostream& os,const RecordList &c_rl){
RecordList::const_iterator it=c_rl.begin();
while(it!=c_rl.end()){
os<<*it;
it++;
}
return os;
}
friend istream& operator>>(istream& is,RecordList &rl){
RecordList::const_iterator it;
while(!is.eof()){
Record *prec=new Record;
is>>prec;
if(Record::isvan(prec)) continue;
rl.list<Record*>::push_back(prec);
}
return is;
}
void clear();
iterator erase(iterator pos);
~RecordList(){
this->clear();
}
};
void RecordList::clear(){
RecordList::const_iterator it=this->begin();
while(it!=this->end()){
delete(*it);
it++;
}
this->list<Record*>::clear();
}
RecordList::iterator RecordList::erase(iterator pos){
delete(*pos);
return list<Record*>::erase(pos);
}
class AddressList{
protected:
RecordList recList;
public:
typedef RecordList::iterator Iterator;
//從通信錄中尋找一個記錄
virtual Iterator findRecord(string patten,int type,Iterator from);
virtual void addRecord(Record* rec);
virtual void removeRecord(Iterator it);
virtual void editRecord(Record* rec,Iterator it);
virtual void saveRecords(ostream& os);
virtual void loadRecords(istream& is);
virtual void addRecords(istream& is);
virtual ~AddressList();
const int size() const{return (int)recList.size();}
const void clear(){recList.clear();}
Iterator begin(){return recList.begin();}
Iterator end() {return recList.end();}
};
AddressList::Iterator AddressList::findRecord(string patten,int type,Iterator from){
Iterator it;
it=from;
while(it!=recList.end()){
if(Record::comp(patten,type,*it)){
return it;
}
it++;
}
return it;
}
void AddressList::addRecord(Record* rec){
recList.push_back(rec);
}
void AddressList::removeRecord(Iterator it){
recList.erase(it);
}
void AddressList::editRecord(Record* rec,Iterator it){
delete(*it);
*it=rec;
}

void AddressList::saveRecords(ostream& os){
os<<recList;
}
void AddressList::loadRecords(istream& is){
is>>recList;
}
void AddressList::addRecords(istream& is){
}
AddressList::~AddressList(){
recList.clear();
}
class AddressBook : public AddressList{
protected:
bool isModified;//通信錄是否已被修改還未保存
public:
AddressBook();
virtual ~AddressBook();
//開始通信錄的用戶界面操作
virtual void start();
//菜單處理函數管理程序的用戶界面操作
virtual void handleMenu();
//顯示記錄
virtual void displayRecords();
//查詢記錄
virtual void queryRecord();
//添加記錄
virtual void addRecord();
//保存記錄
virtual void saveRecords();
//讀取記錄
virtual void loadRecords();
//結束程序
virtual void quit();
//清空當前記錄信息
virtual void clear();
protected:
//菜單選擇函數
char menuSelect();
//顯示表頭
void dispTable();
};
AddressBook::AddressBook(){
}
AddressBook::~AddressBook(){;}
char AddressBook::menuSelect(){
char a=0;
cin>>a;
if(a=='y'||a=='Y'){a='1';}
if(a=='n'||a=='N'){a='2';}
return a;
}
void AddressBook::start(){
cout << "\n\t***** 歡迎使用通訊錄管理程序 *****";
handleMenu();
}
void AddressBook::handleMenu(){
cout << "\n\n\t\t\t-- 菜單管理 --\n\n";
cout << "\tA -- 添加人員紀錄 (Add Record)\n"
<< "\tF -- 查詢紀錄 (Find Record)\n"
<< "\tD -- 顯示紀錄 (Display Records)\n"
<< "\tL -- 從文本或標准輸入流中載入紀錄 (Load Records)\n"
<< "\tC -- 清空當前記錄信息\n"
<< "\tS -- 保存記錄 (Save Records)\n"
<< "\tQ -- 結束程序 (QUIT)\n";
switch(menuSelect()){

case 'A':
case 'a':addRecord();break;
case 'F':
case 'f':queryRecord();break;
case 'D':
case 'd':displayRecords();break;
case 'L':
case 'l':loadRecords();break;
case 'C':
case 'c':clear();break;
case 'S':
case 's':saveRecords();break;
case 'Q':
case 'q':quit();break;
}
handleMenu();

}
void AddressBook::displayRecords(){
cout<<"姓名"<<SPACE<<"電話"<<endl;
AddressList::saveRecords(cout);
cout<<"一共找到"<<size()<<"個對象。"<<endl;
cout<<"1"<<SPACE<<"返回"<<endl;
cout<<"2"<<SPACE<<"修改"<<endl;
cout<<"3"<<SPACE<<"刪除"<<endl;
switch(menuSelect()){
case '1':break;
case '2':{
if(!size()){
cout<<"記錄為0,無法修改。"<<endl;
break;
}
cout<<"要修改第幾個?"<<"1~"<<size()<<endl;
int i;
cin>>i;
if(i<1||i>size()){
break;
}
Record *prec=new Record;
cout<<"姓名:"<<'\n'<<"電話:"<<'\n';
cin>>prec;
Iterator it=recList.begin();
while(i!=1){
it++;
i--;
}
editRecord(prec,it);
}break;
case'3':{
if(!size()){
cout<<"記錄為0,無法修改。"<<endl;
break;
}
cout<<"要刪除第幾個?"<<"1~"<<size()<<endl;
int i;
cin>>i;
if(i<1||i>size()){
break;
}
Iterator it=recList.begin();
while(i!=1){
it++;
i--;
}
removeRecord(it);
}break;
}
}
void AddressBook::addRecord(){
string name,tel;
cout << "\n輸入名字: ";
cin >> name;
cout << "輸入電話: ";
cin >> tel;
Record* temp=new Record;
temp->name=name;
temp->tel=tel;
AddressList::addRecord(temp);
cout<<"是否繼續(Y/N)"<<endl;
switch(menuSelect()){
case '1':addRecord();break;
case '2':break;
}
}
void AddressBook::queryRecord(){
cout<<"1"<<SPACE<<"按姓名查找"<<endl;
cout<<"2"<<SPACE<<"按電話查找"<<endl;
int type=-1;
string patten;
switch(menuSelect()){
case '1':{
type=0;
cout<<"請輸入姓名"<<endl;
cin>>patten;
}break;
case '2':{
type=1;
cout<<"請輸入電話號碼"<<endl;
cin>>patten;
}break;
}
Iterator it=begin();
list<Iterator> li;
cout<<"姓名"<<SPACE<<"電話"<<endl;
while((it=findRecord(patten,type,it))!=end()){
cout<<*it;
li.push_back(it);
it++;
}
cout<<"一共找到"<<li.size()<<"個對象。"<<endl;
cout<<"1"<<SPACE<<"返回"<<endl;
cout<<"2"<<SPACE<<"修改"<<endl;
cout<<"3"<<SPACE<<"刪除"<<endl;
switch(menuSelect()){
case'1':break;
case'2':{
if(!li.size()){
cout<<"記錄為0,無法修改。"<<endl;
break;
}
cout<<"要修改第幾個?"<<"1~"<<li.size()<<endl;
int i;
cin>>i;
Record *prec=new Record;
cout<<"姓名:"<<'\n'<<"電話:"<<'\n';
cin>>prec;
list<Iterator>::const_iterator it=li.begin();
while(i!=1){
it++;
i--;
}
editRecord(prec,*it);
}break;
case'3':{
if(!li.size()){
cout<<"記錄為0,無法修改。"<<endl;
break;
}
cout<<"要刪除第幾個?"<<"1~"<<li.size()<<endl;
int i;
cin>>i;
list<Iterator>::const_iterator it=li.begin();
while(i!=1){
it++;
i--;
}
removeRecord(*it);
}break;
}
}
void AddressBook::saveRecords(){
cout<<"1"<<SPACE<<"使用默認文件名。"<<endl;
cout<<"2"<<SPACE<<"使用自定義文件名。"<<endl;
cout<<"3"<<SPACE<<"返回"<<endl;
switch(menuSelect()){
case '1':{
ofstream file("default",ios::app);
AddressList::saveRecords(file);
file.close();
}break;
case '2':{
cout<<"請輸入您定義的文件名:"<<endl;
string fname;
cin>>fname;
ofstream file(fname.c_str(),ios::app);
AddressList::saveRecords(file);
file.close();
}break;
case '3':break;
}

}
void AddressBook::loadRecords(){
cout<<"1"<<SPACE<<"使用默認文件。"<<endl;
cout<<"2"<<SPACE<<"使用自定義文件。"<<endl;
cout<<"3"<<SPACE<<"返回"<<endl;
switch(menuSelect()){
case '1':{
cout<<"1"<<SPACE<<"覆蓋當前內容"<<endl;
cout<<"2"<<SPACE<<"追加到當前文件"<<endl;
switch(menuSelect()){
case '1':
AddressList::clear();break;
case '2':break;
}

ifstream file("default");
AddressList::loadRecords(file);
file.close();
}break;
case '2':{
cout<<"請輸入文件名:"<<endl;
string fname;
cin>>fname;
ifstream file(fname.c_str());
AddressList::loadRecords(file);
file.close();
}break;
case '3':break;
}
}
void AddressBook::clear(){
cout<<"是否要清除內存中所有內容?(Y/N)"<<endl;
switch(menuSelect()){
case '1':AddressList::clear();break;
case '2':break;
}
}
void AddressBook::quit(){
cout<<"是否要保存文件?(Y/N)"<<endl;
switch(menuSelect()){
case'1':saveRecords();break;
case'2':break;
}
exit(0);
}

int main(int argc, char *argv[])
{
AddressBook a;
a.start();
system("PAUSE");
return EXIT_SUCCESS;

}

閱讀全文

與c語言將通訊錄文件導入管理系統相關的資料

熱點內容
電商網站叫什麼名字好 瀏覽:726
win1014393更新 瀏覽:751
電腦計算器文件類型是多少 瀏覽:671
wsdl地址生成wsdl文件 瀏覽:798
系統會同時保存多少文件夾 瀏覽:63
勞務費app怎麼申請繳稅 瀏覽:575
dw最新版本如何建立網站 瀏覽:799
wps表格怎樣取消密碼設置密碼 瀏覽:135
老黃歷哪個網站好 瀏覽:316
rar是文件怎麼打開 瀏覽:395
java開發app的架構 瀏覽:865
ppt怎麼放音頻文件 瀏覽:874
app被騙錢怎麼找回 瀏覽:813
型動app怎麼做教練 瀏覽:364
雪佛蘭車載app怎麼樣 瀏覽:133
637的微信版本如何建百人群 瀏覽:41
外梯形螺紋怎麼編程 瀏覽:986
vs2010vb工具箱 瀏覽:938
win10重裝多少錢 瀏覽:662
資料庫系統由什麼什麼等構成 瀏覽:413

友情鏈接