版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
基于Matlab的TEQC繪圖程序代碼【實用文檔】doc文檔可直接使用可編輯,歡迎下載
%在mat(yī)lab下新建一個m文件,將以下代碼直接拷貝進去,即可執(zhí)行?;贛atlab的TEQC繪圖程序代碼【實用文檔】doc文檔可直接使用可編輯,歡迎下載%需要一個TEQC生成的plot文件作為參數(shù)functionout=teqcplot3(files);%讀取TEQC生成的Plot文件,繪制數(shù)據(jù)圖表,支持Copmact、Compact2、Compact3格式%選取一個TEQC的Pl(wèi)ot文件%格式說明%*。sn1載波L1的信噪比Signaltonoiseratio(S/N)%*。sn2載波L2的信噪比Signaltonoiseratio(S/N)CarrierL2%*.iod*.d12*.d21電離層延遲觀測值變化率(米/秒)Derivativeofionosphericdelayobservable(m/s)%*。ion*。i12*.i21電離層延遲觀測值(米)Ionosphericdelayobservable(m)%*。mp1*。m12載波L1的多路徑誤差Multipat(yī)hCarrierL1%*。mp2*.m21載波L2的多路徑誤差Multipat(yī)hCarrierL2%*.azi衛(wèi)星方位角(°)Satelliteazimuthaldata(degrees)%*.ele衛(wèi)星高度角(°)Satelliteelevationdata(degrees)ifnargin==0[filen,path]=uigetfile(’*.sn1;*.sn2;*.iod;*.ion;*。mp1;*。mp2;*.a(chǎn)zi;*。ele;*.i12;*i21;*.m12;m21;*.d12;*d21’,。..'請選擇TEQC報告文件:');else[path,filen,ext]=fileparts(files);path=[path’\'];filen={[filenext]};end%讀取這個文件file=char(filen);%按行讀取文件至數(shù)組A[A]=importdata([pathfile],’\t');%定義SAT,存放衛(wèi)星數(shù)據(jù)%GPS有32顆衛(wèi)星,存放序號1-32,%GLONASS有32顆衛(wèi)星,存放序號33-64,%BEIDOU有35顆衛(wèi)星,存放序號65—99SAT(1:length(A),1:99)=NaN;%sats(1:length(A),1:99)=NaN;%存放采樣時間,單位秒tsec(1:length(A))=NaN;%讀取文件的第一行filelx=A{1};%判斷是哪種格式switchfilelxcase'COMPACT'%讀取數(shù)據(jù)采樣間隔t_samp=char(A(3));%讀取開始時間mjl=char(A(4));%讀取數(shù)據(jù)采樣間隔T_SAMP=str2num(t_samp(max(find(t_samp==’’)):end));%讀取數(shù)據(jù)采樣開始時間MJL_START=str2num(mjl(max(find(mjl=='')):end));%轉成時間序列數(shù)字,dat(yī)eserialnumber,從0000年1月1日0時0分0秒開始計算的十進制天數(shù)MJD_START=MJL_START+678941.999999741;%i為行號n=1;i=5;case’COMPACT2'%讀取數(shù)據(jù)采用間隔t_samp=char(A(2));%讀取開始時間mjl=char(A(3));%讀取數(shù)據(jù)采樣間隔T_SAMP=str2num(t_samp(max(find(t_samp=='’)):end));%讀取數(shù)據(jù)采樣開始時間MJL_START=str2num(mjl(max(find(mjl==’’)):end));%轉成時間序列數(shù)字,dat(yī)eserialnumber,從0000年1月1日0時0分0秒開始計算的十進制天數(shù)MJD_START=MJL_START+678941。999999741;n=1;i=4;case’COMPACT3'%讀取開始時間t_start=char(A(2));t_start=deblank(t_start);s=splitstr(t_start,'**',6);%t_start_time=[char(s{2})'年'char(s{3})'月’char(s{4})'日'char(s{5})'時'char(s{6})'分’num2str(str2num(char(s{7})),'%02d’)'秒’];%獲取采樣的開始時間,2013,12,7,03,05,55t_s_time=[str2num(char(s{2})),str2num(char(s{3})),str2num(char(s{4})),str2num(char(s{5})),str2num(char(s{6})),str2num(char(s{7}))];n=1;i=3;otherwisedisp('數(shù)據(jù)格式存在問題’);returnend%n=1;i=3;%sats=str2num(A{i});snyggfilen=strrep(filen,’_’,’—');%生成進度條h=waitbar(0,['正在讀取數(shù)據(jù),請稍等……’char(snyggfilen)]);whilei〈length(A);waitbar(i/length(A),h);drawnow%讀取衛(wèi)星編號數(shù)據(jù)行采樣時間衛(wèi)星數(shù)量衛(wèi)星編號COMAPCT3satbhstr=char(A(i));s=splitstr(satbhstr,'**',32);%如果衛(wèi)星編號數(shù)據(jù)為0,說明數(shù)據(jù)缺失,退出本函數(shù)ifstrtrim(satbhstr)==’0’disp('數(shù)據(jù)為空!');close(h);returnendswitchfilelxcase'COMPACT3'%記錄采樣時間,單位秒tsec(n)=str2num(s{1});ifs{2}=='—1'%如果為-1,使用上次的衛(wèi)星編號行satbhstr=oldsat(yī)bh;s=splitstr(satbhstr,'**',32);elseoldsatbh=satbhstr;end%獲取當前衛(wèi)星數(shù)量satcount=str2num(s{2});case{'COMPACT’,'COMPACT2’}%記錄采樣時間,單位秒tsec(n)=(n-1)*T_SAMP;ifs{1}=='-1'%如果為—1,使用上次的衛(wèi)星編號行sat(yī)bhstr=oldsat(yī)bh;s=splitstr(satbhstr,'**’,32);elseoldsatbh=satbhstr;end%獲取當前衛(wèi)星數(shù)量satcount=str2num(s{1});end%讀取衛(wèi)星數(shù)據(jù)行satdat(yī)astr=char(A(i+1));sdat(yī)a=splitstr(satdatastr,’**’,32);fork=3:sat(yī)count+2switchfilelxcase'COMPACT'%如果是COMPACT格式,衛(wèi)星編號前面沒有字母,默認是GPS衛(wèi)星,在前面增加字符Gsatbh=['G'char(s{k—1})];case’COMPACT2'%如果是COMPACT2格式,衛(wèi)星編號行第2個數(shù)據(jù)開始是衛(wèi)星編號satbh=char(s{k-1});case’COMPACT3'%如果是COMPACT3格式,衛(wèi)星編號行第3個數(shù)據(jù)開始是衛(wèi)星編號sat(yī)bh=char(s{k});endswitchsatbh(1);case’G’%如果是GPS衛(wèi)星,獲得與編號對應的存儲序號,范圍1-32index=str2num(satbh(2:3));case'R’%如果是GLONASS衛(wèi)星,獲得與編號對應的存儲序號,范圍33-64index=32+str2num(satbh(2:3));case’C’%如果是BEIDOU衛(wèi)星,獲得與編號對應的存儲序號,范圍65-99index=64+str2num(satbh(2:3));otherwise%其他情況,獲得與編號對應的存儲序號,范圍1-32index=str2num(satbh(2:3));end%switch%獲得對應的衛(wèi)星數(shù)據(jù)sdatastr=char(sdata{k-2});%如果衛(wèi)星數(shù)據(jù)不是數(shù)值型,用0替代ifisempty(str2num(sdatastr))==1sdat(yī)astr='0.000';end%將衛(wèi)星數(shù)據(jù)存入SAT數(shù)組的對應位置SAT(n,index)=str2num(sdatastr);end%forn=n+1;%根據(jù)數(shù)據(jù)文件結構,一行是衛(wèi)星編號,下一行就是對應的衛(wèi)星數(shù)據(jù)%程序一次讀取2行數(shù)據(jù)i=i+2;end%while%數(shù)據(jù)讀取完畢,關閉進度條close(h);%獲取已使用的衛(wèi)星編號,返回給sat_bhsat_bh=getsatbh(SAT);%增加最后一個結束字符sat_bh_temp=[sat_bh'{’End’}];sat(yī)_bh_end=sat_bh_temp';%刪去所有都為NaN值的列,返回給sat_datasat(yī)_dat(yī)a=delnancol(SAT);%刪去所有NaN值的采樣時間列t_seconds=delnancol(tsec);%刪去所有都為NaN值的行,返回sat_datassat_datas=delnanrow(sat_data);%增加一個nan列[row,col]=size(sat_datas);bb(1:row,1)=NaN;sat_datas=[sat_datasbb];%將含有NaN值的數(shù)據(jù)替換為0,返回給s_data%s_data=repnan20(sat_data);%將采樣時間轉成順序日期serialdatenumberswitchfilelxcase{'COMPACT’,'COMPACT2’}t_s_jd_time=MJD_START;case'COMPACT3't_s_jd_time=datenum(t_s_time);endfori=1:length(t_seconds)%將每次采樣時間轉換成相應的順序日期t_jd_time(i)=t_s_jd_time+t_seconds(i)/60/60/24;end%繪制圖表++++++++++++++++++++++++++%根據(jù)不同的文件類型,設置坐標軸的范圍[type,maxy,miny]=get_filetype(file);figure;boxon;holdon[row,col]=size(sat(yī)_datas);%繪制漸變彩色圖pcolor(t_jd_time',[1:col],sat_datas’);set(gcf,'renderer','zbuffer');shadingflatset(gca,’xticklabel',[t_jd_time]);set(gca,'xlim',[t_jd_time(1)t_jd_time(end)])%t_start_times=[t_start_h’:’t_start_m’:'t_start_s];dateaxis('X',13)cbar('v',[minymaxy],type);set(gca,'ylim',[1col+1])set(gca,’ytick',[1。5:1:col+0.5])set(gca,'yticklabel',sat(yī)_bh_end);set(gca,'fontsize',7);colormap(flipud(jet));caxis([minymaxy]);%t_end_time=cal2et(t_s_time,t_seconds(end));xlabel([dat(yī)estr(t_jd_time(1))'|-—---—-—采樣間隔:'num2str(t_seconds(2)—t_seconds(1))'秒---—-———|'datestr(t_jd_time(end))])ylabel(’衛(wèi)星編號')%timestr=secs2hms(length(sat));T=title([’TEQC報告文件:'strrep(file,'_’,’-')]);set(T,'fontsize',8)%out.(file(end-2:end))=sat(yī);%out.T_samp=T_SAMP;out。Start=datestr(t_jd_time(1));out.Stop=dat(yī)estr(t_jd_time(end));%+++++++++++++++++++++++++++++++++++++++%以下是本函數(shù)中所使用的一些相關函數(shù)%++++++++++++++++++++++++++++++++++++++++++++++++++%+++++++++++++++++++++++++++++++++++++++++++++++++functions=splitstr(str,split,num);%用指定分隔符分隔字符串函數(shù)%str='name02010-05-0633QtBKB';%'**'表示特殊分隔符回車、空格、換行、制表符等%num表示分隔字符串的個數(shù)string=cell(num,1);index=1;temp=[];ifsplit==’**'%特殊分隔符fori=1:length(str)ifisspace(str(i))ifisempty(temp)==falsestring{index}=temp;index=index+1;temp=[];endelsetemp=[temp,str(i)];endendelse%常規(guī)分隔符fori=1:length(str)ifstr(i)==splitifisempty(temp)==falsestring{index}=temp;index=index+1;temp=[];endelsetemp=[temp,str(i)];endendendifisempty(temp)==falsestring{index}=temp;ends=string;%+++++++++++++++++++++++++++++++++++functionB=delnancol(A);%刪除矩陣中所有值都是nan的列[xy]=size(A);fori=y:-1:1ifall(isnan(A(:,i)))==1A(:,i)=[];endendB=A;%+++++++++++++++++++++++++++++++++++functionB=delnanrow(A);%刪除矩陣中所有值都是nan的行[xy]=size(A);fori=x:-1:1ifall(isnan(A(i,:)))==1A(i,:)=[];endendB=A;%+++++++++++++++++++++++++++++++++++functionB=repnan20(data);%將矩陣中的NAN值用0替代[datas,features]=size(data);fork=1:featuresfori=1:datasifisnan(data(i,k))==1data(i,k)=0;endendendB=data;%++++++++++++++++++++++++++++++++functionsatbh=getsatbh(satdata);%獲取衛(wèi)星數(shù)據(jù)中的衛(wèi)星編號,返回一個字符串數(shù)組s=cell(32,1);temp=[];index=1;fori=1:99ifall(isnan(satdata(:,i)))~=1switchi>32case0temp=['G',num2str(i,’%02d')];case1ifi>64temp=[’C',num2str(i-64,’%02d’)];elsetemp=['R’,num2str(i—32,'%02d')];endends{index}=temp;index=index+1;endendifindex〉1satbh=s(1:index-1);elsesatbh=[];end%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%FUNCTION:GETFILETYPEINFO+++++++++++++++++++++++++++++++++++++function[out,maxy,miny]=get_filetype(teqfile);%根據(jù)文件類型,設置坐標軸的范圍[path,name,ext,ver]=fileparts(teqfile);switchextcase’。sn1'%out='SignaltonoiseratioS/NL1';out=’L1載波上的信噪比(dBHz)';maxy=60;miny=15;case'。sn2'%out='SignaltonoiseratioS/NL2’;out='L2載波上的信噪比(dBHz)’;maxy=60;miny=15;case{’.mp1','。m12'}%out=’MultipathL1’;out=’L1多路徑觀測值';maxy=1;miny=-1;case{’.mp2’,’。m21'}%out='MultipathL2';out=’L2多路徑觀測值';maxy=1;miny=—1;case{'.iod’,'.d12','d21'}%out='Derivativeofionosphericdelayobservable(m/s)';out=’電離層延遲觀測值變化率(米/秒)’;maxy=1;miny=-1;case{'。ion’,'.i12’,'i21'}maxy=2;miny=-2;%out=’Ionosphericdelayobservable(m)';out=’電離層延遲觀測值(米)’;case'。ele’maxy=90;miny=0;%out='Sat(yī)elliteelevationdata’;out=’衛(wèi)星高度角(°)';case’.azi'maxy=180;miny=-180;%out=’Sat(yī)elliteazimuthaldat(yī)a';out='衛(wèi)星方位角(°)';otherwisedisp('Somethingswrong..!')end%FUNCTION:PLACEAMODIFIEDCOLORBAR++++++++++++++++++++++++++++++functionCB=cbar(loc,range,label);%。。....。.。.。.。.。。....。.。..。...。..。.。.。.。.。...。..。。..。.。。..。...%CB=cbar(loc,range,label)%placesacolorbarat:%loc='v'inverticalor'h'inhorizontal%positionincurrentfigurescaledbetween:%range=[minmax]witha:%label=’string'。%%fontsizeisreducedto10andwidthofbarishalfdefault.%%Example:[X,Y,Z]=peaks(25);%range=[min(min(Z))max(max(Z))];%pcolor(X,Y,Z);%cbar('v',range,'Elevation(m)')%....。.....。。.。.。.。..。。...。。。....。。..。。。..。。。..。。..。。。。。.。caxis([range(1)range(2)]);switchloccase'v'CB=colorbar('vertical’);set(CB,’ylim',[range(1)range(2)]);POS=get(CB,'position’);set(CB,'position',[POS(1)POS(2)0。03POS(4)]);set(CB,’fontsize’,8);set(get(CB,’ylabel’),’string',label);set(CB,'box','on’)case'h'CB=colorbar('horizontal');set(CB,'xlim',[range(1)range(2)]);POS=get(CB,’position');set(CB,'position’,[POS(1)POS(2)POS(3)0。03]);set(CB,'fontsize’,8);set(get(CB,'xlabel’),'string',label)end%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++functionjd=cal2jd(cal)%cal2jd1?將公歷年月日時分秒轉換到儒略日。%jd=cal2jd(cal)返回儒略日%cal:1x6矩陣,6列分別為年月日時分秒。構造cal時可以省略末尾的0%%公元1582年10月4日24:00點之前使用儒略歷,公元1582年10月15日00:00點之后使用公歷iflength(cal)〈6 cal(6)=0;endyear=cal(1);month=cal(2);day=cal(3)+(cal(4)*3600+cal(5)*60+cal(6))/86400;y=y(tǒng)ear+4800;%4801B.C.isacenturyyearandalsoaleapyear.if(year〈0) y=y(tǒng)+1;?%Pleasenotethatthereisnoyear0A。D。endm=month;if(m〈=2) %JanuaryandFebruarycomeafterDecember。 m=m+12;?y=y—1;ende=floor(30.6*(m+1));a=floor(y/100); %numberofcenturies%教皇格雷戈里十三世于1582年2月24日以教皇訓令頒布,將1582年10月5日至14抹掉。1582年10月4日過完后第二天是10月15日if(year<1582)|(year==1582&month<10)|(year==1582&month==10&day〈15) b=-38;else?b=floor((a/4)-a);%numberofcenturyyearsthatarenotleapyearsendc=floor(365.25*y);%Juliancalendaryearsandleapyearsjd=b+c+e+day-32167.5;%+++++++++++++++++++++++++++++++++++++++++++++++++functioncal=jd2cal(J)%從儒略日計算公歷年月日時分秒%cal=jd2cal(J)%返回的cal是1x6矩陣,6列分別為年月日時分秒%%公元1582年10月4日24:00點之前使用儒略歷,公元1582年10月15日00:00點之后使用公歷if(J〈1721423.5) %公元1月1日0時 BC=1;else BC=0;end%startfromJulianMarch1,4801B。C.if(J<2299160.5) %before1582.10.4。24:00isJuliancalender?j0=floor(J+0.5);?dd=J+0.5—j0;else %after1582。10.15。00:00isGregoriancalender %numberofcerturyyearsthatarenotleapyear n1=floor((J—2342031.5)/36524。25/4)+1; %1700。3。1.0 n2=floor((J—2378555.5)/36524.25/4)+1; %1800.3。1。0 n3=floor((J—2415079.5)/36524.25/4)+1; %1900。3。1.0?j0=n1+n2+n3+J+10; dd=j0+0。5—floor(j0+0。5); j0=floor(j0+0.5);endj0=j0+32083;year0=ceil(j0/365.25)—1;year=year0-4800;day=j0—floor(year0*365.25);month=floor((day-0.6)/30.6)+3;day=day-round((month—3)*30.6);ifmonth〉12?month=month—12; year=y(tǒng)ear+1;endyear=year—BC;sec=round(dd*86400);hour=floor(sec/3600);sec=sec—hour*3600;min=floor(sec/60);sec=sec-min*60;cal=[year,month,day,hour,min,sec];%+++++++++++++++++++++++++++++++++++++++++++++++++functionmjd=cal2mjd(cal)%cal2mjd?將公歷年月日時分秒轉換到簡化儒略日。%mjd=cal2mjd(cal)返回簡化儒略日%cal:1x6矩陣,6列分別為年月日時分秒。構造cal時可以省略末尾的0jd=cal2jd(cal);mjd=jd-2400000.5;%FUNCTION:SECONDSTOHOURS,MINUTESandSECONDS++++++++++++++++functiontimestr=secs2hms(SECS)HOURS=SECS/60/60;hours=floor(HOURS);MINUTES=(HOURS-h(huán)ours)*60;minutes=floor(MINUTES);seconds=(MINUTES-minutes)*60;HH=num2str(hours);MM=num2str(minutes);SS=num2str(seconds);ifseconds<10;SS=['0'num2str(SS)];elseSS=num2str(SS);endifminutes〈10;MM=['0’num2str(MM)];elseMM=num2str(MM);endtimestr=[HH':’MM':'SS];%+++++++++++++++++++++++++++++++++++++functiontimestr=cal2et(t_start,secs)%根據(jù)開始時間,時長(秒),計算結束時間%t_start1×6矩陣,年,月,日,時,分,秒%secs時長,單位秒t_s_days=t_start(4)/24+t_start(5)/60/24+t_start(6)/60/60/24;t_e_days=t_s_days+secs/60/60/24;HOURS=t_e_days*24;hours=floor(HOURS);MINUTES=(HOURS-h(huán)ours)*60;minutes=floor(MINUTES);seconds=round((MINUTES-minutes)*60);HH=num2str(hours,'%02d');MM=num2str(minutes,’%02d');SS=num2str(seconds,'%02d');YY=num2str(t_start(1),'%04d');M=num2str(t_start(2),'%02d’);DD=num2str(t_start(3),'%02d’);timestr=[YY'年'M’月'DD’日'HH’時'MM’分'SS’秒’];%+++++++++++++++++++++++++++++++++++++functionetime=cal2etime(t_start,secs)%根據(jù)開始時間,時長(秒),計算結束時間%t_start1×6矩陣,年,月,日,時,分,秒%secs時長,單位秒t_s_days=t_start(4)/24+t_start(5)/60/24+t_start(6)/60/60/24;t_e_days=t_s_days+secs/60/60/24;HOURS=t_e_days*24;hours=floor(HOURS);MINUTES=(HOURS-hours)*60;minutes=floor(MINUTES);seconds=round((MINUTES-minutes)*60);etime=[t_start(1),t_start(2),t_start(3),hours,minutes,seconds];%EOF++++++++++++++++++++++++++++++++++++++++++++++++++++#include<iostream。h〉#include<iomanip.h>#include<fstream>#include<vector>#include<malloc.h>#include〈stdlib.h〉#include〈string>#include<process.h>#include〈stdio。h〉#defineLENsizeof(structstudent)usingnamespacestd;intn=0;//定義一個全局變量統(tǒng)計學生人數(shù)structstudent//定義一個學生信息的結構體{charname[20];//用來存放姓名的charsex[20];//用來存放性別的charyuanxi[20];//用來存放院系的longintid;//用來存放學號的intscore[4];//用來存放分數(shù)的inttotal;//用來存放總分數(shù)的structstudent*next;};vector<student>stu;classInformation{public:Information();//構造函數(shù).~Information();//析構函數(shù).student*creat();//建立鏈表函數(shù)。voidoutput(student*head);intcount(student*head);//定義函數(shù)count()統(tǒng)計考生總數(shù)student*insert(student*head);//指針函數(shù)*insert()用來添加考生信息.student*cancel(student*head,longintnum);//指針函數(shù)*cancel()用來刪除考生信息.student*find(student*head,longintnum);//指針函數(shù)*find()用來查找考生信息.voidinorder(student*head);//定義inorder()函數(shù)將考生的總分從大到小排列并輸出voidaverage(student*head);//求學生成績的平均分的函數(shù)voidsave(student*head);//保存函數(shù)student*Read();//讀取函數(shù)private:student*p1,*p2,*p3,*head,st;};Information::Information()//構造函數(shù){cout<<”******************************************************************************\n";cout<<"-—-—-———---—-——〈<歡迎您使用學生信息管理系統(tǒng)〉〉-————-—---——-—---—--—\n";cout<〈”******************************************************************************\n\n";}Information::~Information()//構造函數(shù){cout<<"******************************************************************************\n";cout<<”—-———------——-—--—-—<〈謝謝您使用學生信息管理系統(tǒng)>〉--———-----—---—-——-—---—\n";cout<〈”******************************************************************************\n";}student*Informat(yī)ion::creat(yī)(void)//定義一個指向structstudent的結構體指針函數(shù)*creat(yī)()用來增加學生信息。{charch[20];n=0;//用來存放姓名的p1=p2=(student*)malloc(LEN);//調(diào)用malloc()函數(shù)用來開辟一個新的存儲單元cout<<"--—--—-—-—〈〈請建立學生考試信息表,在姓名處輸入!結束輸入?!怠?-————--—-—"〈<endl;cout〈〈"姓名:";cin>>ch;head=NULL;//給指針head賦初值while(strcmp(ch,"!")!=0)//調(diào)用字符比較函數(shù)strcmp()用來判斷是否繼續(xù)輸入{charstr[10];intflag=0;p1=(student*)malloc(LEN);//調(diào)用malloc()函數(shù)用來開辟一個新的存儲單元strcpy(p1—>name,ch);//將循環(huán)結構前面輸入的姓名復制到結構體名為p1的數(shù)組name中cout<〈"性別:";cin>>p1->sex;cout<<"院系:";cin>〉str;cout<<”學號(9位):”;do{cin>〉str;if(at(yī)ol(str)〉999999999||at(yī)ol(str)〈1)cout〈〈”對不起,請正確輸入?。躰";else{p1-〉id=atol(str);flag=1;}}while(flag==0);flag=0;cout〈〈"語文成績:";do{cin>〉str;if(atoi(str)>100||at(yī)oi(str)〈1)cout<<”對不起,請輸入1—100之間的數(shù)字!!\n”;else{p1->score[0]=atoi(str);flag=1;}}while(flag==0);flag=0;cout〈〈"外語成績:";do{cin〉>str;if(atoi(str)>100||atoi(str)〈1)cout<<”對不起,請輸入1-100之間的數(shù)字!!\n”;else{p1—>score[1]=atoi(str);flag=1;}}while(flag==0);flag=0;cout<〈"數(shù)學成績:";do{cin>>str;if(atoi(str)>100||at(yī)oi(str)〈1)cout<〈”對不起,請輸入1-100之間的數(shù)字!!\n";else{p1—〉score[2]=atoi(str);flag=1;}}while(flag==0);flag=0;cout〈〈"C++成績:";do{cin>>str;if(atoi(str)>100||atoi(str)<1)cout<<"對不起,請輸入1-100之間的數(shù)字!!\n”;else{p1->score[3]=atoi(str);flag=1;}}while(flag==0);flag=0;p1—>total=p1->score[0]+p1->score[1]+p1-〉score[2]+p1->score[3];//計算總分if(n==0)head=p1;//如果是輸入第一組學生考試信息就將指針p1賦給指針headelsep2->next=p1;//否則將p1賦給p2所指結構體的next指針p2=p1;//將指針p1賦給指針p2n++;//將n的值加1cout〈<"姓名:";cin>>ch;//將輸入的姓名存放到字符數(shù)組ch中}p2->next=NULL;//將p2所指結構體的next指針重新賦空值return(head);//將輸入的第一組學生考試信息返回}voidInformat(yī)ion::output(student*head)//定義output()函數(shù)將學生的信息從頭指針所指內(nèi)容開始輸出{if(head==NULL)cout<〈"這是一個空表,請先輸入考生成績.\n";else{cout<<"—---—-—-——-----——----—---——————-——--—-———--—-———---—-————------———————--—-—-\n";cout〈<”*學生成績信息表*\n";cout<〈”--——--—-—-——--———----—-----—-------—--—---—-——--—-—--——-—-—-—-—-—-—-———\n”;cout<<"學號姓名性別院系語文英語數(shù)學C++平均成績總分\n";cout〈〈"-—-——--—---——-—--—-—-—--—----—----——-———--—-————-—-——————----—-—----—--——-\n";p1=head;//將頭指針賦給pdo{cout〈〈setw(8)〈<p1->id<〈setw(9)〈<p1-〉name〈<setw(8)<<p1->sex〈〈setw(13)<〈p1->score[0]<〈setw(16)<<p1—>score[1]<<setw(10)<〈p1->score[2]<<setw(9)<<p1-〉score[3]<<setw(6)〈<p1—>total/4.0〈〈setw(11)〈〈p1—>total〈<endl;cout〈<"--—-—--------—————————-—-----—----—-—-—---—---—---———---—-——--——-—----—-\n";p1=p1-〉next;//將下一組學生信息的next指針賦給p}while(p1!=NULL);//若指針p非空則繼續(xù),目的是把所有的學生信息都傳給指針p然后輸出。}}//統(tǒng)計學生人數(shù)的函數(shù)intInformation::count(structstudent*head)//定義函數(shù)count()統(tǒng)計考生總數(shù){if(head==NULL)//若指針head為空返回值為0return(0);elsereturn(1+count(head->next));//函數(shù)的遞歸調(diào)用}//插入學生的成績信息的函數(shù)student*Information::insert(student*head)//插入新結點定義一個指向structstudent的結構體指針函數(shù)*insert()用來添加考生信息.{charstr[10];intflag=0;cout〈<”\t-—-———-—--—--———<<請輸入新增學生成績信息>>—---—-—-——--—\n”<<endl;p1=(student*)malloc(LEN);//使p1指向插入的新結點cout<〈"姓名:";cin>>p1->name;//將輸入的姓名存放到結構體名為p1的數(shù)組name中cout〈〈”性別:”;cin〉>p1-〉sex;cout〈<"學號(9位):";do{cin〉>str;if(atol(str)〉99999999||atol(str)<1)cout<〈”對不起,請請正確輸入!!!\n";else{p1—>id=at(yī)ol(str);flag=1;}}while(flag==0);flag=0;cout<〈"語文成績:";do{cin〉〉str;if(atoi(str)>100||atoi(str)<1)cout〈〈"對不起,請輸入1—100之間的數(shù)字!!\n”;else{p1-〉score[0]=atoi(str);flag=1;}}while(flag==0);flag=0;cout〈〈"外語成績:";do{cin〉>str;if(atoi(str)〉100||atoi(str)〈1)cout〈〈"對不起,請輸入1—100之間的數(shù)字!!\n";else{p1—〉score[1]=atoi(str);flag=1;}}while(flag==0);flag=0;cout〈<"數(shù)學成績:”;do{cin〉〉str;if(at(yī)oi(str)>100||atoi(str)<1)cout<<"對不起,請輸入1-100之間的數(shù)字?。。躰";else{p1—>score[2]=atoi(str);flag=1;}}while(flag==0);flag=0;cout<<”C++成績:”;do{cin〉>str;if(atoi(str)>100||atoi(str)〈1)cout〈<"對不起,請輸入1-100之間的數(shù)字??!\n”;else{p1-〉score[3]=atoi(str);flag=1;}}while(flag==0);flag=0;p1->total=p1—>score[0]+p1->score[1]+p1-〉score[2]+p1-〉score[3];//計算總分p2=head;//將頭指針賦給p2if(head==NULL)//若沒調(diào)用次函數(shù)以前的頭指針head為空{head=p1;p1->next=NULL;//則將p1賦給頭指針head并將p1所指結構體成員指針next賦空值}else{while((p1->id>p2->id)&&(p2->next!=NULL)){p3=p2;//p3指向原p2指向的結點p2=p2—>next;}//p2后移一個結點if(p1->id〈=p2—〉id){if(head==p2){p1-〉next=head;head=p1;}//插入到第一個結點之前else{p3-〉next=p1;p1->next=p2;}//插入到p3所指結點之后}else{p2—>next=p1;p1—〉next=NULL;}//插入到尾結點之后}n++;//將學生人數(shù)加1cout〈<"\t你輸入的學生信息已經(jīng)成功插入"<<endl;return(head);}//刪除學生信息函數(shù)student*Information::cancel(student*head,longintnum)//定義一個指向structstudent的結構體指針函數(shù)*delete()用來刪除考生信息。{if(head==NULL)//若調(diào)用次函數(shù)以前的頭指針head為空{return(head);}else{p1=head;//否則將頭指針賦給p1while(num!=p1->id&&p1—>next!=NULL)//尋找要刪除的結點當p1所指的學號不是輸入的學號并且p1所指的next指針不為空{(diào)p2=p1;p1=p1—〉next;//p2指向原p1指向的結點p1后移一個結點}if(num==p1—〉id)//如果輸入的學生準考證號是p1所指的學號結點找到后刪除{if(p1==head)head=p1->next;//如果head指針和p1指針相等則將下一個結點賦給指針headelsep2->next=p1-〉next;//否則將p1所指結點賦給p2所指結點將要刪除的學生信息跳過去cout<<"刪除學號為"〈<num〈<"的學生\n";n-—;//將學生人數(shù)減1}return(head);//將頭指針返回}}//查找學生信息函數(shù)student*Information::find(student*head,longintnum)//定義一個指向structstudent的結構體指針函數(shù)*find()用來查找學生信息.{if(head==NULL)//若調(diào)用次函數(shù)以前的頭指針head為空{(diào)cout<〈”這是一個空表,請先輸入考生成績.\n”;return(head);}else{p1=head;//否則將頭指針賦給p1while(num!=p1->id&&p1—>next!=NULL)//尋找結點當p1所指的學號不是輸入的學生學號并且p1所指的next指針不為空{p1=p1->next;//p1后移一個結點}if(num==p1->id)//如果要查找的學號是p1所指的學號{cout〈<”-——--—-—-----——--—---—-——--———------—-—-—-—-—---—--—————-—--—-—---—-—\n";cout<〈”學號姓名性別院系語文英語數(shù)學C++平均分總分\n";cout<〈”-——--——-—-———--——--—-——-—-———--—---———---——-----——-——-———-—-——-—-\n";cout〈〈setw(8)〈〈p1->id〈〈setw(9)<〈p1—〉name<<setw(8)<<p1->sex〈<setw(13)<<p1—〉score[0]〈〈setw(16)<〈p1—>score[1]〈<setw(10)〈<p1—>score[2]<<setw(9)<<p1—>score[3]<<setw(6)<〈p1—>total/4.0<<setw(11)〈〈p1->total〈<endl;cout<<”—-——--—---————-—--——-----—---—--——--—--—--------——-—-——-—--———--—-—\n";}elsecout<<"沒找到學號為"<〈num<<"的學生。\n";//結點沒找到return(head);}}voidInformat(yī)ion::inorder(student*head)//定義inorder()函數(shù)將考生的總分從大到小排列并輸出{inti,k,m=0,j;student*p[20];//定義一個指向structstudent的結構體指針數(shù)組pif(head!=NULL)//如果頭指針是空則繼續(xù){m=count(head);cout〈〈"——---——-——--—------—-—-----———-——-——-——----—-—-—--—--——--—---—----—-\n”;cout<<”學生成績統(tǒng)計表\n";cout〈〈"----—--————----——--———-—---—-—----—------—--——-—--—-----—-—-———--—-\n";cout〈<"學號姓名性別院系語文英語數(shù)學C++平均分總分名次\n";cout<<”-—-----—------——----—---—--———-——--—-—--—--—-——-——-—--—----————-—————-----—\n”;p1=head;for(k=0;k〈m;k++){p[k]=p1;p1=p1-〉next;}for(k=0;k〈m—1;k++)//選擇排序法for(j=k+1;j<m;j++)if(p[k]—>total〈p[j]->total){p2=p[k];p[k]=p[j];p[j]=p2;}for(i=0;i<m;i++){cout<<setw(8)〈<p1—〉id〈〈setw(9)〈〈p1-〉name〈<setw(8)〈<p1->sex<<setw(13)〈〈p1-〉score[0]<<setw(16)<〈p1-〉score[1]〈<setw(10)<〈p1—>score[2]〈<setw(9)<〈p1—〉score[3]<<setw(6)〈<p1->total/4。0〈<setw(11)〈〈p1-〉total<〈endl;cout〈〈”---—----—-———---——--—--—-—----—---------—----—--—-——-———------—-——---—-—\n”;}}}voidInformat(yī)ion::average(student*head)//求各科平均成績的函數(shù){intk,m;floatarg1=0,arg2=0,arg3=0,arg4=0;if(head==NULL)//如果頭指針是空則繼續(xù){cout<<"這是一個空表,請先輸入學生成績。\n”;}else{m=count(head);p1=head;for(k=0;k<m;k++){arg1+=p1—>score[0];arg2+=p1—〉score[1];arg3+=p1->score[2];arg4+=p1->score[3];p1=p1—>next;}arg1/=m;arg2/=m;arg3/=m;arg4/=m;cout<<”全班單科成績平均分\n”;cout〈<"-——-—-—-———-—-------—-——-—-—-—--—-—--——-—-———--————-—-———----—-———----—--—-—--\n";cout〈<"語文平均分:"<<setw(7)〈<arg1〈〈"英語平均分:”<<setw(7)〈<arg2<<”數(shù)學平均分:"<<setw(7)〈<arg3<<”C++平均分:”〈<setw(7)〈〈arg4〈<endl;cout<<”---——--—---—--—-----————--————----—-—--—-------———---—--—-——------—-——--\n";}}voidInformation::save(student*head)//保存函數(shù).{ofstreamout("data。txt",ios::out);out<<count(head)<<endl;while(head!=NULL){out<<head->name<<”\t"〈<head-〉id<〈"\t”〈<"\t"<<head->sex<<”\t"<<head->score[0]<<"\t”<<head—>score[1]<<”\t"<<head->score[2]<〈"\t"<<head—>score[3]<〈”\t”<<head->total<〈endl;head=head-〉next;}}student*Information::Read()//讀取函數(shù)的實現(xiàn){inti=0;p1=p2=(student*)malloc(LEN);head=NULL;ifstreamin("data.txt”,ios::out);in>〉i;if(i==0){cout<〈"data.txt文件中的數(shù)據(jù)為空,請先輸入數(shù)據(jù)."<<endl;return0;}else{cout〈<"…………………………”〈〈endl;for(;i〉0;i—-){p1=(student*)malloc(LEN);cin〉〉s〉〉st.id>>st.sex〉〉st.score[0]>>st.score[1]〉>st.score[2]>>st。score[3]>〉st。total;strcpy(p1->name,st.name);p1—〉id=st.id;strcpy(p1->sex,st.sex);p1—〉score[0]=st。score[0];p1->score[1]=st.score[1];p1->score[2]=st.score[2];p1—>score[3]=st.score[3];p1—〉total=st.total;if(n==0)head=p1;//如果是輸入第一組學生考試信息就將指針p1賦給指針headelsep2—>next=p1;//否則將p1賦給p2所指結構體的next指針p2=p1;//將指針p1賦給指針p2n++;//將n的值加1cout〈<""〈〈p1—>name〈<"\t"http://顯示讀入數(shù)據(jù)<〈p1->id〈<”\t"<<"\t”〈<p1—〉sex〈〈”\t"<〈p1—>score[0]<<"\t"〈〈p1-〉score[1]<<"\t"<<p1->score[2]<〈”\t"〈<p1—〉score[3]〈〈”\t"〈<p1—>total〈<endl;cout<<”…………………………”<〈endl;//}cout<〈”數(shù)據(jù)已經(jīng)成功讀取完畢?!保肌磂ndl;p2->next=NULL;return(head);}}intmain()//主函數(shù)。{system("color4f”);//改變登陸界面顏色 Informationperson;student*head=NULL;charstr[5];intflag=0;intchoice;longinti;charadmin[20];charpass[30];cout<<"請輸入賬號\n";cin>>admin;cout<<”請輸入密碼\n";cin>>pass;if(strcmp(admin,"1111")==0&&strcmp(pass,"222")==0){do{cout<<"******************************************************************************”〈〈endl;cout〈〈”┃學生信息管理系統(tǒng)主菜單界面*************"<<endl;cout〈<"┃"<<endl;cout〈〈"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫”<〈endl;cout<<"┃①。輸入學生信息┃"〈<endl;cout〈<”┃②。顯示學生信息┃"<〈endl;cout<<"┃③.排序統(tǒng)計成績┃"〈<endl;cout<〈"┃④.查找學生信息┃"〈<endl;cout<〈"┃⑤。增加學生信息┃"<〈endl;cout〈〈"┃⑥。刪除學生信息┃"<<endl;cout〈<"┃⑦.保存退出系統(tǒng)┃”〈〈endl;cout<〈”┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"〈<endl;cout<<"請輸入您的選擇(1—-7):()\b\b";cin>>str;if(atoi(str)〉7||atoi(str)<1)cout<<”對不起,請輸入1-7這幾個數(shù)字!?。躰";else{choice=at(yī)oi(str);switch(choice){case1:head=person.creat();break;case2:person。output(head);break;case3:person。inorder(head);person.average(head);cout<〈"學生人數(shù)為:"<〈person.count(head)〈<"人\n";break;case4:cout〈〈”請輸入要查找的學號(9位):”;do{cin>〉str;if(atol(str)〉999999999||atol(str)<1)cout<<”對不起,請輸入正確輸入!!!\n";else{i=at(yī)ol(str);flag=1;}}while(flag==0);flag=0;person。find(head,i);break;case5:head=person.insert(head);person.output(head);break;case6:cout<<"請輸入要刪除的學號(9位):";do{cin>>str;if(atol(str)>999999999||atol(str)〈1)cout<<”對不起
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- MTX-PEG-Cy3-生命科學試劑-MCE-2911
- ABBV-706-生命科學試劑-MCE-4729
- 5-Fluoro-PB-22-N-4-fluoropentyl-isomer-生命科學試劑-MCE-3095
- 3-2-3-Dimethylphenyl-2-methylquinazolin-4-one-生命科學試劑-MCE-9046
- 二零二五年度租車平臺與車主合作服務協(xié)議
- 2025年度財務審核合同中的稅務合規(guī)審查標準
- 二零二五年度親子餐飲品牌區(qū)域加盟合作協(xié)議
- 二零二五年度新能源發(fā)電站電工維護服務合同
- 二零二五年度智慧城市建設聘用協(xié)議及勞務合同
- 二零二五年度城市綠化苗木移栽與病蟲害防治合同
- 保潔服務品質(zhì)履約評估報告
- 火龍罐綜合灸療法
- 紅色中國風西安旅游PPT模板
- 皮內(nèi)注射技術操作考核評分標準
- 個人借條電子版模板
- 工業(yè)企業(yè)電源快速切換裝置設計配置導則
- 年產(chǎn)3萬噸噴氣紡、3萬噸氣流紡生產(chǎn)線項目節(jié)能評估報告
- GB/T 1094.1-2013電力變壓器第1部分:總則
- 2023年益陽醫(yī)學高等??茖W校單招綜合素質(zhì)考試筆試題庫及答案解析
- 胸外科診療指南和操作規(guī)范
- 電網(wǎng)基本知識
評論
0/150
提交評論