手機短信管理系統(tǒng)設(shè)計_第1頁
手機短信管理系統(tǒng)設(shè)計_第2頁
手機短信管理系統(tǒng)設(shè)計_第3頁
手機短信管理系統(tǒng)設(shè)計_第4頁
手機短信管理系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

圖4-1主函數(shù)流程圖圖4-1主函數(shù)流程圖程序截圖圖4-2主界面截圖圖4-1主界面流程圖圖4-2主界面截圖圖4-1主界面流程圖源代碼/*項目名稱:短信管理系統(tǒng)實施時間:2021年12月22日創(chuàng)建人:郭成*///調(diào)用預(yù)處理#include"stdio.h"http://標(biāo)準(zhǔn)輸入輸出#include"stdlib.h"http://常用的系統(tǒng)函數(shù)//函數(shù)聲明voidAddressbookmenu();//通訊錄voidMessagemenu();//短信//主函數(shù)voidmain(){ charfilename[20];//文件名變量 inti; system("title短信管理系統(tǒng)");//設(shè)置cmd窗口標(biāo)題system("color3B");//背景湖藍(lán),字體白 do { system("cls");//清屏 printf("nowdatetime:\n"); system("date/T");//調(diào)用系統(tǒng)日期system("TIME/T");//調(diào)用系統(tǒng)時間 printf("\n\n\n"); printf("\n\t\t\t\n"); printf("\t\t\t*==============短信管理系統(tǒng)==============*\n"); printf("\n\t\t\t\n"); printf("\t\t**\n"); printf("\t\t***1.通訊錄***\n"); printf("\t\t***2.短信***\n"); printf("\t\t**\n"); printf("\t\t********************\n"); printf("\t\t***0.退出系統(tǒng)***\n"); printf("\t\t**************\n"); printf("\n\t\t\t\n"); printf("\t\t\tYIBIN printf("\n\t\t\t\n"); scanf("%d",&i); switch(i) { case1:system("cls");Addressbookmenu();break;//case1調(diào)用addressbookmenu函數(shù) case2:system("cls");Messagemenu();break;//case2調(diào)用messagemenu函數(shù) case0:break;//case0退出 default:printf("錯誤選擇!請重選");break; //default:break;一般用在switch語句里面,它的作用是在比較i和下面的1、2之后都不一致就執(zhí)行。當(dāng)然如果都不滿足也可以不去做任何事,所以就可以省略不用 } }while(i!=0);//當(dāng)i不等于0循環(huán)}通訊錄流程圖開始開始讀出功能代號添加刪除修改查看顯示關(guān)閉123456結(jié)束退出通訊錄(圖4-3)通訊錄流程圖添加功能:錄入新的聯(lián)系人數(shù)據(jù),姓名、號碼、類型、郵箱。開始開始讀入編號錄入數(shù)據(jù)錄入數(shù)據(jù)失敗返回主菜單保存編號重復(fù)YN錄入成功YN(圖4-4)添加功能流程圖刪除功能:輸入編號,對其信息進行刪除。開始開始讀入編號刪除刪除失敗返回主菜單保存有此編號NY(圖4-4)刪除功能流程圖修改功能:輸入編號,對其信息進行修改。開始開始讀入編號修改修改失敗返回主菜單保存有此編號NY(圖4-5)修改功能流程圖查看:輸入編號,顯示出此編號的姓名、號碼、類型、郵箱。開始開始打開文件輸入編號沒有此編號返回主菜單顯示信息有此編號NY(圖4-6)顯示功能流程圖程序截圖(圖4-7)通訊錄主界面截圖(圖4-8)添加功能截圖(圖4-9)修改功能截圖(圖4-10)顯示功能截圖源代碼/*項目名稱:短信管理系統(tǒng)實施時間:2021年12月22日創(chuàng)建人:郭成*/#include"stdio.h"#include"stdlib.h"#include"string.h"http://定義結(jié)構(gòu)體類型typedefstructPatient_Info//typedef自定義結(jié)構(gòu)體類型PatientInfo,可以用PatientInfo來定義變量{ intnumber;//編號 charname[8];//姓名 charphonecode[20];//號碼 chargroup[10];//類型 charemail[20];//郵箱 charcontent[200];//短信內(nèi)容}PatientInfo;//局部函數(shù)聲明staticvoidInsert(char[]);staticvoidSearch(char[]);staticvoidUpdate(char[]);staticvoidDelete(char[]);staticvoidShow(char[]);//主菜單voidAddressbookmenu(){ charfilename[20];//文件名變量 inti; charAdd[]="Addressbook.dll";//指定文件 strcpy(filename,Add); do { printf("\nnowdatetime:\n"); system("date/T");system("TIME/T"); printf("\n\n\n"); printf("\t\t*==============手★機★通★訊★錄★管★理★系★統(tǒng)==============*\n"); printf("\t\t**\n"); printf("\t\t*1.添加聯(lián)系人2.刪除聯(lián)系人*\n"); printf("\t\t*3.修改聯(lián)系人4.查看聯(lián)系人*\n"); printf("\t\t*5.顯示所有聯(lián)系人6.關(guān)閉通訊錄*\n"); printf("\t\t**\n"); printf("\t\t********************\n"); printf("\t\t**請輸入序號**\n"); printf("\t\t********************\n"); printf("\t\t*==============================================================*\n"); scanf("%d",&i); fflush(stdin);//清空輸入緩存,以便不影響后面輸入的東西 switch(i) { case1:system("cls");Insert(filename);break; case2:system("cls");Delete(filename);break; case3:system("cls");Update(filename);break; case4:system("cls");Search(filename);break; case5:system("cls");Show(filename);break; case6:break; default:printf("錯誤選擇!請重選");break; } }while(i!=6);}//添加聯(lián)系人voidInsert(charFilename[]){ /* 函數(shù)說明:對指定文件名進行數(shù)據(jù)的插入 形參說明:數(shù)組作為形參,實參必須是一個地址,用于傳遞文件名 調(diào)用位置:addressbookmenu函數(shù) 創(chuàng)建人:郭成 創(chuàng)建日期:12月22日 */ intin_number; PatientInfoP;//定義一個信息的變量 intflag=1; FILE*fp; fp=fopen(Filename,"r");//以只讀方式打開文件,第一個參數(shù):文件名,第二個參數(shù)是打開方式,a表示追加寫方式,w表示覆蓋寫,r表示只讀方式,返回值是一個文件指針 printf("請根據(jù)以下提示信息操作:"); printf("\n編號:");//先查重,再追加插入 scanf("%d",&in_number); while(!feof(fp)&&flag)//feof表示endoffile,表示文件末尾,true表示文件末尾,否則不是文件末尾。&&flag表示還未查找到 { if(fread(&P,sizeof(PatientInfo),1,fp))/*fread是文件輸出函數(shù),從文件中讀取一條聯(lián)系人信息放入P變量中,第一個參數(shù)是目標(biāo)變量的地址, 第二個參數(shù)是讀取的長度單位,第三個參數(shù)是讀取幾個單位,第四個參數(shù)是要讀取的文件,返回值為1表示成功,否則表示失敗*/ { if(P.number==in_number) { printf("\n該編號已存在,自動取消錄入!\n"); flag=0; } } } fclose(fp);//關(guān)閉文件以便追加記錄 if(flag) { fp=fopen(Filename,"a");//以追加方式打開文件準(zhǔn)備追加 } else return; P.number=in_number; printf("請輸入姓名:"); scanf("%s",P.name); printf("請輸入:"); scanf("%s",&P.phonecode); printf("請輸入類型:"); printf("存儲類別:(A.辦公類B.個人類C.商務(wù)類)"); scanf("%s",P.group); printf("請輸入"); fflush(stdin);//清空輸入緩存,以便不影響后面輸入的東西 scanf("%s",P.email);printf("\n"); if(fwrite(&P,sizeof(PatientInfo),1,fp)!=1)/*fwrite是文件寫函數(shù),從P變量中向文件中寫入一條短信信息,第一個參數(shù)是來源變量的地址, 第二個參數(shù)是寫的長度單位,第三個參數(shù)是寫幾個單位,第四個參數(shù)是要寫的文件*/ { printf("輸入數(shù)據(jù)失敗,請重新輸入!"); } else printf("\n添加成功!"); fclose(fp);}voidSearch(charFilename[]){ /* 函數(shù)說明:從指定文件中查找數(shù)據(jù) 形參說明:數(shù)組作為形參,實參必須是一個地址,用于傳遞文件名 調(diào)用位置:addressbookmenu函數(shù) 創(chuàng)建人:郭成 創(chuàng)建日期:12月22日 */ intin_number; PatientInfoP; intflag=1; FILE*fp; fp=fopen(Filename,"r"); printf("\n請根據(jù)以下提示信息操作:"); printf("\n編號:"); scanf("%d",&in_number); system("cls"); while(fread(&P,sizeof(PatientInfo),1,fp)&&flag)//fread是文件輸出函數(shù),返回值為1表示讀成功 { if(P.number==in_number) { printf("\n\t\t\t\n"); printf("\n\t\t\t|編號\t|姓名\t|\t\t|類型\t|郵箱\t\t\t|"); printf("\n\t\t\t|%d\t",P.number); printf("%s\t",P.name); printf("%s\t",P.phonecode); printf("%s\t",P.group); printf("%s\t|",P.email); printf("\n\n\t\t\t聯(lián)系人%s的信息已顯示出來!\n",P.name); printf("\t\t\t"); flag=0; } } fclose(fp); if(flag) { printf("沒有你要找的聯(lián)系人!"); }}voidUpdate(charFilename[])//{ /* 函數(shù)說明:修改指定文件中的數(shù)據(jù) 形參說明:數(shù)組作為形參,實參必須是一個地址,用于傳遞文件名 調(diào)用位置:addressbookmenu函數(shù) 創(chuàng)建人:郭成 創(chuàng)建日期:12月22日 */ intin_number; PatientInfoP; intflag=1; FILE*fp,*fptemp;//必須兩個文件操作,fp是數(shù)據(jù)源文件,fptemp是臨時文件,修改后的數(shù)據(jù)臨時放入該文件中 fp=fopen(Filename,"r");//文件讀 fptemp=fopen("temp.txt","w");//文件寫 printf("\n修改聯(lián)系人信息"); printf("\n請輸入你要修改的聯(lián)系人的編號:");//先查詢,再修改 scanf("%d",&in_number); while(fread(&P,sizeof(PatientInfo),1,fp))//文件讀 { if(P.number==in_number)//讀出修改 { P.number=in_number; printf("請輸入姓名:"); scanf("%s",P.name); printf("請輸入:"); scanf("%s",&P.phonecode); printf("請輸入類型:"); printf("存儲類別:(A.辦公類B.個人類C.商務(wù)類)"); scanf("%s",P.group); printf("請輸入"); fflush(stdin);//清空輸入緩存,以便不影響后面輸入的東西 scanf("%s",P.email); printf("\n"); flag=0; } fwrite(&P,sizeof(PatientInfo),1,fptemp);/*找沒找到都往臨時文件中寫,因為對文件操作只有追加和覆蓋寫兩種方方式, 因此修改中間某條記錄不方便,只能引入第二個文件或者放入數(shù)據(jù)、鏈表中*/ printf("\n修改成功!"); } fclose(fp); fclose(fptemp); if(flag) { printf("沒有你要查詢的結(jié)果!"); } else { fptemp=fopen("temp.txt","r");//從臨時文件中讀 fp=fopen(Filename,"w");//往源文件中覆蓋寫 while(fread(&P,sizeof(PatientInfo),1,fptemp)) { fwrite(&P,sizeof(PatientInfo),1,fp);//從臨時文件中回寫 } fclose(fp); fclose(fptemp); }}voidDelete(charFilename[])//{ /* 函數(shù)說明:刪除指定文件中的某條數(shù)據(jù) 形參說明:數(shù)組作為形參,實參必須是一個地址,用于傳遞文件名 調(diào)用位置:addressbookmenu函數(shù) 創(chuàng)建人:郭成 創(chuàng)建日期:12月22日 */ intin_number; PatientInfoP; intflag=1; FILE*fp,*fptemp; fp=fopen(Filename,"r"); fptemp=fopen("temp.txt","w"); printf("\n請輸入你想要刪除的聯(lián)系人的編號:");//先查詢,再刪除 scanf("%d",&in_number); while(fread(&P,sizeof(PatientInfo),1,fp)) { if(P.number!=in_number)//如果找到要刪除的記錄則不寫,否則都要寫 fwrite(&P,sizeof(PatientInfo),1,fptemp); else flag=0; } fclose(fp); fclose(fptemp); if(flag) { printf("沒有你要刪除的編號!"); } else { fp=fopen(Filename,"w"); fptemp=fopen("temp.txt","r"); while(fread(&P,sizeof(PatientInfo),1,fptemp)) { fwrite(&P,sizeof(PatientInfo),1,fp); } printf("刪除成功!"); fclose(fp); fclose(fptemp); }}voidShow(charFilename[]){ /* 函數(shù)說明:顯示指定文件中的所有數(shù)據(jù) 形參說明:數(shù)組作為形參,實參必須是一個地址,用于傳遞文件名 調(diào)用位置:addressbookmenu函數(shù) 創(chuàng)建人:郭成 創(chuàng)建日期:12月22日 */ PatientInfoP; intflag=1; FILE*fp; fp=fopen(Filename,"r"); while(fread(&P,sizeof(PatientInfo),1,fp)) { printf("\n\t\t\t\n"); printf("\n\t\t\t|編號\t|姓名\t|\t\t|類型\t|郵箱\t\t\t|"); printf("\n\t\t\t|%d\t",P.number); printf("%s\t",P.name); printf("%s\t",P.phonecode); printf("%s\t",P.group); printf("%s\t|",P.email); printf("\n\t\t\t"); } printf("\n\t\t\t所有聯(lián)系人信息已全部顯示出來!\n"); fclose(fp);}短信錄流程圖開始開始讀出功能代號新建刪除修改查看顯示關(guān)閉123456結(jié)束關(guān)閉短信錄(圖4-11)短信錄主函數(shù)流程圖 新建功能:在新建短信輸入編號時,將判斷此編號在通訊錄上有無,如果有則顯示出來,并對此編號發(fā)送信息,如果沒有此編號則新建一條信息。開始開始讀入編號顯示此編號信息發(fā)送短信返回主菜單保存編號是否存在NY(圖4-12)新建短信流程圖(刪除、修改、查看、顯示流程圖均與通訊錄相差不大,這里就不畫出來了)程序截圖(圖4-13)短信錄主界面截圖(圖4-14)短信錄新建短信截圖(圖4-15)短信錄顯示短信截圖(圖4-16)短信錄刪除短信截圖源代碼/*項目名稱:短信管理系統(tǒng)實施時間:2021年12月22日創(chuàng)建人:郭成*/#include"stdio.h"#include"stdlib.h"#include"string.h"#include"windows.h"http://定義了Windows的所有資料型態(tài)、函數(shù)調(diào)用、資料結(jié)構(gòu)和常數(shù)識別字#include"conio.h"http://進行輸入、輸出的//定義結(jié)構(gòu)體類型typedefstructPatient_Info//typedef自定義結(jié)構(gòu)體類型PatientInfo,可以用PatientInfo來定義變量{ intnumber;//編號 charname[8];//姓名 charphonecode[20];//號碼 chargroup[10];//類型 charemail[20];//郵箱 charcontent[200];//短信內(nèi)容}PatientInfo;//局部函數(shù)聲明staticvoidAdd(char[]);staticvoidSearch(char[]);staticvoidAlter(char[]);staticvoidDel(char[]);staticvoidShow(char[]);//主菜單voidMessagemenu(){ inti; charFilename[20];//文件名變量 charMes[]="Message.dll";//指定文件 strcpy(Filename,Mes); do { printf("\nnowdatetime:\n"); system("date/T");system("TIME/T"); printf("\n\n\n"); printf("\t\t*================手★機★短★信★管★理★系★統(tǒng)================*\n"); printf("\t\t**\n"); printf("\t\t*1.新建信息2.刪除信息*\n"); printf("\t\t*3.修改信息4.查看聯(lián)系人*\n"); printf("\t\t*5.顯示所有信息6.關(guān)閉短信錄*\n"); printf("\t\t**\n"); printf("\t\t********************\n"); printf("\t\t**請輸入序號**\n"); printf("\t\t********************\n"); printf("\t\t*==============================================================*\n"); scanf("%d",&i); fflush(stdin);//清空輸入緩存,以便不影響后面輸入的東西 switch(i) { case1:system("cls");Add(Filename);break; case2:system("cls");Del(Filename);break; case3:system("cls");Alter(Filename);break; case4:system("cls");Search(Filename);break; case5:system("cls");Show(Filename);break; case6:break; default:printf("錯誤選擇!請重選");break; } }while(i!=6);}//新建短信voidAdd(charFilename[])//{ /* 函數(shù)說明:對指定文件名進行數(shù)據(jù)的插入 形參說明:數(shù)組作為形參,實參必須是一個地址,用于傳遞文件名 調(diào)用位置:messagemenu函數(shù) 創(chuàng)建人:郭成 創(chuàng)建日期:12月22日 */ intin_number; PatientInfoP;//定義一個信息的變量 intflag=1; FILE*fp,*fptemp;//fp是數(shù)據(jù)源文件,fptemp是臨時文件 fptemp=fopen("Addressbook.dll","r");//已只讀方式臨時打開通訊錄文件,此操作是為了才看通訊錄里是否有相同的編號,如果有則顯示出來 printf("請根據(jù)以下提示信息操作:"); printf("\n編號:"); scanf("%d",&in_number); while(!feof(fptemp)&&flag) { if(fread(&P,sizeof(PatientInfo),1,fptemp)) { if(P.number==in_number) { printf("\n該編號已存在,自動顯示該編號聯(lián)系人!\n"); printf("\n\t\t\t\n"); printf("\n\t\t\t|編號\t|姓名\t|\t\t|類型\t|郵箱\t\t\t|"); printf("\n\t\t\t|%d\t",P.number); printf("%s\t",P.name); printf("%s\t",P.phonecode); printf("%s\t",P.group); printf("%s\t|",P.email); printf("\n\n\t\t\t聯(lián)系人%s的信息已顯示出來!\n",P.name); printf("\t\t\t"); } } } fclose(fptemp);//關(guān)閉通訊錄文件以便短信內(nèi)容儲存在短信文件內(nèi) fp=fopen(Filename,"a");//以追加方式打開短信文件準(zhǔn)備追加 printf("\n新建短信:\n"); P.number=in_number; printf("姓名:"); scanf("%s",P.name); printf(":"); scanf("%s",&P.phonecode); printf("短信內(nèi)容:"); scanf("%s",P.content); printf("\n\t\t\t"); if(fwrite(&P,sizeof(PatientInfo),1,fp)!=1) { printf("輸入數(shù)據(jù)失敗,請重新輸入!"); } else printf("\n添加成功!"); fclose(fp);}voidSearch(charFilename[]){ /* 函數(shù)說明:從指定文件中查找數(shù)據(jù) 形參說明:數(shù)組作為形參,實參必須是一個地址,用于傳遞文件名 調(diào)用位置:messagemenu函數(shù) 創(chuàng)建人:郭成 創(chuàng)建日期:12月22日 */ intin_number; PatientInfoP; intflag=1; FILE*fp; fp=fopen(Filename,"r"); printf("\n請根據(jù)以下提示信息操作:");//先查重,再追加插入 printf("\n編號:"); scanf("%d",&in_number); system("cls"); while(fread(&P,sizeof(PatientInfo),1,fp)&&flag)//fread是文件輸出函數(shù),返回值為1表示讀成功 { if(P.number==in_number) { printf("\n\t\t\t\n"); printf("\n\t\t\t|編號\t|姓名\t|\t\t|短信內(nèi)容\t\t\t|"); printf("\n\t\t\t|%d",P.number); printf("|%s\t",P.name); printf("|%s\t",P.phonecode); printf("|%s\t",P.content); printf("\n\n\t\t\t聯(lián)系人%s的信息已顯示出來!\n",P.name); printf("\t\t\t"); flag=0; } } fclose(fp); if(flag) { printf("沒有你要找的信息!"); }}voidAlter(charFilename[])//{ /* 函數(shù)說明:修改指定文件中的數(shù)據(jù) 形參說明:數(shù)組作為形參,實參必須是一個地址,用于傳遞文件名 調(diào)用位置:messagemenu函數(shù) 創(chuàng)建人:郭成 創(chuàng)建日期:12月22日 */ intin_number; PatientInfoP; intflag=1; FILE*fp,*fptemp;//必須兩個文件操作,fp是數(shù)據(jù)源文件,fptemp是臨時文件,修改后的數(shù)據(jù)臨時放入該文件中 fp=fopen(Filename,"r");//文件讀 fptemp=fopen("temp.txt","w");//文件寫 printf("\n修改聯(lián)系人信息"); printf("\n請輸入你要修改的聯(lián)系人的編號:");//先查詢,再修改 scanf("%d",&in_number); while(fread(&P,sizeof(PatientInfo),1,fp))//文件讀 { if(P.number==in_number)//讀出修改 { P.number=in_number; printf("\n姓名:"); scanf("%s",P.name); printf(":"); scanf("%s",&P.phonecode); printf("短信內(nèi)容:"); scanf("%s",P.content); printf("\n\t\t\t"); flag=0; } fwrite(&P,sizeof(PatientInfo),1,fptemp);/*找沒找到都往臨時文件中寫,因為對文件操作只有追加和覆蓋寫兩種方方式, 因此修改中間某條記錄不方便,只能引入第二個文件或者放入數(shù)據(jù)、鏈表中*/ printf("\n修改成功!"); } fclose(fp); fclose(fptemp); if(flag) { printf("沒有你要查詢的結(jié)果!"); } else { fptemp=fopen("temp.txt","r");//從臨時文件中讀 fp=fopen(Filename,"w");//往源文件中覆蓋寫 while(fread(&P,sizeof(PatientInfo),1,fptemp)) { fwrite(&P,sizeof(PatientInfo),1,fp);//從臨時文件中回寫 } fclose(fp); fclose(fptemp); }}voidDel(charFilename[])//{ /* 函數(shù)說明:刪除指定文件中的某條數(shù)據(jù) 形參說明:數(shù)組作為形參,實參必須是一個地址,用于傳遞文件名 調(diào)用位置:messagemenu函數(shù) 創(chuàng)建人:郭成 創(chuàng)建日期:12月22日 */ intin_number; PatientInfoP; intflag=1; FILE*fp,*fptemp; fp=fopen(Filename,"r"); fptemp=fopen("temp.txt","w"); printf("\n請輸入你想要刪除的聯(lián)系人的編號:");//先查詢,再刪除 scanf("%d",&in_number); while(fread(&P,sizeof(PatientInfo),1,fp)) { if(P.number!=in_number)//如果找到要刪除的記錄則不寫,否則都要寫 fwrite(&P,sizeof(PatientInfo),1,fptemp); else flag=0; } fclose(fp); fclose(fptemp); if(flag) { printf("沒有你要刪除的編號!"); } else { fp=fopen(Filename,"w"); fptemp=fopen("temp.txt","r"); while(fread(&P,sizeof(PatientInfo),1,fptemp)) { fwrite(&P,sizeof(PatientInfo),1,fp); } printf("刪除成功!"); fclose(fp); fclose(fptemp); }}voidShow(charFilename[]){ /* 函數(shù)說明:顯示指定文件中的所有數(shù)據(jù) 形參說明:數(shù)組作為形參,實參必須是一個地址,用于傳遞文件名 調(diào)用位置:messagemenu函數(shù) 創(chuàng)建人:郭成 創(chuàng)建日期:12月22日 */ PatientInfoP; intflag=1; FILE*fp; fp=fopen(Filename,"r"); while(fread(&P,sizeof(PatientInfo),1,fp)) {printf("\n\t\t\t\n"); printf("\n\t\t\t|編號\t|姓名\t|\t\t|短信內(nèi)容\t\t\t|"); printf("\n\t\t\t|%d",P.number); printf("|%s\t",P.name); printf("|%s\t",P.phonecode); printf("|%s\t",P.content); printf("\n\t\t\t"); } printf("\n\t\t\t所以聯(lián)系人的信息已顯示出來!\n"); fclose(fp);}總結(jié)經(jīng)過二個周的程序設(shè)計實驗,我清楚并且深刻地認(rèn)識到了編寫一個計算機程序的不易。要成功實現(xiàn)一個C程序的編譯與運行,前提是熟練掌握C語言中基本的命令指示符,并且要能熟練運用各種語句結(jié)構(gòu)及算法。其次,好的開始才能帶動一個好的過程,一個程序的設(shè)計離不開一個清晰的邏輯框架和程序模塊,同時也需要我們嚴(yán)格并有條理地按照既有的設(shè)計思路來進行代碼的編寫。代碼的編寫對我來說可以說是最大的一道坎,對于只有一學(xué)期C語言學(xué)習(xí)經(jīng)歷的我來說,要編寫這么龐大復(fù)雜的程序是幾乎是不可能的,但是,在代碼編寫過程中我不斷學(xué)習(xí),不斷去想那些師兄問問題,找同學(xué)互相學(xué)習(xí),終于把代碼基本編寫了出來。最后,程序的調(diào)試也是個極其困難的過程,要么是語法錯誤,要么修改后有些功能實現(xiàn)不了,那些簡單的語法錯誤我們改正還比較容易,功能實現(xiàn)的問題就比較困難了,我還得四處搜集資料,或者請教老師和一些水平比較高的同學(xué)。一門技術(shù)的理論學(xué)習(xí)是辛苦的,但要懂得一門技術(shù)的運用更要付出勞動和汗水。雖然我的程序還有很多欠缺,比如,當(dāng)刪除或修改通訊錄中一個人的信息后,他在短信錄中的信息還是沒變,但最后我還是值得高興,就像自己完成了一個奇跡一樣,做了一件自己一個人幾乎不可能完成的任務(wù),那種成就感無法用語言表達。雖然程序設(shè)計困難重重,但我都堅持了下來。這兩周的實驗也讓我明白,雖然自己手中的玩起來很容易,但其實的背后是多大的人力物力的堆積啊,這都是現(xiàn)代科技的成果!總而言之,這兩周的實驗讓我收益匪淺。它不僅將理論與實際相結(jié)合,培養(yǎng)了我動手操作和獨立思考的能力,為我以后步入社會做準(zhǔn)備。這次的實驗激發(fā)了我不斷學(xué)習(xí)興趣,它讓還我明白了,不論困難多大,只要我們積極思考,勇于實踐,就一定能夠解決問題。

