C語(yǔ)言課程設(shè)計(jì)_第1頁(yè)
C語(yǔ)言課程設(shè)計(jì)_第2頁(yè)
C語(yǔ)言課程設(shè)計(jì)_第3頁(yè)
C語(yǔ)言課程設(shè)計(jì)_第4頁(yè)
C語(yǔ)言課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程名稱 C語(yǔ)言課程設(shè)計(jì) 課題名稱 學(xué)生成績(jī)管理 專 業(yè)班 級(jí)學(xué) 號(hào)姓 名指導(dǎo)教師湖南工程學(xué)院課 程 設(shè) 計(jì) 任 務(wù) 書(shū)課程名稱 C語(yǔ)言課程設(shè)計(jì) 課 題 學(xué)生成績(jī)管理 專業(yè)班級(jí) 學(xué)生姓名 學(xué) 號(hào) 指導(dǎo)老師 審 批 任務(wù)書(shū)下達(dá)日期 任務(wù)完成日期 目錄一、 課程設(shè)計(jì)內(nèi)容與主要功能 .4二、 課題分析 .6三、 主要功能的實(shí)現(xiàn)步驟 .7四、 程序測(cè)試.13調(diào)試分析與結(jié)論.21五、 總結(jié) .22六、 附件 .23一、 課題設(shè)計(jì)內(nèi)容與主要功能程序設(shè)計(jì)內(nèi)容對(duì)一個(gè)班級(jí)的學(xué)生,每個(gè)學(xué)生有N門課程。該系統(tǒng)實(shí)現(xiàn)對(duì)班級(jí)成績(jī)的錄入、顯示、刪除、查找、添加、計(jì)算、修改、排序、保存等操作的管理。設(shè)計(jì)思想結(jié)構(gòu)化程序設(shè)計(jì)一般

2、由兩部分組成:算法和數(shù)據(jù)結(jié)構(gòu),合理地選擇和實(shí)現(xiàn)一個(gè)數(shù)據(jù)結(jié)構(gòu)與處理這些數(shù)據(jù)結(jié)構(gòu)具有同樣的重要性。數(shù)據(jù)結(jié)構(gòu)在本課題中,每個(gè)學(xué)生的成績(jī)門數(shù)用先預(yù)先定義一個(gè)常數(shù)N表示。將學(xué)生的信息:學(xué)號(hào)、姓名、成績(jī)、總分、平均分、名次。定義成如下的數(shù)據(jù)結(jié)構(gòu):#define N 3typedef struct s1char no 11; /*學(xué)號(hào)*/char name16; /*姓名*/int scoreN; /*成績(jī)*/float sum; /*總分*/float average; /*平均分*/int order; /*名次*/struct s1 next;/*指向后繼結(jié)點(diǎn)的指針*/(2)main()主函數(shù)主函數(shù)是

3、程序的入口,采用模塊化設(shè)計(jì),主函數(shù)不宜復(fù)雜,功能盡量在各模塊中實(shí)現(xiàn)。首先聲明一些必要的變量,然后作一無(wú)限循環(huán)程序,循環(huán)體為一個(gè)開(kāi)關(guān)語(yǔ)句,該語(yǔ)句的條件值是通過(guò)調(diào)用主菜單函數(shù)得到的返回值,根據(jù)該值,調(diào)用相應(yīng)的各功能函數(shù),同時(shí)設(shè)置一個(gè)斷點(diǎn),即當(dāng)返回值為一定條件時(shí)運(yùn)行exit()函數(shù)結(jié)束程序,以免造成死循環(huán)。menu_select()主菜單制作一個(gè)單邊框的窗口,窗口背景為藍(lán)色,在窗口中顯示光帶主菜單,字體顏色為黃色,同時(shí)光標(biāo)默認(rèn)定位在第一項(xiàng)菜單上,用光標(biāo)的上下移動(dòng)即可選中所需選項(xiàng),選中項(xiàng)背景不綠色,按回車鍵后進(jìn)入相應(yīng)的功能函數(shù),而不必輸入數(shù),真正具有了窗口的特性,方便了操作。利用函數(shù)bioskey()

