




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
#include"stdio.h"/*I/O函數(shù)*/#include"stdlib.h"/*其它說(shuō)明*/#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***************",/*定義菜單字符串?dāng)?shù)組*/"1.Enterlist",/*輸入統(tǒng)計(jì)*/"2.Printlist",/*顯示單鏈表中全部統(tǒng)計(jì)*/"3.Sorttomakenewfile",/*排序*/"4.Insertrecordtolist",/*插入統(tǒng)計(jì)到表中*/"5.Deletearecordfromlist",/*從表中刪除統(tǒng)計(jì)*/"6.Savethefile",/*將單鏈表中統(tǒng)計(jì)保留到文件中*/"7.Loadthefile",/*從文件中讀入統(tǒng)計(jì)*/"8.Quit",/*退出*//*屏幕調(diào)整,沒(méi)有實(shí)際意義*/"***********************************",};chars[3];/*以字符形式保留選擇號(hào)*/intc,i;/*定義整形變量*/textbackground(GREEN);/*設(shè)置背景顏色為黃色*/gotoxy(1,25);/*移動(dòng)光標(biāo)*/printf("Pressanykeyentermenu......\n");/*壓任一鍵進(jìn)入主菜單*/getch();/*輸入任一鍵*/clrscr();/*清屏*/for(i=0;i<16;i++)/*輸出主菜單數(shù)組*/{gotoxy(10,i+1);cprintf("%s",menu[i]);}window(1,1,80,25);/*恢復(fù)原窗口大小*/gotoxy(10,21);/*移動(dòng)光標(biāo)*/do{printf("\nEnteryouchoice(1-8):");/*在菜單窗口外顯示提醒信息*/scanf("%s",s);/*輸入選擇項(xiàng)*/c=atoi(s);/*將輸入字符串轉(zhuǎn)化為整形數(shù)*/}while(c<0||c>9);/*選擇項(xiàng)不在0~9之間重輸*/returnc;/*返回選擇項(xiàng),主程序依據(jù)該數(shù)調(diào)用對(duì)應(yīng)函數(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));/*申請(qǐng)空間*/if(!info)/*假如指針info為空*/{printf("\nOutofmemory");/*輸出內(nèi)存溢出*/returnNULL;/*返回空指針*/}printf("Inputimformationasfollow.\n");printf("Press'#'after'EnterNO'toendtheinput.\n");inputs("EnterNO.:",info->no,11);/*輸入學(xué)號(hào)并校驗(yàn)*/if(info->no[0]=='#')break;/*假如學(xué)號(hào)首字符為#則結(jié)束輸入*/inputs("Entername:",info->name,15);/*輸入姓名,并進(jìn)行校驗(yàn)*/printf("Pleaseinput%dscores\n",N);/*提醒開(kāi)始輸入成績(jī)*/s=0;/*計(jì)算每個(gè)學(xué)生總分,初值為0*/for(i=0;i<N;i++)/*N門課程循環(huán)N次*/{do{printf("score%d:",i+1);/*提醒輸入第幾門課程*/scanf("%d",&info->score[i]);/*輸入成績(jī)*/if(info->score[i]>100||info->score[i]<0)/*確保成績(jī)?cè)?~100之間*/printf("Baddata,repeatinput\n");/*犯錯(cuò)提醒信息*/}while(info->score[i]>100||info->score[i]<0);s=s+info->score[i];/*累加各門課程成績(jī)*/}info->sum=s;/*將總分保留*/info->average=(float)s/N;/*求出平均值*/info->order=0;/*未排序前此值為0*/info->next=h;/*將頭結(jié)點(diǎn)做為新輸入結(jié)點(diǎn)后繼結(jié)點(diǎn)*/h=info;/*新輸入結(jié)點(diǎn)為新頭結(jié)點(diǎn)*//*沒(méi)排序前,后輸入數(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");/*進(jìn)行長(zhǎng)度校驗(yàn),超出count值重輸入*/}while(strlen(p)>count);strcpy(s,p);/*將輸入字符串拷貝到字符串s中*/}/*顯示模塊*/voidprint(STUDENT*h){inti=0;/*統(tǒng)計(jì)統(tǒng)計(jì)條數(shù)*/STUDENT*p;/*移動(dòng)指針*/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;/*用來(lái)保留名次*/STUDENT*p,*q,*t,*h1;/*定義臨時(shí)指針*/h1=h->next;/*將原表頭指針?biāo)赶乱粋€(gè)結(jié)點(diǎn)作頭指針*/h->next=NULL;/*斷開(kāi)原來(lái)鏈表頭結(jié)點(diǎn)與其它結(jié)點(diǎn)連接*/while(h1!=NULL)/*當(dāng)原表不為空時(shí),進(jìn)行排序*/{t=h1;/*取原表頭結(jié)點(diǎn)*/h1=h1->next;/*原表頭結(jié)點(diǎn)指針后移*/p=h;/*設(shè)定移動(dòng)指針p,從頭指針開(kāi)始*/q=h;/*設(shè)定移動(dòng)指針q做為p前驅(qū),初值為頭指針*/while(t->sum<p->sum&&p!=NULL)/*作總分比較*/{q=p;/*待插入點(diǎn)值小,則新表指針后移*/p=p->next;}if(p==q)/*p==q,上面while沒(méi)有實(shí)施,也即插入點(diǎn)大于頭指針,此點(diǎn)應(yīng)排在首位*/{t->next=p;/*待排序點(diǎn)后繼為p*/h=t;/*新頭結(jié)點(diǎn)為待排序點(diǎn)*/}else/*待排序點(diǎn)應(yīng)插入在q和p之間,如p為空則是尾部*/{t->next=p;/*t后繼是p*/q->next=t;/*q后繼是t*/}}p=h;/*已排好序頭指針賦給p*/while(p!=NULL)/*給予各組數(shù)據(jù)排序號(hào)*/{i++;/*結(jié)點(diǎn)序號(hào)*/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)計(jì)*/ints1,i,n=0;printf("\npleasenewrecord\n");info=(STUDENT*)malloc(sizeof(STUDENT));/*申請(qǐng)空間*/if(!info){printf("\Outofmemory");/*如沒(méi)有申請(qǐng)到,內(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;/*設(shè)后繼指針為空*/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é)點(diǎn)*/p=p->next;}/*使p后移一個(gè)結(jié)點(diǎn)*/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)/*重新給予排序號(hào)(排序號(hào)因?yàn)楸徊迦胄聰?shù)據(jù)而改變)*/{n++;k->order=n;k=k->next;}printf("\n----haveinserted%sstudent----\n",info->name);return(h);/*返回頭指針*/}/*刪除統(tǒng)計(jì)模塊*/STUDENT*delete(STUDENT*h){chark[5];/*定義字符串?dāng)?shù)組,用來(lái)確定刪除信息*/STUDENT*p,*q;/*p為查找到要?jiǎng)h除結(jié)點(diǎn)指針,q為其前驅(qū)指針*/chars[11];/*存放學(xué)號(hào)*/clrscr();/*清屏*/printf("PleaseenterdeletedNo.\n");/*顯示提醒信息*/scanf("%s",s);/*輸入要?jiǎng)h除統(tǒng)計(jì)學(xué)號(hào)*/q=p=h;/*給q和p賦初值頭指針*/while(strcmp(p->no,s)&&p!=NULL)/*當(dāng)統(tǒng)計(jì)學(xué)號(hào)不是要找,或指針不為空時(shí)*/{q=p;/*將p指針值賦給q作為p前驅(qū)指針*/p=p->next;/*將p指針指向下一條統(tǒng)計(jì)*/}if(p==NULL)/*假如p為空,說(shuō)明鏈表中沒(méi)有該結(jié)點(diǎn)*/printf("\nlistno%sstudent\n",s);else/*p不為空,顯示找到統(tǒng)計(jì)信息*/{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,說(shuō)明被刪結(jié)點(diǎn)是頭結(jié)點(diǎn)*/h=p->next;/*修改頭指針指向下一條統(tǒng)計(jì)*/elseq->next=p->next;/*不是頭指針,將p后繼結(jié)點(diǎn)作為q后繼結(jié)點(diǎn)*/free(p);/*釋放p所指結(jié)點(diǎn)空間*/printf("\nhavedeletedNo%sstudent\n",s);}}return(h);/*返回頭指針*/}/*保留數(shù)據(jù)到文件模塊*/voidsave(STUDENT*h){FILE*fp;/*定義指向文件指針*/STUDENT*p;/*定義移動(dòng)指針*/charoutfile[20];/*保留輸出文件名*/printf("Enteroutfilename,forexampleG:\\f1\\score.txt:\n");scanf("%s",outfile);if((fp=fopen(outfile,"wb"))==NULL)/*為輸出打開(kāi)一個(gè)二進(jìn)制文件,如沒(méi)有則建立*/{printf("Cannotopenfile\n");exit(1);}printf("\nSavingfile......\n");/*打開(kāi)文件,提醒正在保留*/p=h;/*移動(dòng)指針從頭指針開(kāi)始*/while(p!=NULL)/*如p不為空*/{fwrite(p,sizeof(STUDENT),1,fp);/*寫入一條統(tǒng)計(jì)*/p=p->next;/*指針后移*/}fclose(fp);/*關(guān)閉文件*/printf("-----Savesuccess!!-----\n");/*顯示保留成功*/}/*導(dǎo)入信息模塊*/STUDENT*load(){STUDENT*p,*q,*h=NULL;/*定義統(tǒng)計(jì)指針變量*/FILE*fp;/*定義指向文件指針*/charinfile[20];/*保留文件名*/printf("Enterinfilename,forexampleG:\\f1\\score.txt:\n");scanf("%s",infile);/*輸入文件名*/if((fp=fopen(infile,"rb"))==NULL)/*打開(kāi)一個(gè)二進(jìn)制文件,為讀方法*/{printf("Cannotopenfile\n");/*如不能打開(kāi),返回頭指針*/returnh;}printf("\n-----Loadingfile!-----\n");p=(STUDENT*)malloc(sizeof(STUDENT));/*申請(qǐng)空間*/if(!p){printf("Outofmemory!\n");/*如沒(méi)有申請(qǐng)到,則內(nèi)存溢出*/returnh;/*返回空頭指針*/}h=p;/*申請(qǐng)到空間,將其作為頭指針*/while(!feof(fp))/*循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束*/{if(1!=fread(p,sizeof(STUDENT),1,fp))break;/*假如沒(méi)讀到數(shù)據(jù),跳
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 石棉在分選機(jī)械中的應(yīng)用考核試卷
- 紡織品的智能監(jiān)測(cè)技術(shù)在健康領(lǐng)域的應(yīng)用考核試卷
- 紡織環(huán)保與可持續(xù)發(fā)展考試考核試卷
- 南京高三語(yǔ)文模擬作文
- 電氣安裝中的輸電線路故障定位與處理考核試卷
- 竹材采運(yùn)成本效益分析與優(yōu)化考核試卷
- 靜脈輸液工具的合理選擇 3
- 山西省百師聯(lián)盟2024?2025學(xué)年高二下學(xué)期3月聯(lián)考 數(shù)學(xué)試題【含答案】
- 臨床老年人噎食原因、危害及海姆立克急救法緊急施救操作
- 煙臺(tái)市重點(diǎn)中學(xué)2025屆初三4月質(zhì)量檢查語(yǔ)文試題試卷含解析
- 公司個(gè)人現(xiàn)實(shí)表現(xiàn)材料
- 2024年浙江杭州市林水局所屬事業(yè)單位招聘擬聘人員招聘歷年高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 再生資源行業(yè)培訓(xùn)課件
- DB35T 2094-2022 公路工程竣(交)工驗(yàn)收質(zhì)量檢測(cè)技術(shù)規(guī)程
- STEM教育理念下大班科學(xué)活動(dòng)的指導(dǎo)策略研究
- 對(duì)于慢性骨髓炎的護(hù)理
- 地下室手機(jī)信號(hào)解決方案
- 財(cái)務(wù)咨詢顧問(wèn)協(xié)議樣本
- 光電軸角編碼器校準(zhǔn)規(guī)范
- 2024年中國(guó)郵政航空有限公司招聘筆試參考題庫(kù)含答案解析
- 《物流成本管理 第4版》各章思考題及習(xí)題答案
評(píng)論
0/150
提交評(píng)論