引力波的實驗探測給我們的啟示摘要:引力理論的發(fā)展經(jīng)歷了數(shù)百年,從牛頓到愛因斯坦,從萬有引力定律到廣義相對論。在這過程中,科學(xué)家們引力波的預(yù)言質(zhì)疑不休、爭論不止。而引力波的實驗探測無疑證明了一切。引力波的發(fā)現(xiàn),彌補了愛因斯坦的廣義相對論的漏洞,也確定了他的理論的正確。這是人類史上出現(xiàn)的又一契機,它將為人類社會帶來重大變革?!捌莆濉笔侵袊鴤鹘y(tǒng)迎財神的日子。2016年的這一天,卻一個讓全世界物理學(xué)界沸騰的日子,甚至許多的物理學(xué)家為之痛哭流涕——被預(yù)言已經(jīng)百年的引力波,終于被探測到了。引力是什么?在今天人們所知道的物質(zhì)的四種基本相互作用中,引力作用為最弱。四種相互作用按作用強度比例順序是:強相互作用(1),電磁相互作用(10),弱相互作用(10),引力相互作用(10)。因此,在研究基本粒子的運動時,引力一般略去不計。但在天文學(xué)領(lǐng)域內(nèi),由于涉及的對象的質(zhì)量極其巨大,引力就成為不僅支配著天體的運動,而且往往是天體的結(jié)構(gòu)和演化的決定因素。引力并不是一種所謂的“力”,而是一種屬性。牛頓在1687年出版的《自然哲學(xué)的數(shù)學(xué)原理》一書中首次提出萬有引力定律,基于此,他結(jié)識了彗星的運動軌道和地球上的潮汐現(xiàn)象,并根據(jù)萬有引力定律成功地預(yù)言并發(fā)現(xiàn)了海王星。萬有引力定律出現(xiàn)后,才正式把研究天體的運動建立在力學(xué)理論的基礎(chǔ)上,從而創(chuàng)立了天體力學(xué)。簡單的說,質(zhì)量越大的東西產(chǎn)生的引力越大,地球的質(zhì)量產(chǎn)生的引力足夠把地球上的東西全部抓牢。1905年,愛因斯坦提出狹義相對論,突破了絕對時間和絕對空間的概念,否定了瞬時超距作用,從根本上動搖了建立在這些舊觀念基礎(chǔ)上的牛頓引力理論。經(jīng)過十年的探索后,愛因斯坦于1915年提出了迄今為止最成功的近代引力理論——廣義相對論。廣義相對論中,引力被歸咎于時空的彎曲。這種彎曲是由物質(zhì)造成的,物質(zhì)的質(zhì)量越大,所形成的扭曲也就越嚴(yán)重。但是這種彎曲,對于人類來說根本感知不到,一是因為人類伴隨這種彎曲一起彎曲了,而是由于這種彎曲太微小。大質(zhì)量物體發(fā)生的扭曲引起了震動,而這種震動,就是引力波??茖W(xué)家們通過探測這種時空震蕩,來證實引力波的存在。早在1916年,愛因斯坦在廣義相對論中就預(yù)言了引力波的存在。而科學(xué)家們普遍認(rèn)為,這次LIGO這一發(fā)現(xiàn)是愛因斯坦相對論實驗驗證中最后一塊缺失的“拼圖”,證實了愛因斯坦廣義相對論的正確性,彌補了愛因斯坦的廣義相對論的漏洞,驗證了已故科學(xué)家愛因斯坦的預(yù)言。探測的儀器叫做邁克爾遜干涉儀,或是LIGO。LIGO的“兩條腿”都有4千米長,最近的一次升級就花去了幾十億美元。LIGO的原理是什么?簡單來說是利用光速不變,在同樣的直線路程里測試耗時,而通過時間的偏差(盡最大可能排除誤差,也是耗資巨大的原因)來判定空間確實存在震動。這樣的實驗設(shè)置基于愛因斯坦的假設(shè):光速不變,是因為以光的視角看,它沿途經(jīng)過的空間發(fā)生了折疊伸縮??赡艿囊Σㄌ綔y源包括致密雙星系統(tǒng)(白矮星,中子星和黑洞)。在2016年2月11日,LIGO科學(xué)合作組織和Virgo合作團隊宣布他們已經(jīng)利用高級LIGO探測器,首次探測到了來自于雙黑洞合并的引力波信號。在過去的數(shù)十年里,許多物理學(xué)家和天文學(xué)家為證明引力波的存在進行了大量研究。其中,泰勒和赫爾斯由于第一次得到引力波存在的間接證據(jù)榮獲1993年諾貝爾物理學(xué)獎。到目前為止,類似的雙中子星系統(tǒng)已經(jīng)發(fā)現(xiàn)了近十個,但是雙黑洞系統(tǒng)卻是首次。在實驗方面,第一個對直接探測引力波作偉大嘗試的人是韋伯。雖然他的共振棒探測器最后沒能找到引力波,但是韋伯開創(chuàng)了引力波實驗科學(xué)的先河,為如今的碩果打下了基礎(chǔ)。因為在地面上很容易受到干擾,所以物理學(xué)家們也在向太空進軍。歐洲的空間引力波項目eLISA(演化激光干涉空間天線)。eLISA將由三個相同的探測器構(gòu)成為一個邊長為五百萬公里的等邊三角形,同樣使用激光干涉法來探測引力波。此項目已經(jīng)歐洲空間局通過批準(zhǔn),正式立項,目前處于設(shè)計階段,計劃于2034年發(fā)射運行。作為先導(dǎo)項目,兩顆測試衛(wèi)星已經(jīng)于2015年12月3日發(fā)射成功,目前正在調(diào)試之中。中國的科研人員,在積極參與目前的國際合作之外之外,也在籌建自己的引力波探測項目。引力波的實驗探測引起了世界范圍的轟動,這些探測極其不易,宇宙中發(fā)生爆炸性的大事件時產(chǎn)生的引力波,才相對容易探測到,例如黑洞合并、星系合并、超新星爆炸等。100年前,愛因斯坦在預(yù)言引力波存在時就曾說:“這些數(shù)值是如此微小,她們不會對任何的東西產(chǎn)生顯著的作用,沒人能夠去測量它們?!辈桃环蚪o出解釋:“時間發(fā)生得越早,距離越遠(yuǎn),越會在宇宙中傳播期間被紅移。紅移指的是由于宇宙本身的膨脹將所有的波動的波長拉直拉平,這樣其波動性就難以被探測到。例如,這次LIGO探測到的引力波,是13億年以前兩個大約30個太陽質(zhì)量的黑洞并合所產(chǎn)生的引力波,振幅之小,是在原子核尺寸的千分之一的尺度。能探測到真的是非常不容易,LIGO實驗組的科學(xué)家們也是在幾十年里經(jīng)歷多次挫折,不斷調(diào)整方案,改進儀器,才最終探測到的?!彼运某晒μ綔y也標(biāo)志著在這個領(lǐng)域人類的技術(shù)進步到了前所未有的水平。而它所具有的里程碑意義不止在科學(xué)情感上,更在于能夠打開人類的一個新的世界——每個人都對它滿懷期待。如果電磁波探測是人類的眼睛,那么人類又多了一雙聆聽外界的耳朵。馬克斯·普朗克引力物理研究所說:“在《星際穿越》和《三體》中,都不約而同地將引力波選為了未來科技發(fā)達的人類的通訊手段,這也許只能是美好的幻想,但對于天文研究而言,引力波的確開啟了一扇新的窗口。吹進來的第一縷清風(fēng),就帶來了一個重大的信息:極重的恒星級雙黑洞系統(tǒng)存在并可以在足夠短的時間(10億年)內(nèi)并合。這是讓我們始料未及的。誰能知道在將來的更多的探測中,LIGO和一眾引力波探測器能帶給我們什么樣的驚喜呢?”引力波有兩個非常重要而且比較獨特的性質(zhì)。第一:不需要任何的物質(zhì)存在于引力波源周圍。這時就不會有電磁輻射產(chǎn)生。第二:引力波能夠幾乎不受阻擋的穿過行進途中的天體。比如,來自于遙遠(yuǎn)恒星的光會被星際介質(zhì)所遮擋,引力波能夠不受阻礙的穿過。對于天文學(xué)家來說,這兩個特征允許引力波攜帶有更多的之前從未被觀測過的天文現(xiàn)象信息,而每一個電磁波譜的打開,都會為我們帶來前所未有的發(fā)現(xiàn)。天文學(xué)家們同樣期望引力波也是如此。而引力波本身的性質(zhì)也可能對基礎(chǔ)物理學(xué)產(chǎn)生巨大的影響。另外,引力波蘊含的,很可能是宇宙誕生的畫面。我們從小都被告知一個最著名的猜想——宇宙是在一場爆炸中誕生的。這意味著,在時空的開始,宇宙又一次最為劇烈的震動。引力波就能讓我們還原這個震動——它是否存在?有多大規(guī)模?不僅如此,引力波還能傳遞信息——我們看不到的宇宙空間在發(fā)生什么?據(jù)科學(xué)家解釋,這次的引力波就是在遙遠(yuǎn)的距離上巨大的黑洞變化引起的。而這一結(jié)果也證明了黑洞真實存在——至少是廣義相對論預(yù)測的由純凈、真空、扭曲時空組成的完美圓形物體。并且,引力波傳遞的信息可以讓科學(xué)家更精確地估計宇宙膨脹的速度。總而言之,一個新的重大科學(xué)發(fā)現(xiàn),總會給人類社會帶來無法預(yù)估的發(fā)展。18世紀(jì)面熟電磁波的麥克斯韋理論確認(rèn)的時候,也沒人知道會給人類帶來什么,但是現(xiàn)在不管是電視機還是移動電話,都與電磁現(xiàn)象有關(guān)。引力波的發(fā)現(xiàn)類似當(dāng)年的發(fā)現(xiàn)X光一樣,是一種工具。有了這個工具,我們可以利用引力波的觀察,去觀察遙遠(yuǎn)的宇宙的現(xiàn)象。發(fā)現(xiàn)暗物質(zhì)、時空穿梭等等才是有可能實現(xiàn)的事情。如果沒有引力波,以我們現(xiàn)有的技術(shù)是做不到這些HYPERLINK"/s?wd=%E7%A7%91%E5%B9%BB%E4%B8%96%E7%95%8C&tn=440391

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論