4、識(shí)別按了什么鍵,根據(jù)光標(biāo)停留在窗口的行數(shù)換算成對(duì)應(yīng)的菜單項(xiàng),作為菜單函數(shù)的返回值。init()初始化初始化單鏈表。enter()錄入記錄輸入學(xué)生信息,按照提示信息輸入學(xué)號(hào)(字符串不超過(guò)10位)、姓名(字符串不超過(guò)15位)、三門課程成績(jī)(整數(shù)0-100),每輸入一個(gè)數(shù)就按一下回車鍵,進(jìn)行下一個(gè)數(shù)的輸入,當(dāng)在輸入學(xué)號(hào)首字符為時(shí)結(jié)束輸入,返回主函數(shù)。list()顯示所有記錄學(xué)生成績(jī)信息錄入好后,更頻繁的操作是顯示和查找記錄,本函數(shù)實(shí)現(xiàn)學(xué)生信息的顯示功能。delete(); /*刪除記錄*/刪除指定學(xué)號(hào)的學(xué)生記錄。首先輸入要?jiǎng)h除學(xué)生記錄的學(xué)號(hào),輸入后判斷該學(xué)生是否存在,如果不存在,則輸出沒(méi)找到的提示信

5、息;否則,顯示找到的學(xué)生信息,按任意鍵后進(jìn)行該學(xué)生信息的刪除。search(); /*查找記錄*/按照學(xué)生姓名查找學(xué)生信息,如果查找成功,則顯示信息,否則顯示提示沒(méi)找到的信息。姓名是字符串,比較功能利用字符串比較函數(shù)strcmp()實(shí)現(xiàn)。add(); /*添加記錄*/添加記錄函數(shù)的功能是將新的記錄緊跟在原來(lái)所有信息記錄的后面進(jìn)行添加,添加一個(gè)學(xué)生后。computer(); /*計(jì)算總分和均分*/該功能是計(jì)算所有學(xué)生成績(jī)的總分和平均分。void sort(); /*排序*/對(duì)于學(xué)生成績(jī)的管理,一個(gè)很重要的運(yùn)算是將學(xué)生按照分?jǐn)?shù)由高到低排名,本函數(shù)實(shí)現(xiàn)按照總分排序功能,最后根據(jù)排序后學(xué)生信息的排列順

6、序,將每個(gè)學(xué)生名次寫(xiě)入order的當(dāng)中。本程序利用數(shù)組和指針完成對(duì)學(xué)生成績(jī)的動(dòng)態(tài)管理,其基本功能模塊圖如圖21所示。主程序初始化輸入顯示刪除查找添加計(jì)算排序退出圖2-1基本功能模塊通過(guò)實(shí)現(xiàn)學(xué)生成績(jī)管理,了解數(shù)據(jù)庫(kù)管理的基本功能,掌握C語(yǔ)言中的數(shù)組、指針、函數(shù)(系統(tǒng)函數(shù)、自定義函數(shù))等知識(shí),是一個(gè)C語(yǔ)言知識(shí)的比較綜合應(yīng)用。二、課題分析(分析課程設(shè)計(jì)項(xiàng)目的實(shí)現(xiàn)方法,并寫(xiě)出類聲明與核心算法實(shí)現(xiàn)代碼)。該系統(tǒng)是一個(gè)簡(jiǎn)單的學(xué)生擋案管理系統(tǒng),能夠使學(xué)生了解到相應(yīng)的信息。同時(shí)也減少了老師的工作量。整個(gè)系統(tǒng)除了主函數(shù)外,另外還有五個(gè)函數(shù),實(shí)現(xiàn)五大功能:插入功能、顯示功能、查找功能、修改功能、刪除功能。該系統(tǒng)的

