




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
#include"stdio.h"/*I/O函數(shù)*/#include"stdlib.h"/*其它說明*/#include"string.h"/*字符串函數(shù)*/#include"conio.h"/*屏幕操作函數(shù)*/#include"ctype.h"/*字符操作函數(shù)*/#defineN3/*定義常數(shù)*/#defineM30/*定義數(shù)據(jù)結(jié)構(gòu)*/typedefstructz1{charno[11];charname[15];intscore[N];floatsum;floataverage;intorder;structz1*next;}STUDENT;/*菜單函數(shù),返回值為整數(shù)*/menu_select(){char*menu[]={"***************MENU***************",/*定義菜單字符串數(shù)組*/"1.Enterlist",/*輸入統(tǒng)計*/"2.Printlist",/*顯示單鏈表中全部統(tǒng)計*/"3.Sorttomakenewfile",/*排序*/"4.Insertrecordtolist",/*插入統(tǒng)計到表中*/"5.Deletearecordfromlist",/*從表中刪除統(tǒng)計*/"6.Savethefile",/*將單鏈表中統(tǒng)計保留到文件中*/"7.Loadthefile",/*從文件中讀入統(tǒng)計*/"8.Quit",/*退出*//*屏幕調(diào)整,沒有實際意義*/"***********************************",};chars[3];/*以字符形式保留選擇號*/intc,i;/*定義整形變量*/textbackground(GREEN);/*設置背景顏色為黃色*/gotoxy(1,25);/*移動光標*/printf("Pressanykeyentermenu......\n");/*壓任一鍵進入主菜單*/getch();/*輸入任一鍵*/clrscr();/*清屏*/for(i=0;i<16;i++)/*輸出主菜單數(shù)組*/{gotoxy(10,i+1);cprintf("%s",menu[i]);}window(1,1,80,25);/*恢復原窗口大小*/gotoxy(10,21);/*移動光標*/do{printf("\nEnteryouchoice(1-8):");/*在菜單窗口外顯示提醒信息*/scanf("%s",s);/*輸入選擇項*/c=atoi(s);/*將輸入字符串轉(zhuǎn)化為整形數(shù)*/}while(c<0||c>9);/*選擇項不在0~9之間重輸*/returnc;/*返回選擇項,主程序依據(jù)該數(shù)調(diào)用對應函數(shù)*/}/*初始化鏈表*/STUDENT*init(){returnNULL;}/*創(chuàng)建鏈表,完成數(shù)據(jù)錄入功效*/STUDENT*create(){inti;ints;STUDENT*h=NULL,*info;/*STUDENT指向結(jié)構(gòu)體指針*/for(;;){info=(STUDENT*)malloc(sizeof(STUDENT));/*申請空間*/if(!info)/*假如指針info為空*/{printf("\nOutofmemory");/*輸出內(nèi)存溢出*/returnNULL;/*返回空指針*/}printf("Inputimformationasfollow.\n");printf("Press'#'after'EnterNO'toendtheinput.\n");inputs("EnterNO.:",info->no,11);/*輸入學號并校驗*/if(info->no[0]=='#')break;/*假如學號首字符為#則結(jié)束輸入*/inputs("Entername:",info->name,15);/*輸入姓名,并進行校驗*/printf("Pleaseinput%dscores\n",N);/*提醒開始輸入成績*/s=0;/*計算每個學生總分,初值為0*/for(i=0;i<N;i++)/*N門課程循環(huán)N次*/{do{printf("score%d:",i+1);/*提醒輸入第幾門課程*/scanf("%d",&info->score[i]);/*輸入成績*/if(info->score[i]>100||info->score[i]<0)/*確保成績在0~100之間*/printf("Baddata,repeatinput\n");/*犯錯提醒信息*/}while(info->score[i]>100||info->score[i]<0);s=s+info->score[i];/*累加各門課程成績*/}info->sum=s;/*將總分保留*/info->average=(float)s/N;/*求出平均值*/info->order=0;/*未排序前此值為0*/info->next=h;/*將頭結(jié)點做為新輸入結(jié)點后繼結(jié)點*/h=info;/*新輸入結(jié)點為新頭結(jié)點*//*沒排序前,后輸入數(shù)據(jù)將排在最上*/}return(h);/*返回頭指針*/}/*自定義輸入控制函數(shù)inputs*/inputs(char*prompt,char*s,intcount){charp[255];do{printf(prompt);/*顯示提醒信息*/scanf("%s",p);/*輸入字符串*/if(strlen(p)>count)printf("\nToolong!\n");/*進行長度校驗,超出count值重輸入*/}while(strlen(p)>count);strcpy(s,p);/*將輸入字符串拷貝到字符串s中*/}/*顯示模塊*/voidprint(STUDENT*h){inti=0;/*統(tǒng)計統(tǒng)計條數(shù)*/STUDENT*p;/*移動指針*/clrscr();/*清屏*/p=h;/*初值為頭指針*/printf("\n\n\n----------------------------------STUDENT---------------------------------\n");printf("|rec|NO.|name|english|math|computer|ave|order|\n");printf("|---|----------|---------------|--------|------|-----------|------|------|\n");while(p!=NULL){i++;if(i%15==0){getch();clrscr();printf("\n\n\n\n");}/*不然什么也不做*/elseprintf("|%2d|%-10s|%-15s|%8d|%6d|%11d|%5.2f|%5d|\n",i,p->no,p->name,p->score[0],p->score[1],p->score[2],p->average,p->order);p=p->next;}printf("---------------------------------end--------------------------------------\n");}/*排序模塊*/STUDENT*sort(STUDENT*h){inti=0;/*用來保留名次*/STUDENT*p,*q,*t,*h1;/*定義臨時指針*/h1=h->next;/*將原表頭指針所指下一個結(jié)點作頭指針*/h->next=NULL;/*斷開原來鏈表頭結(jié)點與其它結(jié)點連接*/while(h1!=NULL)/*當原表不為空時,進行排序*/{t=h1;/*取原表頭結(jié)點*/h1=h1->next;/*原表頭結(jié)點指針后移*/p=h;/*設定移動指針p,從頭指針開始*/q=h;/*設定移動指針q做為p前驅(qū),初值為頭指針*/while(t->sum<p->sum&&p!=NULL)/*作總分比較*/{q=p;/*待插入點值小,則新表指針后移*/p=p->next;}if(p==q)/*p==q,上面while沒有實施,也即插入點大于頭指針,此點應排在首位*/{t->next=p;/*待排序點后繼為p*/h=t;/*新頭結(jié)點為待排序點*/}else/*待排序點應插入在q和p之間,如p為空則是尾部*/{t->next=p;/*t后繼是p*/q->next=t;/*q后繼是t*/}}p=h;/*已排好序頭指針賦給p*/while(p!=NULL)/*給予各組數(shù)據(jù)排序號*/{i++;/*結(jié)點序號*/p->order=i;/*將名次賦值*/p=p->next;/*指針后移*/}printf("Sortsucess!!!\n");/*排序成功*/return(h);/*返回頭指針*/}STUDENT*insert(STUDENT*h){STUDENT*p,*q,*info,*k;/*p指向插入位置,q是其前驅(qū),info指新插入統(tǒng)計*/ints1,i,n=0;printf("\npleasenewrecord\n");info=(STUDENT*)malloc(sizeof(STUDENT));/*申請空間*/if(!info){printf("\Outofmemory");/*如沒有申請到,內(nèi)存溢出*/returnNULL;/*返回空指針*/}inputs("EnterNO.:",info->no,11);/*以下是待插入數(shù)據(jù)錄入和處理,具體同創(chuàng)建模塊同*/inputs("Entername:",info->name,15);printf("Pleaseinput%dscore\n",N);s1=0;for(i=0;i<N;i++){do{printf("score%d:",i+1);scanf("%d",&info->score[i]);if(info->score[i]>100||info->score[i]<0)printf("baddata,repeatinput\n");}while(info->score[i]>100||info->score[i]<0);s1=s1+info->score[i];}info->sum=s1;info->average=(float)s1/N;info->next=NULL;/*設后繼指針為空*/p=h;/*將指針賦值給p*/q=h;/*將指針賦值給q*/if(h==NULL)/*鏈表為空*/{h=info;info->next=NULL;}else{while((info->sum<p->sum)&&(p->next!=NULL)){q=p;/*使q指向p剛才結(jié)點*/p=p->next;}/*使p后移一個結(jié)點*/if(info->sum>=p->sum){if(h==p){h=info;info->next=p;}/*info作為頭指針,p作為info后繼指針*/elseq->next=info;/*q后繼指針是info*/info->next=p;}/*info后繼指針是p*/else{p->next=info;info->next=NULL;}}/*p后繼指針是info,info后繼指針是空*/k=h;while(k!=NULL)/*重新給予排序號(排序號因為被插入新數(shù)據(jù)而改變)*/{n++;k->order=n;k=k->next;}printf("\n----haveinserted%sstudent----\n",info->name);return(h);/*返回頭指針*/}/*刪除統(tǒng)計模塊*/STUDENT*delete(STUDENT*h){chark[5];/*定義字符串數(shù)組,用來確定刪除信息*/STUDENT*p,*q;/*p為查找到要刪除結(jié)點指針,q為其前驅(qū)指針*/chars[11];/*存放學號*/clrscr();/*清屏*/printf("PleaseenterdeletedNo.\n");/*顯示提醒信息*/scanf("%s",s);/*輸入要刪除統(tǒng)計學號*/q=p=h;/*給q和p賦初值頭指針*/while(strcmp(p->no,s)&&p!=NULL)/*當統(tǒng)計學號不是要找,或指針不為空時*/{q=p;/*將p指針值賦給q作為p前驅(qū)指針*/p=p->next;/*將p指針指向下一條統(tǒng)計*/}if(p==NULL)/*假如p為空,說明鏈表中沒有該結(jié)點*/printf("\nlistno%sstudent\n",s);else/*p不為空,顯示找到統(tǒng)計信息*/{printf("----------------------------------havefound---------------------------------\n");printf("|rec|NO.|name|english|math|computer|ave|order|\n");printf("|---|----------|---------------|--------|------|-----------|------|------|\n");printf("||%-10s|%-15s|%8d|%6d|%11d|%5.2f|%5d|\n",p->no,p->name,p->score[0],p->score[1],p->score[2],p->average,p->order);printf("---------------------------------end--------------------------------------\n");do{inputs("Doyoureallywanttodeleted?(y/n)",k,5);}while(k[0]!='y'&&k[0]!='n');if(k[0]!='n')/*刪除確定判定*/{if(p==h)/*假如p==h,說明被刪結(jié)點是頭結(jié)點*/h=p->next;/*修改頭指針指向下一條統(tǒng)計*/elseq->next=p->next;/*不是頭指針,將p后繼結(jié)點作為q后繼結(jié)點*/free(p);/*釋放p所指結(jié)點空間*/printf("\nhavedeletedNo%sstudent\n",s);}}return(h);/*返回頭指針*/}/*保留數(shù)據(jù)到文件模塊*/voidsave(STUDENT*h){FILE*fp;/*定義指向文件指針*/STUDENT*p;/*定義移動指針*/charoutfile[20];/*保留輸出文件名*/printf("Enteroutfilename,forexampleG:\\f1\\score.txt:\n");scanf("%s",outfile);if((fp=fopen(outfile,"wb"))==NULL)/*為輸出打開一個二進制文件,如沒有則建立*/{printf("Cannotopenfile\n");exit(1);}printf("\nSavingfile......\n");/*打開文件,提醒正在保留*/p=h;/*移動指針從頭指針開始*/while(p!=NULL)/*如p不為空*/{fwrite(p,sizeof(STUDENT),1,fp);/*寫入一條統(tǒng)計*/p=p->next;/*指針后移*/}fclose(fp);/*關(guān)閉文件*/printf("-----Savesuccess!!-----\n");/*顯示保留成功*/}/*導入信息模塊*/STUDENT*load(){STUDENT*p,*q,*h=NULL;/*定義統(tǒng)計指針變量*/FILE*fp;/*定義指向文件指針*/charinfile[20];/*保留文件名*/printf("Enterinfilename,forexampleG:\\f1\\score.txt:\n");scanf("%s",infile);/*輸入文件名*/if((fp=fopen(infile,"rb"))==NULL)/*打開一個二進制文件,為讀方法*/{printf("Cannotopenfile\n");/*如不能打開,返回頭指針*/returnh;}printf("\n-----Loadingfile!-----\n");p=(STUDENT*)malloc(sizeof(STUDENT));/*申請空間*/if(!p){printf("Outofmemory!\n");/*如沒有申請到,則內(nèi)存溢出*/returnh;/*返回空頭指針*/}h=p;/*申請到空間,將其作為頭指針*/while(!feof(fp))/*循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束*/{if(1!=fread(p,sizeof(STUDENT),1,fp))break;/*假如沒讀到數(shù)據(jù),跳
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年不銹鋼刀口角尺項目投資價值分析報告
- 2025年鱷魚紋壓花模具項目可行性研究報告
- 2025年銨碘奇效消毒劑項目可行性研究報告
- 2025年窗口鏡項目可行性研究報告
- 普惠托育網(wǎng)絡建設路徑與實施策略
- 2025年氣動活塞銷內(nèi)徑測臺項目可行性研究報告
- 防洪治理工程項目設計方案優(yōu)化
- 25年廠里職工安全培訓考試試題真題匯編
- 2025年智能凈化煙罩項目可行性研究報告
- 25年公司、項目部、各個班組三級安全培訓考試試題各地真題
- 飲食與免疫:如何通過飲食提高免疫力
- 中國常見古生物化石
- 腦脊液漏修補術(shù)后護理查房
- 《我不是藥神》劇本
- JJF 1101-2019《環(huán)境試驗設備溫度、濕度校準規(guī)范》規(guī)程
- 社區(qū)文體活動廣場建設項目可行性研究報告
- 新時代高職生創(chuàng)新創(chuàng)業(yè)教育PPT完整全套教學課件
- 第三章-春秋戰(zhàn)國時代的城市課件
- 醫(yī)務人員職業(yè)健康安全健康-課件
- 醫(yī)學文獻檢索重點
- 病區(qū)藥品規(guī)范化管理與問題對策黃池桃
評論
0/150
提交評論