學(xué)生成績(jī)管理系統(tǒng)論文.doc_第1頁(yè)
學(xué)生成績(jī)管理系統(tǒng)論文.doc_第2頁(yè)
學(xué)生成績(jī)管理系統(tǒng)論文.doc_第3頁(yè)
學(xué)生成績(jī)管理系統(tǒng)論文.doc_第4頁(yè)
學(xué)生成績(jī)管理系統(tǒng)論文.doc_第5頁(yè)
已閱讀5頁(yè),還剩24頁(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)介

學(xué)生成績(jī)管理系統(tǒng)一、 設(shè)計(jì)目的1、掌握對(duì)結(jié)構(gòu)體、指針、文件的操作和C語(yǔ)言算法的應(yīng)用。2、用程序?qū)崿F(xiàn)文件記錄的添加、修改、刪除、排序(包括對(duì)文件記錄按某個(gè)數(shù)據(jù)項(xiàng)排序)、查詢、插入,或動(dòng)態(tài)鏈表的建立、查找、修改、刪除、插入、輸出、排序,或結(jié)構(gòu)體數(shù)組的輸入、修改、刪除、插入、輸出。二、 設(shè)計(jì)過(guò)程1. 需求分析1)、系統(tǒng)界面需求進(jìn)入系統(tǒng)時(shí)應(yīng)當(dāng)出現(xiàn)人性化、個(gè)性化、隨性化的字符界面或圖形界面,提供菜單選項(xiàng),選擇執(zhí)行相應(yīng)的功能,輸入輸出數(shù)據(jù)或操作成功時(shí)要有相應(yīng)提示信息,此外還要提供幫助信息,如系統(tǒng)的功能介紹等,提供系統(tǒng)信息或程序信息,如作者、聯(lián)系方式等。2)、系統(tǒng)功能需求對(duì)設(shè)計(jì)題目進(jìn)行分析,可知系統(tǒng)主要功能可以有下面幾種,而且各種功能互相組合,形成或構(gòu)成新的功能。、輸入功能。第一次可通過(guò)在內(nèi)存中新建或創(chuàng)建動(dòng)態(tài)鏈表輸入學(xué)生的成績(jī)記錄和其他數(shù)據(jù)記錄,且隨時(shí)可以退出輸入,既可在退出時(shí)可自動(dòng)保存或提示保存或輸入完畢后返回主菜單選擇“保存文件”命令進(jìn)行手動(dòng)保存到硬盤,也可以在輸入過(guò)程中自動(dòng)保存。如果以前已經(jīng)建立過(guò)動(dòng)態(tài)鏈表且已經(jīng)保存到文件中,可先載入文件(相當(dāng)于打開文件、讀取文件),再插入新的記錄到動(dòng)態(tài)鏈表。、插入功能。插入或添加一個(gè)學(xué)生的成績(jī)記錄到已有的動(dòng)態(tài)鏈表中,比如載入文件后的動(dòng)態(tài)鏈表或剛剛新建的動(dòng)態(tài)鏈表。、查看功能。直接輸出未排序或已按某數(shù)據(jù)項(xiàng)排序(如按總成績(jī)從高到低排序)的動(dòng)態(tài)鏈表中所有學(xué)生的記錄到屏幕上顯示。、查找功能。查找的目的可能是查看數(shù)據(jù)、修改數(shù)據(jù)或刪除數(shù)據(jù)。查找的方式有精確查找和模糊查找兩種。精確查找,指根據(jù)學(xué)號(hào)、姓名或其他數(shù)據(jù)項(xiàng)在動(dòng)態(tài)鏈表中查找并顯示一個(gè)學(xué)生的成績(jī)記錄。模糊查找,指根據(jù)學(xué)號(hào)、姓名或其他數(shù)據(jù)項(xiàng)的邏輯組合條件在動(dòng)態(tài)鏈表中查找并顯示符合條件的學(xué)生的成績(jī)記錄。查找的結(jié)果可以返回地址(指針)用于查看、修改或刪除數(shù)據(jù)。、修改功能。根據(jù)學(xué)號(hào)、姓名或其他數(shù)據(jù)項(xiàng)在動(dòng)態(tài)鏈表中查找并修改一個(gè)學(xué)生的成績(jī)記錄。、刪除功能。根據(jù)學(xué)號(hào)、姓名或其他數(shù)據(jù)項(xiàng)在動(dòng)態(tài)鏈表中查找并刪除一個(gè)學(xué)生的成績(jī)記錄。、保存文件。將新建的或修改的動(dòng)態(tài)鏈表的所有數(shù)據(jù)寫入(或存入、存到)二進(jìn)制文件中。、載入文件。相當(dāng)于打開文件并讀取文件中所有學(xué)生的數(shù)據(jù)(包括班級(jí)、學(xué)號(hào)、姓名、成績(jī)等)到動(dòng)態(tài)鏈表。、幫助功能。顯示幫助信息和系統(tǒng)信息。、退出功能。退出系統(tǒng)或退出程序,可增加一個(gè)退出函數(shù),在退出時(shí)可顯示系統(tǒng)信息或程序信息。此外還有排序功能、統(tǒng)計(jì)功能和加密功能。排序功能,指可按成績(jī)、學(xué)號(hào)或姓名排序,而成績(jī)排序又可按單科成績(jī)或總成績(jī)排序。統(tǒng)計(jì)功能,指統(tǒng)計(jì)及格人數(shù)和優(yōu)秀人數(shù)。加密功能,指登錄系統(tǒng)要使用密碼驗(yàn)證,防止別人偷窺或篡改數(shù)據(jù)。2. 概要設(shè)計(jì)在需求分析的基礎(chǔ)上,確定系統(tǒng)總體框架(即系統(tǒng)功能結(jié)構(gòu)圖、系統(tǒng)模塊結(jié)構(gòu)圖)。系統(tǒng)各個(gè)功能的詳細(xì)解釋。1.Create a new list of students data創(chuàng)建鏈表。輸入學(xué)生的成績(jī)和其他信息,并且自動(dòng)計(jì)算總成績(jī)和平均成績(jī)2.Insert a student data插入記錄。在動(dòng)態(tài)鏈表中插入一個(gè)學(xué)生的成績(jī)記錄。3.Output all students data顯示記錄。自動(dòng)按總成績(jī)從高到低排序后顯示動(dòng)態(tài)鏈表中所有學(xué)生的成績(jī)記錄。4.Search a student data查找記錄。根據(jù)學(xué)號(hào)在動(dòng)態(tài)鏈表中查找并顯示一個(gè)學(xué)生的成績(jī)記錄。5.Modify a student data修改記錄。根據(jù)學(xué)號(hào)在動(dòng)態(tài)鏈表中查找并修改一個(gè)學(xué)生的成績(jī)記錄。6.Delete a student data刪除記錄。根據(jù)學(xué)號(hào)在動(dòng)態(tài)鏈表中查找并刪除一個(gè)學(xué)生的成績(jī)記錄。7.Save File 保存數(shù)據(jù)。將動(dòng)態(tài)鏈表的所有數(shù)據(jù)寫入(或存入、存到)二進(jìn)制文件中。8.Load File讀取數(shù)據(jù)。讀取文件中所有學(xué)生的數(shù)據(jù)(包括班級(jí)、學(xué)號(hào)、姓名、成績(jī)等)到動(dòng)態(tài)鏈表。9.Help 幫助。顯示幫助信息和系統(tǒng)信息。0.Exit 退出。如菜單返回值為0程序結(jié)束。3. 詳細(xì)設(shè)計(jì)1)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)系統(tǒng)使用了結(jié)構(gòu)體類型存儲(chǔ)學(xué)生的成績(jī)記錄和其他記錄。#define NUM 9 /*定義課程的數(shù)目*/struct student /* 學(xué)生的數(shù)據(jù)結(jié)構(gòu) */ char class_020; /班級(jí)int num; /學(xué)號(hào)char name20; /姓名float scoreNUM; /成績(jī)float total; /總分float ave; /平均分struct student *next; int order; /排名stu;2)、算法結(jié)構(gòu)設(shè)計(jì)系統(tǒng)使用了以下函數(shù)來(lái)實(shí)現(xiàn)系統(tǒng)各個(gè)模塊的功能。函數(shù)名稱函數(shù)功能struct student *create(void)創(chuàng)建鏈表,完成數(shù)據(jù)錄入功能 void TotalScore(struct student *head) 計(jì)算每個(gè)學(xué)生的總成績(jī)和平均成績(jī)void IntSwap(int *pt1, int *pt2) 交換兩個(gè)整型數(shù)void FloatSwap(float *pt1, float *pt2) 交換兩個(gè)實(shí)型數(shù)void CharSwap(char *pt1, char *pt2) 交換兩個(gè)字符串void SortScore(struct student *head) 對(duì)學(xué)生成績(jī)排序并確定名次struct student *InsertStudent(struct student *head) 按學(xué)號(hào)插入一個(gè)結(jié)點(diǎn)數(shù)據(jù)void PrintScore(struct student *head) 顯示所有已經(jīng)建立好的節(jié)點(diǎn)的節(jié)點(diǎn)號(hào)和該節(jié)點(diǎn)中數(shù)據(jù)項(xiàng)內(nèi)容void SearchStudent(struct student *head) 按學(xué)號(hào)查找并顯示一個(gè)結(jié)點(diǎn)數(shù)據(jù)void ModifyStudent(struct student *head) 按學(xué)號(hào)查找并修改一個(gè)結(jié)點(diǎn)數(shù)據(jù)struct student *DeleteStudent(struct student *head) 按學(xué)號(hào)查找并刪除一個(gè)結(jié)點(diǎn)數(shù)據(jù)void SaveFile(struct student *head) 保存數(shù)據(jù)到文件模塊struct student *LoadFile(void) 加載存儲(chǔ)在外部介質(zhì)的文件到內(nèi)存或?qū)胄畔⒛Kvoid help()顯示幫助信息和系統(tǒng)信息*/void PassWord()登錄密碼驗(yàn)證int menu_select(void)顯示菜單并獲得用戶鍵盤輸入的選項(xiàng)*void main()程序從主函數(shù)開始執(zhí)行系統(tǒng)主要功能的實(shí)現(xiàn)過(guò)程和方法。創(chuàng)建鏈表。在界面狀態(tài)下,輸入1后調(diào)用struct student *create(void) 函數(shù)創(chuàng)建動(dòng)態(tài)鏈表,即提示輸入初始的學(xué)生信息,其中包括學(xué)生的學(xué)號(hào)、班級(jí)、姓名、和高等數(shù)學(xué)、C程序設(shè)計(jì)、大學(xué)英語(yǔ)、馬克思、大學(xué)體育的成績(jī),若學(xué)號(hào)為0退出返回主菜單。學(xué)號(hào)是整型,長(zhǎng)度要求10位而且必須是數(shù)字,班級(jí)和姓名是字符數(shù)組型而且長(zhǎng)度為20,成績(jī)是浮點(diǎn)型(輸出成績(jī)時(shí)可只輸出1位小數(shù)或2位小數(shù))。都輸入完成后,系統(tǒng)調(diào)用void TotalScore(struct student *head) 函數(shù)計(jì)算每個(gè)學(xué)生的總成績(jī)和平均成績(jī),還可以調(diào)用void SaveFile(struct student *head) 函數(shù)對(duì)指定的文件進(jìn)行寫操作,把輸入到動(dòng)態(tài)鏈表的所有學(xué)生信息保存到文件中。在輸入記錄過(guò)程中若學(xué)號(hào)輸入0則返回主菜單。插入記錄。在界面狀態(tài)下,輸入2后調(diào)用struct student *InsertStudent(struct student *head) 函數(shù)在動(dòng)態(tài)鏈表中插入一個(gè)學(xué)生的成績(jī)記錄,并且鏈表結(jié)點(diǎn)數(shù)加1。在插入記錄過(guò)程中若學(xué)號(hào)輸入0則返回主菜單。顯示記錄。在界面狀態(tài)下,輸入3后先調(diào)用void SortScore(struct student *head) 函數(shù)對(duì)學(xué)生成績(jī)排序并確定名次,而這個(gè)函數(shù)運(yùn)用冒泡法進(jìn)行排序,若后一結(jié)點(diǎn)的總成績(jī)比前一結(jié)點(diǎn)的高,則調(diào)用void IntSwap(int *pt1, int *pt2) 函數(shù)交換兩個(gè)整型數(shù)如學(xué)號(hào),調(diào)用void FloatSwap(float *pt1, float *pt2) 函數(shù)交換兩個(gè)實(shí)型數(shù)如成績(jī),調(diào)用void CharSwap(char *pt1, char *pt2) 函數(shù)交換兩個(gè)字符串如班級(jí)和姓名,交換兩個(gè)字符串要用到strcmp,strcpy函數(shù),排序完畢后再調(diào)用void PrintScore(struct student *head) 函數(shù)顯示所有已經(jīng)建立好的節(jié)點(diǎn)的節(jié)點(diǎn)號(hào)和該節(jié)點(diǎn)中數(shù)據(jù)項(xiàng)內(nèi)容,即按總成績(jī)從高到低排序后顯示動(dòng)態(tài)鏈表中所有學(xué)生的成績(jī)記錄。輸出所有記錄到屏幕上顯示后自動(dòng)則返回主菜單。查找記錄。在界面狀態(tài)下,輸入4后調(diào)用void SearchStudent(struct student *head)函數(shù),即先用一個(gè)struct student類型的指針變量接收輸入的學(xué)號(hào),再與動(dòng)態(tài)鏈表中各結(jié)點(diǎn)的學(xué)號(hào)一一比較,如果沒有則返回失敗信息,如果找到就將輸出此學(xué)生全部信息到屏幕上顯示出來(lái)。在查找記錄過(guò)程中若學(xué)號(hào)輸入0則提示找不到并返回主菜單。修改記錄。在界面狀態(tài)下,輸入5后調(diào)用void ModifyStudent(struct student *head) 函數(shù),即先用一個(gè)變量接受輸入的學(xué)號(hào),再與動(dòng)態(tài)鏈表中各結(jié)點(diǎn)的學(xué)號(hào)一一比較,如果沒有則返回失敗信息,如果找到就將提示輸入新的數(shù)據(jù)。在修改記錄過(guò)程中若學(xué)號(hào)輸入0則提示找不到并返回主菜單。刪除記錄。在界面狀態(tài)下,輸入6后調(diào)用struct student *DeleteStudent(struct student *head) 函數(shù),即先用一個(gè)變量接收輸入的學(xué)號(hào),再與動(dòng)態(tài)鏈表中各結(jié)點(diǎn)的學(xué)號(hào)一一比較,如果沒有則返回失敗信息,如果找到就將此記錄都向前移一位,并且鏈表結(jié)點(diǎn)數(shù)減1。在刪除記錄過(guò)程中若學(xué)號(hào)輸入0則提示找不到并返回主菜單。保存數(shù)據(jù)。在界面狀態(tài)下,輸入7后調(diào)用void SaveFile(struct student *head) 函數(shù),先用一個(gè)文件(FILE)類型結(jié)構(gòu)體的指針變量fp接收f(shuō)open(文件名,文件使用方式)函數(shù)的返回值(地址值),若打開操作失敗,其返回值為NULL(即地址值為0,是一個(gè)無(wú)效的指向)。若打開操作成功,返回值為指向被打開文件的文件信息區(qū)(結(jié)構(gòu)體變量)的起始地址,該返回值要立即賦值給文件類型指針變量(例:/FILE *fp)保存起來(lái),否則fopen函數(shù)返回值的丟失會(huì)導(dǎo)致無(wú)法對(duì)被打開的文件進(jìn)行操作。然后用fwrite(p,LEN,1,fp)函數(shù)寫入一條數(shù)據(jù)直到全部保存完畢,即移動(dòng)指針指向鏈表尾。最后使用fclose(fp)函數(shù)關(guān)閉文件。讀取數(shù)據(jù)。在界面狀態(tài)下,輸入8后調(diào)用struct student *LoadFile(void) 加載存儲(chǔ)在外部介質(zhì)的文件到內(nèi)存或?qū)胄畔⒛K讀取文件中所有學(xué)生的數(shù)據(jù)(包括班級(jí)、學(xué)號(hào)、姓名、成績(jī)等)到動(dòng)態(tài)鏈表。幫助。在界面狀態(tài)下,輸入8后調(diào)用void help()函數(shù),利用函數(shù)輸出幫助信息和系統(tǒng)信息。 退出??捎靡粋€(gè)函數(shù)exit(0)來(lái)實(shí)現(xiàn),可首先提示將信息保存到文件中,釋放動(dòng)態(tài)創(chuàng)建的內(nèi)存空間,再退出此程序。統(tǒng)計(jì)功能,因?yàn)榭紤]到原來(lái)給出的函數(shù)中竟然沒有對(duì)學(xué)生成績(jī)的統(tǒng)計(jì)功能,因此新增此功能,可以得出所有的記錄個(gè)數(shù),最高、最低、平均分,并輸出相關(guān)的學(xué)生信息等。以及統(tǒng)計(jì)及格和優(yōu)秀人數(shù),判斷成績(jī)大于等于60分的為及格,并統(tǒng)計(jì)人數(shù),判斷成績(jī)大于等于80分的為優(yōu)秀,并統(tǒng)計(jì)人數(shù),最后顯示在屏幕上。4. 代碼設(shè)計(jì)新增登錄密碼驗(yàn)證,將“char password7=123456; /*定義初始密碼*/”放在源代碼文件的開頭,將新定義函數(shù)void PassWord() 放到主函數(shù)void main()前,再在主函數(shù)中“printfn*n); /*操作界面*/”前插入“PassWord();”語(yǔ)句調(diào)用這個(gè)函數(shù)。/ Note:Your choice is C+ IDE/*#include iostream.h*/#include #include #include #include /*#define NULL 0*/ /*空地址*/#define LEN sizeof(struct student) /*結(jié)點(diǎn)的長(zhǎng)度*/#define NUM 5 /*定義課程的數(shù)目*/char password7=123456; /*定義初始密碼*/ /*高等數(shù)學(xué) C程序設(shè)計(jì) 大學(xué)英語(yǔ) 馬克思 大學(xué)體育*/ char subjectNUM10=math,c_prog,english,polity,sport; struct student /*聲明struct student類型*/ char class_020; /*班級(jí)*/int num; /*學(xué)號(hào)*/char name20; /*姓名*/float score5; /*成績(jī)*/float total; /*總分*/float ave; /*平均分*/struct student *next; int order; /*排名*/stu; /*定義struct student類型的變量stu*/int n,i; /*n為全局變量,統(tǒng)計(jì)鏈表的結(jié)點(diǎn)數(shù)*/ /*函數(shù)功能:創(chuàng)建鏈表,完成數(shù)據(jù)錄入功能*/ struct student *create(void) /*函數(shù)返回值為指向struct student類型數(shù)據(jù)的地址*/ struct student *p1,*p2,*head; /*定義struct student類型的指針變量p1,p2,head*,*p1指向某一結(jié)點(diǎn),p2指向p1的前一結(jié)點(diǎn)*/n=0; head=NULL; /*頭指針head為空地址,無(wú)效指向*/p1=p2=(struct student *)malloc(LEN); /*新開辟長(zhǎng)度為L(zhǎng)EN的內(nèi)存區(qū)并強(qiáng)制指針類型為struct student*/printf(1.creat a linked list to student data.n); printf(2.number:int type, class: char type20,name: char type 20, score:float type.n); printf(3.input number of student,if number is 0,stop inputing.n); printf(number:); scanf(%d,&p1-num); while(p1-num!=0) /*若為0則退出輸入*/ printf(class:); scanf(%s,p1-class_0); printf(name:); scanf(%s,p1-name); printf(input math,c_prog,english,polity,sport score.n); for(i=0;iscorei); printf(*success*n); n=n+1; if(n=1) /*n=1或head=NULL*/head=p1; /*第一個(gè)結(jié)點(diǎn)的生成*/ else p2-next=p1; /*把新結(jié)點(diǎn)的地址放到當(dāng)前鏈表的尾結(jié)點(diǎn)即上一節(jié)點(diǎn)后面*/p2=p1; /*p2保存p1原本指向的地址,使p2指向p1原來(lái)指向的節(jié)點(diǎn)*/ p1=(struct student *)malloc(LEN); /*p1指向新申請(qǐng)到的節(jié)點(diǎn)*/ printf(input number of student,if number is 0,stop inputing.n); printf(number:); scanf(%d,&p1-num); p2-next=NULL; /*第一個(gè)結(jié)點(diǎn)未生成,則分配域首字節(jié)的地址(指針)為空地址*/ return(head); /*返回鏈表的頭地址*/ /*函數(shù)功能:計(jì)算每個(gè)學(xué)生的總成績(jī)和平均成績(jī)*/ void TotalScore(struct student *head) struct student *p1; p1=head; /*p1指向表頭*/while (p1!= NULL) /*若不是表尾,則循環(huán)*/ p1-total=0; for (i=0;itotal+=p1-scorei; p1-ave=p1-total/ NUM; p1=p1-next; /*讓p指向下一個(gè)節(jié)點(diǎn)*/ /*函數(shù)功能:交換兩個(gè)整型數(shù)*/ void IntSwap(int *pt1, int *pt2) int temp; temp = *pt1; *pt1 = *pt2; *pt2 = temp; /*函數(shù)功能:交換兩個(gè)實(shí)型數(shù)*/ void FloatSwap(float *pt1, float *pt2) float temp; temp = *pt1; *pt1 = *pt2; *pt2 = temp; /*函數(shù)功能:交換兩個(gè)字符串*/ void CharSwap(char *pt1, char *pt2) char temp15; strcpy(temp, pt1); strcpy(pt1, pt2); strcpy(pt2, temp); /*函數(shù)功能:對(duì)學(xué)生成績(jī)排序并確定名次*/ void SortScore(struct student *head) struct student *pt; int flag=0,a=0; /*flag是有沒有發(fā)生過(guò)交換的標(biāo)志*/ if(head=NULL) printf(nlist null!n); goto end; do flag=0; pt=head; /*若后一個(gè)節(jié)點(diǎn)的總成績(jī)比前一個(gè)節(jié)點(diǎn)的總成績(jī)高,則交換兩個(gè)節(jié)點(diǎn)中的數(shù)據(jù) 注意只交換節(jié)點(diǎn)數(shù)據(jù),而節(jié)點(diǎn)順序不變,即節(jié)點(diǎn)next指針內(nèi)容不進(jìn)行交換*/ while(pt-next!=NULL) if (pt-next-totalpt-total) CharSwap(pt-class_0, pt-next-class_0); IntSwap(&pt-num, &pt-next-num); CharSwap(pt-name, pt-next-name); for (i=0; iscorei, &pt-next-scorei); FloatSwap(&pt-total, &pt-next-total); FloatSwap(&pt-ave, &pt-next-ave); flag=1; pt=pt-next; while(flag); /*如果flag為0,說(shuō)明第一輪沒有發(fā)生過(guò)交換,每一個(gè)結(jié)點(diǎn)的總分都比后一結(jié)點(diǎn)都大,退出*/ pt=head; while(pt!=NULL) a+; pt-order=a; pt=pt-next; end: printf(); /*函數(shù)功能:按學(xué)號(hào)插入一個(gè)結(jié)點(diǎn)數(shù)據(jù)*/ struct student *InsertStudent(struct student *head) struct student *p1,*p2,*info,*k; /*p1指向插入位置,p2是其前一結(jié)點(diǎn),info指新插入記錄*/ int n=0; printf(input a new record,if number is 0,exit insert.n); info=(struct student *)malloc(LEN); /*申請(qǐng)空間*/ if(!info) printf(nout of memory! ); /*如沒有申請(qǐng)到,內(nèi)存溢出*/ return NULL; /*返回空指針*/ printf(number:); scanf(%d,&info-num); while(info-num!=0) /*若為0則退出輸入*/printf(class:); scanf(%s,info-class_0); printf(name:); scanf(%s,info-name); printf(input math,c_prog,english,polity,sport score.n); for(i=0;iscorei); TotalScore(info); info-next=NULL; /*設(shè)后繼指針為空*/ p1=p2=head; /*將指針賦值給p1,p2*/ if(head=NULL)/*鏈表為空*/ head=info; info-next=NULL; else while(info-totaltotal)&(p1-next!=NULL) p2=p1; /*使p2指向p1剛才的結(jié)點(diǎn)*/ p1=p1-next; /*使p1后移一個(gè)結(jié)點(diǎn)*/ if(info-total=p1-total) if(head=p1) head=info; /*info作為頭指針*/ info-next=p1; /*p1作為info的后繼指針*/ else p2-next=info; /*p2的后繼指針是info*/ info-next=p1; /*info的后繼指針是p1*/ else p1-next=info; info-next=NULL; /*p1的后繼指針是info,info的后繼指針是空*/ k=head; while(k!=NULL) /*重新賦予排序號(hào)(排序號(hào)因?yàn)楸徊迦胄聰?shù)據(jù)而改變)*/ n+; k-order=n; k=k-next; printf(nhave inserted the student!n); printf(number:); scanf(%d,&info-num); return(head); /*返回頭指針*/ /*函數(shù)的功能:顯示所有已經(jīng)建立好的節(jié)點(diǎn)的節(jié)點(diǎn)號(hào)和該節(jié)點(diǎn)中數(shù)據(jù)項(xiàng)內(nèi)容*/ void PrintScore(struct student *head) struct student *p=head; /*p指向表頭*/ if(head=NULL) goto end; printf(f*All students achievement statistics and rank*n);while (p!=NULL) /*若不是表尾,則循環(huán)打印*/ printf(n class:%-20s num:%-7d name:%-20sn, p-class_0, p-num,p-name); printf(n math | c_prog | english | polity | sport n); for(i=0;iscorei); printf(n total:%-7.2f ave:%-7.2f order:%dn, p-total, p-ave,p-order); printf(n); p=p-next; /*讓p指向下一個(gè)結(jié)點(diǎn)*/ printf(*%d students*n,n);end: printf(); /*函數(shù)功能:按學(xué)號(hào)查找并顯示一個(gè)結(jié)點(diǎn)數(shù)據(jù)*/ void SearchStudent(struct student *head) struct student *p=head; int b; /*存放學(xué)號(hào)的變量*/ printf(inuput the sdudent number you want to find:); scanf(%d,&b); /*輸入學(xué)號(hào)*/ if(head=NULL) printf(nlist null!n); goto end; while(p!=NULL)/*當(dāng)記錄的指針不為空時(shí)*/ if(p-num=b)/*顯示找到的記錄信息*/ printf(f*The student data search*n); printf(n class:%-20s num:%-7d name:%-20sn, p-class_0, p-num,p-name); printf(n math | c_prog | english | polity | sport n); for(i=0;iscorei); printf(n total:%-7.2f ave:%-7.2f order:%dn, p-total, p-ave,p-order); printf(*end*n); break; else p=p-next; /*移動(dòng)指針,指向下一結(jié)點(diǎn),繼續(xù)查找*/ if(p=NULL) /*指針為空,說(shuō)明未能找到所要的結(jié)點(diǎn)*/ printf(can not find the sdudent number %d !n,b); end: printf(); /*函數(shù)功能:按學(xué)號(hào)查找并修改一個(gè)結(jié)點(diǎn)數(shù)據(jù)*/ void ModifyStudent(struct student *head) struct student *p=head; int number; /*存放學(xué)號(hào)的變量*/ printf(inuput the sdudent number you want to modify,if number is 0,exit modify.n); printf(number:); scanf(%d,&number); if(head=NULL) printf(nList null!n); goto end; while(p!=NULL)/*當(dāng)記錄的指針不為空時(shí)*/ if(p-num=number) printf(inuput new data of the student.n); printf(number:); scanf(%d,&p-num); printf(class:); scanf(%s,p-class_0); printf(name:); scanf(%s,p-name); printf(input math,c_prog,english,polity,sport score.n); for(i=0;iscorei); TotalScore(p); printf(inuput the sdudent number you want to modify,if number is 0,exit modify.n); printf(number:); scanf(%d,&number); else p=p-next; /*移動(dòng)指針,指向下一結(jié)點(diǎn),繼續(xù)查找*/ if(p=NULL) /*指針為空,說(shuō)明未能找到所要的結(jié)點(diǎn)*/ printf(can not find the number %d!n,number); end: printf(); /*函數(shù)功能:按學(xué)號(hào)查找并刪除一個(gè)結(jié)點(diǎn)數(shù)據(jù)*/ struct student *DeleteStudent(struct student *head) struct student *p1,*p2; int number; printf(please input the number you want to deleted:); scanf(%d,&number); if(head=NULL) /*沒有數(shù)據(jù)的空鏈表*/ printf(nlist null!n); p1=head; /*優(yōu)先級(jí)從高到低- != &*/while(number!=p1-num&p1-next!=NULL) /*p1指向的不是所要找的結(jié)點(diǎn),并且后面還有結(jié)點(diǎn)*/ p2=p1; p1=p1-next; /*p1向后移一個(gè)結(jié)點(diǎn)*/ if(number=p1-num) if(p1=head) head=p1-next; /*若p1指向的是首結(jié)點(diǎn),把第二個(gè)結(jié)點(diǎn)地址賦給head*/ else p2-next=p1-next; /*否則將下一結(jié)點(diǎn)地址付給前一結(jié)點(diǎn)地址*/ printf(number %d student have been deleted!n,number); n=n-1; else printf(can not find number %d student.n,number);/*找不到該結(jié)點(diǎn)*/ return(head); /*文件(FILE)類型指針調(diào)用一個(gè)文件,需要以下信息:1文件當(dāng)前的讀寫位置。2與文件對(duì)應(yīng)的內(nèi)存緩沖區(qū)的地址。3文件操作方式。而這些信息是存放在緩沖文件系統(tǒng)為每一個(gè)文件開辟的“文件信息/區(qū)”內(nèi)(為一個(gè)結(jié)構(gòu)體變量),對(duì)FILE的定義是在stdio.h頭文件中,由系統(tǒng)事先指定的。其結(jié)構(gòu)如下:typedef strut short level; unsigned flags; char fd; unsigned char hold; short bsize; unsigned char *buffer; unsigned ar *curp; unsigned istemp; short token; FILE ; */*函數(shù)功能:保存數(shù)據(jù)到文件模塊*/ void SaveFile(struct student *head) FILE *fp; /*定義指向文件的指針*/ struct student *p; /* 定義移動(dòng)指針*/ char outfile20; /*保存輸出文件名*/ printf(enter outfile name,it can be any file name suffix or no suffix namesn);printf(for example D:f1score.txt or just a name:n);scanf(%s,outfile); /*fopen(文件名,文件使用方式);wb(只寫)為輸出打開一個(gè)二進(jìn)制文件執(zhí)行fopen函數(shù)有一個(gè)返回值(地址值)打開操作成功,為指向被打開文件的文件信息區(qū)(結(jié)構(gòu)體變量)的起始地址。該返回值要立即賦值給文件類型指針變量(例:FILE *fp)保存起來(lái),否則fopen函數(shù)返回值的丟失會(huì)導(dǎo)致無(wú)法對(duì)被/打開的文件進(jìn)行操作。打開操作失敗,其返回值為NULL(即地址值為0,是一個(gè)無(wú)效的指/向)。即通過(guò)fopen函數(shù)按指定的文件操作方式(wb(只寫)打開指定的文件(outfile)。并將文件信息區(qū)(結(jié)構(gòu)體變量)的起始地址賦值給文件指針變量fp。若打開操作失敗,則fp的值為NULL,此時(shí)輸出“不能打開該文件”的提示信息, */if(fp=fopen(outfile,wb)=NULL) /*為輸出打開一個(gè)二進(jìn)制文件,如沒有則建立*/ printf(can not open file!n); return; printf(nsaving file.n); /*打開文件,提示正在保存*/ p=head; /*移動(dòng)指針從頭指針開始*/ while(p!=NULL) /*如p不為空*/ fwrite(p,LEN,1,fp); /*寫入一條數(shù)據(jù)*/ p=p-next; /*指針后移*/ fclose(fp); /*關(guān)閉文件*/ printf(save success!n); /*顯示保存成功*/ /*函數(shù)功能:加載存儲(chǔ)在外部介質(zhì)的文件到內(nèi)存或?qū)胄畔⒛K*/ struct student *LoadFile(void) struct student *p,*q,*h=NULL; /*定義記錄指針變量*/ FILE *fp; /* 定義指向文件的指針*/ char infile20; /*保存文件名*/ printf(enter outfile name,it can be any file name suffix or no suffix namesn);printf(for example D:f1score.txt or just a name:n);scanf(%s,infile); /*輸入文件名*/ if(fp=fopen(infile,rb)=NULL) /*打開一個(gè)二進(jìn)制文件,為讀方式*/ printf(can not open file!n); /*如不能打開,返回頭指針*/ return h; printf(nloading file.n); p=(struct student *)malloc(LEN); /*申請(qǐng)空間*/ if(!p) printf(out of memory!n); /*如沒有申請(qǐng)到,則內(nèi)存溢出*/ return h; /*返回空頭指針*/ h=p; /*申請(qǐng)到空間,將其作為頭指針*/ while(!feof(fp) /*循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束*/ if(1!=fread(p,LEN,1,fp) break; /*如果沒讀到數(shù)據(jù),跳出循環(huán)*/ p-next=(struct student *)malloc(LEN); /*為下一個(gè)結(jié)點(diǎn)申請(qǐng)空間*/ if(!p-next) printf(out of memory!n); /*如沒有申請(qǐng)到,則內(nèi)存溢出*/ return h; q=p; /*保存當(dāng)前結(jié)點(diǎn)的指針,作為下一結(jié)點(diǎn)的前驅(qū)*/ p=p-next; /*指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾*/ q-next=NULL; /*最后一個(gè)結(jié)點(diǎn)的后繼指針為空*/ fclose(fp); /*關(guān)閉文件*/ printf(load success!n); return h; /*返回頭指針*/ /*函數(shù)功能:顯示幫助信息和系統(tǒng)信息*/ void help()int digit; /*由于窗口面積有限,一次只能看到幾條幫助信息,故輸入1只能查看功能1.2.3的幫助信息*/ printf(input 1 and look help information of Function 1.2.3.n); printf(input 2 and look help information of Function 4.5.6.n); printf(input 3 and look help information of Function 7.8.9.0.n); scanf(%d, &digit); printf(*Help*nn); switch(digit) case 1:printf(1.Create a new list of students data n); printf(Input on academic performance and other information, and n);printf(automatically calculate a total score and grade point averagenn); printf(2.Insert a student data n); printf(Insert a record of student performance to the dynamic linked list.nn);printf(3.Output all students data n); printf(Sort highest to

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論