7、插入功能可以每次可以任意插入一位學(xué)生的學(xué)生信息;顯示功能可以任意顯示一名或多名學(xué)生信息;查找功能分為學(xué)號(hào)查找和姓名查找兩種查找方式;刪除功能和修改功能進(jìn)入這兩個(gè)系統(tǒng)時(shí)可選擇進(jìn)行學(xué)號(hào)對(duì)比和姓名對(duì)比兩種方式。該系統(tǒng)操作簡(jiǎn)單,這也利于管理人員進(jìn)行實(shí)際的操作。 主要流程結(jié)構(gòu)學(xué)生成績(jī)管理系統(tǒng)成績(jī)錄入 成績(jī)顯示成績(jī)刪除成績(jī)查找成績(jī)添加成績(jī)排序退出系統(tǒng)三、主要功能的實(shí)現(xiàn)步驟 輸入記錄函數(shù) 這是一個(gè)無(wú)參函數(shù),用來(lái)執(zhí)行第學(xué)生成績(jī)記錄的輸入,函數(shù)結(jié)束后,帶回一個(gè)指鏈表頭的指針向r。將下一個(gè)學(xué)生的信息插在表頭。N-S流程圖如下:r=l;s=l->next;指針 l->next 指向新開(kāi)辟的單元指針 l-

8、>next r是否為空是否輸入學(xué)號(hào)num輸出strcmp(num,”0”)是否為0內(nèi)存是否溢出 輸入姓名停止while(s)輸入輸入成績(jī)返回p->data.grade;菜單 ;p->data.ave=p->data.totle / 4;p->next=NULL; r->next=p; r=p;顯示記錄函數(shù) void Disp(link l)這是一個(gè)不返回值的有參函數(shù),形參為“鏈表頭的指針”,負(fù)責(zé)對(duì)全部學(xué)生成績(jī)記錄的輸出,不足之處就是不能對(duì)學(xué)生成績(jī)進(jìn)行分頁(yè)顯示。算法:先將p結(jié)點(diǎn)的指針指向第一個(gè)結(jié)點(diǎn),將p結(jié)點(diǎn)(即第一個(gè)結(jié)點(diǎn))的數(shù)據(jù)輸出。然后再將p結(jié)點(diǎn)的指針指向p

9、指針的的指針(即下一結(jié)點(diǎn)),將p結(jié)點(diǎn)(即第一結(jié)點(diǎn))的數(shù)據(jù)輸出。重復(fù)執(zhí)行此步聚直到p指針指向NULL為止。N-S流程圖如下: p=l->next,使指向第一個(gè)結(jié)點(diǎn) 輸出p所指向的結(jié)點(diǎn)p->next指向一下個(gè)結(jié)點(diǎn)當(dāng)p指的不是表尾保存數(shù)據(jù)到文件函數(shù) void Save(link l)這是一個(gè)不返回值的有參函數(shù),形參為“鏈表頭的指針”,可以把學(xué)生記錄保存在電腦上由自己任意命名的二進(jìn)制文件。查找記錄函數(shù) void Qur(link l)這是一個(gè)不返回值的有參函數(shù),形參為“鏈表頭的指針”,實(shí)現(xiàn)按學(xué)號(hào)對(duì)某個(gè)學(xué)生進(jìn)行查找,并顯示所查找到的記錄。算法:采用線性查找法往下一個(gè)結(jié)點(diǎn)查找。輸入所要查找的學(xué)

10、生的學(xué)號(hào)s,設(shè)一個(gè)指針變量p,先指向第一個(gè)結(jié)點(diǎn),當(dāng)strcmp(p->name,s) && p != NULL時(shí),使p后移一個(gè)結(jié)點(diǎn),如果p!=NULL,輸出p所指的結(jié)點(diǎn)。結(jié)構(gòu)流程圖如下:開(kāi)始Void find()打開(kāi)文件選擇查找方式學(xué)號(hào)查找姓名查找Strcmp(NO,stui.number)Strcmp(name,)輸出學(xué)生信息輸出學(xué)生信息輸出錯(cuò)誤輸出錯(cuò)誤結(jié)束查找程序保存關(guān)閉文件結(jié)束刪除函數(shù) Del(link l)這是一個(gè)有返回值的有參函數(shù)。形參為“鏈表頭的指針”,在核對(duì)密碼后。實(shí)現(xiàn)對(duì)所要?jiǎng)h除學(xué)生按學(xué)號(hào)進(jìn)行查找。找到后顯示該學(xué)生的信息。按任意鍵進(jìn)行刪除。

11、算法:主函數(shù)鏈表的頭指針,用一個(gè)輸出語(yǔ)句printf("Input your password:");提示用戶輸入密碼。在輸入過(guò)程中如果需要用到退格。putchar(8);putchar(' '); putchar(8);來(lái)達(dá)到視覺(jué)和功能上的要求。如果密碼錯(cuò)誤,則兩秒后自動(dòng)返回主菜單。正確后輸入要?jiǎng)h除的學(xué)生學(xué)號(hào),進(jìn)行刪除。開(kāi)始打開(kāi)文件void Del(Link l)輸入所需刪除學(xué)生信息的學(xué)生的學(xué)號(hào)刪除該學(xué)生的信息之后,把所有該學(xué)生以后的學(xué)生信息都復(fù)制給前面一個(gè)學(xué)生的學(xué)生信息,來(lái)填補(bǔ)空位該學(xué)生檔案管理系統(tǒng)中不存在此學(xué)號(hào),不做任何處理。結(jié)束刪除程序關(guān)閉保存文件S

12、tcmp(num,stui.number)修改函數(shù) void Modify(link l)這是一個(gè)有參函數(shù),一個(gè)是“鏈表頭的指針”修改之后,并返回鏈表的頭指針。算法:首先向系統(tǒng)申請(qǐng)一塊空間,用于存放輸入的信息。程序會(huì)根據(jù)用戶輸入的學(xué)號(hào)。采用線性查找法往下一個(gè)結(jié)點(diǎn)查找。設(shè)一個(gè)指針變量p,先指向第一個(gè)結(jié)點(diǎn),當(dāng)strcmp(p->) && p != NULL時(shí),使p后移一個(gè)結(jié)點(diǎn),如果p!=NULL,輸出p所指的結(jié)點(diǎn)。如果有該學(xué)生就修改。并出現(xiàn)提示信息"資料修改成功"。如果沒(méi)有該學(xué)生則出現(xiàn)“沒(méi)有資料可以修改!”。結(jié)構(gòu)流程圖如下開(kāi)始Void modify()打開(kāi)

13、文件輸入要修改的學(xué)生信息的學(xué)生的學(xué)號(hào)Stcmp(num,stui.number)修改該學(xué)生所需修改的學(xué)生信息無(wú)該學(xué)生學(xué)號(hào),系統(tǒng)不作任何修改結(jié)束對(duì)學(xué)生信息的修改程序關(guān)閉保存文件結(jié)束定位鏈表函數(shù):Node* Locate(Link l,char findmess,char nameornumber)這是一個(gè)不返回值的有參函數(shù),形參為“鏈表頭的指針”,根據(jù)輸入的文件地址進(jìn)行讀取。排序函數(shù) void Sort (link l)這是一個(gè)有參函數(shù),形參為“鏈表頭的指針”,按學(xué)生成績(jī)的平均分高低進(jìn)行排序,還可以顯示名次。四、程序測(cè)試與結(jié)論(應(yīng)包括課程設(shè)計(jì)程序的屏幕顯示,并加以簡(jiǎn)單的文字說(shuō)明)。1、開(kāi)始運(yùn)行頁(yè)

14、面如圖1所示 圖12、輸入學(xué)生信息數(shù)據(jù)頁(yè)面如圖2所示圖23、刪除記錄頁(yè)面如圖3所示圖34、查找全部記錄頁(yè)面如圖4所示圖45、查找記錄頁(yè)面如圖5所示圖56、保存文件頁(yè)面如圖6所示圖67、讀文件頁(yè)面如圖7所示圖78、計(jì)算總分和平均分頁(yè)面如圖8所示圖89、插入記錄頁(yè)面如圖9所示圖910、復(fù)制文件如圖10所示圖1011、為所有學(xué)生排序頁(yè)面如圖11所示圖1112、追加記錄頁(yè)面如圖12圖1213、索引成功頁(yè)面如圖13所示圖1314、分類合計(jì)頁(yè)面如圖14圖14調(diào)試分析與結(jié)論:五、總結(jié)六、附件(所有程序的原代碼,要求對(duì)程序?qū)懗霰匾淖⑨專?*xuesheng.c*/*頭文件(.h)*/#include &q

15、uot;stdio.h" /*I/O函數(shù)*/#include "stdlib.h" /*其它說(shuō)明*/#include "string.h" /*字符串函數(shù)*/#include "conio.h" /*屏幕操作函數(shù)*/#include "mem.h" /*內(nèi)存操作函數(shù)*/#include "ctype.h" /*字符操作函數(shù)*/#include "alloc.h" /*動(dòng)態(tài)地址分配函數(shù)*/#define N 3 /*定義常數(shù)*/typedef struct z1 /*

16、定義數(shù)據(jù)結(jié)構(gòu)*/ char no11; char name15; int scoreN; float sum; float average; int order; struct z1 *next; STUDENT;/*以下是函數(shù)原型*/STUDENT *init(); /*初始化函數(shù)*/STUDENT *create(); /*創(chuàng)建鏈表*/STUDENT *delete(STUDENT *h); /*刪除記錄*/void print(STUDENT *h); /* 顯示所有記錄*/void search(STUDENT *h); /*查找*/void save(STUDENT *h); /*保

17、存*/STUDENT *load(); /*讀入記錄*/void computer(STUDENT *h); /*計(jì)算總分和均分*/STUDENT *insert(STUDENT *h); /*插入記錄*/void append(); /*追加記錄*/STUDENT *sort(STUDENT *h); /*排序*/int menu_select(); /*菜單函數(shù)*/*主函數(shù)開(kāi)始*/main() int i; STUDENT *head; /*鏈表定義頭指針*/ head=init(); /*初始化鏈表*/ clrscr(); /*清屏*/ for(;) /*無(wú)限循環(huán)*/ switch(me

18、nu_select() /*調(diào)用主菜單函數(shù),返回值整數(shù)作開(kāi)關(guān)語(yǔ)句的條件*/ /*值不同,執(zhí)行的函數(shù)不同,break 不能省略*/ case 0:head=init();break; /*執(zhí)行初始化*/ case 1:head=create();break; /*創(chuàng)建鏈表*/ case 2:head=delete(head);break; /*刪除記錄*/ case 3:print(head);break; /*顯示全部記錄*/ case 4:search(head);break; /*查找記錄*/ case 5:save(head);break; /*保存文件*/ case 6:head=lo

19、ad(); break; /*讀文件*/ case 7:computer(head);break; /*計(jì)算總分和均分*/ case 8:head=insert(head); break; /*插入記錄*/ case 9:head=sort(head);break; /*排序*/ case 10:append();break; /*追加記錄*/ case 11:exit(0); /*如菜單返回值為14程序結(jié)束*/ /*菜單函數(shù),返回值為整數(shù)*/menu_select() char *menu="*MENU*", /*定義菜單字符串?dāng)?shù)組*/ " 0. init li

20、st", /*初始化*/ " 1. Enter list", /*輸入記錄*/ " 2. Delete a record from list", /*從表中刪除記錄*/ " 3. print list ", /*顯示單鏈表中所有記錄*/ " 4. Search record on name", /*按照姓名查找記錄*/ " 5. Save the file", /*將單鏈表中記錄保存到文件中*/ " 6. Load the file", /*從文件中讀入記錄*/ &

21、quot; 7. compute the score", /*計(jì)算所有學(xué)生的總分和均分*/ " 8. insert record to list ", /*插入記錄到表中*/ " 9. sort to make new file", /*排序*/ " 10. append record to file", /*追加記錄到文件中*/ " 11. Quit" /*退出*/ char s3; /*以字符形式保存選擇號(hào)*/ int c,i; /*定義整形變量*/ gotoxy(1,25); /*移動(dòng)光標(biāo)*/ pr

22、intf("press any key enter menu.n"); /*壓任一鍵進(jìn)入主菜單*/ getch(); /*輸入任一鍵*/ clrscr(); /*清屏幕*/ gotoxy(1,1); /*移動(dòng)光標(biāo)*/ textcolor(YELLOW); /*設(shè)置文本顯示顏色為黃色*/ textbackground(BLUE); /*設(shè)置背景顏色為藍(lán)色*/ gotoxy(10,2); /*移動(dòng)光標(biāo)*/ putch(0xc9); /*輸出左上角邊框*/ for(i=1;i<44;i+) putch(0xcd); /*輸出上邊框水平線*/ putch(0xbb); /*輸

23、出右上角邊框 */ for(i=3;i<20;i+) gotoxy(10,i);putch(0xba); /*輸出左垂直線*/ gotoxy(54,i);putch(0xba); /*輸出右垂直線*/ gotoxy(10,20);putch(0xc8); /*輸出左上角邊框*/ for(i=1;i<44;i+) putch(0xcd); /*輸出下邊框水平線*/ putch(0xbc); /*輸出右下角邊框*/ window(11,3,53,19); /* 制作顯示菜單的窗口,大小根據(jù)菜單條數(shù)設(shè)計(jì)*/ clrscr(); /*清屏*/ for(i=0;i<13;i+) /*輸

24、出主菜單數(shù)組*/ gotoxy(10,i+1); cprintf("%s",menui); textbackground(BLACK); /*設(shè)置背景顏色為黑色*/ window(1,1,80,25); /*恢復(fù)原窗口大小*/ gotoxy(10,21); /*移動(dòng)光標(biāo)*/ do printf("n Enter you choice(014):"); /*在菜單窗口外顯示提示信息*/ scanf("%s",s); /*輸入選擇項(xiàng)*/ c=atoi(s); /*將輸入的字符串轉(zhuǎn)化為整形數(shù)*/ while(c<0|c>11);

25、 /*選擇項(xiàng)不在014之間重輸*/ return c; /*返回選擇項(xiàng),主程序根據(jù)該數(shù)調(diào)用相應(yīng)的函數(shù)*/STUDENT *init() return NULL;/*創(chuàng)建鏈表*/STUDENT *create() int i; int s; STUDENT *h=NULL,*info; /* STUDENT指向結(jié)構(gòu)體的指針*/ for(;) info=(STUDENT *)malloc(sizeof(STUDENT); /*申請(qǐng)空間*/ if(!info) /*如果指針info為空*/ printf("nout of memory"); /*輸出內(nèi)存溢出*/ return N

26、ULL; /*返回空指針*/ inputs("enter no:",info->no,11); /*輸入學(xué)號(hào)并校驗(yàn)*/ if(info->no0='') break; /*如果學(xué)號(hào)首字符為則結(jié)束輸入*/ inputs("enter name:",info->name,15); /*輸入姓名,并進(jìn)行校驗(yàn)*/ printf("please input %d score n",N); /*提示開(kāi)始輸入成績(jī)*/ s=0; /*計(jì)算每個(gè)學(xué)生的總分,初值為0*/ for(i=0;i<3;i+) /*3門課程

27、循環(huán)3次*/ scanf("%d",&info->scorei);while(info->scorei<0 | info->scorei>100); s=s+info->scorei; /*累加各門成績(jī)*/ info->sum=s; /*將總分保存*/ info->average=(float)s/3; /*先用強(qiáng)制類型轉(zhuǎn)換將s轉(zhuǎn)換成float型,再求平均值*/ info->order=0; /*未排序前此值為0*/ info->next=h; /*將頭結(jié)點(diǎn)做為新輸入結(jié)點(diǎn)的后繼結(jié)點(diǎn)*/ h=info; /*

28、新輸入結(jié)點(diǎn)為新的頭結(jié)點(diǎn)*/ return(h); /*返回頭指針*/*輸入字符串,并進(jìn)行長(zhǎng)度驗(yàn)證*/inputs(char *prompt, char *s, int count) char p255; do printf(prompt); /*顯示提示信息*/ scanf("%s",p); /*輸入字符串*/ if(strlen(p)>count)printf("n too long! n"); /*進(jìn)行長(zhǎng)度校驗(yàn),超過(guò)count值重輸入*/ while(strlen(p)>count); strcpy(s,p); /*將輸入的字符串拷貝到字

29、符串s中*/*輸出鏈表中結(jié)點(diǎn)信息*/void print(STUDENT *h) int i=0; /* 統(tǒng)計(jì)記錄條數(shù)*/ STUDENT *p; /*移動(dòng)指針*/ clrscr(); /*清屏*/ p=h; /*初值為頭指針*/ printf("nnn*STUDENT*n"); printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|n"); printf("|-|-|-|-|-|-|-|-|-|n"); while(p!=NULL) i+; printf("|%3

30、d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n", i, p->no,p->name,p->score0,p->score1,p->score2,p->sum,p->average,p->order); p=p->next; printf("*end*n");/*刪除記錄*/STUDENT *delete(STUDENT *h) STUDENT *p,*q; /*p為查找到要?jiǎng)h除的結(jié)點(diǎn)指針,q為其前驅(qū)指針*/ char c; char s11; /*存放學(xué)號(hào)

31、*/ clrscr(); /*清屏*/ printf("please deleted non"); /*顯示提示信息*/ scanf("%s",s); /*輸入要?jiǎng)h除記錄的學(xué)號(hào)*/ q=p=h; /*給q和p賦初值頭指針*/ while(strcmp(p->no,s) &&q!= NULL) /*當(dāng)記錄的學(xué)號(hào)不是要找的,或指針不為空時(shí)*/ q=p; /*將p指針值賦給q作為p的前驅(qū)指針*/p=p->next; /*將p指針指向下一條記錄*/ if(strcmp(p->no,s)=0) /*學(xué)號(hào)找到了*/ printf(&

32、quot;*FOUND*n"); printf("-n"); printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |n"); printf("-n"); printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|n",p->no,p->name,p->score0,p->score1,p->score2,p->sum,p->average,

33、p->order); printf("-n"); printf("*END*n"); printf("Are you sure to delete the student Y/N ?"); /*提示是否要?jiǎng)h除,輸入Y刪除,N則退出*/ for(;) scanf("%c",&c); if(c='n'|c='N') break; /*如果不刪除,則跳出本循環(huán)*/ if(c='y'|c='Y') if(p=h) /*若p=head,說(shuō)明被刪結(jié)點(diǎn)

34、是首結(jié)點(diǎn)*/ h=p->next; /*把第二個(gè)結(jié)點(diǎn)地址賦予head*/ else q->next=p->next; /*否則將一下結(jié)點(diǎn)地址賦給前一結(jié)點(diǎn)地址*/ /* n=n-1;*/ printf("nNum %s student have been deleted.n",s); printf("Don't forget to save.n");break; /*刪除后就跳出循環(huán)*/ else printf("nThere is no num %s student on the list.n",s); /*

35、找不到該結(jié)點(diǎn)*/return(h);/*/ if(p=NULL) /*如果p為空,說(shuō)明鏈表中沒(méi)有該結(jié)點(diǎn)*/ printf("nlist no %s studentn",s); else /*p不為空,顯示找到的記錄信息*/ printf("*have found*n"); printf("|no | name | sc1| sc2| sc3| sum | ave |order|n"); printf("|-|-|-|-|-|-|-|-|n"); printf("|%-10s|%-15s|%4d|%4d|%

36、4d| %4.2f | %4.2f | %3d |n", p->no, p->name,p->score0,p->score1,p->score2,p->sum, p->average,p->order); printf("*end*n"); getch(); /*壓任一鍵后,開(kāi)始刪除*/ if(p=h) /*如果p=h,說(shuō)明被刪結(jié)點(diǎn)是頭結(jié)點(diǎn)*/ h=p->next; /*修改頭指針指向下一條記錄*/ else q->next=p->next; /*不是頭指針,將p的后繼結(jié)點(diǎn)作為q的后繼結(jié)點(diǎn)*/ f

37、ree(p); /*釋放p所指結(jié)點(diǎn)空間*/ printf("n have deleted No %s studentn",s); printf("Don't forget saven");/*提示刪除后不要忘記保存文件*/ return(h); /*返回頭指針*/*查找記錄*/void search(STUDENT *h) STUDENT *p; /* 移動(dòng)指針*/ char s15; /*存放姓名的字符數(shù)組*/ clrscr(); /*清屏幕*/ printf("please enter name for searchn")

38、; scanf("%s",s); /*輸入姓名*/ p=h; /*將頭指針賦給p*/ while(strcmp(p->name,s)&&p!=NULL) /*當(dāng)記錄的姓名不是要找的,或指針不為空時(shí)*/ p=p->next; /*移動(dòng)指針,指向下一結(jié)點(diǎn)*/ if(p=NULL) /*如果指針為空*/ printf("nlist no %s studentn",s); /*顯示沒(méi)有該學(xué)生*/ else /*顯示找到的記錄信息*/ printf("nn*havefound*n"); printf("|n

39、O | name | sc1| sc2| sc3| sum | ave |order|n"); printf("|-|-|-|-|-|-|-|-|n"); printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |n", p->no,p->name,p->score0,p->score1,p->score2,p->sum,p->average,p->order); printf("*end*n"); /*插入記錄*/STUDE

40、NT *insert(STUDENT *h) STUDENT *p,*q,*info; /*p指向插入位置,q是其前驅(qū),info指新插入記錄*/ char s11; /*保存插入點(diǎn)位置的學(xué)號(hào)*/ int s1,i; printf("please enter location before the non"); scanf("%s",s); /*輸入插入點(diǎn)學(xué)號(hào)*/ printf("nplease new recordn"); /*提示輸入記錄信息*/ info=(STUDENT *)malloc(sizeof(STUDENT); /*申

41、請(qǐng)空間*/ if(!info) printf("nout of memory"); /*如沒(méi)有申請(qǐng)到,內(nèi)存溢出*/ return NULL; /*返回空指針*/ inputs("enter no:",info->no,11); /*輸入學(xué)號(hào)*/ inputs("enter name:",info->name,15); /*輸入姓名*/ printf("please input %d score n",N); /*提示輸入分?jǐn)?shù)*/ s1=0; /*保存新記錄的總分,初值為0*/ for(i=0;i<N;i+) /*N門課程循環(huán)N次輸入成績(jī)*/ do /*對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,保證在0100之間*/ printf("score%d:",i+1); scanf("%d",&info->scorei); if(info->scorei>100|info->scorei<0) printf("bad data,repeat inputn"); while(info->scorei>100

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論